{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/theme.js?cb=20260726-1"],
  "sourcesContent": ["/* Sovereign \u2014 Crafted to Reign */\n\n(function () {\n  'use strict';\n\n  /* ---- Page transition: fade through black ---- */\n  (function () {\n    var fade = document.getElementById('page-fade');\n    if (!fade) return;\n\n    // ENTER: if we arrived via a transition, fade the cover out and rise the content in.\n    if (document.documentElement.classList.contains('is-entering')) {\n      requestAnimationFrame(function () {\n        requestAnimationFrame(function () {\n          document.documentElement.classList.remove('is-entering');\n          document.documentElement.classList.add('page-entered');\n        });\n      });\n    }\n    try { sessionStorage.removeItem('sovereign_page_fade'); } catch (e) {}\n\n    // Clear the cover if the page is restored from bfcache (back/forward).\n    window.addEventListener('pageshow', function () {\n      fade.classList.remove('is-active');\n      document.documentElement.classList.remove('is-entering');\n    });\n\n    if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n    // EXIT: intercept internal navigations and fade to black first.\n    document.addEventListener('click', function (e) {\n      if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n      var a = e.target.closest ? e.target.closest('a') : null;\n      if (!a) return;\n      var href = a.getAttribute('href');\n      if (!href) return;\n      if (a.target && a.target !== '_self') return;\n      if (a.hasAttribute('download')) return;\n      if (a.hasAttribute('data-cart-open')) return; // opens the cart drawer, not a navigation\n      if (/^(mailto:|tel:|sms:|#)/i.test(href)) return;\n\n      var url;\n      try { url = new URL(a.href, window.location.href); } catch (err) { return; }\n      if (url.origin !== window.location.origin) return;            // external \u2192 normal\n      if (url.pathname === window.location.pathname && url.hash) return; // same-page anchor\n\n      e.preventDefault();\n      try { sessionStorage.setItem('sovereign_page_fade', '1'); } catch (err) {}\n      fade.classList.add('is-active');\n      setTimeout(function () { window.location.href = a.href; }, 320);\n    });\n  })();\n\n  /* ---- Intro reveal: mark seen + clean up ---- */\n  (function () {\n    var intro = document.getElementById('sovereign-intro');\n    if (!intro) return;\n    if (document.documentElement.classList.contains('intro-seen')) {\n      intro.remove();\n      return;\n    }\n    try { sessionStorage.setItem('sovereign_intro_seen', '1'); } catch (e) {}\n    setTimeout(function () { if (intro && intro.parentNode) intro.remove(); }, 2400);\n  })();\n\n  /* ---- Sticky header shadow ---- */\n  const header = document.querySelector('.site-header');\n  if (header) {\n    const onScroll = () => {\n      header.classList.toggle('scrolled', window.scrollY > 10);\n    };\n    window.addEventListener('scroll', onScroll, { passive: true });\n    onScroll();\n  }\n\n  /* ---- Mobile menu toggle ---- */\n  const menuToggle = document.querySelector('.menu-toggle');\n  const nav = document.querySelector('.header-nav');\n  if (menuToggle && nav) {\n    var headerEl = document.querySelector('.site-header');\n    var setMenu = function (open) {\n      if (open && headerEl) {\n        // Anchor the fixed drop-panel to the header's current bottom edge (the header's\n        // height on screen changes once the announcement bar scrolls away).\n        document.documentElement.style.setProperty('--nav-top', Math.round(headerEl.getBoundingClientRect().bottom) + 'px');\n      }\n      nav.classList.toggle('is-open', open);\n      menuToggle.setAttribute('aria-expanded', open ? 'true' : 'false');\n      menuToggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');\n      // NOTE: do NOT set body{overflow:hidden} here \u2014 on iOS that un-sticks the sticky\n      // header (it jumps to its scrolled-away flow position), which made the header vanish\n      // and the menu appear over the product content. The drop-panel doesn't need a scroll\n      // lock.\n    };\n    menuToggle.addEventListener('click', function () {\n      setMenu(!nav.classList.contains('is-open'));\n    });\n    // Dedicated in-panel close (X) button\n    var menuClose = nav.querySelector('[data-menu-close]');\n    if (menuClose) {\n      menuClose.addEventListener('click', function (e) { e.stopPropagation(); setMenu(false); });\n    }\n    // Close when a link is tapped (so navigation feels natural)\n    nav.querySelectorAll('a').forEach(function (link) {\n      link.addEventListener('click', function () { setMenu(false); });\n    });\n    // Close on Escape\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && nav.classList.contains('is-open')) setMenu(false);\n    });\n  }\n\n  /* ---- Search drawer (inline predictive search) ---- */\n  (function () {\n    var drawer = document.querySelector('[data-search-drawer]');\n    var backdrop = document.querySelector('[data-search-backdrop]');\n    var input = document.querySelector('[data-search-input]');\n    var resultsEl = document.querySelector('[data-search-results]');\n    var toggles = document.querySelectorAll('[data-search-toggle]');\n    var closeBtn = document.querySelector('[data-search-close]');\n    if (!drawer || !input || !resultsEl || !toggles.length) return;\n\n    var open = function () {\n      drawer.classList.add('is-open');\n      drawer.setAttribute('aria-hidden', 'false');\n      if (backdrop) backdrop.hidden = false;\n      requestAnimationFrame(function () {\n        if (backdrop) backdrop.classList.add('is-visible');\n        input.focus();\n      });\n      toggles.forEach(function (t) { t.setAttribute('aria-expanded', 'true'); });\n    };\n    var close = function () {\n      drawer.classList.remove('is-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      if (backdrop) {\n        backdrop.classList.remove('is-visible');\n        setTimeout(function () { backdrop.hidden = true; }, 300);\n      }\n      toggles.forEach(function (t) { t.setAttribute('aria-expanded', 'false'); });\n    };\n\n    toggles.forEach(function (t) {\n      t.addEventListener('click', function (e) {\n        e.preventDefault();\n        if (drawer.classList.contains('is-open')) { close(); } else { open(); }\n      });\n    });\n    if (closeBtn) closeBtn.addEventListener('click', close);\n    if (backdrop) backdrop.addEventListener('click', close);\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && drawer.classList.contains('is-open')) close();\n    });\n\n    var money = function (cents) {\n      return '$' + (cents / 100).toFixed(2).replace(/\\.00$/, '');\n    };\n\n    var render = function (data, term) {\n      var r = (data && data.resources && data.resources.results) || {};\n      var products = r.products || [];\n      var pages = r.pages || [];\n      var articles = r.articles || [];\n      var html = '';\n\n      if (products.length) {\n        html += '<div class=\"search-drawer__group\"><p class=\"search-drawer__group-title\">Products</p>';\n        products.forEach(function (p) {\n          var img = p.featured_image && p.featured_image.url ? p.featured_image.url : (p.image || '');\n          html += '<a class=\"search-drawer__product\" href=\"' + p.url + '\">' +\n            (img ? '<span class=\"search-drawer__thumb\"><img src=\"' + img + '\" alt=\"\" loading=\"lazy\"></span>' : '<span class=\"search-drawer__thumb\"></span>') +\n            '<span class=\"search-drawer__meta\"><span class=\"search-drawer__name\">' + p.title + '</span>' +\n            (p.price != null ? '<span class=\"search-drawer__price\">' + money(p.price) + '</span>' : '') +\n            '</span></a>';\n        });\n        html += '</div>';\n      }\n\n      var links = pages.concat(articles);\n      if (links.length) {\n        html += '<div class=\"search-drawer__group\"><p class=\"search-drawer__group-title\">Pages &amp; guides</p>';\n        links.forEach(function (item) {\n          html += '<a class=\"search-drawer__link\" href=\"' + item.url + '\">' + item.title + '</a>';\n        });\n        html += '</div>';\n      }\n\n      if (!products.length && !links.length) {\n        html = '<p class=\"search-drawer__empty\">No matches for &ldquo;' + term + '&rdquo;.</p>';\n      } else {\n        html += '<a class=\"search-drawer__viewall\" href=\"/search?q=' + encodeURIComponent(term) + '&type=product,page,article\">View all results &rarr;</a>';\n      }\n      resultsEl.innerHTML = html;\n    };\n\n    var timer = null;\n    var lastTerm = '';\n    var run = function () {\n      var term = input.value.trim();\n      if (term === lastTerm) return;\n      lastTerm = term;\n      if (term.length < 2) { resultsEl.innerHTML = ''; return; }\n      var url = '/search/suggest.json?q=' + encodeURIComponent(term) +\n        '&resources[type]=product,page,article&resources[limit]=6' +\n        '&resources[options][unavailable_products]=last';\n      fetch(url, { headers: { 'Accept': 'application/json' } })\n        .then(function (res) { return res.json(); })\n        .then(function (data) { render(data, term); })\n        .catch(function () { resultsEl.innerHTML = ''; });\n    };\n    input.addEventListener('input', function () {\n      clearTimeout(timer);\n      timer = setTimeout(run, 250);\n    });\n  })();\n\n  /* ---- Product gallery: desktop 2-up (+ full-width 3rd); mobile fixed-height swipe carousel ---- */\n  document.querySelectorAll('[data-gallery]').forEach(function (gallery) {\n    var items = Array.prototype.slice.call(gallery.querySelectorAll('.product-gallery__item'));\n    if (!items.length) return;\n\n    var altOrder = function (el) {\n      var m = (el.getAttribute('data-alt') || '').match(/(\\d+)/);\n      return m ? parseInt(m[1], 10) : Infinity;\n    };\n    var GALLERY_LIMIT = 6;\n\n    // Pagination dots over the image area (mobile). Kept as a sibling of the gallery so\n    // they stay put while the carousel scrolls its images internally.\n    var dots = document.createElement('div');\n    dots.className = 'product-gallery__dots';\n    if (gallery.parentNode) { gallery.parentNode.insertBefore(dots, gallery.nextSibling); }\n    var buildDots = function (n) {\n      dots.innerHTML = '';\n      for (var i = 0; i < n; i++) {\n        var d = document.createElement('span');\n        d.className = 'product-gallery__dot' + (i === 0 ? ' is-active' : '');\n        dots.appendChild(d);\n      }\n    };\n    var setActiveDot = function (idx) {\n      var ds = dots.children;\n      for (var i = 0; i < ds.length; i++) { ds[i].classList.toggle('is-active', i === idx); }\n    };\n\n    var mqM = window.matchMedia('(max-width: 768px)');\n    var curIdx = 0;\n    var visItems = function () { return items.filter(function (it) { return it.style.display !== 'none'; }); };\n    // Mobile: each visible image is slid to translateY((i-curIdx)*100%) so the current one\n    // fills the fixed-height image area. Desktop: transforms cleared (grid layout).\n    var render = function () {\n      setActiveDot(curIdx);\n      var vis = visItems();\n      if (!mqM.matches) { vis.forEach(function (it) { it.style.transform = ''; }); return; }\n      vis.forEach(function (it, i) { it.style.transform = 'translateY(' + ((i - curIdx) * 100) + '%)'; });\n    };\n\n    // Custom rAF smooth-scroll. iOS Safari's native scrollTo({behavior:'smooth'}) is\n    // unreliable (it animates sometimes and jumps instantly other times), which made the\n    // page-snap feel like it \"snapped\" on some loads and glided on others. Driving the\n    // tween ourselves animates identically every time. Requires scroll-behavior:auto so\n    // each per-frame scrollTo is instant (set in theme.css for mobile).\n    var scrollAnimId = null;\n    var smoothScrollTo = function (dest, dur) {\n      if (scrollAnimId) { cancelAnimationFrame(scrollAnimId); scrollAnimId = null; }\n      var start = window.pageYOffset, diff = dest - start, t0 = null;\n      dur = dur || 440;\n      if (Math.abs(diff) < 2) { window.scrollTo(0, dest); return; }\n      var ease = function (p) { return p < 0.5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2; };\n      var frame = function (ts) {\n        if (t0 === null) t0 = ts;\n        var p = Math.min(1, (ts - t0) / dur);\n        window.scrollTo(0, Math.round(start + diff * ease(p)));\n        if (p < 1) { scrollAnimId = requestAnimationFrame(frame); } else { scrollAnimId = null; }\n      };\n      scrollAnimId = requestAnimationFrame(frame);\n    };\n    // Expose the reliable scroll tween so other modules (e.g. the variant switcher) can reuse it.\n    gallery.smoothScrollTo = smoothScrollTo;\n\n    // Mobile: a vertical swipe inside the image area changes the image; once past the last\n    // image, a further swipe-up hands off to the page scroll (reveals the info).\n    var swStartY = 0, swActive = false, suppressClick = false;\n    gallery.addEventListener('touchstart', function (e) {\n      if (!mqM.matches || !e.touches || e.touches.length !== 1) { swActive = false; return; }\n      swStartY = e.touches[0].clientY; swActive = true;\n    }, { passive: true });\n    gallery.addEventListener('touchend', function (e) {\n      if (!swActive || !mqM.matches) { swActive = false; return; }\n      swActive = false;\n      var endY = (e.changedTouches && e.changedTouches[0]) ? e.changedTouches[0].clientY : swStartY;\n      var dy = endY - swStartY;\n      var n = visItems().length;\n      var th = Math.min(45, (gallery.clientHeight || 400) * 0.08);\n      if (Math.abs(dy) >= th) { suppressClick = true; setTimeout(function () { suppressClick = false; }, 350); }\n      if (dy <= -th) {\n        if (curIdx < n - 1) { curIdx++; render(); }\n        else {\n          var info = document.querySelector('.product-info--centered');\n          if (info) { smoothScrollTo(info.getBoundingClientRect().top + window.pageYOffset - 56); }\n        }\n      } else if (dy >= th) {\n        if (curIdx > 0) { curIdx--; render(); }\n        else { smoothScrollTo(0); }\n      }\n    }, { passive: true });\n\n    /* ---- Fullscreen zoom lightbox: tap/click an image to zoom; arrows + dots + X ---- */\n    var lb = document.createElement('div');\n    lb.className = 'pg-lightbox';\n    lb.hidden = true;\n    lb.innerHTML =\n      '<button type=\"button\" class=\"pg-lightbox__close\" aria-label=\"Close\">\u00D7</button>' +\n      '<button type=\"button\" class=\"pg-lightbox__arrow pg-lightbox__arrow--prev\" aria-label=\"Previous image\">\u2039</button>' +\n      '<div class=\"pg-lightbox__viewport\"><div class=\"pg-lightbox__track\"></div></div>' +\n      '<button type=\"button\" class=\"pg-lightbox__arrow pg-lightbox__arrow--next\" aria-label=\"Next image\">\u203A</button>' +\n      '<div class=\"pg-lightbox__dots\"></div>';\n    document.body.appendChild(lb);\n    var lbViewport = lb.querySelector('.pg-lightbox__viewport');\n    var lbTrack = lb.querySelector('.pg-lightbox__track');\n    var lbDotsEl = lb.querySelector('.pg-lightbox__dots');\n    var lbSrcs = [], lbIdx = 0;\n    var LB_EASE = 'transform 0.32s cubic-bezier(0.2, 0.7, 0.2, 1)';\n    var lbPlace = function (animate) {\n      lbTrack.style.transition = animate ? LB_EASE : 'none';\n      lbTrack.style.transform = 'translate3d(' + (-lbIdx * 100) + '%, 0, 0)';\n    };\n    var lbSetDots = function () {\n      var ds = lbDotsEl.children;\n      for (var i = 0; i < ds.length; i++) { ds[i].classList.toggle('is-active', i === lbIdx); }\n    };\n    var openLightbox = function (startIdx) {\n      var vis = visItems();\n      lbSrcs = vis.map(function (it) { var im = it.querySelector('img'); return im ? (im.currentSrc || im.src) : ''; }).filter(Boolean);\n      if (!lbSrcs.length) return;\n      lbIdx = Math.max(0, Math.min(lbSrcs.length - 1, startIdx || 0));\n      lbTrack.innerHTML = '';\n      lbDotsEl.innerHTML = '';\n      lbSrcs.forEach(function (src, i) {\n        var slide = document.createElement('div');\n        slide.className = 'pg-lightbox__slide';\n        var im = document.createElement('img');\n        im.src = src; im.alt = '';\n        slide.appendChild(im);\n        lbTrack.appendChild(slide);\n        var d = document.createElement('span');\n        d.className = 'pg-lightbox__dot' + (i === lbIdx ? ' is-active' : '');\n        lbDotsEl.appendChild(d);\n      });\n      lbPlace(false);\n      lb.hidden = false;\n      document.body.style.overflow = 'hidden';\n    };\n    var closeLightbox = function () {\n      lb.hidden = true;\n      document.body.style.overflow = '';\n      curIdx = lbIdx; render();\n    };\n    var lbStep = function (dir) {\n      lbIdx = Math.max(0, Math.min(lbSrcs.length - 1, lbIdx + dir));\n      lbPlace(true); lbSetDots();\n    };\n    lb.querySelector('.pg-lightbox__close').addEventListener('click', closeLightbox);\n    lb.querySelector('.pg-lightbox__arrow--prev').addEventListener('click', function (e) { e.stopPropagation(); lbStep(-1); });\n    lb.querySelector('.pg-lightbox__arrow--next').addEventListener('click', function (e) { e.stopPropagation(); lbStep(1); });\n    lb.addEventListener('click', function (e) { if (e.target === lb) closeLightbox(); });\n    document.addEventListener('keydown', function (e) {\n      if (lb.hidden) return;\n      if (e.key === 'Escape') closeLightbox();\n      else if (e.key === 'ArrowRight') lbStep(1);\n      else if (e.key === 'ArrowLeft') lbStep(-1);\n    });\n    // Finger-follow swipe: the image tracks the finger; release snaps to the nearest.\n    var lbsx = 0, lbsy = 0, lbw = 0, lbDragging = false, lbAxis = null;\n    lbViewport.addEventListener('touchstart', function (e) {\n      if (lb.hidden || !e.touches || e.touches.length !== 1) { lbDragging = false; return; }\n      lbsx = e.touches[0].clientX; lbsy = e.touches[0].clientY;\n      lbw = lbViewport.clientWidth || 1;\n      lbDragging = true; lbAxis = null;\n      lbTrack.style.transition = 'none';\n    }, { passive: true });\n    lbViewport.addEventListener('touchmove', function (e) {\n      if (!lbDragging) return;\n      var dx = e.touches[0].clientX - lbsx, dy = e.touches[0].clientY - lbsy;\n      if (lbAxis === null) {\n        if (Math.abs(dx) < 6 && Math.abs(dy) < 6) return;\n        lbAxis = Math.abs(dx) >= Math.abs(dy) ? 'x' : 'y';\n      }\n      if (lbAxis !== 'x') return;\n      if ((lbIdx === 0 && dx > 0) || (lbIdx === lbSrcs.length - 1 && dx < 0)) { dx *= 0.35; }\n      lbTrack.style.transition = 'none';\n      lbTrack.style.transform = 'translate3d(' + (-lbIdx * 100 + (dx / lbw) * 100) + '%, 0, 0)';\n    }, { passive: true });\n    lbViewport.addEventListener('touchend', function (e) {\n      if (!lbDragging) return; lbDragging = false;\n      if (lbAxis !== 'x') { lbPlace(true); return; }\n      var t = (e.changedTouches && e.changedTouches[0]) ? e.changedTouches[0] : null;\n      var dx = t ? (t.clientX - lbsx) : 0;\n      var th = Math.min(70, lbw * 0.18);\n      if (dx <= -th && lbIdx < lbSrcs.length - 1) lbIdx++;\n      else if (dx >= th && lbIdx > 0) lbIdx--;\n      lbPlace(true); lbSetDots();\n    }, { passive: true });\n    gallery.addEventListener('click', function (e) {\n      // Zoom lightbox is mobile-only: the desktop gallery images are already large.\n      if (!mqM.matches) return;\n      if (suppressClick) { suppressClick = false; return; }\n      if (e.target.closest('.product-gallery__video-el')) return;\n      var vis = visItems();\n      var clickedItem = e.target.closest('.product-gallery__item');\n      var startIdx = mqM.matches ? curIdx : Math.max(0, vis.indexOf(clickedItem));\n      openLightbox(startIdx);\n    });\n\n    // Autoplay a video while it's the visible item; pause otherwise.\n    var videos = Array.prototype.slice.call(gallery.querySelectorAll('.product-gallery__video-el'));\n    if (videos.length && 'IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) {\n          var v = e.target;\n          var item = v.closest('.product-gallery__item');\n          if (item && item.style.display === 'none') { try { v.pause(); } catch (x) {} return; }\n          if (e.isIntersecting) { var p = v.play(); if (p && p.catch) p.catch(function () {}); }\n          else { try { v.pause(); } catch (x) {} }\n        });\n      }, { threshold: 0.5 });\n      videos.forEach(function (v) { io.observe(v); });\n    }\n\n    // Show up to 3 of the selected colour's images. Desktop: first two side-by-side in the\n    // hero, the rest full-width below the info (original layout). Mobile: all in the hero,\n    // whose styles turn it into a swipe carousel.\n    var mq = window.matchMedia('(max-width: 768px)');\n    var layoutEl = gallery.closest('.product-layout');\n    var moreBox = layoutEl ? layoutEl.querySelector('[data-gallery-more]') : null;\n    var lastColor = null;\n    gallery.applyColor = function (colorValue, variantMediaId) {\n      if (colorValue != null) { lastColor = colorValue; }\n      var color = (lastColor || '').toLowerCase().trim();\n      var lastWord = color.split(/\\s+/).pop();\n      var matched = items.filter(function (it) {\n        var alt = it.getAttribute('data-alt') || '';\n        if (!color) return false;\n        return alt.indexOf(color) !== -1 || (lastWord && alt.indexOf(lastWord) !== -1);\n      });\n      var visible = matched.length ? matched : items.slice();\n      var numbered = visible.some(function (it) { return altOrder(it) !== Infinity; });\n      if (numbered) { visible = visible.slice().sort(function (a, b) { return altOrder(a) - altOrder(b); }); }\n      var limited = visible.slice(0, GALLERY_LIMIT);\n      items.forEach(function (it) {\n        it.style.display = 'none';\n        it.style.transform = '';\n        var v = it.querySelector('video'); if (v) { try { v.pause(); } catch (x) {} }\n      });\n      // Mobile: all images in the hero (vertical swipe carousel). Desktop: all images in\n      // the hero too, where they become a horizontal auto-scrolling, draggable carousel.\n      limited.forEach(function (it) { gallery.appendChild(it); it.style.display = ''; });\n      buildDots(limited.length);\n      curIdx = 0;\n      render();\n      if (gallery.buildDesktopCarousel) { gallery.buildDesktopCarousel(); }\n    };\n    if (mq.addEventListener) { mq.addEventListener('change', function () { gallery.applyColor(null); }); }\n\n    /* ---- Desktop: auto-scrolling, draggable horizontal image carousel ----\n       All the product images sit in a track that drifts slowly right-to-left; the track is\n       duplicated once so the loop is seamless, and you can grab and drag it either way with\n       the mouse. Desktop only \u2014 mobile keeps its vertical swipe carousel untouched. */\n    (function () {\n      var track = null, rafId = null, pos = 0, setW = 0;\n      var SPEED = 0.4;                 // px per frame \u2014 slow drift\n      var dragging = false, startX = 0, startPos = 0, pid = null;\n\n      var wrap = function () {\n        if (setW > 0) {\n          while (pos <= -setW) pos += setW;\n          while (pos > 0) pos -= setW;\n        }\n      };\n      var apply = function () { if (track) track.style.transform = 'translate3d(' + pos + 'px,0,0)'; };\n      var tick = function () {\n        if (track && !dragging) { pos -= SPEED; wrap(); apply(); }\n        rafId = requestAnimationFrame(tick);\n      };\n      var stopRaf = function () { if (rafId) { cancelAnimationFrame(rafId); rafId = null; } };\n\n      var teardown = function () {\n        stopRaf();\n        if (track) {\n          // return the real items to the gallery, drop the clones + track\n          var origs = track.querySelectorAll('.product-gallery__item:not([data-pgclone])');\n          Array.prototype.forEach.call(origs, function (it) { gallery.appendChild(it); });\n          if (track.parentNode) track.parentNode.removeChild(track);\n          track = null;\n        }\n        gallery.classList.remove('pg-carousel', 'is-dragging');\n        pos = 0; setW = 0; dragging = false;\n      };\n\n      var build = function () {\n        teardown();\n        if (mqM.matches) return;             // desktop only\n        var vis = visItems();\n        if (vis.length < 2) return;          // nothing to scroll\n        track = document.createElement('div');\n        track.className = 'pg-carousel-track';\n        vis.forEach(function (it) { it.style.transform = ''; track.appendChild(it); });\n        vis.forEach(function (it) { var c = it.cloneNode(true); c.setAttribute('data-pgclone', ''); track.appendChild(c); });\n        gallery.appendChild(track);\n        gallery.classList.add('pg-carousel');\n        requestAnimationFrame(function () {\n          setW = 0;\n          for (var i = 0; i < vis.length && i < track.children.length; i++) {\n            setW += track.children[i].getBoundingClientRect().width;\n          }\n          pos = 0; apply();\n        });\n        rafId = requestAnimationFrame(tick);\n      };\n\n      gallery.addEventListener('dragstart', function (e) { e.preventDefault(); });\n      gallery.addEventListener('pointerdown', function (e) {\n        if (mqM.matches || !track || e.button !== 0) return;\n        dragging = true; startX = e.clientX; startPos = pos; pid = e.pointerId;\n        gallery.classList.add('is-dragging');\n        try { gallery.setPointerCapture(e.pointerId); } catch (x) {}\n      });\n      gallery.addEventListener('pointermove', function (e) {\n        if (!dragging) return;\n        pos = startPos + (e.clientX - startX); wrap(); apply();\n      });\n      var endDrag = function () {\n        if (!dragging) return;\n        dragging = false; gallery.classList.remove('is-dragging');\n        try { gallery.releasePointerCapture(pid); } catch (x) {}\n      };\n      gallery.addEventListener('pointerup', endDrag);\n      gallery.addEventListener('pointercancel', endDrag);\n\n      gallery.buildDesktopCarousel = build;\n    })();\n\n    var layout = gallery.closest('.product-layout');\n    var sel = layout && layout.querySelector('.variant-selector__option.is-selected');\n    if (sel) { gallery.applyColor(sel.getAttribute('data-value'), null); }\n\n    /* ---- Mobile: the Bottega \"image stays put, info scrolls over it\" effect is done\n       purely in CSS (position:sticky on the hero + an opaque, higher z-index info panel\n       that scrolls up over it \u2014 see theme.css). No JS page-snap: natural scrolling gives\n       the smoothest result and the image simply stays pinned while the info rides over. ---- */\n\n    // Keep the sticky offset exactly equal to the real header height so the image pins\n    // flush beneath it (no gap, no overlap) across devices.\n    (function () {\n      var hdr = document.querySelector('.site-header');\n      if (!hdr) return;\n      var sync = function () {\n        document.documentElement.style.setProperty('--sticky-header-height', Math.round(hdr.getBoundingClientRect().height) + 'px');\n      };\n      sync();\n      window.addEventListener('resize', sync, { passive: true });\n      window.addEventListener('load', sync);\n    })();\n  });\n\n  /* ---- Quantity selector ---- */\n  document.querySelectorAll('.quantity-selector').forEach((selector) => {\n    const input = selector.querySelector('input');\n    const minus = selector.querySelector('[data-action=\"decrease\"]');\n    const plus = selector.querySelector('[data-action=\"increase\"]');\n    if (!input) return;\n\n    const update = (delta) => {\n      const val = parseInt(input.value, 10) || 1;\n      const max = parseInt(input.max, 10) || 10;\n      const next = Math.min(max, Math.max(1, val + delta));\n      input.value = next;\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    };\n\n    if (minus) minus.addEventListener('click', () => update(-1));\n    if (plus) plus.addEventListener('click', () => update(1));\n  });\n\n  /* ---- Cart page: quantity change updates the cart (line + total) ---- */\n  (function () {\n    var inputs = document.querySelectorAll('.cart-page input[name=\"updates[]\"]');\n    if (!inputs.length) return;\n\n    var totalEl = document.querySelector('.cart-page [data-cart-total]');\n    var money = function (cents) {\n      return '$' + (cents / 100).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n    };\n    var timers = {};\n\n    inputs.forEach(function (input) {\n      var line = parseInt(input.getAttribute('data-line'), 10);\n      var row = input.closest('tr');\n      var lineTotalEl = row ? row.querySelector('[data-line-total]') : null;\n\n      var commit = function () {\n        var qty = parseInt(input.value, 10);\n        if (isNaN(qty) || qty < 0) qty = 0;\n        fetch('/cart/change.js', {\n          method: 'POST',\n          cache: 'no-store',\n          headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n          body: JSON.stringify({ line: line, quantity: qty })\n        })\n          .then(function (r) { return r.json(); })\n          .then(function (cart) {\n            // Removing a line shifts every other line index \u2014 reload for correctness.\n            if (qty === 0) { window.location.reload(); return; }\n            if (totalEl) totalEl.textContent = money(cart.total_price);\n            var item = cart.items[line - 1];\n            if (item && lineTotalEl) lineTotalEl.textContent = money(item.line_price);\n            var countEl = document.querySelector('.cart-count');\n            if (countEl) countEl.textContent = cart.item_count;\n          })\n          .catch(function () { window.location.href = '/cart'; });\n      };\n\n      input.addEventListener('change', function () {\n        clearTimeout(timers[line]);\n        timers[line] = setTimeout(commit, 250);\n      });\n    });\n  })();\n\n  /* ---- Cart drawer (slide-out, AJAX add/update) ---- */\n  (function () {\n    var drawer = document.querySelector('[data-cart-drawer]');\n    var overlay = document.querySelector('[data-cart-overlay]');\n    if (!drawer) return;\n\n    var itemsEl = drawer.querySelector('[data-cart-items]');\n    var countEl = drawer.querySelector('[data-cart-count]');\n    var totalEl = drawer.querySelector('[data-cart-total]');\n    var money = function (c) {\n      return '$' + (c / 100).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n    };\n\n    var open = function () {\n      drawer.classList.add('is-open');\n      drawer.setAttribute('aria-hidden', 'false');\n      if (overlay) { overlay.hidden = false; requestAnimationFrame(function () { overlay.classList.add('is-visible'); }); }\n      document.body.style.overflow = 'hidden';\n    };\n    var close = function () {\n      drawer.classList.remove('is-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      if (overlay) { overlay.classList.remove('is-visible'); setTimeout(function () { overlay.hidden = true; }, 300); }\n      document.body.style.overflow = '';\n    };\n\n    var updateHeaderCount = function (n) {\n      var link = document.querySelector('[data-cart-open]');\n      if (!link) return;\n      var badge = link.querySelector('.cart-count');\n      if (n > 0) {\n        if (!badge) { badge = document.createElement('span'); badge.className = 'cart-count'; link.appendChild(badge); }\n        badge.textContent = n;\n      } else if (badge) { badge.remove(); }\n    };\n\n    var itemHTML = function (item, idx) {\n      var variant = (item.variant_title && item.variant_title !== 'Default Title')\n        ? '<p class=\"cart-drawer__variant\">' + item.variant_title + '</p>' : '';\n      var img = item.image\n        ? '<img class=\"cart-drawer__img\" src=\"' + item.image + '\" alt=\"\" width=\"68\" height=\"68\">'\n        : '<span class=\"cart-drawer__img\"></span>';\n      return '<div class=\"cart-drawer__item\" data-line=\"' + idx + '\">' + img +\n        '<div class=\"cart-drawer__details\">' +\n        '<p class=\"cart-drawer__name\">' + item.product_title + '</p>' + variant +\n        '<div class=\"cart-drawer__qty\">' +\n        '<label class=\"cart-drawer__qty-label\">Qty:</label>' +\n        '<select class=\"cart-drawer__qty-select\" data-line-qty>' +\n        (function () { var o = ''; for (var i = 1; i <= 10; i++) o += '<option value=\"' + i + '\"' + (i === item.quantity ? ' selected' : '') + '>' + i + '</option>'; return o; })() +\n        '</select>' +\n        '</div></div>' +\n        '<div class=\"cart-drawer__lineend\">' +\n        '<span class=\"cart-drawer__price\">' + money(item.line_price) + '</span>' +\n        '<button type=\"button\" class=\"cart-drawer__remove\" data-line-remove>Remove</button>' +\n        '</div></div>';\n    };\n\n    var render = function (cart) {\n      if (itemsEl) {\n        itemsEl.innerHTML = cart.items.map(function (it, i) { return itemHTML(it, i + 1); }).join('');\n      }\n      if (countEl) countEl.textContent = '(' + cart.item_count + ' ' + (cart.item_count === 1 ? 'item' : 'items') + ')';\n      if (totalEl) totalEl.textContent = money(cart.total_price);\n      drawer.classList.toggle('is-empty', cart.item_count === 0);\n      updateHeaderCount(cart.item_count);\n    };\n\n    var fetchCart = function () {\n      return fetch('/cart.js', { cache: 'no-store', headers: { 'Accept': 'application/json' } }).then(function (r) { return r.json(); });\n    };\n    var refresh = function (openAfter) {\n      return fetchCart().then(function (cart) { render(cart); if (openAfter) open(); });\n    };\n\n    // Open via the header cart icon; close via button / overlay / Escape\n    document.addEventListener('click', function (e) {\n      var opener = e.target.closest && e.target.closest('[data-cart-open]');\n      if (opener) { e.preventDefault(); refresh(true); return; }\n      if (e.target.closest && e.target.closest('[data-cart-close]')) { close(); }\n    });\n    if (overlay) overlay.addEventListener('click', close);\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && drawer.classList.contains('is-open')) close();\n    });\n\n    // Line quantity + remove (event delegation)\n    var busy = false;\n    var changeLine = function (line, qty) {\n      if (busy) return;\n      busy = true;\n      fetch('/cart/change.js', {\n        method: 'POST',\n        cache: 'no-store',\n        headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n        body: JSON.stringify({ line: line, quantity: qty })\n      })\n        .then(function (r) { return r.json(); })\n        .then(function (cart) { render(cart); })\n        .catch(function () {})\n        .then(function () { busy = false; });\n    };\n    drawer.addEventListener('click', function (e) {\n      var itemEl = e.target.closest('.cart-drawer__item');\n      if (!itemEl) return;\n      var line = parseInt(itemEl.getAttribute('data-line'), 10);\n      if (e.target.closest('[data-line-remove]')) changeLine(line, 0);\n    });\n    drawer.addEventListener('change', function (e) {\n      var select = e.target.closest('[data-line-qty]');\n      if (!select) return;\n      var itemEl = select.closest('.cart-drawer__item');\n      if (!itemEl) return;\n      var line = parseInt(itemEl.getAttribute('data-line'), 10);\n      changeLine(line, parseInt(select.value, 10));\n    });\n\n    // Intercept add-to-cart forms \u2192 AJAX add \u2192 open drawer\n    document.addEventListener('submit', function (e) {\n      var form = e.target;\n      if (form.tagName !== 'FORM') return;\n      var action = form.getAttribute('action') || '';\n      if (!/\\/cart\\/add$/.test(action)) return;\n      e.preventDefault();\n      var btn = form.querySelector('[type=\"submit\"]');\n      var fd = new FormData(form);\n      if (btn) { btn.classList.add('is-loading'); btn.disabled = true; }\n      fetch('/cart/add.js', { method: 'POST', cache: 'no-store', headers: { 'Accept': 'application/json' }, body: fd })\n        .then(function (r) { return r.json().then(function (d) { return { ok: r.ok, d: d }; }); })\n        .then(function (res) { if (res.ok) return refresh(true); })\n        .catch(function () {})\n        .then(function () { if (btn) { btn.classList.remove('is-loading'); btn.disabled = false; } });\n    });\n  })();\n\n  /* ---- Product variants (price, availability, image switch) ---- */\n  (function () {\n    var dataEl = document.querySelector('[data-product-variants]');\n    if (!dataEl) return;\n    var variants;\n    try { variants = JSON.parse(dataEl.textContent); } catch (e) { return; }\n\n    var form = document.querySelector('.product-page form');\n    if (!form) return;\n    var idInput = form.querySelector('input[name=\"id\"]');\n    var priceEl = document.querySelector('[data-product-price]');\n    var addBtn = document.querySelector('[data-add-button]');\n    var gallery = document.querySelector('[data-gallery]');\n    var groups = Array.prototype.slice.call(form.querySelectorAll('.variant-selector'));\n    if (!groups.length) return;\n\n    var selected = function () {\n      return groups.map(function (g) {\n        var s = g.querySelector('.variant-selector__option.is-selected');\n        return s ? s.getAttribute('data-value') : null;\n      });\n    };\n    var match = function (opts) {\n      for (var i = 0; i < variants.length; i++) {\n        var v = variants[i];\n        if (v.options.length !== opts.length) continue;\n        var ok = true;\n        for (var j = 0; j < opts.length; j++) { if (v.options[j] !== opts[j]) { ok = false; break; } }\n        if (ok) return v;\n      }\n      return null;\n    };\n    // Selected value of the \"Color\" option (falls back to the first option group).\n    var colorValue = function () {\n      for (var i = 0; i < groups.length; i++) {\n        var label = groups[i].previousElementSibling;\n        var name = label ? label.textContent.trim().toLowerCase() : '';\n        var sel = groups[i].querySelector('.variant-selector__option.is-selected');\n        var val = sel ? sel.getAttribute('data-value') : null;\n        if (name.indexOf('color') === 0 || name.indexOf('colour') === 0) return val;\n      }\n      var s0 = groups[0] && groups[0].querySelector('.variant-selector__option.is-selected');\n      return s0 ? s0.getAttribute('data-value') : null;\n    };\n    var update = function () {\n      var v = match(selected());\n      if (!v) return;\n      if (idInput) idInput.value = v.id;\n      if (priceEl) priceEl.textContent = v.price;\n      if (addBtn) {\n        addBtn.disabled = !v.available;\n        addBtn.textContent = v.available ? 'Add to Cart' : 'Sold Out';\n      }\n      if (gallery && gallery.applyColor) gallery.applyColor(colorValue(), v.media_id);\n      var colorLabel = document.querySelector('[data-selected-color]');\n      if (colorLabel) { colorLabel.textContent = colorValue(); }\n      var priceStickyEl = document.querySelector('[data-product-price-sticky]');\n      if (priceStickyEl) { priceStickyEl.textContent = v.price; }\n      var cv = colorValue();\n      if (cv) {\n        var key = cv.toLowerCase().indexOf('black') !== -1 ? 'black' : 'brown';\n        document.querySelectorAll('[data-acc-variant]').forEach(function (el) {\n          el.style.display = el.getAttribute('data-acc-variant') === key ? '' : 'none';\n        });\n      }\n    };\n\n    groups.forEach(function (g) {\n      g.querySelectorAll('.variant-selector__option').forEach(function (opt) {\n        opt.addEventListener('click', function () {\n          var prevColor = colorValue();\n          g.querySelectorAll('.variant-selector__option').forEach(function (o) { o.classList.remove('is-selected'); });\n          opt.classList.add('is-selected');\n          update();\n          // When the wallet COLOR changes, jump back to the top so the first image of the\n          // newly selected colour is shown.\n          if (colorValue() !== prevColor) {\n            if (gallery && gallery.smoothScrollTo) { gallery.smoothScrollTo(0); }\n            else { window.scrollTo({ top: 0, behavior: 'smooth' }); }\n          }\n        });\n      });\n    });\n    update();\n  })();\n\n  /* ---- Before / After comparison slider ---- */\n  document.querySelectorAll('[data-before-after]').forEach((ba) => {\n    const handle = ba.querySelector('.ba__handle');\n    if (!handle) return;\n    let dragging = false;\n\n    // Whichever side the handle reveals more of gets its label emphasized.\n    const updateDominance = (pct) => {\n      ba.classList.toggle('ba--before-dominant', pct > 50);\n      ba.classList.toggle('ba--after-dominant', pct < 50);\n    };\n\n    const setPos = (clientX) => {\n      const rect = ba.getBoundingClientRect();\n      let pct = ((clientX - rect.left) / rect.width) * 100;\n      pct = Math.max(0, Math.min(100, pct));\n      ba.style.setProperty('--pos', pct + '%');\n      handle.setAttribute('aria-valuenow', Math.round(pct));\n      updateDominance(pct);\n    };\n\n    updateDominance(parseFloat(ba.style.getPropertyValue('--pos')) || 50);\n\n    ba.addEventListener('pointerdown', (e) => {\n      dragging = true;\n      ba.classList.add('is-dragging');\n      if (ba.setPointerCapture) {\n        try { ba.setPointerCapture(e.pointerId); } catch (err) {}\n      }\n      setPos(e.clientX);\n    });\n    ba.addEventListener('pointermove', (e) => {\n      if (dragging) setPos(e.clientX);\n    });\n    const stop = () => {\n      dragging = false;\n      ba.classList.remove('is-dragging');\n    };\n    ba.addEventListener('pointerup', stop);\n    ba.addEventListener('pointercancel', stop);\n\n    /* Keyboard accessibility */\n    handle.addEventListener('keydown', (e) => {\n      let pct = parseFloat(ba.style.getPropertyValue('--pos')) || 50;\n      if (e.key === 'ArrowLeft') {\n        pct = Math.max(0, pct - 2);\n      } else if (e.key === 'ArrowRight') {\n        pct = Math.min(100, pct + 2);\n      } else if (e.key === 'Home') {\n        pct = 0;\n      } else if (e.key === 'End') {\n        pct = 100;\n      } else {\n        return;\n      }\n      ba.style.setProperty('--pos', pct + '%');\n      handle.setAttribute('aria-valuenow', Math.round(pct));\n      updateDominance(pct);\n      e.preventDefault();\n    });\n  });\n\n  /* ---- Smooth product accordions (animated open/close) ---- */\n  (function () {\n    var accordions = document.querySelectorAll('.product-accordion');\n    if (!accordions.length) return;\n    var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    if (reduce) return; // honour reduced motion: native instant toggle\n\n    accordions.forEach(function (details) {\n      var summary = details.querySelector('summary');\n      var body = details.querySelector('.product-accordion__body');\n      if (!summary || !body) return;\n\n      summary.addEventListener('click', function (e) {\n        e.preventDefault();\n        if (body.dataset.animating === '1') return;\n\n        if (details.open) {\n          // collapse\n          body.dataset.animating = '1';\n          body.style.height = body.offsetHeight + 'px';\n          body.classList.add('is-collapsing');\n          void body.offsetHeight; // commit the start height so the transition runs from frame 1\n          body.style.height = '0px';\n          body.addEventListener('transitionend', function done(ev) {\n            if (ev.propertyName !== 'height') return;\n            details.open = false;\n            body.classList.remove('is-collapsing');\n            body.style.height = '';\n            body.dataset.animating = '';\n            body.removeEventListener('transitionend', done);\n          });\n        } else {\n          // expand\n          details.open = true;\n          body.dataset.animating = '1';\n          var target = body.scrollHeight;\n          body.style.height = '0px';\n          body.classList.add('is-expanding');\n          void body.offsetHeight; // commit the 0 start so the transition runs from frame 1\n          body.style.height = target + 'px';\n          body.addEventListener('transitionend', function done(ev) {\n            if (ev.propertyName !== 'height') return;\n            body.classList.remove('is-expanding');\n            body.style.height = '';\n            body.dataset.animating = '';\n            body.removeEventListener('transitionend', done);\n          });\n        }\n      });\n    });\n  })();\n\n  /* ---- Newsletter signup: submits directly to Klaviyo ----\n     Shopify's native customer form was rejecting every submission with a\n     \"Missing CAPTCHA token\" error (Shopify's automatic reCAPTCHA injection\n     wasn't happening on this store). The on-site popup already bypasses\n     this by talking to Klaviyo directly, so this form does the same. */\n  (function () {\n    var forms = document.querySelectorAll('[data-klaviyo-subscribe]');\n    if (!forms.length) return;\n    var KLAVIYO_COMPANY_ID = 'VXemua';\n\n    forms.forEach(function (form) {\n      var listId = form.getAttribute('data-klaviyo-list-id');\n      var messageEl = form.querySelector('[data-newsletter-message]');\n      var emailInput = form.querySelector('input[type=\"email\"]');\n      var submitBtn = form.querySelector('button[type=\"submit\"]');\n\n      var showMessage = function (text) {\n        if (!messageEl) return;\n        messageEl.textContent = text;\n        messageEl.style.display = 'block';\n      };\n\n      form.addEventListener('submit', function (e) {\n        e.preventDefault();\n        var email = emailInput.value.trim();\n        if (!email) return;\n\n        submitBtn.disabled = true;\n\n        fetch('https://a.klaviyo.com/client/subscriptions/?company_id=' + KLAVIYO_COMPANY_ID, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            'Accept': 'application/json',\n            'revision': '2024-10-15'\n          },\n          body: JSON.stringify({\n            data: {\n              type: 'subscription',\n              attributes: {\n                profile: {\n                  data: {\n                    type: 'profile',\n                    attributes: { email: email }\n                  }\n                }\n              },\n              relationships: {\n                list: {\n                  data: { type: 'list', id: listId }\n                }\n              }\n            }\n          })\n        }).then(function (res) {\n          submitBtn.disabled = false;\n          if (res.ok) {\n            emailInput.value = '';\n            showMessage('Welcome to the reign.');\n          } else {\n            showMessage('Something went wrong. Please try again.');\n          }\n        }).catch(function () {\n          submitBtn.disabled = false;\n          showMessage('Something went wrong. Please try again.');\n        });\n      });\n    });\n  })();\n\n  /* ---- Product sticky add-to-cart bar ---- */\n  (function () {\n    var bar = document.querySelector('[data-product-sticky]');\n    var addBtn = document.querySelector('[data-add-button]');\n    // Show the bar once the real Add-to-Cart button is scrolled out of view above,\n    // and hide it again when you scroll back up to it (or to the top).\n    var anchor = addBtn || document.querySelector('.product-info');\n    if (!bar || !anchor) return;\n\n    var stickyAdd = bar.querySelector('[data-sticky-add]');\n    if (stickyAdd && addBtn) {\n      stickyAdd.addEventListener('click', function () { addBtn.click(); });\n    }\n\n    // Hide once the bottom CTA region (trust strip / newsletter / footer) is reached.\n    var endZone = document.querySelector('.trust-strip')\n      || document.querySelector('.newsletter')\n      || document.querySelector('.site-footer');\n\n    // Recomputed directly off real element positions on every scroll event \u2014\n    // no IntersectionObserver, no requestAnimationFrame. Both were tried and\n    // both introduced enough callback lag (IO) or depended on a render loop\n    // that isn't guaranteed to run promptly (rAF) to let the bar visually\n    // clash with the trust strip during a scroll. A plain synchronous\n    // recompute on the scroll event itself has no such lag.\n    var update = function () {\n      var anchorRect = anchor.getBoundingClientRect();\n      // Show only once the real Add-to-Cart has scrolled ABOVE the top of the viewport \u2014\n      // i.e. you've moved past the buy area into the product features below it. Do NOT show\n      // while it's still below the fold at the top of the page.\n      var pastBuyArea = anchorRect.bottom < 0;\n      var reachedEnd = false;\n      if (endZone) {\n        var barHeight = bar.offsetHeight || 90;\n        // Bar covers from (innerHeight - barHeight) down to the bottom edge;\n        // add a lead buffer so hiding starts before the strip ever reaches that line.\n        reachedEnd = endZone.getBoundingClientRect().top < (window.innerHeight - barHeight + 40);\n      }\n      bar.classList.toggle('is-visible', pastBuyArea && !reachedEnd);\n    };\n    window.addEventListener('scroll', update, { passive: true });\n    window.addEventListener('resize', update);\n    update();\n  })();\n\n  /* ---- Scroll reveal system ---- */\n  (function () {\n    var root = document.documentElement;\n    if (!root.classList.contains('reveal-on')) return;\n\n    // Reduced-motion: nothing is hidden, so nothing to do.\n    if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n      root.classList.remove('reveal-on');\n      return;\n    }\n\n    // No IntersectionObserver support \u2192 reveal everything immediately.\n    if (!('IntersectionObserver' in window)) {\n      root.classList.remove('reveal-on');\n      return;\n    }\n\n    try {\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting) {\n            entry.target.classList.add('is-visible');\n            io.unobserve(entry.target);\n          }\n        });\n      }, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' });\n\n      var observeAll = function (selector) {\n        document.querySelectorAll(selector).forEach(function (el) { io.observe(el); });\n      };\n\n      // Simple fade-up reveals\n      ['.section-header', '.heritage__content', '.packaging-content',\n       '.definition-block', '.contact__inner', '.page-image',\n       '.about-lead', '.about-quote', '.about-signoff',\n       '.about-closing__content', '.about-split'].forEach(observeAll);\n\n      // Staggered grids \u2014 cascade children\n      ['.product-grid', '.features-grid', '.testimonial-grid',\n       '.color-grid', '.packaging-features', '.trust-strip__inner'].forEach(function (sel) {\n        document.querySelectorAll(sel).forEach(function (grid) {\n          Array.prototype.forEach.call(grid.children, function (kid, i) {\n            kid.style.transitionDelay = (i * 0.08) + 's';\n            io.observe(kid);\n          });\n        });\n      });\n\n      // Ken Burns image containers\n      ['.hero__media', '.heritage__media', '.packaging-image',\n       '.lifestyle-block__media', '.about-hero__media',\n       '.about-closing__media'].forEach(observeAll);\n\n      // Safety net: if anything is still hidden after 4s, reveal it.\n      setTimeout(function () {\n        document.querySelectorAll(\n          'html.reveal-on .section-header:not(.is-visible), ' +\n          'html.reveal-on .product-grid > *:not(.is-visible)'\n        ).forEach(function (el) {\n          var r = el.getBoundingClientRect();\n          if (r.top < window.innerHeight) el.classList.add('is-visible');\n        });\n      }, 4000);\n    } catch (e) {\n      // On any failure, reveal everything rather than leaving it hidden.\n      root.classList.remove('reveal-on');\n    }\n  })();\n})();\n\n/* ---- Scroll-to-play for product-story videos (e.g. the unboxing clip in \"Gift Ready\") ----\n   Hold on the poster frame until the video scrolls into view, then play; pause when it leaves. */\n(function () {\n  function initScrollPlay() {\n    var vids = document.querySelectorAll('.story-video[data-scroll-play] video');\n    if (!vids.length) return;\n\n    vids.forEach(function (v) {\n      // Muted + playsinline are required for programmatic play() without a user gesture.\n      v.muted = true;\n      v.setAttribute('muted', '');\n      v.playsInline = true;\n      v.setAttribute('playsinline', '');\n      try { v.pause(); } catch (e) {}\n    });\n\n    if (!('IntersectionObserver' in window)) {\n      vids.forEach(function (v) { v.play().catch(function () {}); });\n      return;\n    }\n\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        var v = entry.target;\n        if (entry.isIntersecting) {\n          v.play().catch(function () {});\n        } else {\n          try { v.pause(); } catch (e) {}\n        }\n      });\n    }, { threshold: 0.35 });\n\n    vids.forEach(function (v) { io.observe(v); });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initScrollPlay);\n  } else {\n    initScrollPlay();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
