{
  "version": 3,
  "sources": ["/cdn/shop/t/284/assets/umf30-gift-box.js?umf30=20260820c"],
  "sourcesContent": ["(() => {\n  function visibleWidth() {\n    return (window.visualViewport && window.visualViewport.width) || document.documentElement.clientWidth || window.innerWidth || 0;\n  }\n  function syncDesktopClass() {\n    const desktop = visibleWidth() > 960;\n    document.documentElement.classList.toggle(\"umf30-desktop\", desktop);\n    document.documentElement.classList.toggle(\"umf30-phone\", !desktop);\n  }\n  syncDesktopClass();\n  window.addEventListener(\"resize\", syncDesktopClass, { passive: true });\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener(\"resize\", syncDesktopClass, { passive: true });\n  }\n\n  // Works across all UMF30 sections on the product template\n  const qtyInputs = document.querySelectorAll('[data-umf30-qty-input]');\n  const qtyDisplays = document.querySelectorAll('[data-umf30-qty-display]');\n\n  function formatMoney(cents) {\n    return '$' + (Number(cents || 0) / 100).toFixed(2);\n  }\n\n  const soldOut = document.querySelector('[data-umf30-available=\"false\"]');\n\n  function setQty(n) {\n    if (soldOut) n = 1;\n    n = Math.max(1, Math.min(99, n | 0));\n    qtyInputs.forEach((i) => {\n      i.value = String(n);\n    });\n    qtyDisplays.forEach((d) => {\n      d.textContent = String(n);\n    });\n    document.querySelectorAll('[data-umf30-total]').forEach((el) => {\n      const unit = Number(el.getAttribute('data-unit-price') || 0);\n      if (unit) el.textContent = formatMoney(unit * n);\n    });\n  }\n\n  document.addEventListener('click', (e) => {\n    const dec = e.target.closest('[data-umf30-qty-dec]');\n    const inc = e.target.closest('[data-umf30-qty-inc]');\n    if (!dec && !inc) return;\n    e.preventDefault();\n    if (soldOut) return;\n    const cur = Number((qtyInputs[0] && qtyInputs[0].value) || 1);\n    setQty(cur + (inc ? 1 : -1));\n  });\n\n  // Reveal on scroll\n  const reveals = document.querySelectorAll('.umf30-pdp [data-reveal]');\n  if (reveals.length && 'IntersectionObserver' in window) {\n    const io = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((e) => {\n          if (!e.isIntersecting) return;\n          const delay = Number(e.target.getAttribute('data-reveal') || 0);\n          setTimeout(() => e.target.classList.add('on'), delay);\n          io.unobserve(e.target);\n        });\n      },\n      { threshold: 0.12 }\n    );\n    reveals.forEach((el) => io.observe(el));\n  } else {\n    reveals.forEach((el) => el.classList.add('on'));\n  }\n\n  // Gallery \u2014 event delegation so arrows stay clickable above the jar\n  const mainImg = document.querySelector('[data-umf30-main-image]');\n  const galleryWell = document.querySelector('.gallery-well');\n  let idx = 0;\n  function thumbs() {\n    return Array.from(document.querySelectorAll('[data-umf30-thumb]'));\n  }\n  function show(i) {\n    const list = thumbs();\n    if (!list.length || !mainImg) return;\n    idx = ((i % list.length) + list.length) % list.length;\n    const t = list[idx];\n    const src = t.getAttribute('data-full') || (t.querySelector('img') && t.querySelector('img').src);\n    if (src) {\n      mainImg.src = src;\n      mainImg.removeAttribute('srcset');\n    }\n    list.forEach((el, n) => el.classList.toggle('is-active', n === idx));\n    if (galleryWell) galleryWell.classList.toggle('is-jar', idx === 0);\n  }\n  document.addEventListener('click', (e) => {\n    if (e.target.closest('[data-umf30-gallery-prev]')) {\n      e.preventDefault();\n      show(idx - 1);\n      return;\n    }\n    if (e.target.closest('[data-umf30-gallery-next]')) {\n      e.preventDefault();\n      show(idx + 1);\n      return;\n    }\n    const thumb = e.target.closest('[data-umf30-thumb]');\n    if (thumb) {\n      e.preventDefault();\n      show(thumbs().indexOf(thumb));\n    }\n  });\n\n  // Sticky bar \u2014 show after hero buy block leaves viewport\n  const sticky = document.querySelector('#stickybar');\n  const buy = document.querySelector('#buy');\n  if (sticky && buy && 'IntersectionObserver' in window) {\n    const io2 = new IntersectionObserver(\n      ([e]) => {\n        sticky.classList.toggle('is-visible', !e.isIntersecting);\n      },\n      { threshold: 0, rootMargin: '-80px 0px 0px 0px' }\n    );\n    io2.observe(buy);\n  }\n\n  document.querySelectorAll('[data-umf30-sticky-atc]').forEach((btn) => {\n    btn.addEventListener('click', () => {\n      const form = document.querySelector('[data-umf30-product-form]');\n      if (!form) return;\n      if (typeof form.requestSubmit === 'function') form.requestSubmit();\n      else form.submit();\n    });\n  });\n\n  // Horizontal carousels (ritual / why-take / grade ladder)\n  function scrollCarousel(el, dir) {\n    if (!el) return;\n    // Step by exactly ONE card (+ the grid gap), not a fraction of the container.\n    // clientWidth * 0.85 never matched a card width - the ritual cards are 100% of\n    // the container and the ladder cards 72vw - so every click parked the track\n    // mid-card and showed a sliced card at the edge.\n    const kid = el.firstElementChild;\n    let step = 0;\n    if (kid) {\n      const cs = getComputedStyle(el);\n      const gap = parseFloat(cs.columnGap || cs.gap) || 0;\n      step = Math.round(kid.getBoundingClientRect().width + gap);\n    }\n    if (!step) step = Math.round(el.clientWidth * 0.85) || 280;\n    el.scrollBy({ left: dir * step, behavior: 'smooth' });\n  }\n  document.querySelectorAll('[data-umf30-carousel-nav]').forEach((nav) => {\n    let track = nav.previousElementSibling;\n    while (track && !track.hasAttribute('data-umf30-carousel')) {\n      track = track.previousElementSibling;\n    }\n    const prev = nav.querySelector('[data-umf30-car-prev]');\n    const next = nav.querySelector('[data-umf30-car-next]');\n    if (prev) prev.addEventListener('click', () => scrollCarousel(track, -1));\n    if (next) next.addEventListener('click', () => scrollCarousel(track, 1));\n  });\n\n  function alignLadderToHere() {\n    if (visibleWidth() > 960) return;\n    document.querySelectorAll('[data-umf30-ladder]').forEach((track) => {\n      const here = track.querySelector('.umf30-grade--here');\n      if (!here) return;\n      const left = here.offsetLeft - (parseFloat(getComputedStyle(track).paddingLeft) || 0);\n      track.scrollLeft = Math.max(0, left);\n    });\n  }\n  alignLadderToHere();\n  window.addEventListener('load', alignLadderToHere);\n  window.addEventListener('resize', () => {\n    window.clearTimeout(alignLadderToHere._t);\n    alignLadderToHere._t = window.setTimeout(alignLadderToHere, 120);\n  });\n\n  document.querySelectorAll('[data-umf30-reviews-jump]').forEach((link) => {\n    link.addEventListener('click', (e) => {\n      const target = document.getElementById('stamped-main-widget');\n      if (!target) return;\n      e.preventDefault();\n      target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  });\n\n  // Rarity band: do not download until on screen; pause when off screen; do not loop.\n  const honeyVid = document.getElementById('umf30-honeyvid');\n  if (honeyVid) {\n    honeyVid.muted = true;\n    honeyVid.loop = false;\n    honeyVid.removeAttribute('autoplay');\n    const source = honeyVid.querySelector('source[data-src]');\n    const arm = () => {\n      if (source && !source.getAttribute('src')) {\n        source.setAttribute('src', source.getAttribute('data-src'));\n        honeyVid.load();\n      }\n      honeyVid.play().catch(() => {});\n    };\n    if ('IntersectionObserver' in window) {\n      const vio = new IntersectionObserver(\n        ([e]) => {\n          if (e.isIntersecting) arm();\n          else honeyVid.pause();\n        },\n        { threshold: 0.25, rootMargin: '80px 0px' }\n      );\n      vio.observe(honeyVid);\n    }\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
