{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/product-card-video.js?dg_single_media=20260729b"],
  "sourcesContent": ["(() => {\r\n  const DESKTOP_HOVER_QUERY = window.matchMedia('(hover: hover) and (min-width: 750px)');\r\n  const CARD_VIDEO_SELECTOR = '[data-card-video]';\r\n  const IGNORED_VIDEO_CONTAINER_SELECTOR = 'cart-drawer, cart-notification, quick-view-modal, quick-add-drawer, .drawer, .modal';\r\n  const PRODUCT_LINK_SELECTOR = 'a[href*=\"/products/\"]';\r\n  const PRODUCT_VIDEO_VIEW_QUERY = 'view=card-video';\r\n  const controllers = new Map();\r\n  const cardControllers = new Map();\r\n  const preferredSourceRequests = new Map();\r\n  const observerThresholds = [0, 0.2, 0.4, 0.6, 0.8, 1];\r\n  const desktopIdlePrewarmEnabled = true;\r\n  const desktopViewportPrewarmEnabled = false;\r\n  const prewarmRootMargin = '0px';\r\n  const prewarmIdleTimeout = 1200;\r\n  const adjacentPrewarmDelay = 400;\r\n  const videoReadyState = 2;\r\n  const videoNetworkLoadingState = 2;\r\n  const replacementReadyState = 3;\r\n  const videoRevealTime = 0.18;\r\n  const playbackRetryDelays = [120, 300, 650, 1100, 1700];\r\n  let visibilityObserver;\r\n  let mutationObserver;\r\n  let prewarmObserver;\r\n  let refreshFrame = 0;\r\n  let setupFrame = 0;\r\n  let mediaOwnerController = null;\r\n  let adjacentPrewarmTimer = 0;\r\n  let initialPrewarmQueued = false;\r\n\r\n  function isDesktopMode() {\r\n    return DESKTOP_HOVER_QUERY.matches;\r\n  }\r\n\r\n  function getControllerByCard(card) {\r\n    return cardControllers.get(card) || null;\r\n  }\r\n\r\n  function shouldIgnoreVideoNode(node) {\r\n    return Boolean(node?.closest?.(IGNORED_VIDEO_CONTAINER_SELECTOR));\r\n  }\r\n\r\n  function normalizeProductUrl(url) {\r\n    if (!url) return '';\r\n\r\n    try {\r\n      const parsed = new URL(url, window.location.origin);\r\n      return `${parsed.pathname}${parsed.search}`;\r\n    } catch (error) {\r\n      return url;\r\n    }\r\n  }\r\n\r\n  function hydrateDeferredVideoSources(video) {\r\n    if (!video) return false;\r\n\r\n    let hydrated = false;\r\n\r\n    if (video.dataset.src) {\r\n      video.src = video.dataset.src;\r\n      video.removeAttribute('data-src');\r\n      hydrated = true;\r\n    }\r\n\r\n    video.querySelectorAll('source[data-src]').forEach((source) => {\r\n      if (!source.dataset.src) return;\r\n      source.src = source.dataset.src;\r\n      source.removeAttribute('data-src');\r\n      hydrated = true;\r\n    });\r\n\r\n    if (hydrated || video.currentSrc || video.src || video.querySelector('source[src]')) {\r\n      video.dataset.cardVideoHydrated = 'true';\r\n    }\r\n\r\n    return hydrated;\r\n  }\r\n\r\n  function deferVideoSources(video) {\r\n    if (!video) return;\r\n\r\n    const directSource = video.getAttribute('src');\r\n    if (directSource) {\r\n      video.dataset.src = directSource;\r\n      video.removeAttribute('src');\r\n    }\r\n\r\n    video.querySelectorAll('source[src]').forEach((source) => {\r\n      const sourceUrl = source.getAttribute('src');\r\n      if (!sourceUrl) return;\r\n      source.dataset.src = sourceUrl;\r\n      source.removeAttribute('src');\r\n    });\r\n\r\n    video.preload = 'none';\r\n    video.setAttribute('preload', 'none');\r\n    delete video.dataset.cardVideoHydrated;\r\n\r\n    try {\r\n      video.load();\r\n    } catch (error) {\r\n      // Removing the active source stops the request in browsers that ignore load().\r\n    }\r\n  }\r\n\r\n  function cancelQueuedPrewarm() {\r\n    if (!adjacentPrewarmTimer) return;\r\n    window.clearTimeout(adjacentPrewarmTimer);\r\n    adjacentPrewarmTimer = 0;\r\n  }\r\n\r\n  function claimMediaOwner(controller) {\r\n    if (!controller) return;\r\n    if (mediaOwnerController && mediaOwnerController !== controller) {\r\n      deactivateController(mediaOwnerController);\r\n    }\r\n    mediaOwnerController = controller;\r\n  }\r\n\r\n  function releaseControllerMedia(controller) {\r\n    if (!controller?.video) return;\r\n\r\n    controller.video.pause();\r\n    try {\r\n      controller.video.currentTime = 0;\r\n    } catch (error) {\r\n      // Early media states may reject currentTime changes.\r\n    }\r\n\r\n    deferVideoSources(controller.video);\r\n    controller.prewarmed = false;\r\n    controller.prewarmQueued = false;\r\n\r\n    if (mediaOwnerController === controller) {\r\n      mediaOwnerController = null;\r\n    }\r\n  }\r\n\r\n  function getProductUrlForController(controller) {\r\n    if (controller.productUrl) return controller.productUrl;\r\n\r\n    const nodeUrl = controller.node.dataset.cardVideoProductUrl;\r\n    if (nodeUrl) {\r\n      controller.productUrl = normalizeProductUrl(nodeUrl);\r\n      return controller.productUrl;\r\n    }\r\n\r\n    const quickViewButton = controller.card.querySelector('[data-product-url]');\r\n    if (quickViewButton?.dataset.productUrl) {\r\n      controller.productUrl = normalizeProductUrl(quickViewButton.dataset.productUrl);\r\n      return controller.productUrl;\r\n    }\r\n\r\n    const productLink = controller.card.querySelector(PRODUCT_LINK_SELECTOR);\r\n    if (productLink?.getAttribute('href')) {\r\n      controller.productUrl = normalizeProductUrl(productLink.getAttribute('href'));\r\n      return controller.productUrl;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  function buildProductVideoViewUrl(productUrl) {\r\n    if (!productUrl) return '';\r\n    const cacheBust = `_cv=${Date.now()}`;\r\n    return productUrl.includes('?')\r\n      ? `${productUrl}&${PRODUCT_VIDEO_VIEW_QUERY}&${cacheBust}`\r\n      : `${productUrl}?${PRODUCT_VIDEO_VIEW_QUERY}&${cacheBust}`;\r\n  }\r\n\r\n  function hydrateControllerVideo(controller) {\r\n    if (!controller.video) return;\r\n\r\n    controller.video.defaultMuted = true;\r\n    controller.video.muted = true;\r\n    controller.video.loop = true;\r\n    controller.video.playsInline = true;\r\n    controller.video.setAttribute('muted', '');\r\n    controller.video.setAttribute('playsinline', '');\r\n    controller.video.setAttribute('loop', '');\r\n    controller.video.preload = 'none';\r\n    controller.video.setAttribute('preload', 'none');\r\n    controller.video.addEventListener('loadeddata', () => {\r\n      if (!controller.active) return;\r\n      seekToRevealStart(controller);\r\n      playControllerVideo(controller, 1);\r\n    });\r\n    controller.video.addEventListener('canplay', () => {\r\n      if (!controller.active) return;\r\n      seekToRevealStart(controller);\r\n      playControllerVideo(controller, 1);\r\n    });\r\n    controller.video.addEventListener('playing', () => revealControllerVideo(controller));\r\n    controller.video.addEventListener('timeupdate', () => revealControllerVideo(controller));\r\n  }\r\n\r\n  function prewarmController(controller) {\r\n    if (!controller || controller.type === 'external_video' || !controller.video || controller.prewarmed) return;\r\n\r\n    claimMediaOwner(controller);\r\n    hydrateDeferredVideoSources(controller.video);\r\n    controller.video.preload = 'metadata';\r\n    controller.video.setAttribute('preload', 'metadata');\r\n    controller.prewarmed = true;\r\n\r\n    try {\r\n      controller.video.load();\r\n    } catch (error) {\r\n      // Some browsers can ignore load calls until the media is user-initiated.\r\n    }\r\n  }\r\n\r\n  function schedulePrewarm(controller) {\r\n    if (!controller || controller.prewarmed || controller.prewarmQueued) return;\r\n\r\n    controller.prewarmQueued = true;\r\n\r\n    const run = () => {\r\n      controller.prewarmQueued = false;\r\n      prewarmController(controller);\r\n    };\r\n\r\n    if ('requestIdleCallback' in window) {\r\n      window.requestIdleCallback(run, { timeout: prewarmIdleTimeout });\r\n    } else {\r\n      window.setTimeout(run, 250);\r\n    }\r\n  }\r\n\r\n  function getAdjacentController(controller) {\r\n    if (!controller?.card) return null;\r\n\r\n    const cards = Array.from(cardControllers.keys()).filter((card) => card.isConnected);\r\n    const currentIndex = cards.indexOf(controller.card);\r\n    if (currentIndex < 0) return null;\r\n\r\n    const adjacentCard = cards[currentIndex + 1] || cards[currentIndex - 1];\r\n    return adjacentCard ? getControllerByCard(adjacentCard) : null;\r\n  }\r\n\r\n  function scheduleAdjacentPrewarm(controller) {\r\n    cancelQueuedPrewarm();\r\n    if (!isDesktopMode()) return;\r\n\r\n    const adjacentController = getAdjacentController(controller);\r\n    if (!adjacentController || adjacentController.type === 'external_video') return;\r\n\r\n    adjacentPrewarmTimer = window.setTimeout(() => {\r\n      adjacentPrewarmTimer = 0;\r\n      if (document.hidden || !isDesktopMode()) return;\r\n\r\n      const hasActiveController = Array.from(controllers.values()).some((item) => item.active);\r\n      if (hasActiveController) return;\r\n      prewarmController(adjacentController);\r\n    }, adjacentPrewarmDelay);\r\n  }\r\n\r\n  function scheduleInitialPrewarm() {\r\n    if (!desktopIdlePrewarmEnabled || !isDesktopMode() || initialPrewarmQueued) return;\r\n    initialPrewarmQueued = true;\r\n\r\n    const run = () => {\r\n      initialPrewarmQueued = false;\r\n      if (document.hidden || !isDesktopMode() || mediaOwnerController) return;\r\n\r\n      const candidate = Array.from(controllers.values()).find((controller) => {\r\n        if (!controller.card?.isConnected || controller.type === 'external_video') return false;\r\n        const rect = controller.card.getBoundingClientRect();\r\n        return rect.bottom > 0 && rect.top < window.innerHeight;\r\n      });\r\n\r\n      if (candidate) prewarmController(candidate);\r\n    };\r\n\r\n    if ('requestIdleCallback' in window) {\r\n      window.requestIdleCallback(run, { timeout: prewarmIdleTimeout });\r\n    } else {\r\n      window.setTimeout(run, prewarmIdleTimeout);\r\n    }\r\n  }\r\n\r\n  function prepareDetachedVideo(video) {\r\n    if (!video) return;\r\n\r\n    hydrateDeferredVideoSources(video);\r\n    video.defaultMuted = true;\r\n    video.muted = true;\r\n    video.loop = true;\r\n    video.playsInline = true;\r\n    video.setAttribute('muted', '');\r\n    video.setAttribute('playsinline', '');\r\n    video.setAttribute('loop', '');\r\n    video.preload = 'auto';\r\n    video.setAttribute('preload', 'auto');\r\n\r\n    try {\r\n      video.load();\r\n    } catch (error) {\r\n      // Detached videos can ignore load calls until the browser is ready.\r\n    }\r\n  }\r\n\r\n  function waitForVideoReady(video) {\r\n    if (!video || video.readyState >= replacementReadyState) return Promise.resolve(true);\r\n\r\n    return new Promise((resolve) => {\r\n      let settled = false;\r\n\r\n      const cleanup = () => {\r\n        video.removeEventListener('canplay', handleReady);\r\n        video.removeEventListener('error', handleError);\r\n      };\r\n\r\n      const settle = (isReady) => {\r\n        if (settled) return;\r\n        settled = true;\r\n        cleanup();\r\n        resolve(isReady);\r\n      };\r\n\r\n      const handleReady = () => settle(video.readyState >= replacementReadyState);\r\n      const handleError = () => settle(false);\r\n\r\n      video.addEventListener('canplay', handleReady);\r\n      video.addEventListener('error', handleError, { once: true });\r\n    });\r\n  }\r\n\r\n  function applyControllerNode(controller, newNode, activateAfterSwap) {\r\n    const oldNode = controller.node;\r\n\r\n    if (!oldNode.isConnected) return controller;\r\n\r\n    oldNode.replaceWith(newNode);\r\n    controller.node = newNode;\r\n    controller.type = newNode.dataset.cardVideoType || 'video';\r\n    controller.title = newNode.dataset.cardVideoTitle || controller.title;\r\n    controller.embedUrl = newNode.dataset.cardVideoEmbed || '';\r\n    controller.sourceType = newNode.dataset.cardVideoSource || controller.sourceType;\r\n    controller.productUrl = normalizeProductUrl(newNode.dataset.cardVideoProductUrl || controller.productUrl);\r\n    controller.video = newNode.querySelector('video');\r\n    controller.externalSlot = newNode.querySelector('.card-product-video__external');\r\n    controller.iframe = null;\r\n    controller.active = false;\r\n    controller.playbackRetryToken = (controller.playbackRetryToken || 0) + 1;\r\n    controller.prewarmed = false;\r\n    controller.prewarmQueued = false;\r\n    controller.pendingReplacementNode = null;\r\n\r\n    controllers.delete(oldNode);\r\n    controllers.set(newNode, controller);\r\n\r\n    hydrateControllerVideo(controller);\r\n\r\n    if (activateAfterSwap) {\r\n      activateController(controller);\r\n    }\r\n\r\n    return controller;\r\n  }\r\n\r\n  function updateControllerNode(controller, replacementNode) {\r\n    if (!replacementNode || replacementNode === controller.node) return controller;\r\n\r\n    const wasActive = controller.active;\r\n    const newNode = replacementNode.cloneNode(true);\r\n\r\n    if (wasActive) deactivateController(controller);\r\n    return applyControllerNode(controller, newNode, wasActive);\r\n  }\r\n\r\n  function fetchPreferredSourceMarkup(controller) {\r\n    const productUrl = getProductUrlForController(controller);\r\n    if (!productUrl) return Promise.resolve(null);\r\n\r\n    const requestKey = productUrl;\r\n    const requestUrl = buildProductVideoViewUrl(productUrl);\r\n    if (!requestUrl || !requestKey) return Promise.resolve(null);\r\n\r\n    if (!preferredSourceRequests.has(requestKey)) {\r\n      preferredSourceRequests.set(\r\n        requestKey,\r\n        fetch(requestUrl, {\r\n          credentials: 'same-origin',\r\n          headers: {\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n          }\r\n        })\r\n          .then((response) => (response.ok ? response.text() : ''))\r\n          .then((markup) => {\r\n            if (!markup) return null;\r\n            const parsed = new DOMParser().parseFromString(markup, 'text/html');\r\n            return parsed.querySelector(CARD_VIDEO_SELECTOR);\r\n          })\r\n          .catch(() => null)\r\n      );\r\n    }\r\n\r\n    return preferredSourceRequests.get(requestKey);\r\n  }\r\n\r\n  function ensurePreferredSource(controller) {\r\n    if (!controller) return Promise.resolve(controller);\r\n    if (controller.preferredSourceResolved) return Promise.resolve(controller);\r\n    if (controller.preferredSourcePromise) {\r\n      return controller.preferredSourcePromise;\r\n    }\r\n\r\n    controller.preferredSourcePromise = fetchPreferredSourceMarkup(controller)\r\n      .then((replacementNode) => {\r\n        if (replacementNode && replacementNode.outerHTML !== controller.node.outerHTML) {\r\n          updateControllerNode(controller, replacementNode);\r\n        }\r\n\r\n        controller.preferredSourceResolved = true;\r\n        return controller;\r\n      })\r\n      .catch(() => {\r\n        controller.preferredSourceResolved = true;\r\n        return controller;\r\n      })\r\n      .finally(() => {\r\n        controller.preferredSourcePromise = null;\r\n      });\r\n\r\n    return controller.preferredSourcePromise;\r\n  }\r\n\r\n  function cleanupDisconnectedControllers() {\r\n    controllers.forEach((controller, node) => {\r\n      if (node.isConnected && controller.card.isConnected) return;\r\n\r\n      deactivateController(controller);\r\n      if (visibilityObserver) {\r\n        visibilityObserver.unobserve(controller.card);\r\n      }\r\n      cardControllers.delete(controller.card);\r\n      controllers.delete(node);\r\n    });\r\n  }\r\n\r\n  function mountExternalIframe(controller) {\r\n    if (!controller.externalSlot || !controller.embedUrl) return;\r\n    if (controller.iframe) return;\r\n\r\n    const iframe = document.createElement('iframe');\r\n    iframe.className = 'card-product-video__iframe';\r\n    iframe.src = controller.embedUrl;\r\n    iframe.loading = 'lazy';\r\n    iframe.allow = 'autoplay; encrypted-media; picture-in-picture';\r\n    iframe.setAttribute('allowfullscreen', '');\r\n    iframe.setAttribute('tabindex', '-1');\r\n    iframe.setAttribute('aria-hidden', 'true');\r\n    iframe.title = `${controller.title} trailer`;\r\n\r\n    const reveal = () => {\r\n      if (!controller.active) return;\r\n      controller.node.classList.add('is-ready', 'is-active');\r\n    };\r\n\r\n    iframe.addEventListener('load', reveal, { once: true });\r\n    controller.externalSlot.replaceChildren(iframe);\r\n    controller.iframe = iframe;\r\n    window.setTimeout(reveal, 250);\r\n  }\r\n\r\n  function unmountExternalIframe(controller) {\r\n    if (!controller.externalSlot) return;\r\n    controller.externalSlot.replaceChildren();\r\n    controller.iframe = null;\r\n  }\r\n\r\n  function seekToRevealStart(controller) {\r\n    if (!controller?.video || controller.video.readyState < 1) return;\r\n    if (controller.video.currentTime >= videoRevealTime) return;\r\n\r\n    try {\r\n      controller.video.currentTime = videoRevealTime;\r\n    } catch (error) {\r\n      // Some browsers can block early seeks until metadata is fully available.\r\n    }\r\n  }\r\n\r\n  function revealControllerVideo(controller) {\r\n    if (!controller?.video || !shouldControllerPlay(controller)) return;\r\n    if (controller.video.paused || controller.video.readyState < videoReadyState) return;\r\n    if (controller.video.currentTime < videoRevealTime) return;\r\n    controller.node.classList.add('is-ready', 'is-active');\r\n  }\r\n  function shouldControllerPlay(controller) {\r\n    if (!controller || !controller.active || !controller.card.isConnected) return false;\r\n    if (!isDesktopMode()) return true;\r\n    return controller.card.matches(':hover') || controller.card.matches(':focus-within');\r\n  }\r\n\r\n  function playControllerVideo(controller, retries = 2) {\r\n    if (!controller?.video || !shouldControllerPlay(controller)) return;\r\n\r\n    const playPromise = controller.video.play();\r\n    if (!playPromise || typeof playPromise.catch !== 'function') return;\r\n\r\n    playPromise.catch(() => {\r\n      if (!shouldControllerPlay(controller) || retries <= 0) return;\r\n\r\n      const retry = () => playControllerVideo(controller, retries - 1);\r\n      controller.video.addEventListener('canplay', retry, { once: true });\r\n      window.setTimeout(retry, 250);\r\n    });\r\n  }\r\n\r\n  function schedulePlaybackRetries(controller) {\r\n    if (!controller?.video) return;\r\n\r\n    controller.playbackRetryToken = (controller.playbackRetryToken || 0) + 1;\r\n    const token = controller.playbackRetryToken;\r\n\r\n    playbackRetryDelays.forEach((delay) => {\r\n      window.setTimeout(() => {\r\n        if (controller.playbackRetryToken !== token) return;\r\n        if (!controller.video || !shouldControllerPlay(controller)) return;\r\n\r\n        if (controller.video.readyState < videoReadyState && controller.video.networkState !== videoNetworkLoadingState) {\r\n          try {\r\n            controller.video.load();\r\n          } catch (error) {\r\n            // Browsers can ignore load attempts while the media pipeline is busy.\r\n          }\r\n        }\r\n\r\n        if (controller.video.paused || controller.video.readyState < videoReadyState) {\r\n          seekToRevealStart(controller);\r\n          playControllerVideo(controller, 1);\r\n          return;\r\n        }\r\n\r\n        revealControllerVideo(controller);\r\n      }, delay);\r\n    });\r\n  }\r\n  function activateController(controller) {\r\n    if (!controller) return;\r\n\r\n    controller.active = true;\r\n\r\n    if (controller.type === 'external_video') {\r\n      mountExternalIframe(controller);\r\n      return;\r\n    }\r\n\r\n    if (!controller.video) return;\r\n\r\n    cancelQueuedPrewarm();\r\n    claimMediaOwner(controller);\r\n    hydrateDeferredVideoSources(controller.video);\r\n    controller.video.defaultMuted = true;\r\n    controller.video.muted = true;\r\n    controller.video.loop = true;\r\n    controller.video.playsInline = true;\r\n    controller.video.preload = 'auto';\r\n    controller.video.setAttribute('preload', 'auto');\r\n    controller.prewarmed = true;\r\n\r\n    if (controller.video.readyState < videoReadyState && controller.video.networkState !== videoNetworkLoadingState) {\r\n      controller.video.load();\r\n    }\r\n    controller.node.classList.add('is-active');\r\n\r\n    seekToRevealStart(controller);\r\n    playControllerVideo(controller);\r\n    schedulePlaybackRetries(controller);\r\n    window.setTimeout(() => {\r\n      if (!controller.video || !controller.video.paused) return;\r\n      playControllerVideo(controller, 1);\r\n    }, 350);\r\n  }\r\n\r\n  function deactivateController(controller) {\r\n    if (!controller) return;\r\n\r\n    controller.active = false;\r\n    controller.playbackRetryToken = (controller.playbackRetryToken || 0) + 1;\r\n    controller.node.classList.remove('is-active', 'is-ready');\r\n\r\n    if (controller.type === 'external_video') {\r\n      controller.node.classList.remove('is-ready');\r\n      unmountExternalIframe(controller);\r\n      return;\r\n    }\r\n\r\n    if (!controller.video) return;\r\n\r\n    releaseControllerMedia(controller);\r\n\r\n    if (controller.pendingReplacementNode) {\r\n      const pendingNode = controller.pendingReplacementNode;\r\n      applyControllerNode(controller, pendingNode, false);\r\n    }\r\n  }\r\n\r\n  function pauseAllControllers(exceptCard = null) {\r\n    controllers.forEach((controller) => {\r\n      if (exceptCard && controller.card === exceptCard) return;\r\n      deactivateController(controller);\r\n    });\r\n  }\r\n\r\n  function refreshInViewPlayback() {\r\n    refreshFrame = 0;\r\n\r\n    if (document.hidden || isDesktopMode()) {\r\n      pauseAllControllers();\r\n      return;\r\n    }\r\n\r\n    let bestController = null;\r\n\r\n    controllers.forEach((controller) => {\r\n      if (controller.intersectionRatio <= 0) return;\r\n      if (!bestController || controller.intersectionRatio > bestController.intersectionRatio) {\r\n        bestController = controller;\r\n      }\r\n    });\r\n\r\n    if (!bestController || bestController.intersectionRatio < 0.45) {\r\n      pauseAllControllers();\r\n      return;\r\n    }\r\n\r\n    if (!bestController.preferredSourceResolved) {\r\n      pauseAllControllers();\r\n      ensurePreferredSource(bestController).finally(scheduleInViewRefresh);\r\n      return;\r\n    }\r\n\r\n    pauseAllControllers(bestController.card);\r\n    activateController(bestController);\r\n  }\r\n\r\n  function scheduleInViewRefresh() {\r\n    if (refreshFrame) return;\r\n    refreshFrame = window.requestAnimationFrame(refreshInViewPlayback);\r\n  }\r\n\r\n  function handleVisibility(entries) {\r\n    entries.forEach((entry) => {\r\n      const controller = getControllerByCard(entry.target);\r\n      if (!controller) return;\r\n\r\n      controller.intersectionRatio = entry.isIntersecting ? entry.intersectionRatio : 0;\r\n    });\r\n\r\n    scheduleInViewRefresh();\r\n  }\r\n\r\n  function ensureVisibilityObserver() {\r\n    if (visibilityObserver) return visibilityObserver;\r\n\r\n    visibilityObserver = new IntersectionObserver(handleVisibility, {\r\n      root: null,\r\n      rootMargin: '-12% 0px -12% 0px',\r\n      threshold: observerThresholds\r\n    });\r\n\r\n    return visibilityObserver;\r\n  }\r\n\r\n  function ensurePrewarmObserver() {\r\n    if (prewarmObserver) return prewarmObserver;\r\n\r\n    prewarmObserver = new IntersectionObserver((entries) => {\r\n      entries.forEach((entry) => {\r\n        if (!entry.isIntersecting) return;\r\n\r\n        const controller = getControllerByCard(entry.target);\r\n        schedulePrewarm(controller);\r\n        prewarmObserver.unobserve(entry.target);\r\n      });\r\n    }, {\r\n      root: null,\r\n      rootMargin: prewarmRootMargin,\r\n      threshold: 0\r\n    });\r\n\r\n    return prewarmObserver;\r\n  }\r\n\r\n  function observePrewarmCandidates() {\r\n    if (!isDesktopMode() || !desktopViewportPrewarmEnabled) return;\r\n\r\n    const observer = ensurePrewarmObserver();\r\n    controllers.forEach((controller) => {\r\n      if (!controller || controller.type === 'external_video' || !controller.card || controller.prewarmed || controller.prewarmQueued) return;\r\n      observer.observe(controller.card);\r\n    });\r\n  }\r\n\r\n  function bindDesktopEvents(controller) {\r\n    const card = controller.card;\r\n    if (card.dataset.cardVideoDesktopBound === 'true') {\r\n      controller.desktopEventsBound = true;\r\n      return;\r\n    }\r\n\r\n    const prewarmVideo = () => {\r\n      const currentController = getControllerByCard(card);\r\n      if (!isDesktopMode() || !currentController) return;\r\n      prewarmController(currentController);\r\n    };\r\n\r\n    const showVideo = () => {\r\n      const currentController = getControllerByCard(card);\r\n      if (!isDesktopMode() || !currentController) return;\r\n\r\n      pauseAllControllers(currentController.card);\r\n      activateController(currentController);\r\n\r\n      if (currentController.preferredSourceResolved) return;\r\n\r\n      ensurePreferredSource(currentController).finally(() => {\r\n        const resolvedController = getControllerByCard(card) || currentController;\r\n        if (!isDesktopMode() || !resolvedController) return;\r\n        if (!card.matches(':hover') && !card.matches(':focus-within')) return;\r\n        pauseAllControllers(resolvedController.card);\r\n        activateController(resolvedController);\r\n      });\r\n    };\r\n\r\n    const hideVideo = () => {\r\n      const currentController = getControllerByCard(card);\r\n      if (!isDesktopMode() || !currentController) return;\r\n      deactivateController(currentController);\r\n      scheduleAdjacentPrewarm(currentController);\r\n    };\r\n\r\n    card.addEventListener('pointerenter', prewarmVideo, { passive: true });\r\n    card.addEventListener('mouseenter', showVideo);\r\n    card.addEventListener('mouseleave', hideVideo);\r\n    card.addEventListener('focusin', (event) => {\r\n      prewarmVideo(event);\r\n      showVideo(event);\r\n    });\r\n    card.addEventListener('focusout', (event) => {\r\n      const currentController = getControllerByCard(card);\r\n      if (!isDesktopMode()) return;\r\n      if (event.relatedTarget && card.contains(event.relatedTarget)) return;\r\n      if (!currentController) return;\r\n      hideVideo();\r\n    });\r\n\r\n    card.dataset.cardVideoDesktopBound = 'true';\r\n    controller.desktopEventsBound = true;\r\n  }\r\n\r\n  function createController(node) {\r\n    if (shouldIgnoreVideoNode(node)) return null;\r\n\r\n    const card = node.closest('.card-wrapper--product');\r\n    if (!card) return null;\r\n\r\n    const controller = {\r\n      node,\r\n      card,\r\n      type: node.dataset.cardVideoType || 'video',\r\n      title: node.dataset.cardVideoTitle || 'Product',\r\n      embedUrl: node.dataset.cardVideoEmbed || '',\r\n      sourceType: node.dataset.cardVideoSource || 'gallery',\r\n      productUrl: normalizeProductUrl(node.dataset.cardVideoProductUrl || ''),\r\n      video: node.querySelector('video'),\r\n      externalSlot: node.querySelector('.card-product-video__external'),\r\n      iframe: null,\r\n      intersectionRatio: 0,\r\n      active: false,\r\n      desktopEventsBound: false,\r\n      preferredSourceResolved: ['metafield', 'theme_asset'].includes(node.dataset.cardVideoSource),\r\n      preferredSourcePromise: null,\r\n      prewarmed: false,\r\n      prewarmQueued: false,\r\n      pendingReplacementNode: null\r\n    };\r\n\r\n    hydrateControllerVideo(controller);\r\n\r\n    bindDesktopEvents(controller);\r\n    controllers.set(node, controller);\r\n    cardControllers.set(card, controller);\r\n\r\n    return controller;\r\n  }\r\n\r\n  function syncMode() {\r\n    cleanupDisconnectedControllers();\r\n    pauseAllControllers();\r\n\r\n    if (isDesktopMode()) {\r\n      if (visibilityObserver) {\r\n        visibilityObserver.disconnect();\r\n      }\r\n      if (prewarmObserver) {\r\n        prewarmObserver.disconnect();\r\n      }\r\n      scheduleInitialPrewarm();\r\n      return;\r\n    }\r\n\r\n    cancelQueuedPrewarm();\r\n    if (prewarmObserver) {\r\n      prewarmObserver.disconnect();\r\n    }\r\n\r\n    const observer = ensureVisibilityObserver();\r\n    observer.disconnect();\r\n    controllers.forEach((controller) => {\r\n      controller.intersectionRatio = 0;\r\n      observer.observe(controller.card);\r\n    });\r\n    scheduleInViewRefresh();\r\n  }\r\n\r\n  function setupCardVideos(root = document) {\r\n    cleanupDisconnectedControllers();\r\n\r\n    root.querySelectorAll(CARD_VIDEO_SELECTOR).forEach((node) => {\r\n      if (controllers.has(node)) return;\r\n      if (shouldIgnoreVideoNode(node)) return;\r\n      createController(node);\r\n    });\r\n\r\n    syncMode();\r\n  }\r\n\r\n  function queueSetup() {\r\n    if (setupFrame) return;\r\n\r\n    setupFrame = window.requestAnimationFrame(() => {\r\n      setupFrame = 0;\r\n      setupCardVideos(document);\r\n    });\r\n  }\r\n\r\n  function init() {\r\n    setupCardVideos(document);\r\n\r\n    mutationObserver = new MutationObserver(queueSetup);\r\n    mutationObserver.observe(document.querySelector('#ProductGridContainer') || document.body, { childList: true, subtree: true });\r\n\r\n    const handleModeChange = () => syncMode();\r\n    if (typeof DESKTOP_HOVER_QUERY.addEventListener === 'function') {\r\n      DESKTOP_HOVER_QUERY.addEventListener('change', handleModeChange);\r\n    } else if (typeof DESKTOP_HOVER_QUERY.addListener === 'function') {\r\n      DESKTOP_HOVER_QUERY.addListener(handleModeChange);\r\n    }\r\n\r\n    document.addEventListener('visibilitychange', () => {\r\n      if (document.hidden) {\r\n        pauseAllControllers();\r\n      } else {\r\n        syncMode();\r\n      }\r\n    });\r\n\r\n    window.addEventListener('pageshow', () => {\r\n      queueSetup();\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', init, { once: true });\r\n  } else {\r\n    init();\r\n  }\r\n})();\r\n\r\n"],
  "mappings": "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",
  "names": []
}
