{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/hero-vial-concept.js?build=20260901-matched-dark-vial-v68"],
  "sourcesContent": ["(() => {\n  const hero = document.querySelector('[data-bobbing-vial-hero]');\n  if (!hero || hero.dataset.bobbingReady === 'true') return;\n  hero.dataset.bobbingReady = 'true';\n\n  const vial = hero.querySelector('[data-bobbing-vial]');\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  // `pointer` describes only the primary input. On iPad that remains coarse\n  // touch even while a trackpad or mouse is connected, so use the aggregate\n  // capabilities and verify the actual PointerEvent before applying parallax.\n  const anyFinePointer = window.matchMedia('(any-hover: hover) and (any-pointer: fine)');\n  const state = { x: 0, y: 0, r: 0 };\n  const target = { x: 0, y: 0, r: 0 };\n  let frame = 0;\n  let vialMotionReady = false;\n  let heroInView = true;\n\n  const syncAmbientMotion = () => {\n    hero.classList.toggle('is-vial-motion-paused', document.hidden || !heroInView || reducedMotion.matches);\n  };\n\n  if ('IntersectionObserver' in window) {\n    const visibilityObserver = new IntersectionObserver(entries => {\n      heroInView = Boolean(entries[0]?.isIntersecting);\n      syncAmbientMotion();\n    }, { threshold: 0.04, rootMargin: '12% 0px' });\n    visibilityObserver.observe(hero);\n  }\n  document.addEventListener('visibilitychange', syncAmbientMotion);\n\n  const revealCollectionCue = () => {\n    if (hero.classList.contains('is-cue-ready')) return;\n    hero.classList.add('is-cue-ready');\n  };\n\n  const finalDesktopProof = hero.querySelector('.bobbing-vial-hero__proof-stack--right .bobbing-vial-hero__proof');\n  const skipEditorialSequence = reducedMotion.matches\n    || document.documentElement.classList.contains('pq-resume-restored')\n    || document.documentElement.classList.contains('pq-home-section-entry');\n\n  if (skipEditorialSequence || !finalDesktopProof) {\n    revealCollectionCue();\n  } else {\n    finalDesktopProof.addEventListener('animationend', event => {\n      if (event.animationName !== 'pqProofStoryIn') return;\n      window.setTimeout(revealCollectionCue, 140);\n    }, { once: true });\n    window.setTimeout(revealCollectionCue, 2200);\n  }\n\n  const startVialMotion = () => {\n    if (vialMotionReady) return;\n    vialMotionReady = true;\n    requestAnimationFrame(() => requestAnimationFrame(() => hero.classList.add('is-vial-ready')));\n  };\n\n  const activeVialImage = [...hero.querySelectorAll('.bobbing-vial-hero__image')]\n    .find(image => window.getComputedStyle(image).display !== 'none');\n  if (!activeVialImage) {\n    startVialMotion();\n  } else {\n    const revealDecodedVial = async () => {\n      try {\n        if (activeVialImage.naturalWidth > 0 && typeof activeVialImage.decode === 'function') {\n          await activeVialImage.decode();\n        }\n      } catch (_) {}\n      startVialMotion();\n    };\n\n    if (activeVialImage.complete) {\n      revealDecodedVial();\n    } else {\n      activeVialImage.addEventListener('load', revealDecodedVial, { once: true });\n      activeVialImage.addEventListener('error', startVialMotion, { once: true });\n    }\n  }\n\n  const paint = () => {\n    state.x += (target.x - state.x) * .1;\n    state.y += (target.y - state.y) * .1;\n    state.r += (target.r - state.r) * .1;\n    if (vial) {\n      vial.style.transform = `translate3d(${state.x.toFixed(2)}px,${state.y.toFixed(2)}px,0) rotate(${state.r.toFixed(3)}deg)`;\n    }\n    const settled = Math.abs(target.x - state.x) < .02 && Math.abs(target.y - state.y) < .02 && Math.abs(target.r - state.r) < .002;\n    if (settled) {\n      state.x = target.x;\n      state.y = target.y;\n      state.r = target.r;\n      if (vial) {\n        vial.style.transform = `translate3d(${state.x.toFixed(2)}px,${state.y.toFixed(2)}px,0) rotate(${state.r.toFixed(3)}deg)`;\n      }\n      frame = 0;\n    } else {\n      frame = requestAnimationFrame(paint);\n    }\n  };\n\n  const schedule = () => { if (!frame) frame = requestAnimationFrame(paint); };\n  const reset = () => {\n    target.x = 0;\n    target.y = 0;\n    target.r = 0;\n    schedule();\n  };\n\n  const stopAndClear = () => {\n    if (frame) cancelAnimationFrame(frame);\n    frame = 0;\n    state.x = target.x = 0;\n    state.y = target.y = 0;\n    state.r = target.r = 0;\n    vial?.style.removeProperty('transform');\n  };\n\n  const supportsHoverMotion = event => {\n    if (event.pointerType === 'touch') return false;\n    if (event.pointerType === 'mouse') return true;\n    if (event.pointerType === 'pen') return event.buttons === 0 && anyFinePointer.matches;\n    return anyFinePointer.matches;\n  };\n\n  hero.addEventListener('pointermove', event => {\n    if (!vial || !vialMotionReady || reducedMotion.matches || !supportsHoverMotion(event)) return;\n    const rect = hero.getBoundingClientRect();\n    const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - .5) * 2));\n    const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - .5) * 2));\n    target.x = nx * 9;\n    target.y = ny * 6;\n    target.r = nx * .55;\n    schedule();\n  }, { passive: true });\n\n  hero.addEventListener('pointerleave', reset, { passive: true });\n  reducedMotion.addEventListener?.('change', event => {\n    if (event.matches) {\n      stopAndClear();\n      revealCollectionCue();\n    } else {\n      reset();\n    }\n    syncAmbientMotion();\n  });\n  anyFinePointer.addEventListener?.('change', event => {\n    if (!event.matches) reset();\n  });\n\n})();\n"],
  "mappings": "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",
  "names": []
}
