{
  "version": 3,
  "sources": ["/cdn/shop/t/76/assets/rover-product-page.js?cache_bust=1788506300"],
  "sourcesContent": ["(function () {\n  if (window.__roverProductPageScriptLoaded) return;\n  window.__roverProductPageScriptLoaded = true;\n\n  var reduceMotionQuery = window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\n  // Temporary conservative TVC mode: keep the scroll sequence code below, but bypass it in production.\n  var forceStaticPerspective = true;\n\n  function prefersReducedMotion() {\n    return reduceMotionQuery && reduceMotionQuery.matches;\n  }\n\n  function clamp(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n  }\n\n  function getLayoutViewportWidth() {\n    return window.innerWidth || document.documentElement.clientWidth || 1;\n  }\n\n  function getViewportCenterWithin(containerRect, viewportWidth) {\n    var rectLeft = containerRect && Number.isFinite(containerRect.left) ? containerRect.left : 0;\n    return (viewportWidth / 2) - rectLeft;\n  }\n\n  function escapeSelector(value) {\n    if (window.CSS && CSS.escape) return CSS.escape(value);\n    return String(value).replace(/[^a-zA-Z0-9_-]/g, '\\\\$&');\n  }\n\n  function getRestrictedPurchaseRoot(element) {\n    if (!element || !element.closest) return null;\n    return element.closest('[data-rover-purchase-restricted=\"true\"], .is-market-restricted');\n  }\n\n  function isRestrictedPurchaseElement(element) {\n    return !!getRestrictedPurchaseRoot(element);\n  }\n\n  function getRestrictedPurchaseMessage(element) {\n    var root = getRestrictedPurchaseRoot(element);\n    if (!root) return 'Rover is not available for purchase in your current region.';\n    return root.getAttribute('data-rover-restricted-message') || 'Rover is not available for purchase in your current region.';\n  }\n\n  function getShopifyRouteRoot() {\n    return (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/';\n  }\n\n  function getRoverCartDrawer() {\n    return document.getElementById('cart-drawer') || document.querySelector('cart-drawer');\n  }\n\n  function getRoverSectionId(element) {\n    if (!element) return '';\n    var section = element.classList && element.classList.contains('shopify-section') ? element : (element.closest ? element.closest('.shopify-section') : null);\n    return section && section.id ? section.id.replace('shopify-section-', '') : '';\n  }\n\n  function setRoverCartLayer(isOpen) {\n    document.documentElement.classList.toggle('rover-cart-open', !!isOpen);\n    if (document.body) document.body.classList.toggle('rover-cart-open', !!isOpen);\n  }\n\n  function replaceRoverCartDrawer(html) {\n    if (!html) return false;\n    var holder = document.createElement('div');\n    holder.innerHTML = html;\n    var fresh = holder.querySelector('#cart-drawer');\n    var current = getRoverCartDrawer();\n    if (!fresh || !current) return false;\n    current.replaceWith(fresh);\n    return true;\n  }\n\n  function replaceRoverCartDrawerFromSections(sections) {\n    if (!sections) return false;\n    var drawer = getRoverCartDrawer();\n    var sectionId = getRoverSectionId(drawer);\n    var html = sectionId && sections[sectionId] ? sections[sectionId] : sections['cart-drawer'];\n    if (!html) {\n      Object.keys(sections).some(function (key) {\n        if (key.indexOf('cart-drawer') === -1) return false;\n        html = sections[key];\n        return true;\n      });\n    }\n    return replaceRoverCartDrawer(html);\n  }\n\n  function getRoverCartDrawerSectionId() {\n    return getRoverSectionId(getRoverCartDrawer()) || 'cart-drawer';\n  }\n\n  function showRoverCartDrawerElement(drawer) {\n    if (!drawer) return false;\n\n    if (typeof drawer.show === 'function') {\n      try {\n        drawer.show();\n        return true;\n      } catch (error) {}\n    }\n\n    if (typeof drawer.showModal === 'function') {\n      try {\n        drawer.showModal();\n        return true;\n      } catch (error) {}\n    }\n\n    if (typeof drawer.open === 'function') {\n      try {\n        drawer.open();\n        return true;\n      } catch (error) {}\n    }\n\n    drawer.setAttribute('open', '');\n    drawer.setAttribute('aria-hidden', 'false');\n    drawer.removeAttribute('inert');\n    return true;\n  }\n\n  function reinforceRoverCartDrawerOpen() {\n    window.setTimeout(function () {\n      setRoverCartLayer(true);\n      showRoverCartDrawerElement(getRoverCartDrawer());\n    }, 80);\n\n    window.setTimeout(function () {\n      setRoverCartLayer(true);\n      showRoverCartDrawerElement(getRoverCartDrawer());\n    }, 260);\n  }\n\n  function openRoverCartDrawer(options) {\n    var opts = options || {};\n    if (opts.sections) replaceRoverCartDrawerFromSections(opts.sections);\n    setRoverCartLayer(true);\n    var drawer = getRoverCartDrawer();\n\n    if (showRoverCartDrawerElement(drawer)) {\n      reinforceRoverCartDrawerOpen();\n      return true;\n    }\n\n    var trigger = document.querySelector('[aria-controls=\"cart-drawer\"]');\n    if (trigger && typeof trigger.click === 'function') {\n      trigger.click();\n      reinforceRoverCartDrawerOpen();\n      return true;\n    }\n\n    return false;\n  }\n\n  function bindRoverCartLayerBridge() {\n    if (window.__roverCartLayerBridgeBound === 'true') return;\n    window.__roverCartLayerBridgeBound = 'true';\n    window.roverOpenCartDrawer = openRoverCartDrawer;\n\n    document.addEventListener('variant:add', function (event) {\n      var target = event.target;\n      var detail = event.detail || {};\n      var source = detail.form || detail.source || target;\n      var active = document.activeElement;\n      var isRoverPurchaseEvent = false;\n\n      [source, target, active].some(function (candidate) {\n        if (!candidate || !candidate.closest) return false;\n        isRoverPurchaseEvent = !!candidate.closest('.rover-purchase-drawer');\n        return isRoverPurchaseEvent;\n      });\n\n      if (!isRoverPurchaseEvent) return;\n      openRoverCartDrawer({ sections: detail.cart && detail.cart.sections });\n      reinforceRoverCartDrawerOpen();\n    }, true);\n\n    document.addEventListener('dialog:after-hide', function (event) {\n      if (event.target && event.target.id === 'cart-drawer') setRoverCartLayer(false);\n    });\n\n    document.addEventListener('toggle', function (event) {\n      if (event.target && event.target.id === 'cart-drawer' && !event.target.hasAttribute('open')) setRoverCartLayer(false);\n    });\n  }\n\n  function applyRoverPurchaseRegionLock(scope) {\n    var rootScope = scope || document;\n    var restrictedRoots = [];\n\n    if (rootScope.matches && rootScope.matches('[data-rover-purchase-restricted=\"true\"], .is-market-restricted')) {\n      restrictedRoots.push(rootScope);\n    }\n\n    restrictedRoots = restrictedRoots.concat(Array.prototype.slice.call(rootScope.querySelectorAll('[data-rover-purchase-restricted=\"true\"], .is-market-restricted')));\n\n    restrictedRoots.forEach(function (root) {\n      root.querySelectorAll('form[action*=\"/cart/add\"], form[action$=\"/cart/add\"]').forEach(function (form) {\n        form.setAttribute('data-rover-purchase-restricted-form', 'true');\n      });\n\n      root.querySelectorAll('button[type=\"submit\"], [data-rover-bundle-add], [data-rover-bundle-card-add]').forEach(function (button) {\n        if (!button) return;\n        button.disabled = true;\n        button.setAttribute('aria-disabled', 'true');\n      });\n    });\n\n    if (window.__roverPurchaseRegionLockBound === 'true') return;\n    window.__roverPurchaseRegionLockBound = 'true';\n\n    document.addEventListener('submit', function (event) {\n      var form = event.target;\n      if (!form || !form.matches || !form.matches('form[action*=\"/cart/add\"], form[action$=\"/cart/add\"]')) return;\n      if (!isRestrictedPurchaseElement(form)) return;\n      event.preventDefault();\n      event.stopPropagation();\n    }, true);\n\n    document.addEventListener('click', function (event) {\n      var target = event.target && event.target.closest ? event.target.closest('[data-rover-bundle-add], [data-rover-bundle-card-add], button[type=\"submit\"]') : null;\n      if (!target || !isRestrictedPurchaseElement(target)) return;\n      event.preventDefault();\n      event.stopPropagation();\n      target.disabled = true;\n      target.setAttribute('aria-disabled', 'true');\n\n      var root = getRestrictedPurchaseRoot(target);\n      var message = root ? root.querySelector('[data-rover-bundle-message], [data-rover-market-message]') : null;\n      if (message) message.textContent = getRestrictedPurchaseMessage(target);\n    }, true);\n  }\n\n  function prepareVideo(video, preload) {\n    if (!video) return;\n    var sourcesChanged = normalizeVideoElementSources(video);\n    video.muted = true;\n    video.defaultMuted = true;\n    video.playsInline = true;\n    video.setAttribute('playsinline', '');\n    video.setAttribute('webkit-playsinline', '');\n    var requestedPreload = preload || video.getAttribute('preload') || 'metadata';\n    var shouldUpgradePreload = video.dataset.roverVideoPrepared === 'true' && requestedPreload === 'auto' && video.preload !== 'auto';\n    video.preload = requestedPreload;\n\n    var root = video.closest('[data-rover-perspective], [data-rover-vct], .rover-section');\n    var poster = video.getAttribute('poster');\n\n    if (poster && root && root.matches('[data-rover-perspective], [data-rover-vct]')) {\n      root.style.setProperty('--rover-vct-poster-image', 'url(\"' + poster.replace(/\"/g, '%22') + '\")');\n    }\n\n    if (poster && video.dataset.roverPosterPreloadBound !== 'true') {\n      video.dataset.roverPosterPreloadBound = 'true';\n      var posterImage = new Image();\n      posterImage.onload = function () {\n        if (root) root.classList.add('is-vct-poster-ready');\n      };\n      posterImage.onerror = function () {\n        if (root) root.classList.add('is-vct-poster-error');\n      };\n      posterImage.src = poster;\n    }\n\n    function markMetadata() {\n      video.dataset.roverVideoMetadata = 'true';\n      if (root) root.classList.add('is-vct-media-metadata');\n    }\n\n    function markReady() {\n      if (video.readyState < 2) return;\n      video.dataset.roverVideoReady = 'true';\n      if (root) root.classList.add('is-vct-media-ready');\n    }\n\n    if (video.dataset.roverVideoReadyBound !== 'true') {\n      video.dataset.roverVideoReadyBound = 'true';\n      video.addEventListener('loadedmetadata', markMetadata, { once: true });\n      ['loadeddata', 'canplay', 'canplaythrough'].forEach(function (eventName) {\n        video.addEventListener(eventName, markReady, { once: true });\n      });\n      video.addEventListener('error', function () {\n        if (root) root.classList.add('is-vct-media-error');\n      }, { once: true });\n    }\n\n    if (video.readyState >= 1) markMetadata();\n    if (video.readyState >= 2) markReady();\n    if (video.dataset.roverVideoPrepared === 'true') {\n      if (shouldUpgradePreload || sourcesChanged) {\n        try { video.load(); } catch (error) {}\n      }\n      return;\n    }\n    video.dataset.roverVideoPrepared = 'true';\n    if (sourcesChanged || video.networkState === 0) {\n      try { video.load(); } catch (error) {}\n    }\n  }\n\n  function normalizeShopifyVideoUrl(url) {\n    if (!url) return '';\n    var value = String(url);\n    if (value.indexOf('//') === 0) value = window.location.protocol + value;\n\n    try {\n      var parsed = new URL(value, window.location.href);\n      var videoPath = parsed.pathname;\n      var customCdnMarker = '/cdn/shop/videos/';\n\n      if (videoPath.indexOf(customCdnMarker) !== -1) {\n        return 'https://cdn.shopify.com/videos/' + videoPath.split(customCdnMarker).pop();\n      }\n\n      if (parsed.hostname === 'cdn.shopify.com' && videoPath.indexOf('/videos/') === 0) {\n        return 'https://cdn.shopify.com' + videoPath;\n      }\n    } catch (error) {}\n\n    return value;\n  }\n\n  function normalizeVideoElementSources(video) {\n    if (!video || video.dataset.roverCanonicalizedVideo === 'true') return false;\n\n    var changed = false;\n    var currentSrc = video.getAttribute('src');\n    var normalizedVideoSrc = normalizeShopifyVideoUrl(currentSrc);\n\n    if (currentSrc && normalizedVideoSrc && normalizedVideoSrc !== currentSrc) {\n      video.setAttribute('src', normalizedVideoSrc);\n      changed = true;\n    }\n\n    video.querySelectorAll('source').forEach(function (source) {\n      var sourceSrc = source.getAttribute('src');\n      var normalizedSourceSrc = normalizeShopifyVideoUrl(sourceSrc);\n\n      if (sourceSrc && normalizedSourceSrc && normalizedSourceSrc !== sourceSrc) {\n        source.setAttribute('src', normalizedSourceSrc);\n        changed = true;\n      }\n    });\n\n    video.dataset.roverCanonicalizedVideo = 'true';\n    if (changed) video.dataset.roverCanonicalVideo = 'true';\n    return changed;\n  }\n\n  function getVideoSourceUrl(video) {\n    if (!video) return '';\n    var matchingSource = null;\n    Array.prototype.slice.call(video.querySelectorAll('source')).some(function (source) {\n      var media = source.getAttribute('media');\n      if (!media || !window.matchMedia || window.matchMedia(media).matches) {\n        matchingSource = source;\n        return true;\n      }\n      return false;\n    });\n    return normalizeShopifyVideoUrl(video.currentSrc || video.getAttribute('src') || (matchingSource && matchingSource.src) || (video.querySelector('source') && video.querySelector('source').src) || '');\n  }\n\n  function addVideoPreloadHint(url, priority) {\n    if (!url || !document.head) return;\n\n    try {\n      var parsed = new URL(url, window.location.href);\n      if (parsed.protocol !== 'https:') return;\n\n      var preconnectKey = 'rover-preconnect-' + parsed.origin;\n      if (!document.querySelector('link[data-rover-video-hint=\"' + preconnectKey + '\"]')) {\n        var preconnect = document.createElement('link');\n        preconnect.rel = 'preconnect';\n        preconnect.href = parsed.origin;\n        preconnect.crossOrigin = 'anonymous';\n        preconnect.setAttribute('data-rover-video-hint', preconnectKey);\n        document.head.appendChild(preconnect);\n      }\n\n      if (priority !== 'high') return;\n\n      var preloadKey = 'rover-preload-' + parsed.href;\n      if (document.querySelector('link[data-rover-video-hint=\"' + preloadKey.replace(/\"/g, '%22') + '\"]')) return;\n      var preload = document.createElement('link');\n      preload.rel = 'preload';\n      preload.as = 'video';\n      preload.href = parsed.href;\n      preload.type = 'video/mp4';\n      preload.crossOrigin = 'anonymous';\n      if ('fetchPriority' in preload) preload.fetchPriority = 'low';\n      preload.setAttribute('data-rover-video-hint', preloadKey.replace(/\"/g, '%22'));\n      document.head.appendChild(preload);\n    } catch (error) {}\n  }\n\n  function rangePrewarmVideo(video, byteLength) {\n    if (!video || video.dataset.roverRangePrewarmed === 'true' || !window.fetch) return;\n    var url = getVideoSourceUrl(video);\n    if (!url) return;\n    video.dataset.roverRangePrewarmed = 'true';\n\n    var endByte = Math.max(1023, (byteLength || 131072) - 1);\n    try {\n      fetch(url, {\n        method: 'GET',\n        mode: 'cors',\n        credentials: 'omit',\n        cache: 'force-cache',\n        headers: { Range: 'bytes=0-' + endByte }\n      }).catch(function () {\n        try {\n          fetch(url, { method: 'GET', mode: 'no-cors', credentials: 'omit', cache: 'force-cache' }).catch(function () {});\n        } catch (fallbackError) {}\n      });\n    } catch (error) {}\n  }\n\n  function shouldPlayVideo(video) {\n    if (!video || isHiddenMedia(video)) return false;\n    var perspective = video.closest('[data-rover-perspective]');\n    if (perspective) {\n      return perspective.classList.contains('is-vct-playing') || perspective.classList.contains('is-vct-expanded') || perspective.classList.contains('is-mobile-vct-expanded');\n    }\n    return true;\n  }\n\n  function attemptVideoPlay(video) {\n    if (!shouldPlayVideo(video)) return;\n    if (video.dataset.roverPlayInFlight === 'true') return;\n    if (!video.paused && !video.ended) {\n      video.dataset.roverPendingPlay = 'false';\n      return;\n    }\n    try {\n      var playRequest = video.play();\n      if (playRequest && playRequest.then) {\n        video.dataset.roverPlayInFlight = 'true';\n        playRequest.then(function () {\n          video.dataset.roverPendingPlay = 'false';\n          video.dataset.roverPlayInFlight = 'false';\n        }).catch(function () {\n          video.dataset.roverPlayInFlight = 'false';\n        });\n      }\n    } catch (error) {\n      video.dataset.roverPlayInFlight = 'false';\n    }\n  }\n\n  function bindPendingVideoPlay(video) {\n    if (!video || video.dataset.roverPendingPlayBound === 'true') return;\n    video.dataset.roverPendingPlayBound = 'true';\n    ['loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough'].forEach(function (eventName) {\n      video.addEventListener(eventName, function () {\n        if (video.dataset.roverPendingPlay === 'true') attemptVideoPlay(video);\n      });\n    });\n  }\n\n  function playPreparedVideo(video) {\n    if (!video || prefersReducedMotion()) return;\n    /* Data Saver: the viewport gate (shouldAutoplayViewportVideo) already refuses\n       to autoplay, but the VCT/tabs/specs paths call this directly and previously\n       ignored the flag, so a save-data viewer still got automatic playback.\n       Explicit user intent goes through playVideoFromUser(), which bypasses here. */\n    if (isDataSaverEnabled()) return;\n    if (video.dataset.roverUserPaused === 'true') return;\n    prepareVideo(video, 'auto');\n    bindPendingVideoPlay(video);\n    video.dataset.roverPendingPlay = 'true';\n    if (!video.currentSrc || video.networkState === 0) {\n      try { video.load(); } catch (error) {}\n    }\n    attemptVideoPlay(video);\n  }\n\n  function pauseVideo(video) {\n    if (!video) return;\n    video.dataset.roverPendingPlay = 'false';\n    video.pause();\n  }\n\n  /* Rover 2026-09-23: inline video play/pause affordance.\n     The inline media surfaces (statement / specs / ai-tabs / split) ship with\n     controls=false and no manual entry point, so a viewer whose playback is\n     suppressed (prefers-reduced-motion, or Data Saver) previously saw a frozen\n     poster with no way to start it. Labels mirror the theme's existing\n     general.accessibility.play_video strings; the accessible name stays constant\n     and aria-pressed carries the state. */\n  var ROVER_PLAY_TOGGLE_LABELS = {\n    'ar': '\\u062a\\u0634\\u063a\\u064a\\u0644 \\u0627\\u0644\\u0641\\u064a\\u062f\\u064a\\u0648',\n    'cs': 'P\\u0159ehr\\u00e1t video',\n    'da': 'Afspil video',\n    'de': 'Video abspielen',\n    'el': '\\u0391\\u03bd\\u03b1\\u03c0\\u03b1\\u03c1\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u03b2\\u03af\\u03bd\\u03c4\\u03b5\\u03bf',\n    'en': 'Play video',\n    'es': 'Reproducir v\\u00eddeo',\n    'fi': 'Toista video',\n    'fr': 'Lire la vid\\u00e9o',\n    'he': '\\u05d4\\u05e4\\u05e2\\u05dc\\u05ea \\u05e1\\u05e8\\u05d8\\u05d5\\u05df',\n    'it': 'Riproduci video',\n    'ja': '\\u52d5\\u753b\\u3092\\u518d\\u751f\\u3059\\u308b',\n    'ko': '\\ube44\\ub514\\uc624 \\uc7ac\\uc0dd',\n    'lt': 'Leisti vaizdo \\u012fra\\u0161\\u0105',\n    'lv': 'Atska\\u0146ot videoklipu',\n    'nb': 'Spill av video',\n    'nl': 'Video afspelen',\n    'pl': 'Odtw\\u00f3rz wideo',\n    'pt-br': 'Reproduzir v\\u00eddeo',\n    'pt-pt': 'Play video',\n    'ro': 'Red\\u0103 videoclipul',\n    'ru': '\\u0421\\u043c\\u043e\\u0442\\u0440\\u0435\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e',\n    'sk': 'Prehra\\u0165 video',\n    'sl': 'Predvajaj videoposnetek',\n    'sv': 'Spela upp video',\n    'tr': 'Videoyu oynat',\n    'uk': '\\u0412\\u0456\\u0434\\u0442\\u0432\\u043e\\u0440\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0435\\u043e',\n    'zh-cn': '\\u64ad\\u653e\\u89c6\\u9891',\n    'zh-tw': '\\u64ad\\u653e\\u5f71\\u7247'\n  };\n\n  function roverPlayToggleLabel() {\n    var lang = (document.documentElement && document.documentElement.getAttribute('lang') || 'en').toLowerCase();\n    if (ROVER_PLAY_TOGGLE_LABELS[lang]) return ROVER_PLAY_TOGGLE_LABELS[lang];\n    var primary = lang.split('-')[0];\n    return ROVER_PLAY_TOGGLE_LABELS[primary] || ROVER_PLAY_TOGGLE_LABELS.en;\n  }\n\n  function getRoverInlineVideoHost(video) {\n    if (!video || !video.closest) return null;\n    if (video.closest('[data-rover-watch-film-modal], .rover-watch-film-modal')) return null;\n    if (video.classList && video.classList.contains('rover-watch-film-modal__video')) return null;\n    var section = video.closest('.rover-section');\n    if (!section || section.classList.contains('rover-hero')) return null;\n    return video.closest('.rover-statement__window, .rover-specs__media-panel, .rover-ai-tabs__media, .rover-split__media-panel');\n  }\n\n  function syncRoverPlayToggle(button, video) {\n    if (!button || !video) return;\n    button.setAttribute('aria-pressed', (!video.paused && !video.ended) ? 'true' : 'false');\n  }\n\n  function playVideoFromUser(video) {\n    if (!video) return;\n    // Explicit user intent: clear the sticky pause marker and bypass the\n    // reduced-motion autoplay guard that playPreparedVideo() applies.\n    delete video.dataset.roverUserPaused;\n    prepareVideo(video, 'auto');\n    bindPendingVideoPlay(video);\n    video.dataset.roverPendingPlay = 'true';\n    if (!video.currentSrc || video.networkState === 0) {\n      try { video.load(); } catch (error) {}\n    }\n    try {\n      var playRequest = video.play();\n      if (playRequest && playRequest.catch) playRequest.catch(function () {});\n    } catch (error) {}\n  }\n\n  function initVideoPlayToggles(scope) {\n    var currentScope = scope || document;\n    var videos = [];\n    if (currentScope.matches && currentScope.matches('.rover-section video')) videos.push(currentScope);\n    if (currentScope.querySelectorAll) {\n      videos = videos.concat(Array.prototype.slice.call(currentScope.querySelectorAll('.rover-section video')));\n    }\n\n    videos.forEach(function (video) {\n      var host = getRoverInlineVideoHost(video);\n      if (!host || host.dataset.roverPlayToggleBound === 'true') return;\n      host.dataset.roverPlayToggleBound = 'true';\n\n      var button = host.querySelector('[data-rover-play-toggle]');\n      if (!button) {\n        button = document.createElement('button');\n        button.type = 'button';\n        button.className = 'rover-video-toggle';\n        button.setAttribute('data-rover-play-toggle', '');\n        button.setAttribute('aria-pressed', 'false');\n        button.setAttribute('aria-label', roverPlayToggleLabel());\n        button.innerHTML = '<span class=\"rover-video-toggle__icon\" aria-hidden=\"true\"></span>';\n        host.appendChild(button);\n      }\n\n      button.addEventListener('click', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        if (video.paused || video.ended) {\n          playVideoFromUser(video);\n        } else {\n          video.dataset.roverUserPaused = 'true';\n          pauseVideo(video);\n        }\n        syncRoverPlayToggle(button, video);\n      });\n\n      ['play', 'pause', 'ended', 'loadedmetadata', 'emptied'].forEach(function (eventName) {\n        video.addEventListener(eventName, function () { syncRoverPlayToggle(button, video); });\n      });\n\n      syncRoverPlayToggle(button, video);\n    });\n  }\n\n  function isDataSaverEnabled() {\n    var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n    return !!(connection && connection.saveData);\n  }\n\n  function isRoverViewportVideo(video) {\n    if (!video || !video.closest || !video.closest('.rover-section')) return false;\n    if (video.closest('[data-rover-watch-film-modal], .rover-watch-film-modal')) return false;\n    return !video.classList || !video.classList.contains('rover-watch-film-modal__video');\n  }\n\n  function getVideoPlaybackTarget(video) {\n    if (!video || !video.closest) return video;\n    return video.closest('[data-rover-split-media], [data-rover-spec-media], [data-rover-panel]') ||\n      video.closest('.rover-split__media, .rover-specs__media, .rover-ai-tabs__media') ||\n      video;\n  }\n\n  function getUsableMediaRect(element) {\n    if (!element || !element.getBoundingClientRect) return { width: 0, height: 0, top: 0, bottom: 0 };\n    var rect = element.getBoundingClientRect();\n    if (rect.width > 1 && rect.height > 1) return rect;\n    if (element.querySelector) {\n      var media = element.querySelector('video, img, picture');\n      if (media && media.getBoundingClientRect) {\n        var mediaRect = media.getBoundingClientRect();\n        if (mediaRect.width > 1 && mediaRect.height > 1) return mediaRect;\n      }\n    }\n    return rect;\n  }\n\n  function isRenderableMedia(element) {\n    if (!element || isHiddenMedia(element)) return false;\n    var node = element;\n    while (node && node.nodeType === 1) {\n      if (node.hidden || node.getAttribute('aria-hidden') === 'true') return false;\n      if (window.getComputedStyle) {\n        var style = window.getComputedStyle(node);\n        if (style.display === 'none' || style.visibility === 'hidden' || style.contentVisibility === 'hidden') return false;\n      }\n      if (node.classList && node.classList.contains('rover-section')) break;\n      node = node.parentElement;\n    }\n    var rect = getUsableMediaRect(element);\n    return rect.width > 1 && rect.height > 1;\n  }\n\n  function isActiveVideoPanel(video) {\n    if (!video || !video.closest) return false;\n\n    var tabPanel = video.closest('[data-rover-panel]');\n    if (tabPanel && (tabPanel.hidden || tabPanel.getAttribute('aria-hidden') === 'true')) return false;\n\n    var specPanel = video.closest('[data-rover-spec-media]');\n    if (specPanel && (specPanel.hidden || !specPanel.classList.contains('is-active'))) return false;\n\n    var splitPanel = video.closest('[data-rover-split-media]');\n    if (splitPanel && (splitPanel.hidden || !splitPanel.classList.contains('is-active'))) return false;\n\n    return true;\n  }\n\n  function isVideoInPlaybackViewport(video) {\n    if (!video) return false;\n    var target = getVideoPlaybackTarget(video);\n    var rect = getUsableMediaRect(target || video);\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n    return rect.top < viewportHeight * 1.05 && rect.bottom > viewportHeight * -0.05;\n  }\n\n  function shouldAutoplayViewportVideo(video) {\n    if (prefersReducedMotion() || isDataSaverEnabled()) return false;\n    if (video.dataset.roverUserPaused === 'true') return false;\n    if (!isRoverViewportVideo(video) || !isActiveVideoPanel(video) || !isRenderableMedia(video)) return false;\n    if (!isVideoInPlaybackViewport(video)) return false;\n    return shouldPlayVideo(video);\n  }\n\n  function getRoverViewportVideos(scope) {\n    var currentScope = scope || document;\n    var videos = [];\n    if (currentScope.matches && currentScope.matches('video')) videos.push(currentScope);\n    if (currentScope.querySelectorAll) {\n      videos = videos.concat(Array.prototype.slice.call(currentScope.querySelectorAll('.rover-section video')));\n    }\n    return videos.filter(isRoverViewportVideo);\n  }\n\n  function syncVisibleVideoPlayback(scope) {\n    getRoverViewportVideos(scope || document).forEach(function (video) {\n      if (shouldAutoplayViewportVideo(video)) {\n        playPreparedVideo(video);\n      } else {\n        pauseVideo(video);\n      }\n    });\n  }\n\n  function scheduleVisibleVideoPlaybackSync(scope) {\n    var targetScope = scope || document;\n    if (window.__roverVisibleVideoSyncFrame) window.cancelAnimationFrame(window.__roverVisibleVideoSyncFrame);\n    window.__roverVisibleVideoSyncFrame = window.requestAnimationFrame(function () {\n      window.__roverVisibleVideoSyncFrame = 0;\n      syncVisibleVideoPlayback(targetScope);\n    });\n  }\n\n  function initVisibleVideoPlayback(scope) {\n    var currentScope = scope || document;\n    var videos = getRoverViewportVideos(currentScope);\n    if (!videos.length) return;\n\n    if (!('IntersectionObserver' in window)) {\n      syncVisibleVideoPlayback(currentScope);\n    } else {\n      if (!window.__roverVisibleVideoObserver) {\n        window.__roverVisibleVideoObserver = new IntersectionObserver(function (entries) {\n          entries.forEach(function (entry) {\n            var video = entry.target;\n            if (entry.isIntersecting && shouldAutoplayViewportVideo(video)) {\n              playPreparedVideo(video);\n            } else {\n              pauseVideo(video);\n            }\n          });\n        }, { rootMargin: '180px 0px 160px 0px', threshold: [0, 0.01, 0.1, 0.35, 0.65] });\n      }\n\n      if (!window.__roverVisibleVideoContainerObserver) {\n        window.__roverVisibleVideoContainerObserver = new IntersectionObserver(function (entries) {\n          entries.forEach(function (entry) {\n            if (entry.isIntersecting) scheduleVisibleVideoPlaybackSync(entry.target);\n          });\n        }, { rootMargin: '180px 0px 160px 0px', threshold: [0, 0.01, 0.1, 0.35] });\n      }\n\n      videos.forEach(function (video) {\n        if (video.dataset.roverVisibleVideoObserved !== 'true') {\n          video.dataset.roverVisibleVideoObserved = 'true';\n          window.__roverVisibleVideoObserver.observe(video);\n        }\n\n        var playbackTarget = getVideoPlaybackTarget(video);\n        if (playbackTarget && playbackTarget.dataset && playbackTarget.dataset.roverVisibleVideoTargetObserved !== 'true') {\n          playbackTarget.dataset.roverVisibleVideoTargetObserved = 'true';\n          window.__roverVisibleVideoContainerObserver.observe(playbackTarget);\n        }\n      });\n    }\n\n    if (window.__roverVisibleVideoEventsBound !== 'true') {\n      window.__roverVisibleVideoEventsBound = 'true';\n      window.addEventListener('resize', function () { scheduleVisibleVideoPlaybackSync(document); }, { passive: true });\n      window.addEventListener('orientationchange', function () { scheduleVisibleVideoPlaybackSync(document); }, { passive: true });\n      document.addEventListener('visibilitychange', function () {\n        if (document.hidden) {\n          getRoverViewportVideos(document).forEach(pauseVideo);\n        } else {\n          scheduleVisibleVideoPlaybackSync(document);\n        }\n      });\n    }\n\n    scheduleVisibleVideoPlaybackSync(currentScope);\n  }\n\n  function isHiddenMedia(element) {\n    return !element || !!element.closest('[hidden], [aria-hidden=\"true\"]');\n  }\n\n  function getPanelById(panels, attr, id) {\n    return panels.find(function (panel) {\n      return panel.getAttribute(attr) === id;\n    });\n  }\n\n  function prewarmVideo(video) {\n    if (!video) return;\n    var isCriticalVideo = video.hasAttribute('data-rover-critical-video') || !!video.closest('[data-rover-perspective]');\n    var preloadMode = isCriticalVideo ? 'auto' : (video.getAttribute('preload') || 'metadata');\n    prepareVideo(video, preloadMode);\n    video.dataset.roverPrewarmed = 'true';\n    if (isCriticalVideo) {\n      addVideoPreloadHint(getVideoSourceUrl(video), 'low');\n      rangePrewarmVideo(video, 196608);\n    }\n  }\n\n\n  function aggressivePreloadRoverVideo(video) {\n    if (!video || video.dataset.roverAggressivePreload === 'true') return;\n    video.dataset.roverAggressivePreload = 'true';\n    prepareVideo(video, 'auto');\n    video.preload = 'auto';\n    addVideoPreloadHint(getVideoSourceUrl(video), 'low');\n    rangePrewarmVideo(video, 1048576);\n    try { video.load(); } catch (error) {}\n  }\n\n  function initRoverAllVideoPreload(scope) {\n    var currentScope = scope || document;\n    if (!currentScope.querySelector || !currentScope.querySelector('.rover-section')) return;\n    if (window.__roverAllVideoPreloadBound === 'true') return;\n    window.__roverAllVideoPreloadBound = 'true';\n\n    /* Rover 2026-09-23: converge prewarming. Previously every video on the page\n       was forced to preload=\"auto\" and fired a 1 MB range request during idle,\n       which put 16 parallel fetches in flight and competed with the first\n       viewport video the user actually reached. Now only sections within ~1.5\n       viewports are prewarmed; the rest keep preload=\"metadata\" until\n       playPreparedVideo() upgrades them on approach. */\n    var run = function () {\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n      document.querySelectorAll('.rover-section video').forEach(function (video) {\n        var section = video.closest('.rover-section');\n        if (!section) return;\n        var rect = section.getBoundingClientRect();\n        if (rect.top > viewportHeight * 1.5) return;\n        if (rect.bottom < viewportHeight * -0.5) return;\n        aggressivePreloadRoverVideo(video);\n      });\n    };\n\n    var schedule = function () {\n      if ('requestIdleCallback' in window) {\n        window.requestIdleCallback(run, { timeout: 1800 });\n      } else {\n        window.setTimeout(run, 600);\n      }\n    };\n\n    /* Re-evaluate on scroll so a section that becomes near-viewport while the\n       visitor scrolls is prewarmed before its video is asked to play; otherwise\n       playback would start from a cold buffer again. aggressivePreloadRoverVideo\n       is idempotent per video, so repeat passes are cheap. */\n    var syncFrame = 0;\n    var scheduleOnScroll = function () {\n      if (syncFrame) return;\n      syncFrame = window.requestAnimationFrame(function () {\n        syncFrame = 0;\n        run();\n      });\n    };\n\n    if (document.readyState === 'complete') {\n      schedule();\n    } else {\n      window.addEventListener('load', schedule, { once: true });\n      window.setTimeout(schedule, 3200);\n    }\n\n    window.addEventListener('scroll', scheduleOnScroll, { passive: true });\n    window.addEventListener('resize', scheduleOnScroll, { passive: true });\n    window.addEventListener('orientationchange', scheduleOnScroll, { passive: true });\n  }\n\n  function prewarmPanelMedia(panel) {\n    if (!panel) return;\n    panel.querySelectorAll('video').forEach(prewarmVideo);\n  }\n\n  function canPlaySectionMedia(root) {\n    if (!root) return false;\n    var rect = root.getBoundingClientRect();\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n    return rect.top < viewportHeight * 1.05 && rect.bottom > viewportHeight * -0.15;\n  }\n\n  function prewarmPrimaryMedia(root) {\n    if (!root) return;\n    root.classList.add('is-rover-media-prewarmed');\n\n    if (root.matches('[data-rover-specs]')) {\n      prewarmPanelMedia(root.querySelector('.rover-specs__media-panel.is-active') || root.querySelector('[data-rover-spec-media]'));\n      return;\n    }\n\n    if (root.matches('[data-rover-tabs]')) {\n      prewarmPanelMedia(root.querySelector('.rover-ai-tabs__media-panel.is-active') || root.querySelector('[data-rover-panel]'));\n      return;\n    }\n\n    if (root.matches('.rover-split')) {\n      root.querySelectorAll('[data-rover-split-row]').forEach(function (row) {\n        prewarmPanelMedia(row.querySelector('.rover-split__media-panel.is-active') || row.querySelector('[data-rover-split-media]'));\n      });\n      return;\n    }\n\n    Array.prototype.slice.call(root.querySelectorAll('video')).some(function (video) {\n      if (isHiddenMedia(video)) return false;\n      prewarmVideo(video);\n      return true;\n    });\n  }\n\n  function markRoverTemplate(scope) {\n    if ((scope || document).querySelector('.rover-section')) {\n      document.documentElement.classList.add('rover-template-active');\n      document.documentElement.classList.add('rover-js-active');\n    }\n  }\n\n  function initHeroLoad(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('.rover-hero')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('.rover-hero')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverHeroLoadBound === 'true') return;\n      root.dataset.roverHeroLoadBound = 'true';\n\n      var compact = window.matchMedia && window.matchMedia('(max-width: 749px)').matches;\n      var selector = compact ? '.rover-hero__mobile-visual' : '.rover-hero__viewport-bg img, .rover-hero__glasses-main, .rover-hero__glasses-float';\n      var images = Array.prototype.slice.call(root.querySelectorAll(selector)).filter(function (image) {\n        return image && image.getAttribute('src');\n      });\n\n      var marked = false;\n      function markReady() {\n        if (marked) return;\n        marked = true;\n        root.classList.remove('is-hero-loading');\n        root.classList.add('is-hero-ready');\n      }\n\n      if (!images.length) {\n        markReady();\n        return;\n      }\n\n      root.classList.add('is-hero-loading');\n      var remaining = images.length;\n\n      function imageDone() {\n        remaining -= 1;\n        if (remaining <= 0) markReady();\n      }\n\n      images.forEach(function (image) {\n        if (image.complete && image.naturalWidth > 0) {\n          if (image.decode) {\n            image.decode().then(imageDone).catch(imageDone);\n          } else {\n            imageDone();\n          }\n          return;\n        }\n\n        image.addEventListener('load', imageDone, { once: true });\n        image.addEventListener('error', imageDone, { once: true });\n      });\n\n      window.setTimeout(markReady, 2200);\n    });\n  }\n\n  function hideElement(element) {\n    if (!element || element.dataset.roverSuppressed === 'true') return;\n    element.dataset.roverSuppressed = 'true';\n    element.setAttribute('aria-hidden', 'true');\n    element.style.setProperty('display', 'none', 'important');\n    if (document.body && document.body.style.overflow === 'hidden') {\n      document.body.style.overflow = '';\n    }\n  }\n\n  function suppressMarketingOverlays(scope) {\n    if (!document.documentElement.classList.contains('rover-template-active')) return;\n\n    var roots = [document.body];\n    if (scope && scope !== document && scope.nodeType === 1) roots.push(scope);\n\n    roots.forEach(function (root) {\n      if (!root || !root.querySelectorAll) return;\n\n      root.querySelectorAll('yg-popup-box.yg-popup-box').forEach(hideElement);\n      root.querySelectorAll('shopify-chat, #shopify-chat, [id^=\"ShopifyChat\"], [class*=\"shopify-chat\"]').forEach(hideElement);\n\n      root.querySelectorAll('div, section, aside, dialog').forEach(function (element) {\n        var text = (element.innerText || element.textContent || '').replace(/\\s+/g, ' ').trim();\n        if (!text) return;\n        if (/New product drop|Limited Early-Bird Offer|Subscribe Now and Stay Tuned/i.test(text)) {\n          hideElement(element.closest('[role=\"dialog\"], [aria-modal=\"true\"], .needsclick, .yg-popup-box, dialog') || element);\n        }\n      });\n    });\n  }\n\n  function initOverlaySuppression(scope) {\n    markRoverTemplate(scope || document);\n    suppressMarketingOverlays(scope || document);\n\n    if (!document.documentElement.classList.contains('rover-template-active') || window.__roverOverlayObserver) return;\n\n    window.__roverOverlayObserver = new MutationObserver(function () {\n      suppressMarketingOverlays(document);\n    });\n    window.__roverOverlayObserver.observe(document.body, { childList: true, subtree: true });\n  }\n\n  function initTabs(scope) {\n    var roots = scope.querySelectorAll('[data-rover-tabs]');\n\n    roots.forEach(function (root) {\n      var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-rover-tab]'));\n      var panels = Array.prototype.slice.call(root.querySelectorAll('[data-rover-panel]'));\n      var copyPanels = Array.prototype.slice.call(root.querySelectorAll('[data-rover-copy-panel]'));\n\n      if (root.dataset.roverTabsBound === 'true') return;\n      root.dataset.roverTabsBound = 'true';\n\n      panels.forEach(function (panel) {\n        panel.querySelectorAll('video').forEach(function (video) {\n          prepareVideo(video, 'metadata');\n        });\n      });\n\n      if ('IntersectionObserver' in window) {\n        var prewarmObserver = new IntersectionObserver(function (entries, observer) {\n          entries.forEach(function (entry) {\n            if (!entry.isIntersecting) return;\n            prewarmPrimaryMedia(root);\n            observer.unobserve(root);\n          });\n        }, { rootMargin: '1200px 0px 900px 0px', threshold: 0.01 });\n        prewarmObserver.observe(root);\n      }\n\n      function activate(id, playActive) {\n        var allowPlayback = playActive !== false && canPlaySectionMedia(root);\n\n        tabs.forEach(function (tab) {\n          var active = tab.getAttribute('data-rover-tab') === id;\n          tab.classList.toggle('is-active', active);\n          tab.setAttribute('aria-selected', active ? 'true' : 'false');\n          tab.setAttribute('tabindex', active ? '0' : '-1');\n        });\n\n        panels.forEach(function (panel) {\n          var active = panel.getAttribute('data-rover-panel') === id;\n          panel.toggleAttribute('hidden', !active);\n          panel.querySelectorAll('video').forEach(function (video) {\n            if (active && allowPlayback) {\n              prepareVideo(video, 'auto');\n              playPreparedVideo(video);\n            } else if (active) {\n              prepareVideo(video, 'metadata');\n            } else {\n              pauseVideo(video);\n            }\n          });\n        });\n\n        copyPanels.forEach(function (panel) {\n          var active = panel.getAttribute('data-rover-copy-panel') === id;\n          panel.toggleAttribute('hidden', !active);\n        });\n\n        scheduleVisibleVideoPlaybackSync(root);\n      }\n\n      tabs.forEach(function (tab, index) {\n        function prewarmTab() {\n          var panel = getPanelById(panels, 'data-rover-panel', tab.getAttribute('data-rover-tab'));\n          prewarmPanelMedia(panel);\n        }\n\n        /* Switch on hover. The old guard required matchMedia('(hover:hover) and\n           (pointer:fine)'), which some hybrid laptops/touch-screens report as false, so the\n           hover switch silently never fired there. Pointer type is the reliable signal:\n           mouse/pen hover switches, touch is ignored (tap still uses the click handler). */\n        tab.addEventListener('pointerenter', function (event) {\n          prewarmTab();\n          var pointerType = event && event.pointerType ? event.pointerType : 'mouse';\n          if (pointerType !== 'touch' && !tab.classList.contains('is-active')) {\n            activate(tab.getAttribute('data-rover-tab'), true);\n          }\n        });\n        tab.addEventListener('focus', prewarmTab);\n\n        tab.addEventListener('click', function () {\n          activate(tab.getAttribute('data-rover-tab'), true);\n        });\n\n        tab.addEventListener('keydown', function (event) {\n          if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft') return;\n          event.preventDefault();\n          var direction = event.key === 'ArrowRight' ? 1 : -1;\n          var next = tabs[(index + direction + tabs.length) % tabs.length];\n          next.focus();\n          activate(next.getAttribute('data-rover-tab'), true);\n        });\n      });\n\n      var activeTab = tabs.find(function (tab) { return tab.classList.contains('is-active'); }) || tabs[0];\n      if (activeTab) activate(activeTab.getAttribute('data-rover-tab'), false);\n      prewarmPrimaryMedia(root);\n    });\n  }\n\n  function initSpecsMedia(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-specs]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-specs]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverSpecsBound === 'true') return;\n      root.dataset.roverSpecsBound = 'true';\n\n      var triggers = Array.prototype.slice.call(root.querySelectorAll('[data-rover-spec-trigger]'));\n      var panels = Array.prototype.slice.call(root.querySelectorAll('[data-rover-spec-media]'));\n      var detailPanels = Array.prototype.slice.call(root.querySelectorAll('[data-rover-spec-detail]'));\n      if (!triggers.length || !panels.length) return;\n\n      panels.forEach(function (panel) {\n        panel.querySelectorAll('img').forEach(function (image) {\n          var src = image.currentSrc || image.getAttribute('src');\n          if (!src || image.dataset.roverSpecPreloaded === 'true') return;\n          image.dataset.roverSpecPreloaded = 'true';\n          var preload = new Image();\n          preload.src = src;\n        });\n        panel.querySelectorAll('video').forEach(function (video) {\n          prepareVideo(video, 'metadata');\n        });\n      });\n\n      function prewarmSpecTrigger(trigger) {\n        var panel = getPanelById(panels, 'data-rover-spec-media', trigger.getAttribute('data-rover-spec-trigger'));\n        prewarmPanelMedia(panel);\n      }\n\n      function activate(id, playActive) {\n        var allowPlayback = playActive !== false && canPlaySectionMedia(root);\n\n        triggers.forEach(function (trigger) {\n          var active = trigger.getAttribute('data-rover-spec-trigger') === id;\n          trigger.classList.toggle('is-active', active);\n          trigger.setAttribute('aria-selected', active ? 'true' : 'false');\n        });\n\n        panels.forEach(function (panel) {\n          var active = panel.getAttribute('data-rover-spec-media') === id;\n          panel.classList.toggle('is-active', active);\n          panel.toggleAttribute('hidden', !active);\n\n          panel.querySelectorAll('video').forEach(function (video) {\n            if (active && allowPlayback) {\n              playPreparedVideo(video);\n            } else if (active) {\n              prepareVideo(video, 'metadata');\n            } else {\n              pauseVideo(video);\n            }\n          });\n        });\n\n        detailPanels.forEach(function (panel) {\n          var active = panel.getAttribute('data-rover-spec-detail') === id;\n          panel.classList.toggle('is-active', active);\n          panel.toggleAttribute('hidden', !active);\n        });\n\n        scheduleVisibleVideoPlaybackSync(root);\n      }\n\n      triggers.forEach(function (trigger, index) {\n        function activateCurrentTrigger() {\n          prewarmSpecTrigger(trigger);\n          activate(trigger.getAttribute('data-rover-spec-trigger'), true);\n        }\n\n        trigger.addEventListener('click', function () {\n          activateCurrentTrigger();\n        });\n\n        trigger.addEventListener('mouseenter', function () {\n          if (window.matchMedia && !window.matchMedia('(hover: hover)').matches) return;\n          activateCurrentTrigger();\n        });\n\n        trigger.addEventListener('focus', function () {\n          activateCurrentTrigger();\n        });\n\n        trigger.addEventListener('keydown', function (event) {\n          if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft') return;\n          event.preventDefault();\n          var direction = event.key === 'ArrowRight' ? 1 : -1;\n          var next = triggers[(index + direction + triggers.length) % triggers.length];\n          next.focus();\n          activate(next.getAttribute('data-rover-spec-trigger'), true);\n        });\n      });\n\n      var activeTrigger = triggers.find(function (trigger) { return trigger.classList.contains('is-active'); }) || triggers[0];\n      if (activeTrigger) activate(activeTrigger.getAttribute('data-rover-spec-trigger'), false);\n      prewarmPrimaryMedia(root);\n    });\n  }\n\n  function initSplitAccordions(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-split-accordion]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-split-accordion]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverSplitAccordionBound === 'true') return;\n      root.dataset.roverSplitAccordionBound = 'true';\n\n      var items = Array.prototype.slice.call(root.querySelectorAll('[data-rover-split-accordion-item]'));\n      var row = root.closest('[data-rover-split-row]');\n      var mediaPanels = row ? Array.prototype.slice.call(row.querySelectorAll('[data-rover-split-media]')) : [];\n      if (!items.length) return;\n\n      mediaPanels.forEach(function (panel) {\n        panel.querySelectorAll('video').forEach(function (video) {\n          prepareVideo(video, 'metadata');\n        });\n      });\n\n      function activateMedia(item, playActive) {\n        if (!mediaPanels.length || !item) return;\n        var id = item.getAttribute('data-rover-split-media-trigger');\n        var allowPlayback = playActive !== false && canPlaySectionMedia(row || root);\n        mediaPanels.forEach(function (panel) {\n          var active = panel.getAttribute('data-rover-split-media') === id;\n          panel.classList.toggle('is-active', active);\n          panel.toggleAttribute('hidden', !active);\n          panel.querySelectorAll('video').forEach(function (video) {\n            if (active && allowPlayback) {\n              playPreparedVideo(video);\n            } else if (active) {\n              prepareVideo(video, 'metadata');\n            } else {\n              pauseVideo(video);\n            }\n          });\n        });\n\n        scheduleVisibleVideoPlaybackSync(row || root);\n      }\n\n      function syncState(playActive) {\n        var openItem = items.find(function (item) { return item.open; }) || items[0];\n        items.forEach(function (item) {\n          var summary = item.querySelector('summary');\n          item.classList.toggle('is-open', item.open);\n          if (summary) summary.setAttribute('aria-expanded', item.open ? 'true' : 'false');\n        });\n        activateMedia(openItem, playActive);\n      }\n\n      items.forEach(function (item) {\n        var summary = item.querySelector('summary');\n\n        if (summary) {\n          summary.addEventListener('pointerenter', function () {\n            var panel = getPanelById(mediaPanels, 'data-rover-split-media', item.getAttribute('data-rover-split-media-trigger'));\n            prewarmPanelMedia(panel);\n          });\n\n          summary.addEventListener('focus', function () {\n            var panel = getPanelById(mediaPanels, 'data-rover-split-media', item.getAttribute('data-rover-split-media-trigger'));\n            prewarmPanelMedia(panel);\n          });\n\n          summary.addEventListener('click', function (event) {\n            if (item.open) {\n              event.preventDefault();\n              syncState(true);\n              return;\n            }\n\n            items.forEach(function (sibling) {\n              if (sibling !== item) sibling.open = false;\n            });\n            window.requestAnimationFrame(function () { syncState(true); });\n          });\n        }\n\n        item.addEventListener('toggle', function () {\n          if (item.open) {\n            items.forEach(function (sibling) {\n              if (sibling !== item) sibling.open = false;\n            });\n          }\n          syncState(true);\n        });\n      });\n\n      var firstOpen = items.find(function (item) { return item.open; });\n      if (!firstOpen) firstOpen = items[0];\n      if (firstOpen) firstOpen.open = true;\n      items.forEach(function (item) { if (item !== firstOpen) item.open = false; });\n      syncState(false);\n      if (row) prewarmPrimaryMedia(row.closest('.rover-split') || row);\n    });\n  }\n\n  function initFaqAccordions(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-faq]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-faq]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverFaqBound === 'true') return;\n      root.dataset.roverFaqBound = 'true';\n\n      var items = Array.prototype.slice.call(root.querySelectorAll('.rover-faq__list details'));\n      if (!items.length) return;\n\n      function syncState() {\n        items.forEach(function (item) {\n          var summary = item.querySelector('summary');\n          item.classList.toggle('is-open', item.open);\n          if (summary) summary.setAttribute('aria-expanded', item.open ? 'true' : 'false');\n        });\n      }\n\n      function setOpen(item, open) {\n        if (!item) return;\n        item.open = open;\n        item.classList.toggle('is-open', open);\n        if (open) item.classList.remove('is-closing');\n        var summary = item.querySelector('summary');\n        if (summary) summary.setAttribute('aria-expanded', open ? 'true' : 'false');\n      }\n\n      function closeItem(item) {\n        if (!item || !item.open) {\n          setOpen(item, false);\n          return;\n        }\n        item.classList.add('is-closing');\n        var answer = item.querySelector('.rover-faq__answer');\n        var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n        var finished = false;\n\n        /* Commit the native <details> close only when the 0fr row transition has really\n           ended. The old fixed 360ms timer lost the race on slower frames, so the content\n           was hidden mid-animation and the collapse visibly stuttered. */\n        function finishClose() {\n          if (finished) return;\n          finished = true;\n          if (answer) answer.removeEventListener('transitionend', onTransitionEnd);\n          if (!item.classList.contains('is-closing')) return;\n          setOpen(item, false);\n          item.classList.remove('is-closing');\n        }\n\n        function onTransitionEnd(event) {\n          if (event.target !== answer) return;\n          if (event.propertyName !== 'grid-template-rows') return;\n          finishClose();\n        }\n\n        if (answer && !reduced) {\n          answer.addEventListener('transitionend', onTransitionEnd);\n          window.setTimeout(finishClose, 900);\n        } else {\n          finishClose();\n        }\n      }\n\n      function toggleItem(item) {\n        var shouldOpen = !item.open;\n        items.forEach(function (sibling) {\n          if (sibling !== item) closeItem(sibling);\n        });\n        if (shouldOpen) setOpen(item, true);\n        else closeItem(item);\n      }\n\n      items.forEach(function (item) {\n        var summary = item.querySelector('summary');\n        if (summary) {\n          summary.addEventListener('click', function (event) {\n            event.preventDefault();\n            toggleItem(item);\n          });\n        }\n\n        item.addEventListener('toggle', syncState);\n      });\n\n      syncState();\n    });\n  }\n\n  function initDisclosureScrollAnchors(scope) {\n    var currentScope = scope || document;\n    var controls = [];\n    var selector = [\n      '.rover-purchase-drawer summary',\n      '.rover-purchase-drawer .custom-accordion-summary',\n      '.rover-purchase-drawer [aria-expanded][aria-controls]'\n    ].join(', ');\n\n    function stabilizeControl(control, beforeTop) {\n      var start = window.performance && window.performance.now ? window.performance.now() : Date.now();\n      var duration = 380;\n      var cancelled = false;\n      var lastAppliedAt = 0;\n\n      function cancel() {\n        cancelled = true;\n      }\n\n      window.addEventListener('wheel', cancel, { passive: true, once: true });\n      window.addEventListener('touchmove', cancel, { passive: true, once: true });\n      window.addEventListener('keydown', cancel, { passive: true, once: true });\n\n      function cleanup() {\n        window.removeEventListener('wheel', cancel);\n        window.removeEventListener('touchmove', cancel);\n        window.removeEventListener('keydown', cancel);\n      }\n\n      function frame(now) {\n        if (cancelled || !document.documentElement.contains(control)) {\n          cleanup();\n          return;\n        }\n\n        var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n        var afterTop = control.getBoundingClientRect().top;\n        var delta = afterTop - beforeTop;\n        /* Tall disclosures (compare is ~800px, AI split rows are ~500px) move the control\n           much further than the old 0.75-viewport guard allowed, so the compensation was\n           skipped and the page appeared to jump to another module. Keep a generous guard\n           for runaway layout shifts only. */\n        if (Math.abs(delta) > 1 && Math.abs(delta) < viewportHeight * 3) {\n          window.scrollBy({ top: delta, left: 0, behavior: 'auto' });\n          lastAppliedAt = now;\n        }\n\n        if (now - start < duration || now - lastAppliedAt < 80) {\n          window.requestAnimationFrame(frame);\n        } else {\n          cleanup();\n        }\n      }\n\n      window.requestAnimationFrame(function () {\n        window.requestAnimationFrame(frame);\n      });\n    }\n\n    if (currentScope.matches && currentScope.matches(selector)) controls.push(currentScope);\n    controls = controls.concat(Array.prototype.slice.call(currentScope.querySelectorAll(selector)));\n\n    controls.forEach(function (control) {\n      if (control.dataset.roverScrollAnchorBound === 'true') return;\n      control.dataset.roverScrollAnchorBound = 'true';\n\n      control.addEventListener('click', function () {\n        var beforeTop = control.getBoundingClientRect().top;\n        stabilizeControl(control, beforeTop);\n      });\n    });\n  }\n\n  function initCompareTables(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-compare]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-compare]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverCompareBound === 'true') return;\n      root.dataset.roverCompareBound = 'true';\n\n      var toggle = root.querySelector('[data-rover-compare-toggle]');\n      if (!toggle) return;\n      var shell = root.querySelector('.rover-compare__table-shell');\n      var table = root.querySelector('.rover-compare__table');\n      var resizeObserver = null;\n\n      function getNumber(value, fallback) {\n        var parsed = parseFloat(value);\n        return Number.isFinite(parsed) ? parsed : fallback;\n      }\n\n      function updateCompareMetrics() {\n        if (!shell || !table) return;\n        var style = window.getComputedStyle(shell);\n        var expandedPadding = getNumber(style.getPropertyValue('--rover-compare-expanded-pad'), 104);\n        var expandedHeight = Math.ceil(table.getBoundingClientRect().height + expandedPadding);\n        root.style.setProperty('--rover-compare-expanded-height', expandedHeight + 'px');\n      }\n\n      function setExpanded(expanded) {\n        updateCompareMetrics();\n        root.classList.toggle('is-expanded', expanded);\n        toggle.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n      }\n\n      toggle.addEventListener('click', function () {\n        setExpanded(!root.classList.contains('is-expanded'));\n      });\n\n      updateCompareMetrics();\n      window.addEventListener('resize', updateCompareMetrics, { passive: true });\n\n      if ('ResizeObserver' in window && table) {\n        resizeObserver = new ResizeObserver(updateCompareMetrics);\n        resizeObserver.observe(table);\n      }\n\n      setExpanded(root.dataset.startExpanded === 'true');\n    });\n  }\n\n  function initScrollers(scope) {\n    var tracks = scope.querySelectorAll('[data-rover-scroll-track]');\n\n    tracks.forEach(function (track) {\n      var root = track.closest('.rover-section__inner') || track.parentElement;\n      if (!root) return;\n\n      var prev = root.querySelector('[data-rover-scroll-prev]');\n      var next = root.querySelector('[data-rover-scroll-next]');\n      var firstCard = track.children[0];\n      var step = firstCard ? firstCard.getBoundingClientRect().width + 12 : 312;\n\n      if (prev) {\n        prev.addEventListener('click', function () {\n          track.scrollBy({ left: -step, behavior: 'smooth' });\n        });\n      }\n\n      if (next) {\n        next.addEventListener('click', function () {\n          track.scrollBy({ left: step, behavior: 'smooth' });\n        });\n      }\n    });\n  }\n\n  function initDeferredMediaPreload(scope) {\n    var roots = [];\n    var currentScope = scope || document;\n\n    var selector = '.rover-audio, .rover-feature-card--5, .rover-specs, [data-rover-tabs], .rover-split, [data-rover-perspective]';\n    if (currentScope.matches && currentScope.matches(selector)) roots.push(currentScope);\n    roots = roots.concat(Array.prototype.slice.call(currentScope.querySelectorAll(selector)));\n    if (!roots.length) return;\n\n    function preloadImage(image) {\n      if (!image || image.dataset.roverDeferredPreload === 'true') return;\n      var src = image.currentSrc || image.getAttribute('src');\n      if (!src) return;\n\n      image.dataset.roverDeferredPreload = 'true';\n      var rect = image.getBoundingClientRect();\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n      var isNearViewport = rect.top < viewportHeight * 1.25 && rect.bottom > -200;\n      image.loading = isNearViewport ? 'eager' : 'lazy';\n      image.decoding = 'async';\n      image.setAttribute('fetchpriority', isNearViewport ? 'low' : 'auto');\n\n      if (image.complete && image.naturalWidth > 0) {\n        image.classList.add('is-rover-media-ready');\n        return;\n      }\n\n      image.addEventListener('load', function () {\n        image.classList.add('is-rover-media-ready');\n        if (image.decode) image.decode().catch(function () {});\n      }, { once: true });\n      image.addEventListener('error', function () {\n        image.classList.add('is-rover-media-error');\n      }, { once: true });\n    }\n\n    function preloadRoot(root) {\n      if (!root) return;\n      root.querySelectorAll('img').forEach(preloadImage);\n      prewarmPrimaryMedia(root);\n    }\n\n    if (!('IntersectionObserver' in window)) {\n      roots.forEach(preloadRoot);\n      return;\n    }\n\n    if (!window.__roverDeferredMediaObserver) {\n      window.__roverDeferredMediaObserver = new IntersectionObserver(function (entries, observer) {\n        entries.forEach(function (entry) {\n          if (!entry.isIntersecting) return;\n          preloadRoot(entry.target);\n          observer.unobserve(entry.target);\n        });\n      }, { rootMargin: '520px 0px 520px 0px', threshold: 0.01 });\n    }\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverDeferredMediaBound === 'true') return;\n      root.dataset.roverDeferredMediaBound = 'true';\n      window.__roverDeferredMediaObserver.observe(root);\n    });\n  }\n\n  function initPurchaseDrawer(scope) {\n    var triggers = Array.prototype.slice.call(document.querySelectorAll('[data-rover-purchase-trigger]'));\n    var drawers = Array.prototype.slice.call((scope || document).querySelectorAll('[data-rover-purchase-drawer]'));\n    var activeDrawer = document.querySelector('[data-rover-purchase-drawer].is-open');\n    var lastTrigger = null;\n\n    function prewarmDrawerMedia(drawer) {\n      if (!drawer || drawer.dataset.roverPurchaseMediaPrewarmed === 'true') return;\n      drawer.dataset.roverPurchaseMediaPrewarmed = 'true';\n\n      Array.prototype.slice.call(drawer.querySelectorAll('img')).forEach(function (image, index) {\n        var src = image.currentSrc || image.getAttribute('src');\n        if (!src) return;\n\n        image.loading = 'eager';\n        image.decoding = 'async';\n        image.setAttribute('fetchpriority', index < 8 ? 'high' : 'low');\n\n        var probe = new Image();\n        var srcset = image.getAttribute('srcset');\n        var sizes = image.getAttribute('sizes');\n        probe.decoding = 'async';\n        if (sizes) probe.sizes = sizes;\n        if (srcset) probe.srcset = srcset;\n        probe.src = src;\n      });\n\n      drawer.querySelectorAll('video').forEach(prewarmVideo);\n    }\n\n    function findDrawer(trigger) {\n      var targetId = trigger.getAttribute('aria-controls');\n      if (targetId) {\n        var targeted = document.getElementById(targetId);\n        if (targeted && targeted.matches('[data-rover-purchase-drawer]')) return targeted;\n      }\n      return document.querySelector('[data-rover-purchase-drawer]');\n    }\n\n    function openDrawer(drawer, trigger) {\n      if (!drawer) return;\n      if (drawer.hasAttribute('data-rover-purchase-design-mode')) return;\n      activeDrawer = drawer;\n      lastTrigger = trigger || document.activeElement;\n      drawer.hidden = false;\n      drawer.setAttribute('aria-hidden', 'false');\n      prewarmDrawerMedia(drawer);\n      document.documentElement.classList.add('rover-purchase-drawer-open');\n      window.requestAnimationFrame(function () {\n        drawer.classList.add('is-open');\n        var close = drawer.querySelector('.rover-purchase-drawer__close');\n        if (close && close.focus) close.focus({ preventScroll: true });\n      });\n    }\n\n    function closeDrawer(drawer) {\n      if (!drawer) return;\n      if (drawer.hasAttribute('data-rover-purchase-design-mode')) return;\n      drawer.classList.remove('is-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      document.documentElement.classList.remove('rover-purchase-drawer-open');\n      window.setTimeout(function () {\n        if (!drawer.classList.contains('is-open')) drawer.hidden = true;\n      }, prefersReducedMotion() ? 0 : 420);\n      if (lastTrigger && lastTrigger.focus) lastTrigger.focus({ preventScroll: true });\n      if (activeDrawer === drawer) activeDrawer = null;\n    }\n\n    triggers.forEach(function (trigger) {\n      if (trigger.dataset.roverPurchaseTriggerBound === 'true') return;\n      trigger.dataset.roverPurchaseTriggerBound = 'true';\n      trigger.addEventListener('click', function (event) {\n        var drawer = findDrawer(trigger);\n        if (!drawer) return;\n        if (drawer.querySelector('[data-rover-purchase-restricted=\"true\"], .is-market-restricted')) {\n          event.preventDefault();\n          return;\n        }\n        event.preventDefault();\n        openDrawer(drawer, trigger);\n      });\n    });\n\n    drawers.forEach(function (drawer) {\n      if (drawer.dataset.roverPurchaseDrawerBound === 'true') return;\n      drawer.dataset.roverPurchaseDrawerBound = 'true';\n      drawer.querySelectorAll('[data-rover-purchase-close]').forEach(function (close) {\n        close.addEventListener('click', function () {\n          closeDrawer(drawer);\n        });\n      });\n    });\n\n    if (window.__roverPurchaseDrawerKeyBound !== 'true') {\n      window.__roverPurchaseDrawerKeyBound = 'true';\n      document.addEventListener('keydown', function (event) {\n        if (event.key === 'Escape') closeDrawer(activeDrawer || document.querySelector('[data-rover-purchase-drawer].is-open'));\n      });\n    }\n  }\n\n  function initWatchFilm(scope) {\n    var triggers = Array.prototype.slice.call(document.querySelectorAll('[data-rover-watch-film]'));\n    if (!triggers.length) return;\n    var modal = document.querySelector('[data-rover-watch-film-modal]');\n    var activeWatchFilmTrigger = null;\n\n    function getModalVideo() {\n      return modal ? modal.querySelector('video') : null;\n    }\n\n    function setModalOpen(open, trigger) {\n      if (!modal) return false;\n      var video = getModalVideo();\n      if (open) {\n        activeWatchFilmTrigger = trigger || document.activeElement;\n        modal.hidden = false;\n        modal.setAttribute('aria-hidden', 'false');\n        document.documentElement.classList.add('rover-watch-film-open');\n        if (video) {\n          normalizeVideoElementSources(video);\n          video.controls = true;\n          video.setAttribute('controls', 'controls');\n          video.muted = false;\n          video.defaultMuted = false;\n          video.removeAttribute('muted');\n          video.playsInline = true;\n          video.setAttribute('playsinline', '');\n          video.setAttribute('webkit-playsinline', '');\n          video.preload = 'auto';\n          try { video.load(); } catch (error) {}\n          try {\n            var playRequest = video.play();\n            if (playRequest && playRequest.catch) playRequest.catch(function () {});\n          } catch (error) {}\n        }\n        window.requestAnimationFrame(function () { modal.classList.add('is-open'); });\n        var closeButton = modal.querySelector('.rover-watch-film-modal__close');\n        if (closeButton) closeButton.focus({ preventScroll: true });\n        return true;\n      }\n\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.documentElement.classList.remove('rover-watch-film-open');\n      if (video) {\n        video.pause();\n        try { video.currentTime = 0; } catch (error) {}\n      }\n      window.setTimeout(function () {\n        if (!modal.classList.contains('is-open')) modal.hidden = true;\n      }, prefersReducedMotion() ? 0 : 240);\n      if (activeWatchFilmTrigger && activeWatchFilmTrigger.focus) activeWatchFilmTrigger.focus({ preventScroll: true });\n      activeWatchFilmTrigger = null;\n      return true;\n    }\n\n    if (modal && modal.dataset.roverWatchFilmModalBound !== 'true') {\n      modal.dataset.roverWatchFilmModalBound = 'true';\n      modal.addEventListener('click', function (event) {\n        var closeTarget = event.target && event.target.closest ? event.target.closest('[data-rover-watch-film-close]') : null;\n        var backdrop = event.target && event.target.closest ? event.target.closest('.rover-watch-film-modal__backdrop') : null;\n        if (closeTarget || backdrop || event.target === modal) setModalOpen(false);\n      });\n\n      var modalVideo = getModalVideo();\n      if (modalVideo) {\n        normalizeVideoElementSources(modalVideo);\n        modalVideo.preload = 'metadata';\n      }\n    }\n\n    if (window.__roverWatchFilmKeyBound !== 'true') {\n      window.__roverWatchFilmKeyBound = 'true';\n      document.addEventListener('keydown', function (event) {\n        if (event.key !== 'Escape') return;\n        var openModal = document.querySelector('[data-rover-watch-film-modal].is-open');\n        if (openModal) setModalOpen(false);\n      });\n    }\n\n    function findPerspective() {\n      return document.querySelector('[data-rover-perspective]') || document.getElementById('rover-perspective');\n    }\n\n    triggers.forEach(function (trigger) {\n      if (trigger.dataset.roverWatchFilmBound === 'true') return;\n      trigger.dataset.roverWatchFilmBound = 'true';\n\n      trigger.addEventListener('click', function (event) {\n        if (modal) {\n          event.preventDefault();\n          setModalOpen(true, trigger);\n          return;\n        }\n\n        var target = findPerspective();\n        if (!target) return;\n        event.preventDefault();\n\n        var offset = 0;\n        var header = document.querySelector('header, [data-sticky-header], .shopify-section-group-header-group');\n        if (header) {\n          var styles = window.getComputedStyle(header);\n          var rect = header.getBoundingClientRect();\n          if ((styles.position === 'fixed' || styles.position === 'sticky') && rect.bottom > 0) offset = Math.min(rect.bottom, (window.innerHeight || 1) * 0.24);\n        }\n\n        var rectTop = target.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || 0);\n        window.scrollTo({ top: Math.max(0, rectTop - offset), behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n\n        window.setTimeout(function () {\n          target.dispatchEvent(new CustomEvent('rover:perspective:watch', { bubbles: true }));\n        }, prefersReducedMotion() ? 0 : 420);\n      });\n    });\n  }\n\n  function initRoverBundleSelectors(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-bundle-selector]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-bundle-selector]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverBundleSelectorBound === 'true') return;\n      root.dataset.roverBundleSelectorBound = 'true';\n\n      var cards = Array.prototype.slice.call(root.querySelectorAll('[data-rover-bundle-card]'));\n      var addButton = root.querySelector('[data-rover-bundle-add]');\n      var cardAddButtons = Array.prototype.slice.call(root.querySelectorAll('[data-rover-bundle-card-add]'));\n      var message = root.querySelector('[data-rover-bundle-message]');\n      var selectedCard = cards.find(function (card) { return card.classList.contains('is-selected'); }) || cards[0];\n      var isMarketRestricted = root.getAttribute('data-rover-purchase-restricted') === 'true';\n      var marketRestrictedMessage = root.getAttribute('data-rover-restricted-message') || 'This product is not available for purchase in your region.';\n\n      function getCurrentMainVariantId() {\n        var formId = root.getAttribute('data-rover-product-form-id');\n        var selectors = [];\n        if (formId) {\n          var escapedFormId = escapeSelector(formId);\n          selectors.push('input[name=\"id\"][form=\"' + escapedFormId + '\"]');\n          selectors.push('form#' + escapedFormId + ' input[name=\"id\"]');\n          selectors.push('#' + escapedFormId + ' input[name=\"id\"]');\n        }\n        selectors.push('product-rerender input[name=\"id\"]');\n        selectors.push('input[name=\"id\"]');\n\n        for (var index = 0; index < selectors.length; index += 1) {\n          var input = root.closest('product-rerender, .rover-purchase-drawer, body')?.querySelector(selectors[index]) || document.querySelector(selectors[index]);\n          if (input && input.value) return String(input.value);\n        }\n\n        return '';\n      }\n\n      function getCardItems(card) {\n        if (!card) return [];\n        var script = card.querySelector('[data-rover-bundle-items]');\n        if (!script) return [];\n\n        try {\n          var parsed = JSON.parse(script.textContent || '[]');\n          var variantSelects = Array.prototype.slice.call(card.querySelectorAll('[data-rover-bundle-variant-select]'));\n          var selectedVariantsByRole = {};\n\n          variantSelects.forEach(function (select) {\n            if ((select.type === 'radio' || select.type === 'checkbox') && !select.checked) return;\n            var role = select.getAttribute('data-rover-bundle-variant-role');\n            if (role && select.value) selectedVariantsByRole[role] = select.value;\n          });\n\n          var bundleVariant = getSelectedBundleVariant(card, selectedVariantsByRole);\n          if (bundleVariant && bundleVariant.id) selectedVariantsByRole.bundle = bundleVariant.id;\n\n          var mainVariantId = getCurrentMainVariantId();\n          var mainProductId = String(root.getAttribute('data-rover-main-product-id') || '');\n\n          return parsed.filter(function (item) {\n            return item && item.id && Number(item.quantity || 1) > 0;\n          }).map(function (item) {\n            var role = item.role ? String(item.role) : '';\n            if (role && selectedVariantsByRole[role]) item.id = selectedVariantsByRole[role];\n            var itemProductId = item.productId ? String(item.productId) : '';\n            if (role === 'bundle' && item.source !== 'explicit' && mainVariantId && itemProductId && itemProductId === mainProductId) item.id = mainVariantId;\n            return item;\n          }).map(function (item) {\n            return {\n              id: String(item.id),\n              quantity: Number(item.quantity || 1),\n              properties: {\n                _rover_package: card.getAttribute('data-rover-bundle-title') || 'Rover package'\n              }\n            };\n          });\n        } catch (error) {\n          return [];\n        }\n      }\n\n      function getBundleVariantMap(card) {\n        var mapScript = card ? card.querySelector('[data-rover-bundle-variant-map]') : null;\n        if (!mapScript) return [];\n\n        try {\n          var variants = JSON.parse(mapScript.textContent || '[]');\n          if (!Array.isArray(variants)) return [];\n          var locallySoldOutVariantIds = card && card._roverBundleSoldOutVariantIds ? card._roverBundleSoldOutVariantIds : {};\n          variants.forEach(function (variant) {\n            if (variant && locallySoldOutVariantIds[String(variant.id)]) variant.available = false;\n          });\n          return variants;\n        } catch (error) {\n          return [];\n        }\n      }\n\n      function getSelectedVariantControls(card) {\n        var controls = Array.prototype.slice.call(card ? card.querySelectorAll('[data-rover-bundle-variant-select]') : []);\n        var selected = {};\n\n        controls.forEach(function (control) {\n          if ((control.type === 'radio' || control.type === 'checkbox') && !control.checked) return;\n          var role = control.getAttribute('data-rover-bundle-variant-role');\n          if (role) selected[role] = control;\n        });\n\n        return selected;\n      }\n\n      function getSelectedBundleVariant(card, selectedVariantsByRole) {\n        var variants = getBundleVariantMap(card);\n        if (!variants.length) return null;\n\n        var selected = selectedVariantsByRole || {};\n        var optionValues = [];\n\n        Object.keys(selected).forEach(function (role) {\n          var match = role.match(/^bundle_option_(\\d+)$/);\n          if (!match) return;\n          optionValues[Number(match[1]) - 1] = selected[role];\n        });\n\n        if (!optionValues.length) return variants.find(function (variant) { return variant && variant.available; }) || variants[0] || null;\n\n        var exactAvailable = variants.find(function (variant) {\n          if (!variant || !variant.available || !Array.isArray(variant.options)) return false;\n          return optionValues.every(function (value, index) { return !value || variant.options[index] === value; });\n        });\n\n        if (exactAvailable) return exactAvailable;\n\n        return variants.find(function (variant) {\n          if (!variant || !Array.isArray(variant.options)) return false;\n          return optionValues.every(function (value, index) { return !value || variant.options[index] === value; });\n        }) || variants[0] || null;\n      }\n\n      function setMessage(text, state) {\n        if (!message) return;\n        message.textContent = text || '';\n        message.dataset.state = state || '';\n      }\n\n      function setBundleButtonState(button, disabled, soldOut) {\n        if (!button) return;\n        var label = button.querySelector('[data-rover-bundle-button-label]') || button.querySelector('span');\n        if (label && !button.dataset.roverBundleDefaultLabel) {\n          button.dataset.roverBundleDefaultLabel = label.textContent.trim();\n        }\n        if (label) {\n          label.textContent = soldOut ? 'Sold out' : (button.dataset.roverBundleDefaultLabel || label.textContent);\n        }\n        button.disabled = Boolean(disabled);\n        if (button.disabled) button.setAttribute('aria-disabled', 'true');\n        else button.removeAttribute('aria-disabled');\n        button.classList.toggle('is-sold-out', Boolean(soldOut));\n      }\n\n      function getSelectedBundleVariantState(card) {\n        var selectedControls = getSelectedVariantControls(card);\n        var selectedValuesByRole = {};\n        Object.keys(selectedControls).forEach(function (role) { selectedValuesByRole[role] = selectedControls[role].value; });\n        return {\n          selectedControls: selectedControls,\n          selectedValuesByRole: selectedValuesByRole,\n          selectedBundleVariant: getSelectedBundleVariant(card, selectedValuesByRole),\n          hasBundleVariantMap: getBundleVariantMap(card).length > 0\n        };\n      }\n\n      function updateCardPreviewImage(card, selectedControls, selectedBundleVariant) {\n        if (!card) return;\n        var media = card.querySelector('.rover-bundle-card__media');\n        var image = media ? media.querySelector('img') : null;\n        var selected = selectedControls || getSelectedVariantControls(card);\n        var styleControl = Object.keys(selected).map(function (role) { return selected[role]; }).find(function (control) {\n          return control && control.getAttribute('data-rover-bundle-preview-src');\n        }) || null;\n\n        if (!media) return;\n\n        /* The Style close-up is injected on the Style radio and is the only image whose\n           ZEISS mark stays readable in the 82px card box, so it wins here. The full\n           bundle shot is still applied to the main gallery by updateMainGalleryImage. */\n        var styleSrc = styleControl ? styleControl.getAttribute('data-rover-bundle-preview-src') || '' : '';\n        var previewSrc = styleSrc || (selectedBundleVariant && selectedBundleVariant.previewSrc ? selectedBundleVariant.previewSrc : '');\n        var previewSrcset = styleSrc\n          ? (styleControl.getAttribute('data-rover-bundle-preview-srcset') || '')\n          : (selectedBundleVariant && selectedBundleVariant.previewSrcset ? selectedBundleVariant.previewSrcset : '');\n        var previewAlt = styleSrc\n          ? (styleControl.getAttribute('data-rover-bundle-preview-alt') || styleControl.value || '')\n          : (selectedBundleVariant && selectedBundleVariant.previewAlt ? selectedBundleVariant.previewAlt : '');\n\n        if (!previewSrc) return;\n\n        if (!image) {\n          image = document.createElement('img');\n          image.loading = 'eager';\n          image.decoding = 'async';\n          image.setAttribute('fetchpriority', 'high');\n          media.textContent = '';\n          media.appendChild(image);\n        }\n\n        if (previewSrcset) image.setAttribute('srcset', previewSrcset);\n        else image.removeAttribute('srcset');\n        image.setAttribute('sizes', '(max-width: 749px) 96px, 128px');\n        image.alt = previewAlt;\n        if (image.getAttribute('src') !== previewSrc) image.setAttribute('src', previewSrc);\n      }\n\n      function updateCardComposition(card) {\n        if (!card) return [];\n        var items = getCardItems(card);\n        var composition = card.querySelector('[data-rover-bundle-composition]');\n        var variantSelects = card.querySelectorAll('[data-rover-bundle-variant-select]');\n        var priceNode = card.querySelector('[data-rover-bundle-price]');\n        var savingsNode = card.querySelector('[data-rover-bundle-savings]');\n        var cardAddButton = card.querySelector('[data-rover-bundle-card-add]');\n        var selectedBundleVariantState = getSelectedBundleVariantState(card);\n        var selectedControls = selectedBundleVariantState.selectedControls;\n        var selectedValuesByRole = selectedBundleVariantState.selectedValuesByRole;\n        var selectedBundleVariant = selectedBundleVariantState.selectedBundleVariant;\n        var isSoldOut = selectedBundleVariantState.hasBundleVariantMap && selectedBundleVariant && selectedBundleVariant.available === false;\n        updateCardPreviewImage(card, selectedControls, selectedBundleVariant);\n        var bundleVariantSelect = selectedControls.bundle || null;\n        if (bundleVariantSelect && selectedBundleVariant && selectedBundleVariant.id) {\n          var selectedBundleVariantId = String(selectedBundleVariant.id);\n          if (String(bundleVariantSelect.value) !== selectedBundleVariantId) bundleVariantSelect.value = selectedBundleVariantId;\n        }\n        if (selectedBundleVariant && selectedBundleVariant.id) {\n          card.setAttribute('data-rover-bundle-selected-variant-id', String(selectedBundleVariant.id));\n          card.setAttribute('data-rover-bundle-selected-sku', selectedBundleVariant.sku ? String(selectedBundleVariant.sku) : '');\n        } else {\n          card.removeAttribute('data-rover-bundle-selected-variant-id');\n          card.removeAttribute('data-rover-bundle-selected-sku');\n        }\n        card.setAttribute('data-rover-bundle-item-count', String(items.length));\n        card.setAttribute('data-rover-bundle-sold-out', isSoldOut ? 'true' : 'false');\n        card.classList.toggle('is-sold-out', Boolean(isSoldOut));\n        setBundleButtonState(cardAddButton, isMarketRestricted || !items.length || isSoldOut, Boolean(isSoldOut) && !isMarketRestricted);\n\n        var priceSourceSelect = bundleVariantSelect || selectedControls.included_1 || Object.keys(selectedControls).map(function (role) { return selectedControls[role]; })[0];\n        if (priceNode && selectedBundleVariant && selectedBundleVariant.priceNote) {\n          priceNode.textContent = selectedBundleVariant.priceNote;\n        } else if (priceNode && priceSourceSelect) {\n          var selectedOption = priceSourceSelect.options && priceSourceSelect.selectedIndex >= 0 ? priceSourceSelect.options[priceSourceSelect.selectedIndex] : null;\n          var priceNote = selectedOption ? selectedOption.getAttribute('data-price-note') : priceSourceSelect.getAttribute('data-price-note');\n          if (priceNote) priceNode.textContent = priceNote;\n        }\n\n        if (savingsNode) {\n          var savingsTemplate = card.getAttribute('data-rover-bundle-savings-template') || 'Save {amount} vs buying separately';\n          var savingsText = selectedBundleVariant && selectedBundleVariant.savingsNote\n            ? savingsTemplate.replace('{amount}', selectedBundleVariant.savingsNote)\n            : '';\n          savingsNode.textContent = savingsText;\n          savingsNode.hidden = !savingsText;\n        }\n\n        if (composition) {\n          if (!items.length) {\n            composition.textContent = 'Assign products in Shopify admin';\n          } else if (bundleVariantSelect || selectedBundleVariant) {\n            composition.textContent = selectedBundleVariant && selectedBundleVariant.composition\n              ? selectedBundleVariant.composition\n              : 'Includes Power Plus + Bluetooth Controller';\n          } else if (variantSelects.length && items.length === 1) {\n            composition.textContent = 'Adds 1 bundle SKU \u00B7 selectable variant';\n          } else if (variantSelects.length) {\n            composition.textContent = 'Includes ' + items.length + (items.length === 1 ? ' item' : ' items') + ' \u00B7 editable options';\n          } else {\n            composition.textContent = 'Includes ' + items.length + (items.length === 1 ? ' item' : ' items');\n          }\n        }\n\n        return items;\n      }\n\n      function markCardSoldOut(card) {\n        var state = getSelectedBundleVariantState(card);\n        if (!state.selectedBundleVariant || !state.selectedBundleVariant.id) return false;\n        if (!card._roverBundleSoldOutVariantIds) card._roverBundleSoldOutVariantIds = {};\n        card._roverBundleSoldOutVariantIds[String(state.selectedBundleVariant.id)] = true;\n        updateCardComposition(card);\n        if (selectedCard === card && addButton) {\n          var selectedItems = getCardItems(card);\n          setBundleButtonState(addButton, true, selectedItems.length > 0 && !isMarketRestricted);\n        }\n        return true;\n      }\n\n      function addItemsForCard(card, button) {\n        if (isMarketRestricted) {\n          setMessage(marketRestrictedMessage, 'error');\n          return;\n        }\n\n        var selectedBundleVariantState = getSelectedBundleVariantState(card);\n        var selectedBundleVariant = selectedBundleVariantState.selectedBundleVariant;\n        var isSoldOut = selectedBundleVariantState.hasBundleVariantMap && selectedBundleVariant && selectedBundleVariant.available === false;\n        var items = getCardItems(card);\n        if (isSoldOut) {\n          markCardSoldOut(card);\n          setMessage('Sold out', 'error');\n          return;\n        }\n        if (!items.length || (button && button.disabled)) {\n          setMessage('Select a package after Rover SKUs are assigned.', 'error');\n          return;\n        }\n\n        if (button) button.disabled = true;\n        if (addButton) addButton.disabled = true;\n        cardAddButtons.forEach(function (candidateButton) { candidateButton.disabled = true; });\n        root.classList.add('is-adding');\n        setMessage('Adding package...', 'pending');\n\n        var addUrl = (window.Shopify && window.Shopify.routes ? window.Shopify.routes.root : '/') + 'cart/add.js';\n        var addPayload = { items: items };\n        if (document.getElementById('cart-drawer') || document.querySelector('cart-drawer')) {\n          addPayload.sections = ['cart-drawer'];\n          addPayload.sections_url = window.location.pathname;\n        }\n\n        fetch(addUrl, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            'Accept': 'application/json'\n          },\n          body: JSON.stringify(addPayload)\n        }).then(function (response) {\n          if (!response.ok) {\n            return response.json().catch(function () { return {}; }).then(function (payload) {\n              var error = new Error('Bundle add failed');\n              error.status = response.status;\n              error.payload = payload;\n              throw error;\n            });\n          }\n          return response.json();\n        }).then(function (payload) {\n          setMessage('Package added to cart.', 'success');\n          document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', { bubbles: true }));\n          document.dispatchEvent(new CustomEvent('cart:refresh', { bubbles: true }));\n          if (window.roverOpenCartDrawer) {\n            window.roverOpenCartDrawer({ sections: payload && payload.sections });\n          }\n        }).catch(function (error) {\n          var errorText = error && error.payload ? JSON.stringify(error.payload).toLowerCase() : '';\n          var inventoryError = Boolean(error && (error.status === 409 || error.status === 422)) || /inventory|stock|sold out|not enough|unavailable/.test(errorText);\n          if (inventoryError && markCardSoldOut(card)) {\n            setMessage('Sold out', 'error');\n          } else {\n            setMessage('This package is not available yet.', 'error');\n          }\n        }).finally(function () {\n          root.classList.remove('is-adding');\n          cards.forEach(updateCardComposition);\n          var selectedItems = selectedCard ? updateCardComposition(selectedCard) : [];\n          var selectedCardSoldOut = selectedCard && selectedCard.getAttribute('data-rover-bundle-sold-out') === 'true';\n          if (addButton) setBundleButtonState(addButton, isMarketRestricted || !selectedItems.length || selectedCardSoldOut, Boolean(selectedCardSoldOut) && !isMarketRestricted);\n        });\n      }\n\n      /* Rover bundle preview -> main product gallery.\n         The gallery lazy-loads non-preload slides through yg-image, where the real\n         URL lives in data-src and src is a 1px GIF. Writing only src is a no-op there,\n         so both attributes are written. The original values are stashed once so a later\n         selection (or no selection) can restore the real product photo instead of\n         leaving a bundle photo permanently burned into the slide. */\n      function getActiveGalleryMedia(gallery) {\n        var mediaCarousel = gallery.querySelector('media-carousel');\n        if (!mediaCarousel) return null;\n\n        var mediaItems = Array.prototype.slice.call(gallery.querySelectorAll('.product-gallery__media'));\n        var visible = mediaItems.filter(function (item) { return !item.hidden; });\n        if (!visible.length) return null;\n\n        // aria-current on the thumbnail list is kept in sync by the gallery filter.\n        var thumbs = Array.prototype.slice.call(gallery.querySelectorAll('.product-gallery__thumbnail'));\n        for (var i = 0; i < thumbs.length; i++) {\n          if (thumbs[i].getAttribute('aria-current') === 'true') {\n            var byIndex = visible[i];\n            if (byIndex) return byIndex;\n          }\n        }\n\n        // Otherwise fall back to whichever visible slide the carousel is scrolled to.\n        var scrollLeft = mediaCarousel.scrollLeft || 0;\n        var best = visible[0];\n        var bestDistance = Infinity;\n        visible.forEach(function (item) {\n          var distance = Math.abs(item.offsetLeft - scrollLeft);\n          if (distance < bestDistance) {\n            bestDistance = distance;\n            best = item;\n          }\n        });\n        return best;\n      }\n\n      function setGallerySlideImage(media, src, srcset, alt) {\n        if (!media || !src) return;\n        // Desktop and mobile <img> pairs both exist inside a yg-image wrapper.\n        Array.prototype.slice.call(media.querySelectorAll('img')).forEach(function (img) {\n          if (!img.dataset.roverBundleOriginalSrc) {\n            img.dataset.roverBundleOriginalSrc = img.getAttribute('src') || '';\n            img.dataset.roverBundleOriginalSrcset = img.getAttribute('srcset') || '';\n            img.dataset.roverBundleOriginalDataSrc = img.getAttribute('data-src') || '';\n            img.dataset.roverBundleOriginalAlt = img.getAttribute('alt') || '';\n          }\n\n          img.setAttribute('src', src);\n          img.setAttribute('data-src', src);\n          if (srcset) {\n            img.setAttribute('srcset', srcset);\n          } else {\n            img.removeAttribute('srcset');\n          }\n          // Stop the lazy loader from restoring the placeholder over our src.\n          img.setAttribute('data-rover-bundle-locked', 'true');\n          img.setAttribute('alt', alt || '');\n        });\n      }\n\n      function restoreGallerySlideImage(media) {\n        if (!media) return;\n        Array.prototype.slice.call(media.querySelectorAll('img')).forEach(function (img) {\n          if (!img.dataset.roverBundleOriginalSrc) return;\n          var originalSrc = img.dataset.roverBundleOriginalSrc;\n          var originalDataSrc = img.dataset.roverBundleOriginalDataSrc;\n\n          if (originalDataSrc) {\n            img.setAttribute('src', originalSrc);\n            img.setAttribute('data-src', originalDataSrc);\n          } else {\n            img.removeAttribute('data-src');\n            img.setAttribute('src', originalSrc);\n          }\n\n          if (img.dataset.roverBundleOriginalSrcset) {\n            img.setAttribute('srcset', img.dataset.roverBundleOriginalSrcset);\n          } else {\n            img.removeAttribute('srcset');\n          }\n          img.setAttribute('alt', img.dataset.roverBundleOriginalAlt || '');\n\n          delete img.dataset.roverBundleOriginalSrc;\n          delete img.dataset.roverBundleOriginalSrcset;\n          delete img.dataset.roverBundleOriginalDataSrc;\n          delete img.dataset.roverBundleOriginalAlt;\n          delete img.dataset.roverBundleLocked;\n        });\n      }\n\n      function updateMainGalleryImage(card) {\n        var gallery = document.querySelector('.product-gallery');\n        if (!gallery) return;\n\n        var state = card ? getSelectedBundleVariantState(card) : null;\n        var variant = state && state.selectedBundleVariant;\n        var media = getActiveGalleryMedia(gallery);\n        if (!media) return;\n\n        if (variant && variant.previewSrc) {\n          setGallerySlideImage(media, variant.previewSrc, variant.previewSrcset, variant.previewAlt || variant.title || '');\n        } else {\n          restoreGallerySlideImage(media);\n        }\n      }\n\n      function select(card) {\n        selectedCard = card || null;\n        cards.forEach(function (candidate) {\n          var active = candidate === selectedCard;\n          candidate.classList.toggle('is-selected', active);\n          candidate.setAttribute('aria-checked', active ? 'true' : 'false');\n          updateCardComposition(candidate);\n        });\n\n        var selectedItems = updateCardComposition(selectedCard);\n        updateMainGalleryImage(selectedCard);\n        var selectedCardSoldOut = selectedCard && selectedCard.getAttribute('data-rover-bundle-sold-out') === 'true';\n        if (addButton) setBundleButtonState(addButton, isMarketRestricted || !selectedItems.length || selectedCardSoldOut, Boolean(selectedCardSoldOut) && !isMarketRestricted);\n        if (isMarketRestricted) {\n          setMessage(marketRestrictedMessage, 'error');\n        } else if (!selectedItems.length) {\n          setMessage('This package is ready to configure in Shopify admin. Assign SKU products before testing checkout.', 'pending');\n        } else {\n          setMessage('', '');\n        }\n      }\n\n      cards.forEach(function (card) {\n        card.addEventListener('click', function (event) {\n          if (event.target && event.target.closest && event.target.closest('select, option, label, input, textarea')) return;\n          select(card);\n        });\n\n        card.addEventListener('keydown', function (event) {\n          if (event.key !== 'Enter' && event.key !== ' ') return;\n          event.preventDefault();\n          select(card);\n        });\n\n        card.querySelectorAll('[data-rover-bundle-variant-select]').forEach(function (variantSelect) {\n          variantSelect.addEventListener('change', function () {\n            select(card);\n          });\n        });\n\n        card.querySelectorAll('[data-rover-bundle-card-add]').forEach(function (cardAddButton) {\n          cardAddButton.addEventListener('click', function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n            select(card);\n            addItemsForCard(card, cardAddButton);\n          });\n        });\n      });\n\n      if (addButton) {\n        addButton.addEventListener('click', function () {\n          addItemsForCard(selectedCard, addButton);\n        });\n      }\n\n      select(selectedCard);\n    });\n  }\n\n  function initVideoStageScroll(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-vct]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-vct]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverVctBound === 'true') return;\n      root.dataset.roverVctBound = 'true';\n\n      var video = root.querySelector('video');\n      prepareVideo(video, 'auto');\n\n      var compactVct = window.matchMedia && window.matchMedia('(max-width: 749px)').matches;\n\n      if (compactVct) {\n        root.style.setProperty('--rover-vct-progress', '1');\n        root.style.setProperty('--rover-vct-scale', '1');\n        root.style.setProperty('--rover-vct-y', '0vh');\n        root.style.setProperty('--rover-vct-caption-opacity', '1');\n        root.classList.add('is-vct-expanded');\n\n        if (video && !prefersReducedMotion()) {\n          if ('IntersectionObserver' in window) {\n            var compactObserver = new IntersectionObserver(function (entries) {\n              entries.forEach(function (entry) {\n                if (entry.isIntersecting) {\n                  root.classList.add('is-vct-playing');\n                  playPreparedVideo(video);\n                } else {\n                  root.classList.remove('is-vct-playing');\n                  pauseVideo(video);\n                }\n              });\n            }, { threshold: 0.35 });\n            compactObserver.observe(root);\n          } else {\n            root.classList.add('is-vct-playing');\n            playPreparedVideo(video);\n          }\n        }\n        return;\n      }\n\n      if (!root.classList.contains('rover-video-stage--scroll') || prefersReducedMotion()) {\n        root.style.setProperty('--rover-vct-progress', '1');\n        root.style.setProperty('--rover-vct-scale', '1');\n        if (video && !prefersReducedMotion()) playPreparedVideo(video);\n        return;\n      }\n\n      var frameRequested = false;\n\n      function update() {\n        frameRequested = false;\n        var rect = root.getBoundingClientRect();\n        var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n        var travel = Math.max(1, rect.height - viewportHeight);\n        var progress = clamp((0 - rect.top) / travel, 0, 1);\n        var eased = progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;\n        var scale = 0.61 + eased * 0.39;\n        var y = (1 - eased) * 8;\n        var captionOpacity = clamp(1 - progress * 1.8, 0, 1);\n\n        root.style.setProperty('--rover-vct-progress', progress.toFixed(4));\n        root.style.setProperty('--rover-vct-scale', scale.toFixed(4));\n        root.style.setProperty('--rover-vct-y', y.toFixed(3) + 'vh');\n        root.style.setProperty('--rover-vct-caption-opacity', captionOpacity.toFixed(4));\n        root.classList.toggle('is-vct-expanded', progress > 0.86);\n        root.classList.toggle('is-vct-playing', progress > 0.72 && rect.bottom > viewportHeight * 0.2 && rect.top < viewportHeight * 0.8);\n\n        if (video) {\n          if (root.classList.contains('is-vct-playing')) {\n            playPreparedVideo(video);\n          } else if (progress < 0.18 || rect.bottom <= 0 || rect.top >= viewportHeight) {\n            pauseVideo(video);\n          }\n        }\n      }\n\n      function requestUpdate() {\n        if (frameRequested) return;\n        frameRequested = true;\n        window.requestAnimationFrame(update);\n      }\n\n      update();\n      window.addEventListener('scroll', requestUpdate, { passive: true });\n      window.addEventListener('resize', requestUpdate, { passive: true });\n    });\n  }\n\n  function initStaticPerspective(root, video) {\n    if (!root) return;\n    root.dataset.roverPerspectiveMode = 'static-expanded';\n\n    var frameRequested = false;\n\n    function setPx(name, value) {\n      root.style.setProperty(name, value.toFixed(3) + 'px');\n    }\n\n    function isCompactViewport() {\n      return window.matchMedia && window.matchMedia('(max-width: 749px)').matches;\n    }\n\n    function updateStaticLayout() {\n      frameRequested = false;\n      var compact = isCompactViewport();\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n      var viewportWidth = getLayoutViewportWidth();\n      var canvas = root.querySelector('.rover-figma-canvas');\n      var canvasRect = canvas ? canvas.getBoundingClientRect() : root.getBoundingClientRect();\n      var canvasWidth = canvasRect && canvasRect.width ? canvasRect.width : viewportWidth;\n      var viewportCenterWithinCanvas = getViewportCenterWithin(canvasRect, viewportWidth);\n      var mediaWidthLimit = compact ? 430 : 1440;\n      var mediaInsetX = compact ? 24 : 72;\n      var mediaInsetY = compact ? 96 : 56;\n      var maxByViewportWidth = Math.max(1, viewportWidth - mediaInsetX);\n      var maxByCanvasWidth = Math.max(1, canvasWidth - mediaInsetX);\n      var maxByViewportHeight = Math.max(1, viewportHeight - mediaInsetY) * 16 / 9;\n      var videoWidth = Math.min(mediaWidthLimit, maxByViewportWidth, maxByCanvasWidth, maxByViewportHeight);\n\n      var videoHeight = videoWidth * 9 / 16;\n      var verticalPad = compact ? clamp(viewportHeight * 0.07, 42, 72) : clamp(viewportHeight * 0.12, 96, 160);\n      var sectionHeight = Math.ceil(videoHeight + verticalPad);\n      var windowLeft = viewportCenterWithinCanvas - (videoWidth / 2);\n      var windowTop = (sectionHeight - videoHeight) / 2;\n\n      root.classList.add('is-vct-static-expanded');\n      root.classList.add('is-vct-expanded');\n      root.classList.toggle('is-mobile-vct-expanded', compact);\n      root.classList.remove('is-mobile-vct-parked');\n      root.style.setProperty('--rover-statement-progress', '1');\n      root.style.setProperty('--rover-statement-copy-opacity', '0');\n      root.style.setProperty('--rover-statement-sticky-top', '0px');\n      root.style.setProperty('--rover-statement-static-transform', 'none');\n      root.style.setProperty('--rover-statement-static-section-height', sectionHeight.toFixed(3) + 'px');\n      root.style.setProperty('--rover-statement-mobile-track-height', sectionHeight.toFixed(3) + 'px');\n      setPx('--rover-statement-sticky-height', sectionHeight);\n      setPx('--rover-statement-window-left', windowLeft);\n      setPx('--rover-statement-window-top', windowTop);\n      setPx('--rover-statement-window-width', videoWidth);\n      setPx('--rover-statement-window-height', videoHeight);\n      root.style.setProperty('--rover-statement-window-radius', '0px');\n      setPx('--rover-statement-copy-center', windowTop + (videoHeight / 2));\n    }\n\n    function requestStaticLayout() {\n      if (frameRequested) return;\n      frameRequested = true;\n      window.requestAnimationFrame(updateStaticLayout);\n    }\n\n    function setStaticPlaying(playing) {\n      root.classList.toggle('is-vct-playing', playing);\n      if (!video) return;\n      if (playing) playPreparedVideo(video);\n      else pauseVideo(video);\n    }\n\n    updateStaticLayout();\n    window.addEventListener('resize', requestStaticLayout, { passive: true });\n\n    root.addEventListener('rover:perspective:watch', function () {\n      updateStaticLayout();\n      var top = root.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || 0);\n      window.scrollTo({ top: Math.max(0, top), behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n      setStaticPlaying(!prefersReducedMotion());\n    });\n\n    if (video && !prefersReducedMotion()) {\n      if ('IntersectionObserver' in window) {\n        var observer = new IntersectionObserver(function (entries) {\n          entries.forEach(function (entry) {\n            setStaticPlaying(entry.isIntersecting && entry.intersectionRatio > 0.12);\n          });\n        }, { rootMargin: '180px 0px 180px 0px', threshold: [0, 0.12, 0.4] });\n        observer.observe(root);\n      } else {\n        setStaticPlaying(true);\n      }\n    }\n  }\n\n  function initPerspectiveScroll(scope) {\n    var roots = [];\n    if (scope.matches && scope.matches('[data-rover-perspective]')) roots.push(scope);\n    roots = roots.concat(Array.prototype.slice.call(scope.querySelectorAll('[data-rover-perspective]')));\n\n    roots.forEach(function (root) {\n      if (root.dataset.roverPerspectiveBound === 'true') return;\n      root.dataset.roverPerspectiveBound = 'true';\n\n      var video = root.querySelector('video');\n      prepareVideo(video, 'auto');\n      prewarmVideo(video);\n\n      if (forceStaticPerspective) {\n        initStaticPerspective(root, video);\n        return;\n      }\n\n      var copyParts = Array.prototype.slice.call(root.querySelectorAll('.rover-statement__title > span:not(.rover-statement__window)'));\n      var firstCopy = copyParts[0];\n      var lastCopy = copyParts[copyParts.length - 1];\n      var frameRequested = false;\n      var lastScrollY = window.pageYOffset || document.documentElement.scrollTop || 0;\n      var lastScrollDirection = 1;\n      var mobilePhase = 'before';\n      var mobileParkUntil = 0;\n      var mobileParkScrollTop = 0;\n      var mobileHasExpanded = false;\n      var mobileParkedAt = 0;\n      var touchStartPhase = 'before';\n      var lastScrollDelta = 0;\n      var mobileWheelCanExpand = false;\n      var mobileWheelQuietTimer = null;\n      var mobileParkLockUntil = 0;\n\n      function interpolate(start, end, progress) {\n        return start + ((end - start) * progress);\n      }\n\n      function smoothstep(value) {\n        value = clamp(value, 0, 1);\n        return value * value * (3 - (2 * value));\n      }\n\n      function setValue(name, value) {\n        root.style.setProperty(name, value.toFixed(3) + 'px');\n      }\n\n      function armMobileWheelExpansion(delay) {\n        if (mobileWheelQuietTimer) window.clearTimeout(mobileWheelQuietTimer);\n        mobileWheelQuietTimer = window.setTimeout(function () {\n          if (mobilePhase === 'parked' && !mobileHasExpanded && Date.now() >= mobileParkUntil) mobileWheelCanExpand = true;\n        }, delay || 440);\n      }\n\n      function getScrollY() {\n        return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n      }\n\n      function isCompactViewport() {\n        return window.matchMedia && window.matchMedia('(max-width: 749px)').matches;\n      }\n\n      function getStickyHeaderOffset() {\n        var candidates = Array.prototype.slice.call(document.querySelectorAll('header, [data-sticky-header], .shopify-section-group-header-group'));\n        var offset = 0;\n\n        candidates.forEach(function (element) {\n          var styles = window.getComputedStyle(element);\n          var rect = element.getBoundingClientRect();\n          if ((styles.position === 'fixed' || styles.position === 'sticky') && rect.top <= 1 && rect.bottom > 0) {\n            offset = Math.max(offset, rect.bottom);\n          }\n        });\n\n        return Math.min(offset, (window.innerHeight || 1) * 0.24);\n      }\n\n      function getPerspectiveMetrics() {\n        var compact = isCompactViewport();\n        var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n        var viewportWidth = getLayoutViewportWidth();\n        var canvas = root.querySelector('.rover-figma-canvas');\n        var canvasRect = canvas ? canvas.getBoundingClientRect() : root.getBoundingClientRect();\n        var canvasWidth = canvasRect && canvasRect.width ? canvasRect.width : viewportWidth;\n        var viewportCenterWithinCanvas = getViewportCenterWithin(canvasRect, viewportWidth);\n        var stickyHeaderOffset = getStickyHeaderOffset();\n        var availableHeight = Math.max(1, viewportHeight - stickyHeaderOffset);\n        var rect = root.getBoundingClientRect();\n        var designScale = compact ? clamp(canvasWidth / 375, 0.82, 1.18) : clamp(canvasWidth / 1920, 0.39, 1);\n        var compactHeight = compact ? clamp(210.9375 * designScale, 184, Math.min(availableHeight * 0.46, 230)) : availableHeight;\n        var compactTop = stickyHeaderOffset + Math.max(0, (availableHeight - compactHeight) / 2);\n        var compactCollapsedTrack = compactHeight;\n        var compactExpandedTrack = Math.max(availableHeight * 1.28, 620);\n        var travelHeight = compact ? compactExpandedTrack : root.offsetHeight;\n        var travel = Math.max(1, travelHeight - availableHeight);\n        var rawProgress = clamp((0 - rect.top) / travel, 0, 1);\n\n        return {\n          compact: compact,\n          viewportHeight: viewportHeight,\n          viewportWidth: viewportWidth,\n          canvasWidth: canvasWidth,\n          canvasRect: canvasRect,\n          viewportCenterWithinCanvas: viewportCenterWithinCanvas,\n          stickyHeaderOffset: stickyHeaderOffset,\n          availableHeight: availableHeight,\n          compactHeight: compactHeight,\n          compactTop: compactTop,\n          compactCollapsedTrack: compactCollapsedTrack,\n          compactExpandedTrack: compactExpandedTrack,\n          rect: rect,\n          travel: travel,\n          rawProgress: rawProgress\n        };\n      }\n\n      function parkMobilePerspective(metrics) {\n        if (mobilePhase !== 'before' || mobileHasExpanded) return;\n        var sectionTop = metrics.rect.top + getScrollY();\n        mobilePhase = 'parked';\n        mobileParkUntil = Date.now() + 380;\n        mobileParkedAt = Date.now();\n        mobileParkLockUntil = Date.now() + 760;\n        mobileWheelCanExpand = false;\n        mobileParkScrollTop = Math.max(0, sectionTop - metrics.compactTop);\n        root.classList.add('is-mobile-vct-parked');\n        root.classList.remove('is-mobile-vct-expanded');\n        root.style.setProperty('--rover-statement-mobile-track-height', metrics.compactCollapsedTrack.toFixed(3) + 'px');\n        window.scrollTo({ top: mobileParkScrollTop, behavior: 'auto' });\n        armMobileWheelExpansion(440);\n      }\n\n      function releaseMobilePerspective() {\n        if (mobileHasExpanded) return;\n        mobilePhase = 'before';\n        mobileWheelCanExpand = false;\n        mobileParkLockUntil = 0;\n        root.classList.remove('is-mobile-vct-parked');\n        var metrics = getPerspectiveMetrics();\n        root.style.setProperty('--rover-statement-mobile-track-height', metrics.compactCollapsedTrack.toFixed(3) + 'px');\n      }\n\n      function expandMobilePerspective(metrics) {\n        mobilePhase = 'expanded';\n        mobileHasExpanded = true;\n        mobileWheelCanExpand = false;\n        mobileParkLockUntil = 0;\n        root.classList.remove('is-mobile-vct-parked');\n        root.classList.add('is-mobile-vct-expanded');\n        root.classList.add('is-vct-playing');\n        root.style.setProperty('--rover-statement-mobile-track-height', metrics.compactExpandedTrack.toFixed(3) + 'px');\n        if (video) playPreparedVideo(video);\n      }\n\n      function updateMobilePhase(metrics) {\n        if (!metrics.compact || prefersReducedMotion()) {\n          mobilePhase = 'before';\n          return;\n        }\n\n        if (mobileHasExpanded) {\n          mobilePhase = 'expanded';\n          root.classList.remove('is-mobile-vct-parked');\n          root.classList.add('is-mobile-vct-expanded');\n          return;\n        }\n\n        var currentScroll = getScrollY();\n        var sectionTop = metrics.rect.top + currentScroll;\n        var parkScrollTop = Math.max(0, sectionTop - metrics.compactTop);\n        var previousScroll = currentScroll - lastScrollDelta;\n        var parkLead = Math.max(56, Math.min(92, metrics.compactHeight * 0.42));\n        var crossedByFastScroll = lastScrollDirection > 0 && previousScroll < parkScrollTop - parkLead && currentScroll >= parkScrollTop - parkLead;\n        var crossedParkPoint = currentScroll >= parkScrollTop - parkLead && currentScroll <= sectionTop + Math.max(metrics.viewportHeight * 2.35, metrics.compactCollapsedTrack + 760);\n\n        if (mobilePhase === 'before' && lastScrollDirection > 0 && (crossedByFastScroll || crossedParkPoint) && metrics.rect.top < metrics.viewportHeight * 1.5) {\n          parkMobilePerspective(metrics);\n          return;\n        }\n\n        if (mobilePhase === 'parked' && !mobileHasExpanded && mobileParkScrollTop) {\n          if (metrics.rect.bottom <= 0 || metrics.rect.top > metrics.viewportHeight * 1.1) {\n            mobilePhase = 'before';\n            mobileParkLockUntil = 0;\n            root.classList.remove('is-mobile-vct-parked');\n            return;\n          }\n\n          if (Math.abs(currentScroll - mobileParkScrollTop) > 2) {\n            window.scrollTo({ top: mobileParkScrollTop, behavior: 'auto' });\n          }\n          return;\n        }\n\n        if (metrics.rect.bottom <= 0 || metrics.rect.top > metrics.viewportHeight * 1.1) {\n          mobilePhase = 'before';\n          mobileParkLockUntil = 0;\n          root.classList.remove('is-mobile-vct-parked');\n          return;\n        }\n      }\n\n      function update() {\n        frameRequested = false;\n        var metrics = getPerspectiveMetrics();\n        var compact = metrics.compact;\n        var reduced = prefersReducedMotion();\n        var viewportHeight = metrics.viewportHeight;\n        var canvasWidth = metrics.canvasWidth;\n        var stickyHeaderOffset = metrics.stickyHeaderOffset;\n        var availableHeight = metrics.availableHeight;\n        var rect = metrics.rect;\n        updateMobilePhase(metrics);\n        var designScale = compact ? clamp(canvasWidth / 375, 0.82, 1.18) : clamp(canvasWidth / 1920, 0.39, 1);\n        var designOffset = compact ? 0 : (canvasWidth - (1920 * designScale)) / 2;\n        var progress;\n        var visualHeight = availableHeight;\n\n        if (compact) {\n          var mobileExpandedHeight = Math.min(canvasWidth * 9 / 16, Math.max(metrics.compactHeight, availableHeight - 112));\n          progress = mobilePhase === 'expanded' ? 1 : 0;\n          visualHeight = interpolate(metrics.compactHeight, mobileExpandedHeight, smoothstep(progress));\n          root.style.setProperty('--rover-statement-mobile-track-height', (mobilePhase === 'expanded' ? metrics.compactExpandedTrack : metrics.compactCollapsedTrack).toFixed(3) + 'px');\n        } else {\n          var rawProgress = metrics.rawProgress;\n          var completionPoint = 0.58;\n          progress = reduced ? 0 : clamp(rawProgress / completionPoint, 0, 1);\n        }\n\n        var inlineLimit = compact ? 0.16 : 0.24;\n        var inlineProgress = clamp(progress / inlineLimit, 0, 1);\n        var fullscreenProgress = clamp((progress - inlineLimit) / (1 - inlineLimit), 0, 1);\n        var easedFullscreen = smoothstep(fullscreenProgress);\n        var fadeStart = compact ? 0.58 : 0.8;\n        var copyOpacity = fullscreenProgress < fadeStart ? 1 : 1 - ((fullscreenProgress - fadeStart) / (1 - fadeStart));\n        if (compact) copyOpacity = 0;\n        if (progress >= 0.985) copyOpacity = 0;\n\n        var startWidth = compact ? clamp(canvasWidth * 0.48, 154, 210) : 56.5 * designScale;\n        var startHeight = compact ? startWidth * 9 / 16 : 31.5 * designScale;\n        var startLeft = compact ? (canvasWidth - startWidth) / 2 : 778 * designScale + designOffset;\n        var startTop = compact ? (visualHeight - startHeight) / 2 : (visualHeight - (63 * designScale)) / 2;\n        var inlineLeft = compact ? startLeft : interpolate(778, 686.75, inlineProgress) * designScale + designOffset;\n        var inlineTop = compact ? startTop : (availableHeight - (63 * designScale)) / 2;\n        var inlineWidth = compact ? startWidth : interpolate(113, 169.5, inlineProgress) * designScale;\n        var inlineHeight = compact ? startHeight : interpolate(63, 94.5, inlineProgress) * designScale;\n        var safeX = compact ? clamp(canvasWidth * 0.04, 12, 20) : clamp(canvasWidth * 0.025, 28, 48);\n        var safeY = compact ? clamp(availableHeight * 0.07, 22, 48) : clamp(availableHeight * 0.08, 56, 92);\n        var maxVideoWidth = Math.min(Math.max(1, canvasWidth - (safeX * 2)), Math.max(1, availableHeight - (safeY * 2)) * 16 / 9);\n        if (!compact) maxVideoWidth = Math.min(maxVideoWidth, 1440);\n        var maxVideoHeight = maxVideoWidth * 9 / 16;\n        var fullLeft = (metrics.viewportCenterWithinCanvas || canvasWidth / 2) - (maxVideoWidth / 2);\n        var fullTop = compact ? 0 : (availableHeight - maxVideoHeight) / 2;\n        var windowLeft = interpolate(inlineLeft, fullLeft, easedFullscreen);\n        var windowTop = interpolate(inlineTop, fullTop, easedFullscreen);\n        var windowWidth = interpolate(inlineWidth, maxVideoWidth, easedFullscreen);\n        var windowHeight = interpolate(inlineHeight, maxVideoHeight, easedFullscreen);\n        var fontSize = compact ? clamp(interpolate(32, 38, inlineProgress) * designScale, 28, 40) : clamp(interpolate(64, 96, inlineProgress) * designScale, 26, 96);\n        var gap = compact ? clamp(interpolate(16, 30, easedFullscreen) * designScale, 14, 34) : clamp(interpolate(10, 22, inlineProgress) * designScale, 10, 24);\n\n        root.style.setProperty('--rover-statement-progress', progress.toFixed(4));\n        root.style.setProperty('--rover-statement-copy-opacity', copyOpacity.toFixed(4));\n        setValue('--rover-statement-font-size', fontSize);\n        setValue('--rover-statement-gap', gap);\n        setValue('--rover-statement-window-left', windowLeft);\n        setValue('--rover-statement-window-top', windowTop);\n        setValue('--rover-statement-window-width', windowWidth);\n        setValue('--rover-statement-window-height', windowHeight);\n        setValue('--rover-statement-window-radius', interpolate(4.373 * designScale, 0, easedFullscreen));\n        setValue('--rover-statement-copy-center', windowTop + (windowHeight / 2));\n\n        if (compact) {\n          setValue('--rover-statement-mobile-first-center', windowTop - gap - (fontSize * 0.46));\n          setValue('--rover-statement-mobile-last-center', windowTop + windowHeight + gap + (fontSize * 0.46));\n          setValue('--rover-statement-sticky-top', stickyHeaderOffset + Math.max(0, (availableHeight - visualHeight) / 2));\n          setValue('--rover-statement-sticky-height', visualHeight);\n        } else {\n          var firstWidth = firstCopy ? firstCopy.getBoundingClientRect().width : 0;\n          var lastWidth = lastCopy ? lastCopy.getBoundingClientRect().width : 0;\n          var minCopyInset = Math.max(24, canvasWidth * 0.025);\n          var firstLeft = windowLeft - gap - firstWidth;\n          var lastLeft = windowLeft + windowWidth + gap;\n          var copyOverflow = Math.max(minCopyInset - firstLeft, (lastLeft + lastWidth) - (canvasWidth - minCopyInset), 0);\n          var edgeFadeDistance = clamp(canvasWidth * 0.055, 72, 120);\n          copyOpacity = Math.min(copyOpacity, clamp(1 - (copyOverflow / edgeFadeDistance), 0, 1));\n          root.style.setProperty('--rover-statement-copy-opacity', copyOpacity.toFixed(4));\n          setValue('--rover-statement-first-left', firstLeft);\n          setValue('--rover-statement-last-left', lastLeft);\n        }\n\n        if (!compact) {\n          setValue('--rover-statement-sticky-top', stickyHeaderOffset);\n          setValue('--rover-statement-sticky-height', visualHeight);\n        }\n\n        root.classList.toggle('is-vct-expanded', compact ? progress > 0.96 : progress > 0.86);\n        root.classList.toggle('is-vct-playing', rect.bottom > 0 && rect.top < viewportHeight && !reduced && (compact ? progress > 0.02 : progress > 0.12));\n\n        if (video) {\n          if (root.classList.contains('is-vct-playing')) {\n            playPreparedVideo(video);\n          } else if (progress < 0.05 || rect.bottom <= 0 || rect.top >= viewportHeight) {\n            pauseVideo(video);\n          }\n        }\n      }\n\n      function requestUpdate() {\n        var scrollY = getScrollY();\n        lastScrollDelta = scrollY - lastScrollY;\n        lastScrollDirection = scrollY >= lastScrollY ? 1 : -1;\n        lastScrollY = scrollY;\n        if (frameRequested) return;\n        frameRequested = true;\n        window.requestAnimationFrame(update);\n      }\n\n      var touchStartY = null;\n\n      function handleMobileWheel(event) {\n        if (!isCompactViewport() || prefersReducedMotion() || mobileHasExpanded) return;\n        var metrics = getPerspectiveMetrics();\n\n        if (mobilePhase === 'parked') {\n          if (event.deltaY < -12) {\n            if (event.cancelable) event.preventDefault();\n            releaseMobilePerspective();\n            requestUpdate();\n            return;\n          }\n\n          if (event.deltaY <= 12) return;\n\n          if (event.cancelable) event.preventDefault();\n          if (mobileParkScrollTop) window.scrollTo({ top: mobileParkScrollTop, behavior: 'auto' });\n\n          if (Date.now() < mobileParkUntil || Date.now() - mobileParkedAt < 180) {\n            armMobileWheelExpansion(240);\n            return;\n          }\n\n          if (!mobileWheelCanExpand) {\n            armMobileWheelExpansion(220);\n            return;\n          }\n\n          expandMobilePerspective(metrics);\n          requestUpdate();\n          return;\n        }\n\n        if (event.deltaY <= 12) return;\n\n        if (mobilePhase === 'before' && metrics.rect.top <= metrics.compactTop + 92 && metrics.rect.bottom > metrics.viewportHeight * 0.24) {\n          if (event.cancelable) event.preventDefault();\n          parkMobilePerspective(metrics);\n          requestUpdate();\n          return;\n        }\n      }\n\n      function handleTouchStart(event) {\n        if (!isCompactViewport() || !event.touches || !event.touches.length) return;\n        touchStartY = event.touches[0].clientY;\n        touchStartPhase = mobilePhase;\n      }\n\n      function handleTouchMove(event) {\n        if (!isCompactViewport() || touchStartY === null || mobileHasExpanded) return;\n        if (!event.touches || !event.touches.length) return;\n        var deltaY = event.touches[0].clientY - touchStartY;\n\n        if (mobilePhase === 'before' && deltaY < -10) {\n          var beforeMetrics = getPerspectiveMetrics();\n          if (beforeMetrics.rect.top <= beforeMetrics.compactTop + 92 && beforeMetrics.rect.bottom > beforeMetrics.viewportHeight * 0.24) {\n            if (event.cancelable) event.preventDefault();\n            parkMobilePerspective(beforeMetrics);\n            requestUpdate();\n            return;\n          }\n        }\n\n        if (mobilePhase !== 'parked') return;\n\n        if (touchStartPhase === 'parked' && deltaY > 16) {\n          releaseMobilePerspective();\n          requestUpdate();\n          return;\n        }\n\n        if (event.cancelable) event.preventDefault();\n        if (mobileParkScrollTop) window.scrollTo({ top: mobileParkScrollTop, behavior: 'auto' });\n        if (touchStartPhase !== 'parked') return;\n\n        if (deltaY < -24 && Date.now() >= mobileParkUntil && Date.now() - mobileParkedAt >= 160) {\n          expandMobilePerspective(getPerspectiveMetrics());\n          requestUpdate();\n        }\n      }\n\n      function handleTouchEnd(event) {\n        if (!isCompactViewport() || touchStartY === null || !event.changedTouches || !event.changedTouches.length) return;\n        touchStartY = null;\n        touchStartPhase = mobilePhase;\n        requestUpdate();\n      }\n\n      root.addEventListener('rover:perspective:watch', function () {\n        var metrics = getPerspectiveMetrics();\n        if (metrics.compact) {\n          var sectionTop = metrics.rect.top + getScrollY();\n          mobilePhase = 'parked';\n          mobileWheelCanExpand = false;\n          mobileParkScrollTop = Math.max(0, sectionTop - metrics.compactTop);\n          root.classList.add('is-mobile-vct-parked');\n          root.style.setProperty('--rover-statement-mobile-track-height', metrics.compactCollapsedTrack.toFixed(3) + 'px');\n          window.scrollTo({ top: mobileParkScrollTop, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n          window.setTimeout(function () {\n            expandMobilePerspective(getPerspectiveMetrics());\n            requestUpdate();\n          }, prefersReducedMotion() ? 0 : 280);\n        } else {\n          var sectionTop = metrics.rect.top + getScrollY();\n          var target = sectionTop + Math.max(0, (root.offsetHeight - metrics.availableHeight) * 0.64);\n          window.scrollTo({ top: target, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n        }\n        requestUpdate();\n      });\n\n      update();\n      window.addEventListener('wheel', handleMobileWheel, { passive: false });\n      window.addEventListener('touchstart', handleTouchStart, { passive: true });\n      window.addEventListener('touchmove', handleTouchMove, { passive: false });\n      window.addEventListener('touchend', handleTouchEnd, { passive: false });\n      window.addEventListener('scroll', requestUpdate, { passive: true });\n      window.addEventListener('resize', requestUpdate, { passive: true });\n    });\n  }\n\n  function initRoverContinuousAiGradientSpan(scope) {\n    var doc = document;\n    var root = doc.documentElement;\n    var scheduled = 0;\n    var observer = window.__roverAiGradientSpanObserver || null;\n\n    function getGradientSections() {\n      var first = doc.querySelector('.section-rover-specs');\n      var last = doc.querySelector('.section-rover-ai-split');\n      if (!first || !last) return null;\n      var sections = Array.prototype.slice.call(doc.querySelectorAll('.section-rover-specs, .section-rover-ai-tabs, .section-rover-ai-split'));\n      return { first: first, last: last, sections: sections };\n    }\n\n    function updateGradientSpan() {\n      scheduled = 0;\n      var targets = getGradientSections();\n      if (!targets) return;\n\n      var firstRect = targets.first.getBoundingClientRect();\n      var lastRect = targets.last.getBoundingClientRect();\n      var span = Math.ceil(Math.max(targets.first.offsetHeight || 0, lastRect.bottom - firstRect.top));\n      if (!Number.isFinite(span) || span <= 0) return;\n\n      targets.first.style.setProperty('--rover-ai-gradient-span-height', span + 'px');\n      root.style.setProperty('--rover-ai-gradient-span-height', span + 'px');\n    }\n\n    function scheduleGradientSpanUpdate() {\n      if (scheduled) return;\n      if (window.requestAnimationFrame) {\n        scheduled = window.requestAnimationFrame(updateGradientSpan);\n      } else {\n        scheduled = window.setTimeout(updateGradientSpan, 16);\n      }\n    }\n\n    function bindMediaLoadUpdates(targets) {\n      targets.sections.forEach(function (section) {\n        if (observer) observer.observe(section);\n        section.querySelectorAll('img, video').forEach(function (media) {\n          if (media.dataset.roverAiGradientSpanBound === 'true') return;\n          media.dataset.roverAiGradientSpanBound = 'true';\n          media.addEventListener('load', scheduleGradientSpanUpdate, { passive: true });\n          media.addEventListener('loadedmetadata', scheduleGradientSpanUpdate, { passive: true });\n          media.addEventListener('loadeddata', scheduleGradientSpanUpdate, { passive: true });\n        });\n      });\n    }\n\n    function refreshGradientTargets() {\n      var targets = getGradientSections();\n      if (!targets) return;\n      bindMediaLoadUpdates(targets);\n      scheduleGradientSpanUpdate();\n      window.setTimeout(scheduleGradientSpanUpdate, 250);\n      window.setTimeout(scheduleGradientSpanUpdate, 900);\n    }\n\n    window.__roverSyncAiGradientSpan = scheduleGradientSpanUpdate;\n\n    if (!window.__roverAiGradientSpanInitialized) {\n      window.__roverAiGradientSpanInitialized = true;\n      if (window.ResizeObserver) {\n        observer = new ResizeObserver(scheduleGradientSpanUpdate);\n        window.__roverAiGradientSpanObserver = observer;\n      }\n      window.addEventListener('resize', scheduleGradientSpanUpdate, { passive: true });\n      window.addEventListener('orientationchange', scheduleGradientSpanUpdate, { passive: true });\n      window.addEventListener('load', scheduleGradientSpanUpdate, { passive: true });\n      if (doc.fonts && doc.fonts.ready && typeof doc.fonts.ready.then === 'function') {\n        doc.fonts.ready.then(scheduleGradientSpanUpdate).catch(function () {});\n      }\n      if (window.MutationObserver && doc.body) {\n        window.__roverAiGradientSpanMutationObserver = new MutationObserver(refreshGradientTargets);\n        window.__roverAiGradientSpanMutationObserver.observe(doc.body, { childList: true, subtree: true });\n      }\n    }\n\n    refreshGradientTargets();\n  }\n\n  function initSectionMotion(scope) {\n    var sections = Array.prototype.slice.call((scope || document).querySelectorAll('.rover-section'));\n    if (!sections.length) return;\n\n    var staticAfterVctClasses = ['rover-companion', 'rover-specs', 'rover-ai-tabs', 'rover-split', 'rover-audio', 'rover-box', 'rover-cta', 'rover-compare', 'rover-faq', 'rover-accessories'];\n\n    function shouldSkipEntranceMotion(section) {\n      return staticAfterVctClasses.some(function (className) {\n        return section.classList.contains(className);\n      });\n    }\n\n    function disableEntranceMotion(section) {\n      section.classList.add('is-rover-visible');\n      section.style.setProperty('opacity', '1', 'important');\n      section.style.setProperty('filter', 'none', 'important');\n      section.style.setProperty('transform', 'none', 'important');\n      section.style.setProperty('transition', 'none', 'important');\n      section.style.setProperty('animation', 'none', 'important');\n\n      section.querySelectorAll('.rover-feature-card, .rover-feature-card__image, .rover-feature-card__layer, .rover-box__image, .rover-box__media, .rover-cta__media, .rover-compare-card__image, .rover-accessory-card__media').forEach(function (element) {\n        element.style.setProperty('opacity', '1', 'important');\n        element.style.setProperty('filter', 'none', 'important');\n        element.style.setProperty('transform', 'none', 'important');\n        element.style.setProperty('transition', 'none', 'important');\n        element.style.setProperty('animation', 'none', 'important');\n      });\n    }\n\n    document.documentElement.classList.add('rover-motion-ready');\n\n    if (prefersReducedMotion() || !('IntersectionObserver' in window)) {\n      sections.forEach(function (section) { section.classList.add('is-rover-visible'); });\n      return;\n    }\n\n    if (!window.__roverSectionMotionObserver) {\n      window.__roverSectionMotionObserver = new IntersectionObserver(function (entries, observer) {\n        entries.forEach(function (entry) {\n          if (!entry.isIntersecting) return;\n          entry.target.classList.add('is-rover-visible');\n          observer.unobserve(entry.target);\n        });\n      }, { rootMargin: '0px 0px -12% 0px', threshold: 0.18 });\n    }\n\n    sections.forEach(function (section) {\n      if (section.dataset.roverSectionMotionBound === 'true') return;\n      section.dataset.roverSectionMotionBound = 'true';\n\n      if (shouldSkipEntranceMotion(section)) {\n        disableEntranceMotion(section);\n        return;\n      }\n\n      if (section.classList.contains('rover-hero') || section.classList.contains('rover-video-stage')) {\n        section.classList.add('is-rover-visible');\n        return;\n      }\n\n      var rect = section.getBoundingClientRect();\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n      if (rect.top < viewportHeight * 0.88) {\n        section.classList.add('is-rover-visible');\n      } else {\n        window.__roverSectionMotionObserver.observe(section);\n      }\n    });\n  }\n\n  function init(scope) {\n    bindRoverCartLayerBridge();\n    initOverlaySuppression(scope || document);\n    initHeroLoad(scope || document);\n    initDisclosureScrollAnchors(scope || document);\n    initTabs(scope || document);\n    initSpecsMedia(scope || document);\n    initSplitAccordions(scope || document);\n    initFaqAccordions(scope || document);\n    initCompareTables(scope || document);\n    initScrollers(scope || document);\n    initDeferredMediaPreload(scope || document);\n    initRoverAllVideoPreload(scope || document);\n    applyRoverPurchaseRegionLock(scope || document);\n    initPurchaseDrawer(scope || document);\n    initWatchFilm(scope || document);\n    initRoverBundleSelectors(scope || document);\n    initPerspectiveScroll(scope || document);\n    initVideoStageScroll(scope || document);\n    initVideoPlayToggles(scope || document);\n    initVisibleVideoPlayback(scope || document);\n    initSectionMotion(scope || document);\n    initRoverContinuousAiGradientSpan(scope || document);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () { init(document); });\n  } else {\n    init(document);\n  }\n\n  document.addEventListener('shopify:section:load', function (event) {\n    init(event.target);\n  });\n})();\n"],
  "mappings": "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",
  "names": ["select"]
}
