{
  "version": 3,
  "sources": ["/cdn/shop/t/45/assets/nv2.js?vfix=5"],
  "sourcesContent": ["\n    (function () {\n      \"use strict\";\n      var $ = function (s, c) { return (c || document).querySelector(s); };\n      var $$ = function (s, c) { return Array.prototype.slice.call((c || document).querySelectorAll(s)); };\n      var money = function (n) { return \"$\" + n.toFixed(2); };\n      var reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n      /* Tracking helper \u2014 fires Meta + TikTok events when real pixel IDs\n         are configured in NV_PIXELS (placeholders stay inert). */\n      function trackEvent(name, data) {\n        data = data || {};\n        try { if (window.fbq) fbq(\"track\", name, data); } catch (e) {}\n        try { if (window.ttq) ttq.track(name, data); } catch (e) {}\n        if (window.console && console.info) console.info(\"[NaturaVital event]\", name, data);\n      }\n\n      /* ================= DATA (label-verified facts only) ================= */\n      var PRODUCTS = window.NV2_PRODUCTS || [];\n      var N = PRODUCTS.length;\n      var FREE_SHIP = 49;\n\n      function packRate(itemCount) {\n        if (itemCount >= 7) return 0.15;\n        if (itemCount >= 5) return 0.10;\n        if (itemCount >= 3) return 0.05;\n        return 0;\n      }\n\n      /* ================= HERO CAROUSEL ================= */\n      var stage = $(\"#heroStage\"), jarsEl = $(\"#jars\"), blob = $(\"#blob\"),\n          ringWrap = $(\"#ringWrap\"), tooltip = $(\"#tooltip\"),\n          progressFill = $(\"#progressFill\"), dotsEl = $(\"#heroDots\"),\n          sparkLayer = $(\"#sparkles\");\n      var pos = 2, posTarget = 2, activeIdx = -1, spacing = 300, curveY = 30; /* opens centered on Maca (index 2 of 5) */\n      var jarNodes = [];\n\n      PRODUCTS.forEach(function (p, i) {\n        var b = document.createElement(\"button\");\n        b.className = \"jar\";\n        b.type = \"button\";\n        b.setAttribute(\"aria-label\", p.name + \" \u2014 view product\");\n        b.innerHTML = '<span class=\"jar-inner\" style=\"display:block\"><img src=\"' + (p.heroImg || p.img) + '\" alt=\"' + p.alt + '\" draggable=\"false\" /></span>';\n        b.addEventListener(\"click\", function () {\n          if (dragMoved) return;\n          if (Math.abs(i - pos) < 0.5) openDrawer(i);\n          else goTo(i);\n        });\n        b.addEventListener(\"mouseenter\", function (e) {\n          if (Math.abs(i - pos) < 0.5) tooltip.classList.add(\"on\");\n        });\n        b.addEventListener(\"mouseleave\", function () { tooltip.classList.remove(\"on\"); });\n        jarsEl.appendChild(b);\n        jarNodes.push(b);\n\n        var d = document.createElement(\"button\");\n        d.type = \"button\";\n        d.setAttribute(\"role\", \"tab\");\n        d.setAttribute(\"aria-label\", \"Show \" + p.name);\n        d.addEventListener(\"click\", function () { goTo(i); });\n        dotsEl.appendChild(d);\n      });\n\n      /* Decorative glow dots: round, softly glowing points (the clothing\n         store's shape \u2014 no stars). Each is born at the blob's edge and flies\n         radially outward along its --ang, sweeping a few extra degrees as if\n         the spinning circle flung it off; it shines, fades, and the loop\n         keeps new ones coming. --r0 (the blob radius) lives in CSS so the\n         emission ring tracks the blob at any viewport. Color follows the\n         active product via --spark, set in setActive(). Skipped entirely\n         under prefers-reduced-motion. */\n      if (!reduced && sparkLayer) {\n        var sparkCount = window.innerWidth < 640 ? 30 : 56;\n        for (var s = 0; s < sparkCount; s++) {\n          var sp = document.createElement(\"span\");\n          sp.className = \"sparkle\";\n          sp.style.setProperty(\"--ang\", (Math.random() * 360).toFixed(1) + \"deg\");\n          sp.style.setProperty(\"--dist\", (110 + Math.random() * 230).toFixed(0) + \"px\");\n          sp.style.setProperty(\"--sweep\", (14 + Math.random() * 26).toFixed(1) + \"deg\");\n          sp.style.setProperty(\"--sz\", (14 + Math.random() * 19).toFixed(1) + \"px\");\n          sp.style.setProperty(\"--dur\", (4.6 + Math.random() * 4.2).toFixed(2) + \"s\");\n          sp.style.setProperty(\"--dl\", (-Math.random() * 9).toFixed(2) + \"s\");\n          sparkLayer.appendChild(sp);\n        }\n      }\n\n      /* Change burst: fired from setActive() whenever the active product\n         actually changes (arrows, selector circles, hero dots, swipe, wheel \u2014\n         they all funnel through setActive). A dense volley of round glowing\n         dots in the NEW product's color is born at the blob's edge and flies\n         radially outward all at once, then each dot removes itself and the\n         ambient flow continues. Skipped under prefers-reduced-motion. */\n      function burstSparkles(color) {\n        if (reduced || !sparkLayer) return;\n        var count = window.innerWidth < 640 ? 30 : 48;\n        for (var b = 0; b < count; b++) {\n          var bp = document.createElement(\"span\");\n          bp.className = \"sparkle burst\";\n          bp.style.setProperty(\"--spark\", color);\n          bp.style.setProperty(\"--ang\", (Math.random() * 360).toFixed(1) + \"deg\");\n          bp.style.setProperty(\"--dist\", (170 + Math.random() * 300).toFixed(0) + \"px\");\n          bp.style.setProperty(\"--sweep\", (18 + Math.random() * 40).toFixed(1) + \"deg\");\n          bp.style.setProperty(\"--sz\", (14 + Math.random() * 21).toFixed(1) + \"px\");\n          bp.style.setProperty(\"--bdur\", (0.8 + Math.random() * 0.55).toFixed(2) + \"s\");\n          bp.style.setProperty(\"--bdl\", (Math.random() * 0.12).toFixed(2) + \"s\");\n          sparkLayer.appendChild(bp);\n          (function (node) {\n            node.addEventListener(\"animationend\", function () { node.remove(); });\n            setTimeout(function () { if (node.parentNode) node.remove(); }, 2400);\n          })(bp);\n        }\n      }\n\n      document.addEventListener(\"mousemove\", function (e) {\n        tooltip.style.left = e.clientX + \"px\";\n        tooltip.style.top = e.clientY + \"px\";\n      });\n\n      function measure() {\n        var w = stage.clientWidth;\n        spacing = w < 640 ? Math.max(290, w * 0.78) : Math.max(250, Math.min(w * 0.46, 700));\n        curveY = w < 640 ? 18 : 30;\n      }\n      measure();\n      window.addEventListener(\"resize\", measure);\n\n      function clampPos(v) { return Math.max(0, Math.min(N - 1, v)); }\n      function goTo(i) { posTarget = clampPos(i); }\n      function snap() { posTarget = clampPos(Math.round(posTarget)); }\n\n      function setActive(i) {\n        var prevIdx = activeIdx;\n        activeIdx = i;\n        var p = PRODUCTS[i];\n        blob.style.backgroundColor = p.blob;\n        if (sparkLayer) sparkLayer.style.setProperty(\"--spark\", p.blob);\n        $(\"#hcName\").textContent = p.name;\n        $(\"#hcCount\").textContent = p.count;\n        $(\"#hcPrice\").textContent = money(p.price);\n        var hcBuy = $(\"#hcBuy\");\n        hcBuy.style.backgroundColor = p.blob;\n        /* every formula in the current range pairs its color with white text */\n        hcBuy.style.color = \"#ffffff\";\n        $$(\"button\", dotsEl).forEach(function (d, di) {\n          d.classList.toggle(\"on\", di === i);\n          d.setAttribute(\"aria-selected\", di === i ? \"true\" : \"false\");\n        });\n        /* a real change of product (not the opening frame) makes the circle\n           burst a volley of sparkles in the new product's color */\n        if (prevIdx !== -1 && prevIdx !== i) burstSparkles(p.blob);\n      }\n\n      /* HOME2 2026-10-25 \u2014 scroll perf: the wheel loop below is gated by\n         heroInView (IntersectionObserver at the bottom of this block).\n         Un-gated it ran every frame even with the hero scrolled away,\n         reading offsetWidth (forced layout) 5x per frame while the user\n         scrolled. heroLoopOn prevents double scheduling on re-entry. */\n      var heroInView = true, heroLoopOn = false;\n      var startTime = performance.now();\n      function layout(now) {\n        var t = (now - startTime) / 1000;\n        pos += (posTarget - pos) * (reduced ? 1 : 0.082);\n        if (Math.abs(posTarget - pos) < 0.0004) pos = posTarget;\n        jarNodes.forEach(function (el, i) {\n          var d = i - pos, ad = Math.abs(d);\n          var bob = reduced ? 0 : Math.sin(t * 1.15 + i * 1.7) * 8 * Math.max(0, 1 - ad * 0.3);\n          var x = d * spacing;\n          var y = Math.pow(ad, 1.7) * curveY + bob;\n          var rot = d * 10;\n          var sc = 1 - Math.min(ad, 2.4) * 0.16;\n          var op = ad > 2.45 ? Math.max(0, 1 - (ad - 2.45) * 2.4) : 1;\n          el.style.transform = \"translate(-50%,-50%) translate(\" + x.toFixed(1) + \"px,\" + y.toFixed(1) + \"px) rotate(\" + rot.toFixed(2) + \"deg) scale(\" + sc.toFixed(3) + \")\";\n          el.style.zIndex = String(30 - Math.round(ad * 5));\n          el.style.opacity = op.toFixed(2);\n          el.style.pointerEvents = ad > 2.6 ? \"none\" : \"auto\";\n          var rotRad = Math.abs(rot) * Math.PI / 180;\n          var halfBox = (el.offsetWidth * Math.cos(rotRad) + el.offsetHeight * Math.sin(rotRad)) * sc / 2;\n          var offStage = ad > 1.8 || Math.abs(x) + halfBox > stage.clientWidth / 2 + 2;\n          if (el._offStage !== offStage) {\n            el._offStage = offStage;\n            el.inert = offStage;\n            if (offStage) el.setAttribute(\"aria-hidden\", \"true\");\n            else el.removeAttribute(\"aria-hidden\");\n          }\n        });\n        /* wheel turns WITH the travel: advancing (pos up) rotates it forward\n           (+22\u00B0 per step, clockwise \u2014 the same sense as its continuous spin\n           and as the sparkles' outward sweep); going back turns it back */\n        ringWrap.style.transform = \"translate(-50%,-50%) rotate(\" + (pos * 22).toFixed(2) + \"deg)\";\n        progressFill.style.width = (pos / (N - 1)) * 100 + \"%\";\n        var idx = Math.round(pos);\n        if (idx !== activeIdx) setActive(idx);\n        if (heroInView) { requestAnimationFrame(layout); }\n        else { heroLoopOn = false; }\n      }\n      heroLoopOn = true;\n      requestAnimationFrame(layout);\n      /* HOME2 2026-10-25 \u2014 stop the wheel loop and pause the hero's CSS\n         animations (sparkles, ring spin, blob morph \u2014 see .hero-off in\n         nv2.css) while the hero is off screen; resume both on return.\n         Invisible while scrolled away, and it removes the per-frame\n         layout reads that made scrolling feel slow. */\n      if (\"IntersectionObserver\" in window) {\n        new IntersectionObserver(function (entries) {\n          heroInView = entries[0].isIntersecting;\n          var heroEl = $(\"#hero\");\n          if (heroEl) heroEl.classList.toggle(\"hero-off\", !heroInView);\n          if (heroInView && !heroLoopOn) { heroLoopOn = true; requestAnimationFrame(layout); }\n        }, { rootMargin: \"80px\" }).observe($(\"#hero\"));\n      }\n      setActive(2);\n\n      /* wheel / trackpad drives the carousel while the hero is in play */\n      var snapTimer = null;\n      $(\"#hero\").addEventListener(\"wheel\", function (e) {\n        var dir = e.deltaY > 0 ? 1 : -1;\n        var atEnd = (posTarget >= N - 1 && dir > 0) || (posTarget <= 0 && dir < 0);\n        if (atEnd) return;\n        e.preventDefault();\n        posTarget = clampPos(posTarget + e.deltaY * 0.0021);\n        clearTimeout(snapTimer);\n        snapTimer = setTimeout(snap, 170);\n      }, { passive: false });\n\n      /* drag / swipe */\n      var dragging = false, dragMoved = false, dragStartX = 0, dragStartPos = 0;\n      stage.addEventListener(\"pointerdown\", function (e) {\n        dragging = true; dragMoved = false;\n        dragStartX = e.clientX; dragStartPos = posTarget;\n      });\n      stage.addEventListener(\"pointermove\", function (e) {\n        if (!dragging) return;\n        var dx = e.clientX - dragStartX;\n        if (Math.abs(dx) > 6) dragMoved = true;\n        if (dragMoved) posTarget = clampPos(dragStartPos - dx / spacing);\n      });\n      function endDrag() {\n        if (!dragging) return;\n        dragging = false; snap();\n        setTimeout(function () { dragMoved = false; }, 60);\n      }\n      stage.addEventListener(\"pointerup\", endDrag);\n      stage.addEventListener(\"pointercancel\", endDrag);\n      stage.addEventListener(\"pointerleave\", endDrag);\n\n      $(\"#hcBuy\").addEventListener(\"click\", function () {\n        addToCart(activeIdx, 1);\n        openCart();\n      });\n      $(\"#prevBtn\").addEventListener(\"click\", function () { goTo(Math.round(posTarget) - 1); });\n      $(\"#nextBtn\").addEventListener(\"click\", function () { goTo(Math.round(posTarget) + 1); });\n      document.addEventListener(\"keydown\", function (e) {\n        var r = $(\"#hero\").getBoundingClientRect();\n        var heroVisible = r.bottom > 80 && r.top < window.innerHeight - 80;\n        if (!heroVisible || $(\"#productDrawer\").classList.contains(\"on\") || $(\"#cartDrawer\").classList.contains(\"on\") || $(\"#vidDetail\").classList.contains(\"on\")) return;\n        if (e.key === \"ArrowRight\") goTo(Math.round(posTarget) + 1);\n        if (e.key === \"ArrowLeft\") goTo(Math.round(posTarget) - 1);\n      });\n\n      /* intro */\n      if (window.gsap && !reduced) {\n        /* HOME2 2026-10-25 \u2014 blob centering: NO xPercent/yPercent here.\n           The blob's CSS already centers it (left:50%/top:47% +\n           translate(-50%,-50%)); gsap parses that computed translate into\n           px x/y, so adding xPercent:-50 doubled the offset and parked\n           the blob up-left, cut at the top. Scale/opacity only; clearProps\n           hands centering back to CSS (responsive) once the intro ends. */\n        gsap.set(blob, { scale: 0.55, opacity: 0.4 });\n        gsap.to(blob, { scale: 1, opacity: 1, duration: 1.4, ease: \"expo.out\", delay: 0.1, clearProps: \"transform,opacity\" });\n        gsap.from(\".jar-inner\", { y: -190, opacity: 0, duration: 1.15, ease: \"back.out(1.35)\", stagger: 0.09, delay: 0.25, clearProps: \"transform,opacity\" });\n        gsap.from(\".chrome-in, .hero-caption, .hero-ui-in\", { y: 18, opacity: 0, duration: 0.9, ease: \"power3.out\", stagger: 0.12, delay: 0.5, clearProps: \"all\" });\n      }\n\n      /* ================= MARQUEE ================= */\n      (function () {\n        var items = [\"Fuel your training, naturally\", \"Free shipping over $49\", \"Pack savings up to 15%\", \"Sugar-free options\", \"15-day returns\"];\n        var html = \"\";\n        for (var r = 0; r < 2; r++) items.forEach(function (s) { html += \"<span>\" + s + \"</span><i>\u2726</i>\"; });\n        $(\"#marqueeTrack\").innerHTML = html;\n      })();\n\n      /* ================= PDP CARD ================= */\n      var pdpIndex = 2; /* Maca \u2014 the star product, center of the range (index 2 of 5) */\n      var pdpQty = 1;\n      var root = document.documentElement;\n\n      function renderPDP(animate) {\n        var p = PRODUCTS[pdpIndex];\n        root.style.setProperty(\"--pdp-bg\", p.light);\n        root.style.setProperty(\"--pdp-card\", p.card);\n        root.style.setProperty(\"--pdp-deep\", p.deep);\n        root.style.setProperty(\"--pdp-ink\", p.ink);\n        $(\"#pdpTag\").textContent = p.tag;\n        $(\"#pdpTitle\").innerHTML = p.title[0] + \"<br />\" + p.title[1];\n        $(\"#pdpBenefits\").innerHTML = p.benefits.map(function (b) { return \"<li>\" + b + \"</li>\"; }).join(\"\");\n        $(\"#pdpPrice\").textContent = money(p.price);\n        $(\"#pdpPer\").textContent = p.count + \" per jar\";\n        $(\"#pdpQty\").textContent = pdpQty;\n        var img = $(\"#pdpImg\");\n        img.src = p.img; img.alt = p.alt;\n        var pdpSparkLayer = $(\"#pdpSparks\");\n        if (pdpSparkLayer) pdpSparkLayer.style.setProperty(\"--pspark\", p.spark || p.blob);\n        $(\"#pdpFacts\").innerHTML = p.facts.map(function (f) {\n          return '<div class=\"fact\"><b>' + f[0] + \"</b><span>\" + f[1] + \"</span></div>\";\n        }).join(\"\");\n        $$(\"#prodNav button\").forEach(function (d, di) {\n          d.classList.toggle(\"on\", di === pdpIndex);\n          d.setAttribute(\"aria-selected\", di === pdpIndex ? \"true\" : \"false\");\n        });\n        $(\"#sbImg\").src = p.img;\n        $(\"#sbName\").textContent = p.name;\n        $(\"#sbPrice\").textContent = money(p.price);\n        if (animate && window.gsap && !reduced) {\n          gsap.fromTo(img, { opacity: 0, rotate: -22, scale: 0.92 }, { opacity: 1, rotate: -11, scale: 1, duration: 0.7, ease: \"power3.out\" });\n          gsap.fromTo(\".pdp-left > *\", { opacity: 0, y: 14 }, { opacity: 1, y: 0, duration: 0.55, stagger: 0.05, ease: \"power2.out\", clearProps: \"all\" });\n        }\n      }\n      /* Selector circles above the panel (under the marquee): a ring in the\n         product's label color (--c) around the jar's photo \u2014 grayscale until\n         selected (or hovered), full color while selected.\n         Order follows PRODUCTS: Mushroom, Sea Moss, Maca, Apple Cider Vinegar, Creatine. */\n      PRODUCTS.forEach(function (p, i) {\n        var b = document.createElement(\"button\");\n        b.type = \"button\";\n        b.setAttribute(\"role\", \"tab\");\n        b.style.setProperty(\"--c\", p.blob);\n        b.setAttribute(\"aria-label\", \"Show \" + p.name);\n        b.innerHTML = '<img src=\"' + p.img + '\" alt=\"\" draggable=\"false\" />';\n        b.addEventListener(\"click\", function () {\n          pdpIndex = i; pdpQty = 1; renderPDP(true);\n          burstSparkles(p.blob);\n          trackEvent(\"ViewContent\", { content_ids: [p.id], content_name: p.name, value: p.price, currency: \"USD\" });\n        });\n        $(\"#prodNav\").appendChild(b);\n      });\n      $(\"#pdpMinus\").addEventListener(\"click\", function () { pdpQty = Math.max(1, pdpQty - 1); $(\"#pdpQty\").textContent = pdpQty; });\n      $(\"#pdpPlus\").addEventListener(\"click\", function () { pdpQty = Math.min(99, pdpQty + 1); $(\"#pdpQty\").textContent = pdpQty; });\n      $(\"#pdpBuy\").addEventListener(\"click\", function () {\n        addToCart(pdpIndex, pdpQty);\n        trackEvent(\"InitiateCheckout\", { value: cartTotals().grandTotal, currency: \"USD\", num_items: cartCount() });\n        openCart();\n      });\n\n      /* PDP photo sparkles \u2014 AMBIENT and continuous: the jar sheds bright\n         round glowing dots in a never-ending loop, hover or no hover\n         (the jar's sway is ambient too, pure CSS on .pdp-right img;\n         hovering only quickens this flow and adds a small zoom). Every\n         dot is BORN on the jar's outer edge and flies\n         radially outward along the same ray until it reaches the edge of\n         the halo circle behind the jar \u2014 never random directions or\n         distances. Geometry is measured live: the halo's rect gives the\n         circle, and each product's jarbox (the jar's visible silhouette\n         inside its transparent photo, measured from the cutout's alpha)\n         gives the ellipse the dot starts on. The dot itself carries a\n         near-white core with a wide luminous glow in the product's\n         contrast tint (p.spark), so it pops on every panel. The loop\n         runs at a calm ambient rate while the panel is on screen and\n         quickens while the cursor is over the photo; it pauses when the\n         panel scrolls away, and nothing spawns under\n         prefers-reduced-motion. */\n      var pdpSparkTimer = null;\n      var pdpHovering = false;\n      var pdpInView = false;\n      function pdpSparkLoop() {\n        clearInterval(pdpSparkTimer);\n        pdpSparkTimer = null;\n        if (reduced || !pdpInView) return;\n        spawnPdpSpark();\n        pdpSparkTimer = setInterval(spawnPdpSpark, pdpHovering ? 90 : 210);\n      }\n      function spawnPdpSpark() {\n        var layer = $(\"#pdpSparks\");\n        if (reduced || !layer) return;\n        var img = $(\"#pdpImg\");\n        var halo = document.querySelector(\".pdp-right .halo\");\n        if (!img || !halo || !img.animate) return;\n        var p = PRODUCTS[pdpIndex];\n        var lr = layer.getBoundingClientRect();\n        var hr = halo.getBoundingClientRect();\n        var cx = hr.left + hr.width / 2 - lr.left;\n        var cy = hr.top + hr.height / 2 - lr.top;\n        var haloR = hr.width / 2;\n        var jb = p.jarbox || [0.5, 0.5, 0.19, 0.4];\n        var iw = img.offsetWidth, ih = img.offsetHeight;\n        var ir = img.getBoundingClientRect();\n        var jcx = ir.left + ir.width / 2 - lr.left + (jb[0] - 0.5) * iw;\n        var jcy = ir.top + ir.height / 2 - lr.top + (jb[1] - 0.5) * ih;\n        var rx = jb[2] * iw, ry = jb[3] * ih;\n        var ang = Math.random() * Math.PI * 2;\n        var dx = Math.cos(ang), dy = Math.sin(ang);\n        /* point where this ray crosses the jar's outer edge (ellipse) */\n        var t = 1 / Math.sqrt((dx / rx) * (dx / rx) + (dy / ry) * (dy / ry));\n        var sx = jcx + dx * t, sy = jcy + dy * t;\n        /* continue along the same ray out to the halo circle's edge */\n        var vx = sx - cx, vy = sy - cy;\n        var vl = Math.sqrt(vx * vx + vy * vy) || 1;\n        var ex = cx + (vx / vl) * (haloR + 8), ey = cy + (vy / vl) * (haloR + 8);\n        var sp = document.createElement(\"span\");\n        sp.className = \"pdp-spark\";\n        var sz = (16 + Math.random() * 19).toFixed(1);\n        sp.style.width = sz + \"px\"; sp.style.height = sz + \"px\";\n        layer.appendChild(sp);\n        var dur = 850 + Math.random() * 450;\n        var anim = sp.animate([\n          { transform: \"translate(\" + sx.toFixed(1) + \"px,\" + sy.toFixed(1) + \"px) translate(-50%,-50%) scale(.5)\", opacity: 0 },\n          { opacity: 1, offset: 0.14 },\n          { opacity: 0.95, offset: 0.62 },\n          { transform: \"translate(\" + ex.toFixed(1) + \"px,\" + ey.toFixed(1) + \"px) translate(-50%,-50%) scale(1.05)\", opacity: 0 }\n        ], { duration: dur, easing: \"cubic-bezier(.16,.84,.44,1)\", fill: \"forwards\" });\n        anim.onfinish = function () { sp.remove(); };\n        setTimeout(function () { if (sp.parentNode) sp.remove(); }, dur + 900);\n      }\n      var pdpImgEl = $(\"#pdpImg\");\n      /* the ambient loop runs whenever the panel is on screen (a margin\n         keeps it alive just before it scrolls into view) */\n      if (\"IntersectionObserver\" in window && pdpImgEl) {\n        new IntersectionObserver(function (entries) {\n          pdpInView = entries[0].isIntersecting;\n          pdpSparkLoop();\n        }, { rootMargin: \"240px\" }).observe(pdpImgEl);\n      } else {\n        pdpInView = true;\n        pdpSparkLoop();\n      }\n      /* hovering keeps the jar's sway (CSS) and quickens the sparkle\n         flow; leaving returns to the calm ambient rate \u2014 the sparkles\n         themselves never stop while the panel is visible */\n      pdpImgEl.addEventListener(\"mouseenter\", function () { pdpHovering = true; pdpSparkLoop(); });\n      pdpImgEl.addEventListener(\"mouseleave\", function () { pdpHovering = false; pdpSparkLoop(); });\n\n      /* ================= VIDEO STRIP =================\n         \"See it in action\": several SMALL product-in-use clips\n         side by side in one row that slides on its own \u2014 a\n         continuous, seamless loop in its own section above\n         Customer reviews. The slide set is rendered TWICE and\n         the scroll offset wraps by one set width, so the row\n         never ends and never jumps. A requestAnimationFrame\n         loop drifts the strip slowly left; arrows glide it by\n         one card and dots jump to a clip (shortest way round).\n         The drift pauses while the strip is held (touch /\n         keyboard focus \u2014 never hover: it keeps rotating under\n         the cursor) and resumes on release; under\n         prefers-reduced-motion there is no drift at all and\n         arrows/dots jump instantly. Every clip loops in place\n         and autoplays MUTED \u2014 the strip itself never sounds \u2014\n         from a light 720p preview file (the full-resolution\n         file is reserved for the detail view), and only the\n         cards actually inside the viewport play. Each clip\n         starts at a different point (its slide's offset,\n         applied once its metadata lands) so the row never\n         begins or ends in unison. Clicking a card opens the\n         DETAIL VIEW (below): the clip large on one side,\n         starting WITH ITS SOUND ON (the click is the gesture\n         that allows it) with a toggle underneath to mute and\n         unmute, and the product sheet on the other side\n         (name, benefit line, the animated official jar photo,\n         real price, Buy Now).\n         Closing returns to the strip. Only clips inside the\n         viewport play \u2014 the rest stay paused \u2014 everything\n         pauses while the section is off screen or the detail\n         view is open. The drift is transform-only and the\n         card step is measured once and cached (see vidStepC),\n         so the frame loop never reads layout. The strip runs\n         eight clips: the seven maca clips and the at-home\n         creatine clip. */\n      /* src = the full-resolution file, reserved for the detail\n         view (with sound); prev = a light 720p version (no audio\n         track \u2014 the strip is always muted) that the strip cards\n         play, so the clips decode and stream smoothly instead\n         of full-size files fighting for bandwidth. */\n      var VIDEO_SLIDES = window.NV2_SLIDES || [];\n      var VID_OPEN_SVG = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 4H4v5M15 4h5v5M9 20H4v-5M15 20h5v-5\"/></svg>';\n      var vidTrack = $(\"#vidTrack\");\n      function vidSlideHTML(s, dup) {\n        return '<figure class=\"vid-slide\"' + (dup ? ' aria-hidden=\"true\"' : \"\") + \">\" +\n          '<div class=\"vid-frame\" role=\"button\" tabindex=\"-1\" aria-label=\"Open ' + s.name + ' video and product details\"><video src=\"' + s.prev + '\" muted loop playsinline preload=\"metadata\"' + (reduced ? \"\" : \" autoplay\") + ' aria-label=\"' + s.name + ' in use\"></video>' +\n          '<span class=\"vid-open\" aria-hidden=\"true\">' + VID_OPEN_SVG + \"</span></div>\" +\n          '<figcaption class=\"vid-cap\"><span class=\"dot\" style=\"background:' + s.color + ';color:' + s.color + '\"></span>' +\n          '<span><b>' + s.name + '</b><span class=\"ben\">' + s.benefit + '</span></span></figcaption></figure>';\n      }\n      vidTrack.innerHTML =\n        VIDEO_SLIDES.map(function (s) { return vidSlideHTML(s, false); }).join(\"\") +\n        VIDEO_SLIDES.map(function (s) { return vidSlideHTML(s, true); }).join(\"\") +\n        VIDEO_SLIDES.map(function (s) { return vidSlideHTML(s, true); }).join(\"\");\n\n      var vidVids = $$(\"#vidTrack video\");\n      var vidSlideEls = $$(\"#vidTrack .vid-slide\");\n      var vidOffset = 0, vidGlide = 0, vidInView = false, vidHold = false, vidLoopOn = false;\n      var vidActiveDot = -1, vidLast = 0, vidVW = 0, vidDetailOpen = false;\n      /* The card step is MEASURED ONCE (at init and on resize)\n         and cached: reading offsetLeft inside the per-frame\n         render forced a layout pass every frame and made the\n         drift judder. The render loop below now touches only\n         the track's transform \u2014 no layout reads, no writes\n         besides transform \u2014 so the rotation stays smooth. */\n      var vidStepC = 0;\n      function vidMeasureStep() {\n        var a = vidSlideEls[0], b = vidSlideEls[1];\n        if (!a) { vidStepC = 0; return; }\n        vidStepC = b ? (b.offsetLeft - a.offsetLeft) : (a.getBoundingClientRect().width + 16);\n      }\n      function vidStep() { return vidStepC; }\n      function vidSetW() { return vidStepC * VIDEO_SLIDES.length; }\n      function vidWrap() {\n        var w = vidSetW(); if (!w) return;\n        vidOffset = ((vidOffset % w) + w) % w;\n      }\n      function vidRender() {\n        vidTrack.style.transform = \"translateX(\" + (-vidOffset) + \"px)\";\n        var step = vidStep(); if (!step) return;\n        var idx = Math.round(vidOffset / step) % VIDEO_SLIDES.length;\n        if (idx !== vidActiveDot) {\n          vidActiveDot = idx;\n          $$(\"#vidDots [data-vdot]\").forEach(function (b, d) { b.classList.toggle(\"on\", d === idx); });\n        }\n        /* only the clips actually inside the viewport play, and\n           nothing in the strip plays while the detail view is\n           open or under reduced motion */\n        var cardW = step - 16;\n        vidVids.forEach(function (v, i) {\n          var x = i * step - vidOffset;\n          var vis = x + cardW > 0 && x < vidVW;\n          var should = vidInView && vis && !reduced && !vidDetailOpen;\n          if (should && v.paused) { var pr = v.play(); if (pr && pr.catch) pr.catch(function () {}); }\n          else if (!should && !v.paused) v.pause();\n        });\n      }\n      /* the drift loop: a slow continuous slide (28px/s), an arrow\n         or dot glide first at a brisker pace, nothing at all\n         while the strip is held or off screen */\n      function vidFrame(ts) {\n        if (!vidLast) vidLast = ts;\n        var dt = Math.min(0.05, (ts - vidLast) / 1000); vidLast = ts;\n        if (vidInView || vidGlide !== 0) {\n          if (vidGlide !== 0) {\n            var g = (vidGlide < 0 ? -1 : 1) * Math.min(Math.abs(vidGlide), 660 * dt);\n            vidOffset += g; vidGlide -= g;\n          } else if (!reduced && !vidHold) {\n            vidOffset += 28 * dt;\n          }\n          vidWrap();\n          vidRender();\n        }\n        /* HOME2 2026-10-25 \u2014 the drift loop used to re-request a frame\n           even with the strip off screen; now it stops (and the observer\n           below restarts it on return). A glide in progress still runs\n           to completion off screen, then the loop stops. */\n        if (vidInView || vidGlide !== 0) { requestAnimationFrame(vidFrame); }\n        else { vidLoopOn = false; }\n      }\n      function renderVidDots() {\n        var html = \"\";\n        for (var d = 0; d < VIDEO_SLIDES.length; d++) html += '<button data-vdot=\"' + d + '\" aria-label=\"Go to video position ' + (d + 1) + '\"></button>';\n        $(\"#vidDots\").innerHTML = html;\n        $$(\"#vidDots [data-vdot]\").forEach(function (b) {\n          b.addEventListener(\"click\", function () { vidGoTo(parseInt(b.getAttribute(\"data-vdot\"), 10)); });\n        });\n        vidActiveDot = -1; /* force a dot refresh on the next render */\n      }\n      function vidGoTo(i) {\n        var w = vidSetW(); if (!w) return;\n        var target = i * vidStep();\n        if (reduced) { vidOffset = target; vidGlide = 0; vidWrap(); vidRender(); return; }\n        var delta = ((target - vidOffset) % w + w) % w;\n        if (delta > w / 2) delta -= w; /* shortest way round the loop */\n        vidGlide = delta;\n      }\n      $(\"#vidPrev\").addEventListener(\"click\", function () {\n        if (reduced) { vidOffset -= vidStep(); vidWrap(); vidRender(); }\n        else vidGlide -= vidStep();\n      });\n      $(\"#vidNext\").addEventListener(\"click\", function () {\n        if (reduced) { vidOffset += vidStep(); vidWrap(); vidRender(); }\n        else vidGlide += vidStep();\n      });\n      var vidSec = $(\"#in-action\");\n      /* Holding the strip pauses the drift; releasing resumes it.\n         HOVER NEVER PAUSES IT: the strip keeps rotating while\n         the cursor sits over the cards (Adrian's call \u2014 the\n         rotation is the section's life, and a card is clicked\n         in passing, not by holding the strip still). The holds\n         that remain are tracked separately so a touch tap can't\n         wedge the strip still (a tap sets pointer/focus state\n         that touch never \"leaves\"): the touch hold ends at\n         pointerup/cancel, and only keyboard-style focus\n         (:focus-visible) counts as a focus hold. */\n      var vidTouchHold = false, vidFocusHold = false;\n      function vidSyncHold() {\n        vidHold = vidTouchHold || vidFocusHold;\n      }\n      vidSec.addEventListener(\"pointerdown\", function () { vidTouchHold = true; vidSyncHold(); });\n      [\"pointerup\", \"pointercancel\"].forEach(function (ev) {\n        vidSec.addEventListener(ev, function () { vidTouchHold = false; vidSyncHold(); });\n      });\n      vidSec.addEventListener(\"focusin\", function (e) {\n        var kb = false;\n        try { kb = e.target.matches(\":focus-visible\"); } catch (err) {}\n        if (kb) { vidFocusHold = true; vidSyncHold(); }\n      });\n      vidSec.addEventListener(\"focusout\", function (e) {\n        if (!vidSec.contains(e.relatedTarget)) { vidFocusHold = false; vidSyncHold(); }\n      });\n      /* Staggered starts: each clip seeks to its slide's offset\n         once its metadata lands, so in the strip's initial view\n         no two clips begin \u2014 or loop back and end \u2014 at the same\n         moment. Both copies of a slide share its offset, so the\n         pair stays in step around the seamless wrap. Seeking a\n         paused clip (reduced motion) still lands it on that\n         offset's frame, keeping the stagger visible. */\n      vidVids.forEach(function (v, i) {\n        var off = VIDEO_SLIDES[i % VIDEO_SLIDES.length].offset || 0;\n        if (!off) return;\n        var seek = function () {\n          if (isFinite(v.duration) && v.duration > off + 0.25) {\n            try { v.currentTime = off; } catch (e) {}\n          }\n        };\n        if (v.readyState >= 1) seek();\n        else v.addEventListener(\"loadedmetadata\", seek);\n      });\n      /* Click a card: open the detail view for that clip's\n         product. The handler sits on the frame (the whole 9:16\n         box is the target; the video and the corner badge never\n         intercept as separate controls). */\n      $$(\"#vidTrack .vid-frame\").forEach(function (frame, i) {\n        frame.addEventListener(\"click\", function () {\n          openVidDetail(i % VIDEO_SLIDES.length);\n        });\n      });\n\n      /* ================= VIDEO DETAIL VIEW =================\n         The clothing-store pattern: the clicked clip opens\n         large on one side \u2014 starting WITH ITS SOUND ON, which\n         the card's own click gesture allows (the hardened\n         playback block below owns how that start is made\n         failure-proof, tap-to-play overlay included) \u2014 with a\n         button underneath that turns the sound off and back\n         on. The\n         product sheet on the other side carries the name, the\n         benefit line, the product's official jar photo with\n         the store's own animation (the panels' ambient sway,\n         hover zoom and color sparkles), the real price and a\n         Buy Now in the product's color (white text on every\n         formula in the current range, matching the hero's\n         Buy Now). Desktop lays them side by side;\n         mobile stacks video over sheet (CSS). Buy Now adds\n         the jar to the cart and opens the cart, like every\n         other Buy Now on the page. Closing \u2014 button, backdrop\n         tap or Escape \u2014 pauses the detail clip, stops the jar\n         sparkles and returns to the strip, which stays muted\n         throughout. */\n      var vidDetailEl = $(\"#vidDetail\"), vidDetailVideo = $(\"#vidDetailVideo\"),\n          vidSoundBtn = $(\"#vidSoundBtn\"), vidDetailSlide = 0;\n      function setVidSoundUI() {\n        var muted = vidDetailVideo.muted;\n        vidSoundBtn.classList.toggle(\"muted\", muted);\n        vidSoundBtn.setAttribute(\"aria-pressed\", muted ? \"false\" : \"true\");\n        vidSoundBtn.setAttribute(\"aria-label\", muted ? \"Turn video sound on\" : \"Turn video sound off\");\n        $(\"#vidSoundLabel\").textContent = muted ? \"Sound off\" : \"Sound on\";\n      }\n      /* Detail-view jar sparkles \u2014 the product panels' ambient\n         flow retargeted at the sheet's jar: soft round dots in\n         the product's contrast tint are born on the jar's outer\n         edge (its jarbox ellipse, measured live) and fly\n         radially outward to the halo's edge behind it, looping\n         at a calm rate while the detail view is open. Nothing\n         spawns under prefers-reduced-motion. */\n      var vdSparkTimer = null, vdIndex = 0;\n      function vdSparkLoop() {\n        clearInterval(vdSparkTimer);\n        vdSparkTimer = null;\n        if (reduced || !vidDetailOpen) return;\n        spawnVdSpark();\n        vdSparkTimer = setInterval(spawnVdSpark, 210);\n      }\n      function spawnVdSpark() {\n        var layer = $(\"#vidDetailSparks\");\n        if (reduced || !layer || !vidDetailOpen) return;\n        var img = $(\"#vidDetailImg\");\n        var halo = document.querySelector(\"#vidDetailJar .halo\");\n        if (!img || !halo || !img.animate) return;\n        var p = PRODUCTS[vdIndex];\n        var lr = layer.getBoundingClientRect();\n        var hr = halo.getBoundingClientRect();\n        var cx = hr.left + hr.width / 2 - lr.left;\n        var cy = hr.top + hr.height / 2 - lr.top;\n        var haloR = hr.width / 2;\n        var jb = p.jarbox || [0.5, 0.5, 0.19, 0.4];\n        var iw = img.offsetWidth, ih = img.offsetHeight;\n        var ir = img.getBoundingClientRect();\n        var jcx = ir.left + ir.width / 2 - lr.left + (jb[0] - 0.5) * iw;\n        var jcy = ir.top + ir.height / 2 - lr.top + (jb[1] - 0.5) * ih;\n        var rx = jb[2] * iw, ry = jb[3] * ih;\n        var ang = Math.random() * Math.PI * 2;\n        var dx = Math.cos(ang), dy = Math.sin(ang);\n        /* point where this ray crosses the jar's outer edge (ellipse) */\n        var t = 1 / Math.sqrt((dx / rx) * (dx / rx) + (dy / ry) * (dy / ry));\n        var sx = jcx + dx * t, sy = jcy + dy * t;\n        /* continue along the same ray out to the halo circle's edge */\n        var vx = sx - cx, vy = sy - cy;\n        var vl = Math.sqrt(vx * vx + vy * vy) || 1;\n        var ex = cx + (vx / vl) * (haloR + 8), ey = cy + (vy / vl) * (haloR + 8);\n        var sp = document.createElement(\"span\");\n        sp.className = \"pdp-spark\";\n        var sz = (16 + Math.random() * 19).toFixed(1);\n        sp.style.width = sz + \"px\"; sp.style.height = sz + \"px\";\n        layer.appendChild(sp);\n        var dur = 850 + Math.random() * 450;\n        var anim = sp.animate([\n          { transform: \"translate(\" + sx.toFixed(1) + \"px,\" + sy.toFixed(1) + \"px) translate(-50%,-50%) scale(.5)\", opacity: 0 },\n          { opacity: 1, offset: 0.14 },\n          { opacity: 0.95, offset: 0.62 },\n          { transform: \"translate(\" + ex.toFixed(1) + \"px,\" + ey.toFixed(1) + \"px) translate(-50%,-50%) scale(1.05)\", opacity: 0 }\n        ], { duration: dur, easing: \"cubic-bezier(.16,.84,.44,1)\", fill: \"forwards\" });\n        anim.onfinish = function () { sp.remove(); };\n        setTimeout(function () { if (sp.parentNode) sp.remove(); }, dur + 900);\n      }\n      /* ============ detail playback, hardened ============\n         The detail clip must start ON ITS OWN, WITH SOUND, for\n         every one of the 8 clips \u2014 the heavy maca-epic1\n         included. Its player is a DEDICATED element (never\n         shared with the strip's muted previews), playsinline,\n         preload=\"auto\". Layers, in order:\n         1) In the card's click handler, synchronously: unmute,\n            volume 1, play() FIRST \u2014 before any seek or source\n            change \u2014 so the play call itself rides the click\n            gesture; then point the player at the full-res clip\n            and play() again in the same synchronous block.\n         2) Every play() promise is handled. Retries are\n            PERSISTENT listeners on canplay / canplaythrough \u2014\n            not one-shots attached inside a catch, which a fast\n            cached load could outrun \u2014 plus a retry on the next\n            pointer event anywhere while the view is open.\n         3) A watchdog re-checks after opening: while the view\n            is open the clip should be playing, so any pause is\n            retried; if it is STILL paused, the \"Tap to play\n            with sound\" overlay appears over the video \u2014 one tap\n            (a fresh gesture) starts it with sound. The clip is\n            never left sitting paused under a \"Sound on\" label. */\n      var vdSoundOn = true, vdTimers = [];\n      var vidTap = $(\"#vidTap\");\n      function vdShowTap() { if (vidDetailOpen && vidDetailVideo.paused) vidTap.classList.add(\"on\"); }\n      function vdHideTap() { vidTap.classList.remove(\"on\"); }\n      function vdLater(fn, ms) { vdTimers.push(setTimeout(fn, ms)); }\n      function vdClearTimers() { for (var t = 0; t < vdTimers.length; t++) clearTimeout(vdTimers[t]); vdTimers = []; }\n      function vdPlay() {\n        if (!vidDetailOpen) return;\n        if (vdSoundOn) { vidDetailVideo.muted = false; vidDetailVideo.volume = 1; }\n        var pr = vidDetailVideo.play();\n        if (pr && pr.catch) pr.catch(function () { /* persistent retries + watchdog cover it */ });\n      }\n      function vdCheck() {\n        if (!vidDetailOpen) return;\n        if (!vidDetailVideo.paused) { vdHideTap(); return; }\n        vdPlay();\n        vdLater(function () { if (vidDetailOpen && vidDetailVideo.paused) vdShowTap(); }, 700);\n      }\n      [\"canplay\", \"canplaythrough\"].forEach(function (ev) {\n        vidDetailVideo.addEventListener(ev, function () {\n          if (vidDetailOpen && vidDetailVideo.paused) vdPlay();\n        });\n      });\n      document.addEventListener(\"pointerdown\", function () {\n        if (vidDetailOpen && vidDetailVideo.paused) vdPlay();\n      });\n      vidDetailVideo.addEventListener(\"playing\", vdHideTap);\n      vidDetailVideo.addEventListener(\"pause\", function () {\n        if (vidDetailOpen) vdLater(vdCheck, 450);\n      });\n      vidDetailVideo.addEventListener(\"click\", function () { if (vidDetailVideo.paused) vdPlay(); });\n      vidTap.addEventListener(\"click\", function () {\n        vdSoundOn = true;\n        vdPlay();\n        setVidSoundUI();\n        vdLater(vdCheck, 700);\n      });\n      function openVidDetail(slideIdx) {\n        vidDetailSlide = slideIdx;\n        var s = VIDEO_SLIDES[slideIdx];\n        var p = PRODUCTS[s.product];\n        vidDetailOpen = true;\n        vdSoundOn = true;\n        /* START PLAYBACK FIRST \u2014 synchronously inside the card's\n           own click handler, before any seek or source change:\n           unmute, volume up, play(). The click is the gesture\n           that lets the clip start WITH SOUND; the source swap\n           and a second play() land in the same synchronous\n           block, so no frame of a previous clip slips through\n           and no pre-play seek happens on a fresh src (a seek\n           before metadata can abort the play in some browsers;\n           a fresh src starts at 0 on its own). */\n        vidDetailVideo.muted = false;\n        vidDetailVideo.volume = 1;\n        var prime = vidDetailVideo.play();\n        if (prime && prime.catch) prime.catch(function () {});\n        var sameSrc = vidDetailVideo.getAttribute(\"src\") === s.src;\n        if (!sameSrc) vidDetailVideo.src = s.src;\n        if (sameSrc) { try { vidDetailVideo.currentTime = 0; } catch (e) {} }\n        vdPlay();\n        vdHideTap();\n        vdClearTimers();\n        vdLater(vdCheck, 500);\n        vdLater(vdCheck, 1600);\n        vdLater(vdCheck, 3200);\n        var dot = $(\"#vidDetailDot\");\n        dot.style.background = s.color; dot.style.color = s.color;\n        $(\"#vidDetailChip\").textContent = \"See it in action\";\n        $(\"#vidDetailName\").textContent = p.name;\n        $(\"#vidDetailBenefit\").textContent = s.benefit;\n        $(\"#vidDetailPrice\").textContent = money(p.price);\n        $(\"#vidDetailCount\").textContent = p.count + \" per jar\";\n        var buy = $(\"#vidDetailBuy\");\n        buy.style.backgroundColor = p.blob;\n        buy.style.color = \"#ffffff\";\n        /* the sheet's jar: the product's official photo, tinted\n           halo and sparkles in its colors, swaying via CSS */\n        vdIndex = s.product;\n        $(\"#vidDetailJar\").style.setProperty(\"--vd-card\", p.blob);\n        $(\"#vidDetailSparks\").style.setProperty(\"--pspark\", p.spark || p.blob);\n        var vdImg = $(\"#vidDetailImg\");\n        vdImg.src = p.img; vdImg.alt = p.alt;\n        setVidSoundUI();\n        vidDetailEl.classList.add(\"on\");\n        vidDetailEl.setAttribute(\"aria-hidden\", \"false\");\n        /* lock the page scroll without shifting the layout: the\n           hidden scrollbar's width is padded back on the body\n           and restored on close, so opening/closing the detail\n           never nudges the page sideways */\n        var sbw = window.innerWidth - document.documentElement.clientWidth;\n        document.body.style.overflow = \"hidden\";\n        if (sbw > 0) document.body.style.paddingRight = sbw + \"px\";\n        vidRender();\n        vdSparkLoop();\n        trackEvent(\"ViewContent\", { content_ids: [p.id], content_name: p.name, value: p.price, currency: \"USD\" });\n      }\n      function closeVidDetail() {\n        if (!vidDetailOpen) return;\n        vidDetailOpen = false;\n        vdClearTimers();\n        vdHideTap();\n        vidDetailVideo.pause();\n        clearInterval(vdSparkTimer); vdSparkTimer = null;\n        var vdLayer = $(\"#vidDetailSparks\"); if (vdLayer) vdLayer.innerHTML = \"\";\n        vidDetailEl.classList.remove(\"on\");\n        vidDetailEl.setAttribute(\"aria-hidden\", \"true\");\n        document.body.style.overflow = \"\";\n        document.body.style.paddingRight = \"\";\n        vidRender();\n      }\n      vidSoundBtn.addEventListener(\"click\", function () {\n        vdSoundOn = !vdSoundOn;\n        vidDetailVideo.muted = !vdSoundOn;\n        if (vdSoundOn) vidDetailVideo.volume = 1;\n        /* the tap is a fresh gesture: (re)start the clip too, so\n           a strict browser that left it paused recovers here */\n        vdPlay();\n        setVidSoundUI();\n      });\n      $(\"#vidDetailClose\").addEventListener(\"click\", closeVidDetail);\n      vidDetailEl.addEventListener(\"click\", function (e) { if (e.target === vidDetailEl) closeVidDetail(); });\n      document.addEventListener(\"keydown\", function (e) { if (e.key === \"Escape\") closeVidDetail(); });\n      $(\"#vidDetailBuy\").addEventListener(\"click\", function () {\n        var s = VIDEO_SLIDES[vidDetailSlide];\n        closeVidDetail();\n        addToCart(s.product, 1);\n        openCart();\n      });\n      if (\"IntersectionObserver\" in window) {\n        new IntersectionObserver(function (entries) {\n          vidInView = entries[0].isIntersecting;\n          if (!vidInView) vidVids.forEach(function (v) { if (!v.paused) v.pause(); });\n          else {\n            vidRender();\n            if (!vidLoopOn) { vidLoopOn = true; requestAnimationFrame(vidFrame); }\n          }\n        }, { rootMargin: \"120px\" }).observe(vidSec);\n      } else { vidInView = true; }\n      function vidMeasure() { vidVW = $(\"#vidViewport\").clientWidth; vidMeasureStep(); }\n      window.addEventListener(\"resize\", function () { vidMeasure(); vidRender(); });\n      renderVidDots();\n      vidMeasure();\n      vidRender();\n      vidLoopOn = true;\n      requestAnimationFrame(vidFrame);\n\n      /* ================= BUILD YOUR PACK ================= */\n      var pack = {}; /* id -> qty */\n      var EYE_SVG = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 12s3.5-6.5 10-6.5S22 12 22 12s-3.5 6.5-10 6.5S2 12 2 12z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>';\n\n      $(\"#packGrid\").innerHTML = PRODUCTS.map(function (p, i) {\n        return '<article class=\"pack-card\" data-pcard=\"' + i + '\">' +\n          '<button type=\"button\" class=\"pk-eye\" data-peye=\"' + i + '\" aria-label=\"Quick view ' + p.name + '\">' + EYE_SVG + \"</button>\" +\n          '<span class=\"pk-count\" data-pcount=\"' + p.id + '\"></span>' +\n          '<div class=\"pk-img\" style=\"background:' + p.soft + '\"><img loading=\"lazy\" src=\"' + p.img + '\" alt=\"' + p.alt + '\" /></div>' +\n          \"<h3>\" + p.name + \"</h3>\" +\n          '<p class=\"pk-meta\">' + p.count + \" \u00B7 \" + p.tag + \"</p>\" +\n          '<div class=\"pk-row\"><span class=\"pk-price\">' + money(p.price) + \"</span>\" +\n          '<button class=\"pk-add\" data-padd=\"' + i + '\" aria-label=\"Add ' + p.name + ' to your pack\">+</button></div></article>';\n      }).join(\"\");\n\n      /* The quick-view handler lives on the eye BUTTON element itself:\n         the whole 44px white circle is the button and every point of it\n         must open the quick view. The glyph inside is pointer-events:none\n         (CSS), the button carries a z-index above the card's layers, and\n         stopPropagation keeps an eye tap from ever reaching the card's\n         add-to-pack handling. (The delegated document handler below\n         checks [data-peye] first too, as a fallback.) */\n      $$(\"#packGrid .pk-eye\").forEach(function (btn) {\n        btn.addEventListener(\"click\", function (e) {\n          e.stopPropagation();\n          openDrawer(parseInt(btn.getAttribute(\"data-peye\"), 10));\n        });\n      });\n\n      function packCount() {\n        return Object.keys(pack).reduce(function (a, id) { return a + pack[id]; }, 0);\n      }\n      function packMath() {\n        var subtotal = 0, count = packCount();\n        Object.keys(pack).forEach(function (id) {\n          var p = PRODUCTS.filter(function (x) { return x.id === id; })[0];\n          subtotal += p.price * pack[id];\n        });\n        var rate = packRate(count);\n        return { subtotal: subtotal, count: count, rate: rate, discount: subtotal * rate, total: subtotal * (1 - rate) };\n      }\n      function renderPack(bump) {\n        var m = packMath();\n        $(\"#packCount\").textContent = m.count;\n        $(\"#packState\").textContent = m.count === 0 ? \"YOUR PACK IS EMPTY\" : (m.count === 1 ? \"YOUR PACK \u00B7 1 JAR\" : \"YOUR PACK \u00B7 \" + m.count + \" JARS\");\n        $(\"#packStateSub\").textContent = m.count === 0\n          ? \"Tap any jar card to add it to your pack.\"\n          : (m.rate > 0 ? \"You're saving \" + Math.round(m.rate * 100) + \"% on this pack.\" : \"Add more jars to unlock a pack discount.\");\n        var hint = $(\"#packHint\");\n        if (m.count >= 7) {\n          hint.textContent = \"Best deal unlocked \u2014 15% off your pack\";\n          hint.classList.add(\"done\");\n        } else {\n          hint.classList.remove(\"done\");\n          var next = [3, 5, 7].filter(function (t) { return t > m.count; })[0];\n          hint.textContent = \"Add \" + (next - m.count) + \" more and get \" + Math.round(packRate(next) * 100) + \"% off\";\n        }\n        $(\"#packItems\").innerHTML = Object.keys(pack).map(function (id) {\n          var p = PRODUCTS.filter(function (x) { return x.id === id; })[0];\n          return '<div class=\"pk-line\"><img src=\"' + p.img + '\" alt=\"\" style=\"background:' + p.soft + '\" />' +\n            '<span class=\"nm\">' + p.short + \"</span>\" +\n            '<span class=\"pk-step\"><button data-pdec=\"' + id + '\" aria-label=\"Remove one ' + p.short + '\">\u2212</button><output>' + pack[id] + '</output><button data-pinc=\"' + id + '\" aria-label=\"Add one ' + p.short + '\">+</button></span>' +\n            '<span class=\"pr\">' + money(p.price * pack[id]) + \"</span></div>\";\n        }).join(\"\");\n        $$(\"#packPanel .pk-tier\").forEach(function (t) {\n          t.classList.toggle(\"on\", m.count >= parseInt(t.getAttribute(\"data-tier\"), 10));\n        });\n        $(\"#packSubtotal\").textContent = money(m.subtotal);\n        $(\"#packDiscRow\").style.display = m.discount > 0 ? \"\" : \"none\";\n        if (m.discount > 0) {\n          $(\"#packDiscLabel\").textContent = \"Pack discount (\u2212\" + Math.round(m.rate * 100) + \"%)\";\n          $(\"#packDiscAmt\").textContent = \"\u2212\" + money(m.discount);\n        }\n        $(\"#packTotal\").textContent = money(m.total);\n        $(\"#packShipNote\").innerHTML = m.count === 0\n          ? 'Free shipping on orders over <b>$49</b>.'\n          : (m.total >= FREE_SHIP ? 'Your pack ships <b>free</b>.' : 'Free shipping over $49 \u2014 add <b>' + money(FREE_SHIP - m.total) + \"</b> more.\");\n        /* The pack section's own shipping bar follows the pack BEING\n           BUILT \u2014 the panel's running total \u2014 with exactly the cart\n           bar's behavior: progressive fill = total / $49 capped at\n           100%, a \"how much is missing\" message below $49, and at $49+\n           the bar sits completely full with the green glow and the\n           congratulations message. (The cart drawer's mini bar keeps\n           tracking the cart total in renderCart.) */\n        $(\"#shipFill\").style.width = Math.min(100, (m.total / FREE_SHIP) * 100) + \"%\";\n        $(\"#shipFill\").classList.toggle(\"full\", m.total >= FREE_SHIP);\n        $(\"#shipMsg\").innerHTML = m.count === 0\n          ? 'Your pack is empty \u2014 add <b>$49.00</b> to unlock <b>free shipping</b>.'\n          : (m.total >= FREE_SHIP\n              ? 'Congratulations! Shipping is <b>on us</b> \u2014 your order ships <b>free</b>.'\n              : 'Your pack: <b>' + money(m.total) + '</b> \u2014 add <b>' + money(FREE_SHIP - m.total) + '</b> more for <b>free shipping</b>.');\n        var btn = $(\"#packAdd\");\n        btn.disabled = m.count === 0;\n        btn.textContent = \"ADD PACK (\" + m.count + \") \u2192\";\n        PRODUCTS.forEach(function (p) {\n          var chip = document.querySelector('[data-pcount=\"' + p.id + '\"]');\n          var q = pack[p.id] || 0;\n          chip.textContent = q > 0 ? \"\u00D7\" + q + \" in pack\" : \"\";\n          chip.classList.toggle(\"on\", q > 0);\n        });\n        if (bump && window.gsap && !reduced) {\n          gsap.fromTo(\"#packCount\", { scale: 1.35 }, { scale: 1, duration: 0.45, ease: \"back.out(2.2)\" });\n          gsap.fromTo(\"#packTotal\", { scale: 1.1 }, { scale: 1, duration: 0.4, ease: \"power2.out\" });\n          gsap.fromTo(\"#packItems .pk-line\", { opacity: 0, x: 12 }, { opacity: 1, x: 0, duration: 0.35, stagger: 0.04, ease: \"power2.out\", clearProps: \"all\" });\n        }\n      }\n      function flyToPack(imgEl) {\n        /* Flight made actually visible (home fix 2026-10-25, Task C): the old\n           0.65s / 44x52 / 0.2-opacity ghost was too fast and faint to catch,\n           and it silently did nothing when the gsap CDN was blocked. Now:\n           1.0s, 64x76, 0.45 opacity, plus a CSS-transition fallback when\n           gsap is unavailable. Reduced-motion still skips the flight. */\n        if (!imgEl || reduced) return;\n        var r = imgEl.getBoundingClientRect(), t = $(\"#packPanel\").getBoundingClientRect();\n        var ghost = imgEl.cloneNode();\n        ghost.className = \"pack-fly\";\n        ghost.style.left = r.left + \"px\"; ghost.style.top = r.top + \"px\";\n        ghost.style.width = r.width + \"px\"; ghost.style.height = r.height + \"px\";\n        document.body.appendChild(ghost);\n        var tx = t.left + t.width / 2 - 32, ty = t.top + 24;\n        if (window.gsap) {\n          gsap.to(ghost, {\n            left: tx, top: ty, width: 64, height: 76,\n            opacity: 0.45, rotate: 10, duration: 1.0, ease: \"power2.inOut\",\n            onComplete: function () { ghost.remove(); }\n          });\n        } else {\n          ghost.style.transition = \"left 1s ease-in-out, top 1s ease-in-out, width 1s ease-in-out, height 1s ease-in-out, opacity 1s ease-in-out, transform 1s ease-in-out\";\n          requestAnimationFrame(function () {\n            requestAnimationFrame(function () {\n              ghost.style.left = tx + \"px\"; ghost.style.top = ty + \"px\";\n              ghost.style.width = \"64px\"; ghost.style.height = \"76px\";\n              ghost.style.opacity = \"0.45\"; ghost.style.transform = \"rotate(10deg)\";\n            });\n          });\n          setTimeout(function () { if (ghost.parentNode) ghost.remove(); }, 1200);\n        }\n      }\n      function addToPack(i, card) {\n        var p = PRODUCTS[i];\n        pack[p.id] = (pack[p.id] || 0) + 1;\n        flyToPack(card ? card.querySelector(\".pk-img img\") : null);\n        renderPack(true);\n      }\n      document.addEventListener(\"click\", function (e) {\n        /* the eye button is checked FIRST: its whole white circle opens the\n           quick view and must never fall through to the card's add-to-pack */\n        var eye = e.target.closest(\"[data-peye]\");\n        if (eye) { openDrawer(parseInt(eye.getAttribute(\"data-peye\"), 10)); return; }\n        var add = e.target.closest(\"[data-padd]\");\n        if (add) { addToPack(parseInt(add.getAttribute(\"data-padd\"), 10), add.closest(\".pack-card\")); return; }\n        /* tapping anywhere else on a pack card adds that jar straight to the pack */\n        var cardEl = e.target.closest(\"[data-pcard]\");\n        if (cardEl) { addToPack(parseInt(cardEl.getAttribute(\"data-pcard\"), 10), cardEl); return; }\n        var inc = e.target.closest(\"[data-pinc]\");\n        if (inc) { pack[inc.getAttribute(\"data-pinc\")]++; renderPack(false); return; }\n        var dec = e.target.closest(\"[data-pdec]\");\n        if (dec) {\n          var id = dec.getAttribute(\"data-pdec\");\n          pack[id]--; if (pack[id] <= 0) delete pack[id];\n          renderPack(false);\n        }\n      });\n      $(\"#packAdd\").addEventListener(\"click\", function () {\n        var m = packMath();\n        if (m.count === 0) return;\n        var items = Object.keys(pack).map(function (id) {\n          var p = PRODUCTS.filter(function (x) { return x.id === id; })[0];\n          return { id: p.variantId, quantity: pack[id] };\n        });\n        pack = {};\n        renderPack(false);\n        trackEvent(\"AddToCart\", { content_name: \"Custom pack\", value: m.total, currency: \"USD\", num_items: m.count });\n        toast(\"Pack added \u2014 pack savings apply at checkout\");\n        openCart();\n        shopifyPost(\"/cart/add.js\", { items: items }).then(function () { syncCartFromShopify(); });\n      });\n      renderPack(false);\n\n      /* ================= CART ================= */\n      var cart = {}; /* id -> qty (mirror of the real Shopify cart) */\n      var cartKeys = {}; /* product id -> Shopify line item key */\n      var promoCode = \"\"; /* checkout discount code saved from the drawer promo row */\n\n      /* Pack circles inside the cart drawer (same design as the hero\n         selector): the circle is a status indicator only \u2014 its photo is\n         in color while its product is in the cart, grayscale while it is\n         not, and tapping the circle itself never changes the cart. Each\n         circle carries its own explicit + button; only that button adds\n         a jar of that product. */\n      $(\"#cartCirclesRow\").innerHTML = PRODUCTS.map(function (p, i) {\n        return '<span class=\"cc-item\"><span class=\"cc-circle\" style=\"--c:' + p.blob + '\"><img src=\"' + p.img + '\" alt=\"\" draggable=\"false\" /></span>' +\n          '<button type=\"button\" class=\"cc-add\" data-cadd=\"' + i + '\" aria-label=\"Add ' + p.name + ' to your cart\">+</button></span>';\n      }).join(\"\");\n      document.addEventListener(\"click\", function (e) {\n        var ca = e.target.closest(\"[data-cadd]\");\n        if (ca) addToCart(parseInt(ca.getAttribute(\"data-cadd\"), 10), 1);\n      });\n\n      /* Hovering (or focusing) a cart circle swaps the row's heading to\n         that product's full name \u2014 the jar photos are small, so the\n         customer reads exactly what the + would add. Leaving restores\n         the default heading. The swap cross-fades via the .swap class. */\n      var ccLabel = $(\"#cartCirclesLabel\");\n      var ccDefault = ccLabel ? ccLabel.textContent : \"\";\n      var ccLabelTimer = null;\n      function setCcLabel(text) {\n        if (!ccLabel || ccLabel.textContent === text) return;\n        ccLabel.classList.add(\"swap\");\n        clearTimeout(ccLabelTimer);\n        ccLabelTimer = setTimeout(function () {\n          ccLabel.textContent = text;\n          ccLabel.classList.remove(\"swap\");\n        }, 130);\n      }\n      $$(\"#cartCirclesRow .cc-item\").forEach(function (item, i) {\n        item.addEventListener(\"mouseenter\", function () { setCcLabel(PRODUCTS[i].name); });\n        item.addEventListener(\"mouseleave\", function () { setCcLabel(ccDefault); });\n        item.addEventListener(\"focusin\", function () { setCcLabel(PRODUCTS[i].name); });\n        item.addEventListener(\"focusout\", function () { setCcLabel(ccDefault); });\n      });\n\n      function cartCount() {\n        return Object.keys(cart).reduce(function (a, id) { return a + cart[id]; }, 0);\n      }\n      function cartTotals() {\n        var subtotal = 0, count = cartCount();\n        Object.keys(cart).forEach(function (id) {\n          var p = PRODUCTS.filter(function (x) { return x.id === id; })[0];\n          if (p) subtotal += p.price * cart[id];\n        });\n        var rate = packRate(count);\n        var packDiscount = subtotal * rate;\n        var afterPack = subtotal - packDiscount;\n        /* The pack saving is an estimate: the tier discounts are\n           automatic and land at checkout, not in the cart. The drawer\n           total is the real cart total (subtotal + shipping); the\n           saving row is labelled as applied at checkout. Shipping\n           stays a concrete amount, never a checkout surprise:\n           free at $49+, otherwise the store's flat $6.90. */\n        var shipping = afterPack >= FREE_SHIP ? 0 : 6.9;\n        return { subtotal: subtotal, count: count, rate: rate, packDiscount: packDiscount, promoDiscount: 0, total: afterPack, shipping: shipping, grandTotal: subtotal + shipping };\n      }\n\n      function toast(msg) {\n        var t = $(\"#toast\");\n        t.textContent = msg;\n        t.classList.add(\"show\");\n        clearTimeout(t._h);\n        t._h = setTimeout(function () { t.classList.remove(\"show\"); }, 2600);\n      }\n\n      function shopifyPost(url, body) {\n        return fetch(url, { method: \"POST\", headers: { \"Content-Type\": \"application/json\", \"Accept\": \"application/json\" }, body: JSON.stringify(body) }).then(function (r) { return r.json(); });\n      }\n      function syncCartFromShopify() {\n        return fetch(\"/cart.js\", { headers: { \"Accept\": \"application/json\" } }).then(function (r) { return r.json(); }).then(function (data) {\n          var next = {}, keys = {};\n          (data.items || []).forEach(function (it) {\n            var hit = null;\n            for (var i = 0; i < PRODUCTS.length; i++) { if (PRODUCTS[i].variantId === it.variant_id) { hit = PRODUCTS[i]; break; } }\n            if (hit) { next[hit.id] = it.quantity; keys[hit.id] = it.key; }\n          });\n          cart = next; cartKeys = keys;\n          renderCart();\n        }).catch(function () { renderCart(); });\n      }\n      function setCartQty(id, qty) {\n        var key = cartKeys[id];\n        if (!key) { if (qty <= 0) { delete cart[id]; renderCart(); } return; }\n        cart[id] = qty; if (qty <= 0) delete cart[id];\n        renderCart();\n        shopifyPost(\"/cart/change.js\", { id: key, quantity: Math.max(0, qty) }).then(function () { syncCartFromShopify(); });\n      }\n      function addToCart(index, qty) {\n        var p = PRODUCTS[index];\n        cart[p.id] = (cart[p.id] || 0) + qty;\n        renderCart();\n        trackEvent(\"AddToCart\", { content_ids: [p.id], content_name: p.name, value: p.price * qty, currency: \"USD\" });\n        toast(p.name + \" added to cart\");\n        var cc = $(\"#cartCount\");\n        if (window.gsap && !reduced) gsap.fromTo(cc, { scale: 1.6 }, { scale: 1, duration: 0.4, ease: \"back.out(2)\" });\n        shopifyPost(\"/cart/add.js\", { items: [{ id: p.variantId, quantity: qty }] }).then(function () { syncCartFromShopify(); });\n      }\n\n      /* Cart cascade: rebuild the falling dots whenever the cart changes so\n         their colors always match the products inside (all five, mixed,\n         while the cart is empty). Skipped under prefers-reduced-motion. */\n      function renderCascade() {\n        var layer = $(\"#cartCascade\");\n        if (!layer) return;\n        if (reduced) { layer.innerHTML = \"\"; return; }\n        var colors = Object.keys(cart).map(function (id) {\n          return PRODUCTS.filter(function (x) { return x.id === id; })[0].blob;\n        });\n        if (!colors.length) colors = PRODUCTS.map(function (p) { return p.blob; });\n        var html = \"\";\n        for (var k = 0; k < 18; k++) {\n          var sz = (11 + Math.random() * 13).toFixed(1);\n          html += '<span class=\"cart-spark\" style=\"left:' + (2 + Math.random() * 93).toFixed(1) + \"%;--c:\" + colors[k % colors.length] +\n            \";--dur:\" + (5.5 + Math.random() * 5).toFixed(2) + \"s;--dl:\" + (-Math.random() * 9).toFixed(2) +\n            \"s;--sway:\" + Math.round(Math.random() * 36 - 18) + \"px;width:\" + sz + \"px;height:\" + sz + 'px\"></span>';\n        }\n        layer.innerHTML = html;\n      }\n\n      function renderCart() {\n        renderCascade();\n        /* cart pack circles: color photo = already in the cart */\n        $$(\"#cartCirclesRow .cc-item\").forEach(function (b, i) {\n          b.classList.toggle(\"on\", (cart[PRODUCTS[i].id] || 0) > 0);\n        });\n        var count = cartCount(), totals = cartTotals();\n        var cc = $(\"#cartCount\");\n        cc.textContent = count;\n        cc.classList.toggle(\"on\", count > 0);\n\n        /* Shipping message with the pack strategy spelled out: a single jar\n           pays $6.90 shipping (under $49) with no discount, while any 3 jars\n           clear $49 even after the 5% pack discount \u2014 so 3 always works out\n           better than 1. Higher tiers are teased once 3+ is reached. */\n        var shipPct = Math.min(100, (totals.total / FREE_SHIP) * 100);\n        var shipMsg;\n        if (count === 0) {\n          shipMsg = \"Build a pack of 3 jars to get 5% off + free shipping \u2014 a single jar pays $6.90 shipping with no discount.\";\n        } else if (count < 3) {\n          var need3 = 3 - count;\n          shipMsg = totals.total >= FREE_SHIP\n            ? \"Free shipping unlocked! Add \" + need3 + \" more jar\" + (need3 > 1 ? \"s\" : \"\") + \" to reach 3 and add 5% off, too.\"\n            : \"Add \" + need3 + \" more jar\" + (need3 > 1 ? \"s\" : \"\") + \" to reach 3: 5% off + free shipping. One jar alone pays $6.90 shipping with no discount \u2014 3 works out better.\";\n        } else if (count < 5) {\n          shipMsg = \"Pack unlocked: 5% off + free shipping! Add \" + (5 - count) + \" more to reach 5 jars and 10% off.\";\n        } else if (count < 7) {\n          shipMsg = \"Pack unlocked: 10% off + free shipping! Add \" + (7 - count) + \" more to reach 7 jars and 15% off.\";\n        } else {\n          shipMsg = \"Best pack deal unlocked: 15% off + free shipping!\";\n        }\n        $(\"#shipMiniMsg\").textContent = shipMsg;\n        $(\"#shipMiniFill\").style.width = shipPct + \"%\";\n        $(\"#shipMiniFill\").classList.toggle(\"full\", totals.total >= FREE_SHIP);\n        /* The standalone shipping bar in the Build Your Pack section is\n           NOT updated here: it tracks the pack being built and is driven\n           by renderPack(). This mini bar keeps tracking the cart. */\n\n        var lines = $(\"#cartLines\");\n        if (count === 0) {\n          lines.innerHTML = '<div class=\"cart-empty\">Your cart is empty.<br />Pick a jar from the carousel to get started.</div>';\n          $(\"#cartFooter\").style.display = \"none\";\n          return;\n        }\n        $(\"#cartFooter\").style.display = \"\";\n        lines.innerHTML = Object.keys(cart).map(function (id) {\n          var p = PRODUCTS.filter(function (x) { return x.id === id; })[0];\n          return '<div class=\"cart-line\"><img src=\"' + p.img + '\" alt=\"\" style=\"background:' + p.soft + '\" />' +\n            '<div class=\"cl-info\"><b>' + p.name + \"</b><span>\" + p.count + \" \u00B7 \" + money(p.price) + '</span><br />' +\n            '<span class=\"mini-qty\"><button data-dec=\"' + id + '\" aria-label=\"Decrease\">\u2212</button><output>' + cart[id] + '</output><button data-inc=\"' + id + '\" aria-label=\"Increase\">+</button></span></div>' +\n            '<span class=\"cl-price\">' + money(p.price * cart[id]) + \"</span></div>\";\n        }).join(\"\");\n        $$(\"[data-inc]\", lines).forEach(function (b) {\n          b.addEventListener(\"click\", function () { setCartQty(b.getAttribute(\"data-inc\"), (cart[b.getAttribute(\"data-inc\")] || 0) + 1); });\n        });\n        $$(\"[data-dec]\", lines).forEach(function (b) {\n          b.addEventListener(\"click\", function () {\n            var id = b.getAttribute(\"data-dec\");\n            setCartQty(id, (cart[id] || 0) - 1);\n          });\n        });\n\n        var rows = '<div><span>Subtotal</span><span>' + money(totals.subtotal) + \"</span></div>\";\n        if (totals.packDiscount > 0) rows += '<div class=\"save-row\"><span>Pack saving at checkout (' + totals.count + \" jars, \" + Math.round(totals.rate * 100) + '%)</span><span>\\u2248 \\u2212' + money(totals.packDiscount) + \"</span></div>\";\n        if (promoCode) rows += '<div class=\"save-row\"><span>Code ' + promoCode + \" (applied at checkout)</span><span>\\u2014</span></div>\";\n        rows += '<div><span>Shipping</span><span>' + (totals.shipping === 0 ? \"Free\" : money(totals.shipping)) + \"</span></div>\";\n        rows += '<div class=\"total\"><span>Total</span><span>' + money(totals.grandTotal) + \"</span></div>\";\n        $(\"#cartSummary\").innerHTML = rows;\n      }\n\n      $(\"#promoBtn\").addEventListener(\"click\", function () {\n        var v = $(\"#promoInput\").value.trim().toUpperCase();\n        if (!v) { toast(\"Enter a code first\"); return; }\n        promoCode = v;\n        renderCart();\n        toast(\"Code \" + v + \" saved \u2014 it applies at checkout\");\n      });\n      $(\"#checkoutBtn\").addEventListener(\"click\", function () {\n        trackEvent(\"InitiateCheckout\", { value: cartTotals().grandTotal, currency: \"USD\", num_items: cartCount() });\n        var url = \"/checkout\";\n        if (promoCode) url += \"?discount=\" + encodeURIComponent(promoCode);\n        window.location.href = url;\n      });\n\n      /* ================= DRAWERS ================= */\n      var scrim = $(\"#scrim\");\n      var drawerIndex = 0, drawerQty = 1;\n\n      /* Product-details cascade: the cart cascade's falling glow dots,\n         rebuilt on every open in the shown product's color, behind the\n         drawer's content and never intercepting clicks. Skipped under\n         prefers-reduced-motion. */\n      function renderPdCascade(p) {\n        var layer = $(\"#pdCascade\");\n        if (!layer) return;\n        if (reduced) { layer.innerHTML = \"\"; return; }\n        var html = \"\";\n        for (var k = 0; k < 16; k++) {\n          var sz = (11 + Math.random() * 13).toFixed(1);\n          html += '<span class=\"cart-spark\" style=\"left:' + (2 + Math.random() * 93).toFixed(1) + \"%;--c:\" + p.blob +\n            \";--dur:\" + (5.5 + Math.random() * 5).toFixed(2) + \"s;--dl:\" + (-Math.random() * 9).toFixed(2) +\n            \"s;--sway:\" + Math.round(Math.random() * 36 - 18) + \"px;width:\" + sz + \"px;height:\" + sz + 'px\"></span>';\n        }\n        layer.innerHTML = html;\n      }\n\n      function openDrawer(i) {\n        drawerIndex = i; drawerQty = 1;\n        var p = PRODUCTS[i];\n        $(\"#pdImg\").src = p.img; $(\"#pdImg\").alt = p.alt;\n        $(\"#pdImgWrap\").style.background = p.soft;\n        $(\"#pdName\").textContent = p.name;\n        $(\"#pdSub\").textContent = p.tag + \" \u00B7 \" + p.count;\n        $(\"#pdPrice\").textContent = money(p.price);\n        /* Drawer-only product colors (no other section changes): the\n           price takes the product's deep tone so it stays legible on\n           the drawer's light background, and the Add to cart button\n           takes the product's own color with its paired text color\n           (white on every formula in the current range). */\n        $(\"#pdPrice\").style.color = p.deep;\n        $(\"#pdAdd\").style.background = p.blob;\n        $(\"#pdAdd\").style.color = p.ink;\n        renderPdCascade(p);\n        $(\"#pdPer\").textContent = \"per jar\";\n        $(\"#pdQty\").textContent = \"1\";\n        $(\"#pdMeta\").innerHTML = p.meta.map(function (m) {\n          return \"<div><dt>\" + m[0] + \"</dt><dd>\" + m[1] + \"</dd></div>\";\n        }).join(\"\");\n        $(\"#pdBenefits\").innerHTML = p.benefits.map(function (b) { return \"<li>\" + b + \"</li>\"; }).join(\"\");\n        var pd = $(\"#productDrawer\");\n        pd.classList.add(\"on\");\n        pd.removeAttribute(\"inert\"); pd.setAttribute(\"aria-hidden\", \"false\");\n        scrim.classList.add(\"on\");\n        document.body.style.overflow = \"hidden\";\n        trackEvent(\"ViewContent\", { content_ids: [p.id], content_name: p.name, value: p.price, currency: \"USD\" });\n      }\n      function openCart() {\n        renderCart();\n        syncCartFromShopify();\n        var cd = $(\"#cartDrawer\");\n        cd.classList.add(\"on\");\n        cd.removeAttribute(\"inert\"); cd.setAttribute(\"aria-hidden\", \"false\");\n        scrim.classList.add(\"on\");\n        document.body.style.overflow = \"hidden\";\n      }\n      function closeDrawers() {\n        [\"#productDrawer\", \"#cartDrawer\"].forEach(function (s) {\n          var d = $(s);\n          d.classList.remove(\"on\");\n          d.setAttribute(\"inert\", \"\"); d.setAttribute(\"aria-hidden\", \"true\");\n        });\n        scrim.classList.remove(\"on\");\n        document.body.style.overflow = \"\";\n      }\n      scrim.addEventListener(\"click\", closeDrawers);\n      $$(\"[data-close]\").forEach(function (b) { b.addEventListener(\"click\", closeDrawers); });\n      document.addEventListener(\"keydown\", function (e) { if (e.key === \"Escape\") closeDrawers(); });\n      $(\"#cartBtn\").addEventListener(\"click\", openCart);\n      $(\"#pdMinus\").addEventListener(\"click\", function () { drawerQty = Math.max(1, drawerQty - 1); $(\"#pdQty\").textContent = drawerQty; });\n      $(\"#pdPlus\").addEventListener(\"click\", function () { drawerQty = Math.min(99, drawerQty + 1); $(\"#pdQty\").textContent = drawerQty; });\n      $(\"#pdAdd\").addEventListener(\"click\", function () { addToCart(drawerIndex, drawerQty); closeDrawers(); openCart(); });\n\n      /* ================= MENU ================= */\n      var overlay = $(\"#menuOverlay\");\n      $(\"#menuBtn\").addEventListener(\"click\", function () { overlay.classList.add(\"on\"); overlay.setAttribute(\"aria-hidden\", \"false\"); overlay.removeAttribute(\"inert\"); });\n      function closeMenu() { overlay.classList.remove(\"on\"); overlay.setAttribute(\"aria-hidden\", \"true\"); overlay.setAttribute(\"inert\", \"\"); }\n      $(\"#menuClose\").addEventListener(\"click\", closeMenu);\n      $$(\"a\", overlay).forEach(function (a) { a.addEventListener(\"click\", closeMenu); });\n\n      /* ================= NEWSLETTER + STICKY BAR ================= */\n      /* Newsletter cascade: the cart's falling glow dots behind the\n         signup copy, all five product colors mixed, soft density.\n         Built once; skipped under prefers-reduced-motion. */\n      (function () {\n        var layer = $(\"#newsCascade\");\n        if (!layer || reduced) return;\n        var colors = PRODUCTS.map(function (p) { return p.blob; });\n        var html = \"\";\n        for (var k = 0; k < 14; k++) {\n          var sz = (10 + Math.random() * 11).toFixed(1);\n          html += '<span class=\"news-spark\" style=\"left:' + (2 + Math.random() * 94).toFixed(1) + \"%;--c:\" + colors[k % colors.length] +\n            \";--dur:\" + (7 + Math.random() * 5).toFixed(2) + \"s;--dl:\" + (-Math.random() * 11).toFixed(2) +\n            \"s;--sway:\" + Math.round(Math.random() * 30 - 15) + \"px;width:\" + sz + \"px;height:\" + sz + 'px\"></span>';\n        }\n        layer.innerHTML = html;\n      })();\n      $(\"#newsForm\").addEventListener(\"submit\", function (e) {\n        e.preventDefault();\n        var v = $(\"#newsEmail\").value.trim();\n        if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(v)) { toast(\"Please enter a valid email to get your code\"); return; }\n        $(\"#newsForm\").style.display = \"none\";\n        $(\"#newsDone\").style.display = \"block\";\n        toast(\"Welcome code unlocked: WELCOME10\");\n      });\n      $(\"#sbAdd\").addEventListener(\"click\", function () { addToCart(pdpIndex, 1); });\n      var heroEl = $(\"#hero\");\n      window.addEventListener(\"scroll\", function () {\n        var past = window.scrollY > heroEl.offsetHeight * 0.85;\n        var bar = $(\"#stickyBar\");\n        bar.classList.toggle(\"show\", past);\n        bar.setAttribute(\"aria-hidden\", past ? \"false\" : \"true\");\n      }, { passive: true });\n\n      /* FAQ accordion: animated open/close \u2014 height eases while the\n         answer fades in and the + chip spins into a \u00D7 (CSS). The native\n         <details> toggle stays untouched under prefers-reduced-motion\n         or when WAAPI is unavailable. */\n      $$(\".faq details\").forEach(function (d) {\n        var summary = d.querySelector(\"summary\");\n        if (!summary) return;\n        summary.addEventListener(\"click\", function (e) {\n          if (reduced || !d.animate) return;\n          e.preventDefault();\n          var startH = d.offsetHeight;\n          d.style.overflow = \"hidden\";\n          if (d.open) {\n            var closeAnim = d.animate(\n              [{ height: startH + \"px\" }, { height: summary.offsetHeight + 4 + \"px\" }],\n              { duration: 300, easing: \"cubic-bezier(.22,1,.36,1)\" }\n            );\n            closeAnim.onfinish = function () { d.open = false; d.style.overflow = \"\"; };\n          } else {\n            d.open = true;\n            var endH = d.offsetHeight;\n            var openAnim = d.animate(\n              [{ height: startH + \"px\" }, { height: endH + \"px\" }],\n              { duration: 360, easing: \"cubic-bezier(.22,1,.36,1)\" }\n            );\n            openAnim.onfinish = function () { d.style.overflow = \"\"; };\n            var p = d.querySelector(\"p\");\n            if (p) p.animate(\n              [{ opacity: 0, transform: \"translateY(-4px)\" }, { opacity: 1, transform: \"translateY(0)\" }],\n              { duration: 360, easing: \"ease-out\" }\n            );\n          }\n        });\n      });\n\n      /* section reveals (gentle, once) */\n      if (window.gsap && window.ScrollTrigger && !reduced) {\n        gsap.registerPlugin(ScrollTrigger);\n        gsap.utils.toArray(\".tile, .step, .pack-card, .fact, .trust, .faq details\").forEach(function (el, i) {\n          gsap.from(el, {\n            y: 26, opacity: 0, duration: 0.7, delay: (i % 3) * 0.09, ease: \"power2.out\",\n            scrollTrigger: { trigger: el, start: \"top 90%\", once: true }\n          });\n        });\n      }\n\n      renderPDP(false);\n      syncCartFromShopify();\n    })();\n    \n"],
  "mappings": "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",
  "names": ["s", "heroEl", "sp"]
}
