{
  "version": 3,
  "sources": ["/cdn/shop/t/20/assets/theme.js?cgs=20260703-hardening-performance"],
  "sourcesContent": ["(() => {\n  document.documentElement.classList.remove('no-js');\n  document.documentElement.classList.add('js');\n\n  const qs = (selector, root = document) => root.querySelector(selector);\n  const qsa = (selector, root = document) => Array.from(root.querySelectorAll(selector));\n  const reduceMotion = () => window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n  const scriptPromises = new Map();\n\n  const ensureCurrentPolicyView = () => {\n    try {\n      if (!/\\/policies\\/privacy-policy\\/?$/.test(window.location.pathname)) return;\n      const params = new URLSearchParams(window.location.search);\n      if (params.has('view')) return;\n      params.set('view', 'cgs-policy-current');\n      window.location.replace(`${window.location.pathname}?${params.toString()}${window.location.hash}`);\n    } catch (error) {\n    }\n  };\n\n  ensureCurrentPolicyView();\n\n  const prefersLiteExperience = () => {\n    const effectiveType = String(connection?.effectiveType || '').toLowerCase();\n    return Boolean(\n      reduceMotion()\n      || connection?.saveData\n      || effectiveType === 'slow-2g'\n      || effectiveType === '2g'\n      || (navigator.deviceMemory && navigator.deviceMemory <= 2)\n      || (navigator.hardwareConcurrency && navigator.hardwareConcurrency <= 2)\n    );\n  };\n\n  const setPerformanceMode = () => {\n    document.documentElement.dataset.performanceMode = prefersLiteExperience() ? 'lite' : 'standard';\n  };\n\n  const trustedAssetUrl = (value) => {\n    try {\n      const url = new URL(String(value || ''), window.location.href);\n      const trustedHost = (\n        url.origin === window.location.origin\n        || url.hostname === 'cdn.shopify.com'\n        || url.hostname.endsWith('.shopifycdn.net')\n        || url.hostname.endsWith('.myshopify.com')\n      );\n      if (!trustedHost) return '';\n      if (url.protocol !== 'https:' && url.origin !== window.location.origin) return '';\n      return url.href;\n    } catch (error) {\n      return '';\n    }\n  };\n\n  const loadScript = (src) => {\n    const safeSrc = trustedAssetUrl(src);\n    if (!safeSrc) return Promise.reject(new Error('Untrusted asset URL'));\n    if (scriptPromises.has(safeSrc)) return scriptPromises.get(safeSrc);\n\n    const promise = new Promise((resolve, reject) => {\n      const existing = qsa('script[src]').find((item) => item.src === safeSrc);\n      if (existing) {\n        existing.addEventListener('load', resolve, { once: true });\n        existing.addEventListener('error', reject, { once: true });\n        if (existing.dataset.loaded === 'true') resolve();\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = safeSrc;\n      script.async = false;\n      script.dataset.cgsRuntime = 'motion';\n      script.addEventListener('load', () => {\n        script.dataset.loaded = 'true';\n        resolve();\n      }, { once: true });\n      script.addEventListener('error', reject, { once: true });\n      document.head.append(script);\n    });\n\n    scriptPromises.set(safeSrc, promise);\n    return promise;\n  };\n\n  const loadMotionRuntime = async () => {\n    if (window.gsap && window.ScrollTrigger) return true;\n    const body = document.body;\n    if (!body) return false;\n    try {\n      await loadScript(body.dataset.gsapSrc);\n      await loadScript(body.dataset.scrolltriggerSrc);\n      return Boolean(window.gsap && window.ScrollTrigger);\n    } catch (error) {\n      return false;\n    }\n  };\n\n  const safeStorage = {\n    get(key, fallback = '') {\n      try {\n        return window.localStorage.getItem(key) || fallback;\n      } catch (error) {\n        return fallback;\n      }\n    },\n    set(key, value) {\n      try {\n        window.localStorage.setItem(key, value);\n      } catch (error) {\n      }\n    }\n  };\n\n  const clearMotionStyles = () => {\n    qsa('[data-cgs-reveal], [data-hero-line], [data-hero-product], [data-hero-launch-card], [data-hero-spec], [data-launch-card]').forEach((item) => {\n      item.style.removeProperty('opacity');\n      item.style.removeProperty('transform');\n      item.style.removeProperty('visibility');\n    });\n  };\n\n  setPerformanceMode();\n  connection?.addEventListener?.('change', setPerformanceMode);\n\n  const initHeader = () => {\n    const header = qs('[data-cgs-header]');\n    if (!header || header.dataset.ready === 'true') return;\n    header.dataset.ready = 'true';\n\n    const setViewportHeight = () => {\n      const viewport = window.visualViewport;\n      const visualHeight = Math.round(viewport?.height || window.innerHeight);\n\n      document.documentElement.style.setProperty('--cgs-window-height', `${Math.round(window.innerHeight)}px`);\n      document.documentElement.style.setProperty('--cgs-visual-viewport-height', `${visualHeight}px`);\n    };\n\n    let queued = false;\n    const update = () => {\n      header.classList.toggle('is-scrolled', window.scrollY > 16);\n      queued = false;\n    };\n\n    setViewportHeight();\n    window.addEventListener('resize', setViewportHeight, { passive: true });\n    window.addEventListener('orientationchange', setViewportHeight);\n    window.visualViewport?.addEventListener('resize', setViewportHeight, { passive: true });\n    window.visualViewport?.addEventListener('scroll', setViewportHeight, { passive: true });\n\n    window.addEventListener('scroll', () => {\n      if (queued) return;\n      queued = true;\n      window.requestAnimationFrame(update);\n    }, { passive: true });\n\n    qsa('[data-drawer-link]', header).forEach((link) => {\n      link.addEventListener('click', () => {\n        const details = link.closest('details');\n        if (details) {\n          details.open = false;\n          details.classList.remove('is-product-panel');\n        }\n      });\n    });\n\n    const drawer = qs('.v4-drawer', header);\n    const productPanel = qs('[data-product-drawer-panel]', header);\n    const drawerMain = qs('[data-drawer-main]', header);\n    const productOpen = qs('[data-product-drawer-open]', header);\n    const productBack = qs('[data-product-drawer-back]', header);\n    const setProductPanel = (open) => {\n      if (!drawer || !productPanel || !productOpen) return;\n      drawer.classList.toggle('is-product-panel', open);\n      productOpen.setAttribute('aria-expanded', String(open));\n      productPanel.setAttribute('aria-hidden', String(!open));\n      productPanel.toggleAttribute('inert', !open);\n      drawerMain?.toggleAttribute('inert', open);\n      if (open) {\n        window.setTimeout(() => productBack?.focus({ preventScroll: true }), reduceMotion() ? 0 : 180);\n      } else if (drawer.open) {\n        productOpen.focus({ preventScroll: true });\n      }\n    };\n\n    productOpen?.addEventListener('click', () => setProductPanel(true));\n    productBack?.addEventListener('click', () => setProductPanel(false));\n    const setDrawerState = () => {\n      if (!drawer) return;\n      const isOpen = drawer.open;\n      document.documentElement.classList.toggle('cgs-drawer-open', isOpen);\n      document.body.classList.toggle('cgs-drawer-open', isOpen);\n      header.classList.toggle('is-drawer-open', isOpen);\n      if (isOpen) setViewportHeight();\n      if (!isOpen) setProductPanel(false);\n    };\n    drawer?.addEventListener('toggle', setDrawerState);\n\n    qsa('[data-product-guide-link]', header).forEach((link) => {\n      link.addEventListener('click', (event) => {\n        if (event.defaultPrevented || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button) return;\n        event.preventDefault();\n        window.location.assign(link.href);\n      });\n    });\n\n    qsa('[data-drawer-close]', header).forEach((button) => {\n      button.addEventListener('click', () => {\n        const details = button.closest('details');\n        setProductPanel(false);\n        if (details) details.open = false;\n      });\n    });\n\n    update();\n    setDrawerState();\n  };\n\n  const initLocalization = (root = document) => {\n    const recommendedLocales = {\n      AR: 'es',\n      AT: 'de',\n      AU: 'en',\n      BE: 'fr',\n      BR: 'pt-PT',\n      CA: 'en',\n      CH: 'de',\n      CL: 'es',\n      CN: 'zh-CN',\n      CO: 'es',\n      CR: 'es',\n      DE: 'de',\n      DK: 'da',\n      DO: 'es',\n      EC: 'es',\n      ES: 'es',\n      FI: 'fi',\n      FR: 'fr',\n      GB: 'en',\n      GR: 'el',\n      GT: 'es',\n      HK: 'zh-TW',\n      IE: 'en',\n      IN: 'en',\n      IT: 'it',\n      JP: 'ja',\n      KR: 'ko',\n      LI: 'de',\n      LU: 'fr',\n      MC: 'fr',\n      MO: 'zh-TW',\n      MX: 'es',\n      MY: 'en',\n      NL: 'nl',\n      NO: 'nb',\n      NZ: 'en',\n      PA: 'es',\n      PE: 'es',\n      PH: 'en',\n      PL: 'pl',\n      PT: 'pt-PT',\n      SG: 'en',\n      SM: 'it',\n      TW: 'zh-TW',\n      US: 'en',\n      UY: 'es',\n      VA: 'it',\n      ZA: 'en'\n    };\n\n    const findSupportedLocale = (recommended) => {\n      const options = qsa('select[name=\"locale_code\"] option')\n        .map((option) => option.value)\n        .filter(Boolean);\n      const available = new Set(options);\n      if (available.has(recommended)) return recommended;\n\n      const language = recommended?.split('-')[0]?.toLowerCase();\n      const languageMatch = options.find((locale) => {\n        const normalized = locale.toLowerCase();\n        return normalized === language || normalized.startsWith(`${language}-`);\n      });\n      if (languageMatch) return languageMatch;\n      if (available.has('en')) return 'en';\n      return options[0] || '';\n    };\n\n    const updateRecommendedLanguage = (countrySelect) => {\n      if (!countrySelect.matches('[data-country-locale-select]') || !countrySelect.form) return;\n      const localeInput = qs('[data-country-locale-input]', countrySelect.form);\n      if (!localeInput) return;\n\n      const countryCode = String(countrySelect.value || '').toUpperCase();\n      const nextLocale = findSupportedLocale(recommendedLocales[countryCode] || 'en');\n      if (!nextLocale) return;\n\n      localeInput.value = nextLocale;\n      qsa('select[name=\"locale_code\"]').forEach((languageSelect) => {\n        const supportsLocale = Array.from(languageSelect.options).some((option) => option.value === nextLocale);\n        if (supportsLocale) {\n          languageSelect.value = nextLocale;\n        }\n      });\n    };\n\n    qsa('[data-localization-select]', root).forEach((select) => {\n      if (select.dataset.ready === 'true') return;\n      select.dataset.ready = 'true';\n      select.addEventListener('change', () => {\n        updateRecommendedLanguage(select);\n        select.form?.submit();\n      });\n    });\n  };\n\n  const formatMoney = (cents, currency) => {\n    try {\n      const formatted = new Intl.NumberFormat(document.documentElement.lang || 'en', {\n        style: 'currency',\n        currency,\n        currencyDisplay: 'narrowSymbol'\n      }).format(Number(cents) / 100);\n      return `${formatted} ${currency}`;\n    } catch (error) {\n      return `${(Number(cents) / 100).toFixed(2)} ${currency}`;\n    }\n  };\n\n  const initCollectionControls = (root = document) => {\n    qsa('[data-collection-controls]', root).forEach((section) => {\n      if (section.dataset.collectionControlsReady === 'true') return;\n      section.dataset.collectionControlsReady = 'true';\n\n      const sortSelect = qs('[data-collection-sort]', section);\n      const viewButtons = qsa('[data-collection-view]', section);\n      const storageKey = `cgs-v4-collection-view-${section.dataset.collectionHandle || 'default'}`;\n\n      const refreshLayout = () => {\n        window.requestAnimationFrame(() => window.ScrollTrigger?.refresh?.());\n      };\n\n      const setView = (view, persist = true) => {\n        const nextView = view === 'list' ? 'list' : 'grid';\n        section.dataset.collectionLayout = nextView;\n        viewButtons.forEach((button) => {\n          button.setAttribute('aria-pressed', String(button.dataset.collectionView === nextView));\n        });\n        if (persist) {\n          safeStorage.set(storageKey, nextView);\n        }\n        refreshLayout();\n      };\n\n      const storedView = safeStorage.get(storageKey, 'grid');\n      setView(storedView, false);\n\n      viewButtons.forEach((button) => {\n        button.addEventListener('click', () => setView(button.dataset.collectionView));\n      });\n\n      sortSelect?.addEventListener('change', () => {\n        const url = new URL(window.location.href);\n        if (!sortSelect.value || sortSelect.value === sortSelect.dataset.defaultSort) {\n          url.searchParams.delete('sort_by');\n        } else {\n          url.searchParams.set('sort_by', sortSelect.value);\n        }\n        url.searchParams.delete('page');\n        window.location.assign(url.toString());\n      });\n    });\n  };\n\n  const initProductForms = (root = document) => {\n    qsa('[data-product-form]', root).forEach((form) => {\n      if (form.dataset.ready === 'true') return;\n      form.dataset.ready = 'true';\n      const select = qs('[data-variant-select]', form);\n      const data = qs('[data-product-json]', form);\n      const productRoot = form.closest('[data-product-root]') || form;\n      const prices = qsa('[data-product-price]', productRoot);\n      const comparePrices = qsa('[data-compare-price]', productRoot);\n      const addButtons = qsa('[data-add-button]', productRoot);\n      const checkoutButtons = qsa('[data-direct-checkout]', productRoot);\n      const buttons = [...addButtons, ...checkoutButtons];\n      const optionGroups = qsa('[data-product-option]', form);\n      const summary = qs('[data-variant-summary]', form);\n      if (!select || !data || !buttons.length) return;\n\n      let variants = [];\n      try {\n        variants = JSON.parse(data.textContent);\n      } catch (error) {\n        return;\n      }\n\n      let suppressSelectUpdate = false;\n\n      const localizeVariantTitle = (title) => {\n        const source = String(title || '');\n        return source\n          .replace(/\\bSoft\\b/g, form.dataset.variantSoftLabel || 'Soft')\n          .replace(/\\bHard\\b/g, form.dataset.variantHardLabel || 'Hard');\n      };\n\n      const activateGallery = (key) => {\n        if (!key) return;\n        qsa('[data-product-gallery-panel]', productRoot).forEach((panel) => {\n          const active = panel.dataset.productGalleryPanel === key;\n          panel.hidden = !active;\n          panel.classList.toggle('is-active', active);\n        });\n        qsa('[data-product-gallery-trigger]', productRoot).forEach((button) => {\n          const active = button.dataset.productGalleryTrigger === key;\n          button.classList.toggle('is-active', active);\n          button.setAttribute('aria-pressed', String(active));\n        });\n      };\n\n      const currentOptionValues = () => optionGroups.map((group) => {\n        const pressed = qs('[data-option-value][aria-pressed=\"true\"]', group) || qs('[data-option-value]', group);\n        return pressed?.dataset.optionValue;\n      });\n\n      const sizeKey = (variant) => {\n        return variant ? 'sizes' : null;\n      };\n\n      const update = (galleryKey) => {\n        const variant = variants.find((item) => String(item.id) === select.value);\n        if (!variant) return;\n        addButtons.forEach((button) => {\n          button.disabled = !variant.available;\n          const buttonLabel = qs('[data-add-label]', button);\n          if (buttonLabel) buttonLabel.textContent = variant.available ? form.dataset.addLabel : form.dataset.soldLabel;\n        });\n        checkoutButtons.forEach((button) => {\n          button.disabled = !variant.available;\n          const checkoutLabel = qs('[data-checkout-label]', button);\n          if (checkoutLabel) checkoutLabel.textContent = variant.available ? form.dataset.checkoutLabel : form.dataset.soldLabel;\n        });\n        prices.forEach((price) => {\n          price.textContent = formatMoney(variant.price, form.dataset.currency);\n        });\n        comparePrices.forEach((price) => {\n          const hasComparePrice = Number(variant.compare_at_price) > Number(variant.price);\n          price.hidden = !hasComparePrice;\n          if (hasComparePrice) price.textContent = formatMoney(variant.compare_at_price, form.dataset.currency);\n        });\n        if (summary) summary.textContent = localizeVariantTitle(variant.public_title || variant.title);\n        if (galleryKey) activateGallery(galleryKey);\n        const url = new URL(window.location.href);\n        url.searchParams.set('variant', variant.id);\n        window.history.replaceState({}, '', url);\n      };\n\n      optionGroups.forEach((group) => {\n        qsa('[data-option-value]', group).forEach((button) => {\n          button.addEventListener('click', () => {\n            qsa('[data-option-value]', group).forEach((item) => item.setAttribute('aria-pressed', String(item === button)));\n            const chosen = currentOptionValues();\n            const variant = variants.find((item) => item.options?.every((value, index) => String(value) === String(chosen[index])));\n            if (!variant) return;\n            select.value = String(variant.id);\n            update(Number(group.dataset.optionPosition) === 2 ? sizeKey(variant) : undefined);\n            suppressSelectUpdate = true;\n            select.dispatchEvent(new Event('change', { bubbles: true }));\n            suppressSelectUpdate = false;\n          });\n        });\n      });\n\n      qsa('[data-product-gallery-trigger]', productRoot).forEach((button) => {\n        button.addEventListener('click', () => activateGallery(button.dataset.productGalleryTrigger));\n      });\n\n      qsa('[data-size-jump]', productRoot).forEach((button) => {\n        button.addEventListener('click', () => {\n          const targetSize = button.dataset.sizeJump;\n          const sizeGroup = optionGroups.find((group) => Number(group.dataset.optionPosition) === 2);\n          if (!sizeGroup) return;\n          const option = qsa('[data-option-value]', sizeGroup).find((item) => String(item.dataset.optionValue).startsWith(targetSize));\n          option?.click();\n          productRoot.scrollIntoView({ behavior: reduceMotion() ? 'auto' : 'smooth', block: 'start' });\n        });\n      });\n\n      form.addEventListener('submit', (event) => {\n        if (form.dataset.submitting === 'true') {\n          event.preventDefault();\n          return;\n        }\n        form.dataset.submitting = 'true';\n        addButtons.forEach((button) => {\n          button.disabled = true;\n          button.classList.add('is-loading');\n        });\n      });\n\n      checkoutButtons.forEach((button) => {\n        button.addEventListener('click', async () => {\n          if (button.disabled || form.dataset.pendingCheckout === 'true') return;\n          form.dataset.pendingCheckout = 'true';\n          const previousButtonStates = buttons.map((item) => [item, item.disabled]);\n          checkoutButtons.forEach((item) => {\n            item.disabled = true;\n            item.classList.add('is-loading');\n          });\n          const rootPath = window.Shopify?.routes?.root || '/';\n          try {\n            const formData = new FormData(form);\n            const response = await fetch(`${rootPath}cart/add.js`, {\n              method: 'POST',\n              body: formData,\n              credentials: 'same-origin',\n              headers: {\n                Accept: 'application/json',\n                'X-Requested-With': 'XMLHttpRequest'\n              },\n            });\n            if (!response.ok) throw new Error('Cart add failed');\n            window.location.href = button.dataset.checkoutUrl || `${rootPath}checkout`;\n          } catch (error) {\n            form.dataset.pendingCheckout = 'false';\n            previousButtonStates.forEach(([item, wasDisabled]) => {\n              item.disabled = wasDisabled;\n              item.classList.remove('is-loading');\n            });\n            form.requestSubmit();\n          }\n        });\n      });\n\n      select.addEventListener('change', () => {\n        if (suppressSelectUpdate) return;\n        const variant = variants.find((item) => String(item.id) === select.value);\n        if (!variant) return;\n        optionGroups.forEach((group, index) => {\n          qsa('[data-option-value]', group).forEach((button) => {\n            button.setAttribute('aria-pressed', String(String(button.dataset.optionValue) === String(variant.options?.[index])));\n          });\n        });\n        update(sizeKey(variant));\n      });\n      update();\n    });\n  };\n\n  const initAeroExperience = (root = document) => {\n    qsa('[data-product-root]', root).forEach((productRoot) => {\n      if (productRoot.dataset.aeroReady === 'true') return;\n      productRoot.dataset.aeroReady = 'true';\n\n      qsa('[data-hardness-demo]', productRoot).forEach((demo) => {\n        const response = qs('.v4-aero-base__response', demo);\n        qsa('[data-hardness]', demo).forEach((button) => {\n          button.addEventListener('click', () => {\n            qsa('[data-hardness]', demo).forEach((item) => item.setAttribute('aria-pressed', String(item === button)));\n            const soft = button.dataset.hardness === 'soft';\n            response?.style.setProperty('--aero-compression', soft ? '0.38' : '0.78');\n            response?.style.setProperty('--aero-pressure', soft ? '3.8rem' : '2.1rem');\n          });\n        });\n      });\n    });\n  };\n\n  const initAeroFilm = (root = document) => {\n    qsa('[data-aero-film-toggle]', root).forEach((button) => {\n      if (button.dataset.ready === 'true') return;\n      button.dataset.ready = 'true';\n      const stage = button.closest('.v4-aero-film__stage');\n      const visual = qs('[data-aero-film-visual]', stage);\n      if (!visual) return;\n\n      const setPaused = (paused) => {\n        if (paused) {\n          visual.pause?.();\n        } else {\n          visual.play?.().catch(() => {});\n        }\n        button.setAttribute('aria-pressed', String(paused));\n        button.textContent = paused ? button.dataset.playLabel : button.dataset.pauseLabel;\n      };\n\n      if (reduceMotion()) setPaused(true);\n      else setPaused(visual.paused);\n      button.addEventListener('click', () => {\n        setPaused(button.getAttribute('aria-pressed') !== 'true');\n      });\n    });\n  };\n\n  const getMousepadCollectionUrl = () => {\n    const linkedCollection = qs('a[href*=\"/collections/mousepad\"]');\n    if (linkedCollection?.href) return linkedCollection.href;\n\n    const [firstSegment] = window.location.pathname.split('/').filter(Boolean);\n    const localePath = firstSegment && /^[a-z]{2}(-[a-z]{2,4})?$/i.test(firstSegment) ? `/${firstSegment}` : '';\n    return `${window.location.origin}${localePath}/collections/mousepad`;\n  };\n\n  const initHeroProductLink = (root = document) => {\n    qsa('.v4-hero__product-shell', root).forEach((shell) => {\n      if (shell.dataset.heroProductLinkReady === 'true') return;\n      shell.dataset.heroProductLinkReady = 'true';\n\n      const url = shell instanceof HTMLAnchorElement && shell.href ? shell.href : getMousepadCollectionUrl();\n      if (!(shell instanceof HTMLAnchorElement)) {\n        shell.setAttribute('role', 'link');\n        shell.setAttribute('tabindex', '0');\n        shell.style.cursor = 'pointer';\n      }\n\n      shell.addEventListener('click', (event) => {\n        if (event.defaultPrevented || event.button) return;\n\n        const nestedControl = event.target.closest('a, button, input, select, textarea, summary');\n        if (nestedControl && nestedControl !== shell) event.preventDefault();\n\n        if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n          window.open(url, '_blank', 'noopener');\n          return;\n        }\n\n        window.location.assign(url);\n      });\n\n      shell.addEventListener('keydown', (event) => {\n        if (shell instanceof HTMLAnchorElement || (event.key !== 'Enter' && event.key !== ' ')) return;\n        event.preventDefault();\n        window.location.assign(url);\n      });\n    });\n  };\n\n  let motionMedia;\n  const initMotion = async () => {\n    setPerformanceMode();\n    if (document.body.dataset.motionEnabled !== 'true' || prefersLiteExperience()) {\n      motionMedia?.revert();\n      clearMotionStyles();\n      return;\n    }\n\n    if (!window.gsap || !window.ScrollTrigger) {\n      const ready = await loadMotionRuntime();\n      if (!ready) return;\n    }\n\n    if (document.body.dataset.motionEnabled !== 'true' || prefersLiteExperience()) {\n      motionMedia?.revert();\n      clearMotionStyles();\n      return;\n    }\n\n    motionMedia?.revert();\n    window.gsap.registerPlugin(window.ScrollTrigger);\n    motionMedia = window.gsap.matchMedia();\n\n    motionMedia.add({\n      desktop: '(min-width: 990px)',\n      mobile: '(max-width: 989px)',\n      finePointer: '(pointer: fine)'\n    }, (context) => {\n      const { desktop, mobile, finePointer } = context.conditions;\n      const cleanups = [];\n\n      qsa('[data-cgs-hero]').forEach((hero, index) => {\n        const launchCards = qsa('[data-hero-launch-card]', hero);\n        const launchMedia = qsa('[data-hero-launch-card] img', hero);\n        const timeline = window.gsap.timeline({\n          defaults: { duration: 0.9, ease: 'power3.out' },\n          id: `cgs-v4-hero-${index}`\n        });\n        timeline\n          .from(qsa('[data-hero-meta]', hero), { y: 18, autoAlpha: 0, stagger: 0.08 }, 0.1)\n          .from(qsa('[data-hero-line]', hero), { yPercent: 110, rotation: 1.5, stagger: 0.1 }, 0.18)\n          .from(qsa('[data-hero-copy]', hero), { y: 24, autoAlpha: 0, stagger: 0.08 }, 0.45)\n          .from(qs('[data-hero-product]', hero), { xPercent: desktop ? 18 : 0, yPercent: mobile ? 8 : 0, scale: 0.88, rotation: 4, autoAlpha: 0 }, 0.28);\n\n        if (launchCards.length) {\n          timeline.from(launchCards, {\n            x: (itemIndex) => (desktop ? [24, -14, 18][itemIndex % 3] : 0),\n            y: mobile ? 24 : 34,\n            scale: 0.94,\n            rotation: (itemIndex) => (mobile ? 0 : [2.5, -1.5, 1.2][itemIndex % 3]),\n            autoAlpha: 0,\n            duration: 0.75,\n            stagger: 0.08\n          }, 0.46);\n        }\n\n        if (launchMedia.length) {\n          timeline.from(launchMedia, {\n            scale: 1.08,\n            duration: 1.05,\n            ease: 'power2.out',\n            stagger: 0.06,\n            clearProps: 'transform'\n          }, 0.52);\n        }\n\n        timeline.from(qsa('[data-hero-spec]', hero), { y: 20, autoAlpha: 0, stagger: 0.08 }, 0.68);\n\n        if (desktop) {\n          const product = qs('[data-hero-product]', hero);\n          const glow = qs('[data-hero-glow]', hero);\n          if (product) {\n            window.gsap.to(product, {\n              yPercent: -8,\n              rotation: -1.5,\n              ease: 'none',\n              scrollTrigger: {\n                id: `cgs-v4-hero-parallax-${index}`,\n                trigger: hero,\n                start: 'top top',\n                end: 'bottom top',\n                scrub: 0.8\n              }\n            });\n          }\n          if (glow) {\n            window.gsap.to(glow, {\n              xPercent: 18,\n              yPercent: -12,\n              ease: 'none',\n              scrollTrigger: {\n                id: `cgs-v4-hero-glow-${index}`,\n                trigger: hero,\n                start: 'top top',\n                end: 'bottom top',\n                scrub: 1.2\n              }\n            });\n          }\n        }\n      });\n\n      qsa('[data-launch-lines]').forEach((section, sectionIndex) => {\n        const head = qs('[data-launch-head]', section);\n        const cards = qsa('[data-launch-card]', section);\n        const mediaImages = qsa('[data-launch-media] img', section);\n        const timeline = window.gsap.timeline({\n          defaults: { duration: 0.82, ease: 'power3.out' },\n          scrollTrigger: {\n            id: `cgs-v4-launch-lines-${sectionIndex}`,\n            trigger: section,\n            start: 'top 76%',\n            once: true\n          }\n        });\n\n        if (head) {\n          timeline.from(head, { y: mobile ? 24 : 40, autoAlpha: 0 }, 0);\n        }\n\n        if (cards.length) {\n          timeline.from(cards, {\n            y: mobile ? 26 : 56,\n            autoAlpha: 0,\n            scale: 0.96,\n            rotation: (cardIndex) => (mobile ? 0 : [-1.8, 1.2, -0.8][cardIndex % 3]),\n            stagger: mobile ? 0.08 : 0.12\n          }, 0.15);\n        }\n\n        if (mediaImages.length) {\n          timeline.from(mediaImages, {\n            scale: 1.08,\n            duration: 1,\n            ease: 'power2.out',\n            stagger: 0.08,\n            clearProps: 'transform'\n          }, 0.26);\n        }\n\n        if (desktop) {\n          cards.forEach((card, cardIndex) => {\n            const media = qs('[data-launch-media]', card);\n            if (!media) return;\n            window.gsap.fromTo(media, {\n              yPercent: cardIndex === 1 ? 3 : 1\n            }, {\n              yPercent: cardIndex === 1 ? -5 : -7,\n              ease: 'none',\n              scrollTrigger: {\n                id: `cgs-v4-launch-media-${sectionIndex}-${cardIndex}`,\n                trigger: card,\n                start: 'top bottom',\n                end: 'bottom top',\n                scrub: 0.8\n              }\n            });\n          });\n        }\n      });\n\n      qsa('[data-cgs-reveal]').forEach((element, index) => {\n        window.gsap.from(element, {\n          y: mobile ? 28 : 48,\n          autoAlpha: 0,\n          duration: 0.85,\n          ease: 'power3.out',\n          scrollTrigger: {\n            id: `cgs-v4-reveal-${index}`,\n            trigger: element,\n            start: 'top 88%',\n            once: true\n          }\n        });\n      });\n\n      qsa('[data-cgs-story]').forEach((story, index) => {\n        const track = qs('[data-story-track]', story);\n        const viewport = qs('[data-story-viewport]', story);\n        if (!track || !viewport) return;\n\n        if (desktop) {\n          const onWheel = (event) => {\n            if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return;\n            const maxScroll = viewport.scrollWidth - viewport.clientWidth;\n            if (maxScroll <= 0) return;\n            const next = viewport.scrollLeft + event.deltaY;\n            const atStart = viewport.scrollLeft <= 0 && event.deltaY < 0;\n            const atEnd = viewport.scrollLeft >= maxScroll - 1 && event.deltaY > 0;\n            if (atStart || atEnd) return;\n            event.preventDefault();\n            viewport.scrollLeft = Math.max(0, Math.min(maxScroll, next));\n          };\n          viewport.addEventListener('wheel', onWheel, { passive: false });\n          cleanups.push(() => viewport.removeEventListener('wheel', onWheel));\n        }\n\n        qsa('[data-story-card]', track).forEach((card, cardIndex) => {\n          window.gsap.from(card, {\n            y: 36,\n            autoAlpha: 0,\n            duration: 0.7,\n            ease: 'power2.out',\n            scrollTrigger: {\n              id: `cgs-v4-story-card-${index}-${cardIndex}`,\n              trigger: card,\n              start: 'top 88%',\n              once: true\n            }\n          });\n        });\n      });\n\n      qsa('[data-aero-motion]').forEach((section, sectionIndex) => {\n        qsa('.v4-aero-intro__meter strong', section).forEach((number, numberIndex) => {\n          const target = Number(number.textContent);\n          const state = { value: 0 };\n          window.gsap.to(state, {\n            value: target,\n            duration: 1.25,\n            ease: 'power3.out',\n            snap: { value: 1 },\n            onUpdate: () => { number.textContent = String(state.value); },\n            scrollTrigger: {\n              id: `cgs-aero-meter-${sectionIndex}-${numberIndex}`,\n              trigger: section,\n              start: 'top 78%',\n              once: true\n            }\n          });\n        });\n      });\n\n      qsa('[data-aero-grip]').forEach((section, index) => {\n        const image = qs('.v4-aero-grip__media img', section);\n        if (!image) return;\n        window.gsap.fromTo(image, {\n          scale: 1.08,\n          yPercent: 4\n        }, {\n          scale: 1,\n          yPercent: -3,\n          ease: 'none',\n          scrollTrigger: {\n            id: `cgs-aero-grip-${index}`,\n            trigger: section,\n            start: 'top bottom',\n            end: 'bottom top',\n            scrub: 0.9\n          }\n        });\n      });\n\n      if (finePointer) {\n        qsa('[data-tilt-card]').forEach((card) => {\n          const media = qs('[data-tilt-media]', card) || card;\n          const xTo = window.gsap.quickTo(media, 'rotationY', { duration: 0.5, ease: 'power3.out' });\n          const yTo = window.gsap.quickTo(media, 'rotationX', { duration: 0.5, ease: 'power3.out' });\n          const onMove = (event) => {\n            const rect = card.getBoundingClientRect();\n            xTo(((event.clientX - rect.left) / rect.width - 0.5) * 7);\n            yTo(((event.clientY - rect.top) / rect.height - 0.5) * -7);\n          };\n          const onLeave = () => {\n            xTo(0);\n            yTo(0);\n          };\n          card.addEventListener('pointermove', onMove);\n          card.addEventListener('pointerleave', onLeave);\n          cleanups.push(() => {\n            card.removeEventListener('pointermove', onMove);\n            card.removeEventListener('pointerleave', onLeave);\n          });\n        });\n      }\n\n      return () => cleanups.forEach((cleanup) => cleanup());\n    });\n\n    const refresh = () => window.ScrollTrigger?.refresh?.();\n    if (document.fonts?.ready) document.fonts.ready.then(refresh);\n    qsa('img[loading=\"eager\"], [data-launch-lines] img').forEach((image) => {\n      if (!image.complete) image.addEventListener('load', refresh, { once: true });\n    });\n  };\n\n  class AimForge {\n    constructor(root) {\n      this.root = root;\n      this.arena = qs('[data-aim-arena]', root);\n      this.target = qs('[data-aim-target]', root);\n      this.dialog = qs('[data-aim-results]', root);\n      this.duration = Number(root.dataset.duration || 30);\n      this.mode = 'flick';\n      this.running = false;\n      this.paused = false;\n      this.hits = 0;\n      this.attempts = 0;\n      this.reactions = [];\n      this.placements = [];\n      this.streak = 0;\n      this.longestStreak = 0;\n      this.timer = 0;\n      this.nextTimer = 0;\n      this.audio = true;\n      this.audioContext = null;\n      this.root.dataset.input = matchMedia('(pointer: coarse)').matches ? 'touch' : 'pointer';\n      this.bind();\n      this.updateBest();\n      this.updateStats(this.duration);\n    }\n\n    bind() {\n      qsa('[data-aim-start]', this.root).forEach((button) => button.addEventListener('click', () => this.start()));\n      qs('[data-aim-restart]', this.root)?.addEventListener('click', () => {\n        this.dialog?.close();\n        this.start();\n      });\n      qs('[data-aim-share]', this.root)?.addEventListener('click', () => this.share());\n      qs('[data-aim-sound]', this.root)?.addEventListener('click', (event) => {\n        this.audio = !this.audio;\n        event.currentTarget.setAttribute('aria-pressed', String(this.audio));\n      });\n      qs('[data-aim-fullscreen]', this.root)?.addEventListener('click', () => {\n        if (!document.fullscreenElement) this.root.requestFullscreen?.();\n        else document.exitFullscreen?.();\n      });\n      qs('[data-aim-pause]', this.root)?.addEventListener('click', () => {\n        if (this.paused) this.resume();\n        else this.pause();\n      });\n      qs('[data-aim-resume]', this.root)?.addEventListener('click', () => this.resume());\n      qs('[data-aim-end]', this.root)?.addEventListener('click', () => this.finish(false));\n      qsa('[data-aim-mode]', this.root).forEach((button) => {\n        button.addEventListener('click', () => {\n          if (this.running || this.paused) return;\n          this.mode = button.dataset.aimMode;\n          qsa('[data-aim-mode]', this.root).forEach((item) => item.setAttribute('aria-pressed', String(item === button)));\n          this.updateModeLabels(button.textContent.trim());\n          this.updateBest();\n        });\n      });\n      this.target?.addEventListener('pointerdown', (event) => this.hit(event));\n      this.arena?.addEventListener('pointerdown', (event) => {\n        this.setInput(event.pointerType);\n        if (!this.running || this.paused || event.target === this.target || this.target?.contains(event.target)) return;\n        this.attempts += 1;\n        this.streak = 0;\n        this.updateStats();\n      });\n      this.arena?.addEventListener('keydown', (event) => {\n        if (event.key.toLowerCase() === 'r') {\n          event.preventDefault();\n          this.start();\n        }\n        if (event.key === 'Escape' && (this.running || this.paused)) {\n          event.preventDefault();\n          this.finish(false);\n        }\n        if (event.code === 'Space' && (this.running || this.paused)) {\n          event.preventDefault();\n          if (this.paused) this.resume();\n          else this.pause();\n        }\n      });\n    }\n\n    start() {\n      window.cancelAnimationFrame(this.timer);\n      window.clearTimeout(this.nextTimer);\n      if (this.dialog?.open) this.dialog.close();\n      this.running = true;\n      this.paused = false;\n      this.hits = 0;\n      this.attempts = 0;\n      this.reactions = [];\n      this.placements = [];\n      this.streak = 0;\n      this.longestStreak = 0;\n      this.startedAt = performance.now();\n      this.root.dataset.state = 'running';\n      this.setText('status', this.root.dataset.running);\n      this.setControls(true);\n      const pausedPanel = qs('[data-aim-paused]', this.root);\n      if (pausedPanel) pausedPanel.hidden = true;\n      this.updateStats(this.duration);\n      this.placeTarget();\n      this.tick();\n      this.arena?.focus({ preventScroll: true });\n    }\n\n    tick() {\n      if (!this.running || this.paused) return;\n      const elapsed = (performance.now() - this.startedAt) / 1000;\n      const remaining = Math.max(0, this.duration - elapsed);\n      this.updateStats(remaining);\n      if (remaining <= 0) {\n        this.finish(true);\n        return;\n      }\n      this.timer = window.requestAnimationFrame(() => this.tick());\n    }\n\n    placeTarget() {\n      if (!this.running || this.paused || !this.target || !this.arena) return;\n      const rect = this.arena.getBoundingClientRect();\n      const modeSize = this.mode === 'precision' ? 42 : this.mode === 'reflex' ? 60 : 52;\n      const coarseMinimum = matchMedia('(pointer: coarse)').matches ? 56 : 42;\n      const size = Math.max(coarseMinimum, Math.min(modeSize, rect.width * 0.14));\n      const pad = size / 2 + 10;\n      const x = pad + Math.random() * Math.max(1, rect.width - pad * 2);\n      const y = pad + Math.random() * Math.max(1, rect.height - pad * 2);\n      this.target.style.setProperty('--aim-size', `${size}px`);\n      this.target.style.left = `${x}px`;\n      this.target.style.top = `${y}px`;\n      this.target.hidden = false;\n      this.targetShownAt = performance.now();\n      if (window.gsap && !reduceMotion()) {\n        window.gsap.fromTo(this.target, { scale: 0.45, autoAlpha: 0 }, { scale: 1, autoAlpha: 1, duration: 0.28, ease: 'back.out(1.9)', overwrite: true });\n      }\n    }\n\n    hit(event) {\n      if (!this.running || this.paused) return;\n      event.preventDefault();\n      event.stopPropagation();\n      this.setInput(event.pointerType);\n      const reaction = performance.now() - this.targetShownAt;\n      const rect = this.target.getBoundingClientRect();\n      const distance = Math.hypot(event.clientX - (rect.left + rect.width / 2), event.clientY - (rect.top + rect.height / 2));\n      const placement = this.limit(1 - (distance / Math.max(rect.width / 2, 1)) * 0.5);\n      this.hits += 1;\n      this.attempts += 1;\n      this.streak += 1;\n      this.longestStreak = Math.max(this.longestStreak, this.streak);\n      this.reactions.push(reaction);\n      this.placements.push(placement);\n      this.beep();\n      this.target.hidden = true;\n      this.updateStats();\n      const delay = this.mode === 'reflex' ? 90 + Math.random() * 420 : 90;\n      this.nextTimer = window.setTimeout(() => this.placeTarget(), delay);\n    }\n\n    pause() {\n      if (!this.running || this.paused) return;\n      this.paused = true;\n      this.pauseStartedAt = performance.now();\n      this.root.dataset.state = 'paused';\n      window.cancelAnimationFrame(this.timer);\n      window.clearTimeout(this.nextTimer);\n      this.target.hidden = true;\n      const pausedPanel = qs('[data-aim-paused]', this.root);\n      if (pausedPanel) pausedPanel.hidden = false;\n      this.setText('status', this.root.dataset.paused);\n      const pauseButton = qs('[data-aim-pause]', this.root);\n      if (pauseButton) pauseButton.textContent = this.root.dataset.resumeLabel;\n    }\n\n    resume() {\n      if (!this.running || !this.paused) return;\n      this.startedAt += performance.now() - this.pauseStartedAt;\n      this.paused = false;\n      this.root.dataset.state = 'running';\n      const pausedPanel = qs('[data-aim-paused]', this.root);\n      if (pausedPanel) pausedPanel.hidden = true;\n      this.setText('status', this.root.dataset.running);\n      const pauseButton = qs('[data-aim-pause]', this.root);\n      if (pauseButton) pauseButton.textContent = this.root.dataset.pauseLabel;\n      this.placeTarget();\n      this.tick();\n      this.arena?.focus({ preventScroll: true });\n    }\n\n    finish(ranked = false) {\n      if (!this.running && !this.paused) return;\n      this.running = false;\n      this.paused = false;\n      this.root.dataset.state = 'complete';\n      window.cancelAnimationFrame(this.timer);\n      window.clearTimeout(this.nextTimer);\n      this.target.hidden = true;\n      window.setTimeout(() => {\n        if (this.running) return;\n        this.audioContext?.close?.();\n        this.audioContext = null;\n      }, 300);\n      this.setText('status', this.root.dataset.complete);\n      this.updateStats(0);\n      this.setControls(false);\n      const components = this.scoreComponents();\n      const previousBest = this.bestScore();\n      const canRank = ranked && this.hits >= 6;\n      const newBest = canRank && components.total > previousBest;\n      if (newBest) safeStorage.set(this.bestKey(), String(components.total));\n      this.updateBest();\n      qsa('[data-aim-result]', this.root).forEach((element) => {\n        const key = element.dataset.aimResult;\n        if (key === 'score') element.textContent = String(components.total);\n        if (key === 'grade') element.textContent = this.grade(components.total);\n        if (key === 'hits') element.textContent = String(this.hits);\n        if (key === 'misses') element.textContent = String(this.misses());\n        if (key === 'fastest') element.textContent = this.fastest();\n        if (key === 'streak') element.textContent = String(this.longestStreak);\n      });\n      qsa('[data-aim-result-mode]', this.root).forEach((element) => { element.textContent = this.modeLabel(); });\n      this.updateBreakdown(components);\n      const resultNote = qs('[data-aim-result-note]', this.root);\n      if (resultNote) {\n        if (newBest) resultNote.textContent = this.root.dataset.newBest;\n        else if (!canRank) resultNote.textContent = this.root.dataset.unranked;\n      }\n      this.dialog?.showModal();\n    }\n\n    accuracy() {\n      return this.attempts ? Math.round((this.hits / this.attempts) * 100) : 100;\n    }\n\n    misses() {\n      return Math.max(0, this.attempts - this.hits);\n    }\n\n    averageMs() {\n      if (!this.reactions.length) return 0;\n      return this.reactions.reduce((sum, value) => sum + value, 0) / this.reactions.length;\n    }\n\n    average() {\n      const average = this.averageMs();\n      return average ? `${Math.round(average)} ms` : '--';\n    }\n\n    fastest() {\n      if (!this.reactions.length) return '--';\n      return `${Math.round(Math.min(...this.reactions))} ms`;\n    }\n\n    scoreComponents() {\n      if (!this.hits) return { accuracy: 0, speed: 0, consistency: 0, control: 0, total: 0, consistencyRate: 0, controlRate: 0 };\n      const hitRate = this.hits / Math.max(this.attempts, 1);\n      const accuracy = Math.round(hitRate * hitRate * 400);\n      const average = this.averageMs();\n      const benchmarks = {\n        flick: { elite: 220, slow: 900 },\n        precision: { elite: 280, slow: 1050 },\n        reflex: { elite: 180, slow: 850 }\n      };\n      const benchmark = benchmarks[this.mode] || benchmarks.flick;\n      const confidence = this.limit(this.hits / 8);\n      const speedRate = this.limit((benchmark.slow - average) / (benchmark.slow - benchmark.elite));\n      const speed = Math.round(speedRate * 350 * confidence);\n      const mean = average;\n      const variance = this.reactions.reduce((sum, value) => sum + ((value - mean) ** 2), 0) / this.reactions.length;\n      const deviation = Math.sqrt(variance);\n      const consistencyRate = this.reactions.length < 3 ? 0 : this.limit(1 - deviation / Math.max(mean * 0.55, 1));\n      const consistency = Math.round(consistencyRate * 150 * confidence);\n      const controlRate = this.placements.length\n        ? this.placements.reduce((sum, value) => sum + value, 0) / this.placements.length\n        : 0;\n      const control = Math.round(controlRate * 100 * confidence);\n      return {\n        accuracy,\n        speed,\n        consistency,\n        control,\n        total: accuracy + speed + consistency + control,\n        consistencyRate,\n        controlRate\n      };\n    }\n\n    grade(score) {\n      if (score >= 900) return 'S';\n      if (score >= 800) return 'A';\n      if (score >= 650) return 'B';\n      if (score >= 500) return 'C';\n      return 'D';\n    }\n\n    updateStats(remaining) {\n      const time = remaining === undefined\n        ? Math.max(0, this.duration - (performance.now() - this.startedAt) / 1000)\n        : remaining;\n      const components = this.scoreComponents();\n      this.setText('time', time.toFixed(1));\n      this.setText('hits', String(this.hits));\n      this.setText('accuracy', `${this.accuracy()}%`);\n      this.setText('average', this.average());\n      this.setText('score', String(components.total));\n      this.setText('grade', this.grade(components.total));\n      this.setText('streak', String(this.streak));\n      this.setText('misses', String(this.misses()));\n      this.root.style.setProperty('--aim-progress', `${Math.max(0, Math.min(1, time / this.duration)) * 100}%`);\n      const progressTime = qs('.v4-aim__progress > b', this.root);\n      if (progressTime) progressTime.textContent = time.toFixed(1);\n    }\n\n    updateBest() {\n      const best = this.bestScore();\n      this.setText('best', best ? String(best) : '--');\n    }\n\n    bestKey() {\n      return `cgs-v4-aim-best-${this.mode}`;\n    }\n\n    bestScore() {\n      return Number(safeStorage.get(this.bestKey(), '0')) || 0;\n    }\n\n    updateModeLabels(label) {\n      qsa('[data-aim-mode-label]', this.root).forEach((element) => { element.textContent = label; });\n      qsa('[data-aim-result-mode]', this.root).forEach((element) => { element.textContent = label; });\n      const readyLabel = qs('[data-aim-ready] > span', this.root);\n      if (readyLabel) readyLabel.textContent = `AF.01 / ${label}`;\n    }\n\n    modeLabel() {\n      return qs(`[data-aim-mode=\"${this.mode}\"]`, this.root)?.textContent.trim() || this.mode;\n    }\n\n    updateBreakdown(components) {\n      Object.entries(components).forEach(([key, value]) => {\n        const element = qs(`[data-aim-breakdown=\"${key}\"]`, this.root);\n        if (element) element.textContent = String(value);\n      });\n      const metrics = {\n        accuracy: `${this.accuracy()}%`,\n        speed: this.average(),\n        consistency: `${Math.round(components.consistencyRate * 100)}%`,\n        control: `${Math.round(components.controlRate * 100)}%`\n      };\n      Object.entries(metrics).forEach(([key, value]) => {\n        const element = qs(`[data-aim-breakdown-metric=\"${key}\"]`, this.root);\n        if (element) element.textContent = value;\n      });\n    }\n\n    setControls(active) {\n      const pauseButton = qs('[data-aim-pause]', this.root);\n      const endButton = qs('[data-aim-end]', this.root);\n      qsa('[data-aim-mode]', this.root).forEach((button) => { button.disabled = active; });\n      if (pauseButton) {\n        pauseButton.disabled = !active;\n        pauseButton.textContent = this.root.dataset.pauseLabel;\n      }\n      if (endButton) endButton.disabled = !active;\n    }\n\n    setText(key, value) {\n      qsa(`[data-aim-stat=\"${key}\"]`, this.root).forEach((element) => { element.textContent = value; });\n    }\n\n    setInput(pointerType) {\n      this.root.dataset.input = pointerType === 'touch' ? 'touch' : 'pointer';\n    }\n\n    limit(value, min = 0, max = 1) {\n      return Math.max(min, Math.min(max, value));\n    }\n\n    beep() {\n      const AudioContextClass = window.AudioContext || window.webkitAudioContext;\n      if (!this.audio || !AudioContextClass) return;\n      const context = this.audioContext || new AudioContextClass();\n      this.audioContext = context;\n      context.resume?.();\n      const oscillator = context.createOscillator();\n      const gain = context.createGain();\n      oscillator.frequency.value = 520 + Math.min(this.hits, 12) * 18;\n      gain.gain.setValueAtTime(0.035, context.currentTime);\n      gain.gain.exponentialRampToValueAtTime(0.0001, context.currentTime + 0.06);\n      oscillator.connect(gain).connect(context.destination);\n      oscillator.start();\n      oscillator.stop(context.currentTime + 0.06);\n      oscillator.addEventListener('ended', () => {\n        oscillator.disconnect();\n        gain.disconnect();\n      });\n    }\n\n    async share() {\n      const components = this.scoreComponents();\n      const text = `Cero Aim Forge ${this.modeLabel()}: ${components.total}/1000 (${this.grade(components.total)}) / ${this.accuracy()}% / ${this.average()}`;\n      try {\n        await navigator.clipboard.writeText(text);\n      } catch (error) {\n        return;\n      }\n      const announcement = qs('[data-aim-announcement]', this.root);\n      if (announcement) announcement.textContent = this.root.dataset.copySuccess;\n    }\n  }\n\n  const initAimForge = (root = document) => {\n    qsa('[data-aim-forge]', root).forEach((element) => {\n      if (element.dataset.ready === 'true') return;\n      element.dataset.ready = 'true';\n      new AimForge(element);\n    });\n  };\n\n  const initialize = (root = document) => {\n    initHeader();\n    initLocalization(root);\n    initCollectionControls(root);\n    initProductForms(root);\n    initAeroExperience(root);\n    initAeroFilm(root);\n    initHeroProductLink(root);\n    initAimForge(root);\n  };\n\n  document.addEventListener('DOMContentLoaded', () => {\n    initialize();\n    initMotion();\n  });\n\n  document.addEventListener('shopify:section:load', (event) => {\n    initialize(event.target);\n    initMotion();\n  });\n\n  document.addEventListener('shopify:section:reorder', initMotion);\n})();\n"],
  "mappings": "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",
  "names": []
}
