Customization options — petra lounge chair
Summary
-
Woven
(required)
— This option may appear depending on other selections.
-
Ivory White – 6764
-
Light Beige – 6807
-
Light Mocha – 6806
-
Earthy Brown – 6779
-
Brown – 6781
-
…and 4 more
Order woven swatch card .custom-add-to-cart{ display: flex; align-items: center; justify-content: center; width: 100%; height: 45px; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; line-height: 1; background: #edeae2; color: #321E1E; padding: 0 40px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Marra
(required)
— This option may appear depending on other selections.
-
Ronda Light – 139
-
Ronda Dark – 149
-
Awa Light – 239
-
Awa Dark – 249
-
Mesa Light – 339
-
…and 1 more
Order marra swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Chenille
(required)
— This option may appear depending on other selections.
-
Chenille Bone
-
Chenille Camel
-
Chenille Coffee
-
Chenille Forest
-
Chenille Onyx
Order chenille swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } if (!window.__customFabricAtcBound) { window.__customFabricAtcBound = true; document.addEventListener('click', async function(e){ const btn = e.target.closest('.custom-add-to-cart'); if(!btn) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if(!id) return; btn.setAttribute('disabled',''); try{ await fetch('/cart/add.js', { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({ items:[{ id: Number(id), quantity:1 }] }) }); document.dispatchEvent(new CustomEvent('cart:refresh')); } finally { btn.removeAttribute('disabled'); } }); }
-
Bouclé
(required)
— This option may appear depending on other selections.
-
Snow White – 018
-
Beige Sand – 019
-
Taupe Mist – 020
-
Honey Gold – 011
-
Grey – 010
-
…and 4 more
Order bouclé swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Suede
(required)
— This option may appear depending on other selections.
-
Soft Ivory – 003
-
Warm Taupe – 010
-
Classic Camel – 314
-
Dusty Taupe – 324
-
Rich Mocha – 330
-
…and 13 more
Order suede swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Corduroy
(required)
— <a href="https://loopandtwist.com/products/corduroy-fabric-card" target="_blank" rel="noopener noreferrer">Download fabric card</a>
— This option may appear depending on other selections.
-
Snow White – 1001
-
Light Grey – 1002
-
Light Beige – 1006
-
Beige – 1008
-
Light Brown – 1012
-
…and 8 more
-
Velvet
(required)
— This option may appear depending on other selections.
-
Midnight Black - 002
-
Espresso Brown - 084
-
Slate Grey - 076
-
Warm Grey - 026
-
Light Grey - 006
-
…and 23 more
Order velvet swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Faux Leather
(required)
— This option may appear depending on other selections.
-
Espresso Brown – 13725
-
Mocha Brown - 13724
-
Almond Beige – 13723
-
Toffee Brown – 62509
-
Caramel – 13721
-
…and 27 more
Order faux leather swatch card .custom-add-to-cart{ display: block; width: 100%; box-sizing: border-box; margin-top: -19px; cursor: pointer; letter-spacing: var(--button-letter-spacing); text-transform: uppercase; font: var(--button-font); font-size: 0.75rem !important; background: #edeae2; color: #321E1E; padding: 12px 20px; text-align: center; border-radius: 0; transition: background .2s, color .2s, border-color .2s; } .custom-add-to-cart:hover{ background:#321E1E; color:#EDEAE2; border-color:#321E1E; } .custom-add-to-cart[disabled]{ opacity:.5; cursor:default; } .custom-add-to-cart.is-unavailable{ cursor:not-allowed; } if (!window.__ltSwatchAtcV2) { window.__ltSwatchAtcV2 = true; const OOS_LABEL = 'Sample cards out of stock'; const productCache = new Map(); function getProduct(handle) { if (!productCache.has(handle)) { productCache.set(handle, fetch('/products/' + handle + '.js') .then(r => r.ok ? r.json() : null) .catch(() => null)); } return productCache.get(handle); } function markUnavailable(btn) { btn.textContent = OOS_LABEL; btn.setAttribute('disabled', ''); btn.classList.add('is-unavailable'); } // Accepts a product ID pasted in place of a variant ID, which is safe to // correct automatically while every swatch card is single-variant. function resolveVariant(product, id) { const match = product.variants.find(v => v.id === id); if (match) return match; if (product.id === id && product.variants.length === 1) return product.variants[0]; return null; } async function checkStock(btn) { if (btn.dataset.stockChecked) return; btn.dataset.stockChecked = '1'; const handle = btn.getAttribute('data-handle'); const id = Number(btn.getAttribute('variant-id')); if (!handle || !id) return; const product = await getProduct(handle); if (!product) { console.warn('[swatch] product not found:', handle); return; } const variant = resolveVariant(product, id); if (!variant) { console.error('[swatch] variant not found on', handle, id); return; } if (variant.id !== id) { console.warn('[swatch] corrected product ID to variant ID on', handle, id, '->', variant.id); btn.setAttribute('variant-id', variant.id); } if (!variant.available) markUnavailable(btn); } function scan() { document.querySelectorAll('.custom-add-to-cart').forEach(checkStock); } let queued = false; function queueScan() { if (queued) return; queued = true; requestAnimationFrame(function () { queued = false; scan(); }); } queueScan(); document.addEventListener('DOMContentLoaded', queueScan); new MutationObserver(queueScan) .observe(document.documentElement, { childList: true, subtree: true }); document.addEventListener('click', async function (e) { const btn = e.target.closest('.custom-add-to-cart'); if (!btn || btn.hasAttribute('disabled')) return; e.preventDefault(); const id = btn.getAttribute('variant-id'); if (!id) return; btn.setAttribute('disabled', ''); try { const res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [{ id: Number(id), quantity: 1 }] }) }); if (!res.ok) { const err = await res.json().catch(() => ({})); console.error('[swatch] add failed:', res.status, err); if (res.status === 422) markUnavailable(btn); return; } document.documentElement.dispatchEvent( new CustomEvent('cart:refresh', { bubbles: true }) ); } catch (err) { console.error('[swatch] add error:', err); } finally { if (!btn.classList.contains('is-unavailable')) btn.removeAttribute('disabled'); } }); }
-
Genuine Leather
(required)
— This option may appear depending on other selections.
-
Black
-
Panther
-
Forest Green
-
Mocha
-
Catalan
-
…and 47 more
-
Signature
(required)
— This option may appear depending on other selections.
-
Oat - 030
-
Stone - 040
-
Blossom - 200
-
Caramel - 310
-
Mocha - 350
-
…and 3 more