{
  "version": 3,
  "sources": ["/cdn/shop/t/34/assets/bixdo-new-homepage.js?cb=1792753626204"],
  "sourcesContent": ["(() => {\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const mobileFlow = window.matchMedia('(max-width: 760px)');\n  const cinematicViewport = window.matchMedia('(min-height: 680px)');\n  const controllers = new WeakMap();\n  let activeStorySession = null;\n  let cinematicCleanup = () => {};\n\n  const listen = (target, eventName, handler, options, cleanups) => {\n    if (!target) return;\n    target.addEventListener(eventName, handler, options);\n    cleanups.push(() => target.removeEventListener(eventName, handler, options));\n  };\n\n  const createController = (element, setup) => {\n    if (!element || controllers.has(element)) return;\n    const cleanups = [];\n    const destroy = setup(element, cleanups) || (() => {});\n    controllers.set(element, () => {\n      cleanups.splice(0).forEach((cleanup) => cleanup());\n      destroy();\n      controllers.delete(element);\n    });\n  };\n\n  const destroyWithin = (root) => {\n    const candidates = [root, ...root.querySelectorAll('[data-bixdo-header], [data-bixdo-campaign-index], [data-bixdo-story-section], [data-bixdo-compare], [data-bixdo-coverage], [data-bixdo-awards], [data-bixdo-social], [data-bixdo-offers]')];\n    candidates.forEach((candidate) => controllers.get(candidate)?.());\n  };\n\n  const smoothScrollTo = (target) => {\n    const element = typeof target === 'string' ? document.querySelector(target) : target;\n    if (!element) return;\n    const cinematicStep = element.closest('[data-cinematic-step]');\n    const cinematicAnchor = cinematicStep?.querySelector('[data-cinematic-ready]');\n    if (cinematicAnchor) {\n      const top = cinematicAnchor.getBoundingClientRect().top + window.scrollY - window.innerHeight;\n      window.scrollTo({ top, behavior: reducedMotion.matches ? 'auto' : 'smooth' });\n      return;\n    }\n    if (cinematicStep) {\n      cinematicStep.scrollIntoView({ behavior: reducedMotion.matches ? 'auto' : 'smooth', block: 'start' });\n      return;\n    }\n    element.scrollIntoView({ behavior: reducedMotion.matches ? 'auto' : 'smooth', block: 'start' });\n  };\n\n  const parseJSON = (element, selector, fallback) => {\n    try {\n      return JSON.parse(element.querySelector(selector)?.textContent || '');\n    } catch (error) {\n      console.warn('bixdo: invalid section data', error);\n      return fallback;\n    }\n  };\n\n  const hydrateVideo = (video, preload = 'metadata') => {\n    if (!video) return false;\n    video.preload = preload;\n    const sources = [...video.querySelectorAll('source[data-src]')];\n    const hydratedDeferredSources = sources.length > 0;\n    sources.forEach((source) => {\n      source.src = source.dataset.src;\n      source.removeAttribute('data-src');\n    });\n\n    // Product story \u76F4\u63A5\u8F93\u51FA src\uFF0C\u4E0D\u53EA\u6709 data-src\u3002\u5373\u4F7F\u6CA1\u6709\u5EF6\u8FDF Source\uFF0C\n    // preload=\"none\" \u7684\u540E\u7EED Beat \u4ECD\u9700\u663E\u5F0F load\uFF0C\u5426\u5219\u5207\u6362\u540E\u624D\u4F1A\u51B7\u542F\u52A8\u3002\n    if (hydratedDeferredSources || (video.paused && video.readyState === 0)) video.load();\n    return true;\n  };\n\n  // \u6BCF\u4E2A Story \u53EA\u9884\u70ED\u4E0B\u4E00\u4E2A Beat\uFF0C\u5141\u8BB8\u6D4F\u89C8\u5668\u63D0\u524D\u7F13\u51B2\u9996\u5E27\uFF0C\u907F\u514D\u5207\u6362\u540E\u9ED1\u5C4F\u7B49\u5F85\u3002\n  const warmVideo = (video) => hydrateVideo(video, 'auto');\n\n  const playManagedVideo = (video, startTime = 0) => {\n    if (!video) return Promise.reject(new Error('Missing video'));\n    hydrateVideo(video, 'auto');\n    video.preload = 'auto';\n    const seek = () => {\n      try { video.currentTime = Number(startTime) || 0; } catch (_) {}\n    };\n    if (video.readyState >= 1) seek();\n    else video.addEventListener('loadedmetadata', seek, { once: true });\n\n    // play() \u7684 Promise \u53EA\u80FD\u8BF4\u660E\u64AD\u653E\u8BF7\u6C42\u88AB\u63A5\u53D7\u3002Product Story \u4EE5\u771F\u6B63\u7684\n    // playing \u4E8B\u4EF6\u4F5C\u4E3A\u6210\u529F\u4FE1\u53F7\uFF0C\u907F\u514D\u5C06\u4ECD\u5361\u5728 readyState 0 \u7684\u89C6\u9891\u8BEF\u5224\u4E3A\u5DF2\u64AD\u653E\u3002\n    return new Promise((resolve, reject) => {\n      let settled = false;\n      const cleanup = () => {\n        window.clearTimeout(timeout);\n        video.removeEventListener('playing', handlePlaying);\n        video.removeEventListener('error', handleError);\n      };\n      const finish = (callback, value) => {\n        if (settled) return;\n        settled = true;\n        cleanup();\n        callback(value);\n      };\n      const handlePlaying = () => finish(resolve, video);\n      const handleError = () => finish(reject, video.error || new Error('Video media error'));\n      const timeout = window.setTimeout(\n        () => finish(reject, new Error('Video did not enter playing state')),\n        20000\n      );\n\n      video.addEventListener('playing', handlePlaying, { once: true });\n      video.addEventListener('error', handleError, { once: true });\n      try {\n        const playRequest = video.play();\n        if (playRequest?.catch) playRequest.catch((error) => finish(reject, error));\n      } catch (error) {\n        finish(reject, error);\n      }\n    });\n  };\n\n  const setupHeader = (header, cleanups) => {\n    const shell = header.closest('.bixdo-header-shell') || document;\n    const rail = shell.querySelector('[data-chapter-rail]');\n    const toggle = rail?.querySelector('.rail-toggle');\n    const links = [...(rail?.querySelectorAll('.rail-link') || [])];\n    const navLinks = [...header.querySelectorAll('a[href^=\"#\"]')];\n    const secondary = header.dataset.headerMode === 'secondary';\n    const usesImpactHeaderState = secondary && document.body.classList.contains('bixdo-new-homepage-page');\n    let chapterObserver;\n    let heroObserver;\n    let hostHeaderObserver;\n    let rootStyleObserver;\n    let offsetFrame;\n\n    const getHostHeader = () => {\n      if (!secondary) return null;\n      const selectors = [\n        'store-header.header',\n        '#shopify-section-header',\n        '.shopify-section-header',\n        '[data-section-type=\"header\"]',\n        '[data-header-section]',\n        'sticky-header',\n        '.header-wrapper',\n        'header'\n      ];\n      return [...document.querySelectorAll(selectors.join(','))]\n        .filter((candidate) => candidate !== header && !candidate.contains(header) && !shell.contains(candidate))\n        .filter((candidate) => {\n          const rect = candidate.getBoundingClientRect();\n          return rect.width >= window.innerWidth * 0.5\n            && rect.height > 0\n            && rect.top < 240\n            && rect.bottom <= 240\n            && rect.bottom > -rect.height;\n        })\n        .sort((a, b) => b.getBoundingClientRect().bottom - a.getBoundingClientRect().bottom)[0] || null;\n    };\n\n    const syncHeaderOffset = () => {\n      if (usesImpactHeaderState) {\n        header.style.removeProperty('--bixdo-header-offset-live');\n      } else if (secondary) {\n        const hostHeader = getHostHeader();\n        if (hostHeader) {\n          const hostBottom = Math.max(0, Math.min(240, Math.round(hostHeader.getBoundingClientRect().bottom)));\n          header.style.setProperty('--bixdo-header-offset-live', `${hostBottom}px`);\n        } else {\n          header.style.removeProperty('--bixdo-header-offset-live');\n        }\n      }\n      const offset = Math.max(0, Math.round(header.getBoundingClientRect().bottom + 12));\n      document.documentElement.style.setProperty('--bixdo-scroll-offset', `${offset}px`);\n    };\n\n    const scheduleHeaderOffset = () => {\n      cancelAnimationFrame(offsetFrame);\n      offsetFrame = requestAnimationFrame(syncHeaderOffset);\n    };\n\n    const setActive = (key) => {\n      links.forEach((link) => {\n        const active = link.dataset.chapter === key;\n        link.classList.toggle('active', active);\n        if (active) link.setAttribute('aria-current', 'true');\n        else link.removeAttribute('aria-current');\n      });\n      navLinks.forEach((link) => {\n        const active = link.dataset.anchor === key || link.getAttribute('href') === `#${key}`;\n        link.classList.toggle('is-active', active);\n        if (active) link.setAttribute('aria-current', 'location');\n        else link.removeAttribute('aria-current');\n      });\n    };\n\n    const navigate = (event, selector) => {\n      const target = document.querySelector(selector);\n      if (!target) return;\n      event.preventDefault();\n      smoothScrollTo(target);\n      setActive(selector.slice(1));\n      rail?.classList.remove('is-expanded');\n      toggle?.setAttribute('aria-expanded', 'false');\n    };\n\n    links.forEach((link) => listen(link, 'click', (event) => navigate(event, `#${link.dataset.chapter}`), undefined, cleanups));\n    navLinks.forEach((link) => listen(link, 'click', (event) => {\n      const selector = link.dataset.anchor ? `#${link.dataset.anchor}` : link.getAttribute('href');\n      navigate(event, selector);\n    }, undefined, cleanups));\n\n    listen(toggle, 'click', () => {\n      const open = rail.classList.toggle('is-expanded');\n      toggle.setAttribute('aria-expanded', String(open));\n      toggle.setAttribute('aria-label', open ? 'Collapse chapter navigation' : 'Expand chapter navigation');\n    }, undefined, cleanups);\n\n    const observeChapters = () => {\n      chapterObserver?.disconnect();\n      const targets = links.map((link) => document.getElementById(link.dataset.chapter)).filter(Boolean);\n      chapterObserver = new IntersectionObserver((entries) => {\n        const visible = entries.filter((entry) => entry.isIntersecting).sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0];\n        if (visible) setActive(visible.target.id);\n      }, { threshold: [0.18, 0.42, 0.7], rootMargin: '-18% 0px -42% 0px' });\n      targets.forEach((target) => chapterObserver.observe(target));\n    };\n\n    observeChapters();\n    syncHeaderOffset();\n    listen(window, 'resize', scheduleHeaderOffset, { passive: true }, cleanups);\n    if (usesImpactHeaderState) {\n      if ('MutationObserver' in window) {\n        rootStyleObserver = new MutationObserver(scheduleHeaderOffset);\n        rootStyleObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['style'] });\n      }\n      listen(header, 'transitionend', scheduleHeaderOffset, undefined, cleanups);\n    } else {\n      listen(window, 'scroll', scheduleHeaderOffset, { passive: true }, cleanups);\n      const hostHeader = getHostHeader();\n      if (secondary && hostHeader && 'ResizeObserver' in window) {\n        hostHeaderObserver = new ResizeObserver(scheduleHeaderOffset);\n        hostHeaderObserver.observe(hostHeader);\n      }\n    }\n    heroObserver = new IntersectionObserver(([entry]) => header.classList.toggle('scrolled', !entry?.isIntersecting), { threshold: 0.9 });\n    const entrance = document.querySelector('#entrance');\n    if (entrance) heroObserver.observe(entrance);\n\n    return () => {\n      chapterObserver?.disconnect();\n      heroObserver?.disconnect();\n      hostHeaderObserver?.disconnect();\n      rootStyleObserver?.disconnect();\n      cancelAnimationFrame(offsetFrame);\n      header.style.removeProperty('--bixdo-header-offset-live');\n      document.documentElement.style.removeProperty('--bixdo-scroll-offset');\n    };\n  };\n\n  const setupCampaignIndex = (section, cleanups) => {\n    const campaigns = parseJSON(section, '[data-home-campaigns]', {});\n    const keys = Object.keys(campaigns);\n    if (!keys.length) return;\n\n    const films = [...section.querySelectorAll('.home-film')];\n    const buttons = [...section.querySelectorAll('[data-home-campaign]')];\n    const title = section.querySelector('[data-home-title]');\n    const summary = section.querySelector('[data-home-summary]');\n    const index = section.querySelector('[data-home-index]');\n    const label = section.querySelector('[data-home-label]');\n    const replay = section.querySelector('[data-home-replay]');\n    const skip = section.querySelector('[data-home-skip]');\n    let active = keys[0];\n    let introTimer;\n    let changeTimer;\n    let observer;\n    let cinematicSuspended = false;\n    let campaignPointerStart = null;\n\n    const renderTitle = (parts) => {\n      if (!title) return;\n      title.replaceChildren();\n      parts.forEach((text, partIndex) => {\n        if (!text) return;\n        const span = document.createElement('span');\n        if (partIndex) span.className = 'tone';\n        span.textContent = text;\n        title.append(span);\n      });\n      title.hidden = !title.childElementCount;\n    };\n\n    const setCampaign = (key, force = false) => {\n      if (!campaigns[key] || (key === active && !force)) return;\n      const item = campaigns[key];\n      active = key;\n      section.dataset.active = (item.series || '').startsWith('glossonic') ? 'glossonic' : item.series;\n      section.classList.add('is-changing');\n      window.clearTimeout(changeTimer);\n      changeTimer = window.setTimeout(() => {\n        section.style.setProperty('--campaign', item.color);\n        renderTitle(item.title);\n        if (summary) {\n          summary.textContent = item.summary || '';\n          summary.hidden = !item.summary;\n        }\n        const campaignNumber = keys.indexOf(key) + 1;\n        if (index) index.textContent = `${String(campaignNumber).padStart(2, '0')} / ${String(keys.length).padStart(2, '0')}`;\n        if (label) label.textContent = item.title.filter(Boolean).join(' ');\n        films.forEach((layer) => {\n          const current = layer.dataset.film === item.film;\n          const video = layer.querySelector('video');\n          layer.classList.toggle('is-active', current);\n          if (!video) return;\n          if (current && !cinematicSuspended) {\n            playManagedVideo(video, Number(item.time) || 0).catch(() => {});\n          } else video.pause();\n        });\n        const nextKey = keys[(campaignNumber) % keys.length];\n        const nextFilm = films.find((film) => film.dataset.film === campaigns[nextKey]?.film);\n        warmVideo(nextFilm?.querySelector('video'));\n        buttons.forEach((button) => {\n          const current = button.dataset.homeCampaign === key;\n          button.classList.toggle('is-active', current);\n          if (current) button.setAttribute('aria-current', 'step');\n          else button.removeAttribute('aria-current');\n        });\n        section.classList.remove('is-changing');\n      }, reducedMotion.matches ? 0 : 180);\n    };\n\n    const finishIntro = () => {\n      window.clearTimeout(introTimer);\n      section.classList.remove('home-intro-running');\n      sessionStorage.setItem('bixdo-home-intro-seen', '1');\n      const currentFilm = films.find((film) => film.classList.contains('is-active'))?.querySelector('video');\n      if (!cinematicSuspended) playManagedVideo(currentFilm, Number(campaigns[active]?.time) || 0).catch(() => {});\n    };\n\n    const playIntro = () => {\n      window.clearTimeout(introTimer);\n      cinematicSuspended = false;\n      section.classList.add('home-intro-running');\n      setCampaign(active, true);\n      introTimer = window.setTimeout(finishIntro, reducedMotion.matches ? 0 : 2400);\n    };\n\n    // \u9996\u9875\u9996\u5C4F\u624B\u52BF\u53EA\u8D1F\u8D23\u9009\u62E9\u76F8\u90BB Campaign\uFF0C\u5B9E\u9645\u5185\u5BB9\u3001\u89C6\u9891\u548C\u9884\u52A0\u8F7D\u4ECD\u7EDF\u4E00\u4EA4\u7ED9 setCampaign\u3002\n    const moveCampaign = (direction) => {\n      const currentIndex = Math.max(0, keys.indexOf(active));\n      const nextIndex = (currentIndex + direction + keys.length) % keys.length;\n      setCampaign(keys[nextIndex]);\n    };\n\n    const resetCampaignPointer = () => { campaignPointerStart = null; };\n    const interactiveSelector = 'a, button, input, select, textarea, summary, [role=\"button\"], [contenteditable=\"true\"]';\n\n    listen(section, 'pointerdown', (event) => {\n      if (event.isPrimary === false || event.button !== 0 || event.target.closest(interactiveSelector)) return;\n      campaignPointerStart = {\n        id: event.pointerId,\n        x: event.clientX,\n        y: event.clientY,\n      };\n    }, undefined, cleanups);\n\n    listen(section, 'pointerup', (event) => {\n      if (!campaignPointerStart || campaignPointerStart.id !== event.pointerId) return;\n      const deltaX = event.clientX - campaignPointerStart.x;\n      const deltaY = event.clientY - campaignPointerStart.y;\n      const horizontalDistance = Math.abs(deltaX);\n      const verticalDistance = Math.abs(deltaY);\n      const threshold = Math.min(72, Math.max(48, section.clientWidth * 0.1));\n      resetCampaignPointer();\n      if (horizontalDistance < threshold || horizontalDistance <= verticalDistance * 1.25) return;\n      moveCampaign(deltaX < 0 ? 1 : -1);\n    }, undefined, cleanups);\n\n    listen(section, 'pointercancel', resetCampaignPointer, undefined, cleanups);\n    listen(section, 'keydown', (event) => {\n      if (!event.target.closest('.home-cue') || (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) return;\n      event.preventDefault();\n      moveCampaign(event.key === 'ArrowRight' ? 1 : -1);\n    }, undefined, cleanups);\n\n    buttons.forEach((button) => {\n      const choose = () => setCampaign(button.dataset.homeCampaign);\n      listen(button, 'pointerenter', choose, undefined, cleanups);\n      listen(button, 'focus', choose, undefined, cleanups);\n      listen(button, 'click', choose, undefined, cleanups);\n    });\n    listen(replay, 'click', playIntro, undefined, cleanups);\n    listen(skip, 'click', finishIntro, undefined, cleanups);\n    listen(section, 'bixdo:cinematic-suspend', () => {\n      cinematicSuspended = true;\n      window.clearTimeout(introTimer);\n      section.classList.remove('home-intro-running');\n      sessionStorage.setItem('bixdo-home-intro-seen', '1');\n      films.forEach((film) => film.querySelector('video')?.pause());\n    }, undefined, cleanups);\n\n    observer = new IntersectionObserver(([entry]) => {\n      const currentFilm = films.find((film) => film.classList.contains('is-active'))?.querySelector('video');\n      if (entry.isIntersecting && !cinematicSuspended) playManagedVideo(currentFilm, Number(campaigns[active]?.time) || 0).catch(() => {});\n      else films.forEach((film) => film.querySelector('video')?.pause());\n    }, { threshold: 0.12 });\n    observer.observe(section);\n\n    if (reducedMotion.matches || sessionStorage.getItem('bixdo-home-intro-seen')) finishIntro();\n    else playIntro();\n\n    return () => {\n      window.clearTimeout(introTimer);\n      window.clearTimeout(changeTimer);\n      observer.disconnect();\n      films.forEach((film) => film.querySelector('video')?.pause());\n    };\n  };\n\n  const setupStory = (wrapper, cleanups) => {\n    const panel = wrapper.querySelector('.story-section');\n    if (!panel) return;\n    const beats = parseJSON(panel, '[data-story-beats]', []);\n    if (!beats.length) return;\n\n    const title = panel.querySelector('.story-title');\n    const body = panel.querySelector('.story-body');\n    const dots = [...panel.querySelectorAll('[data-story-step]')];\n    const mediaItems = [...panel.querySelectorAll('[data-story-media]')];\n    const videos = [...panel.querySelectorAll('.chapter-video')];\n    const series = panel.dataset.series;\n    // v3 \u5FFD\u7565\u65E7\u7248\u628A\u201C\u9996\u6B21\u5C55\u793A\u201D\u8BEF\u8BB0\u4E3A\u201C\u89C6\u9891\u5DF2\u64AD\u653E\u201D\u7684\u72B6\u6001\u3002\n    const playedKey = `bixdo-story-played:v3:${series}`;\n    let currentStep = 0;\n    let targetStep = null;\n    let revealTimer;\n    let safetyTimer;\n    let productTimer;\n    let transitionTimer;\n    let activationTimer;\n    let warmTimer;\n    let observer;\n    let manualReplay = false;\n    let isEngaged = false;\n    let playbackAttempt = 0;\n\n    const prioritizeStoryVideo = (video) => {\n      if (!video || video.dataset.storyFastSource === 'ready') return video;\n      const originalMp4 = [...video.querySelectorAll('source')].find((source) =>\n        source.type === 'video/mp4' && /HD-1080p-[0-9.]+Mbps/.test(source.src || source.dataset.src || '')\n      );\n      if (!originalMp4) return video;\n      const originalUrl = originalMp4.src || originalMp4.dataset.src;\n      const fastBitrate = originalUrl.includes('HD-1080p-4.8Mbps') ? '1.2' : '1.5';\n      const fastUrl = originalUrl.replace(/HD-1080p-[0-9.]+Mbps/, `SD-480p-${fastBitrate}Mbps`);\n      const fastSource = originalMp4.cloneNode(false);\n      if (fastSource.hasAttribute('data-src')) fastSource.dataset.src = fastUrl;\n      else fastSource.src = fastUrl;\n      fastSource.dataset.storyFastMp4 = '';\n      originalMp4.before(fastSource);\n      video.dataset.storyFastSource = 'ready';\n      return video;\n    };\n\n    // Product Story \u4F18\u5148\u4F7F\u7528 Shopify \u5DF2\u751F\u6210\u7684 480p MP4\uFF1B\u539F 1080p \u4ECD\u4FDD\u7559\u4E3A\u540E\u5907\u3002\n    const warmStoryVideo = (video) => warmVideo(prioritizeStoryVideo(video));\n\n    const setMedia = (step) => {\n      const activeItem = mediaItems[step] || mediaItems[0];\n      videos.forEach((itemVideo) => itemVideo.pause());\n      mediaItems.forEach((item, itemIndex) => item.classList.toggle('is-active', itemIndex === step));\n      const activeVideo = activeItem?.querySelector('.chapter-video');\n      panel.classList.toggle('has-active-video', Boolean(activeVideo));\n      if (activeVideo) {\n        activeVideo.muted = true;\n        activeVideo.playsInline = true;\n        try { activeVideo.currentTime = 0; } catch (_) {}\n      }\n      return activeVideo;\n    };\n\n    const renderBeat = (step) => {\n      currentStep = Math.max(0, Math.min(beats.length - 1, step));\n      const beat = beats[currentStep];\n      const activeVideo = setMedia(currentStep);\n      panel.dataset.step = String(currentStep);\n      if (title) {\n        title.replaceChildren();\n        [beat.solid, beat.outline].forEach((part, partIndex) => {\n          if (!part) return;\n          const span = document.createElement('span');\n          span.className = partIndex ? 'display-outline' : 'display-solid';\n          span.textContent = part;\n          title.append(span);\n        });\n        title.hidden = !title.childElementCount;\n      }\n      if (body) {\n        body.textContent = beat.body || '';\n        body.hidden = !beat.body;\n      }\n      dots.forEach((dot, dotIndex) => dot.classList.toggle('active', dotIndex === currentStep));\n      panel.classList.toggle('is-final', currentStep === beats.length - 1);\n      return activeVideo;\n    };\n\n    const videoSafetyDelay = (video) => {\n      const duration = Number(video?.duration);\n      if (!Number.isFinite(duration) || duration <= 0) return 16000;\n      return Math.min(16000, Math.max(4000, (duration + 0.75) * 1000));\n    };\n\n    const reveal = ({ markPlayed = true, immediateProduct = false } = {}) => {\n      playbackAttempt += 1;\n      window.clearTimeout(safetyTimer);\n      window.clearTimeout(productTimer);\n      window.clearTimeout(warmTimer);\n      videos.forEach((itemVideo) => itemVideo.pause());\n      manualReplay = false;\n      if (markPlayed) sessionStorage.setItem(playedKey, '1');\n      panel.classList.remove('video-playing', 'video-loading', 'manual-replay');\n      panel.classList.add('video-ended', 'revealed', 'copy-intro', 'story-seen');\n      if (immediateProduct) panel.classList.add('product-revealed');\n      else productTimer = window.setTimeout(() => panel.classList.add('product-revealed'), reducedMotion.matches ? 0 : 620);\n    };\n\n    // \u9996\u6B21\u5C55\u793A\u6216\u64AD\u653E\u5931\u8D25\u65F6\u53EA\u6062\u590D\u6587\u6848\u4E0E\u6D77\u62A5\uFF0C\u4E0D\u4F2A\u9020 video-ended\u3002\n    // Replay \u53EA\u5E94\u5728\u89C6\u9891\u771F\u6B63\u64AD\u653E\u5B8C\u6210\u540E\u51FA\u73B0\u3002\n    const revealInitial = ({ immediateProduct = true } = {}) => {\n      playbackAttempt += 1;\n      window.clearTimeout(safetyTimer);\n      window.clearTimeout(productTimer);\n      window.clearTimeout(warmTimer);\n      videos.forEach((itemVideo) => itemVideo.pause());\n      manualReplay = false;\n      panel.classList.remove('video-playing', 'video-loading', 'manual-replay', 'video-ended');\n      panel.classList.add('revealed', 'copy-intro', 'story-seen');\n      if (immediateProduct) panel.classList.add('product-revealed');\n      else productTimer = window.setTimeout(() => panel.classList.add('product-revealed'), reducedMotion.matches ? 0 : 620);\n    };\n\n    const playBeatVideo = (video, { markPlayed = false, manual = false } = {}) => {\n      if (!video || reducedMotion.matches) {\n        revealInitial({ immediateProduct: true });\n        return;\n      }\n      window.clearTimeout(safetyTimer);\n      window.clearTimeout(warmTimer);\n      const attempt = ++playbackAttempt;\n      manualReplay = manual;\n      // \u6162\u7F51\u7EDC\u4E0B\u5148\u4FDD\u7559\u6D77\u62A5\u548C\u5F53\u524D\u6587\u6848\uFF0C\u53EA\u6709\u771F\u6B63\u64AD\u653E\u540E\u624D\u5207\u5165\u5F71\u7247\u72B6\u6001\u3002\n      panel.classList.remove('video-ended', 'user-dissolve-in');\n      panel.classList.add('video-loading');\n      if (manual) panel.classList.add('manual-replay');\n      else panel.classList.remove('manual-replay');\n      video.muted = true;\n      video.playsInline = true;\n      try { video.currentTime = 0; } catch (_) {}\n      prioritizeStoryVideo(video);\n      playManagedVideo(video, 0).then(() => {\n        if (attempt !== playbackAttempt) return;\n        panel.classList.remove('video-loading', 'revealed', 'copy-intro', 'product-revealed');\n        panel.classList.add('video-playing');\n        // \u53EA\u6709\u771F\u6B63\u8FDB\u5165 playing \u540E\u624D\u542F\u52A8\u6536\u5C3E\u8BA1\u65F6\uFF0C\u4E5F\u624D\u5141\u8BB8\u5199\u5165\u5DF2\u64AD\u653E\u72B6\u6001\u3002\n        safetyTimer = window.setTimeout(\n          () => reveal({ markPlayed, immediateProduct: manual }),\n          videoSafetyDelay(video)\n        );\n        // \u5F53\u524D\u5F71\u7247\u5DF2\u771F\u6B63\u5F00\u59CB\u540E\uFF0C\u518D\u4F4E\u4F18\u5148\u7EA7\u51C6\u5907\u4E0B\u4E00\u6BB5\uFF0C\n        // \u907F\u514D\u4E24\u4E2A MP4 \u540C\u65F6\u4E0B\u8F7D\u62A2\u5360\u5E26\u5BBD\u3002\n        warmTimer = window.setTimeout(\n          () => warmStoryVideo(mediaItems[currentStep + 1]?.querySelector('.chapter-video')),\n          1500\n        );\n      }).catch((error) => {\n        if (attempt !== playbackAttempt) return;\n        panel.classList.remove('video-loading');\n        console.warn('bixdo: product story video playback failed', error);\n        // \u672A\u771F\u6B63\u64AD\u653E\u6210\u529F\u65F6\u56DE\u5230\u9996\u5C4F\u72B6\u6001\uFF0C\u4E0D\u663E\u793A\u8BED\u4E49\u9519\u8BEF\u7684 Replay\u3002\n        revealTimer = window.setTimeout(\n          () => revealInitial({ immediateProduct: true }),\n          120\n        );\n      });\n    };\n\n    const playOpening = () => {\n      const video = mediaItems[currentStep]?.querySelector('.chapter-video');\n      if (!video || reducedMotion.matches) {\n        revealInitial({ immediateProduct: true });\n        return;\n      }\n      // \u53EA\u5141\u8BB8\u5DF2\u5B8C\u6574\u770B\u8FC7\u7684\u9996\u4E2A Beat \u76F4\u63A5\u8FDB\u5165 Replay \u72B6\u6001\uFF1B\n      // \u540E\u7EED Beat \u88AB\u4E2D\u65AD\u540E\u518D\u6B21\u8FDB\u5165\u65F6\u4ECD\u5E94\u91CD\u65B0\u64AD\u653E\u3002\n      if (currentStep === 0 && sessionStorage.getItem(playedKey)) {\n        reveal({ markPlayed: false, immediateProduct: true });\n        return;\n      }\n      playBeatVideo(video, { markPlayed: currentStep === 0 });\n    };\n\n    const transitionTo = (step, animate = true) => {\n      const next = Math.max(0, Math.min(beats.length - 1, step));\n      if (panel.classList.contains('video-loading') || !panel.classList.contains('revealed') || targetStep !== null || next === currentStep) return;\n      targetStep = next;\n      panel.classList.remove('user-dissolve-in');\n      panel.classList.add('user-dissolve-out');\n      const swap = () => {\n        const activeVideo = renderBeat(next);\n        panel.classList.remove('user-dissolve-out');\n        if (activeVideo && !reducedMotion.matches) {\n          playBeatVideo(activeVideo);\n        } else {\n          reveal({ markPlayed: false, immediateProduct: true });\n          void panel.offsetWidth;\n          panel.classList.add('user-dissolve-in');\n        }\n        transitionTimer = window.setTimeout(() => {\n          panel.classList.remove('user-dissolve-in');\n          targetStep = null;\n        }, reducedMotion.matches ? 180 : 720);\n      };\n      const nextVideo = mediaItems[next]?.querySelector('.chapter-video');\n      if (nextVideo && !reducedMotion.matches) {\n        // \u5728\u70B9\u51FB/\u89E6\u6478\u4E8B\u4EF6\u94FE\u5185\u7ACB\u5373\u8C03\u7528 play()\uFF0C\u907F\u514D\u79FB\u52A8\u6D4F\u89C8\u5668\u56E0\u8F6C\u573A\u5EF6\u65F6\u4E22\u5931\u7528\u6237\u624B\u52BF\u6388\u6743\u3002\n        swap();\n      } else {\n        transitionTimer = window.setTimeout(swap, !animate || reducedMotion.matches ? 30 : 220);\n      }\n    };\n\n    const advance = () => {\n      if (currentStep < beats.length - 1) transitionTo(currentStep + 1);\n      else if (series === 'glossonic') smoothScrollTo('#glos-compare');\n      else smoothScrollTo('#glossonic');\n    };\n\n    const replay = () => {\n      const video = mediaItems[currentStep]?.querySelector('.chapter-video');\n      if (!video) return;\n      if (activeStorySession && activeStorySession !== storySession) activeStorySession.finishForDeparture();\n      activeStorySession = storySession;\n      isEngaged = true;\n      wrapper.classList.add('story-engaged');\n      playBeatVideo(video, { manual: true });\n    };\n\n    const finishForDeparture = () => {\n      window.clearTimeout(activationTimer);\n      window.clearTimeout(warmTimer);\n      if (panel.classList.contains('video-playing') || panel.classList.contains('video-loading')) {\n        if (manualReplay) reveal({ markPlayed: false, immediateProduct: true });\n        else revealInitial({ immediateProduct: true });\n      } else {\n        playbackAttempt += 1;\n      }\n      // \u79BB\u5F00\u7AE0\u8282\u65F6\u4E2D\u65AD\u8BE5 Story \u7684\u540E\u53F0\u89C6\u9891\u8BF7\u6C42\uFF0C\u628A\u5E26\u5BBD\u8BA9\u7ED9\u65B0\u7684\u6D3B\u52A8\u7AE0\u8282\u3002\n      videos.forEach((video) => {\n        video.pause();\n        video.preload = 'none';\n        if (video.networkState === HTMLMediaElement.NETWORK_LOADING) video.load();\n      });\n      isEngaged = false;\n      wrapper.classList.remove('story-engaged');\n      if (activeStorySession === storySession) activeStorySession = null;\n    };\n\n    const storySession = { finishForDeparture };\n\n    const cinematicCanPlay = () => {\n      const cinematicStep = wrapper.closest('[data-cinematic-step]');\n      return !cinematicStep || cinematicStep.classList.contains('cinematic-play-ready');\n    };\n\n    const engage = () => {\n      if (isEngaged || !cinematicCanPlay()) return;\n      window.clearTimeout(activationTimer);\n      activationTimer = window.setTimeout(() => {\n        if (isEngaged || !cinematicCanPlay()) return;\n        if (activeStorySession && activeStorySession !== storySession) activeStorySession.finishForDeparture();\n        activeStorySession = storySession;\n        isEngaged = true;\n        wrapper.classList.add('story-engaged');\n        // \u8FDB\u5165\u5F53\u524D Story \u65F6\u4F18\u5148\u64AD\u653E\u5F53\u524D Beat\uFF1B\u64AD\u653E\u6210\u529F\u540E\u518D\u4F4E\u4F18\u5148\u7EA7\u51C6\u5907\u4E0B\u4E00\u6BB5\u3002\n        // \u8FD9\u6837 Glossonic \u6CA1\u6709 poster \u65F6\u4E5F\u4E0D\u4F1A\u505C\u5728\u7A7A\u767D\u80CC\u666F\u3002\n        if (!panel.classList.contains('video-playing') && !panel.classList.contains('video-loading')) playOpening();\n      }, 0);\n    };\n\n    listen(panel.querySelector('[data-story-back]'), 'click', () => transitionTo(currentStep - 1), undefined, cleanups);\n    listen(panel.querySelector('[data-story-advance]'), 'click', advance, undefined, cleanups);\n    listen(panel.querySelector('.video-replay'), 'click', replay, undefined, cleanups);\n    dots.forEach((dot) => listen(dot, 'click', () => transitionTo(Number(dot.dataset.storyStep)), undefined, cleanups));\n    videos.forEach((video) => {\n      listen(video, 'ended', () => reveal({ markPlayed: !manualReplay, immediateProduct: manualReplay }), undefined, cleanups);\n      listen(video, 'error', () => {\n        // \u9996\u5E27\u524D\u5931\u8D25\u4E0D\u5E94\u4F2A\u88C5\u6210\u201C\u5DF2\u64AD\u653E\u201D\uFF1B\u4E2D\u9014\u5931\u8D25\u624D\u4FDD\u7559 Replay \u5165\u53E3\u3002\n        if (video.currentTime > 0 || panel.classList.contains('video-playing')) {\n          reveal({ markPlayed: !manualReplay, immediateProduct: true });\n        } else {\n          revealInitial({ immediateProduct: true });\n        }\n      }, undefined, cleanups);\n    });\n    listen(wrapper, 'bixdo:cinematic-ready', (event) => {\n      if (event.detail?.ready) engage();\n      else if (isEngaged || panel.classList.contains('video-playing')) finishForDeparture();\n    }, undefined, cleanups);\n\n    observer = new IntersectionObserver(([entry]) => {\n      if (entry.intersectionRatio >= 0.62) engage();\n      else if (entry.intersectionRatio <= 0.34) finishForDeparture();\n    }, { threshold: [0, 0.34, 0.62, 1] });\n    observer.observe(panel);\n    renderBeat(0);\n    // Oraroot \u662F\u9875\u9762\u4E2D\u7B2C\u4E00\u4E2A Story\uFF0C\u4EC5\u63D0\u524D\u51C6\u5907\u5F53\u524D\u9996\u6BB5 480p \u89C6\u9891\u3002\n    // \u5176\u4ED6 Story \u5230\u8FBE\u89C6\u53E3\u65F6\u518D\u52A0\u8F7D\uFF0C\u907F\u514D\u516D\u4E2A\u5F71\u7247\u540C\u65F6\u62A2\u5360\u5E26\u5BBD\u3002\n    if (series === 'oraroot') warmStoryVideo(mediaItems[0]?.querySelector('.chapter-video'));\n\n    return () => {\n      observer.disconnect();\n      videos.forEach((video) => video.pause());\n      if (activeStorySession === storySession) activeStorySession = null;\n      wrapper.classList.remove('story-engaged');\n      [revealTimer, safetyTimer, productTimer, transitionTimer, activationTimer, warmTimer].forEach((timer) => window.clearTimeout(timer));\n    };\n  };\n\n  const setupCoverage = (section, cleanups) => {\n    const leads = [...section.querySelectorAll('[data-coverage-lead]')];\n    const reviews = [...section.querySelectorAll('[data-coverage-review]')];\n    const reviewByIndex = new Map(reviews.map((review) => [Number(review.dataset.coverageIndex), review]));\n    const stage = section.querySelector('.review-stage');\n    if (!leads.length) return;\n\n    let active = 0;\n    let locked = false;\n    let leaveTimer;\n    let enterTimer;\n\n    const reveal = (index, immediate = false) => {\n      const next = (index + leads.length) % leads.length;\n      if ((!immediate && locked) || (!immediate && next === active)) return;\n      const currentLead = leads[active];\n      const currentReview = reviewByIndex.get(active);\n      const nextLead = leads[next];\n      const nextReview = reviewByIndex.get(next);\n      if (immediate) {\n        leads.forEach((lead, itemIndex) => { lead.hidden = itemIndex !== next; lead.classList.toggle('is-active', itemIndex === next); });\n        reviews.forEach((review) => {\n          const isActive = Number(review.dataset.coverageIndex) === next;\n          review.hidden = !isActive;\n          review.classList.toggle('is-active', isActive);\n        });\n        active = next;\n        return;\n      }\n\n      locked = true;\n      currentLead.classList.add('is-leaving');\n      currentReview?.classList.add('is-leaving');\n      window.clearTimeout(leaveTimer);\n      window.clearTimeout(enterTimer);\n      leaveTimer = window.setTimeout(() => {\n        currentLead.hidden = true;\n        if (currentReview) currentReview.hidden = true;\n        currentLead.classList.remove('is-active', 'is-leaving');\n        currentReview?.classList.remove('is-active', 'is-leaving');\n        nextLead.hidden = false;\n        if (nextReview) nextReview.hidden = false;\n        nextLead.classList.add('is-active', 'is-entering');\n        nextReview?.classList.add('is-active', 'is-entering');\n        active = next;\n        enterTimer = window.setTimeout(() => {\n          nextLead.classList.remove('is-entering');\n          nextReview?.classList.remove('is-entering');\n          locked = false;\n        }, reducedMotion.matches ? 20 : 580);\n      }, reducedMotion.matches ? 20 : 180);\n    };\n\n    const move = (direction) => reveal(active + direction);\n    listen(section.querySelector('[data-review-prev]'), 'click', () => move(-1), undefined, cleanups);\n    listen(section.querySelector('[data-review-next]'), 'click', () => move(1), undefined, cleanups);\n    listen(section, 'bixdo:coverage-select', (event) => reveal(Number(event.detail.index), true), undefined, cleanups);\n    listen(stage, 'keydown', (event) => {\n      if (!['ArrowLeft', 'ArrowRight'].includes(event.key)) return;\n      event.preventDefault();\n      move(event.key === 'ArrowRight' ? 1 : -1);\n    }, undefined, cleanups);\n    reveal(0, true);\n\n    return () => {\n      window.clearTimeout(leaveTimer);\n      window.clearTimeout(enterTimer);\n    };\n  };\n\n  const setupAwards = (section, cleanups) => {\n    const stage = section.querySelector('.orbit-stage');\n    const items = [...section.querySelectorAll('.orbit-item')];\n    const focus = section.querySelector('.orbit-focus');\n    if (!stage || !items.length) return;\n    section.classList.toggle('is-reduced', mobileFlow.matches || reducedMotion.matches);\n    if (mobileFlow.matches) {\n      items.forEach((item) => listen(item, 'focus', () => { if (focus && item.dataset.caption) focus.textContent = item.dataset.caption; }, undefined, cleanups));\n      const ring = section.querySelector('.orbit-ring');\n      if (!ring) return;\n      if (reducedMotion.matches) return;\n\n      const track = document.createElement('div');\n      const group = document.createElement('div');\n      const cloneGroup = document.createElement('div');\n      track.className = 'orbit-marquee-track';\n      group.className = 'orbit-marquee-group';\n      cloneGroup.className = 'orbit-marquee-group';\n      cloneGroup.setAttribute('aria-hidden', 'true');\n      items.forEach((item) => group.append(item));\n      items.forEach((item) => {\n        const clone = item.cloneNode(true);\n        clone.classList.add('is-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        clone.removeAttribute('role');\n        cloneGroup.append(clone);\n      });\n      track.append(group, cloneGroup);\n      ring.append(track);\n      const pixelsPerSecond = 24;\n      let resumeTimer;\n      let visible = false;\n      let paused = false;\n\n      ring.classList.add('is-continuous');\n\n      const measure = () => {\n        const cycleWidth = group.getBoundingClientRect().width;\n        if (cycleWidth > 0) track.style.setProperty('--orbit-duration', `${cycleWidth / pixelsPerSecond}s`);\n      };\n      const syncPlayback = () => track.classList.toggle('is-paused', !visible || paused);\n      const pause = () => { paused = true; window.clearTimeout(resumeTimer); syncPlayback(); };\n      const resume = () => {\n        window.clearTimeout(resumeTimer);\n        resumeTimer = window.setTimeout(() => { paused = false; syncPlayback(); }, 650);\n      };\n      const updateVisibility = () => {\n        const bounds = section.getBoundingClientRect();\n        visible = document.visibilityState === 'visible' && bounds.bottom > 0 && bounds.top < window.innerHeight;\n        if (visible) measure();\n        syncPlayback();\n      };\n\n      listen(ring, 'pointerdown', pause, undefined, cleanups);\n      listen(ring, 'pointerup', resume, undefined, cleanups);\n      listen(ring, 'pointercancel', resume, undefined, cleanups);\n      listen(ring, 'focusin', pause, undefined, cleanups);\n      listen(ring, 'focusout', resume, undefined, cleanups);\n      listen(window, 'scroll', updateVisibility, { passive: true }, cleanups);\n      listen(window, 'resize', () => { measure(); updateVisibility(); }, { passive: true }, cleanups);\n      listen(document, 'visibilitychange', updateVisibility, undefined, cleanups);\n      measure();\n      updateVisibility();\n\n      return () => {\n        window.clearTimeout(resumeTimer);\n        ring.classList.remove('is-continuous');\n        items.forEach((item) => ring.append(item));\n        track.remove();\n      };\n    }\n    if (reducedMotion.matches) {\n      section.classList.add('is-reduced');\n      items.forEach((item) => listen(item, 'focus', () => { if (focus && item.dataset.caption) focus.textContent = item.dataset.caption; }, undefined, cleanups));\n      return;\n    }\n\n    const defaultCaption = focus?.textContent || '';\n    let phase = 0;\n    let frame;\n    let last = 0;\n    let visible = false;\n    let selected;\n    let lead;\n    let observer;\n\n    const render = () => {\n      const width = stage.clientWidth;\n      const height = stage.clientHeight;\n      const radiusX = Math.min(width * 0.34, 470);\n      const radiusY = Math.min(height * 0.3, 268);\n      const radiusZ = Math.min(width * 0.27, 350);\n      let nextLead;\n      let leadDepth = -1;\n      items.forEach((item, itemIndex) => {\n        const angle = phase + itemIndex / items.length * Math.PI * 2;\n        const front = Math.cos(angle);\n        const depth = (front + 1) / 2;\n        const focused = item === selected;\n        const x = Math.sin(angle) * radiusX;\n        const y = front * radiusY;\n        const z = front * radiusZ + (focused ? 165 : 0);\n        item.style.zIndex = String(focused ? 90 : 16 + Math.round(depth * 32));\n        item.style.opacity = String(focused ? 1 : 0.31 + depth * 0.69);\n        item.style.filter = focused ? 'none' : `brightness(${0.54 + depth * 0.46}) saturate(${0.7 + depth * 0.3})`;\n        item.style.transform = `translate3d(calc(-50% + ${x}px), calc(-50% + ${y}px), ${z}px) rotateY(${focused ? 0 : Math.sin(angle) * -76}deg) rotateZ(${focused ? 0 : Math.sin(angle) * -5}deg) scale(${focused ? 1.18 : 1})`;\n        if (depth > leadDepth) { leadDepth = depth; nextLead = item; }\n      });\n      if (!selected && nextLead && nextLead !== lead) {\n        lead = nextLead;\n        if (focus && lead.dataset.caption) focus.textContent = lead.dataset.caption;\n      }\n    };\n\n    const tick = (now) => {\n      if (!last) last = now;\n      phase += Math.min(40, now - last) * 0.000105;\n      last = now;\n      render();\n      frame = window.requestAnimationFrame(tick);\n    };\n    const start = () => { if (!frame) { last = 0; frame = window.requestAnimationFrame(tick); } };\n    const stop = () => { if (frame) window.cancelAnimationFrame(frame); frame = 0; last = 0; };\n    const select = (item) => { selected?.classList.remove('is-focused'); selected = item; item.classList.add('is-focused'); if (focus && item.dataset.caption) focus.textContent = item.dataset.caption; render(); };\n    const release = () => { selected?.classList.remove('is-focused'); selected = null; if (focus) focus.textContent = defaultCaption; render(); };\n\n    items.forEach((item) => {\n      listen(item, 'pointerenter', (event) => { if (event.pointerType !== 'touch') select(item); }, undefined, cleanups);\n      listen(item, 'pointerleave', (event) => { if (event.pointerType !== 'touch') release(); }, undefined, cleanups);\n      listen(item, 'focus', () => select(item), undefined, cleanups);\n      listen(item, 'blur', release, undefined, cleanups);\n    });\n    observer = new IntersectionObserver(([entry]) => { visible = entry.isIntersecting; if (visible) start(); else stop(); }, { threshold: 0.05 });\n    observer.observe(section);\n    const handleResize = () => { render(); if (visible) start(); };\n    listen(window, 'resize', handleResize, { passive: true }, cleanups);\n    render();\n\n    return () => { observer.disconnect(); stop(); };\n  };\n\n  const setupSocial = (section, cleanups) => {\n    section.querySelectorAll('.social-card').forEach((card) => {\n      const video = card.querySelector('video');\n      if (!video) return;\n      const play = () => { if (!reducedMotion.matches && window.matchMedia('(hover: hover)').matches) video.play().catch(() => {}); };\n      const reset = () => { video.pause(); try { video.currentTime = 0; } catch (_) {} };\n      listen(card, 'pointerenter', play, undefined, cleanups);\n      listen(card, 'pointerleave', reset, undefined, cleanups);\n      listen(card, 'focus', play, undefined, cleanups);\n      listen(card, 'blur', reset, undefined, cleanups);\n    });\n  };\n\n  const setupOffers = (section, cleanups) => {\n    const track = section.querySelector('.offer-track');\n    const cards = [...section.querySelectorAll('[data-offer-card]')];\n    const jumps = [...section.querySelectorAll('[data-offer-jump]')];\n    const campaignHero = section.querySelector('.campaign-hero');\n    const campaignVideo = campaignHero?.querySelector('video.campaign-film');\n    if (!track || !cards.length) return;\n\n    const setActive = (activeCard) => jumps.forEach((button) => {\n      const active = button.dataset.offerJump === activeCard.dataset.offerCard;\n      button.classList.toggle('active', active);\n      button.setAttribute('aria-selected', String(active));\n    });\n    const show = (id) => {\n      const card = cards.find((item) => item.dataset.offerCard === id);\n      if (!card) return;\n      track.scrollTo({ left: card.offsetLeft - track.offsetLeft, behavior: reducedMotion.matches ? 'auto' : 'smooth' });\n      setActive(card);\n    };\n\n    jumps.forEach((button) => listen(button, 'click', () => show(button.dataset.offerJump), undefined, cleanups));\n    const cardObserver = new IntersectionObserver((entries) => {\n      const visible = entries.filter((entry) => entry.isIntersecting).sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0];\n      if (visible) setActive(visible.target);\n    }, { root: track, threshold: [0.55, 0.8] });\n    cards.forEach((card) => cardObserver.observe(card));\n    const videoObserver = campaignVideo && campaignHero ? new IntersectionObserver(([entry]) => {\n      if (entry.intersectionRatio >= 0.18) playManagedVideo(campaignVideo, 0).catch(() => {});\n      else campaignVideo.pause();\n    }, { threshold: [0, 0.18] }) : null;\n    videoObserver?.observe(campaignHero);\n    listen(section.querySelector('.campaign-actions a[href=\"#offers\"]'), 'click', (event) => { event.preventDefault(); smoothScrollTo(section.querySelector('#offers')); }, undefined, cleanups);\n\n    return () => {\n      cardObserver.disconnect();\n      videoObserver?.disconnect();\n      campaignVideo?.pause();\n    };\n  };\n\n  const setupCinematicSequence = () => {\n    if (\n      reducedMotion.matches\n      || mobileFlow.matches\n      || !cinematicViewport.matches\n      || !CSS.supports('animation-timeline: view()')\n      || !CSS.supports('timeline-scope: --bixdo-cinema-one')\n    ) return () => {};\n\n    const entrance = document.querySelector('#entrance');\n    const oraroot = document.querySelector('#oraroot');\n    const glossonic = document.querySelector('#glossonic');\n    const main = entrance?.closest('main') || document.querySelector('#MainContent');\n    const campaignSection = entrance?.closest('.shopify-section');\n    const orarootSection = oraroot?.closest('.shopify-section');\n    const glossonicSection = glossonic?.closest('.shopify-section');\n    if (!main || !campaignSection || !orarootSection || !glossonicSection) return () => {};\n\n    const steps = [\n      [campaignSection, 'campaign'],\n      [orarootSection, 'oraroot'],\n      [glossonicSection, 'glossonic']\n    ];\n    const observers = [];\n    const sentinels = [];\n    main.classList.add('bixdo-cinematic-sequence');\n    steps.forEach(([section, step]) => { section.dataset.cinematicStep = step; });\n\n    const addPlaybackGate = (section, story, gate) => {\n      const sentinel = document.createElement('span');\n      sentinel.className = 'cinematic-ready-sentinel';\n      sentinel.dataset.cinematicReady = '';\n      sentinel.style.setProperty('--cinematic-ready-point', gate);\n      sentinel.setAttribute('aria-hidden', 'true');\n      section.append(sentinel);\n      sentinels.push(sentinel);\n      let ready = null;\n      const observer = new IntersectionObserver(([entry]) => {\n        const nextReady = entry.isIntersecting;\n        if (nextReady === ready) return;\n        ready = nextReady;\n        section.classList.toggle('cinematic-play-ready', ready);\n        story.dispatchEvent(new CustomEvent('bixdo:cinematic-ready', { detail: { ready } }));\n        if (ready && story === oraroot.closest('[data-bixdo-story-section]')) {\n          entrance.dispatchEvent(new CustomEvent('bixdo:cinematic-suspend'));\n        }\n      }, { threshold: 0 });\n      observer.observe(sentinel);\n      observers.push(observer);\n    };\n\n    // \u64AD\u653E\u4F18\u5148\uFF1A\u7AE0\u8282\u5230\u8FBE\u89C6\u53E3\u5373\u89E3\u9501\uFF0C\u4E0D\u518D\u8981\u6C42\u7528\u6237\u989D\u5916\u6EDA\u52A8 80\u2013100svh\u3002\n    addPlaybackGate(orarootSection, oraroot.closest('[data-bixdo-story-section]'), '-90svh');\n    addPlaybackGate(glossonicSection, glossonic.closest('[data-bixdo-story-section]'), '-90svh');\n\n    return () => {\n      observers.forEach((observer) => observer.disconnect());\n      sentinels.forEach((sentinel) => sentinel.remove());\n      steps.forEach(([section]) => {\n        section.removeAttribute('data-cinematic-step');\n        section.classList.remove('cinematic-play-ready');\n      });\n      main.classList.remove('bixdo-cinematic-sequence');\n    };\n  };\n\n  const refreshCinematicSequence = () => {\n    cinematicCleanup();\n    cinematicCleanup = setupCinematicSequence();\n  };\n\n  const init = (root = document) => {\n    refreshCinematicSequence();\n    root.querySelectorAll('[data-bixdo-header]').forEach((element) => createController(element, setupHeader));\n    root.querySelectorAll('[data-bixdo-campaign-index]').forEach((element) => createController(element, setupCampaignIndex));\n    root.querySelectorAll('[data-bixdo-story-section]').forEach((element) => createController(element, setupStory));\n    root.querySelectorAll('[data-bixdo-coverage]').forEach((element) => createController(element, setupCoverage));\n    root.querySelectorAll('[data-bixdo-awards]').forEach((element) => createController(element, setupAwards));\n    root.querySelectorAll('[data-bixdo-social]').forEach((element) => createController(element, setupSocial));\n    root.querySelectorAll('[data-bixdo-offers]').forEach((element) => createController(element, setupOffers));\n  };\n\n  document.addEventListener('DOMContentLoaded', () => init(document), { once: true });\n  document.addEventListener('shopify:section:load', (event) => init(event.target));\n  document.addEventListener('shopify:section:unload', (event) => destroyWithin(event.target));\n  document.addEventListener('shopify:section:reorder', () => {\n    refreshCinematicSequence();\n    const header = document.querySelector('[data-bixdo-header]');\n    controllers.get(header)?.();\n    createController(header, setupHeader);\n  });\n  document.addEventListener('shopify:block:select', (event) => {\n    const story = event.target.closest('[data-bixdo-story-section]');\n    const dot = story?.querySelector(`[data-block-id=\"${event.detail.blockId}\"]`);\n    dot?.click();\n    const coverage = event.target.closest('[data-bixdo-coverage]');\n    const lead = coverage?.querySelector(`[data-coverage-lead][data-block-id=\"${event.detail.blockId}\"]`);\n    if (coverage && lead) {\n      coverage.dispatchEvent(new CustomEvent('bixdo:coverage-select', { detail: { index: Number(lead.dataset.coverageIndex) } }));\n    }\n  });\n\n  const refreshAwards = () => document.querySelectorAll('[data-bixdo-awards]').forEach((section) => {\n    controllers.get(section)?.();\n    createController(section, setupAwards);\n  });\n  mobileFlow.addEventListener('change', () => { refreshAwards(); refreshCinematicSequence(); });\n  reducedMotion.addEventListener('change', () => { refreshAwards(); refreshCinematicSequence(); });\n  cinematicViewport.addEventListener('change', refreshCinematicSequence);\n})();\n"],
  "mappings": "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",
  "names": ["visible"]
}
