{"sections":{"main":{"type":"main-product","blocks":{"sale_info_eVcyLg":{"type":"sale_info","name":"Sale block - Sale","disabled":true,"settings":{"heading":"UP TO 30% OFF SITEWIDE","body":"<p>Sale ends soon. 15% off is applied sitewide. An additional 15% off orders of $500 CAD or more will be automatically applied at checkout. Discount applies to all items excluding already discounted items and cannot be combined with other promotions. This offer cannot be applied to past purchases. The 15-Day Free Return & Exchange policy for Store Credit apply to eligible items. Please refer to product pages for details.<\/p>","display_mode":"accordion","open_by_default":false,"color_scheme":"scheme-99a884a7-2a83-4bf1-8e24-ac9f77abb1b2","tag_mode":"include","tags":"non-sale,non-sale-jewelry"}},"custom_liquid_MmWJGj":{"type":"custom_liquid","name":"SALE BLOCK - STYLING","settings":{"spacing_bottom":"0","custom_liquid":"<style>\n.tsr-sale-block .product__accordion {\n  padding: 3%;\n    border-block-end: 0;\nborder-radius: 5px !important;\n}\n\n.tsr-sale-block.gradient {\n    border-radius: 5px;\n    overflow: hidden; \/* keep children contained within rounded corners *\/\n  }\n\n.tsr-sale-block .product__accordion .accordion__body-inner {\npadding-inline-end: 0 !important;\npadding: 10px 0 5px 0;\n}\n\n.tsr-sale-block  .product__accordion .accordion__body p {\n    font-size: 80%;\n<\/style>"}},"sale_info_dCXi7w":{"type":"sale_info","name":"Sale block - BOXING WEEK","disabled":true,"settings":{"heading":"Buy One Get One FREE Extended","body":"<p>One use per customer. Offer ends 12\/31\/25 @ 11:59PM EST. The discount code <strong>BOGOFREE25 <\/strong>will be automatically applied at checkout when eligible items are added to cart. Promotion applies to all full-priced items sitewide, excluding sale items and clutches\/bags. Within each qualifying pair, the item of equal or lesser value will be discounted. All purchases made under this promotion are subject to The Saree Room’s standard 15-Day Return & Exchange Policy. Refunds are not permitted.<\/p>","display_mode":"accordion","open_by_default":false,"color_scheme":"scheme-99a884a7-2a83-4bf1-8e24-ac9f77abb1b2","tag_mode":"include","tags":"non-sale,non-sale-jewelry"}},"custom_liquid_PHN6QL":{"type":"custom_liquid","name":"Image Loading + Layout - Mobile","settings":{"spacing_bottom":"0","custom_liquid":"<script>\n(function () {\n  \/\/ Treat mobile as <= 749px to match your breakpoints\n  const isMobile = () => window.matchMedia('(max-width: 749px)').matches;\n\n  \/\/ Intercept colour swatch changes that use data-product-url\n  function bindMobileRedirects(ctx=document) {\n    ctx.querySelectorAll('.variant-option-radio-input[data-product-url]').forEach(input => {\n      \/\/ Avoid duplicate listeners\n      if (input._tsrBound) return; input._tsrBound = true;\n\n      input.addEventListener('change', (e) => {\n        const url = input.dataset.productUrl;\n        if (!url) return;\n\n        \/\/ On mobile, do a real navigation instead of AJAX swap\n        if (isMobile()) {\n          \/\/ Optional: keep scroll position on back\n          if ('scrollRestoration' in history) history.scrollRestoration = 'manual';\n          window.location.assign(url);\n        } else {\n          \/\/ Desktop: let your existing AJAX\/Combined Listings behavior run\n        }\n      }, true);\n    });\n  }\n\n  \/\/ Run now and whenever the section is re-rendered\n  document.addEventListener('DOMContentLoaded', () => bindMobileRedirects());\n  document.addEventListener('shopify:section:load', e => bindMobileRedirects(e.target));\n\n  \/\/ Defensive: also bind after any change (some apps replace nodes silently)\n  ['variant:change','product:variant-change','combinedlistings:change','change']\n    .forEach(evt => document.addEventListener(evt, () => bindMobileRedirects(), true));\n})();\n<\/script>\n\n<style>\n@media (max-width: 749px) {\n  .shopify-section.main-product > .color-scheme-1.gradient {\n    padding-block-start: 0 !important;\n  }\n}\n<\/style>"}},"custom_liquid_WKdWrF":{"type":"custom_liquid","name":"Product Title Style","settings":{"spacing_bottom":"0","custom_liquid":"<style>\n.product__title {\n  font-weight: 300;\n  text-transform: uppercase;\n  letter-spacing: 2px;\n}\n<\/style>"}},"badge_Hkd38r":{"type":"badge","settings":{"spacing_bottom":"1","show_badges":true,"show_badges_discount":true,"show_badges_sold":true}},"1e0c79e9-7de0-4eee-b9c5-f27132635fb8":{"type":"title","settings":{"heading_size":"h6","spacing_bottom":"1"}},"8effeb43-55b7-4ec4-ab9b-68bcd89b865b":{"type":"price","settings":{"spacing_bottom":"1","show_price_tax_info":false,"show_price_shipping_info":false,"show_price_custom_info":""}},"custom_liquid_qNBhEc":{"type":"custom_liquid","name":"Dynamic Final Sale Tag + Hide Exchange + Return Blocks","settings":{"spacing_bottom":"0","custom_liquid":"{% if product.tags contains 'final-sale' %}\n  {% assign tsr_final_sale_reason = 'Final sale. No returns or exchanges.' %}\n  {% if product.tags contains 'jewelry' %}\n    {% assign tsr_final_sale_reason = 'Final sale for hygienic reasons (jewelry). No returns or exchanges.' %}\n  {% elsif product.tags contains 'underskirt' %}\n    {% assign tsr_final_sale_reason = 'Final sale because this is an undergarment (Volume Underskirt). No returns or exchanges.' %}\n  {% elsif product.tags contains 'clutch' %}\n    {% assign tsr_final_sale_reason = 'Final sale due to the delicate nature of clutches. No returns or exchanges.' %}\n  {% elsif product.tags contains 'lastchance' %}\n    {% assign tsr_final_sale_reason = 'Final sale due to markdown\/clearance. No returns or exchanges.' %}\n  {% endif %}\n\n  <div class=\"tsr-final-sale product__block product__block--gap-1 font-size-sm\" data-tsr-final-sale>\n    <div class=\"product__text--body-wrapper\">\n      <div class=\"product__text--body no-animation\">\n\n        <!-- Clickable trigger -->\n        <button type=\"button\" class=\"tsr-final-sale__trigger\" aria-expanded=\"false\" aria-controls=\"tsr-final-sale-popover\">\n          <svg class=\"tsr-final-sale__i\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"1.15em\" height=\"1.15em\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"#990000\" stroke-width=\"2\"\/>\n            <line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"16\" stroke=\"#990000\" stroke-width=\"2\" stroke-linecap=\"round\"\/>\n            <circle cx=\"12\" cy=\"7\" r=\"1.2\" fill=\"#990000\"\/>\n          <\/svg>\n          <span class=\"tsr-final-sale__label\">Final Sale<\/span>\n        <\/button>\n\n        <!-- Popover (fixed-positioned; JS sets coords) -->\n        <div class=\"tsr-final-sale__popover\" id=\"tsr-final-sale-popover\" role=\"dialog\" aria-live=\"polite\">\n          <p class=\"tsr-final-sale__text\">\n            {{ tsr_final_sale_reason }}\n            <a href=\"https:\/\/www.thesareeroom.com\/pages\/sale-terms-conditions\" class=\"tsr-final-sale__link\">See Sale Terms.<\/a>\n          <\/p>\n        <\/div>\n\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <style>\n    .tsr-final-sale {\n      --tsr-red: #990000;\n      --tsr-gap: 1rem; \/* matches ✓ rows *\/\n      color: var(--tsr-red);\n    }\n\n    .tsr-final-sale__trigger{\n      all: unset;\n      display: inline-flex;\n      align-items: center;\n      gap: .6rem;\n      color: var(--tsr-red);\n      font-weight: 400;\n      cursor: pointer;\n      line-height: 1.2;\n      font-size: var(--font-size-static-md);\n    }\n    .tsr-final-sale__trigger:focus-visible{\n      outline: 2px solid var(--tsr-red);\n      outline-offset: 2px;\n      border-radius: .375rem;\n    }\n    .tsr-final-sale__i{ flex: 0 0 auto; }\n\n    \/* Popover styled box; we will place it with JS (position:fixed) *\/\n    .tsr-final-sale__popover{\n      position: fixed; \/* ← important *\/\n      top: 0; left: 0; \/* JS will overwrite *\/\n      transform: translate(0,0); \/* no translateY; JS centers vertically *\/\n      background: #fff;\n      border: 1px solid rgba(0,0,0,.12);\n      box-shadow: 0 8px 24px rgba(0,0,0,.16);\n      border-radius: .6rem;\n      padding: .85rem 1rem;\n      min-width: 300px;\n      max-width: 420px;\n      display: none;\n      z-index: 2000; \/* above product area *\/\n      font-size: 1rem;\n      line-height: 1.45;\n      color: var(--color-foreground,#222);\n    }\n    .tsr-final-sale__popover.is-visible{ display:block; }\n    .tsr-final-sale__link{ color: inherit; text-decoration: underline; }\n\n    \/* You had this — leaving it intact *\/\n    .product__text--body svg { width: 2rem; }\n  <\/style>\n\n  <script>\n    (function(){\n      var root = document.querySelector('[data-tsr-final-sale]');\n      if(!root) return;\n      var trigger = root.querySelector('.tsr-final-sale__trigger');\n      var pop = root.querySelector('.tsr-final-sale__popover');\n      var gap = 16; \/\/ 1rem fallback; exact value not used for placement now\n\n      function placePopover(){\n        var t = trigger.getBoundingClientRect();\n\n        pop.style.visibility = 'hidden';\n        pop.style.display = 'block';\n        var pw = pop.offsetWidth;\n        var ph = pop.offsetHeight;\n\n        var vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n        var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n        var padding = 12;\n\n        \/\/ Preferred: RIGHT of trigger\n        var left = t.right + gap;\n        var top = Math.max(padding, Math.min(t.top + (t.height\/2) - (ph\/2), vh - ph - padding));\n\n        \/\/ If overflow on right, flip LEFT\n        if (left + pw > vw - padding) {\n          left = t.left - gap - pw;\n        }\n\n        \/\/ Clamp if still overflowing\n        left = Math.max(padding, Math.min(left, vw - pw - padding));\n\n        pop.style.left = left + 'px';\n        pop.style.top  = top  + 'px';\n\n        if (!pop.classList.contains('is-visible')) {\n          pop.style.display = 'none';\n        } else {\n          pop.style.visibility = 'visible';\n        }\n      }\n\n      function show(){\n        pop.classList.add('is-visible');\n        trigger.setAttribute('aria-expanded','true');\n        placePopover();\n        pop.style.visibility = 'visible';\n      }\n      function hide(){\n        pop.classList.remove('is-visible');\n        trigger.setAttribute('aria-expanded','false');\n        pop.style.display = 'none';\n      }\n\n      \/\/ Toggle popover\n      trigger.addEventListener('click', function(e){\n        e.stopPropagation();\n        pop.classList.contains('is-visible') ? hide() : show();\n      });\n      document.addEventListener('click', function(e){ if(!root.contains(e.target)) hide(); });\n      document.addEventListener('keydown', function(e){ if(e.key === 'Escape') hide(); });\n      window.addEventListener('resize', function(){ if(pop.classList.contains('is-visible')) placePopover(); });\n      window.addEventListener('scroll', function(){ if(pop.classList.contains('is-visible')) placePopover(); }, { passive: true });\n\n      \/* === HIDE SPECIFIC ICON ROWS WHEN FINAL SALE ===\n         - Scope to the same section as this block (safest)\n         - Hide ONLY rows whose <span> text is exactly \"Free Exchanges\" or \"15-Day Returns\"\n      *\/\n      var scope = root.closest('section') || document; \/\/ keep changes local to the product section\n\n      function hideReturnExchangeRows(ctx){\n        var spans = ctx.querySelectorAll('.product__content-grid-item span, .product__content-grid-item.icon span');\n        spans.forEach(function(span){\n          var t = (span.textContent || '').trim().toLowerCase();\n          if (t === 'free exchanges' || t === '15-day returns') {\n            var row = span.closest('.product__content-grid-item');\n            if (row) row.style.display = 'none';\n          }\n        });\n      }\n\n      \/\/ Initial hide\n      hideReturnExchangeRows(scope);\n\n      \/\/ Watch for dynamic updates (Shopify sections re-render)\n      var mo = new MutationObserver(function(muts){\n        \/\/ If new nodes are added inside the scope, try hiding again\n        muts.forEach(function(m){\n          if (m.addedNodes && m.addedNodes.length) {\n            hideReturnExchangeRows(scope);\n          }\n        });\n      });\n      mo.observe(scope, { childList: true, subtree: true });\n    })();\n  <\/script>\n{% endif %}"}},"description_qA3HqH":{"type":"description","settings":{"spacing_bottom":"4","behaviour":"plain","heading":"Product Details","text_truncate":2,"icon":"","metafield_for_product_variant":"","show_block_content":true}},"1e939cd6-0958-4135-a9e5-c50faef01437":{"type":"variant_picker","settings":{"spacing_bottom":"4","title":"Variant picker","enable_back_in_stock":true,"picker_type":"swatch","variant_options_with_thumbnails":"","size_guide_page":"{{ product.metafields.custom.size_guide.value }}","sizes_option":"Size"}},"custom_liquid_hh7UHc":{"type":"custom_liquid","name":"Sold out variant style + variant pill style","settings":{"spacing_bottom":"0","custom_liquid":"{%- comment -%}\nClickable \"Sold Out\" look for variant chips.\nApplies ONLY to variant labels (size\/length), NOT swatches and NOT the ATC button.\n{%- endcomment -%}\n\n<style>\n  \/* 1) Clone your theme's disabled look onto our custom class *\/\n  .product-option__label.tsr-oos {\n    border-color: rgba(var(--color-foreground), .15);\n    color: rgba(var(--color-foreground), .4);\n    background-color: transparent;\n    overflow: hidden;\n    position: relative;\n    cursor: pointer;\n    pointer-events: auto;\n  }\n\n  \/* 2) Soft fade overlay (keeps text legible but “washed”) *\/\n  .product-option__label.tsr-oos::before {\n    content: \"\";\n    position: absolute; inset: 0;\n    background: rgba(0,0,0,.02);\n    pointer-events: none;\n    border-radius: inherit;\n  }\n\n  \/* Thinner + lighter diagonal slash *\/\n  .product-option__label.tsr-oos::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(\n        135deg,\n        transparent calc(50% - 0.5px),\n        rgba(var(--color-foreground), .18) calc(50% - 0.5px),\n        rgba(var(--color-foreground), .18) calc(50% + 0.5px),\n        transparent calc(50% + 0.5px)\n      );\n    pointer-events: none;\n    border-radius: inherit;\n  }\n\n  \/* If the chip gets \"selected\" styling, mute it for OOS to stay consistent *\/\n  .product-option__input:checked + .product-option__label.tsr-oos {\n    box-shadow: none;\n    border-color: rgba(var(--color-foreground), .25);\n  }\n\n  \/* (Optional) tiny “Sold out” text for screen readers *\/\n  .tsr-vh {\n    position: absolute;\n    width: 1px; height: 1px; padding: 0; margin: -1px;\n    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;\n  }\n\n\n<\/style>\n\n<script>\n(function(){\n  var FORCE_CLICKABLE = true; \/\/ set to false if you DON'T want to override disabled\n\n  function markOOS(root){\n    var inputs = (root || document).querySelectorAll('.product-option__input.variant-option-radio-input');\n    inputs.forEach(function(input){\n      var label = document.querySelector('label[for=\"'+ input.id +'\"]');\n      if (!label) return;\n\n      var qtyAttr = input.getAttribute('data-variant-quantity');\n      var qty = qtyAttr == null ? null : parseInt(qtyAttr, 10);\n      var themeDisabled = input.disabled || input.classList.contains('disabled');\n      var isOOS = themeDisabled || (qty !== null && !isNaN(qty) && qty <= 0);\n\n      if (isOOS) {\n        label.classList.add('tsr-oos');\n\n        \/\/ Optional SR-only hint\n        if (!label.querySelector('.tsr-vh')) {\n          var sr = document.createElement('span');\n          sr.className = 'tsr-vh';\n          sr.textContent = ' (Sold out)';\n          label.appendChild(sr);\n        }\n\n        \/\/ Keep it clickable (if your theme disabled it)\n        if (FORCE_CLICKABLE && input.disabled) {\n          input.disabled = false;              \/\/ allow selection\n          input.classList.remove('disabled');  \/\/ some themes add this\n          input.setAttribute('data-tsr-oos', '1');\n        }\n      } else {\n        label.classList.remove('tsr-oos');\n        var srNode = label.querySelector('.tsr-vh');\n        if (srNode) srNode.remove();\n        if (input.hasAttribute('data-tsr-oos')) input.removeAttribute('data-tsr-oos');\n      }\n    });\n  }\n\n  \/\/ Initial run\n  markOOS(document);\n\n  \/\/ Re-run on changes and dynamic rerenders\n  document.addEventListener('change', function(e){\n    if (e.target && e.target.classList && e.target.classList.contains('variant-option-radio-input')) {\n      requestAnimationFrame(function(){ markOOS(document); });\n    }\n  });\n\n  var scope = document.querySelector('section[id^=\"product\"]') || document;\n  var mo = new MutationObserver(function(muts){\n    for (var i=0;i<muts.length;i++){\n      if (muts[i].addedNodes && muts[i].addedNodes.length) {\n        markOOS(scope);\n        break;\n      }\n    }\n  });\n  mo.observe(scope, { childList: true, subtree: true });\n})();\n<\/script>\n\n<style>\n  \/* ✅ Pill layout ONLY for text variants (Size\/Length) — excludes swatches AND never targets ATC *\/\n  .product__variant-picker fieldset.product__variant-options.product-form__input--button:not(:has(.product-option__swatch)) {\n    display: flex !important;\n    flex-wrap: nowrap !important; \/* Prevent wrapping *\/\n    justify-content: space-between !important;\n    gap: 8px !important;\n    margin-bottom: 32px !important;\n    padding: 0 !important;\n    width: 100% !important;\n  }\n\n  \/* Each size\/length option pill — only labels inside those fieldsets *\/\n  .product__variant-picker fieldset.product__variant-options.product-form__input--button:not(:has(.product-option__swatch)) > label {\n    flex: 1 1 auto !important;\n    min-width: 0 !important;\n    padding: 10px !important;\n    border-radius: 10px !important;\n    text-align: center;\n    height: 3.6rem !important;        \/* keeps pill height consistent *\/\n    line-height: 3.6rem !important;   \/* vertically centers text *\/\n  }\n\n  \/* Container full-width cleanup (variants wrapper only) *\/\n  .product__variant-picker {\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 0 !important;\n    margin: 0 !important;\n  }\n\n  \/* Spacing for variant groups; ATC row uses .product-form__buttons (not touched) *\/\n  .product__variant-picker .product-form__input {\n    margin-bottom: 30px !important;\n  }\n<\/style>"}},"1e939cd6-0955-4135-a9e5-c50faef01437":{"type":"purchase_options","settings":{"spacing_bottom":"1","show_subscription_title":true,"show_subscription_custom_info":"","show_subscription_policy":true}},"8604a6ff-ad0b-44dd-8068-1de4e062f8e8":{"type":"buy_buttons","settings":{"spacing_bottom":"1","show_quantity":true,"layout":"inline","show_dynamic_checkout":false,"show_gift_card_recipient":false}},"custom_liquid_cdFV93":{"type":"custom_liquid","name":"Stoq Notify Me Button","disabled":true,"settings":{"spacing_bottom":"0","custom_liquid":"<style>\n  \/* Put the RR button in the same layout as ATC and span full width *\/\n  .product-form__buttons .restock-rocket-button-container{\n    grid-column: 1 \/ -1;     \/* ← full width across the grid *\/\n    width: 100%;\n    margin-top: var(--button-group-gap, 10px);\n    position: relative;\n  }\n\n  \/* Make the RR button look like .product-form__submit.button.button--filled.button--full *\/\n  .restock-rocket-button{\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 100% !important;\n    min-height: var(--button-min-height, 56px) !important;\n    padding: 0 var(--button-padding-inline, 2rem) !important;\n\n    border: none !important;\n    border-radius: var(--button-border-radius, 9999px) !important; \/* pill like ATC *\/\n    background-color: var(--color-button, var(--color-foreground)) !important;\n    color: var(--color-button-text, var(--color-background)) !important;\n\n    font: inherit !important;\n    font-weight: var(--font-button-weight, 600) !important;\n    text-transform: uppercase !important;\n    letter-spacing: var(--button-letter-spacing, .06em) !important;\n    line-height: 1 !important;\n    box-shadow: var(--button-shadow, none) !important;\n    transition: background-color .2s ease, color .2s ease, box-shadow .2s ease !important;\n  }\n\n  .restock-rocket-button:hover,\n  .restock-rocket-button:focus-visible{\n    background-color: var(--color-button-hover, #000) !important;\n    color: var(--color-button-text-hover, #fff) !important;\n    outline: none !important;\n  }\n\n  \/* Make the clickable cover match the pill shape and not look boxy *\/\n  .restock-rocket-button-cover{\n    border-radius: var(--button-border-radius, 9999px) !important;\n  }\n\n  \/* Safety: prevent any fixed widths injected by the app *\/\n  .restock-rocket-button,\n  .restock-rocket-button-container{ max-width: 100% !important; }\n<\/style>\n\n<script>\n\/* If the app rendered the button outside the .product-form__buttons grid,\n   move it so it sits exactly where the ATC lives. *\/\n(function(){\n  var rr = document.querySelector('.restock-rocket-button-container');\n  var group = document.querySelector('.product-form__buttons');\n  if (rr && group && rr.parentElement !== group) group.appendChild(rr);\n\n  \/* If you want the RR button directly AFTER the ATC button: *\/\n  var atc = document.querySelector('.product-form__submit.button');\n  if (rr && atc && atc.nextSibling !== rr) atc.parentNode.insertBefore(rr, atc.nextSibling);\n})();\n<\/script>"}},"custom_liquid_8DY4r7":{"type":"custom_liquid","name":"Attentive Back In Stock Button","settings":{"spacing_bottom":"0","custom_liquid":"<script id=\"attn-waitlist-eligibility\" type=\"application\/json\">{\n{%- liquid\n  assign out = ''\n  for v in product.variants\n    assign oos = false\n    if v.available == false\n      assign oos = true\n    elsif v.inventory_management and v.inventory_quantity <= 0\n      assign oos = true\n    endif\n    assign pair = '\"' | append: v.id | append: '\": ' | append: oos\n    assign out = out | append: pair\n    unless forloop.last\n      assign out = out | append: ', '\n    endunless\n  endfor\n  echo out\n-%}\n}<\/script>\n\n<div id=\"attn-waitlist-trigger\"><\/div>\n\n<style>\n  \/* Keep wrapper transparent; Attentive injects its own <button> *\/\n  #attn-waitlist-trigger {\n    background: transparent !important;\n    border: none !important;\n    padding: 0 !important;\n    display: none;                 \/* JS will show\/hide *\/\n    width: 100%;\n  }\n\n  \/* Place trigger in the same grid slot as ATC when inside .product-form__buttons *\/\n  .product-form__buttons #attn-waitlist-trigger { grid-column: span 7 \/ span 7; }\n\n  \/* Style ONLY the inner button Attentive injects (match ATC: black\/white + invert on hover) *\/\n  #attn-waitlist-trigger button,\n  #attn-waitlist-trigger [role=\"button\"] {\n    display: inline-block;\n    width: 100%;\n    text-align: center;\n    border: 0;\n    border-radius: var(--button-border-radius, 4px);\n    padding: 1.6rem 2.4rem;\n    cursor: pointer;\n    font-family: var(--font-button-family, inherit);\n    font-size: calc(var(--font-button-scale,1) * 1rem);\n    line-height: 1.2;\n    font-weight: var(--font-button-weight,600);\n    letter-spacing: var(--font-button-letter-spacing,.05em);\n    text-transform: uppercase;\n    color: #fff !important;\n    background-color: #000 !important;\n    border: .1rem solid #000 !important;\n    transition: color .3s, background-color .3s, border-color .3s, opacity .2s;\n  }\n  #attn-waitlist-trigger button:hover,\n  #attn-waitlist-trigger button:focus-visible,\n  #attn-waitlist-trigger [role=\"button\"]:hover,\n  #attn-waitlist-trigger [role=\"button\"]:focus-visible {\n    color: #000 !important;\n    background-color: transparent !important;\n    border-color: #000 !important;\n    outline: none;\n  }\n<\/style>\n\n<script>\n(function(){\n  \/\/ ATC button (SOLD OUT state lives on this same element)\n  const atcBtn  = document.querySelector('form[action*=\"\/cart\/add\"] [type=\"submit\"]');\n  const trigger = document.getElementById('attn-waitlist-trigger');\n  const eligEl  = document.getElementById('attn-waitlist-eligibility');\n  if (!atcBtn || !trigger || !eligEl) return;\n\n  \/\/ Eligibility map: { \"variantId\": true|false }  (true => OOS\/eligible)\n  let ELIG = {};\n  try { ELIG = JSON.parse(eligEl.textContent || '{}'); } catch(e){ ELIG = {}; }\n\n  \/\/ Ensure trigger sits right after ATC (same row)\n  if (atcBtn.parentNode && trigger.parentNode !== atcBtn.parentNode) {\n    atcBtn.parentNode.insertBefore(trigger, atcBtn.nextSibling);\n  }\n\n  function currentVariantId(){\n    const idInput = document.querySelector('form[action*=\"\/cart\/add\"] [name=\"id\"]');\n    if (idInput && idInput.value) return idInput.value;\n    const p = new URLSearchParams(location.search);\n    return p.get('variant');\n  }\n\n  \/\/ Has Attentive mounted its inner button yet?\n  function attentiveReady(){\n    return !!trigger.querySelector('button, [role=\"button\"]');\n  }\n\n  function update(){\n    const vid = currentVariantId();\n    if (!vid) return;\n\n    \/\/ Helpful for some setups\n    trigger.setAttribute('data-variant-id', String(vid));\n\n    const eligible = !!ELIG[vid];\n\n    if (eligible && attentiveReady()) {\n      \/\/ Hide ATC (SOLD OUT) and show Attentive button in the same spot\n      atcBtn.style.display = 'none';\n      atcBtn.setAttribute('aria-hidden','true');\n      trigger.style.display = 'block';\n    } else {\n      \/\/ Show ATC (normal or SOLD OUT), hide Attentive trigger\n      atcBtn.style.display = '';\n      atcBtn.removeAttribute('aria-hidden');\n      trigger.style.display = 'none';\n    }\n  }\n\n  \/\/ Initial run\n  update();\n\n  \/\/ Re-run on variant changes \/ DOM updates\n  ['change','variant:change','variant:changed','product:variant-change','theme:variant:change','popstate']\n    .forEach(evt => {\n      window.addEventListener(evt, () => requestAnimationFrame(update));\n      document.addEventListener(evt, () => requestAnimationFrame(update));\n    });\n\n  \/\/ Attentive mounts its inner button asynchronously → watch for it\n  new MutationObserver(update).observe(trigger, { childList:true, subtree:true });\n\n  \/\/ Themes sometimes re-render the form → keep updating\n  const scope = document.querySelector('section[id^=\"product\"]') || document;\n  new MutationObserver(update).observe(scope, { childList:true, subtree:true, attributes:true, attributeFilter:['value'] });\n})();\n<\/script>"}},"e6d841d6-2f71-40b3-956a-912df13f9f6e":{"type":"inventory_notice","disabled":true,"settings":{"spacing_bottom":"1","inventory_threshold":21,"notice_just_text":true}},"b2dabe12-2158-4ba6-bc54-9baae453acf5":{"type":"text","disabled":true,"settings":{"spacing_bottom":"1","heading":"In Stock & Ready to Ship","icon":"theme-check","link_to_resource":"none","text_before_link":false,"heading_secondary":"","metafield_for_product_variant":"","show_block_content":true}},"text_trRftG":{"type":"text","disabled":true,"settings":{"spacing_bottom":"1","heading":"FREE Exchanges (Canada & USA)","icon":"theme-check","link_to_resource":"none","text_before_link":false,"heading_secondary":"15-Day Returns (Canada & USA)","metafield_for_product_variant":"","show_block_content":true}},"content_grid_iCJFCN":{"type":"content_grid","settings":{"heading":"Free Exchanges","icon":"theme-check-circle"}},"content_grid_W3Mqy6":{"type":"content_grid","settings":{"heading":"15-Day Returns","icon":"theme-check-circle"}},"content_grid_HTRRPP":{"type":"content_grid","settings":{"heading":"In Stock & Ready to Ship","icon":"theme-check-circle"}},"content_grid_AAkHkC":{"type":"content_grid","settings":{"heading":"Free Shipping on C$150+","icon":"theme-check-circle"}},"goback_KzEGGF":{"type":"goback","disabled":true,"settings":{"goback_style":"filled","goback_label":"Go back","display_goback_mobile":"on-media","show_on":"mobile"}},"complementary_products_tKerNK":{"type":"complementary_products","settings":{"spacing_bottom":"1","heading":"Paired with","icon":"option-heart","limit":4}},"content_tabs_3NAUzY":{"type":"content_tabs","settings":{"spacing_bottom":"1","heading":"","active_tab":"1","display_description":"none","heading_description":"","icon_description":"","heading_01":"Details","icon_01":"theme-plus","content_01":"<p>{{ product.metafields.custom.product_details | metafield_tag }}<\/p>","page_01":"","enable_tab_rule_01":false,"tab_rule_mode_01":"hide_on_match","tab_rule_tags_01":"","heading_02":"Materials","icon_02":"theme-plus","content_02":"<p>{{ product.metafields.custom.product_materials | metafield_tag }}<\/p>","page_02":"","enable_tab_rule_02":false,"tab_rule_mode_02":"hide_on_match","tab_rule_tags_02":"","heading_03":"Shipping & Returns","icon_03":"theme-plus","content_03":"<p>v<\/p>","page_03":"shipping-returns","enable_tab_rule_03":false,"tab_rule_mode_03":"hide_on_match","tab_rule_tags_03":"","heading_04":"","icon_04":"theme-box","content_04":"","page_04":"","enable_tab_rule_04":false,"tab_rule_mode_04":"hide_on_match","tab_rule_tags_04":"","heading_05":"","icon_05":"theme-box","content_05":"","page_05":"","enable_tab_rule_05":false,"tab_rule_mode_05":"hide_on_match","tab_rule_tags_05":"","heading_06":"","icon_06":"theme-box","content_06":"","page_06":"","enable_tab_rule_06":false,"tab_rule_mode_06":"hide_on_match","tab_rule_tags_06":""}}},"block_order":["sale_info_eVcyLg","custom_liquid_MmWJGj","sale_info_dCXi7w","custom_liquid_PHN6QL","custom_liquid_WKdWrF","badge_Hkd38r","1e0c79e9-7de0-4eee-b9c5-f27132635fb8","8effeb43-55b7-4ec4-ab9b-68bcd89b865b","custom_liquid_qNBhEc","description_qA3HqH","1e939cd6-0958-4135-a9e5-c50faef01437","custom_liquid_hh7UHc","1e939cd6-0955-4135-a9e5-c50faef01437","8604a6ff-ad0b-44dd-8068-1de4e062f8e8","custom_liquid_cdFV93","custom_liquid_8DY4r7","e6d841d6-2f71-40b3-956a-912df13f9f6e","b2dabe12-2158-4ba6-bc54-9baae453acf5","text_trRftG","content_grid_iCJFCN","content_grid_W3Mqy6","content_grid_HTRRPP","content_grid_AAkHkC","goback_KzEGGF","complementary_products_tKerNK","content_tabs_3NAUzY"],"custom_css":[],"settings":{"product_media_layout":"product__media-layout--grid","product_media_layout_mobile":"product__media-layout--full--sm","product_media_aspect_ratio":"2\/3","product_media_object_fit":"cover","product_slider_auto_height":true,"media_transparent_background":false,"display_media_zoom":"none","product_media_with_thumbs":"none","product_media_thumbs_ratio":"2\/3","product_media_thumbs_object_fit":"cover","gallery_arrows_show_on":"none","display_media_gallery_pagination":"lines","media_gallery_info":"","metafield_as_seen_on":"theme.as_seen_on","color_scheme_gallery":"","enable_sticky_info":true,"enable_actions_bar":true,"media_grid_size":"large","media_grid_position":"start","grid_gap":"2","spacing_grid":2,"grid_content_alignment":"start","section_width":"max-w-fluid","color_scheme":"scheme-1","spacing_top":"2","spacing_bottom":"1"}},"977cac03-4044-4567-8907-fa55103a47eb":{"type":"complete-the-set","blocks":{"collapsible_BxQcN6":{"type":"collapsible","disabled":true,"settings":{"block_type":"collapsible","heading":"Description","link":"","content":"<p>[description]<\/p>","page":""}},"collapsible_pR4zmY":{"type":"collapsible","settings":{"block_type":"drawer","heading":"Shipping & Returns","link":"","content":"","page":"shipping-returns-old"}},"collapsible_DYfCGt":{"type":"collapsible","settings":{"block_type":"collapsible","heading":"Model size & details","link":"","content":"<p>{{ product.metafields.custom.model_size.value }}<\/p>","page":""}},"collapsible_QcDnKh":{"type":"collapsible","settings":{"block_type":"drawer","heading":"Find your size","link":"shopify:\/\/pages\/sizing","content":"","page":"{{ product.metafields.custom.size_guide.value }}"}}},"block_order":["collapsible_BxQcN6","collapsible_pR4zmY","collapsible_DYfCGt","collapsible_QcDnKh"],"disabled":true,"settings":{"heading":"More info","content_heading":"Similar items","heading_size":"h4","content_type":"products","featured_image_aspect_ratio":"auto","open_first_collapsible":true,"flip_desktop":true,"flip_mobile":true,"section_width":"max-w-fluid","color_scheme":"","spacing_top":"6","spacing_bottom":"2"}},"recommendations":{"type":"product-recommendations","custom_css":[".button--filled {display: none !important;}"],"settings":{"layout":"layout-1","enable_slideshow_overflow":true,"heading":"You may also like","heading_size":"h4","subheading":"","button_label":"View all","button_link":"","button_style":"button--filled","show_navigation_arrows":true,"slider_autoplay":10,"tabs_button_style":"tab-btn-filled","max_products":12,"show_unavailable_products":false,"section_width":"max-w-fluid","color_scheme":"","spacing_top":"4","spacing_bottom":"4"}},"multitile_KDV8BX":{"type":"multitile","blocks":{"tile_qpzFf7":{"type":"tile","settings":{"show_on":"both","column_factor":3,"row_factor":1,"color_scheme":"","gradient_background_color":"","tile_aspect_ratio":"1\/1","content_position_vertical":"justify-center","content_alignment":"align-center text-center","content_alignment_for_mobile":"start","media_position":"background","heading":"","heading_size":"h3","text":"","button_label":"","button_link":"","button_style":"button--filled","video_external":"","show_controls_on_video":false,"video_external_mobile":"","show_controls_on_video_mobile":false,"spacing_inner":"2"}},"tile_kkJDV4":{"type":"tile","settings":{"show_on":"both","column_factor":3,"row_factor":2,"color_scheme":"","gradient_background_color":"","tile_aspect_ratio":"auto","content_position_vertical":"justify-center","content_alignment":"align-center text-center","content_alignment_for_mobile":"start","media_position":"background","heading":"","heading_size":"h3","text":"","button_label":"","button_link":"","button_style":"button--filled","video_external":"","show_controls_on_video":false,"video_external_mobile":"","show_controls_on_video_mobile":false,"spacing_inner":"2"}},"tile_aT3xD9":{"type":"tile","settings":{"show_on":"both","column_factor":3,"row_factor":1,"color_scheme":"scheme-8","gradient_background_color":"","tile_aspect_ratio":"auto","content_position_vertical":"justify-center","content_alignment":"align-center text-center","content_alignment_for_mobile":"start","media_position":"background","heading":"Amazing details. Organic fabrics.","heading_size":"h3","text":"","button_label":"","button_link":"","button_style":"button--filled","video_external":"","show_controls_on_video":false,"video_external_mobile":"","show_controls_on_video_mobile":false,"spacing_inner":"6"}}},"block_order":["tile_qpzFf7","tile_kkJDV4","tile_aT3xD9"],"disabled":true,"settings":{"block_order_mobile":false,"heading":"","heading_size":"h3","heading_alignment":"start","spacing_tile":"default","color_scheme":"","section_width":"max-w-fluid","spacing_top":"2","spacing_bottom":"2"}},"166904322806a89075":{"type":"apps","custom_css":[".junip-product-review-average-container {text-align: left;}",".junip-powered-by-footer {display: none;}"],"settings":{"section_layout":"normal","spacing_inner":"2","section_width":"max-w-page","color_scheme":"scheme-5","spacing_top":"4","spacing_bottom":"2"}},"custom_liquid_YpNr9W":{"type":"custom-liquid","name":"Junip Reviews - Custom Styling","settings":{"custom_liquid":"{% style %}\n.junip-btn {\n    --color-button-text: rgb(var(--color-filled-button-text));\n    --color-button-background: rgb(var(--color-filled-button));\n    --color-button-outline: rgb(var(--color-filled-button));\n    --color-button-hover-text: rgb(var(--color-filled-button));\n    --color-button-hover-background: transparent;\n    --color-button-hover-outline: rgb(var(--color-filled-button));\ntext-transform: var(--button-text-transform);\n\n    \/* Optional: inherit the same base button styling *\/\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 1.6rem 2.4rem !important;\n    font: inherit;\n    font-weight: var(--font-button-weight);\n    border-radius: var(--button-border-radius) !important;\n    border: 1px solid var(--color-button-outline);\n    color: var(--color-button-text);\n    background: var(--color-button-background);\n    transition: all 0.25s ease;\n    line-height: calc(1 + 0 \/ var(--font-button-scale)) !important;\n    letter-spacing: var(--font-button-letter-spacing);\nfont-size: calc(var(--font-button-scale) * 1rem) !important;\n}\n\n.junip-btn:hover {\n    color: var(--color-button-hover-text);\n    background: var(--color-button-hover-background);\n    border-color: var(--color-button-hover-outline);\n}\n\n\n\n{% endstyle %}","section_width":"max-w-page","color_scheme":"","spacing_top":"0","spacing_bottom":"0"}}},"order":["main","977cac03-4044-4567-8907-fa55103a47eb","recommendations","multitile_KDV8BX","166904322806a89075","custom_liquid_YpNr9W"]}