{
  "version": 3,
  "sources": ["/cdn/shop/t/35/assets/vonili-sticky-atc-footer.js?vonili=20261110io1"],
  "sourcesContent": ["/**\n * Visibility controller for the Product Page Floating Add-to-Cart bar (`<hdt-sticky-btn-atc>`).\n *\n * 1) Keep `<hdt-sticky-btn-atc>` hidden (`:not([data-sticky-ready=\"true\"])`) until the first\n *    observer callbacks have reported real positions.\n * 2) Show `.sticky-shown` only once the main Add to Cart button has scrolled above the viewport.\n * 3) Hide the bar before the footer reaches the bottom dock area (`.sticky-footer-near`).\n * 4) Enable transitions (`data-sticky-animated=\"true\"`) on the frame after the first state is\n *    committed, so reloads and BFCache restores never flash.\n *\n * IntersectionObserver only: no scroll, resize or ResizeObserver handlers and no layout reads,\n * so the bar costs nothing per frame and never forces a page restyle while the page loads.\n */\n(function () {\n  if (!document.body.classList.contains(\"template-product\")) return;\n  if (!(\"IntersectionObserver\" in window)) return;\n\n  var HIDE_OFFSET = 40;\n  var MOBILE_MQ = window.matchMedia(\"(max-width: 767px)\");\n  var DESKTOP_MQ = window.matchMedia(\"(min-width: 1025px)\");\n  var atcObserver = null;\n  var footerObserver = null;\n  var stickyEl = null;\n  var pastAtc = false;\n  var nearFooter = false;\n  var atcSeen = false;\n  var footerSeen = false;\n  var isInitialized = false;\n\n  function findStickyEl() {\n    return document.querySelector(\"hdt-sticky-btn-atc.hdt-sticky-btn-atc, hdt-sticky-btn-atc\");\n  }\n\n  function findFooterTarget() {\n    return (\n      document.querySelector(\".hdt-footer-section\") ||\n      document.querySelector(\".hdt-section-group.hdt-footer-section\") ||\n      document.querySelector(\".hdt-footer\") ||\n      document.querySelector(\"footer\")\n    );\n  }\n\n  function findAtcTarget(sticky) {\n    if (sticky) {\n      var formId = sticky.getAttribute(\"form\");\n      var form = formId ? document.getElementById(formId) : null;\n      if (form) {\n        var submit = form.querySelector(\".hdt-product-form__submit, button[type='submit'][name='add']\");\n        if (submit && !sticky.contains(submit)) return submit;\n      }\n    }\n    var candidates = document.querySelectorAll(\n      \".hdt-section--feature-product .hdt-product-form__submit, .hdt-main-product-form .hdt-product-form__submit, .hdt-section--feature-product button[type='submit'][name='add']\"\n    );\n    for (var i = 0; i < candidates.length; i++) {\n      if (!candidates[i].closest(\"hdt-sticky-btn-atc\")) return candidates[i];\n    }\n    return null;\n  }\n\n  function ensureSentinel(target) {\n    if (!target || !target.parentElement) return target;\n    var existing = document.querySelector(\"[data-sticky-atc-footer-sentinel]\");\n    if (existing) return existing;\n    var sentinel = document.createElement(\"div\");\n    sentinel.setAttribute(\"data-sticky-atc-footer-sentinel\", \"\");\n    sentinel.setAttribute(\"aria-hidden\", \"true\");\n    sentinel.style.cssText =\n      \"position:relative;width:100%;height:0;margin:0;padding:0;border:0;pointer-events:none;visibility:hidden;\";\n    target.parentElement.insertBefore(sentinel, target);\n    return sentinel;\n  }\n\n  function syncBodyState() {\n    document.body.classList.toggle(\"sticky-footer-near\", isInitialized && nearFooter);\n    document.body.classList.toggle(\"sticky-shown\", isInitialized && pastAtc && !nearFooter);\n  }\n\n  function markReady() {\n    if (isInitialized || !atcSeen || !footerSeen) return;\n    stickyEl = stickyEl || findStickyEl();\n    if (!stickyEl) return;\n    isInitialized = true;\n    syncBodyState();\n    stickyEl.setAttribute(\"data-sticky-ready\", \"true\");\n    requestAnimationFrame(function () {\n      if (stickyEl) stickyEl.setAttribute(\"data-sticky-animated\", \"true\");\n    });\n  }\n\n  function onAtc(entries) {\n    var entry = entries[entries.length - 1];\n    var rect = entry.boundingClientRect;\n    // A collapsed button (height 0, e.g. while a variant re-renders) says nothing about scroll position.\n    if (rect.height > 0) pastAtc = !entry.isIntersecting && rect.bottom <= 0;\n    atcSeen = true;\n    markReady();\n    syncBodyState();\n  }\n\n  function onFooter(entries) {\n    var entry = entries[entries.length - 1];\n    nearFooter = entry.isIntersecting || entry.boundingClientRect.top < 0;\n    footerSeen = true;\n    markReady();\n    syncBodyState();\n  }\n\n  function bind() {\n    if (atcObserver) atcObserver.disconnect();\n    if (footerObserver) footerObserver.disconnect();\n    stickyEl = findStickyEl();\n    var atcTarget = findAtcTarget(stickyEl);\n    var footerTarget = findFooterTarget();\n\n    if (atcTarget) {\n      atcObserver = new IntersectionObserver(onAtc, { threshold: 0 });\n      atcObserver.observe(atcTarget);\n    } else {\n      atcSeen = true;\n    }\n\n    if (footerTarget) {\n      footerObserver = new IntersectionObserver(onFooter, {\n        rootMargin: \"0px 0px \" + HIDE_OFFSET + \"px 0px\",\n        threshold: 0,\n      });\n      footerObserver.observe(ensureSentinel(footerTarget));\n    } else {\n      footerSeen = true;\n    }\n    markReady();\n  }\n\n  document.body.classList.remove(\"sticky-shown\", \"sticky-footer-near\");\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", bind, { once: true });\n  } else {\n    bind();\n  }\n\n  // BFCache restore: snap to the restored state without a transition.\n  window.addEventListener(\"pageshow\", function (event) {\n    if (!event.persisted) return;\n    stickyEl = findStickyEl();\n    if (stickyEl) stickyEl.removeAttribute(\"data-sticky-animated\");\n    isInitialized = false;\n    atcSeen = false;\n    footerSeen = false;\n    bind();\n  });\n\n  MOBILE_MQ.addEventListener(\"change\", bind);\n  DESKTOP_MQ.addEventListener(\"change\", bind);\n  document.addEventListener(\"shopify:section:load\", bind);\n})();\n"],
  "mappings": "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",
  "names": []
}
