{
  "version": 3,
  "sources": ["/cdn/shop/t/57/assets/spiral-codex-homepage.js?scv=revenue-reliability-20260519a"],
  "sourcesContent": ["(() => {\n  const runSpiralCodexHomepage = () => {\n    if (window.__spiralCodexHomepageInitialized) return;\n    window.__spiralCodexHomepageInitialized = true;\n\nconst shopifyConfig = {\n  discountCode: null,\n  core: {\n    digital: { id: 43149542555684, label: \"Spiral Combat Codex - Digital\", price: 97 },\n    physical: { id: 43149542588452, label: \"Spiral Combat Codex - Print pre-order + Digital\", price: 197 }\n  },\n  rules: {\n    \"1\": { id: 43120708747300, label: \"Rule 01 - State Decides Sight\", price: 5 },\n    \"2\": { id: 43120721559588, label: \"Rule 02 - Breath Is the Steering Wheel\", price: 5 },\n    \"3\": { id: 43120721592356, label: \"Rule 03 - Permission Is the First Battle\", price: 5 },\n    \"4\": { id: 43120721625124, label: \"Rule 04 - Calm Is Not Softness\", price: 5 },\n    \"5\": { id: 43120721657892, label: \"Rule 05 - Tension Lies\", price: 5 },\n    \"6\": { id: 43120721690660, label: \"Rule 06 - Fear Is Data\", price: 5 }\n  },\n  applications: {\n    MMA: { id: 43552555532324, physicalId: 43552555565092, label: \"The MMA Codex\" },\n    Boxing: { id: 43552548618276, physicalId: 43552548651044, label: \"The Boxing Codex\" },\n    Wrestling: { id: 43552548847652, physicalId: 43552548880420, label: \"The Wrestling Codex\" },\n    \"Muay Thai\": { id: 43552549371940, physicalId: 43552549404708, label: \"The Muay Thai Codex\" },\n    \"Jiu-Jitsu\": { id: 43552550191140, physicalId: 43552550223908, label: \"The Jiu-Jitsu Codex\" },\n    Kickboxing: { id: 43552553762852, physicalId: 43552553795620, label: \"The Kickboxing Codex\" },\n    Judo: { id: 43552554811428, physicalId: 43552554844196, label: \"The Judo Codex\" },\n    \"Karate / Taekwondo\": { id: 43552555204644, physicalId: 43552555237412, label: \"The Karate & Taekwondo Codex\" },\n    \"Wing Chun\": { id: 44213346205732, physicalId: 44213346238500, label: \"The Wing Chun Codex\" },\n    \"Tai Chi\": { id: 44213353021476, physicalId: 44213353054244, label: \"The Tai Chi Codex\" },\n    Silat: { id: 51947190812708, physicalId: null, label: \"The Silat Codex\" }\n  },\n  doctrines: {\n    \"elemental-fire\": { id: 43879487045668, label: \"Elemental Series: The Fire Manual\", price: 29, group: \"elemental\" },\n    \"elemental-water\": { id: 43879488552996, label: \"Elemental Series: The Water Manual\", price: 29, group: \"elemental\" },\n    \"elemental-earth\": { id: 43879488815140, label: \"Elemental Series: The Earth Manual\", price: 29, group: \"elemental\" },\n    \"elemental-air\": { id: 43879488585764, label: \"Elemental Series: The Air Manual\", price: 29, group: \"elemental\" },\n    \"elemental-void\": { id: 43879488978980, label: \"Elemental Series: The Void Manual\", price: 29, group: \"elemental\" },\n    \"women-best-martial-arts\": { id: 43866661355556, label: \"Best Martial Arts for Women\", price: 29, group: \"women\" },\n    \"women-warrior-code\": { id: 43865385893924, label: \"The Woman Warrior Code\", price: 29, group: \"women\" },\n    \"women-hard-to-intimidate\": { id: 43865386352676, label: \"Hard to Intimidate\", price: 29, group: \"women\" },\n    \"women-undersized-fighter\": { id: 43865386221604, label: \"The Undersized Fighter\", price: 29, group: \"women\" },\n    \"martial-worldview\": { id: 43943151534116, label: \"The Martial Worldview\", price: 97, group: \"worldview\" }\n  },\n  doctrineBundles: {\n    elemental: [\"elemental-fire\", \"elemental-water\", \"elemental-earth\", \"elemental-air\", \"elemental-void\"],\n    women: [\"women-best-martial-arts\", \"women-warrior-code\", \"women-hard-to-intimidate\", \"women-undersized-fighter\"]\n  },\n  pass: { id: 42738463604772, sellingPlanId: 21563899940, label: \"Fight Intelligence Pass\", price: 99 }\n};\n\ndocument.body?.classList.add(\"sc-codex-homepage-active\");\nif (window.Shopify || window.location.hostname.includes(\"spiralcombat.com\")) {\n  document.querySelectorAll(\"[data-shopify-href]\").forEach((link) => {\n    link.setAttribute(\"href\", link.getAttribute(\"data-shopify-href\"));\n  });\n}\n\nconst applicationNames = Object.keys(shopifyConfig.applications);\nconst bundleApplicationNames = applicationNames.filter((name) => name !== \"Silat\");\nconst getAvailableApplicationNames = () => applicationNames.filter((name) => state.applicationFormat === \"digital\" || Boolean(shopifyConfig.applications[name].physicalId));\nconst getApplicationCount = () => bundleApplicationNames.length;\nconst state = {\n  core: null,\n  selectedRules: [],\n  appMode: \"none\",\n  applicationFormat: \"digital\",\n  discipline: \"MMA\",\n  selectedApplications: [],\n  selectedDoctrines: [],\n  pass: false\n};\nconst prices = {\n  digital: 97,\n  physical: 197,\n  appOne: null,\n  appPhysicalOne: 197,\n  pass: 99\n};\n\n// Only the existing ten standard Digital identities participate in this price bridge.\nconst standardDigitalIdentities = {\"Boxing\":{\"id\":43552548618276,\"product_id\":8126655299620,\"handle\":\"the-boxing-codex\u2122\",\"sku\":\"CODEX-DIGITAL-BOXING\"},\"Wrestling\":{\"id\":43552548847652,\"product_id\":8126655397924,\"handle\":\"the-wrestling-codex\u2122\",\"sku\":\"CODEX-DIGITAL-WRESTLING\"},\"Muay Thai\":{\"id\":43552549371940,\"product_id\":8126655823908,\"handle\":\"the-muay-thai-codex\u2122\",\"sku\":\"CODEX-DIGITAL-MUAY-THAI\"},\"Jiu-Jitsu\":{\"id\":43552550191140,\"product_id\":8126656282660,\"handle\":\"the-jiu-jitsu-codex\u2122\",\"sku\":\"CODEX-DIGITAL-JIU-JITSU\"},\"Kickboxing\":{\"id\":43552553762852,\"product_id\":8126658314276,\"handle\":\"the-kickboxing-codex\u2122\",\"sku\":\"CODEX-DIGITAL-KICKBOXING\"},\"Judo\":{\"id\":43552554811428,\"product_id\":8126658969636,\"handle\":\"the-judo-codex\u2122\",\"sku\":\"CODEX-DIGITAL-JUDO\"},\"MMA\":{\"id\":43552555532324,\"product_id\":8126659428388,\"handle\":\"the-mma-codex\u2122\",\"sku\":\"CODEX-DIGITAL-MMA\"},\"Wing Chun\":{\"id\":44213346205732,\"product_id\":8305875222564,\"handle\":\"the-wing-chun-codex\u2122\",\"sku\":\"CODEX-DIGITAL-WING-CHUN\"},\"Tai Chi\":{\"id\":44213353021476,\"product_id\":8305877909540,\"handle\":\"the-tai-chi-codex\u2122\",\"sku\":\"CODEX-DIGITAL-TAI-CHI\"},\"Karate / Taekwondo\":{\"id\":43552555204644,\"product_id\":8126659264548,\"handle\":\"the-karate-taekwondo-codex\u2122\",\"sku\":\"CODEX-DIGITAL-KARATE-TAEKWONDO\"}};\nlet standardDigitalPrices = readStandardDigitalPrices();\nfunction readStandardDigitalPrices() {\n  try {\n    const node = document.querySelector('[data-sc-standard-digital-prices]');\n    const data = JSON.parse(node?.textContent || 'null');\n    if (!data || !/^[A-Z]{3}$/.test(data.currency) || !data.books || Object.keys(data.books).length !== 10) return null;\n    const books = {};\n    for (const [name, identity] of Object.entries(standardDigitalIdentities)) {\n      const book = data.books[name];\n      if (!book || book.id !== identity.id || book.product_id !== identity.product_id || book.handle !== identity.handle || book.sku !== identity.sku || !Number.isSafeInteger(book.price) || book.price <= 0 || (data.currency === 'USD' && ![2900, 9700].includes(book.price)) || typeof book.available !== 'boolean') return null;\n      books[name] = { ...book };\n    }\n    return { currency: data.currency, books };\n  } catch { return null; }\n}\nfunction standardDigitalUnitPrice(name) {\n  return standardDigitalPrices?.currency === 'USD' ? standardDigitalPrices.books[name]?.price / 100 || null : null;\n}\nfunction applicationMoney(value) {\n  return value === null ? 'See cart' : money(value);\n}\nasync function verifyStandardDigitalPrices(lines) {\n  const selected = Object.entries(standardDigitalIdentities).filter(([, identity]) => lines.some(line => String(line.id) === String(identity.id)));\n  if (!selected.length) return { ok: true };\n  if (!standardDigitalPrices) return { ok: false, message: 'Reload this page to review current Digital prices before continuing.' };\n  const controller = new AbortController();\n  const timer = window.setTimeout(() => controller.abort(), 12000);\n  const read = async path => {\n    const response = await fetch(getRoutesRoot() + path, { credentials: 'same-origin', cache: 'no-store', signal: controller.signal });\n    if (!response.ok) throw Error('Price read failed');\n    return response.json();\n  };\n  try {\n    const cart = await read('cart.js');\n    if (cart.currency !== standardDigitalPrices.currency) return { ok: false, message: 'Reload this page to review prices in your current checkout currency.' };\n    const updates = [];\n    for (const [name, identity] of selected) {\n      const product = await read('products/' + encodeURIComponent(identity.handle) + '.js');\n      const variant = product.variants?.find(v => String(v.id) === String(identity.id));\n      if (String(product.id) !== String(identity.product_id) || !variant || !variant.available || variant.requires_shipping || product.requires_selling_plan || variant.requires_selling_plan || (Object.hasOwn(variant, 'sku') && variant.sku !== identity.sku) || !Number.isSafeInteger(variant.price) || variant.price <= 0 || (cart.currency === 'USD' && ![2900, 9700].includes(variant.price))) return { ok: false, message: 'A Digital edition or its current price could not be verified. Review your cart before continuing.' };\n      updates.push([name, variant.price]);\n    }\n    const changed = updates.some(([name, price]) => standardDigitalPrices.books[name].price !== price);\n    for (const [name, price] of updates) standardDigitalPrices.books[name].price = price;\n    return changed ? { ok: false, changed: true, message: 'Digital prices changed. Review the updated regular-price subtotal, then continue when ready.' } : { ok: true, reviewCart: cart.currency !== 'USD' };\n  } catch { return { ok: false, message: 'Current Digital prices could not be verified. Please try again; no payment has started.' }; }\n  finally { window.clearTimeout(timer); }\n}\n\nlet summaryList = document.querySelector(\"#summary-list\");\nlet oneTimeTotal = document.querySelector(\"#one-time-total\");\nlet monthlyTotal = document.querySelector(\"#monthly-total\");\nlet stickySummary = document.querySelector(\".sticky-summary\");\nlet stickyLabel = document.querySelector(\"#sticky-label\");\nlet stickyTotal = document.querySelector(\"#sticky-total\");\nlet stickyBonusProgress = document.querySelector(\"#sticky-bonus-progress\");\nlet stickyCartItems = document.querySelector(\"#sticky-cart-items\");\nlet stickyCheckoutButton = document.querySelector(\"#sticky-checkout-button\");\nlet stickyCartToggle = document.querySelector(\"#sticky-cart-toggle\");\nlet stickyCartDrawer = document.querySelector(\"#sticky-cart-drawer\");\nlet stickyBonusToggle = document.querySelector(\"#sticky-bonus-toggle\");\nlet stickyBonusPanel = document.querySelector(\"#sticky-bonus-panel\");\nlet loadoutProgressLabel = document.querySelector(\"#loadout-progress-label\");\nlet loadoutMeterFill = document.querySelector(\"#loadout-meter-fill\");\nlet loadoutTierList = document.querySelector(\"#loadout-tier-list\");\nlet loadoutToast = document.querySelector(\"#loadout-toast\");\nlet loadoutDeliverySummary = document.querySelector(\"#loadout-delivery-summary\");\nlet successItems = document.querySelector(\"#success-items\");\nlet checkoutForm = document.querySelector(\"#checkout-form\");\nlet successScreen = document.querySelector(\"#success-screen\");\nlet formError = document.querySelector(\"#form-error\");\nlet disciplineSelect = document.querySelector(\"#discipline-select\");\nlet emailInput = document.querySelector(\"#email\");\nlet nameInput = document.querySelector(\"#full-name\");\nlet marketingConsentInput = document.querySelector(\"#marketing-consent\");\nlet submitButton = document.querySelector(\"#complete-order\");\nlet applicationUpsell = document.querySelector(\"[data-application-upsell]\");\nlet applicationCards = document.querySelectorAll(\".application-card[data-application]\");\nlet applicationAllButton = document.querySelector(\"[data-app-card-all]\");\nlet applicationFormatButtons = document.querySelectorAll(\"[data-app-format]\");\nlet applicationReviewButtons = document.querySelectorAll(\"[data-app-review]\");\nlet applicationClearButtons = document.querySelectorAll(\"[data-app-clear]\");\nlet applicationSelectionNote = document.querySelector(\"[data-application-selection-note]\");\nlet applicationSelectionPanel = document.querySelector(\"[data-application-selection-panel]\");\nlet applicationSelectionCount = document.querySelector(\"[data-application-selection-count]\");\nlet applicationSelectionMessage = document.querySelector(\"[data-application-selection-message]\");\nlet doctrineButtons = document.querySelectorAll(\"[data-doctrine]\");\nlet previousUnlockedTierIds = new Set();\nlet loadoutProgressInitialized = false;\nlet loadoutToastTimer = null;\nlet stickyCartExpanded = false;\nlet doctrineBundleButtons = document.querySelectorAll(\"[data-doctrine-bundle]\");\nlet doctrineSelectionNote = document.querySelector(\"[data-doctrine-selection-note]\");\nlet ruleCards = document.querySelectorAll(\".rule-card[data-rule]\");\nconst applicationToast = document.createElement(\"div\");\nlet applicationToastTimer;\nconst fallbackProductImages = {\n  codex: \"https://cdn.shopify.com/s/files/1/0746/7214/4420/files/Spiral_Combat_Codex_Book.png?v=1768098184&width=220\",\n  rules: \"https://cdn.shopify.com/s/files/1/0746/7214/4420/files/Rule1.png?v=1768101791&width=220\",\n  applications: \"https://cdn.shopify.com/s/files/1/0746/7214/4420/files/TheMMACodex.png?v=1770748497&width=220\",\n  pass: \"https://cdn.shopify.com/s/files/1/0746/7214/4420/files/Logo.png?width=220\",\n  bonus: \"https://cdn.shopify.com/s/files/1/0746/7214/4420/files/Logo.png?width=220\"\n};\nconst directCheckoutLead = Object.freeze({ email: \"\", name: \"\", marketingConsent: false });\n\napplicationToast.className = \"application-toast\";\napplicationToast.setAttribute(\"role\", \"status\");\napplicationToast.setAttribute(\"aria-live\", \"polite\");\ndocument.body.appendChild(applicationToast);\n\nconst funnelVersion = \"cro-next-pass-20260614-local\";\nconst funnelEventQueueKey = \"spiralCodexFunnelEvents\";\nconst funnelEvents = window.__spiralCodexFunnelEvents = window.__spiralCodexFunnelEvents || [];\nlet lastCartSignature = \"uninitialized\";\nlet cartUpdateSource = \"initial\";\nconst viewedFunnelSections = new Set();\n\nfunction getSafeStorage(kind) {\n  try {\n    return window[kind] || null;\n  } catch {\n    return null;\n  }\n}\n\nconst localStorageRef = getSafeStorage(\"localStorage\");\nconst sessionStorageRef = getSafeStorage(\"sessionStorage\");\n\nfunction createTrackingId(prefix) {\n  const random = window.crypto?.randomUUID?.() || `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n  return `${prefix}_${random}`;\n}\n\nfunction safeStorageGet(storage, key) {\n  try {\n    return storage?.getItem(key) || \"\";\n  } catch {\n    return \"\";\n  }\n}\n\nfunction safeStorageSet(storage, key, value) {\n  try {\n    storage?.setItem(key, value);\n  } catch {\n    // Storage can be unavailable in private or embedded browser contexts.\n  }\n}\n\nfunction getOrCreateTrackingId(storage, key, prefix) {\n  const existing = safeStorageGet(storage, key);\n  if (existing) return existing;\n  const next = createTrackingId(prefix);\n  safeStorageSet(storage, key, next);\n  return next;\n}\n\nconst visitorId = getOrCreateTrackingId(localStorageRef, \"spiralCodexVisitorId\", \"scv\");\nconst sessionId = getOrCreateTrackingId(sessionStorageRef, \"spiralCodexSessionId\", \"scs\");\n\nfunction getCartSignature(items = getItems()) {\n  return items.map((item) => `${item.removeType}:${item.removeKey}:${item.cadence}:${item.price}`).join(\"|\") || \"empty\";\n}\n\nfunction getCartSnapshot() {\n  const items = getItems();\n  const totals = getTotals();\n  const loadout = getLoadoutAttributeSummary();\n  const lines = getShopifyLines();\n  return {\n    itemCount: items.length,\n    lineCount: lines.length,\n    oneTime: totals.oneTime,\n    monthly: totals.monthly,\n    core: state.core,\n    selectedRules: getSelectedRuleKeys(),\n    selectedApplications: getSelectedApplications(),\n    selectedDoctrines: getSelectedDoctrineKeys(),\n    pass: state.pass,\n    unlockedBonusCount: loadout.unlocked.length,\n    highestBonusTier: loadout.highest,\n    checkoutMethod: getCheckoutMethod(lines),\n    signature: getCartSignature(items)\n  };\n}\n\nfunction storeFunnelEvent(eventPayload) {\n  const stored = safeStorageGet(localStorageRef, funnelEventQueueKey);\n  let queue = [];\n  try {\n    queue = stored ? JSON.parse(stored) : [];\n  } catch {\n    queue = [];\n  }\n  queue.push({\n    event: eventPayload.event,\n    timestamp: eventPayload.sc_timestamp,\n    path: eventPayload.sc_path,\n    sessionId: eventPayload.sc_session_id,\n    cart: eventPayload.cart,\n    detail: eventPayload.detail\n  });\n  safeStorageSet(localStorageRef, funnelEventQueueKey, JSON.stringify(queue.slice(-80)));\n}\n\nfunction trackFunnelEvent(name, detail = {}) {\n  const eventPayload = {\n    event: name,\n    detail,\n    sc_event: name,\n    sc_funnel_version: funnelVersion,\n    sc_session_id: sessionId,\n    sc_visitor_id: visitorId,\n    sc_timestamp: new Date().toISOString(),\n    sc_path: window.location.pathname,\n    sc_url: window.location.href,\n    sc_referrer: document.referrer || \"\",\n    sc_viewport: `${window.innerWidth || 0}x${window.innerHeight || 0}`,\n    state: { ...state },\n    totals: getTotals(),\n    loadout: getLoadoutAttributeSummary(),\n    cart: getCartSnapshot()\n  };\n\n  funnelEvents.push(eventPayload);\n  if (funnelEvents.length > 200) funnelEvents.splice(0, funnelEvents.length - 200);\n  storeFunnelEvent(eventPayload);\n\n  window.dataLayer = window.dataLayer || [];\n  window.dataLayer.push(eventPayload);\n  try {\n    window.Shopify?.analytics?.publish?.(name, eventPayload);\n  } catch {\n    // Analytics availability varies between local preview, Shopify preview, and live storefront.\n  }\n  window.dispatchEvent(new CustomEvent(\"spiral:codex-funnel-event\", { detail: eventPayload }));\n  return eventPayload;\n}\n\nfunction markCartSource(source) {\n  cartUpdateSource = source || \"summary_update\";\n}\n\nfunction trackCartUpdate(items, totals, loadout) {\n  const signature = getCartSignature(items);\n  const shouldTrack = lastCartSignature !== \"uninitialized\" || items.length > 0;\n  if (signature === lastCartSignature) {\n    cartUpdateSource = \"summary_update\";\n    return;\n  }\n  lastCartSignature = signature;\n  if (shouldTrack) {\n    trackFunnelEvent(\"sc_codex_cart_update\", {\n      source: cartUpdateSource,\n      itemCount: items.length,\n      oneTime: totals.oneTime,\n      monthly: totals.monthly,\n      unlockedBonusCount: loadout.unlocked.length,\n      signature\n    });\n  }\n  cartUpdateSource = \"summary_update\";\n}\n\nfunction initFunnelSectionTracking() {\n  const sections = Array.from(document.querySelectorAll(\"[data-funnel-section]\"));\n  if (!sections.length) return;\n  if (!(\"IntersectionObserver\" in window)) {\n    sections.slice(0, 2).forEach((section) => {\n      const name = section.dataset.funnelSection;\n      if (!viewedFunnelSections.has(name)) {\n        viewedFunnelSections.add(name);\n        trackFunnelEvent(\"sc_codex_section_view\", { section: name, fallback: true });\n      }\n    });\n    return;\n  }\n  const observer = new IntersectionObserver((entries) => {\n    entries.forEach((entry) => {\n      const name = entry.target.dataset.funnelSection;\n      if (!name || viewedFunnelSections.has(name) || !entry.isIntersecting) return;\n      if (entry.intersectionRatio < 0.34) return;\n      viewedFunnelSections.add(name);\n      trackFunnelEvent(\"sc_codex_section_view\", { section: name, ratio: Number(entry.intersectionRatio.toFixed(2)) });\n      observer.unobserve(entry.target);\n    });\n  }, { threshold: [0.34, 0.58] });\n  sections.forEach((section) => observer.observe(section));\n}\n\nfunction trackPagePerformance() {\n  const sendPerformance = () => {\n    const nav = performance.getEntriesByType?.(\"navigation\")?.[0];\n    trackFunnelEvent(\"sc_codex_page_performance\", {\n      loadMs: nav ? Math.round(nav.loadEventEnd || nav.duration || 0) : 0,\n      domReadyMs: nav ? Math.round(nav.domContentLoadedEventEnd || 0) : 0,\n      transferSize: nav?.transferSize || 0\n    });\n  };\n  if (document.readyState === \"complete\") {\n    window.setTimeout(sendPerformance, 400);\n  } else {\n    window.addEventListener(\"load\", () => window.setTimeout(sendPerformance, 400), { once: true });\n  }\n}\n\nfunction refreshHomepageDomReferences() {\n  summaryList = document.querySelector(\"#summary-list\");\n  oneTimeTotal = document.querySelector(\"#one-time-total\");\n  monthlyTotal = document.querySelector(\"#monthly-total\");\n  stickySummary = document.querySelector(\".sticky-summary\");\n  stickyLabel = document.querySelector(\"#sticky-label\");\n  stickyTotal = document.querySelector(\"#sticky-total\");\n  stickyBonusProgress = document.querySelector(\"#sticky-bonus-progress\");\n  stickyCartItems = document.querySelector(\"#sticky-cart-items\");\n  stickyCheckoutButton = document.querySelector(\"#sticky-checkout-button\");\n  stickyCartToggle = document.querySelector(\"#sticky-cart-toggle\");\n  stickyCartDrawer = document.querySelector(\"#sticky-cart-drawer\");\n  stickyBonusToggle = document.querySelector(\"#sticky-bonus-toggle\");\n  stickyBonusPanel = document.querySelector(\"#sticky-bonus-panel\");\n  loadoutProgressLabel = document.querySelector(\"#loadout-progress-label\");\n  loadoutMeterFill = document.querySelector(\"#loadout-meter-fill\");\n  loadoutTierList = document.querySelector(\"#loadout-tier-list\");\n  loadoutToast = document.querySelector(\"#loadout-toast\");\n  loadoutDeliverySummary = document.querySelector(\"#loadout-delivery-summary\");\n  successItems = document.querySelector(\"#success-items\");\n  checkoutForm = document.querySelector(\"#checkout-form\");\n  successScreen = document.querySelector(\"#success-screen\");\n  formError = document.querySelector(\"#form-error\");\n  disciplineSelect = document.querySelector(\"#discipline-select\");\n  emailInput = document.querySelector(\"#email\");\n  nameInput = document.querySelector(\"#full-name\");\n  marketingConsentInput = document.querySelector(\"#marketing-consent\");\n  submitButton = document.querySelector(\"#complete-order\");\n  applicationUpsell = document.querySelector(\"[data-application-upsell]\");\n  applicationCards = document.querySelectorAll(\".application-card[data-application]\");\n  applicationAllButton = document.querySelector(\"[data-app-card-all]\");\n  applicationFormatButtons = document.querySelectorAll(\"[data-app-format]\");\n  applicationReviewButtons = document.querySelectorAll(\"[data-app-review]\");\n  applicationClearButtons = document.querySelectorAll(\"[data-app-clear]\");\n  applicationSelectionNote = document.querySelector(\"[data-application-selection-note]\");\n  applicationSelectionPanel = document.querySelector(\"[data-application-selection-panel]\");\n  applicationSelectionCount = document.querySelector(\"[data-application-selection-count]\");\n  applicationSelectionMessage = document.querySelector(\"[data-application-selection-message]\");\n  doctrineButtons = document.querySelectorAll(\"[data-doctrine]\");\n  doctrineBundleButtons = document.querySelectorAll(\"[data-doctrine-bundle]\");\n  doctrineSelectionNote = document.querySelector(\"[data-doctrine-selection-note]\");\n  ruleCards = document.querySelectorAll(\".rule-card[data-rule]\");\n}\n\nfunction isShopifyStorefront() {\n  return Boolean(window.Shopify && window.Shopify.routes && window.location.hostname !== \"localhost\" && window.location.hostname !== \"127.0.0.1\");\n}\n\nfunction getRoutesRoot() {\n  return window.Shopify?.routes?.root || \"/\";\n}\n\nfunction money(value) {\n  if (value === null) return \"See cart\";\n  const amount = Number(value);\n  const cents = Math.round(amount * 100) % 100;\n  return new Intl.NumberFormat(\"en-US\", {\n    style: \"currency\",\n    currency: \"USD\",\n    minimumFractionDigits: cents ? 2 : 0,\n    maximumFractionDigits: 2\n  }).format(amount);\n}\n\nfunction getAllApplicationsShortLabel() {\n  return `All ${getApplicationCount()} Disciplines`;\n}\n\nfunction getAllApplicationsBundleLabel() {\n  return `All ${getApplicationCount()} Discipline Codexes`;\n}\n\nfunction getAllApplicationsToggleLabel() {\n  return getAllApplicationsShortLabel();\n}\n\nfunction getAllApplicationsCtaLabel() {\n  return `Add all ${getApplicationCount()} Disciplines`;\n}\n\nfunction showToast(message) {\n  window.clearTimeout(applicationToastTimer);\n  applicationToast.textContent = message;\n  applicationToast.classList.add(\"visible\");\n  applicationToastTimer = window.setTimeout(() => applicationToast.classList.remove(\"visible\"), 2600);\n}\n\nfunction getLead() {\n  return {\n    email: emailInput?.value.trim() || \"\",\n    name: nameInput?.value.trim() || \"\",\n    marketingConsent: Boolean(marketingConsentInput?.checked)\n  };\n}\n\nfunction getSelectedRuleKeys() {\n  return Array.from(new Set(state.selectedRules)).filter((key) => shopifyConfig.rules[key]);\n}\n\nfunction setSelectedRules(keys, source = \"rule_select\") {\n  state.selectedRules = Array.from(new Set(keys.map(String))).filter((key) => shopifyConfig.rules[key]);\n  markCartSource(source);\n  updateSummary();\n  publishEvent(\"sc_codex_rule_video_change\", { source, selectedRules: getSelectedRuleKeys() });\n}\n\nfunction toggleRule(key) {\n  const selected = new Set(getSelectedRuleKeys());\n  if (selected.has(key)) selected.delete(key);\n  else selected.add(key);\n  setSelectedRules(Array.from(selected), \"rule_card\");\n  showToast(selected.has(key) ? \"Rule Video added.\" : \"Rule Video removed.\");\n}\n\nfunction getSelectedApplications() {\n  const available = getAvailableApplicationNames();\n  if (state.appMode === \"all\") return [...bundleApplicationNames];\n  return Array.from(new Set(state.selectedApplications)).filter((name) => available.includes(name));\n}\n\nfunction setApplicationMode(mode, source = \"application_mode\") {\n  if (mode === \"all\") {\n    state.appMode = \"all\";\n    state.selectedApplications = [...bundleApplicationNames];\n  } else if (mode === \"none\") {\n    state.appMode = \"none\";\n    state.selectedApplications = [];\n  } else {\n    state.appMode = \"custom\";\n    if (!getSelectedApplications().length) {\n      state.selectedApplications = [state.discipline];\n    }\n  }\n  markCartSource(source);\n  updateSummary();\n  publishEvent(\"sc_codex_application_change\", { source, appMode: state.appMode, applicationFormat: state.applicationFormat, selectedApplications: getSelectedApplications() });\n}\n\nfunction toggleApplication(name) {\n  if (!getAvailableApplicationNames().includes(name)) return;\n  if (name === \"Silat\" && state.appMode === \"all\") {\n    showToast(\"Clear the ten-book bundle to choose Silat separately.\");\n    return;\n  }\n  const selected = new Set(getSelectedApplications());\n  if (selected.has(name)) selected.delete(name);\n  else selected.add(name);\n  state.discipline = name;\n  state.selectedApplications = Array.from(selected);\n  state.appMode = state.selectedApplications.length ? \"custom\" : \"none\";\n  markCartSource(\"discipline_card\");\n  updateSummary();\n  showToast(selected.has(name) ? `${name} Discipline Codex added.` : `${name} Discipline Codex removed.`);\n  publishEvent(\"sc_codex_application_card_click\", { application: name, appMode: state.appMode, applicationFormat: state.applicationFormat, selectedApplications: getSelectedApplications() });\n}\n\nfunction getApplicationUnitPrice(name = null) {\n  if (name === \"Silat\") return 97;\n  return state.applicationFormat === \"physical\" ? prices.appPhysicalOne : standardDigitalUnitPrice(name);\n}\n\nfunction getApplicationAllPrice() {\n  const values = bundleApplicationNames.map(name => getApplicationUnitPrice(name));\n  return values.some(value => value === null) ? null : Number(values.reduce((sum, value) => sum + value, 0).toFixed(2));\n}\n\nfunction getApplicationDisplayUnitPrice(name) {\n  return getApplicationUnitPrice(name);\n}\n\nfunction getApplicationFormatLabel() {\n  return state.applicationFormat === \"physical\" ? \"Print + Digital pre-order\" : \"Digital\";\n}\n\nfunction getImageFromCards(cards, dataKey, value, fallback) {\n  const match = Array.from(cards).find((card) => card.dataset[dataKey] === value);\n  return match?.querySelector(\"img\")?.currentSrc || match?.querySelector(\"img\")?.src || fallback;\n}\n\nfunction getRuleImage(ruleKeys = []) {\n  return getImageFromCards(ruleCards, \"rule\", ruleKeys[0], fallbackProductImages.rules);\n}\n\nfunction getApplicationImage(name) {\n  if (name === \"Silat\") {\n    const editionTile = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"220\" height=\"330\" viewBox=\"0 0 220 330\"><rect width=\"220\" height=\"330\" fill=\"#171714\"/><rect x=\"8\" y=\"8\" width=\"204\" height=\"314\" fill=\"none\" stroke=\"#d4af37\"/><text x=\"22\" y=\"45\" fill=\"#e5d6aa\" font-family=\"Georgia\" font-size=\"11\">SPIRAL COMBAT</text><text x=\"22\" y=\"160\" fill=\"#e5d6aa\" font-family=\"Georgia\" font-size=\"28\">THE SILAT</text><text x=\"22\" y=\"192\" fill=\"#e5d6aa\" font-family=\"Georgia\" font-size=\"28\">CODEX</text><text x=\"22\" y=\"285\" fill=\"#e5d6aa\" font-family=\"Georgia\" font-size=\"11\">DIGITAL EDITION</text></svg>';\n    return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(editionTile)}`;\n  }\n  return getImageFromCards(applicationCards, \"application\", name, fallbackProductImages.applications);\n}\n\nfunction getDoctrineImage(key) {\n  return getImageFromCards(doctrineButtons, \"doctrine\", key, fallbackProductImages.bonus);\n}\n\nfunction getSelectedDoctrineKeys() {\n  return Array.from(new Set(state.selectedDoctrines)).filter((key) => shopifyConfig.doctrines[key]);\n}\n\nfunction toggleDoctrine(key) {\n  const selected = new Set(getSelectedDoctrineKeys());\n  if (selected.has(key)) selected.delete(key);\n  else selected.add(key);\n  state.selectedDoctrines = Array.from(selected);\n  markCartSource(\"doctrine_card\");\n  updateSummary();\n  showToast(`${shopifyConfig.doctrines[key]?.label || \"Book\"} ${selected.has(key) ? \"added\" : \"removed\"}.`);\n  publishEvent(\"sc_codex_doctrine_toggle\", { doctrine: key, selectedDoctrines: getSelectedDoctrineKeys() });\n}\n\nfunction toggleDoctrineBundle(group) {\n  const bundleKeys = shopifyConfig.doctrineBundles[group] || [];\n  const selected = new Set(getSelectedDoctrineKeys());\n  const allSelected = bundleKeys.every((key) => selected.has(key));\n  bundleKeys.forEach((key) => allSelected ? selected.delete(key) : selected.add(key));\n  state.selectedDoctrines = Array.from(selected);\n  markCartSource(\"doctrine_bundle\");\n  updateSummary();\n  showToast(`${allSelected ? \"Removed\" : \"Added\"} ${group === \"women\" ? \"Women's Series\" : \"Elemental Series\"}.`);\n  publishEvent(\"sc_codex_doctrine_toggle\", { doctrineGroup: group, selectedDoctrines: getSelectedDoctrineKeys() });\n}\n\nfunction getItems() {\n  const items = [];\n  if (state.core) {\n    items.push({\n      label: state.core === \"physical\" ? \"Spiral Combat Codex - Print pre-order + Digital\" : \"Spiral Combat Codex - Digital\",\n      shortLabel: state.core === \"physical\" ? \"Print + Digital Codex\" : \"Digital Codex\",\n      price: state.core === \"physical\" ? prices.physical : prices.digital,\n      cadence: \"today\",\n      image: fallbackProductImages.codex,\n      removeType: \"core\",\n      removeKey: state.core\n    });\n  }\n  const selectedRules = getSelectedRuleKeys();\n  selectedRules.forEach((key) => {\n    const rule = shopifyConfig.rules[key];\n    if (!rule) return;\n    items.push({\n      label: rule.label,\n      shortLabel: rule.label.replace(/^Rule 0?(\\d+) - /u, \"Rule $1: \"),\n      price: rule.price,\n      cadence: \"today\",\n      image: getRuleImage([key]),\n      removeType: \"rule\",\n      removeKey: key\n    });\n  });\n  const selectedApplications = getSelectedApplications();\n  selectedApplications.forEach((name) => {\n    items.push({\n      label: `${name} Discipline Codex${state.applicationFormat === \"physical\" ? \" - Print + Digital\" : \"\"}`,\n      shortLabel: `${name} Codex`,\n      price: getApplicationDisplayUnitPrice(name),\n      cadence: \"today\",\n      image: getApplicationImage(name),\n      removeType: \"discipline\",\n      removeKey: name\n    });\n  });\n  getSelectedDoctrineKeys().forEach((key) => {\n    const product = shopifyConfig.doctrines[key];\n    if (!product) return;\n    items.push({\n      label: product.label,\n      shortLabel: product.label.replace(/^Elemental Series: /u, \"\"),\n      price: product.group === \"women\" && shopifyConfig.doctrineBundles.women.every(k => getSelectedDoctrineKeys().includes(k)) ? product.price * 0.75 : product.price,\n      cadence: \"today\",\n      image: getDoctrineImage(key),\n      removeType: \"doctrine\",\n      removeKey: key\n    });\n  });\n  if (state.pass) {\n    items.push({ label: \"Fight Intelligence Pass\", shortLabel: \"Fight IQ Pass\", price: prices.pass, cadence: \"monthly\", image: fallbackProductImages.pass, removeType: \"pass\", removeKey: \"pass\" });\n  }\n  return items;\n}\n\nfunction getTotals() {\n  return getItems().reduce((totals, item) => {\n    if (item.cadence === \"monthly\") totals.monthly += item.price;\n    else if (item.price === null) totals.oneTime = null;\n    else if (totals.oneTime !== null) totals.oneTime += item.price;\n    return totals;\n  }, { oneTime: 0, monthly: 0 });\n}\n\nfunction renderRows(container, rows, rowClass = \"summary-row\") {\n  if (!container) return;\n  container.innerHTML = rows.map((item) => `<div class=\"${rowClass}\"><span>${item.label}</span><strong>${money(item.price)}${item.cadence === \"monthly\" ? \"/mo\" : \"\"}</strong></div>`).join(\"\");\n}\n\nfunction escapeHtml(value = \"\") {\n  return String(value).replace(/[&<>\"']/g, (character) => ({\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#39;\"\n  })[character]);\n}\n\nfunction renderSelectedOrderStack(items = []) {\n  if (!summaryList) return;\n  if (!items.length) {\n    summaryList.innerHTML = `\n      <div class=\"summary-row summary-row--empty\">\n        <span>Start with the Codex</span>\n        <strong>$97+</strong>\n      </div>\n    `;\n    return;\n  }\n  summaryList.innerHTML = items.map((item, index) => `\n    <div class=\"summary-row\">\n      <span><b>${index + 1}</b>${item.label}</span>\n      <strong>${money(item.price)}${item.cadence === \"monthly\" ? \"/mo\" : \"\"}</strong>\n    </div>\n  `).join(\"\");\n}\n\nfunction renderStickyCartStack(items = []) {\n  if (!stickyCartItems) return;\n  if (!items.length) {\n    stickyCartItems.innerHTML = `\n      <div class=\"sticky-cart-empty\">\n        <span>Cart is empty</span>\n        <strong>Add the Codex first</strong>\n      </div>\n    `;\n    return;\n  }\n  stickyCartItems.innerHTML = `\n    <div class=\"sticky-cart-stack\" aria-label=\"Selected products\">\n      ${items.map((item, index) => `\n        <article class=\"sticky-cart-item\" style=\"--stack-index: ${index}\">\n          <img src=\"${escapeHtml(item.image || fallbackProductImages.bonus)}\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n          <div>\n            <span>${escapeHtml(item.shortLabel || item.label)}</span>\n            <strong>${money(item.price)}${item.cadence === \"monthly\" ? \"/mo\" : \"\"}</strong>\n          </div>\n          <button\n            class=\"sticky-cart-remove\"\n            type=\"button\"\n            data-sticky-remove-type=\"${escapeHtml(item.removeType || \"\")}\"\n            data-sticky-remove-key=\"${escapeHtml(item.removeKey || \"\")}\"\n            aria-label=\"Remove ${escapeHtml(item.shortLabel || item.label)} from cart\"\n          >Remove</button>\n        </article>\n      `).join(\"\")}\n    </div>\n  `;\n}\n\nfunction removeStickyCartItem(type, key) {\n  markCartSource(`remove_${type || \"item\"}`);\n  if (type === \"core\") {\n    state.core = null;\n    showToast(\"Codex removed.\");\n  } else if (type === \"rule\") {\n    state.selectedRules = getSelectedRuleKeys().filter((ruleKey) => ruleKey !== key);\n    showToast(\"Rule Video removed.\");\n  } else if (type === \"discipline\") {\n    const nextApplications = getSelectedApplications().filter((name) => name !== key);\n    state.appMode = nextApplications.length ? \"custom\" : \"none\";\n    state.selectedApplications = nextApplications;\n    state.discipline = nextApplications[0] || state.discipline;\n    showToast(`${key} Codex removed.`);\n  } else if (type === \"doctrine\") {\n    state.selectedDoctrines = getSelectedDoctrineKeys().filter((doctrineKey) => doctrineKey !== key);\n    showToast(\"Book removed.\");\n  } else if (type === \"pass\") {\n    state.pass = false;\n    showToast(\"Fight Intelligence Pass removed.\");\n  }\n  updateSummary();\n  publishEvent(\"sc_codex_cart_item_removed\", { type, key });\n}\n\nfunction renderStickyBonusPanel(tiers = getLoadoutTiers()) {\n  if (!stickyBonusPanel) return;\n  stickyBonusPanel.innerHTML = tiers.map((tier, index) => `\n    <article class=\"sticky-bonus-row ${tier.unlocked ? \"is-unlocked\" : \"is-locked\"}\">\n      <span class=\"sticky-bonus-row__mark\">${tier.unlocked ? \"\u2713\" : index + 1}</span>\n      <div>\n        <strong>${escapeHtml(tier.reward)}</strong>\n        <small>${escapeHtml(tier.unlocked ? tier.detail : tier.next)}</small>\n      </div>\n    </article>\n  `).join(\"\");\n}\n\nfunction getLoadoutTiers() {\n  const orderValue = getTotals().oneTime + getTotals().monthly;\n  const describeNext = (threshold) => `Add ${money(Math.max(0, threshold - orderValue))} more to unlock.`;\n  const tier = ({ threshold, ...item }) => ({\n    ...item,\n    threshold,\n    unlocked: orderValue >= threshold,\n    next: describeNext(threshold),\n    detail: `${money(threshold)} order value reached.`\n  });\n\n  return [\n    tier({\n      id: \"starter\",\n      title: \"$97 tier\",\n      reward: \"Fight IQ Starter Map\",\n      cover: \"starter\",\n      blurb: \"A one-page map for reading what is breaking first in a fight.\",\n      threshold: 97,\n      deliveryKind: \"digital\",\n      delivery: \"Digital bonus tied to the checkout email.\"\n    }),\n    tier({\n      id: \"decoder\",\n      title: \"$194 tier\",\n      reward: \"Style Decoder Worksheet\",\n      cover: \"decoder\",\n      blurb: \"A practical worksheet for translating Spiral Combat into your style.\",\n      threshold: 194,\n      deliveryKind: \"digital\",\n      delivery: \"Digital worksheet tied to the checkout email.\"\n    }),\n    tier({\n      id: \"training\",\n      title: \"$300 tier\",\n      reward: \"7-Day Spiral Training Plan\",\n      cover: \"training\",\n      blurb: \"A simple first week so the Codex becomes training instead of theory.\",\n      threshold: 300,\n      deliveryKind: \"digital\",\n      delivery: \"Digital plan tied to the checkout email.\"\n    }),\n    tier({\n      id: \"worldview\",\n      title: \"$500 tier\",\n      reward: \"Martial Worldview Bonus Book\",\n      cover: \"worldview\",\n      blurb: \"A deeper philosophy lens for violence, fear, ego, restraint, and mastery.\",\n      threshold: 500,\n      deliveryKind: \"digital\",\n      delivery: \"Digital bonus book tied to the checkout email.\"\n    }),\n    tier({\n      id: \"private\",\n      title: \"$1,000 tier\",\n      reward: \"Private Fight IQ Review\",\n      cover: \"founder\",\n      blurb: \"A private review from Mike on the next pressure problem to solve.\",\n      threshold: 1000,\n      deliveryKind: \"manual\",\n      delivery: \"Email follow-up after purchase to collect context and schedule the review.\"\n    }),\n    tier({\n      id: \"elite\",\n      title: \"$1,750 tier\",\n      reward: \"Elite Fight Breakdown\",\n      cover: \"elite\",\n      blurb: \"A top-level fight analysis bonus for serious athletes and coaches.\",\n      threshold: 1750,\n      deliveryKind: \"manual\",\n      delivery: \"Email follow-up after purchase to confirm the athlete, footage, and review path.\"\n    })\n  ];\n}\n\nfunction getUnlockedLoadoutTiers() {\n  return getLoadoutTiers().filter((tier) => tier.unlocked);\n}\n\nfunction getLoadoutAttributeSummary() {\n  const unlocked = getUnlockedLoadoutTiers();\n  const instant = unlocked.filter((tier) => tier.deliveryKind === \"digital\").map((tier) => tier.reward);\n  const manual = unlocked.filter((tier) => tier.deliveryKind === \"manual\").map((tier) => tier.reward);\n  const highest = unlocked[unlocked.length - 1];\n  return {\n    unlocked,\n    instant,\n    manual,\n    names: unlocked.map((tier) => tier.reward),\n    highest: highest ? `${highest.title}: ${highest.reward}` : \"None\",\n    deliveryNote: unlocked.length\n      ? \"Digital bonuses are tied to the checkout email; private review bonuses require email follow-up after purchase.\"\n      : \"No Fight IQ Loadout bonuses unlocked yet.\"\n  };\n}\n\nfunction showLoadoutToast(tier) {\n  if (!loadoutToast || !tier) return;\n  if (loadoutToastTimer) clearTimeout(loadoutToastTimer);\n  loadoutToast.textContent = `Bonus unlocked: ${tier.reward}`;\n  loadoutToast.hidden = false;\n  loadoutToast.classList.remove(\"show\");\n  window.requestAnimationFrame(() => loadoutToast.classList.add(\"show\"));\n  loadoutToastTimer = window.setTimeout(() => {\n    loadoutToast.classList.remove(\"show\");\n    loadoutToast.hidden = true;\n  }, 2400);\n}\n\nfunction renderLoadoutProgress() {\n  const tiers = getLoadoutTiers();\n  const unlockedCount = tiers.filter((tier) => tier.unlocked).length;\n  const fillPercent = Math.round((unlockedCount / tiers.length) * 100);\n  const unlockedTierIds = new Set(tiers.filter((tier) => tier.unlocked).map((tier) => tier.id));\n  const newlyUnlocked = tiers.filter((tier) => tier.unlocked && !previousUnlockedTierIds.has(tier.id));\n\n  if (loadoutProgressLabel) {\n    loadoutProgressLabel.textContent = `${unlockedCount} / ${tiers.length} bonus${unlockedCount === 1 ? \"\" : \"es\"} unlocked`;\n  }\n  if (loadoutMeterFill) loadoutMeterFill.style.width = `${fillPercent}%`;\n\n  document.querySelectorAll(\"[data-loadout-dot]\").forEach((dot) => {\n    const tier = tiers.find((item) => item.id === dot.dataset.loadoutDot);\n    dot.classList.toggle(\"active\", Boolean(tier?.unlocked));\n  });\n\n  if (loadoutProgressInitialized && newlyUnlocked.length > 0) {\n    showLoadoutToast(newlyUnlocked[newlyUnlocked.length - 1]);\n  }\n  previousUnlockedTierIds = unlockedTierIds;\n  loadoutProgressInitialized = true;\n\n  if (!loadoutTierList) return;\n  loadoutTierList.innerHTML = tiers.map((tier, index) => {\n    const status = tier.unlocked ? \"Unlocked\" : \"Next\";\n    return `\n      <div class=\"loadout-tier ${tier.unlocked ? \"is-unlocked\" : \"is-locked\"}\">\n        <span class=\"loadout-tier__mark\">${tier.unlocked ? \"\u2713\" : index + 1}</span>\n        <span class=\"loadout-tier__cover loadout-tier__cover--${tier.cover}\" aria-hidden=\"true\"></span>\n        <div>\n          <strong>${tier.title}: ${tier.reward}</strong>\n          <em>${tier.blurb}</em>\n          <small>${status}: ${tier.unlocked ? tier.detail : tier.next}</small>\n          ${tier.unlocked ? `<small class=\"loadout-tier__delivery\">Delivery: ${tier.delivery}</small>` : \"\"}\n        </div>\n      </div>\n    `;\n  }).join(\"\");\n  renderLoadoutDeliverySummary();\n}\n\nfunction renderLoadoutDeliverySummary() {\n  if (!loadoutDeliverySummary) return;\n  const summary = getLoadoutAttributeSummary();\n  if (!summary.unlocked.length) {\n    loadoutDeliverySummary.innerHTML = `\n      <strong>Bonus delivery</strong>\n      <span>Add items to unlock digital Fight IQ bonuses before checkout.</span>\n    `;\n    return;\n  }\n  const rows = [];\n  if (summary.instant.length) rows.push(`<span><b>Digital:</b> ${summary.instant.join(\", \")}</span>`);\n  if (summary.manual.length) rows.push(`<span><b>Email follow-up:</b> ${summary.manual.join(\", \")}</span>`);\n  loadoutDeliverySummary.innerHTML = `\n    <strong>Bonus delivery</strong>\n    ${rows.join(\"\")}\n  `;\n}\n\nfunction updateRuleUi() {\n  const selected = new Set(getSelectedRuleKeys());\n  ruleCards.forEach((card) => {\n    const isSelected = selected.has(card.dataset.rule);\n    card.classList.toggle(\"selected\", isSelected);\n    card.setAttribute(\"aria-pressed\", String(isSelected));\n    const button = card.querySelector(\".rule-footer .button\");\n    if (button) button.textContent = isSelected ? \"Added\" : \"Add rule\";\n  });\n  document.querySelectorAll(\"[data-rule-bundle='popular']\").forEach((button) => {\n    const isActive = [\"1\", \"2\", \"3\"].every((key) => selected.has(key));\n    button.classList.toggle(\"active\", isActive);\n    button.textContent = isActive ? \"Clear Popular 3\" : \"Add Popular 3\";\n  });\n  document.querySelectorAll(\"[data-rule-bundle='all']\").forEach((button) => {\n    const isActive = Object.keys(shopifyConfig.rules).every((key) => selected.has(key));\n    button.classList.toggle(\"active\", isActive);\n    button.textContent = isActive ? \"Clear all 6 Rule Videos\" : \"Add all 6 Rule Videos\";\n  });\n  document.querySelectorAll(\"[data-toggle='starter']\").forEach((button) => {\n    const isActive = [\"1\", \"2\", \"3\"].every((key) => selected.has(key));\n    button.classList.toggle(\"active\", isActive);\n    const span = button.querySelector(\"span\");\n    if (span) span.textContent = isActive ? \"Added\" : \"Add\";\n  });\n}\n\nfunction updateApplicationUi() {\n  const selectedApplications = getSelectedApplications();\n  const selectedSet = new Set(selectedApplications);\n  applicationCards.forEach((card) => {\n    const available = getAvailableApplicationNames().includes(card.dataset.application);\n    card.hidden = !available;\n    card.style.display = available ? \"\" : \"none\";\n    card.tabIndex = available ? 0 : -1;\n    if (!available) {\n      card.classList.remove(\"selected\");\n      card.setAttribute(\"aria-pressed\", \"false\");\n      return;\n    }\n    const isSelected = selectedSet.has(card.dataset.application);\n    card.classList.toggle(\"selected\", isSelected);\n    card.setAttribute(\"aria-pressed\", String(isSelected));\n    const cta = card.querySelector(\".application-cta\");\n    if (cta) cta.textContent = isSelected ? \"Added\" : \"Add codex\";\n    const price = card.querySelector(\".application-price\");\n    if (price) price.textContent = applicationMoney(getApplicationUnitPrice(card.dataset.application));\n  });\n  document.querySelectorAll(\"[data-app-mode]\").forEach((button) => button.classList.toggle(\"active\", button.dataset.appMode === state.appMode));\n  document.querySelectorAll(\"[data-app-mode='custom']\").forEach((button) => {\n    button.textContent = state.appMode === \"custom\" && selectedApplications.length\n      ? \"Clear selected discipline\"\n      : `Add ${state.discipline} +${applicationMoney(getApplicationUnitPrice(state.discipline))}`;\n  });\n  document.querySelectorAll(\"[data-app-mode='all']\").forEach((button) => {\n    button.textContent = state.appMode === \"all\" ? `Clear all ${getApplicationCount()} Disciplines` : getAllApplicationsToggleLabel();\n  });\n  applicationClearButtons.forEach((button) => {\n    const hasSelection = selectedApplications.length > 0;\n    button.hidden = !hasSelection;\n    button.textContent = hasSelection ? \"Clear selected\" : \"Nothing selected\";\n  });\n  applicationFormatButtons.forEach((button) => {\n    const active = button.dataset.appFormat === state.applicationFormat;\n    button.classList.toggle(\"active\", active);\n    button.setAttribute(\"aria-pressed\", String(active));\n  });\n  if (applicationAllButton) {\n    applicationAllButton.classList.toggle(\"active\", state.appMode === \"all\");\n    applicationAllButton.textContent = state.appMode === \"all\" ? `Clear all ${getApplicationCount()} Disciplines` : `${getAllApplicationsCtaLabel()} (${getApplicationAllPrice() === null ? \"Review prices in cart\" : applicationMoney(getApplicationAllPrice()) + \" regular-price subtotal\"})`;\n  }\n  if (applicationSelectionNote) {\n    applicationSelectionNote.textContent = state.appMode === \"all\"\n      ? `Selected: all ${getApplicationCount()} Discipline Codexes. Format: ${getApplicationFormatLabel()}.`\n      : selectedApplications.length\n        ? `Selected: ${selectedApplications.join(\", \")}. Format: ${getApplicationFormatLabel()}.`\n        : \"No Discipline Codex selected yet.\";\n  }\n  if (applicationSelectionPanel) applicationSelectionPanel.hidden = selectedApplications.length === 0;\n  if (applicationSelectionCount) applicationSelectionCount.textContent = state.appMode === \"all\" ? `All ${getApplicationCount()} Disciplines selected` : `${selectedApplications.length} Discipline${selectedApplications.length === 1 ? \"\" : \"s\"} selected`;\n  if (applicationSelectionMessage) applicationSelectionMessage.textContent = selectedApplications.length\n    ? `Selected: ${selectedApplications.join(\", \")}. Format: ${getApplicationFormatLabel()}.`\n    : `Tap discipline cards below to add ${getApplicationFormatLabel()} Discipline Codexes.`;\n}\n\nfunction updateDoctrineUi() {\n  const selected = new Set(getSelectedDoctrineKeys());\n  doctrineButtons.forEach((button) => {\n    const isSelected = selected.has(button.dataset.doctrine);\n    button.classList.toggle(\"active\", isSelected);\n    button.classList.toggle(\"selected\", isSelected);\n    button.setAttribute(\"aria-pressed\", String(isSelected));\n    const cta = button.querySelector(\".doctrine-footer .button\");\n    if (cta) cta.textContent = isSelected ? \"Added\" : \"Add book\";\n  });\n  doctrineBundleButtons.forEach((button) => {\n    const keys = shopifyConfig.doctrineBundles[button.dataset.doctrineBundle] || [];\n    const isActive = keys.length > 0 && keys.every((key) => selected.has(key));\n    button.classList.toggle(\"active\", isActive);\n    button.textContent = button.dataset.doctrineBundle === \"women\"\n      ? (isActive ? \"Clear Women's Series\" : \"Add Women's Series - complete set ($87)\")\n      : (isActive ? \"Clear Elemental Series\" : \"Add Elemental Series - complete set ($145)\");\n  });\n  if (doctrineSelectionNote) {\n    doctrineSelectionNote.textContent = selected.size ? `${selected.size} specialized book${selected.size === 1 ? \"\" : \"s\"} selected.` : \"No specialized books selected.\";\n  }\n}\n\nfunction updateButtons() {\n  document.querySelectorAll(\"[data-core]\").forEach((button) => button.classList.toggle(\"active\", button.dataset.core === state.core));\n  document.querySelectorAll(\"[data-core]\").forEach((button) => {\n    const label = button.querySelector(\"span\");\n    if (!label) return;\n    const isActive = button.dataset.core === state.core;\n    if (button.dataset.core === \"physical\") label.textContent = isActive ? \"Selected Print + Digital\" : \"Add Print + Digital\";\n    else label.textContent = isActive ? \"Selected Digital Codex\" : \"Add Digital Codex\";\n  });\n  document.querySelectorAll(\".pass-section\").forEach((section) => section.classList.toggle(\"selected\", state.pass));\n  document.querySelectorAll(\"[data-toggle='pass']\").forEach((button) => {\n    button.classList.toggle(\"active\", state.pass);\n    const span = button.querySelector(\"span\");\n    if (span) span.textContent = state.pass ? \"Added\" : \"Add\";\n  });\n  updateRuleUi();\n  updateApplicationUi();\n  updateDoctrineUi();\n}\n\nfunction updateSummary() {\n  refreshHomepageDomReferences();\n  const items = getItems();\n  const totals = getTotals();\n  const hasStandardDigitalSelection = state.applicationFormat === \"digital\" && getSelectedApplications().some(name => standardDigitalIdentities[name]);\n  const loadout = getLoadoutAttributeSummary();\n  const loadoutTierCount = getLoadoutTiers().length;\n  const hasSelection = items.length > 0;\n  renderSelectedOrderStack(items);\n  renderStickyCartStack(items);\n  renderStickyBonusPanel();\n  if (oneTimeTotal) oneTimeTotal.textContent = totals.oneTime === null ? \"See cart\" : money(totals.oneTime) + (hasStandardDigitalSelection ? \" estimate\" : \"\");\n  if (monthlyTotal) monthlyTotal.textContent = totals.monthly ? `${money(totals.monthly)}/mo` : \"$0/mo\";\n  if (stickySummary) {\n    const stickyProgress = hasSelection ? Math.round((loadout.unlocked.length / loadoutTierCount) * 100) : 0;\n    if (!hasSelection) stickyCartExpanded = false;\n    stickySummary.style.setProperty(\"--sticky-progress\", `${stickyProgress}%`);\n    stickySummary.classList.toggle(\"has-selection\", hasSelection);\n    stickySummary.classList.toggle(\"is-expanded\", hasSelection && stickyCartExpanded);\n  }\n  if (stickyCartToggle) {\n    stickyCartToggle.hidden = !hasSelection;\n    stickyCartToggle.textContent = stickyCartExpanded ? \"Hide cart\" : \"View cart\";\n    stickyCartToggle.setAttribute(\"aria-expanded\", String(hasSelection && stickyCartExpanded));\n  }\n  if (stickyCartDrawer) {\n    stickyCartDrawer.setAttribute(\"aria-hidden\", String(!(hasSelection && stickyCartExpanded)));\n  }\n  if (stickyLabel) stickyLabel.textContent = hasSelection ? (hasStandardDigitalSelection ? \"Order estimate\" : \"Your cart\") : \"Start here\";\n  if (stickyTotal) stickyTotal.textContent = hasSelection\n    ? (totals.monthly ? `${totals.oneTime === null ? \"See cart\" : money(totals.oneTime) + \" subtotal\"} + ${money(totals.monthly)}/mo` : totals.oneTime === null ? \"See cart\" : `${money(totals.oneTime)} subtotal`)\n    : \"Choose your Codex\";\n  if (stickyBonusProgress) {\n    stickyBonusProgress.textContent = hasSelection\n      ? `${loadout.unlocked.length} / ${loadoutTierCount} bonuses unlocked`\n      : \"Bonus bar starts after the book\";\n  }\n  if (stickyBonusToggle) {\n    stickyBonusToggle.setAttribute(\n      \"aria-label\",\n      hasSelection\n        ? `Show bonus unlock details. ${loadout.unlocked.length} of ${loadoutTierCount} bonuses unlocked.`\n        : \"Show bonus unlock details.\"\n    );\n  }\n  const stickyButton = stickyCheckoutButton || document.querySelector(\".sticky-summary .button\");\n  if (stickyButton) {\n    stickyButton.textContent = hasSelection ? \"Checkout\" : \"Get Codex\";\n    stickyButton.setAttribute(\"href\", hasSelection ? \"#checkout\" : \"#codex\");\n  }\n  renderLoadoutProgress();\n  updateButtons();\n  trackCartUpdate(items, totals, loadout);\n}\n\nfunction getShopifyLines() {\n  const selectedApplications = getSelectedApplications();\n  const selectedDoctrines = getSelectedDoctrineKeys().map((key) => shopifyConfig.doctrines[key]);\n  const loadout = getLoadoutAttributeSummary();\n  const properties = {\n    _sc_funnel: \"Codex conversion homepage\",\n    _sc_core_choice: state.core,\n    _sc_selected_rules: getSelectedRuleKeys().join(\", \"),\n    _sc_application_mode: state.appMode,\n    _sc_application_format: state.applicationFormat,\n    _sc_discipline: state.discipline,\n    _sc_selected_applications: selectedApplications.join(\", \"),\n    _sc_selected_doctrines: selectedDoctrines.map((product) => product.label).join(\", \"),\n    _sc_unlocked_bonuses: loadout.names.join(\", \"),\n    _sc_instant_bonuses: loadout.instant.join(\", \"),\n    _sc_manual_bonuses: loadout.manual.join(\", \"),\n    _sc_highest_bonus_tier: loadout.highest\n  };\n  const lines = [];\n  if (state.core && shopifyConfig.core[state.core]) {\n    lines.push({ id: shopifyConfig.core[state.core].id, quantity: 1, properties });\n  }\n  getSelectedRuleKeys().forEach((key) => {\n    lines.push({ id: shopifyConfig.rules[key].id, quantity: 1, properties });\n  });\n  if (state.appMode === \"all\") {\n    bundleApplicationNames.forEach((name) => {\n      const app = shopifyConfig.applications[name];\n      lines.push({ id: state.applicationFormat === \"physical\" ? app.physicalId : app.id, quantity: 1, properties });\n    });\n  } else {\n    selectedApplications.forEach((name) => {\n      const app = shopifyConfig.applications[name];\n      if (app) lines.push({ id: state.applicationFormat === \"physical\" ? app.physicalId : app.id, quantity: 1, properties });\n    });\n  }\n  selectedDoctrines.forEach((product) => lines.push({ id: product.id, quantity: 1, properties }));\n  if (state.pass) lines.push({ id: shopifyConfig.pass.id, quantity: 1, selling_plan: shopifyConfig.pass.sellingPlanId, properties });\n  return lines;\n}\n\nasync function postJson(path, body) {\n  const response = await fetch(`${getRoutesRoot()}${path}`, {\n    method: \"POST\",\n    credentials: \"same-origin\",\n    headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n    body: JSON.stringify(body)\n  });\n  if (!response.ok) {\n    const text = await response.text().catch(() => \"\");\n    throw new Error(text || `Shopify request failed (${response.status})`);\n  }\n  return response.json().catch(() => null);\n}\n\nfunction buildCheckoutUrl(lead = directCheckoutLead) {\n  const params = new URLSearchParams();\n  if (lead.email) params.set(\"checkout[email]\", lead.email);\n  const [firstName, ...rest] = lead.name.split(/\\s+/).filter(Boolean);\n  if (firstName) params.set(\"checkout[shipping_address][first_name]\", firstName);\n  if (rest.length) params.set(\"checkout[shipping_address][last_name]\", rest.join(\" \"));\n  const checkoutPath = `${getRoutesRoot()}checkout${params.toString() ? `?${params.toString()}` : \"\"}`;\n  return state.appMode === \"all\" && shopifyConfig.discountCode\n    ? `${getRoutesRoot()}discount/${encodeURIComponent(shopifyConfig.discountCode)}?redirect=${encodeURIComponent(checkoutPath)}`\n    : checkoutPath;\n}\n\nfunction buildCartPermalink(lead = directCheckoutLead, reviewCart = false) {\n  const lines = getShopifyLines().filter((line) => !line.selling_plan);\n  const loadout = getLoadoutAttributeSummary();\n  const cartPath = lines.map((line) => `${line.id}:${line.quantity || 1}`).join(\",\");\n  const params = new URLSearchParams();\n  if (reviewCart) params.set(\"storefront\", \"true\");\n  if (lead.email) params.set(\"checkout[email]\", lead.email);\n  const [firstName, ...rest] = lead.name.split(/\\s+/).filter(Boolean);\n  if (firstName) params.set(\"checkout[shipping_address][first_name]\", firstName);\n  if (rest.length) params.set(\"checkout[shipping_address][last_name]\", rest.join(\" \"));\n  params.set(\"attributes[Spiral funnel]\", \"Codex conversion homepage\");\n  if (lead.name) params.set(\"attributes[Lead name]\", lead.name);\n  if (lead.email) params.set(\"attributes[Lead email]\", lead.email);\n  if (lead.email || lead.marketingConsent) params.set(\"attributes[Marketing consent]\", lead.marketingConsent ? \"yes\" : \"no\");\n  params.set(\"attributes[Selected rules]\", getSelectedRuleKeys().join(\", \"));\n  params.set(\"attributes[Selected discipline]\", state.discipline);\n  params.set(\"attributes[Discipline selection]\", state.appMode);\n  params.set(\"attributes[Discipline format]\", getApplicationFormatLabel());\n  params.set(\"attributes[Selected disciplines]\", getSelectedApplications().join(\", \"));\n  params.set(\"attributes[Pass selected]\", state.pass ? \"yes\" : \"no\");\n  params.set(\"attributes[Unlocked bonuses]\", loadout.names.join(\", \"));\n  params.set(\"attributes[Instant bonus delivery]\", loadout.instant.join(\", \"));\n  params.set(\"attributes[Manual bonus follow-up]\", loadout.manual.join(\", \"));\n  params.set(\"attributes[Highest bonus tier]\", loadout.highest);\n  params.set(\"attributes[Bonus delivery note]\", loadout.deliveryNote);\n  const path = `${getRoutesRoot()}cart/${cartPath}?${params.toString()}`;\n  return state.appMode === \"all\" && shopifyConfig.discountCode\n    ? `${getRoutesRoot()}discount/${encodeURIComponent(shopifyConfig.discountCode)}?redirect=${encodeURIComponent(path)}`\n    : path;\n}\n\nfunction redirectToCheckout(url) {\n  if (typeof window.__SPIRAL_CHECKOUT_REDIRECT_HOOK__ === \"function\") {\n    window.__SPIRAL_CHECKOUT_REDIRECT_HOOK__(url);\n    return;\n  }\n  window.location.href = url;\n}\n\nfunction getCheckoutMethod(lines = getShopifyLines()) {\n  return lines.some((line) => line.selling_plan) ? \"ajax_cart\" : \"cart_permalink\";\n}\n\nfunction getCheckoutErrorMessage(error) {\n  const raw = error instanceof Error ? error.message : String(error || \"\");\n  if (raw.includes(\"<!DOCTYPE html\") || raw.includes(\"Verifying your connection\") || raw.includes(\"__cf_chl_\")) {\n    return \"Shopify asked to verify the connection before checkout. Please try again in your browser, or message us and we will send a direct checkout link.\";\n  }\n  return raw || \"Checkout handoff failed. Please try again.\";\n}\n\nasync function updateShopifyCartAttributes(lead = directCheckoutLead) {\n  const loadout = getLoadoutAttributeSummary();\n  const attributes = {\n    \"Spiral funnel\": \"Codex conversion homepage\",\n    \"Selected rules\": getSelectedRuleKeys().join(\", \"),\n    \"Selected discipline\": state.discipline,\n    \"Discipline selection\": state.appMode,\n    \"Discipline format\": getApplicationFormatLabel(),\n    \"Selected disciplines\": getSelectedApplications().join(\", \"),\n    \"Pass selected\": state.pass ? \"yes\" : \"no\",\n    \"Unlocked bonuses\": loadout.names.join(\", \"),\n    \"Instant bonus delivery\": loadout.instant.join(\", \"),\n    \"Manual bonus follow-up\": loadout.manual.join(\", \"),\n    \"Highest bonus tier\": loadout.highest,\n    \"Bonus delivery note\": loadout.deliveryNote\n  };\n  if (lead.name) attributes[\"Lead name\"] = lead.name;\n  if (lead.email) attributes[\"Lead email\"] = lead.email;\n  if (lead.email || lead.marketingConsent) attributes[\"Marketing consent\"] = lead.marketingConsent ? \"yes\" : \"no\";\n  await postJson(\"cart/update.js\", { attributes, note: lead.email ? `Spiral Codex funnel lead: ${lead.name} <${lead.email}>` : \"Spiral Codex direct checkout\" });\n}\n\nfunction publishEvent(name, detail = {}) {\n  trackFunnelEvent(name, detail);\n  if (typeof window.clarity === \"function\") {\n    try { window.clarity(\"event\", detail.croEvent || name); } catch {}\n  }\n}\n\nasync function getShopifyCartSnapshot() {\n  const response = await fetch(getRoutesRoot() + \"cart.js\", {\n    method: \"GET\", credentials: \"same-origin\", cache: \"no-store\",\n    headers: {Accept: \"application/json\"},\n  });\n  const cart = await response.json().catch(() => null);\n  if (!response.ok || !Array.isArray(cart?.items)\n    || cart.items.some(line => !Number.isInteger(line.quantity) || line.quantity < 0\n      || !/^[1-9]\\d*$/.test(String(line.variant_id || line.id || \"\"))\n      || (line.properties != null && (typeof line.properties !== \"object\" || Array.isArray(line.properties)))\n      || (line.selling_plan_allocation && !line.selling_plan_allocation.selling_plan?.id))) {\n    throw new Error(\"Your cart could not be checked. Please review your cart before trying again.\");\n  }\n  return cart;\n}\nfunction shopifyCartLineIdentity(line) {\n  const properties = Object.entries(line.properties || {})\n    .filter(([, value]) => value !== null && value !== undefined && value !== \"\")\n    .map(([key, value]) => [key, String(value)])\n    .sort(([a], [b]) => a.localeCompare(b));\n  return JSON.stringify([\n    String(line.variant_id || line.id || \"\"),\n    String(line.selling_plan || line.selling_plan_allocation?.selling_plan?.id || \"\"),\n    properties,\n  ]);\n}\nfunction missingShopifyCartLines(lines, cart) {\n  const required = new Map();\n  for (const line of lines) {\n    const identity = shopifyCartLineIdentity(line);\n    const previous = required.get(identity);\n    required.set(identity, {...line, quantity: Number(line.quantity) + (previous?.quantity || 0)});\n  }\n  const quantities = new Map();\n  for (const line of cart.items) {\n    const identity = shopifyCartLineIdentity(line);\n    quantities.set(identity, (quantities.get(identity) || 0) + line.quantity);\n  }\n  return [...required.entries()].flatMap(([identity, line]) => {\n    const quantity = Math.max(0, line.quantity - (quantities.get(identity) || 0));\n    return quantity ? [{...line, quantity}] : [];\n  });\n}\nlet homepageCheckoutInFlight = false;\n// A cached return from checkout restores this document's old handoff lock.\n// Release it only on restoration; the next attempt rechecks prices and cart.\nwindow.addEventListener(\"pageshow\", (event) => {\n  if (event.persisted) homepageCheckoutInFlight = false;\n});\nasync function continueToShopifyCheckout(lead = directCheckoutLead) {\n  // Every form and sticky checkout entrypoint shares this guard. Keep it latched\n  // after a successful handoff while navigation is pending; failures may retry.\n  if (homepageCheckoutInFlight) return;\n  homepageCheckoutInFlight = true;\n  let handoffStarted = false;\n  try {\n    const lines = getShopifyLines();\n    const verifiedPrices = await verifyStandardDigitalPrices(lines);\n    if (!verifiedPrices.ok) {\n      if (verifiedPrices.changed) updateSummary();\n      throw new Error(verifiedPrices.message);\n    }\n    if (getCheckoutMethod(lines) === \"cart_permalink\") {\n      const checkoutUrl = buildCartPermalink(lead, verifiedPrices.reviewCart);\n      publishEvent(\"sc_codex_checkout_url_built\", {lineCount: lines.length, method: \"cart_permalink\", hasLeadEmail: !!lead.email});\n      publishEvent(\"sc_codex_checkout_handoff\", {hasLeadEmail: !!lead.email, lineCount: lines.length, method: \"cart_permalink\"});\n      redirectToCheckout(checkoutUrl);\n      handoffStarted = true;\n      return;\n    }\n    // Read fresh cart state on each attempt. If an earlier add committed but its\n    // response was lost, add only what is still missing. Preserve unrelated lines.\n    const before = await getShopifyCartSnapshot();\n    const missing = missingShopifyCartLines(lines, before);\n    if (missing.length) await postJson(\"cart/add.js\", {items: missing});\n    const after = await getShopifyCartSnapshot();\n    if (missingShopifyCartLines(lines, after).length) {\n      throw new Error(\"Some selected items could not be added. Please review your cart before trying again.\");\n    }\n    await updateShopifyCartAttributes(lead);\n    publishEvent(\"sc_codex_checkout_url_built\", {lineCount: lines.length, method: \"ajax_cart\", hasLeadEmail: !!lead.email});\n    publishEvent(\"sc_codex_checkout_handoff\", {hasLeadEmail: !!lead.email, lineCount: lines.length, method: \"ajax_cart\"});\n    await new Promise(resolve => window.setTimeout(resolve, 250));\n    redirectToCheckout(verifiedPrices.reviewCart ? getRoutesRoot() + \"cart\" : buildCheckoutUrl(lead));\n    handoffStarted = true;\n  } finally {\n    if (!handoffStarted) homepageCheckoutInFlight = false;\n  }\n}\n\nwindow.__spiralHomepageCheckoutDebug = {\n  buildCartPermalink,\n  getCheckoutLines: getShopifyLines,\n  getCheckoutMethod,\n  getCheckoutErrorMessage,\n  redirectToCheckout,\n  getCartSnapshot,\n  getFunnelEvents: () => [...funnelEvents],\n  trackFunnelEvent,\n  measurement: {\n    funnelVersion,\n    visitorId,\n    sessionId,\n    storageKey: funnelEventQueueKey\n  }\n};\n\nfunction completeLocalPreview(lead) {\n  if (checkoutForm) checkoutForm.hidden = true;\n  if (successScreen) successScreen.hidden = false;\n  renderRows(successItems, getItems(), \"success-row\");\n  const loadout = getLoadoutAttributeSummary();\n  if (loadout.names.length) {\n    successItems?.insertAdjacentHTML(\"beforeend\", `<div class=\"success-row\"><span>Unlocked bonuses</span><strong>${loadout.names.length}</strong></div>`);\n    successItems?.insertAdjacentHTML(\"beforeend\", `<div class=\"success-row\"><span>Delivery note</span><strong>${loadout.deliveryNote}</strong></div>`);\n  }\n  successItems?.insertAdjacentHTML(\"afterbegin\", `<div class=\"success-row\"><span>Captured lead</span><strong>${lead.email}</strong></div>`);\n}\n\nasync function handleCheckoutSubmit(event) {\n  event.preventDefault();\n  const lead = getLead();\n  if (!getShopifyLines().length) {\n    if (formError) formError.textContent = \"Choose at least one item before continuing.\";\n    return;\n  }\n  if (!lead.email || !lead.name) {\n    if (formError) formError.textContent = \"Add your name and email before continuing.\";\n    return;\n  }\n  if (formError) formError.textContent = \"\";\n  if (submitButton) {\n    submitButton.disabled = true;\n    submitButton.textContent = isShopifyStorefront() ? \"Building Shopify checkout...\" : \"Saving preview...\";\n  }\n  try {\n    safeStorageSet(localStorageRef, \"spiralCodexCheckoutLead\", JSON.stringify({ ...lead, capturedAt: new Date().toISOString(), state, totals: getTotals(), loadout: getLoadoutAttributeSummary() }));\n    publishEvent(\"sc_codex_lead_captured\", { hasLeadEmail: Boolean(lead.email), marketingConsent: lead.marketingConsent });\n    if (isShopifyStorefront()) {\n      await continueToShopifyCheckout(lead);\n      return;\n    }\n    completeLocalPreview(lead);\n  } catch (error) {\n    const message = getCheckoutErrorMessage(error);\n    publishEvent(\"sc_codex_checkout_handoff_error\", { message });\n    if (formError) formError.textContent = message;\n  } finally {\n    if (submitButton) {\n      submitButton.disabled = false;\n      submitButton.textContent = \"Continue to secure checkout\";\n    }\n  }\n}\n\nasync function handleStickyCheckoutClick(event) {\n  const lines = getShopifyLines();\n  if (!lines.length) {\n    publishEvent(\"sc_codex_checkout_empty_click\", { source: \"sticky_cart\" });\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    return;\n  }\n  event.preventDefault();\n  if (stickyCheckoutButton) {\n    stickyCheckoutButton.setAttribute(\"aria-busy\", \"true\");\n    stickyCheckoutButton.textContent = isShopifyStorefront() ? \"Opening checkout...\" : \"Checkout ready\";\n  }\n  try {\n    safeStorageSet(localStorageRef, \"spiralCodexCheckoutState\", JSON.stringify({ capturedAt: new Date().toISOString(), state, totals: getTotals(), loadout: getLoadoutAttributeSummary() }));\n    publishEvent(\"sc_codex_direct_checkout_click\", { lineCount: lines.length, method: getCheckoutMethod(lines) });\n    if (isShopifyStorefront()) {\n      await continueToShopifyCheckout();\n      return;\n    }\n    showToast(\"Local preview: this opens Shopify checkout on the live store.\");\n  } catch (error) {\n    showToast(getCheckoutErrorMessage(error));\n    publishEvent(\"sc_codex_checkout_handoff_error\", { message: getCheckoutErrorMessage(error), source: \"sticky_cart\" });\n  } finally {\n    if (stickyCheckoutButton) {\n      stickyCheckoutButton.removeAttribute(\"aria-busy\");\n      stickyCheckoutButton.textContent = \"Checkout\";\n    }\n  }\n}\n\nfunction getClickElement(event) {\n  return event.target instanceof Element ? event.target : event.target?.parentElement || null;\n}\n\nfunction claimDelegatedClick(event) {\n  event.preventDefault();\n  event.stopPropagation();\n  event.stopImmediatePropagation?.();\n}\n\nfunction handleDelegatedHomepageClick(event) {\n  const target = getClickElement(event);\n  if (!target) return;\n\n  if (target.closest(\".codex-preview-trigger\")) {\n    return;\n  }\n\n  const funnelAction = target.closest(\"[data-funnel-action]\");\n  if (funnelAction) {\n    publishEvent(\"sc_codex_funnel_action_click\", {\n      action: funnelAction.dataset.funnelAction || \"\",\n      label: funnelAction.textContent.trim().slice(0, 90)\n    });\n  }\n\n  const stickyRemove = target.closest(\"[data-sticky-remove-type]\");\n  if (stickyRemove) {\n    claimDelegatedClick(event);\n    removeStickyCartItem(stickyRemove.dataset.stickyRemoveType, stickyRemove.dataset.stickyRemoveKey);\n    return;\n  }\n\n  if (target.closest(\"#sticky-cart-toggle\")) {\n    claimDelegatedClick(event);\n    stickyCartExpanded = !stickyCartExpanded;\n    if (!stickyCartExpanded && stickyBonusPanel && stickyBonusToggle) {\n      stickyBonusToggle.setAttribute(\"aria-expanded\", \"false\");\n      stickyBonusPanel.hidden = true;\n    }\n    updateSummary();\n    publishEvent(\"sc_codex_sticky_cart_toggle\", { expanded: stickyCartExpanded, source: \"sticky_cart\" });\n    return;\n  }\n\n  if (target.closest(\"#sticky-bonus-toggle\")) {\n    claimDelegatedClick(event);\n    const isExpanded = stickyBonusToggle?.getAttribute(\"aria-expanded\") === \"true\";\n    stickyBonusToggle?.setAttribute(\"aria-expanded\", String(!isExpanded));\n    if (stickyBonusPanel) stickyBonusPanel.hidden = isExpanded;\n    publishEvent(\"sc_codex_bonus_panel_toggle\", { expanded: !isExpanded, source: \"sticky_cart\" });\n    return;\n  }\n\n  if (target.closest(\"#sticky-checkout-button\")) {\n    claimDelegatedClick(event);\n    handleStickyCheckoutClick(event);\n    return;\n  }\n\n  const getCodexButton = target.closest(\"[data-get-codex]\");\n  if (getCodexButton) {\n    claimDelegatedClick(event);\n    state.core = \"digital\";\n    markCartSource(getCodexButton.dataset.funnelAction || \"get_codex\");\n    updateSummary();\n    showToast(\"Selected. Press Checkout to complete your order.\");\n    publishEvent(\"sc_codex_primary_cta_click\", { core: state.core });\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    getCodexButton.blur?.();\n    return;\n  }\n\n  const coreButton = target.closest(\"[data-core]\");\n  if (coreButton) {\n    claimDelegatedClick(event);\n    const nextCore = coreButton.dataset.core === \"physical\" ? \"physical\" : \"digital\";\n    state.core = state.core === nextCore ? null : nextCore;\n    markCartSource(coreButton.dataset.funnelAction || `core_${nextCore}`);\n    updateSummary();\n    publishEvent(\"sc_codex_core_change\", { core: state.core });\n    coreButton.blur?.();\n    return;\n  }\n\n  const passButton = target.closest(\"[data-toggle='pass']\");\n  if (passButton) {\n    claimDelegatedClick(event);\n    state.pass = !state.pass;\n    markCartSource(\"pass_toggle\");\n    updateSummary();\n    showToast(state.pass ? \"Fight Intelligence Pass added.\" : \"Fight Intelligence Pass removed.\");\n    publishEvent(\"sc_codex_upsell_toggle\", { upsell: \"pass\", active: state.pass });\n    passButton.blur?.();\n    return;\n  }\n\n  const starterButton = target.closest(\"[data-toggle='starter']\");\n  if (starterButton) {\n    claimDelegatedClick(event);\n    const firstThreeSelected = [\"1\", \"2\", \"3\"].every((key) => getSelectedRuleKeys().includes(key));\n    setSelectedRules(firstThreeSelected ? [] : [\"1\", \"2\", \"3\"], \"starter_rule_videos\");\n    showToast(firstThreeSelected ? \"First 3 Rule Videos removed.\" : \"First 3 Rule Videos added.\");\n    starterButton.blur?.();\n    return;\n  }\n\n  const ruleBundleButton = target.closest(\"[data-rule-bundle]\");\n  if (ruleBundleButton) {\n    claimDelegatedClick(event);\n    const keys = ruleBundleButton.dataset.ruleBundle === \"all\" ? [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"] : [\"1\", \"2\", \"3\"];\n    const selected = new Set(getSelectedRuleKeys());\n    const allSelected = keys.every((key) => selected.has(key));\n    setSelectedRules(allSelected ? getSelectedRuleKeys().filter((key) => !keys.includes(key)) : keys, ruleBundleButton.dataset.ruleBundle === \"all\" ? \"all_rule_videos\" : \"popular_rule_videos\");\n    showToast(ruleBundleButton.dataset.ruleBundle === \"all\"\n      ? (allSelected ? \"All 6 Rule Videos removed.\" : \"All 6 Rule Videos added.\")\n      : (allSelected ? \"First 3 Rule Videos removed.\" : \"First 3 Rule Videos added.\"));\n    ruleBundleButton.blur?.();\n    return;\n  }\n\n  const ruleCard = target.closest(\".rule-card[data-rule]\");\n  if (ruleCard) {\n    claimDelegatedClick(event);\n    toggleRule(ruleCard.dataset.rule);\n    ruleCard.blur?.();\n    return;\n  }\n\n  const appModeButton = target.closest(\"[data-app-mode]\");\n  if (appModeButton) {\n    claimDelegatedClick(event);\n    const requestedMode = appModeButton.dataset.appMode;\n    const selectedApplications = getSelectedApplications();\n    let nextMode = requestedMode;\n    if (requestedMode === \"all\" && state.appMode === \"all\") nextMode = \"none\";\n    if (requestedMode === \"custom\" && state.appMode === \"custom\" && selectedApplications.length) nextMode = \"none\";\n    setApplicationMode(nextMode);\n    showToast(requestedMode === \"all\"\n      ? (nextMode === \"none\" ? `All ${getApplicationCount()} Disciplines cleared.` : `All ${getApplicationCount()} Disciplines added.`)\n      : nextMode === \"none\"\n        ? \"Disciplines cleared.\"\n        : `${state.discipline} Discipline Codex added.`);\n    appModeButton.blur?.();\n    return;\n  }\n\n  const appFormatButton = target.closest(\"[data-app-format]\");\n  if (appFormatButton) {\n    claimDelegatedClick(event);\n    state.applicationFormat = appFormatButton.dataset.appFormat === \"physical\" ? \"physical\" : \"digital\";\n    if (state.appMode === \"custom\") {\n      state.selectedApplications = getSelectedApplications();\n      if (!state.selectedApplications.length) state.appMode = \"none\";\n    }\n    if (!getAvailableApplicationNames().includes(state.discipline)) state.discipline = getAvailableApplicationNames()[0];\n    markCartSource(\"discipline_format\");\n    updateSummary();\n    showToast(`Discipline format: ${getApplicationFormatLabel()}.`);\n    appFormatButton.blur?.();\n    return;\n  }\n\n  const appAllButton = target.closest(\"[data-app-card-all]\");\n  if (appAllButton) {\n    claimDelegatedClick(event);\n    setApplicationMode(state.appMode === \"all\" ? \"none\" : \"all\", \"application_section_all\");\n    appAllButton.blur?.();\n    return;\n  }\n\n  const appReviewButton = target.closest(\"[data-app-review]\");\n  if (appReviewButton) {\n    claimDelegatedClick(event);\n    document.querySelector(\"#apps\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    publishEvent(\"sc_codex_application_review_click\", { selectedApplications: getSelectedApplications() });\n    return;\n  }\n\n  const appClearButton = target.closest(\"[data-app-clear]\");\n  if (appClearButton) {\n    claimDelegatedClick(event);\n    setApplicationMode(\"none\", \"application_clear\");\n    appClearButton.blur?.();\n    return;\n  }\n\n  const applicationCard = target.closest(\".application-card[data-application]\");\n  if (applicationCard) {\n    claimDelegatedClick(event);\n    toggleApplication(applicationCard.dataset.application);\n    applicationCard.blur?.();\n    return;\n  }\n\n  const doctrineBundleButton = target.closest(\"[data-doctrine-bundle]\");\n  if (doctrineBundleButton) {\n    claimDelegatedClick(event);\n    toggleDoctrineBundle(doctrineBundleButton.dataset.doctrineBundle);\n    doctrineBundleButton.blur?.();\n    return;\n  }\n\n  const doctrineButton = target.closest(\"[data-doctrine]\");\n  if (doctrineButton) {\n    claimDelegatedClick(event);\n    toggleDoctrine(doctrineButton.dataset.doctrine);\n    doctrineButton.blur?.();\n    return;\n  }\n\n  const recommendedButton = target.closest(\"[data-recommended]\");\n  if (recommendedButton) {\n    claimDelegatedClick(event);\n    publishEvent(\"sc_codex_step_one_cta_click\", { source: \"hero_secondary\" });\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\" });\n    recommendedButton.blur?.();\n    return;\n  }\n\n  if (target.closest(\"#edit-order\")) {\n    claimDelegatedClick(event);\n    if (checkoutForm) checkoutForm.hidden = false;\n    if (successScreen) successScreen.hidden = true;\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\" });\n  }\n}\n\ndocument.addEventListener(\"click\", handleDelegatedHomepageClick, true);\ndocument.addEventListener(\"keydown\", (event) => {\n  const card = event.target instanceof Element && event.target.matches(\".application-card[data-application]\")\n    ? event.target\n    : null;\n  if (!card || (event.key !== \"Enter\" && event.key !== \" \")) return;\n  event.preventDefault();\n  event.stopImmediatePropagation();\n  toggleApplication(card.dataset.application);\n}, true);\n\ndocument.querySelectorAll(\"[data-core]\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    const nextCore = button.dataset.core === \"physical\" ? \"physical\" : \"digital\";\n    state.core = state.core === nextCore ? null : nextCore;\n    markCartSource(button.dataset.funnelAction || `core_${nextCore}`);\n    updateSummary();\n    publishEvent(\"sc_codex_core_change\", { core: state.core });\n    button.blur();\n  });\n});\n\ndocument.querySelectorAll(\"[data-get-codex]\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    state.core = \"digital\";\n    markCartSource(button.dataset.funnelAction || \"get_codex\");\n    updateSummary();\n    showToast(\"Selected. Press Checkout to complete your order.\");\n    publishEvent(\"sc_codex_primary_cta_click\", { core: state.core });\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    button.blur();\n  });\n});\n\ndocument.querySelectorAll(\"[data-toggle='pass']\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    state.pass = !state.pass;\n    markCartSource(\"pass_toggle\");\n    updateSummary();\n    showToast(state.pass ? \"Fight Intelligence Pass added.\" : \"Fight Intelligence Pass removed.\");\n    publishEvent(\"sc_codex_upsell_toggle\", { upsell: \"pass\", active: state.pass });\n    button.blur();\n  });\n});\n\ndocument.querySelectorAll(\"[data-toggle='starter']\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    const firstThreeSelected = [\"1\", \"2\", \"3\"].every((key) => getSelectedRuleKeys().includes(key));\n    setSelectedRules(firstThreeSelected ? [] : [\"1\", \"2\", \"3\"], \"starter_rule_videos\");\n    showToast(firstThreeSelected ? \"First 3 Rule Videos removed.\" : \"First 3 Rule Videos added.\");\n    button.blur();\n  });\n});\n\ndocument.querySelectorAll(\"[data-rule-bundle]\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    const keys = button.dataset.ruleBundle === \"all\" ? [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"] : [\"1\", \"2\", \"3\"];\n    const selected = new Set(getSelectedRuleKeys());\n    const allSelected = keys.every((key) => selected.has(key));\n    setSelectedRules(allSelected ? getSelectedRuleKeys().filter((key) => !keys.includes(key)) : keys, button.dataset.ruleBundle === \"all\" ? \"all_rule_videos\" : \"popular_rule_videos\");\n    showToast(button.dataset.ruleBundle === \"all\"\n      ? (allSelected ? \"All 6 Rule Videos removed.\" : \"All 6 Rule Videos added.\")\n      : (allSelected ? \"First 3 Rule Videos removed.\" : \"First 3 Rule Videos added.\"));\n    button.blur();\n  });\n});\n\nruleCards.forEach((card) => {\n  const select = () => {\n    toggleRule(card.dataset.rule);\n    card.blur();\n  };\n  card.addEventListener(\"click\", select);\n  card.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\" || event.key === \" \") {\n      event.preventDefault();\n      select();\n    }\n  });\n});\n\ndocument.querySelectorAll(\"[data-app-mode]\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    const requestedMode = button.dataset.appMode;\n    const selectedApplications = getSelectedApplications();\n    let nextMode = requestedMode;\n    if (requestedMode === \"all\" && state.appMode === \"all\") nextMode = \"none\";\n    if (requestedMode === \"custom\" && state.appMode === \"custom\" && selectedApplications.length) nextMode = \"none\";\n    setApplicationMode(nextMode);\n    showToast(requestedMode === \"all\"\n      ? (nextMode === \"none\" ? `All ${getApplicationCount()} Disciplines cleared.` : `All ${getApplicationCount()} Disciplines added.`)\n      : nextMode === \"none\"\n        ? \"Disciplines cleared.\"\n        : `${state.discipline} Discipline Codex added.`);\n    button.blur();\n  });\n});\n\napplicationFormatButtons.forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    state.applicationFormat = button.dataset.appFormat === \"physical\" ? \"physical\" : \"digital\";\n    if (state.appMode === \"custom\") {\n      state.selectedApplications = getSelectedApplications();\n      if (!state.selectedApplications.length) state.appMode = \"none\";\n    }\n    if (!getAvailableApplicationNames().includes(state.discipline)) state.discipline = getAvailableApplicationNames()[0];\n    markCartSource(\"discipline_format\");\n    updateSummary();\n    showToast(`Discipline format: ${getApplicationFormatLabel()}.`);\n    button.blur();\n  });\n});\n\napplicationCards.forEach((card) => {\n  const select = () => {\n    toggleApplication(card.dataset.application);\n    card.blur();\n  };\n  card.addEventListener(\"click\", select);\n});\n\napplicationAllButton?.addEventListener(\"click\", () => {\n  setApplicationMode(state.appMode === \"all\" ? \"none\" : \"all\", \"application_section_all\");\n  applicationAllButton.blur();\n});\napplicationReviewButtons.forEach((button) => button.addEventListener(\"click\", () => {\n  document.querySelector(\"#apps\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n  publishEvent(\"sc_codex_application_review_click\", { selectedApplications: getSelectedApplications() });\n}));\napplicationClearButtons.forEach((button) => button.addEventListener(\"click\", () => {\n  setApplicationMode(\"none\", \"application_clear\");\n  button.blur();\n}));\n\ndisciplineSelect?.addEventListener(\"change\", (event) => {\n  state.discipline = event.target.value;\n  if (state.appMode !== \"all\" && !getSelectedApplications().includes(state.discipline)) {\n    state.selectedApplications = [...getSelectedApplications(), state.discipline];\n    state.appMode = \"custom\";\n  }\n  updateSummary();\n});\n\ndoctrineButtons.forEach((button) => button.addEventListener(\"click\", () => {\n  toggleDoctrine(button.dataset.doctrine);\n  button.blur();\n}));\ndoctrineBundleButtons.forEach((button) => button.addEventListener(\"click\", () => {\n  toggleDoctrineBundle(button.dataset.doctrineBundle);\n  button.blur();\n}));\n\ndocument.querySelectorAll(\"[data-recommended]\").forEach((button) => {\n  button.addEventListener(\"click\", () => {\n    publishEvent(\"sc_codex_step_one_cta_click\", { source: \"hero_secondary\" });\n    document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\" });\n    button.blur();\n  });\n});\n\ndocument.querySelectorAll(\"[data-cro-event]\").forEach((element) => {\n  element.addEventListener(\"click\", () => {\n    publishEvent(\"sc_codex_cro_navigation_click\", { croEvent: element.dataset.croEvent, label: element.textContent.trim(), href: element.getAttribute(\"href\") || \"\" });\n  });\n});\n\ncheckoutForm?.addEventListener(\"submit\", handleCheckoutSubmit);\nstickyCheckoutButton?.addEventListener(\"click\", handleStickyCheckoutClick);\nstickyCartItems?.addEventListener(\"click\", (event) => {\n  const removeButton = event.target.closest(\"[data-sticky-remove-type]\");\n  if (!removeButton) return;\n  event.preventDefault();\n  event.stopPropagation();\n  removeStickyCartItem(removeButton.dataset.stickyRemoveType, removeButton.dataset.stickyRemoveKey);\n});\nstickyCartToggle?.addEventListener(\"click\", () => {\n  stickyCartExpanded = !stickyCartExpanded;\n  if (!stickyCartExpanded && stickyBonusPanel && stickyBonusToggle) {\n    stickyBonusToggle.setAttribute(\"aria-expanded\", \"false\");\n    stickyBonusPanel.hidden = true;\n  }\n  updateSummary();\n  publishEvent(\"sc_codex_sticky_cart_toggle\", { expanded: stickyCartExpanded, source: \"sticky_cart\" });\n});\nstickyBonusToggle?.addEventListener(\"click\", () => {\n  const isExpanded = stickyBonusToggle.getAttribute(\"aria-expanded\") === \"true\";\n  stickyBonusToggle.setAttribute(\"aria-expanded\", String(!isExpanded));\n  if (stickyBonusPanel) stickyBonusPanel.hidden = isExpanded;\n  publishEvent(\"sc_codex_bonus_panel_toggle\", { expanded: !isExpanded, source: \"sticky_cart\" });\n});\ndocument.querySelector(\"#edit-order\")?.addEventListener(\"click\", () => {\n  if (checkoutForm) checkoutForm.hidden = false;\n  if (successScreen) successScreen.hidden = true;\n  document.querySelector(\"#codex\")?.scrollIntoView({ behavior: \"smooth\" });\n});\n\nfunction bindSpiralHomepageHashLinks() {\n  const page = document.querySelector(\".spiral-codex-page\");\n  if (!page) return;\n\n  const header = document.querySelector(\".topbar\");\n  const getOffset = () => Math.max(Math.round(header?.getBoundingClientRect().height || 0) + 24, 92);\n  const scrollToTargetWithOffset = (target, href = \"\", behavior = \"smooth\") => {\n    const getTop = () => Math.max(window.scrollY + target.getBoundingClientRect().top - getOffset(), 0);\n    const correctionDelays = href === \"#faq\" ? [160, 420, 820, 1400, 2200] : [160, 420, 820];\n\n    window.scrollTo({ top: getTop(), behavior });\n    correctionDelays.forEach((delay) => {\n      window.setTimeout(() => {\n        window.scrollTo({ top: getTop(), behavior: \"auto\" });\n      }, delay);\n    });\n  };\n\n  page.querySelectorAll('a[href^=\"#\"]').forEach((anchor) => {\n    if (anchor.dataset.scHomepageHashBound === \"true\") return;\n\n    anchor.dataset.scHomepageHashBound = \"true\";\n    anchor.addEventListener(\"click\", (event) => {\n      const href = anchor.getAttribute(\"href\") || \"\";\n      if (href.length <= 1) return;\n\n      const target = href === \"#top\" ? document.getElementById(\"top\") || page : document.getElementById(href.slice(1));\n      if (!target) return;\n\n      event.preventDefault();\n      history.replaceState(null, \"\", href);\n      scrollToTargetWithOffset(target, href, href === \"#top\" ? \"auto\" : \"smooth\");\n    });\n  });\n\n  const initialHash = window.location.hash || \"\";\n  if (initialHash.length > 1 && initialHash !== \"#top\") {\n    const initialTarget = document.getElementById(initialHash.slice(1));\n    if (initialTarget) {\n      window.setTimeout(() => scrollToTargetWithOffset(initialTarget, initialHash, \"auto\"), 60);\n    }\n  }\n}\n\ninitCodexBookPreviews();\n\nfunction initCodexBookPreviews(attempt = 0) {\n  const previewCatalogNode = document.querySelector(\"[data-sc-book-preview-catalog]\");\n  const lightbox = document.querySelector(\"[data-codex-card-preview-lightbox]\");\n  if (!previewCatalogNode || !lightbox) {\n    if (attempt < 12) {\n      window.setTimeout(() => initCodexBookPreviews(attempt + 1), 120);\n    }\n    return;\n  }\n\n  let previewCatalog = [];\n  try {\n    previewCatalog = JSON.parse(previewCatalogNode.textContent || \"[]\");\n  } catch {\n    previewCatalog = [];\n  }\n\n  if (!Array.isArray(previewCatalog) || !previewCatalog.length) return;\n\n  const triggerInstallCount = previewCatalog.reduce((count, entry) => {\n    if (!entry?.selector || !Array.isArray(entry.pages) || !entry.pages.length) return count;\n    const target = document.querySelector(entry.selector);\n    return target ? count + 1 : count;\n  }, 0);\n  if (!triggerInstallCount) {\n    if (attempt < 12) {\n      window.setTimeout(() => initCodexBookPreviews(attempt + 1), 120);\n    }\n    return;\n  }\n\n  const image = lightbox.querySelector(\"[data-codex-card-preview-image]\");\n  const title = lightbox.querySelector(\"#codex-card-preview-title\");\n  const eyebrow = lightbox.querySelector(\"#codex-card-preview-eyebrow\");\n  const caption = lightbox.querySelector(\"#codex-card-preview-caption\");\n  const label = lightbox.querySelector(\"#codex-card-preview-label\");\n  const pageCount = lightbox.querySelector(\"#codex-card-preview-page-count\");\n  const dots = lightbox.querySelector(\"[data-codex-card-preview-dots]\");\n  const closeButtons = Array.from(lightbox.querySelectorAll(\"[data-codex-card-preview-close]\"));\n  const navButtons = Array.from(lightbox.querySelectorAll(\"[data-codex-card-preview-nav]\"));\n  const closeButton = lightbox.querySelector(\".codex-card-preview-lightbox__close\");\n  const previewIconMarkup = [\n    '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">',\n    '<circle cx=\"11\" cy=\"11\" r=\"6\"></circle>',\n    '<path d=\"M20 20l-4.35-4.35\"></path>',\n    \"</svg>\",\n    '<span class=\"codex-preview-trigger__sr\">Preview pages</span>',\n  ].join(\"\");\n\n  let currentEntry = null;\n  let currentPages = [];\n  let currentIndex = 0;\n  let lastFocusedElement = null;\n  let restoreBodyOverflow = \"\";\n\n  const normalizeIndex = (index) => {\n    if (!currentPages.length) return 0;\n    return (index + currentPages.length) % currentPages.length;\n  };\n\n  const renderDots = () => {\n    if (!dots) return;\n    dots.innerHTML = \"\";\n    currentPages.forEach((page, index) => {\n      const dot = document.createElement(\"button\");\n      dot.type = \"button\";\n      dot.className = \"codex-card-preview-lightbox__dot\" + (index === currentIndex ? \" is-active\" : \"\");\n      dot.setAttribute(\"aria-label\", \"Open preview page \" + (index + 1));\n      dot.addEventListener(\"click\", () => {\n        currentIndex = index;\n        renderPage();\n      });\n      dots.appendChild(dot);\n    });\n  };\n\n  const renderPage = () => {\n    const page = currentPages[currentIndex];\n    if (!page || !currentEntry || !image || !title || !caption || !label || !pageCount) return;\n    label.textContent = currentEntry.label;\n    pageCount.textContent = \"Preview \" + (currentIndex + 1) + \" of \" + currentPages.length\n      + (page.pageNumber ? \" - Book page \" + page.pageNumber : \"\");\n    if (eyebrow) eyebrow.textContent = page.eyebrow || \"\";\n    image.src = page.src;\n    image.alt = page.alt;\n    title.textContent = page.title;\n    caption.textContent = page.description;\n    renderDots();\n  };\n\n  const openLightbox = (entry, index, focusSource) => {\n    currentEntry = entry;\n    currentPages = Array.isArray(entry.pages) ? entry.pages : [];\n    if (!currentPages.length) return;\n    currentIndex = normalizeIndex(index);\n    renderPage();\n    lastFocusedElement = focusSource || document.activeElement;\n    restoreBodyOverflow = document.body.style.overflow || \"\";\n    lightbox.hidden = false;\n    document.body.style.overflow = \"hidden\";\n    closeButton?.focus();\n  };\n\n  const closeLightbox = () => {\n    if (lightbox.hidden) return;\n    lightbox.hidden = true;\n    document.body.style.overflow = restoreBodyOverflow;\n    lastFocusedElement?.focus?.();\n  };\n\n  previewCatalog.forEach((entry) => {\n    if (!entry?.selector || !Array.isArray(entry.pages) || !entry.pages.length) return;\n    const target = document.querySelector(entry.selector);\n    if (!target || target.querySelector(\".codex-preview-trigger\")) return;\n\n    const trigger = document.createElement(\"button\");\n    trigger.type = \"button\";\n    trigger.className = \"codex-preview-trigger\";\n    trigger.innerHTML = previewIconMarkup;\n    trigger.title = \"Preview sample pages from the \" + entry.label;\n    trigger.setAttribute(\"aria-label\", \"Preview sample pages from the \" + entry.label);\n    trigger.addEventListener(\"pointerdown\", (event) => {\n      event.stopPropagation();\n    });\n    trigger.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      event.stopImmediatePropagation?.();\n      openLightbox(entry, 0, trigger);\n      trigger.blur?.();\n    });\n\n    target.appendChild(trigger);\n  });\n\n  if (lightbox.dataset.codexCardPreviewBound === \"true\") {\n    return;\n  }\n  lightbox.dataset.codexCardPreviewBound = \"true\";\n\n  closeButtons.forEach((button) => {\n    button.addEventListener(\"click\", () => closeLightbox());\n  });\n\n  navButtons.forEach((button) => {\n    button.addEventListener(\"click\", () => {\n      currentIndex = normalizeIndex(currentIndex + Number(button.dataset.codexCardPreviewNav || 0));\n      renderPage();\n    });\n  });\n\n  document.addEventListener(\"keydown\", (event) => {\n    if (lightbox.hidden) return;\n    if (event.key === \"Escape\") {\n      closeLightbox();\n    } else if (event.key === \"ArrowRight\") {\n      currentIndex = normalizeIndex(currentIndex + 1);\n      renderPage();\n    } else if (event.key === \"ArrowLeft\") {\n      currentIndex = normalizeIndex(currentIndex - 1);\n      renderPage();\n    }\n  });\n}\n\ninitCodexBookPreviews();\nwindow.setTimeout(() => initCodexBookPreviews(), 240);\nwindow.addEventListener(\"load\", () => initCodexBookPreviews(), { once: true });\nupdateSummary();\nbindSpiralHomepageHashLinks();\ntrackFunnelEvent(\"sc_codex_page_view\", {\n  page: \"homepage\",\n  sectionCount: document.querySelectorAll(\"[data-funnel-section]\").length,\n  hasVideo: Boolean(document.querySelector(\"[data-proof-video]\")),\n  utmSource: new URLSearchParams(window.location.search).get(\"utm_source\") || \"\",\n  utmMedium: new URLSearchParams(window.location.search).get(\"utm_medium\") || \"\",\n  utmCampaign: new URLSearchParams(window.location.search).get(\"utm_campaign\") || \"\"\n});\ninitFunnelSectionTracking();\ntrackPagePerformance();\n  };\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", runSpiralCodexHomepage, { once: true });\n  } else {\n    runSpiralCodexHomepage();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
