{
  "version": 3,
  "sources": ["/cdn/shop/t/58/assets/pp-motion.js?r=20261024f"],
  "sourcesContent": ["/*\n  MOTION SET + MOBILE FIXES - \"short term fixes VG\" (Nikit, 24 Oct 2026). Styles in\n  assets/pp-motion.css. Loaded on every page from layout/theme.liquid (defer).\n  1. Sticky add bar shows only once the main Add button has scrolled off the top.\n  2. Accordions (details.pp-vg-acc, the verdict card) open and close with a height slide.\n  3. The cart count bumps when it changes.\n  4. Product photos still loading fade in when they arrive.\n  Motion (2-4) is skipped when the shopper asks for reduced motion; (1) always runs.\n*/\n(function () {\n  'use strict';\n  if (window.__ppMotion) return;\n  window.__ppMotion = true;\n  var calm = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  /* 1 \u00B7 Sticky bar */\n  function initSticky() {\n    var bar = document.querySelector('.pp-sticky-cart');\n    if (!bar || !('IntersectionObserver' in window)) return;\n    var section = document.getElementById('MainProduct-' + bar.getAttribute('data-section-id'));\n    var btn = section && section.querySelector('[name=\"add\"]');\n    if (!btn) return;\n    bar.classList.add('pp-sticky--off');\n    var io = new IntersectionObserver(function (entries) {\n      var e = entries[0];\n      var gone = !e.isIntersecting && e.boundingClientRect.top < 0;\n      bar.classList.toggle('pp-sticky--off', !gone);\n    });\n    io.observe(btn);\n    /* Dawn swaps the add button on a size change; follow the new node. */\n    new MutationObserver(function () {\n      var nb = section.querySelector('[name=\"add\"]');\n      if (nb && nb !== btn) { io.unobserve(btn); btn = nb; io.observe(btn); }\n    }).observe(section, { childList: true, subtree: true });\n  }\n\n  /* 2 \u00B7 Accordion height slide */\n  /* Review 24 Oct: the intended state lives in d.__ppmOpen (d.open stays true while a close\n     animates, so a quick second tap now reopens instead of closing twice); the body's own\n     inline overflow (the comparison table's overflow-x:auto) is restored, not wiped; a body\n     with more than one block (the verdict card) just toggles, so nothing pops in unanimated. */\n  function slide(d, open) {\n    d.__ppmOpen = open;\n    var kids = d.querySelectorAll(':scope > :not(summary)');\n    var body = kids[0];\n    if (!body || kids.length > 1 || !body.animate) { d.open = open; return; }\n    if (d.__ppmAnim) { d.__ppmAnim.onfinish = null; d.__ppmAnim.cancel(); }\n    var keepX = body.style.overflowX, keepY = body.style.overflowY;\n    body.style.overflow = 'hidden';\n    var anim;\n    if (open) {\n      d.open = true;\n      var h = body.scrollHeight;\n      anim = body.animate([{ height: '0px', opacity: 0 }, { height: h + 'px', opacity: 1 }], { duration: 220, easing: 'ease-out' });\n    } else {\n      var h2 = body.scrollHeight;\n      anim = body.animate([{ height: h2 + 'px', opacity: 1 }, { height: '0px', opacity: 0 }], { duration: 180, easing: 'ease-out' });\n    }\n    d.__ppmAnim = anim;\n    anim.onfinish = function () {\n      body.style.overflowX = keepX; body.style.overflowY = keepY;\n      if (!open && d.__ppmOpen === false) d.open = false;\n      d.__ppmAnim = null;\n    };\n    anim.oncancel = function () { body.style.overflowX = keepX; body.style.overflowY = keepY; };\n  }\n  if (!calm) {\n    window.__ppMotionAcc = true;\n    document.addEventListener('click', function (e) {\n      var s = e.target.closest && e.target.closest('summary');\n      if (!s) return;\n      var d = s.parentElement;\n      if (!d || d.tagName !== 'DETAILS') return;\n      if (!(d.classList.contains('pp-vg-acc') || d.closest('.pp-vg-verdict'))) return;\n      e.preventDefault();\n      var want = !(d.__ppmOpen === undefined ? d.open : d.__ppmOpen);\n      slide(d, want);\n      /* FAQ: one answer open at a time - close the others with the same slide\n         (pp-vg.js leaves the FAQ to this file when window.__ppMotionAcc is set). */\n      var faq = want && d.closest('.pp-vg-faq');\n      if (faq) faq.querySelectorAll('details[open]').forEach(function (o) { if (o !== d) slide(o, false); });\n    });\n  }\n\n  /* 3 \u00B7 Cart count bump */\n  function initBump() {\n    if (calm) return;\n    var icon = document.getElementById('cart-icon-bubble');\n    if (!icon) return;\n    var last = icon.textContent.replace(/\\s+/g, '');\n    new MutationObserver(function () {\n      var now = icon.textContent.replace(/\\s+/g, '');\n      if (now === last) return;\n      last = now;\n      var b = icon.querySelector('.cart-count-bubble') || icon;\n      b.classList.remove('pp-ppm-bump');\n      void b.offsetWidth;\n      b.classList.add('pp-ppm-bump');\n    }).observe(icon, { childList: true, subtree: true, characterData: true });\n  }\n\n  /* 4 \u00B7 Photo fade-in (only images not loaded yet, so nothing that is already on screen blinks) */\n  /* Review 24 Oct: never the eager / high-priority photos (PDP hero, first cards) - hiding a\n     half-drawn hero would hurt LCP and blink. Only lazy images fade. */\n  function fade(img) {\n    if (img.__ppm || img.complete) return;\n    if (img.getAttribute('loading') !== 'lazy' || img.getAttribute('fetchpriority') === 'high') return;\n    img.__ppm = true;\n    img.classList.add('pp-ppm-fade');\n    var done = function () { img.classList.add('pp-ppm-in'); img.classList.remove('pp-ppm-fade'); };\n    img.addEventListener('load', done, { once: true });\n    img.addEventListener('error', done, { once: true });\n  }\n  function initFade(root) {\n    if (calm) return;\n    (root || document).querySelectorAll('img.pp-card__img--primary, .product__media img').forEach(fade);\n  }\n\n  function init() {\n    initSticky();\n    initBump();\n    initFade(document);\n    if (!calm && 'MutationObserver' in window) {\n      new MutationObserver(function (muts) {\n        muts.forEach(function (m) { m.addedNodes.forEach(function (n) { if (n.nodeType === 1) initFade(n); }); });\n      }).observe(document.body, { childList: true, subtree: true });\n    }\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n})();\n"],
  "mappings": "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",
  "names": []
}
