{
  "version": 3,
  "sources": ["/cdn/shop/t/30/assets/ffs-motion.js?ffs=20260727hdr2"],
  "sourcesContent": ["/* FFS deploy 20260708e \u2014 homepage video boot fix */\n(function () {\n  window.__ffsHeroSectionRefresh = true;\n\n  function pickVideoUrl(video) {\n    var desktop = video.getAttribute('data-src-desktop');\n    var mobile = video.getAttribute('data-src-mobile');\n    var useDesktop = window.matchMedia('(min-width: 750px)').matches;\n    if (desktop || mobile) {\n      return useDesktop ? desktop || mobile : mobile || desktop;\n    }\n    var sources = video.querySelectorAll('source');\n    for (var i = 0; i < sources.length; i++) {\n      var media = sources[i].getAttribute('media');\n      if (!media || window.matchMedia(media).matches) {\n        return sources[i].getAttribute('src');\n      }\n    }\n    return video.getAttribute('src') || (sources[0] && sources[0].getAttribute('src'));\n  }\n\n  function markVideoReady(video) {\n    if (!video) return;\n    if (video.readyState >= 2 && (video.currentTime > 0 || !video.paused)) {\n      video.classList.add('is-playing', 'is-frame-ready');\n    }\n  }\n\n  function fixHeroVideos() {\n    /* Let SlideshowComponent own homepage hero playback */\n    if (document.body.classList.contains('template-index') && document.querySelector('slideshow-component .slideshow__video')) {\n      return;\n    }\n    var css = document.getElementById('ffs-hero-video-css');\n    if (css) css.remove();\n\n    document.querySelectorAll('video.slideshow__video').forEach(function (video) {\n      var slide = video.closest('.slideshow__slide');\n      if (!slide || slide.getAttribute('aria-hidden') === 'true') return;\n\n      var next = pickVideoUrl(video);\n      if (!next) return;\n\n      var current = video.currentSrc || video.getAttribute('src') || '';\n      /* Only swap src when the art-directed URL actually differs \u2014 avoid load() hitch */\n      if (current.indexOf(next.split('?')[0].split('/').pop()) === -1 && current !== next) {\n        video.querySelectorAll('source').forEach(function (s) {\n          s.remove();\n        });\n        video.setAttribute('src', next);\n      }\n\n      video.muted = true;\n      video.defaultMuted = true;\n      video.setAttribute('muted', '');\n      video.playsInline = true;\n\n      if (!video.paused && video.readyState >= 2) {\n        markVideoReady(video);\n        return;\n      }\n\n      var play = video.play();\n      if (play && play.then) {\n        play.then(function () {\n          markVideoReady(video);\n          if (video.readyState < 2) {\n            video.addEventListener('loadeddata', function () { markVideoReady(video); }, { once: true });\n          }\n        }).catch(function () {\n          if (video.readyState >= 2) markVideoReady(video);\n        });\n      }\n    });\n  }\n\n  function boot() {\n    fixHeroVideos();\n    /* One soft retry \u2014 do not stack load() loops with global.js */\n    window.setTimeout(fixHeroVideos, 1200);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n\n  document.addEventListener('shopify:section:load', fixHeroVideos);\n})();\n\n(function () {\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  function unlockPageScroll() {\n    document.body.classList.remove(\n      'overflow-hidden',\n      'overflow-hidden-mobile',\n      'overflow-hidden-tablet',\n      'overflow-hidden-desktop'\n    );\n    document.body.style.overflow = '';\n    document.body.style.position = '';\n    document.body.style.top = '';\n    document.body.style.width = '';\n    document.documentElement.style.overflow = '';\n\n    document.querySelectorAll('product-modal[open], modal-dialog[open], cart-drawer.active').forEach((el) => {\n      el.removeAttribute('open');\n      el.classList.remove('active', 'animate');\n    });\n\n    document.querySelectorAll('details[open].menu-drawer-container, header-drawer details[open]').forEach((el) => {\n      el.removeAttribute('open');\n    });\n  }\n\n  function cancelAllScrollTriggers() {\n    document.querySelectorAll('.scroll-trigger').forEach((el) => {\n      el.classList.add('scroll-trigger--cancel');\n      el.classList.remove('scroll-trigger--offscreen');\n    });\n  }\n\n  function bootPage() {\n    document.documentElement.classList.remove('ffs-motion-loading');\n    document.documentElement.classList.add('ffs-motion-ready');\n    cancelAllScrollTriggers();\n  }\n\n  function initHeader() {\n    // Homepage header stays at the top of the page and scrolls away \u2014\n    // no floating / glass sticky treatment on scroll.\n    if (document.body.classList.contains('template-index')) return;\n\n    const headerGroup = document.querySelector('.shopify-section-group-header-group');\n    if (!headerGroup) return;\n\n    const onScroll = () => {\n      headerGroup.classList.toggle('floating-header', window.scrollY > 48);\n    };\n\n    onScroll();\n    window.addEventListener('scroll', onScroll, { passive: true });\n  }\n\n  function initCrossfadeSlideshow() {\n    document.querySelectorAll('slideshow-component').forEach((component) => {\n      const slider = component.querySelector('.slideshow.banner');\n      if (!slider || !document.body.classList.contains('template-index')) return;\n      slider.classList.add('ffs-slideshow--crossfade');\n    });\n  }\n\n  function observeReveal(el, observer) {\n    if (el.classList.contains('ffs-reveal--visible')) return;\n    el.classList.add('ffs-reveal');\n    observer.observe(el);\n  }\n\n  function initReveals() {\n    if (reducedMotion) return;\n    if (!document.body.classList.contains('template-index')) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (!entry.isIntersecting) return;\n          entry.target.classList.add('ffs-reveal--visible');\n          observer.unobserve(entry.target);\n        });\n      },\n      { rootMargin: '0px 0px -8% 0px', threshold: 0.12 }\n    );\n\n    document.querySelectorAll('.shopify-section').forEach((section, index) => {\n      if (section.querySelector('slideshow-component')) return;\n      if (section.querySelector('.newsletter')) return;\n      if (section.querySelector('.testi-wall')) return;\n      // Never animate the header/footer sections: ffs-reveal's will-change creates a\n      // stacking context that traps the menu drawer below main content on mobile.\n      if (\n        section.classList.contains('section-header') ||\n        section.classList.contains('announcement-bar-section') ||\n        section.querySelector('sticky-header, header-drawer, .announcement-bar') ||\n        section.closest('.shopify-section-group-header-group, .shopify-section-group-footer-group')\n      )\n        return;\n\n      // Prefer the actual heading text node \u2014 never .collection__title (page-width\n      // wrapper). ffs-section-label is display:inline-block for the underline, which\n      // breaks margin:auto centering when applied to the wrapper.\n      const heading = section.querySelector(\n        '.collection__title .title, .title-wrapper-with-link .title, .collection-list-title, .ffs-kits-spot__title, h2.title, h2'\n      );\n      if (heading && !heading.classList.contains('ffs-reveal')) {\n        heading.classList.add('ffs-section-label');\n        heading.style.setProperty('--ffs-reveal-delay', '0ms');\n        observeReveal(heading, observer);\n      }\n\n      const grid = section.querySelector('.product-grid, ul.grid, .collection-list');\n      if (grid && !grid.classList.contains('ffs-stagger-grid')) {\n        grid.classList.add('ffs-stagger-grid', 'ffs-reveal', 'ffs-reveal--scale');\n        grid.style.setProperty('--ffs-reveal-delay', '80ms');\n        grid.querySelectorAll('.grid__item, .slider__slide, .collection-list__item').forEach((item, i) => {\n          item.style.setProperty('--ffs-stagger-index', String(i % 12));\n        });\n        observeReveal(grid, observer);\n      } else if (!grid) {\n        section.classList.add('ffs-reveal', 'ffs-reveal--fade');\n        section.style.setProperty('--ffs-reveal-delay', `${Math.min(index, 6) * 60}ms`);\n        observeReveal(section, observer);\n      }\n    });\n  }\n\n  function initCatchHero() {\n    const widget = document.querySelector('.ffs-collection-hero--catch-float .ffs-catch-float');\n    if (!widget) return;\n    widget.classList.remove('ffs-catch-float--overlay');\n    widget.style.position = '';\n    widget.style.top = '';\n    widget.style.left = '';\n    widget.style.width = '';\n    widget.style.height = '';\n    widget.style.zIndex = '';\n  }\n\n  function initCommercePages() {\n    const isCommercePage = ['template-collection', 'template-search', 'template-cart'].some((cls) =>\n      document.body.classList.contains(cls)\n    );\n    if (!isCommercePage) return;\n\n    initCatchHero();\n\n    cancelAllScrollTriggers();\n\n    document.querySelectorAll('.product-card-wrapper img, .product-grid img').forEach((img) => {\n      img.style.opacity = '1';\n      img.style.visibility = 'visible';\n    });\n\n    document.querySelectorAll('.ffs-stagger-grid, .ffs-product-grid--catch-slot').forEach((grid) => {\n      grid.classList.add('ffs-reveal--visible');\n      grid.querySelectorAll('.grid__item').forEach((item) => {\n        item.classList.add('scroll-trigger--cancel');\n        item.classList.remove('scroll-trigger--offscreen');\n      });\n    });\n  }\n\n  function initProductPage() {\n    if (!document.body.classList.contains('template-product')) return;\n\n    cancelAllScrollTriggers();\n\n    document.querySelectorAll('.product__media-wrapper img, .thumbnail-list img, .related-products img').forEach((img) => {\n      img.style.opacity = '1';\n    });\n\n    const gallery = document.querySelector('.product__media-wrapper');\n    const info = document.querySelector('.product__info-wrapper');\n    [gallery, info].forEach((el) => {\n      if (!el) return;\n      el.classList.remove('ffs-reveal');\n      el.classList.add('ffs-reveal--visible');\n    });\n  }\n\n  function initHeroVideoPosters() {\n    /* Poster visibility is handled by CSS + global.js play/reset.\n       Do not force video opacity:0 \u2014 that caused permanent black screens. */\n  }\n\n  function init() {\n    unlockPageScroll();\n    try {\n      initCrossfadeSlideshow();\n      initHeader();\n      initReveals();\n      initCommercePages();\n      initProductPage();\n      initHeroVideoPosters();\n    } catch (error) {\n      console.error('ffs-motion init failed', error);\n    } finally {\n      bootPage();\n    }\n  }\n\n  window.addEventListener('pageshow', (event) => {\n    if (event.persisted) {\n      unlockPageScroll();\n      cancelAllScrollTriggers();\n    }\n  });\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
