{
  "version": 3,
  "sources": ["/cdn/shop/t/25/assets/theme.js?cb=newsletter-fallback-20260703"],
  "sourcesContent": ["(() => {\n  const SELECTORS = {\n    drawer: \"[data-drawer]\",\n    drawerOpen: \"[data-open-drawer]\",\n    drawerClose: \"[data-close-drawer]\",\n    mobileNavToggle: \"[data-mobile-nav-toggle]\",\n    mobileNav: \".site-nav--mobile\",\n    mobileRoot: \"[data-mobile-root]\",\n    mobilePanel: \"[data-mobile-panel]\",\n    mobilePanelOpen: \"[data-mobile-panel-open]\",\n    mobilePanelBack: \"[data-mobile-panel-back]\",\n    mobileHeroLink: \"[data-mobile-hero-href]\",\n    navToggle: \"[data-nav-toggle]\",\n    navItem: \"[data-nav-item]\",\n    headerBar: \".site-header__bar\",\n    header: \"[data-site-header]\",\n    carousel: \"[data-carousel]\",\n    journey: \"[data-journey]\",\n    addToCart: \"[data-add-to-cart]\",\n    cartItems: \"[data-cart-items]\",\n    cartTotal: \"[data-cart-total]\",\n    predictiveInput: \"[data-predictive-search-input]\",\n    predictiveResults: \"[data-predictive-search-results]\",\n    predictiveViewAll: \"[data-predictive-search-view-all]\",\n    productGallery: \"[data-product-gallery]\",\n    productPreorderForm: \"[data-product-preorder-form]\",\n    productPreorderAccordion: \"[data-product-preorder-accordion]\",\n    productPreorderPolicyAccordion: \"[data-product-preorder-policy-accordion]\",\n    productWearWith: \"[data-product-wear-with]\",\n    reveal: \"[data-reveal]\",\n    faqSearch: \"[data-faq-search]\",\n    homeSignupModal: \"[data-home-signup-modal]\",\n    homeSignupClose: \"[data-home-signup-close]\",\n    homeSignupForm: \"#HomeSignupModalForm\",\n    homeSignupSuccess: \"[data-home-signup-success]\",\n    homeSignupFormRow: \"[data-home-signup-form-row]\",\n    homeSignupTrigger: \"[data-home-signup-trigger]\",\n    footerNewsletter: \".site-footer__newsletter\",\n    footerNewsletterForm: \"#FooterNewsletterForm\",\n    headerNewsletter: \"[data-header-newsletter-shell]\",\n    headerNewsletterForm: \"#HeaderMegaNewsletterForm\",\n    checkoutIntent: \"[data-refi-checkout-intent]\",\n    pointerRevealButton: \".refi-pointer-reveal-button\",\n    deferredImage: \"[data-deferred-src], [data-deferred-srcset]\"\n  };\n\n  const state = {\n    drawers: {},\n    activeDrawer: null,\n    productDrawerReturnFocus: null,\n    mobileNavOpen: false,\n    activeMobilePanel: null,\n    predictiveAbort: null,\n    homeSignupModalOpen: false,\n    cartAnimationIntent: null,\n    lastCartCount: null,\n    cartCouponSyncPromise: null,\n    cartCouponSyncedCode: \"\",\n    cartQueue: Promise.resolve(),\n    cartSnapshotSyncing: false,\n    pendingQuizSyncSignature: \"\",\n    pendingQuizCartSignature: \"\"\n  };\n\n  const KNOWN_EMAIL_STORAGE_KEY = \"refi-known-email\";\n  const HOME_SIGNUP_SESSION_ENTRY_KEY = \"refi-home-signup-session-entry-seen\";\n  const CHECKOUT_INTENT_DEDUPE_STORAGE_KEY = \"refi-checkout-intent-last\";\n  const CHECKOUT_INTENT_DEDUPE_MS = 2 * 60 * 1000;\n  const PENDING_CART_SNAPSHOT_STORAGE_KEY = \"refi-pending-cart-snapshot\";\n  const DEFAULT_CART_SNAPSHOT_SYNC_ENDPOINT = \"/apps/refi-quiz-sync/cart-snapshot\";\n  const PENDING_QUIZ_RESULT_COOKIE = \"refi_pending_quiz_result\";\n  const QUIZ_CART_ATTRIBUTE_STAGE = \"refi_quiz_stage\";\n  const QUIZ_CART_ATTRIBUTE_COMPLETED_AT = \"refi_quiz_completed_at\";\n  const QUIZ_STAGE_ALIASES = {\n    begin: \"begin\",\n    beginning: \"begin\",\n    leap: \"leap\",\n    heal: \"heal\",\n    become: \"become\"\n  };\n  const DEFAULT_QUIZ_SYNC_ENDPOINT = \"/apps/refi-quiz-sync/quiz-results-v2\";\n\n  const getMobileNav = () => document.querySelector(SELECTORS.mobileNav);\n  const getMobileNavMode = () => getMobileNav()?.dataset.mobileNavMode || \"accordion\";\n\n  const setMobilePanel = (panelName) => {\n    const nav = getMobileNav();\n    if (!nav) return;\n\n    state.activeMobilePanel = panelName || null;\n    nav.classList.toggle(\"is-panel-active\", Boolean(panelName));\n\n    nav.querySelectorAll(SELECTORS.mobilePanel).forEach((panel) => {\n      const isActive = panel.dataset.mobilePanel === panelName;\n      panel.classList.toggle(\"is-active\", isActive);\n      panel.hidden = !isActive;\n      panel.setAttribute(\"aria-hidden\", isActive ? \"false\" : \"true\");\n    });\n\n    nav.querySelectorAll(SELECTORS.mobilePanelOpen).forEach((button) => {\n      const isExpanded = button.dataset.mobilePanelOpen === panelName;\n      button.setAttribute(\"aria-expanded\", isExpanded ? \"true\" : \"false\");\n    });\n  };\n\n  const formatMoney = (cents, currencyCode) => {\n    const value = Number(cents || 0) / 100;\n    const code = currencyCode || window.themeStrings?.currencyCode || \"USD\";\n    return new Intl.NumberFormat(undefined, { style: \"currency\", currency: code }).format(value);\n  };\n\n  const getLosAngelesDateParts = (date = new Date()) => {\n    const parts = new Intl.DateTimeFormat(\"en-US\", {\n      timeZone: \"America/Los_Angeles\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hourCycle: \"h23\"\n    }).formatToParts(date);\n    const values = Object.fromEntries(parts.map((part) => [part.type, part.value]));\n\n    return {\n      year: Number(values.year),\n      month: Number(values.month),\n      day: Number(values.day),\n      hour: Number(values.hour),\n      minute: Number(values.minute),\n      second: Number(values.second)\n    };\n  };\n\n  const isWarehouseBusinessDay = (date) => {\n    const weekday = date.getUTCDay();\n    if (weekday === 0 || weekday === 6) return false;\n    const year = date.getUTCFullYear();\n    const month = date.getUTCMonth();\n    const day = date.getUTCDate();\n    const week = Math.ceil(day / 7);\n    if (weekday === 1 && (\n      (month === 0 && week === 3) || (month === 1 && week === 3) ||\n      (month === 4 && day >= 25) || (month === 8 && week === 1) ||\n      (month === 9 && week === 2)\n    )) return false;\n    if (month === 10 && weekday === 4 && week === 4) return false;\n    return ![[year, 0, 1], [year, 5, 19], [year, 6, 4], [year, 10, 11],\n      [year, 11, 25], [year + 1, 0, 1]].some(([y, m, d]) => {\n      const observed = new Date(Date.UTC(y, m, d));\n      const holidayWeekday = observed.getUTCDay();\n      if (holidayWeekday === 6) observed.setUTCDate(d - 1);\n      if (holidayWeekday === 0) observed.setUTCDate(d + 1);\n      return observed.getTime() === date.getTime();\n    });\n  };\n\n  const getDispatchStatus = (now = new Date()) => {\n    const la = getLosAngelesDateParts(now);\n    const today = new Date(Date.UTC(la.year, la.month - 1, la.day));\n    if (!isWarehouseBusinessDay(today)) return { key: \"next\", minutes: 0 };\n    let key = la.hour < 7 ? \"morning\" : \"today\";\n    let targetHour = la.hour < 7 ? 7 : 17;\n    if (la.hour >= 17) {\n      const tomorrow = new Date(today.getTime());\n      tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);\n      if (!isWarehouseBusinessDay(tomorrow)) return { key: \"next\", minutes: 0 };\n      key = \"tomorrow\";\n      targetHour = 31;\n    }\n    return { key, minutes: Math.ceil(((targetHour - la.hour) * 3600 - la.minute * 60 - la.second) / 60) };\n  };\n\n  const updateDispatchMessages = (scope = document) => {\n    const status = getDispatchStatus();\n    scope.querySelectorAll(\"[data-dispatch-message]\").forEach((node) => {\n      const enabled = node.dataset.dispatchEnabled === \"true\";\n      node.hidden = !enabled;\n      if (!enabled) return;\n      const hours = Math.floor(status.minutes / 60);\n      const time = (hours === 1 ? node.dataset.timeSingular : node.dataset.timePlural)\n        .replace(\"__HOURS__\", hours).replace(\"__MINUTES__\", status.minutes % 60);\n      const message = node.dataset[status.key].replace(\"__TIME__\", time);\n      if (node.dataset.dispatchRendered === message) return;\n      const emphasize = Boolean(node.closest(\"[data-product-dispatch]\"));\n      node.replaceChildren(...message.split(/(\\[\\[.*?\\]\\])/g).map((part) => {\n        const marked = part.startsWith(\"[[\") && part.endsWith(\"]]\");\n        const text = marked ? part.slice(2, -2) : part;\n        if (!marked || !emphasize) return document.createTextNode(text);\n        const span = document.createElement(\"span\");\n        span.className = \"dispatch-emphasis\";\n        span.textContent = text;\n        return span;\n      }));\n      node.dataset.dispatchRendered = message;\n    });\n  };\n\n  const updateCartImpact = (cart, scope = document) => {\n    const impact = scope.querySelector(\"[data-cart-impact]\");\n    const message = impact?.querySelector(\"[data-cart-impact-message]\");\n    if (!impact || !message) return;\n\n    const itemCount = Number(cart?.item_count || 0);\n    const totalLocal = Number(cart?.total_price || 0);\n    if (itemCount < 1 || totalLocal <= 0) {\n      impact.hidden = true;\n      message.textContent = \"\";\n      return;\n    }\n\n    const thresholdBase = Number(impact.dataset.impactThreshold || 5000);\n    const treesPerThreshold = Number(impact.dataset.impactTrees || 1);\n    const bottlesPerThreshold = Number(impact.dataset.impactBottles || 5);\n    const currencyRate = Number(window.Shopify?.currency?.rate || 1);\n    const safeCurrencyRate = Number.isFinite(currencyRate) && currencyRate > 0 ? currencyRate : 1;\n    const totalBase = totalLocal / safeCurrencyRate;\n    const impactCount = Math.floor(totalBase / thresholdBase);\n\n    if (impactCount < 1) {\n      const remainingLocal = Math.ceil((thresholdBase - totalBase) * safeCurrencyRate);\n      const amount = formatMoney(remainingLocal, cart.currency);\n      message.textContent = (impact.dataset.impactRemainingTemplate || \"\")\n        .replace(\"__AMOUNT__\", amount);\n    } else {\n      const trees = impactCount * treesPerThreshold;\n      const bottles = impactCount * bottlesPerThreshold;\n      const template = impactCount === 1\n        ? impact.dataset.impactAchievedSingularTemplate\n        : impact.dataset.impactAchievedPluralTemplate;\n\n      message.textContent = (template || \"\")\n        .replace(\"__TREES__\", `${trees}`)\n        .replace(\"__BOTTLES__\", `${bottles}`);\n    }\n\n    impact.hidden = false;\n  };\n\n  const updateCartBenefits = (cart, scope = document) => {\n    const benefits = scope.querySelector(\"[data-cart-benefits]\");\n    const shippingMessage = benefits?.querySelector(\"[data-cart-benefit-shipping]\");\n    const signupRow = benefits?.querySelector(\"[data-cart-benefit-signup]\");\n    const signupPrompt = signupRow?.querySelector(\"[data-cart-benefit-signup-prompt]\");\n    const welcomeCode = signupRow?.querySelector(\"[data-cart-benefit-welcome-code]\");\n    const deliveryEstimate = benefits?.querySelector(\"[data-cart-delivery-estimate]\");\n    if (!benefits || !shippingMessage) return;\n\n    const itemCount = Number(cart?.item_count || 0);\n    if (itemCount < 1) {\n      benefits.hidden = true;\n      shippingMessage.textContent = \"\";\n      if (deliveryEstimate) deliveryEstimate.hidden = true;\n      return;\n    }\n\n    const customerKnown = benefits.dataset.customerKnown === \"true\";\n    const customerFirstOrder = benefits.dataset.customerFirstOrder === \"true\";\n    const thresholdBase = Number(benefits.dataset.shippingThreshold || 5900);\n    const standardShippingBase = Number(benefits.dataset.shippingStandard || 500);\n    const totalLocal = Number(cart?.total_price || 0);\n    const totalDiscount = Number(cart?.total_discount || 0);\n    const currencyRate = Number(window.Shopify?.currency?.rate || 1);\n    const safeCurrencyRate = Number.isFinite(currencyRate) && currencyRate > 0 ? currencyRate : 1;\n    const totalBase = totalLocal / safeCurrencyRate;\n    const discountApplications = [\n      ...(Array.isArray(cart?.discount_applications) ? cart.discount_applications : []),\n      ...(Array.isArray(cart?.cart_level_discount_applications) ? cart.cart_level_discount_applications : [])\n    ];\n    const hasShippingDiscount = discountApplications.some(\n      (application) => application?.target_type === \"shipping_line\"\n    );\n    const hasFreeShipping = customerFirstOrder || totalBase >= thresholdBase || hasShippingDiscount;\n\n    const footer = scope.querySelector(\".site-drawer__footer\");\n    const couponRow = footer?.querySelector(\"[data-cart-coupon-row]\");\n    const freeShippingRow = footer?.querySelector(\"[data-cart-free-shipping-row]\");\n    const standardShipping = footer?.querySelector(\"[data-cart-standard-shipping]\");\n\n    if (footer) {\n      footer.dataset.cartCouponState = totalDiscount > 0 ? \"applied\" : \"none\";\n      footer.dataset.cartFreeShippingState = hasFreeShipping ? \"unlocked\" : \"none\";\n    }\n    if (couponRow) couponRow.hidden = totalDiscount <= 0;\n    if (freeShippingRow) freeShippingRow.hidden = !hasFreeShipping;\n    if (standardShipping && cart.currency && cart.currency !== \"USD\") {\n      const standardShippingLocal = Math.round(standardShippingBase * safeCurrencyRate);\n      standardShipping.textContent = formatMoney(standardShippingLocal, cart.currency);\n    }\n\n    updateDispatchMessages(benefits);\n\n    const setShippingMessage = (template, emphasis, amount = \"\") => {\n      const resolvedTemplate = String(template || \"\").replace(\"__AMOUNT__\", amount);\n      const marker = \"__EMPHASIS__\";\n      const markerIndex = resolvedTemplate.indexOf(marker);\n\n      if (markerIndex < 0 || !emphasis) {\n        shippingMessage.textContent = resolvedTemplate;\n        return;\n      }\n\n      const strong = document.createElement(\"strong\");\n      strong.textContent = emphasis;\n      shippingMessage.replaceChildren(\n        document.createTextNode(resolvedTemplate.slice(0, markerIndex)),\n        strong,\n        document.createTextNode(resolvedTemplate.slice(markerIndex + marker.length))\n      );\n    };\n\n    if (hasFreeShipping) {\n      setShippingMessage(\n        benefits.dataset.shippingUnlocked,\n        benefits.dataset.shippingUnlockedEmphasis\n      );\n    } else if (!customerKnown) {\n      setShippingMessage(\n        benefits.dataset.shippingGuest,\n        benefits.dataset.shippingGuestEmphasis\n      );\n    } else {\n      const remainingLocal = Math.ceil((thresholdBase - totalBase) * safeCurrencyRate);\n      const amount = formatMoney(remainingLocal, cart.currency);\n      setShippingMessage(\n        benefits.dataset.shippingRemainingTemplate,\n        benefits.dataset.shippingRemainingEmphasis,\n        amount\n      );\n    }\n\n    if (signupRow) {\n      if (signupPrompt) signupPrompt.hidden = true;\n      if (welcomeCode) welcomeCode.hidden = false;\n      signupRow.hidden = false;\n    }\n\n    benefits.hidden = false;\n    benefits.classList.remove(\"is-animating\");\n    void benefits.offsetWidth;\n    benefits.classList.add(\"is-animating\");\n  };\n\n  const prefersReducedMotion = () => window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n  const requestIdle = (callback, timeout = 1200) => {\n    if (\"requestIdleCallback\" in window) {\n      return window.requestIdleCallback(callback, { timeout });\n    }\n    return window.setTimeout(callback, Math.min(timeout, 450));\n  };\n\n  const claimHomeSignupSessionEntry = () => {\n    try {\n      if (window.sessionStorage.getItem(HOME_SIGNUP_SESSION_ENTRY_KEY) === \"true\") return false;\n      window.sessionStorage.setItem(HOME_SIGNUP_SESSION_ENTRY_KEY, \"true\");\n      return true;\n    } catch (_error) {\n      return true;\n    }\n  };\n\n  const normalizeKnownEmail = (value) => String(value || \"\").trim().toLowerCase();\n\n  const normalizeQuizStage = (value) =>\n    QUIZ_STAGE_ALIASES[String(value || \"\").trim().toLowerCase()] || \"\";\n\n  const rememberKnownEmail = (value) => {\n    const email = normalizeKnownEmail(value);\n    if (!email) return;\n    try {\n      window.localStorage.setItem(KNOWN_EMAIL_STORAGE_KEY, email);\n      window.dispatchEvent(new CustomEvent(\"refi:known-email\", { detail: { email } }));\n    } catch (error) {\n      console.warn(\"Unable to persist known email\", error);\n    }\n  };\n\n  const readKnownEmailFromStorage = () => {\n    try {\n      return normalizeKnownEmail(window.localStorage.getItem(KNOWN_EMAIL_STORAGE_KEY));\n    } catch (_error) {\n      return \"\";\n    }\n  };\n\n  const getKnownIdentity = () => {\n    const customerEmail = getLoggedInCustomerEmail();\n    if (customerEmail) {\n      return {\n        email: customerEmail,\n        source: \"logged_in_customer\"\n      };\n    }\n\n    const storedEmail = readKnownEmailFromStorage();\n    if (storedEmail) {\n      return {\n        email: storedEmail,\n        source: \"local_storage\"\n      };\n    }\n\n    return {\n      email: \"\",\n      source: \"unknown\"\n    };\n  };\n\n  const normalizeQuizSyncEndpoint = (endpoint) => {\n    const value = String(endpoint || \"\").trim();\n    return value || DEFAULT_QUIZ_SYNC_ENDPOINT;\n  };\n\n  const isV2QuizSyncEndpoint = (endpoint) =>\n    normalizeQuizSyncEndpoint(endpoint).startsWith(\n      \"/apps/refi-quiz-sync/quiz-results-v2\"\n    );\n\n  const getQuizSyncEndpoint = () =>\n    normalizeQuizSyncEndpoint(document.body?.dataset.quizSyncEndpoint);\n\n  const encodeQuizSyncPayload = (payload) => {\n    const bytes = new TextEncoder().encode(JSON.stringify(payload));\n    const binary = Array.from(bytes, (byte) => String.fromCharCode(byte)).join(\"\");\n    return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n  };\n\n  const buildQuizAppProxyUrl = (endpoint, payload) => {\n    const url = new URL(endpoint, window.location.origin);\n    url.searchParams.set(\"payload\", encodeQuizSyncPayload(payload));\n    return `${url.pathname}${url.search}`;\n  };\n\n  const syncQuizResultToShopify = async ({\n    endpoint = getQuizSyncEndpoint(),\n    email,\n    stage,\n    completedAt,\n    source = \"quiz_page\",\n    mode = \"known_email\",\n  } = {}) => {\n    if (!endpoint) {\n      return { ok: false, skipped: true, error: \"Quiz sync endpoint is missing.\" };\n    }\n\n    const payload = {\n      email: normalizeKnownEmail(email),\n      quiz_stage: normalizeQuizStage(stage),\n      quiz_completed_at: String(completedAt || \"\").trim(),\n      source,\n      mode,\n    };\n\n    const normalizedEndpoint = normalizeQuizSyncEndpoint(endpoint);\n    const isV2AppProxy = isV2QuizSyncEndpoint(normalizedEndpoint);\n    const isLegacyAppProxy =\n      !isV2AppProxy &&\n      normalizedEndpoint.startsWith(\"/apps/refi-quiz-sync/quiz-results\");\n    const response = await fetch(isLegacyAppProxy ? buildQuizAppProxyUrl(normalizedEndpoint, payload) : normalizedEndpoint, isLegacyAppProxy ? {\n      headers: { Accept: \"application/json\" },\n      cache: \"no-store\",\n      credentials: \"same-origin\",\n    } : {\n      method: \"POST\",\n      headers: {\n        Accept: \"application/json\",\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(payload),\n      cache: \"no-store\",\n      credentials: isV2AppProxy ? \"same-origin\" : \"omit\",\n    });\n\n    const responsePayload = await response.json().catch(() => ({}));\n    if (!response.ok || responsePayload?.ok === false) {\n      throw new Error(responsePayload?.error || `Quiz sync failed with ${response.status}`);\n    }\n\n    return { ok: true, payload: responsePayload };\n  };\n\n  const getLoggedInCustomerEmail = () =>\n    normalizeKnownEmail(document.body?.dataset.customerEmail || \"\");\n\n  const isCustomerLoggedIn = () => document.body?.dataset.customerLoggedIn === \"true\";\n\n  const KLAVIYO_REVISION = \"2026-04-15\";\n  const KLAVIYO_CLIENT_API_BASE = \"https://a.klaviyo.com/client\";\n\n  const getKlaviyoCompanyIdFromEmbed = () => {\n    const script = document.querySelector('script[src*=\"klaviyo.js\"][src*=\"company_id=\"]');\n    if (!script?.src) return \"\";\n\n    try {\n      return new URL(script.src, window.location.href).searchParams.get(\"company_id\") || \"\";\n    } catch (_error) {\n      const match = script.src.match(/[?&]company_id=([^&]+)/);\n      return match ? decodeURIComponent(match[1]) : \"\";\n    }\n  };\n\n  const getKlaviyoConfig = () => ({\n    companyId: String(document.body?.dataset.klaviyoCompanyId || getKlaviyoCompanyIdFromEmbed() || \"\").trim(),\n    newsletterListId: String(document.body?.dataset.klaviyoNewsletterListId || \"\").trim()\n  });\n\n  const hasKlaviyoConfig = () => Boolean(getKlaviyoConfig().companyId);\n\n  const hasKlaviyoNewsletterConfig = () => {\n    const config = getKlaviyoConfig();\n    return Boolean(config.companyId && config.newsletterListId);\n  };\n\n  const klaviyoRequest = async (path, body) => {\n    const { companyId } = getKlaviyoConfig();\n    if (!companyId) {\n      return { ok: false, skipped: true, error: \"Klaviyo Public API Key / Site ID is missing.\" };\n    }\n\n    const url = new URL(`${KLAVIYO_CLIENT_API_BASE}/${path}`);\n    url.searchParams.set(\"company_id\", companyId);\n\n    const response = await fetch(url.toString(), {\n      method: \"POST\",\n      headers: {\n        Accept: \"application/vnd.api+json\",\n        \"Content-Type\": \"application/vnd.api+json\",\n        revision: KLAVIYO_REVISION\n      },\n      body: JSON.stringify(body)\n    });\n\n    const payload = await response.json().catch(() => ({}));\n    if (!response.ok) {\n      const detail =\n        payload?.errors?.[0]?.detail ||\n        payload?.errors?.[0]?.title ||\n        payload?.message ||\n        `Klaviyo request failed with ${response.status}`;\n      throw new Error(detail);\n    }\n\n    return { ok: true, payload };\n  };\n\n  const buildQuizProfileProperties = ({ stage, completedAt, source = \"quiz_page\", mode = \"known_email\" } = {}) => {\n    const quizStage = normalizeQuizStage(stage);\n    const quizCompletedAt = String(completedAt || \"\").trim();\n    if (!quizStage || !quizCompletedAt) return {};\n\n    return {\n      current_stage: quizStage,\n      quiz_stage: quizStage,\n      last_quiz_at: quizCompletedAt,\n      quiz_completed_at: quizCompletedAt,\n      quiz_source: source,\n      quiz_mode: mode,\n      stage_updated_at: new Date().toISOString()\n    };\n  };\n\n  const createOrUpdateKlaviyoProfile = async ({ email, properties = {} } = {}) => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    if (!normalizedEmail) return { ok: false, skipped: true, error: \"Email is missing.\" };\n    if (!hasKlaviyoConfig()) {\n      return { ok: false, skipped: true, error: \"Klaviyo Public API Key / Site ID is missing.\" };\n    }\n\n    await klaviyoRequest(\"profiles\", {\n      data: {\n        type: \"profile\",\n        attributes: {\n          email: normalizedEmail,\n          properties\n        }\n      }\n    });\n\n    return { ok: true };\n  };\n\n  const buildNewsletterProfileProperties = ({ source = \"newsletter\", properties = {} } = {}) => ({\n    refi_signup_source: source,\n    last_signup_source: source,\n    last_signup_at: new Date().toISOString(),\n    ...properties\n  });\n\n  const subscribeEmailWithKlaviyo = async ({ email, source = \"newsletter\", properties = {} } = {}) => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    const { newsletterListId } = getKlaviyoConfig();\n    if (!normalizedEmail) return { ok: false, skipped: true, error: \"Email is missing.\" };\n    if (!hasKlaviyoNewsletterConfig()) {\n      return { ok: false, skipped: true, error: \"Klaviyo newsletter configuration is missing.\" };\n    }\n\n    const profileProperties = buildNewsletterProfileProperties({ source, properties });\n\n    await klaviyoRequest(\"subscriptions\", {\n      data: {\n        type: \"subscription\",\n        attributes: {\n          profile: {\n            data: {\n              type: \"profile\",\n              attributes: {\n                email: normalizedEmail,\n                properties: profileProperties,\n                subscriptions: {\n                  email: {\n                    marketing: {\n                      consent: \"SUBSCRIBED\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        relationships: {\n          list: {\n            data: {\n              type: \"list\",\n              id: newsletterListId\n            }\n          }\n        }\n      }\n    });\n\n    return { ok: true };\n  };\n\n  const trackKlaviyoEvent = async ({ email, name, properties = {}, time } = {}) => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    if (!normalizedEmail || !name || !hasKlaviyoConfig()) {\n      return { ok: false, skipped: true };\n    }\n\n    const attributes = {\n      properties,\n      metric: {\n        data: {\n          type: \"metric\",\n          attributes: { name }\n        }\n      },\n      profile: {\n        data: {\n          type: \"profile\",\n          attributes: {\n            email: normalizedEmail,\n            properties: properties.profile_properties || {}\n          }\n        }\n      }\n    };\n\n    if (time) attributes.time = time;\n\n    await klaviyoRequest(\"events\", {\n      data: {\n        type: \"event\",\n        attributes\n      }\n    });\n\n    return { ok: true };\n  };\n\n  const trackKlaviyoBrowserEvent = ({ email, name, properties = {} } = {}) => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    if (!normalizedEmail || !name) return { ok: false, skipped: true };\n\n    try {\n      identifyBrowserWithKlaviyo({\n        email: normalizedEmail,\n        properties: properties.profile_properties || {}\n      });\n      window._learnq = window._learnq || [];\n      window._learnq.push([\"track\", name, properties]);\n      return { ok: true };\n    } catch (error) {\n      console.warn(\"Klaviyo browser event tracking failed\", error);\n      return { ok: false, error: error?.message || \"Klaviyo browser event tracking failed.\" };\n    }\n  };\n\n  const identifyBrowserWithKlaviyo = ({ email, properties = {} } = {}) => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    if (!normalizedEmail) return { ok: false, skipped: true, error: \"Email is missing.\" };\n\n    try {\n      window._learnq = window._learnq || [];\n      window._learnq.push([\n        \"identify\",\n        {\n          $email: normalizedEmail,\n          ...properties,\n        },\n      ]);\n      return { ok: true };\n    } catch (error) {\n      console.warn(\"Klaviyo identify failed\", error);\n      return { ok: false, error: error?.message || \"Klaviyo identify failed.\" };\n    }\n  };\n\n  const buildCartSnapshot = (cart) => ({\n    captured_at: new Date().toISOString(),\n    source: \"theme_cart\",\n    currency: String(cart?.currency || \"USD\").toUpperCase(),\n    total_price: Number(cart?.total_price || 0),\n    items: (Array.isArray(cart?.items) ? cart.items : []).map((item) => ({\n      variant_id: String(item.variant_id || item.id || \"\"),\n      product_id: String(item.product_id || \"\"),\n      title: item.product_title || item.title || \"\",\n      variant_title: item.variant_title || \"\",\n      quantity: Number(item.quantity || 0),\n      price: Number(item.final_price ?? item.price ?? 0),\n      line_price: Number(item.final_line_price ?? item.line_price ?? 0),\n      image: item.featured_image?.url || item.image || \"\",\n      url: item.url || \"\",\n    })),\n  });\n\n  const readPendingCartSnapshot = () => {\n    try {\n      return JSON.parse(window.localStorage.getItem(PENDING_CART_SNAPSHOT_STORAGE_KEY) || \"null\");\n    } catch (_error) {\n      return null;\n    }\n  };\n\n  const storePendingCartSnapshot = (snapshot) => {\n    try {\n      window.localStorage.setItem(PENDING_CART_SNAPSHOT_STORAGE_KEY, JSON.stringify(snapshot));\n      return true;\n    } catch (error) {\n      console.warn(\"Unable to persist cart snapshot\", error);\n      return false;\n    }\n  };\n\n  const sendCartSnapshot = async (snapshot, email) => {\n    const body = JSON.stringify({ ...snapshot, email });\n    const response = await fetch(DEFAULT_CART_SNAPSHOT_SYNC_ENDPOINT, {\n      method: \"POST\",\n      headers: {\n        Accept: \"application/json\",\n        \"Content-Type\": \"application/json\",\n      },\n      body,\n      cache: \"no-store\",\n      credentials: \"same-origin\",\n      keepalive: body.length < 60000,\n    });\n    const payload = await response.json().catch(() => ({}));\n    if (!response.ok || payload?.accepted !== true) {\n      throw new Error(payload?.error || `Cart snapshot sync failed with ${response.status}`);\n    }\n    return payload;\n  };\n\n  const flushPendingCartSnapshot = async () => {\n    if (state.cartSnapshotSyncing) return;\n    const snapshot = readPendingCartSnapshot();\n    const { email } = getKnownIdentity();\n    if (!snapshot?.captured_at || !email) return;\n\n    state.cartSnapshotSyncing = true;\n    try {\n      await sendCartSnapshot(snapshot, email);\n      if (readPendingCartSnapshot()?.captured_at === snapshot.captured_at) {\n        window.localStorage.removeItem(PENDING_CART_SNAPSHOT_STORAGE_KEY);\n      }\n    } catch (error) {\n      console.warn(\"Cart snapshot sync is queued for retry\", error);\n    } finally {\n      state.cartSnapshotSyncing = false;\n      const nextSnapshot = readPendingCartSnapshot();\n      if (\n        nextSnapshot?.captured_at &&\n        nextSnapshot.captured_at !== snapshot.captured_at\n      ) {\n        void flushPendingCartSnapshot();\n      }\n    }\n  };\n\n  const queueCartSnapshotSync = (cart) => {\n    const snapshot = buildCartSnapshot(cart);\n    const stored = storePendingCartSnapshot(snapshot);\n    const { email } = getKnownIdentity();\n    if (stored) {\n      void flushPendingCartSnapshot();\n    } else if (email) {\n      void sendCartSnapshot(snapshot, email).catch((error) => {\n        console.warn(\"Cart snapshot sync failed\", error);\n      });\n    }\n  };\n\n  const bindCartSnapshotSync = () => {\n    void flushPendingCartSnapshot();\n    window.addEventListener(\"refi:known-email\", () => {\n      void flushPendingCartSnapshot();\n    });\n  };\n\n  const buildCheckoutIntentSignature = (cart) => {\n    const items = Array.isArray(cart?.items) ? cart.items : [];\n    return [\n      cart?.item_count || 0,\n      cart?.total_price || 0,\n      items\n        .map((item) => `${item.variant_id || item.id || \"\"}:${item.quantity || 0}`)\n        .sort()\n        .join(\"|\")\n    ].join(\"::\");\n  };\n\n  const readCheckoutIntentDedupe = () => {\n    try {\n      return JSON.parse(window.sessionStorage.getItem(CHECKOUT_INTENT_DEDUPE_STORAGE_KEY) || \"null\");\n    } catch (_error) {\n      return null;\n    }\n  };\n\n  const rememberCheckoutIntentDedupe = (signature) => {\n    try {\n      window.sessionStorage.setItem(\n        CHECKOUT_INTENT_DEDUPE_STORAGE_KEY,\n        JSON.stringify({ signature, trackedAt: Date.now() })\n      );\n    } catch (_error) {}\n  };\n\n  const shouldSkipCheckoutIntent = (signature) => {\n    const previous = readCheckoutIntentDedupe();\n    return Boolean(\n      previous?.signature === signature &&\n        Date.now() - Number(previous.trackedAt || 0) < CHECKOUT_INTENT_DEDUPE_MS\n    );\n  };\n\n  // ponytail: one queue for this tab's theme cart operations; other tabs/apps stay Shopify-owned.\n  const queueCartOperation = (operation) => {\n    const result = state.cartQueue.then(operation);\n    state.cartQueue = result.catch(() => {});\n    return result;\n  };\n\n  const cartSectionParameters = () => {\n    const url = new URL(window.location.href);\n    url.searchParams.delete(\"section_id\");\n    url.searchParams.delete(\"sections\");\n    return { sections: \"cart-drawer\", sections_url: `${url.pathname}${url.search}` };\n  };\n\n  const requestCart = async (url, options = {}) => {\n    const controller = new AbortController();\n    const timer = window.setTimeout(() => controller.abort(), 15000);\n    try {\n      const response = await fetch(url, { ...options, signal: controller.signal, cache: \"no-store\" });\n      const payload = await response.json();\n      if (!response.ok || Number(payload?.status) >= 400) {\n        const error = new Error(`Cart request failed with ${response.status}`);\n        if (typeof payload?.description === \"string\") error.cartMessage = payload.description;\n        throw error;\n      }\n      if (!payload || typeof payload !== \"object\") throw new Error(\"Invalid cart response\");\n      return payload;\n    } finally {\n      window.clearTimeout(timer);\n    }\n  };\n\n  const showCartError = (scope, message = \"\") => {\n    if (!scope) return;\n    scope.querySelectorAll(\"[data-cart-error]\").forEach((node) => node.remove());\n    if (!message) return;\n    const host = scope.matches(\"form\") ? scope : scope.querySelector(SELECTORS.cartItems);\n    if (!host) return;\n    const notice = document.createElement(\"p\");\n    notice.className = \"cart-operation-error\";\n    notice.dataset.cartError = \"\";\n    notice.setAttribute(\"role\", \"alert\");\n    notice.textContent = message;\n    if (scope.matches(\"form\")) host.append(notice);\n    else host.prepend(notice);\n  };\n\n  const fetchCartSnapshot = async () => {\n    const response = await fetch(window.themeRoutes.cart, {\n      headers: { Accept: \"application/json\" },\n      cache: \"no-store\"\n    });\n    if (!response.ok) throw new Error(`Cart snapshot failed with ${response.status}`);\n    return response.json();\n  };\n\n  const syncUrlDiscountToCart = async () => {\n    const discountCode = document.documentElement.dataset.urlDiscountCode || \"\";\n    if (!discountCode) return null;\n    if (state.cartCouponSyncedCode === discountCode) return null;\n    if (state.cartCouponSyncPromise) return state.cartCouponSyncPromise;\n\n    state.cartCouponSyncPromise = requestCart(window.themeRoutes.cartUpdate, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n      body: JSON.stringify({ discount: discountCode, ...cartSectionParameters() }),\n      cache: \"no-store\"\n    })\n      .then((cart) => {\n        state.cartCouponSyncedCode = discountCode;\n        return cart;\n      })\n      .catch((error) => {\n        console.warn(\"Unable to apply URL discount to cart\", error);\n        return null;\n      })\n      .finally(() => {\n        state.cartCouponSyncPromise = null;\n      });\n\n    return state.cartCouponSyncPromise;\n  };\n\n  const compactCartItemForEvent = (item) => ({\n    product_id: String(item.product_id || \"\").trim(),\n    variant_id: String(item.variant_id || item.id || \"\").trim(),\n    sku: String(item.sku || \"\").trim(),\n    title: item.product_title || item.title || \"\",\n    variant_title: item.variant_title && item.variant_title !== \"Default Title\" ? item.variant_title : \"\",\n    quantity: Number(item.quantity || 0),\n    price: Number(item.final_price ?? item.price ?? 0) / 100,\n    line_price: Number(item.final_line_price ?? item.line_price ?? 0) / 100,\n    url: item.url || \"\",\n    image: item.image || \"\"\n  });\n\n  const trackCheckoutIntentEvent = async ({ source = \"cart_drawer\", checkoutUrl = \"\" } = {}) => {\n    const { email, source: identitySource } = getKnownIdentity();\n    if (!email) return { ok: false, skipped: true, reason: \"unknown_identity\" };\n\n    const cart = await fetchCartSnapshot();\n    if (!cart?.item_count) return { ok: false, skipped: true, reason: \"empty_cart\" };\n\n    const signature = buildCheckoutIntentSignature(cart);\n    if (shouldSkipCheckoutIntent(signature)) {\n      return { ok: false, skipped: true, reason: \"recent_duplicate\" };\n    }\n\n    const items = (Array.isArray(cart.items) ? cart.items : []).map(compactCartItemForEvent);\n    const trackedAt = new Date().toISOString();\n    const totalValue = Number(cart.total_price || 0) / 100;\n    const currency = cart.currency || window.themeStrings?.currencyCode || \"USD\";\n\n    const result = trackKlaviyoBrowserEvent({\n      email,\n      name: \"RefiMiro Checkout Intent\",\n      properties: {\n        known_identity_present: true,\n        known_identity_source: identitySource,\n        checkout_intent_source: source,\n        page_path: window.location.pathname,\n        page_url: window.location.href,\n        checkout_url: checkoutUrl,\n        cart_url: `${window.location.origin}${window.themeRoutes.cart.replace(/\\.js$/, \"\")}`,\n        cart_token: cart.token || \"\",\n        cart_item_count: Number(cart.item_count || 0),\n        cart_total: totalValue,\n        value: totalValue,\n        currency,\n        item_titles: items.map((item) => item.title).filter(Boolean).join(\" | \"),\n        items,\n        profile_properties: {\n          last_checkout_intent_at: trackedAt,\n          last_checkout_intent_source: source,\n          last_checkout_intent_cart_total: totalValue,\n          last_checkout_intent_item_count: Number(cart.item_count || 0)\n        }\n      }\n    });\n\n    rememberCheckoutIntentDedupe(signature);\n    return result;\n  };\n\n  const shouldBypassCheckoutIntentTracking = (event, link) => {\n    if (event.defaultPrevented) return true;\n    if (event.button && event.button !== 0) return true;\n    if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return true;\n    return link?.target === \"_blank\";\n  };\n\n  const navigateAfterCheckoutIntent = (url) => {\n    if (!url) return;\n    window.location.assign(url);\n  };\n\n  const buildDiscountCheckoutUrl = (fallbackUrl = \"\") => {\n    const checkoutDiscountCode = document.documentElement.dataset.checkoutDiscountCode || \"\";\n    if (!checkoutDiscountCode) return fallbackUrl;\n    return `${window.location.origin}/discount/${encodeURIComponent(checkoutDiscountCode)}?redirect=%2Fcheckout`;\n  };\n\n  const syncCheckoutDiscountLinks = (scope = document) => {\n    scope.querySelectorAll(SELECTORS.checkoutIntent).forEach((link) => {\n      link.href = buildDiscountCheckoutUrl(link.href);\n    });\n  };\n\n  const trackCheckoutIntentBeforeNavigation = async (event, link) => {\n    if (!link || shouldBypassCheckoutIntentTracking(event, link)) return false;\n\n    const checkoutUrl = buildDiscountCheckoutUrl(link.href);\n    event.preventDefault();\n\n    if (link.dataset.refiCheckoutIntentPending === \"true\") return true;\n    link.dataset.refiCheckoutIntentPending = \"true\";\n\n    try {\n      await state.cartQueue;\n      const source = link.dataset.refiCheckoutSource || \"cart_drawer\";\n      await Promise.race([\n        Promise.resolve(trackCheckoutIntentEvent({ source, checkoutUrl })),\n        new Promise((resolve) => window.setTimeout(() => resolve({ ok: false, timedOut: true }), 250))\n      ]);\n    } catch (error) {\n      console.warn(\"Unable to track checkout intent\", error);\n    } finally {\n      navigateAfterCheckoutIntent(checkoutUrl);\n    }\n\n    return true;\n  };\n\n  const syncQuizResultToKlaviyo = async ({\n    email,\n    stage,\n    completedAt,\n    source = \"quiz_page\",\n    mode = \"known_email\",\n    subscribe = false,\n    trackEvent = true\n  } = {}) => {\n    const properties = buildQuizProfileProperties({ stage, completedAt, source, mode });\n    if (!Object.keys(properties).length) return { ok: false, skipped: true, error: \"Quiz result is missing.\" };\n    if (!hasKlaviyoConfig()) {\n      return { ok: false, skipped: true, error: \"Klaviyo Public API Key / Site ID is missing.\" };\n    }\n\n    if (subscribe && hasKlaviyoNewsletterConfig()) {\n      await subscribeEmailWithKlaviyo({ email, source: \"quiz_stage_finder\", properties });\n    } else {\n      await createOrUpdateKlaviyoProfile({ email, properties });\n    }\n\n    if (trackEvent) {\n      void trackKlaviyoEvent({\n        email,\n        name: \"Refi Quiz Completed\",\n        time: completedAt,\n        properties: {\n          quiz_stage: properties.quiz_stage,\n          current_stage: properties.current_stage,\n          quiz_completed_at: properties.quiz_completed_at,\n          quiz_source: source,\n          quiz_mode: mode,\n          profile_properties: properties\n        }\n      }).catch((error) => console.warn(\"Klaviyo quiz event sync failed\", error));\n    }\n\n    return { ok: true };\n  };\n\n  window.RefiKlaviyo = {\n    isConfigured: hasKlaviyoConfig,\n    hasNewsletterConfig: hasKlaviyoNewsletterConfig,\n    subscribeEmail: async (options) => {\n      try {\n        return await subscribeEmailWithKlaviyo(options);\n      } catch (error) {\n        console.warn(\"Klaviyo newsletter signup failed\", error);\n        return { ok: false, error: error.message };\n      }\n    },\n    syncQuizResult: async (options) => {\n      try {\n        return await syncQuizResultToKlaviyo(options);\n      } catch (error) {\n        console.warn(\"Klaviyo quiz result sync failed\", error);\n        return { ok: false, error: error.message };\n      }\n    }\n  };\n\n  window.RefiQuizSync = {\n    syncResult: async (options) => {\n      try {\n        return await syncQuizResultToShopify(options);\n      } catch (error) {\n        console.warn(\"Shopify quiz result sync failed\", error);\n        return { ok: false, error: error.message };\n      }\n    },\n  };\n\n  const readCookie = (name) => {\n    const prefix = `${name}=`;\n    const cookie = document.cookie\n      .split(\";\")\n      .map((entry) => entry.trim())\n      .find((entry) => entry.startsWith(prefix));\n\n    if (!cookie) return \"\";\n\n    try {\n      return decodeURIComponent(cookie.slice(prefix.length));\n    } catch (_error) {\n      return \"\";\n    }\n  };\n\n  const clearCookie = (name) => {\n    document.cookie = `${name}=; Max-Age=0; Path=/; SameSite=Lax`;\n  };\n\n  const readPendingQuizResult = () => {\n    const raw = readCookie(PENDING_QUIZ_RESULT_COOKIE);\n    if (!raw) return null;\n\n    try {\n      const parsed = JSON.parse(raw);\n      const stage = normalizeQuizStage(parsed?.stage);\n      const completedAt = String(parsed?.completedAt || \"\").trim();\n\n      if (!stage || !completedAt) return null;\n\n      return {\n        stage,\n        completedAt,\n        source: String(parsed?.source || \"quiz_page\").trim() || \"quiz_page\",\n      };\n    } catch (_error) {\n      return null;\n    }\n  };\n\n  const syncPendingQuizCartAttributes = async (payload = readPendingQuizResult()) => {\n    const stage = normalizeQuizStage(payload?.stage);\n    const completedAt = String(payload?.completedAt || \"\").trim();\n    const signature = `${stage}|${completedAt}`;\n\n    try {\n      await queueCartOperation(async () => {\n        if (signature === state.pendingQuizCartSignature) return;\n        await requestCart(window.themeRoutes.cartUpdate, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            Accept: \"application/json\",\n          },\n          body: JSON.stringify({\n            attributes: {\n              [QUIZ_CART_ATTRIBUTE_STAGE]: stage,\n              [QUIZ_CART_ATTRIBUTE_COMPLETED_AT]: completedAt,\n            },\n          }),\n        });\n        state.pendingQuizCartSignature = signature;\n      });\n    } catch (error) {\n      console.warn(\"Unable to sync pending quiz cart attributes\", error);\n    }\n  };\n\n  const syncPendingQuizResultForIdentity = async (email, mode = \"known_email\") => {\n    const normalizedEmail = normalizeKnownEmail(email);\n    const pendingResult = readPendingQuizResult();\n    const syncEndpoint = getQuizSyncEndpoint();\n    const isV2Sync = isV2QuizSyncEndpoint(syncEndpoint);\n\n    if (!normalizedEmail || !pendingResult?.stage || !pendingResult?.completedAt) return false;\n\n    const signature = [\n      normalizedEmail,\n      pendingResult.stage,\n      pendingResult.completedAt,\n      mode,\n    ].join(\"|\");\n\n    if (signature === state.pendingQuizSyncSignature) return false;\n\n    state.pendingQuizSyncSignature = signature;\n\n    try {\n      let klaviyoSynced = false;\n      let shopifySynced = false;\n      let lastError = null;\n\n      if (hasKlaviyoConfig() && !isV2Sync) {\n        try {\n          const klaviyoResult = await syncQuizResultToKlaviyo({\n            email: normalizedEmail,\n            stage: pendingResult.stage,\n            completedAt: pendingResult.completedAt,\n            source: pendingResult.source || \"quiz_page\",\n            mode,\n            subscribe: false\n          });\n          klaviyoSynced = Boolean(klaviyoResult?.ok);\n        } catch (error) {\n          lastError = error;\n          console.warn(\"Klaviyo pending quiz sync failed\", error);\n        }\n      }\n\n      if (syncEndpoint) {\n        try {\n          const result = await syncQuizResultToShopify({\n            endpoint: syncEndpoint,\n            email: normalizedEmail,\n            stage: pendingResult.stage,\n            completedAt: pendingResult.completedAt,\n            source: pendingResult.source || \"quiz_page\",\n            mode,\n          });\n\n          shopifySynced = Boolean(result?.ok);\n        } catch (error) {\n          lastError = error;\n          console.warn(\"Shopify pending quiz sync failed\", error);\n        }\n      }\n\n      if (syncEndpoint && !shopifySynced) {\n        throw lastError || new Error(\"Shopify quiz sync failed.\");\n      }\n\n      if (!klaviyoSynced && !shopifySynced) {\n        throw lastError || new Error(\"No quiz sync destination is configured.\");\n      }\n\n      clearCookie(PENDING_QUIZ_RESULT_COOKIE);\n      state.pendingQuizSyncSignature = \"\";\n      window.dispatchEvent(new CustomEvent(\"refi:pending-quiz-cleared\"));\n      await syncPendingQuizCartAttributes(null);\n      return true;\n    } catch (error) {\n      console.warn(\"Unable to sync pending quiz result for known identity\", error);\n      state.pendingQuizSyncSignature = \"\";\n      return false;\n    }\n  };\n\n  const bindPendingQuizResultSync = () => {\n    const syncKnownIdentity = () => {\n      const customerEmail = getLoggedInCustomerEmail();\n      if (isCustomerLoggedIn() && customerEmail) {\n        void syncPendingQuizResultForIdentity(customerEmail, \"identified_customer\");\n        return;\n      }\n\n      const knownEmail = readKnownEmailFromStorage();\n      if (knownEmail) {\n        void syncPendingQuizResultForIdentity(knownEmail, \"known_email\");\n      }\n    };\n\n    const pendingResult = readPendingQuizResult();\n    syncKnownIdentity();\n    if (pendingResult) {\n      void syncPendingQuizCartAttributes(pendingResult);\n    }\n\n    window.addEventListener(\"refi:known-email\", (event) => {\n      const email = normalizeKnownEmail(event?.detail?.email);\n      if (!email) return;\n      requestIdle(() => {\n        const identifyResult = identifyBrowserWithKlaviyo({ email });\n        if (!identifyResult?.ok && !identifyResult?.skipped) {\n          console.warn(\"Unable to identify known browser email\", identifyResult?.error);\n        }\n      }, 600);\n      void syncPendingQuizResultForIdentity(email, \"known_email\");\n    });\n\n    window.addEventListener(\"refi:pending-quiz-result\", (event) => {\n      void syncPendingQuizCartAttributes(event?.detail?.result || readPendingQuizResult());\n      syncKnownIdentity();\n    });\n\n    window.addEventListener(\"refi:pending-quiz-cleared\", () => {\n      void syncPendingQuizCartAttributes(null);\n    });\n  };\n\n  const pulseClass = (node, className, duration = 280) => {\n    if (!node) return;\n    node.classList.remove(className);\n    void node.offsetWidth;\n    node.classList.add(className);\n    window.setTimeout(() => {\n      node.classList.remove(className);\n    }, duration);\n  };\n\n  const animateExpandIn = (node, { duration = 320, offset = -10 } = {}) => {\n    if (!node) return;\n\n    const targetHeight = node.scrollHeight;\n    node.style.overflow = \"hidden\";\n    node.style.maxHeight = \"0px\";\n    node.style.opacity = \"0\";\n    node.style.transform = `translateY(${offset}px)`;\n    node.style.transition = \"none\";\n    void node.offsetHeight;\n\n    window.requestAnimationFrame(() => {\n      node.style.transition = [\n        `max-height ${duration}ms cubic-bezier(0.22, 1, 0.36, 1)`,\n        `opacity ${Math.min(duration, 220)}ms ease-out`,\n        `transform ${duration}ms cubic-bezier(0.22, 1, 0.36, 1)`\n      ].join(\", \");\n      node.style.maxHeight = `${targetHeight}px`;\n      node.style.opacity = \"1\";\n      node.style.transform = \"translateY(0)\";\n    });\n\n    window.setTimeout(() => {\n      node.style.removeProperty(\"overflow\");\n      node.style.removeProperty(\"max-height\");\n      node.style.removeProperty(\"opacity\");\n      node.style.removeProperty(\"transform\");\n      node.style.removeProperty(\"transition\");\n    }, duration + 60);\n  };\n\n  const animateRevealInPlace = (node, { duration = 220, offset = -6 } = {}) => {\n    if (!node) return;\n    node.style.opacity = \"0\";\n    node.style.transform = `translateY(${offset}px)`;\n    node.style.transition = \"none\";\n    void node.offsetHeight;\n    window.requestAnimationFrame(() => {\n      node.style.transition = [\n        `opacity ${duration}ms ease-out`,\n        `transform ${duration}ms cubic-bezier(0.22, 1, 0.36, 1)`\n      ].join(\", \");\n      node.style.opacity = \"1\";\n      node.style.transform = \"translateY(0)\";\n    });\n    window.setTimeout(() => {\n      node.style.removeProperty(\"opacity\");\n      node.style.removeProperty(\"transform\");\n      node.style.removeProperty(\"transition\");\n    }, duration + 60);\n  };\n\n  const pointerRevealFrames = new WeakMap();\n  const pointerRevealOrigins = new WeakMap();\n\n  const getPointerRevealButtonLabel = (button) =>\n    button?.querySelector(\"[data-refi-pointer-reveal-label]\")?.textContent?.trim() ||\n    button?.textContent?.trim() ||\n    \"\";\n\n  const setPointerRevealButtonLabel = (button, label) => {\n    const labels = button?.querySelectorAll(\"[data-refi-pointer-reveal-label]\");\n    if (!labels?.length) {\n      if (button) button.textContent = label;\n      return;\n    }\n\n    labels.forEach((node) => {\n      node.textContent = label;\n    });\n  };\n\n  const updatePointerRevealOrigin = (event) => {\n    const button = event.currentTarget;\n    const rect = button.getBoundingClientRect();\n    pointerRevealOrigins.set(button, {\n      x: ((event.clientX - rect.left) / rect.width) * 100,\n      y: ((event.clientY - rect.top) / rect.height) * 100\n    });\n\n    button.classList.add(\"is-hovered\");\n\n    if (pointerRevealFrames.get(button)) return;\n\n    const frame = window.requestAnimationFrame(() => {\n      const { x, y } = pointerRevealOrigins.get(button) || { x: 50, y: 50 };\n      button.style.setProperty(\"--pointer-x\", `${x}%`);\n      button.style.setProperty(\"--pointer-y\", `${y}%`);\n      pointerRevealFrames.delete(button);\n    });\n\n    pointerRevealFrames.set(button, frame);\n  };\n\n  const bindPointerRevealButtons = (scope = document) => {\n    if (!window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches) return;\n\n    scope.querySelectorAll(SELECTORS.pointerRevealButton).forEach((button) => {\n      if (button.dataset.pointerRevealBound === \"true\") return;\n      button.dataset.pointerRevealBound = \"true\";\n      button.addEventListener(\"mouseenter\", updatePointerRevealOrigin);\n      button.addEventListener(\"mousemove\", updatePointerRevealOrigin);\n      button.addEventListener(\"mouseleave\", () => button.classList.remove(\"is-hovered\"));\n    });\n  };\n\n  const updateCartBadge = (count) => {\n    const previousCount = state.lastCartCount;\n\n    document.querySelectorAll(\".icon-button__badge\").forEach((badge) => {\n      badge.textContent = `${count}`;\n      badge.hidden = Number(count) === 0;\n\n      if (\n        !prefersReducedMotion() &&\n        Number(count) > 0 &&\n        (previousCount === null ? Boolean(state.cartAnimationIntent) : previousCount !== Number(count))\n      ) {\n        pulseClass(badge, \"is-bumping\", 240);\n      }\n    });\n\n    state.lastCartCount = Number(count || 0);\n  };\n\n  const hydrateCartLineItems = (cart) => {\n    if (!cart?.items?.length) return;\n\n    cart.items.forEach((item) => {\n      const row = document.querySelector(`[data-line-item=\"${CSS.escape(item.key)}\"]`);\n      if (!row) return;\n\n      row.dataset.quantity = `${item.quantity}`;\n\n      const titleNode = row.querySelector(\".cart-row__title\");\n      if (titleNode) titleNode.textContent = item.product_title || item.title || \"\";\n\n      const variantNode = row.querySelector(\".cart-row__variant\");\n      if (variantNode) {\n        const variantTitle = item.variant_title && item.variant_title !== \"Default Title\" ? item.variant_title : \"\";\n        variantNode.textContent = variantTitle;\n        variantNode.hidden = !variantTitle;\n      }\n\n      const priceNode = row.querySelector(\".cart-row__price\");\n      if (priceNode) {\n        const regularPriceNode = priceNode.querySelector(\"[data-cart-line-price]\");\n        const originalPriceNode = priceNode.querySelector(\".cart-discount-price__original\");\n        const finalPriceNode = priceNode.querySelector(\".cart-discount-price__final\");\n        if (regularPriceNode) regularPriceNode.textContent = formatMoney(item.final_line_price, cart.currency);\n        if (originalPriceNode) originalPriceNode.textContent = formatMoney(item.original_line_price, cart.currency);\n        if (finalPriceNode) finalPriceNode.textContent = formatMoney(item.final_line_price, cart.currency);\n      }\n\n      const mediaImage = row.querySelector(\".cart-row__media img\");\n      if (mediaImage && !mediaImage.getAttribute(\"alt\")) {\n        mediaImage.setAttribute(\"alt\", item.product_title || item.title || \"\");\n      }\n\n      const removeButton = row.querySelector(\"[data-cart-remove]\");\n      if (removeButton) {\n        removeButton.setAttribute(\"aria-label\", `Remove ${item.product_title || item.title || \"item\"}`);\n      }\n    });\n  };\n\n  const animateCartRender = (cart) => {\n    if (prefersReducedMotion()) {\n      state.cartAnimationIntent = null;\n      return;\n    }\n\n    const drawer = state.drawers.cart;\n    if (!drawer) {\n      state.cartAnimationIntent = null;\n      return;\n    }\n\n    const intent = state.cartAnimationIntent;\n    const summary = drawer.querySelector(\".cart-coupon-summary\");\n\n    if (summary && intent) pulseClass(summary, \"is-updated\", 260);\n\n    if (cart.item_count === 0) {\n      animateRevealInPlace(drawer.querySelector(\".cart-empty-state\"), { duration: 220, offset: -4 });\n      state.cartAnimationIntent = null;\n      return;\n    }\n\n    if (intent?.type === \"add\") {\n      const escapedKey = intent.key ? CSS.escape(intent.key) : null;\n      const row = escapedKey\n        ? drawer.querySelector(`[data-line-item=\"${escapedKey}\"]`)\n        : drawer.querySelector(\".cart-row\");\n      animateExpandIn(row, { duration: 320, offset: -10 });\n      state.cartAnimationIntent = null;\n      return;\n    }\n\n    state.cartAnimationIntent = null;\n  };\n\n  const syncBodyLock = () => {\n    document.body.classList.toggle(\n      \"is-locked\",\n      Boolean(state.activeDrawer) || state.mobileNavOpen || state.homeSignupModalOpen\n    );\n  };\n\n  const updateMobileNavHeight = () => {\n    const headerBar = document.querySelector(SELECTORS.headerBar);\n    const nav = getMobileNav();\n    const desktopNavQuery = window.matchMedia(\"(min-width: 921px)\");\n\n    if (!headerBar || !nav || !state.mobileNavOpen || desktopNavQuery.matches) {\n      headerBar?.style.removeProperty(\"--mobile-nav-height\");\n      return;\n    }\n\n    window.requestAnimationFrame(() => {\n      const navStyles = window.getComputedStyle(nav);\n      const bottomOffset = parseFloat(navStyles.bottom) || 0;\n      const desiredHeight = Math.ceil(nav.offsetTop + nav.scrollHeight + bottomOffset);\n      headerBar.style.setProperty(\"--mobile-nav-height\", `${desiredHeight}px`);\n    });\n  };\n\n  const setMobileNav = (open) => {\n    state.mobileNavOpen = open;\n    document.body.classList.toggle(\"is-mobile-nav-open\", open);\n    document.querySelector(SELECTORS.mobileNavToggle)?.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\n    if (!open) setMobilePanel(null);\n    if (!open && getMobileNavMode() === \"accordion\") {\n      document.querySelectorAll(SELECTORS.navItem).forEach((item) => {\n        item.classList.remove(\"is-open\");\n        item.querySelector(SELECTORS.navToggle)?.setAttribute(\"aria-expanded\", \"false\");\n      });\n    }\n    updateMobileNavHeight();\n    syncBodyLock();\n  };\n\n  const openDrawer = async (name, { syncCartSnapshot = false, refreshCart = true, trigger = null } = {}) => {\n    const drawer = state.drawers[name];\n    if (!drawer) return;\n\n    setMobileNav(false);\n    if (drawer.hasAttribute(\"data-cart-page\")) {\n      closeDrawer();\n      if (refreshCart) {\n        window.location.assign(window.themeRoutes.cart.replace(/\\.js$/, \"\"));\n      }\n      return;\n    }\n    if (drawer.classList.contains(\"site-drawer--product-info\")) {\n      if (!state.drawers[state.activeDrawer]?.classList.contains(\"site-drawer--product-info\")) {\n        state.productDrawerReturnFocus = trigger || document.activeElement;\n      }\n    } else {\n      state.productDrawerReturnFocus = null;\n    }\n    Object.values(state.drawers).forEach((entry) => {\n      if (entry.hasAttribute(\"data-cart-page\")) return;\n      entry.classList.remove(\"is-open\");\n      entry.setAttribute(\"aria-hidden\", \"true\");\n      entry.inert = true;\n    });\n    drawer.classList.add(\"is-open\");\n    drawer.setAttribute(\"aria-hidden\", \"false\");\n    drawer.inert = false;\n    state.activeDrawer = name;\n    document.body.classList.toggle(\"is-cart-drawer-open\", name === \"cart\");\n    syncBodyLock();\n    if (name === \"cart\") loadCartRecommendationImages(drawer);\n\n    if (drawer.classList.contains(\"site-drawer--product-info\")) {\n      drawer.querySelector(\".site-drawer__close\")?.focus({ preventScroll: true });\n    }\n\n    if (name === \"cart\" && refreshCart) {\n      try {\n        await queueCartOperation(() => renderCart({ syncCartSnapshot }));\n      } catch (error) {\n        console.warn(\"Unable to refresh cart\", error);\n        showCartError(drawer, window.themeStrings.cartRefreshFailed);\n      }\n    }\n\n    if (name === \"search\") {\n      bindPredictiveSearch();\n      window.requestAnimationFrame(() => {\n        drawer.querySelector(SELECTORS.predictiveInput)?.focus();\n      });\n    }\n  };\n\n  const closeDrawer = () => {\n    if (!state.activeDrawer) return;\n    const drawer = state.drawers[state.activeDrawer];\n    if (drawer) {\n      drawer.classList.remove(\"is-open\");\n      drawer.setAttribute(\"aria-hidden\", \"true\");\n      drawer.inert = true;\n    }\n    state.activeDrawer = null;\n    document.body.classList.remove(\"is-cart-drawer-open\");\n    syncBodyLock();\n    state.productDrawerReturnFocus?.focus({ preventScroll: true });\n    state.productDrawerReturnFocus = null;\n  };\n\n  const bindCartDrawerInteractions = () => {\n    const drawer = state.drawers.cart;\n    if (!drawer || drawer.dataset.interactionsBound === \"true\") return;\n\n    drawer.dataset.interactionsBound = \"true\";\n    syncCheckoutDiscountLinks(drawer);\n\n    drawer.addEventListener(\"click\", async (event) => {\n      const closeTrigger = event.target.closest(SELECTORS.drawerClose);\n      if (closeTrigger) {\n        closeDrawer();\n        return;\n      }\n\n      const checkoutIntentLink = event.target.closest(SELECTORS.checkoutIntent);\n      if (checkoutIntentLink) {\n        await trackCheckoutIntentBeforeNavigation(event, checkoutIntentLink);\n        return;\n      }\n\n      const control = event.target.closest(\"[data-cart-qty], [data-cart-remove]\");\n      if (!control) return;\n\n      const row = control.closest(\"[data-line-item]\");\n      if (!row) return;\n\n      const key = row.dataset.lineItem;\n      if (row.dataset.cartPending === \"true\") return;\n      row.dataset.cartPending = \"true\";\n      const remove = control.hasAttribute(\"data-cart-remove\");\n      const delta = Number(control.dataset.cartQty);\n      row.querySelectorAll(\"[data-cart-qty], [data-cart-remove]\").forEach((button) => {\n        button.disabled = true;\n      });\n      await queueCartOperation(async () => {\n        let changed = false;\n        let currentRow = row;\n        showCartError(drawer);\n        try {\n          currentRow = drawer.querySelector(`[data-line-item=\"${CSS.escape(key)}\"]`);\n          if (!currentRow) {\n            const error = new Error(\"Cart line changed while queued\");\n            error.cartMessage = window.themeStrings.cartChanged;\n            throw error;\n          }\n          const currentQuantity = Number(currentRow.dataset.quantity);\n          const quantity = remove ? 0 : Math.max(0, currentQuantity + delta);\n          if (!Number.isInteger(quantity) || (!remove && delta !== 1 && delta !== -1)) throw new Error(\"Invalid quantity\");\n          const isRemoving = quantity === 0;\n          const isClearingLastItem = isRemoving && Number(drawer.dataset.cartCount) === 1;\n          if (isRemoving && !isClearingLastItem && !prefersReducedMotion()) {\n            currentRow.classList.add(\"is-removing\");\n            await new Promise((resolve) => window.setTimeout(resolve, 240));\n          }\n          state.cartAnimationIntent = { type: isClearingLastItem ? \"emptying\" : isRemoving ? \"remove\" : \"quantity\" };\n          const cart = await requestCart(window.themeRoutes.cartChange, {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n            body: JSON.stringify({ id: key, quantity, ...cartSectionParameters() })\n          });\n          changed = true;\n          await renderCart({ markup: cart.sections?.[\"cart-drawer\"], syncCartSnapshot: true });\n        } catch (error) {\n          state.cartAnimationIntent = null;\n          let recovered = false;\n          try { await renderCart({ syncCartSnapshot: true, syncDiscount: false }); recovered = true; } catch (refreshError) { console.warn(\"Cart recovery failed\", refreshError); }\n          if (changed && recovered) return;\n          showCartError(drawer, error.cartMessage || (changed ? window.themeStrings.cartUpdatedRefreshFailed : window.themeStrings.cartRequestFailed));\n        } finally {\n          [row, currentRow].filter(Boolean).forEach((entry) => {\n            delete entry.dataset.cartPending;\n            entry.classList.remove(\"is-removing\");\n            entry.querySelectorAll(\"[data-cart-qty], [data-cart-remove]\").forEach((button) => { button.disabled = false; });\n          });\n        }\n      });\n    });\n  };\n\n  const bindDrawers = () => {\n    document.querySelectorAll(SELECTORS.drawer).forEach((drawer) => {\n      state.drawers[drawer.dataset.drawer] = drawer;\n      drawer.inert = drawer.getAttribute(\"aria-hidden\") !== \"false\";\n    });\n\n    state.lastCartCount = Number(\n      state.drawers.cart?.dataset.cartCount || document.querySelector(\".icon-button__badge\")?.textContent || 0\n    );\n\n    bindCartDrawerInteractions();\n\n    if (state.drawers.cart?.hasAttribute(\"data-cart-page\")) {\n      const drawer = state.drawers.cart;\n      try { updateCartBenefits(JSON.parse(drawer.querySelector(\"[data-cart-state]\").textContent), drawer); }\n      catch (error) { showCartError(drawer, window.themeStrings.cartRefreshFailed); }\n      const refreshPageCart = () => queueCartOperation(() => renderCart()).catch(() => {\n        showCartError(drawer, window.themeStrings.cartRefreshFailed);\n      });\n      refreshPageCart();\n      window.addEventListener(\"pageshow\", (event) => { if (event.persisted) refreshPageCart(); });\n    }\n\n    document.querySelectorAll(SELECTORS.drawerOpen).forEach((button) => {\n      button.addEventListener(\"click\", () => openDrawer(button.dataset.openDrawer, { trigger: button }));\n    });\n\n    document.querySelectorAll(SELECTORS.drawerClose).forEach((button) => {\n      button.addEventListener(\"click\", closeDrawer);\n    });\n\n    document.addEventListener(\"keydown\", (event) => {\n      const drawer = state.drawers[state.activeDrawer];\n      if (event.key === \"Tab\" && drawer?.classList.contains(\"site-drawer--product-info\")) {\n        const controls = [...drawer.querySelectorAll('a[href], button, input, select, textarea, [tabindex]')]\n          .filter((element) => element.tabIndex >= 0 && !element.disabled && !element.closest('[inert]') && element.getClientRects().length);\n        const first = controls[0];\n        const last = controls[controls.length - 1];\n        if (first && (!drawer.contains(document.activeElement) || (event.shiftKey ? document.activeElement === first : document.activeElement === last))) {\n          event.preventDefault();\n          (event.shiftKey ? last : first).focus({ preventScroll: true });\n        }\n      }\n      if (event.key === \"Escape\") {\n        closeDrawer();\n        setMobileNav(false);\n      }\n    });\n  };\n\n  const bindMegaMenus = () => {\n    const navItems = [...document.querySelectorAll(SELECTORS.navItem)];\n    const mobileNavToggle = document.querySelector(SELECTORS.mobileNavToggle);\n    const mobilePanelTriggers = [...document.querySelectorAll(SELECTORS.mobilePanelOpen)];\n    const mobilePanelBackButtons = [...document.querySelectorAll(SELECTORS.mobilePanelBack)];\n    const desktopNavQuery = window.matchMedia(\"(min-width: 921px)\");\n\n    const setNavItemState = (item, open) => {\n      item.classList.toggle(\"is-open\", open);\n      item.querySelector(SELECTORS.navToggle)?.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\n      if (open && item.querySelector(SELECTORS.headerNewsletter)) {\n        bindHeaderNewsletter();\n      }\n    };\n\n    const closeMenus = (except) => {\n      navItems.forEach((item) => {\n        if (item !== except) setNavItemState(item, false);\n      });\n    };\n\n    mobileNavToggle?.addEventListener(\"click\", () => {\n      closeDrawer();\n      setMobileNav(!state.mobileNavOpen);\n    });\n\n    mobilePanelTriggers.forEach((button) => {\n      button.addEventListener(\"click\", () => {\n        if (desktopNavQuery.matches) return;\n        closeMenus();\n        setMobilePanel(button.dataset.mobilePanelOpen);\n        updateMobileNavHeight();\n      });\n    });\n\n    mobilePanelBackButtons.forEach((button) => {\n      button.addEventListener(\"click\", () => {\n        if (desktopNavQuery.matches) return;\n        const targetPanel = button.dataset.mobilePanelBack;\n        setMobilePanel(targetPanel && targetPanel !== \"root\" ? targetPanel : null);\n        updateMobileNavHeight();\n      });\n    });\n\n    navItems.forEach((item) => {\n      const toggle = item.querySelector(SELECTORS.navToggle);\n      if (!toggle) return;\n\n      toggle.addEventListener(\"click\", () => {\n        const isOpen = item.classList.contains(\"is-open\");\n        closeMenus(item);\n        setNavItemState(item, !isOpen);\n        if (!desktopNavQuery.matches && getMobileNavMode() === \"accordion\") updateMobileNavHeight();\n      });\n\n      item.addEventListener(\"mouseenter\", () => {\n        if (!desktopNavQuery.matches) return;\n        closeMenus(item);\n        setNavItemState(item, true);\n      });\n\n      item.addEventListener(\"mouseleave\", () => {\n        if (!desktopNavQuery.matches) return;\n        setNavItemState(item, false);\n      });\n\n      item.addEventListener(\"focusin\", () => {\n        if (!desktopNavQuery.matches) return;\n        closeMenus(item);\n        setNavItemState(item, true);\n      });\n\n      item.addEventListener(\"focusout\", (event) => {\n        if (!desktopNavQuery.matches) return;\n        if (event.relatedTarget && item.contains(event.relatedTarget)) return;\n        setNavItemState(item, false);\n      });\n    });\n\n    document.addEventListener(\"click\", (event) => {\n      if (!event.target.closest(SELECTORS.headerBar)) {\n        setMobileNav(false);\n      }\n      if (!event.target.closest(SELECTORS.navItem)) closeMenus();\n    });\n\n    window.addEventListener(\"resize\", () => {\n      if (desktopNavQuery.matches) {\n        setMobileNav(false);\n      } else {\n        updateMobileNavHeight();\n      }\n    });\n  };\n\n  const bindHeaderShell = () => {\n    const header = document.querySelector(SELECTORS.header);\n    const shell = header?.parentElement;\n    if (!header || !shell || !shell.classList.contains(\"shopify-section\")) return;\n\n    shell.classList.add(\"site-header-section\");\n    shell.classList.toggle(\"site-header-section--home\", document.body.classList.contains(\"template-index\"));\n  };\n\n  const bindMobileHeroLinks = () => {\n    const mobileQuery = window.matchMedia(\"(max-width: 767px)\");\n\n    document.querySelectorAll(SELECTORS.mobileHeroLink).forEach((panel) => {\n      if (panel.dataset.mobileHeroBound === \"true\") return;\n      panel.dataset.mobileHeroBound = \"true\";\n\n      panel.addEventListener(\"click\", (event) => {\n        if (!mobileQuery.matches || event.defaultPrevented) return;\n        if (event.target.closest(\"a, button, input, select, textarea, summary\")) return;\n\n        const href = panel.dataset.mobileHeroHref;\n        if (href) window.location.assign(href);\n      });\n    });\n  };\n\n  const bindCarousels = () => {\n    document.querySelectorAll(SELECTORS.carousel).forEach((carousel) => {\n      const track = carousel.querySelector(\"[data-carousel-track]\");\n      if (!track) return;\n\n      carousel.querySelectorAll(\"[data-carousel-shift]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          const direction = Number(button.dataset.carouselShift || 1);\n          const amount = track.clientWidth * 0.82 * direction;\n          track.scrollBy({ left: amount, behavior: \"smooth\" });\n        });\n      });\n    });\n  };\n\n  const bindJourney = () => {\n    document.querySelectorAll(SELECTORS.journey).forEach((journey) => {\n      const cards = [...journey.querySelectorAll(\"[data-journey-card]\")];\n      const slides = [...journey.querySelectorAll(\"[data-journey-slide]\")];\n      let index = 0;\n      let timer;\n\n      const activate = (nextIndex) => {\n        index = nextIndex;\n        cards.forEach((card, cardIndex) => card.classList.toggle(\"is-active\", cardIndex === index));\n        slides.forEach((slide, slideIndex) => slide.classList.toggle(\"is-active\", slideIndex === index));\n      };\n\n      const queue = () => {\n        clearInterval(timer);\n        timer = window.setInterval(() => activate((index + 1) % slides.length), 4600);\n      };\n\n      cards.forEach((card, cardIndex) => {\n        card.addEventListener(\"click\", () => {\n          activate(cardIndex);\n          queue();\n        });\n      });\n\n      activate(0);\n      if (slides.length > 1) queue();\n    });\n  };\n\n  const renderCart = async ({ syncCartSnapshot = false, markup = null, syncDiscount = true } = {}) => {\n    const drawer = state.drawers.cart;\n    if (!drawer) return;\n\n    const discountedCart = syncDiscount ? await syncUrlDiscountToCart() : null;\n    if (discountedCart) markup = discountedCart.sections?.[\"cart-drawer\"];\n    let freshDrawer;\n    let cart;\n    for (let attempt = 0; attempt < 2; attempt += 1) {\n      if (!markup) {\n        const sectionUrl = new URL(cartSectionParameters().sections_url, window.location.origin);\n        sectionUrl.searchParams.set(\"section_id\", \"cart-drawer\");\n        const controller = new AbortController();\n        const timer = window.setTimeout(() => controller.abort(), 15000);\n        try {\n          const response = await fetch(`${sectionUrl.pathname}${sectionUrl.search}`, {\n            headers: { Accept: \"text/html\" }, cache: \"no-store\", signal: controller.signal\n          });\n          if (!response.ok) throw new Error(`Cart section failed with ${response.status}`);\n          markup = await response.text();\n        } finally { window.clearTimeout(timer); }\n      }\n      const parsed = new DOMParser().parseFromString(markup, \"text/html\");\n      freshDrawer = parsed.querySelector('[data-drawer=\"cart\"]');\n      try { cart = JSON.parse(freshDrawer?.querySelector('[data-cart-state]')?.textContent || \"null\"); } catch (_) { cart = null; }\n      if (freshDrawer && Array.isArray(cart?.items) && Number.isFinite(cart.item_count)) break;\n      markup = null;\n    }\n    if (!freshDrawer || !Array.isArray(cart?.items) || !Number.isFinite(cart.item_count)) throw new Error(\"Cart section data missing\");\n    if (syncCartSnapshot) queueCartSnapshotSync(cart);\n\n    drawer.innerHTML = freshDrawer.innerHTML;\n    drawer.dataset.cartCount = `${cart.item_count || 0}`;\n    loadCartRecommendationImages(drawer);\n\n    syncCheckoutDiscountLinks(drawer);\n    hydrateCartLineItems(cart);\n    updateCartImpact(cart, drawer);\n    updateCartBenefits(cart, drawer);\n    updateCartBadge(cart.item_count || 0);\n    bindPointerRevealButtons(drawer);\n    bindCartForms();\n    animateCartRender(cart);\n  };\n\n  const bindCartForms = () => {\n    document.querySelectorAll(SELECTORS.addToCart).forEach((button) => {\n      const form = button.closest(\"form\");\n      if (!form || form.dataset.cartBound === \"true\") return;\n\n      form.dataset.cartBound = \"true\";\n\n      form.addEventListener(\"submit\", async (event) => {\n        event.preventDefault();\n        if (form.dataset.cartPending === \"true\") return;\n        form.dataset.cartPending = \"true\";\n        const formData = new FormData(form);\n        Object.entries(cartSectionParameters()).forEach(([key, value]) => formData.set(key, value));\n        button.disabled = true;\n        button.classList.add(\"is-adding\");\n        const addedLabel = button.dataset.addedLabel || window.themeStrings.addedToCart;\n\n        await queueCartOperation(async () => {\n          let added = false;\n          showCartError(form);\n          showCartError(state.drawers.cart);\n          try {\n            const addedItem = await requestCart(window.themeRoutes.cartAdd, {\n              method: \"POST\",\n              headers: { Accept: \"application/json\" },\n              body: formData\n            });\n            if (!addedItem.key && !addedItem.items?.length) throw new Error(\"Added item data missing\");\n            added = true;\n            state.cartAnimationIntent = { type: \"add\", key: addedItem.key || addedItem.items?.[0]?.key || null };\n            setPointerRevealButtonLabel(button, addedLabel);\n            button.classList.remove(\"is-adding\");\n            button.classList.add(\"is-added\");\n            window.setTimeout(() => {\n              setPointerRevealButtonLabel(button, button.dataset.originalLabel || \"Add to Bag\");\n              button.classList.remove(\"is-added\");\n            }, 1600);\n            await openDrawer(\"cart\", { refreshCart: false });\n            await renderCart({ markup: addedItem.sections?.[\"cart-drawer\"], syncCartSnapshot: true });\n          } catch (error) {\n            state.cartAnimationIntent = null;\n            let recovered = false;\n            try { await renderCart({ syncCartSnapshot: true, syncDiscount: false }); recovered = true; } catch (refreshError) { console.warn(\"Cart recovery failed\", refreshError); }\n            if (added && recovered) return;\n            const message = error.cartMessage || (added ? window.themeStrings.cartAddedRefreshFailed : window.themeStrings.cartRequestFailed);\n            showCartError(form.isConnected ? form : state.drawers.cart, message);\n            if (state.activeDrawer === \"cart\") showCartError(state.drawers.cart, message);\n          } finally {\n            delete form.dataset.cartPending;\n            button.classList.remove(\"is-adding\");\n            button.disabled = false;\n          }\n        });\n      });\n\n      button.dataset.originalLabel = getPointerRevealButtonLabel(button);\n    });\n  };\n\n  const scorePredictiveProduct = (card, query) => {\n    const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n    const scoreField = (value, weight) => {\n      const text = (value || \"\").toLowerCase();\n      if (!text) return 0;\n      return terms.reduce((score, term) => score + (text.includes(term) ? weight : 0), 0);\n    };\n\n    return (\n      scoreField(card.dataset.productTitle, 100) +\n      scoreField(card.dataset.productTags, 70) +\n      scoreField(card.dataset.productMeta, 35) +\n      scoreField(card.dataset.productBody, 10)\n    );\n  };\n\n  const rankPredictiveProducts = (root, query) => {\n    const products = [...root.querySelectorAll(\"[data-predictive-product]\")];\n    if (!products.length) return;\n\n    const list = products[0].parentElement;\n    products\n      .map((card, index) => ({ card, index, score: scorePredictiveProduct(card, query) }))\n      .sort((a, b) => b.score - a.score || a.index - b.index)\n      .forEach(({ card }, index) => {\n        card.hidden = index >= 4;\n        list.appendChild(card);\n      });\n  };\n\n  const bindPredictiveSearch = () => {\n    const input = document.querySelector(SELECTORS.predictiveInput);\n    const results = document.querySelector(SELECTORS.predictiveResults);\n    const viewAll = document.querySelector(SELECTORS.predictiveViewAll);\n    if (!input || !results) return;\n    if (input.dataset.predictiveSearchBound === \"true\") return;\n    input.dataset.predictiveSearchBound = \"true\";\n\n    const defaultMarkup = results.innerHTML;\n\n    const resetResults = () => {\n      results.innerHTML = defaultMarkup;\n      if (viewAll) {\n        viewAll.hidden = true;\n        viewAll.href = window.themeRoutes.search;\n      }\n    };\n\n    input.addEventListener(\"input\", async () => {\n      const query = input.value.trim();\n\n      if (state.predictiveAbort) state.predictiveAbort.abort();\n      if (!query) {\n        resetResults();\n        return;\n      }\n\n      if (viewAll) {\n        viewAll.hidden = false;\n        viewAll.href = `${window.themeRoutes.search}?q=${encodeURIComponent(query)}`;\n      }\n\n      state.predictiveAbort = new AbortController();\n\n      try {\n        const params = new URLSearchParams({\n          q: query,\n          \"resources[type]\": \"product,article,collection\",\n          \"resources[limit]\": \"10\",\n          \"resources[limit_scope]\": \"each\",\n          \"resources[options][fields]\": \"title,product_type,variants.title,vendor,tag,body\",\n          section_id: \"predictive-search\"\n        });\n        const url = `${window.themeRoutes.predictiveSearch}?${params.toString()}`;\n        const response = await fetch(url, {\n          signal: state.predictiveAbort.signal\n        });\n        const text = await response.text();\n        const parser = new DOMParser();\n        const html = parser.parseFromString(text, \"text/html\");\n        const payload = html.querySelector(\"[data-predictive-search-fragment]\");\n        results.innerHTML = payload?.innerHTML || `<p class=\"drawer-empty\">${window.themeStrings.searchEmpty}</p>`;\n        rankPredictiveProducts(results, query);\n      } catch (error) {\n        if (error.name !== \"AbortError\") console.error(error);\n      }\n    });\n  };\n\n  const bindProductGallery = () => {\n    document.querySelectorAll(SELECTORS.productGallery).forEach((gallery) => {\n      if (gallery.dataset.productGalleryBound === \"true\") return;\n      gallery.dataset.productGalleryBound = \"true\";\n\n      const zoomTargets = [...gallery.querySelectorAll(\"[data-product-zoom-target]\")];\n      const galleryTrack = gallery.querySelector(\"[data-product-gallery-track]\");\n      const gallerySlides = [...gallery.querySelectorAll(\"[data-product-gallery-slide]\")];\n      const galleryDots = [...gallery.querySelectorAll(\"[data-product-gallery-dot]\")];\n      const galleryCounter = gallery.querySelector(\"[data-product-gallery-counter]\");\n      const galleryCounterCurrent = galleryCounter?.querySelector(\"[data-product-gallery-counter-current]\");\n      const galleryCounterStatus = galleryCounter?.querySelector(\"[data-product-gallery-counter-status]\");\n      const canHoverMedia = window.matchMedia(\"(hover: hover) and (pointer: fine)\");\n      const usesCenteredSlides = window.matchMedia(\"(max-width: 960px)\");\n      const reducesMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n      const canUseProductZoom = () => !usesCenteredSlides.matches && canHoverMedia.matches;\n      const zoomScale = 2.2;\n      const galleryVideos = gallerySlides.flatMap((slide, index) =>\n        [...slide.querySelectorAll(\"video\")].map((video) => ({ video, index }))\n      );\n      const visibleGalleryVideos = new Set();\n      let activeGalleryVideoIndex = 0;\n      const syncGalleryVideos = () => {\n        galleryVideos.forEach(({ video, index }) => {\n          const shouldPlay = visibleGalleryVideos.has(video) && !document.hidden\n            && (!usesCenteredSlides.matches || index === activeGalleryVideoIndex);\n          if (shouldPlay && video.paused) {\n            const playPromise = video.play();\n            playPromise?.catch(() => {});\n          } else if (!shouldPlay && !video.paused) {\n            video.pause();\n          }\n        });\n      };\n      if (galleryVideos.length) {\n        galleryVideos.forEach(({ video }) => {\n          const bounds = video.getBoundingClientRect();\n          if (bounds.bottom > 0 && bounds.top < window.innerHeight\n            && bounds.right > 0 && bounds.left < window.innerWidth) {\n            visibleGalleryVideos.add(video);\n          }\n        });\n        if (\"IntersectionObserver\" in window) {\n          const videoObserver = new IntersectionObserver((entries) => {\n            entries.forEach(({ target, isIntersecting }) => {\n              if (isIntersecting) visibleGalleryVideos.add(target);\n              else visibleGalleryVideos.delete(target);\n            });\n            syncGalleryVideos();\n          });\n          galleryVideos.forEach(({ video }) => videoObserver.observe(video));\n        } else {\n          galleryVideos.forEach(({ video }) => visibleGalleryVideos.add(video));\n        }\n        document.addEventListener(\"visibilitychange\", syncGalleryVideos);\n      }\n\n      if (galleryTrack && gallerySlides.length && (galleryDots.length || galleryCounter)) {\n        let galleryFrame = null;\n        let gallerySettleTimer = null;\n        let loopEnabled = false;\n        let loopJumping = false;\n        let leadingClones = [];\n        let trailingClones = [];\n        let lastActiveGalleryIndex = null;\n\n        gallerySlides.forEach((slide, index) => {\n          slide.dataset.productGalleryLogicalIndex = String(index);\n        });\n\n        const setActiveGallerySlide = (activeIndex) => {\n          if (activeIndex === lastActiveGalleryIndex) return;\n          lastActiveGalleryIndex = activeIndex;\n          galleryDots.forEach((dot, index) => {\n            const isActive = index === activeIndex;\n            dot.classList.toggle(\"is-active\", isActive);\n            if (isActive) {\n              dot.setAttribute(\"aria-current\", \"true\");\n            } else {\n              dot.removeAttribute(\"aria-current\");\n            }\n          });\n          if (galleryCounterCurrent) galleryCounterCurrent.textContent = String(activeIndex + 1);\n          if (galleryCounterStatus) {\n            galleryCounterStatus.textContent = `Showing media ${activeIndex + 1} of ${gallerySlides.length}`;\n          }\n        };\n\n        const getPhysicalGallerySlides = () => {\n          if (!loopEnabled) return gallerySlides;\n          return [...leadingClones, ...gallerySlides, ...trailingClones];\n        };\n\n        const getClosestGallerySlide = () => {\n          let closestSlide = gallerySlides[0];\n          let closestDistance = Infinity;\n          const trackPosition = usesCenteredSlides.matches\n            ? galleryTrack.scrollLeft + (galleryTrack.clientWidth / 2)\n            : galleryTrack.scrollLeft;\n\n          getPhysicalGallerySlides().forEach((slide) => {\n            const slidePosition = usesCenteredSlides.matches\n              ? slide.offsetLeft + (slide.offsetWidth / 2)\n              : slide.offsetLeft;\n            const distance = Math.abs(slidePosition - trackPosition);\n            if (distance < closestDistance) {\n              closestDistance = distance;\n              closestSlide = slide;\n            }\n          });\n\n          return closestSlide;\n        };\n\n        const getLogicalGalleryIndex = (slide) => {\n          const index = Number.parseInt(slide?.dataset.productGalleryLogicalIndex || \"0\", 10);\n          return Number.isFinite(index) ? index : 0;\n        };\n\n        const getCenteredGalleryLeft = (slide) => {\n          const centeredLeft = slide.offsetLeft\n            - ((galleryTrack.clientWidth - slide.offsetWidth) / 2);\n          const maxScrollLeft = Math.max(0, galleryTrack.scrollWidth - galleryTrack.clientWidth);\n          return Math.min(Math.max(centeredLeft, 0), maxScrollLeft);\n        };\n\n        const syncActiveGalleryVideo = (activeIndex) => {\n          activeGalleryVideoIndex = activeIndex;\n          syncGalleryVideos();\n        };\n\n        const syncGalleryDots = () => {\n          setActiveGallerySlide(getLogicalGalleryIndex(getClosestGallerySlide()));\n        };\n\n        const createGalleryLoopClone = (sourceSlide, logicalIndex, clonePosition) => {\n          const clone = sourceSlide.cloneNode(true);\n          clone.removeAttribute(\"data-product-gallery-slide\");\n          clone.removeAttribute(\"data-product-zoom-target\");\n          clone.removeAttribute(\"data-zoom-image\");\n          clone.dataset.productGalleryClone = clonePosition;\n          clone.dataset.productGalleryLogicalIndex = String(logicalIndex);\n          clone.setAttribute(\"aria-hidden\", \"true\");\n\n          [clone, ...clone.querySelectorAll(\"[id]\")].forEach((element) => {\n            element.removeAttribute(\"id\");\n          });\n          clone.querySelectorAll(\"[data-product-zoom-lens]\").forEach((lens) => lens.remove());\n          clone.querySelectorAll(\"a, button, input, select, textarea, [tabindex]\").forEach((element) => {\n            element.setAttribute(\"tabindex\", \"-1\");\n          });\n          clone.querySelectorAll(\"img\").forEach((image) => {\n            image.setAttribute(\"alt\", \"\");\n            image.loading = \"lazy\";\n            image.fetchPriority = \"low\";\n          });\n\n          const video = clone.querySelector(\"video\");\n          if (video) {\n            const fallbackImage = video.querySelector(\"img\");\n            const previewUrl = video.getAttribute(\"poster\")\n              || fallbackImage?.currentSrc\n              || fallbackImage?.src\n              || \"\";\n            const preview = document.createElement(\"img\");\n            if (previewUrl) preview.src = previewUrl;\n            preview.alt = \"\";\n            preview.loading = \"lazy\";\n            preview.fetchPriority = \"low\";\n            preview.decoding = \"async\";\n            video.replaceWith(preview);\n            clone.classList.remove(\"product-gallery__image--video\");\n          }\n\n          return clone;\n        };\n\n        const setGalleryScrollLeftInstant = (targetLeft) => {\n          loopJumping = true;\n          const previousBehavior = galleryTrack.style.scrollBehavior;\n          galleryTrack.style.scrollBehavior = \"auto\";\n          galleryTrack.scrollLeft = Math.min(\n            Math.max(targetLeft, 0),\n            Math.max(0, galleryTrack.scrollWidth - galleryTrack.clientWidth)\n          );\n          galleryTrack.style.scrollBehavior = previousBehavior;\n\n          window.requestAnimationFrame(() => {\n            loopJumping = false;\n          });\n        };\n\n        const jumpToGallerySlide = (slide) => {\n          if (!slide) return;\n          setGalleryScrollLeftInstant(getCenteredGalleryLeft(slide));\n        };\n\n        const settleGalleryLoop = () => {\n          if (!loopEnabled || loopJumping) return;\n          const closestSlide = getClosestGallerySlide();\n          const activeIndex = getLogicalGalleryIndex(closestSlide);\n          const clonePosition = closestSlide?.dataset.productGalleryClone;\n\n          if (clonePosition && trailingClones[0]) {\n            const cycleWidth = Math.abs(trailingClones[0].offsetLeft - gallerySlides[0].offsetLeft);\n            if (cycleWidth) {\n              const targetLeft = clonePosition === \"before\"\n                ? galleryTrack.scrollLeft + cycleWidth\n                : galleryTrack.scrollLeft - cycleWidth;\n              setGalleryScrollLeftInstant(targetLeft);\n            }\n          }\n\n          setActiveGallerySlide(activeIndex);\n          syncActiveGalleryVideo(activeIndex);\n        };\n\n        const enableGalleryLoop = () => {\n          if (loopEnabled || gallerySlides.length < 2) return;\n          const activeIndex = galleryDots.findIndex((dot) => dot.classList.contains(\"is-active\"));\n          leadingClones = gallerySlides.map((slide, index) => createGalleryLoopClone(slide, index, \"before\"));\n          trailingClones = gallerySlides.map((slide, index) => createGalleryLoopClone(slide, index, \"after\"));\n\n          galleryTrack.prepend(...leadingClones);\n          galleryTrack.append(...trailingClones);\n          loopEnabled = true;\n          jumpToGallerySlide(gallerySlides[Math.max(0, activeIndex)] || gallerySlides[0]);\n          syncActiveGalleryVideo(Math.max(0, activeIndex));\n        };\n\n        const disableGalleryLoop = () => {\n          if (!loopEnabled) return;\n          const activeIndex = getLogicalGalleryIndex(getClosestGallerySlide());\n          [...leadingClones, ...trailingClones].forEach((clone) => clone.remove());\n          leadingClones = [];\n          trailingClones = [];\n          loopEnabled = false;\n          galleryTrack.scrollLeft = 0;\n          setActiveGallerySlide(activeIndex);\n          syncGalleryVideos();\n        };\n\n        const syncGalleryLoopMode = () => {\n          if (usesCenteredSlides.matches) {\n            enableGalleryLoop();\n          } else {\n            disableGalleryLoop();\n          }\n          syncGalleryVideos();\n        };\n\n        galleryTrack.addEventListener(\"scroll\", () => {\n          if (galleryFrame) window.cancelAnimationFrame(galleryFrame);\n          galleryFrame = window.requestAnimationFrame(syncGalleryDots);\n          if (gallerySettleTimer) window.clearTimeout(gallerySettleTimer);\n          gallerySettleTimer = window.setTimeout(settleGalleryLoop, 140);\n        }, { passive: true });\n\n        galleryDots.forEach((dot, index) => {\n          dot.addEventListener(\"click\", () => {\n            const targetSlide = gallerySlides[index];\n            if (!targetSlide) return;\n            galleryTrack.scrollTo({\n              left: usesCenteredSlides.matches\n                ? getCenteredGalleryLeft(targetSlide)\n                : targetSlide.offsetLeft,\n              behavior: reducesMotion.matches ? \"auto\" : \"smooth\"\n            });\n            setActiveGallerySlide(index);\n          });\n        });\n\n        window.addEventListener(\"resize\", () => {\n          syncGalleryLoopMode();\n          syncGalleryDots();\n        }, { passive: true });\n        syncGalleryLoopMode();\n        syncGalleryDots();\n      }\n\n      if (!zoomTargets.length) return;\n\n      const syncZoomImage = (target, zoomLens) => {\n        if (!zoomLens) return;\n        const image = target.querySelector(\"img\");\n        const zoomImage = target.dataset.zoomImage || image?.currentSrc || image?.src || \"\";\n        zoomLens.style.backgroundImage = zoomImage ? `url(\"${zoomImage}\")` : \"\";\n      };\n\n      const hideZoom = (zoomLens) => {\n        if (!zoomLens) return;\n        zoomLens.classList.remove(\"is-visible\");\n      };\n\n      const moveZoom = (event, target, zoomLens) => {\n        if (!target || !zoomLens || !canUseProductZoom()) return;\n        const rect = target.getBoundingClientRect();\n        if (!rect.width || !rect.height) return;\n\n        const x = Math.min(Math.max(event.clientX - rect.left, 0), rect.width);\n        const y = Math.min(Math.max(event.clientY - rect.top, 0), rect.height);\n        const lensSize = zoomLens.offsetWidth || 220;\n        const lensRadius = lensSize / 2;\n\n        zoomLens.style.left = `${x}px`;\n        zoomLens.style.top = `${y}px`;\n        zoomLens.style.backgroundSize = `${rect.width * zoomScale}px ${rect.height * zoomScale}px`;\n        zoomLens.style.backgroundPosition = `${-(x * zoomScale - lensRadius)}px ${-(y * zoomScale - lensRadius)}px`;\n        zoomLens.classList.add(\"is-visible\");\n      };\n\n      zoomTargets.forEach((target) => {\n        const zoomLens = target.querySelector(\"[data-product-zoom-lens]\");\n        if (!zoomLens) return;\n\n        target.addEventListener(\"mousemove\", (event) => moveZoom(event, target, zoomLens));\n        target.addEventListener(\"mouseenter\", () => {\n          if (!canUseProductZoom()) return;\n          syncZoomImage(target, zoomLens);\n          zoomLens.classList.add(\"is-visible\");\n        });\n        target.addEventListener(\"mouseleave\", () => hideZoom(zoomLens));\n      });\n    });\n  };\n\n  const bindProductBrowseBack = () => {\n    const key = \"refi-product-browse-back-v1\";\n    const backLink = document.querySelector(\"[data-product-back-link]\");\n    const list = document.querySelector(\"[data-all-pieces-root]\");\n    if (!backLink && !list) return;\n\n    const localUrl = (value) => {\n      try {\n        const url = new URL(value, window.location.origin);\n        return url.origin === window.location.origin && !url.username && !url.password ? url : null;\n      } catch { return null; }\n    };\n    const listUrl = (value) => {\n      const url = localUrl(value);\n      return url && /^\\/(?:[a-z]{2}(?:-[a-zA-Z]{2})?\\/)?(?:collections\\/[a-z0-9-]+|search)\\/?$/.test(url.pathname) ? url : null;\n    };\n    const productHandle = (url) => url?.pathname.match(/\\/products\\/([a-z0-9-]+)\\/?$/)?.[1] || \"\";\n    const readContext = () => {\n      try {\n        const value = JSON.parse(window.sessionStorage.getItem(key));\n        if (value && listUrl(value.url) && localUrl(value.via) && typeof value.label === \"string\" &&\n            Number.isFinite(value.y) && value.y >= 0 && Number.isFinite(value.time) &&\n            Date.now() - value.time >= 0 && Date.now() - value.time < 30 * 60 * 1000) return value;\n      } catch {}\n      return null;\n    };\n    const saveContext = (value) => {\n      try { window.sessionStorage.setItem(key, JSON.stringify(value)); } catch {}\n    };\n    const stored = readContext();\n    const referrer = document.referrer ? localUrl(document.referrer) : null;\n    const navigationType = performance.getEntriesByType(\"navigation\")[0]?.type;\n    const activeContext = backLink && stored && stored.product === productHandle(localUrl(window.location.href)) &&\n      ((referrer && referrer.href === localUrl(stored.via).href) ||\n        navigationType === \"reload\" || navigationType === \"back_forward\") ? stored : null;\n\n    if (backLink && !activeContext) {\n      try { window.sessionStorage.removeItem(key); } catch {}\n    }\n\n    if (activeContext) {\n      backLink.href = activeContext.url;\n      backLink.querySelector(\"[data-product-back-label]\").textContent =\n        listUrl(activeContext.url).pathname.endsWith(\"/search\") ? backLink.dataset.searchLabel : activeContext.label;\n      backLink.addEventListener(\"click\", (event) => {\n        if (event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey) {\n          saveContext({ ...activeContext, restore: true, time: Date.now() });\n        }\n      });\n    }\n\n    const rememberProductEntry = (event) => {\n      if (event.defaultPrevented || (event.button !== 0 && event.button !== 1)) return;\n      const link = event.target instanceof Element ? event.target.closest(\"a[href]\") : null;\n      if (!link || link.closest(\"[data-drawer], [data-home-signup-modal]\")) return;\n      const product = productHandle(localUrl(link.href));\n      if (!product) return;\n      if (list && list.contains(link) && listUrl(window.location.href)) {\n        saveContext({\n          url: window.location.href,\n          label: document.querySelector(\"h1\")?.textContent.trim().slice(0,100) || \"\",\n          y: window.scrollY,\n          filtersOpen: list.classList.contains(\"is-filter-open\"),\n          product, via: window.location.href, time: Date.now()\n        });\n      } else if (backLink && activeContext && !link.closest(\"header\")) {\n        saveContext({ ...activeContext, product, via: window.location.href, restore: false, time: Date.now() });\n      }\n    };\n    document.addEventListener(\"click\", rememberProductEntry);\n    document.addEventListener(\"auxclick\", rememberProductEntry);\n\n    const restoreListPosition = () => {\n      const context = readContext();\n      if (!list || !context?.restore || context.url !== window.location.href) return;\n      saveContext({ ...context, restore: false });\n      if (context.filtersOpen && window.matchMedia(\"(min-width: 921px)\").matches && !list.classList.contains(\"is-filter-open\")) {\n        list.querySelector(\"[data-filter-toggle]\")?.click();\n      }\n      const restore = () => window.requestAnimationFrame(() => window.scrollTo({ top: context.y, behavior: \"instant\" }));\n      const transitions = list.querySelector(\".all-pieces-layout\")?.getAnimations() || [];\n      Promise.allSettled([document.fonts?.ready, ...transitions.map((animation) => animation.finished)]).then(restore);\n    };\n    window.addEventListener(\"pageshow\", restoreListPosition);\n  };\n\n  const bindProductMetaSticky = () => {\n    const productMeta = document.querySelector(\".product-meta\");\n    if (!productMeta || productMeta.dataset.productMetaStickyBound === \"true\") return;\n    productMeta.dataset.productMetaStickyBound = \"true\";\n\n    let stickyFrame = null;\n\n    const syncProductMetaSticky = () => {\n      if (stickyFrame) window.cancelAnimationFrame(stickyFrame);\n      stickyFrame = window.requestAnimationFrame(() => {\n        const headerShell = document.querySelector(\".site-header-section\");\n        const stickyTop = Math.ceil(headerShell?.getBoundingClientRect().height || 0) + 12;\n        productMeta.style.setProperty(\"--product-meta-sticky-top\", `${stickyTop}px`);\n      });\n    };\n\n    window.addEventListener(\"resize\", syncProductMetaSticky, { passive: true });\n    syncProductMetaSticky();\n  };\n\n  const bindProductWearWithRails = () => {\n    document.querySelectorAll(SELECTORS.productWearWith).forEach((section) => {\n      if (section.dataset.wearWithBound === \"true\") return;\n      section.dataset.wearWithBound = \"true\";\n\n      const viewport = section.querySelector(\"[data-wear-with-viewport]\");\n      const track = section.querySelector(\"[data-wear-with-track]\");\n      const previousButton = section.querySelector(\"[data-wear-with-prev]\");\n      const nextButton = section.querySelector(\"[data-wear-with-next]\");\n      if (!viewport || !track) return;\n\n      let pendingFrame = null;\n      const dragState = {\n        active: false,\n        blockClick: false,\n        moved: false,\n        pointerId: null,\n        scrollLeft: 0,\n        startX: 0,\n        startY: 0\n      };\n\n      const getScrollStep = () => {\n        const firstCard = track.querySelector(\".wear-with-card\");\n        if (!firstCard) return Math.max(180, viewport.clientWidth * 0.78);\n\n        const trackStyles = window.getComputedStyle(track);\n        const gap = Number.parseFloat(trackStyles.columnGap || trackStyles.gap || \"0\") || 0;\n        return firstCard.getBoundingClientRect().width + gap;\n      };\n\n      const snapToClosestCard = (dragDistance = 0) => {\n        const maxScrollLeft = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n        const step = getScrollStep();\n        if (maxScrollLeft <= 2 || step <= 0) return;\n\n        const currentIndex = viewport.scrollLeft / step;\n        let targetIndex = Math.round(currentIndex);\n        if (Math.abs(dragDistance) > step * 0.16) {\n          targetIndex = dragDistance > 0 ? Math.ceil(currentIndex) : Math.floor(currentIndex);\n        }\n\n        const targetLeft = Math.min(maxScrollLeft, Math.max(0, targetIndex * step));\n        viewport.scrollTo({ left: targetLeft, behavior: \"smooth\" });\n      };\n\n      const updateControls = () => {\n        pendingFrame = null;\n        const maxScrollLeft = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n        const isScrollable = maxScrollLeft > 2;\n        section.classList.toggle(\"is-scrollable\", isScrollable);\n\n        if (!previousButton || !nextButton) return;\n        previousButton.disabled = !isScrollable || viewport.scrollLeft <= 2;\n        nextButton.disabled = !isScrollable || viewport.scrollLeft >= maxScrollLeft - 2;\n      };\n\n      const scheduleControlUpdate = () => {\n        if (pendingFrame) return;\n        pendingFrame = window.requestAnimationFrame(updateControls);\n      };\n\n      previousButton?.addEventListener(\"click\", () => {\n        viewport.scrollBy({ left: -getScrollStep(), behavior: \"smooth\" });\n      });\n\n      nextButton?.addEventListener(\"click\", () => {\n        viewport.scrollBy({ left: getScrollStep(), behavior: \"smooth\" });\n      });\n\n      viewport.addEventListener(\"pointerdown\", (event) => {\n        if (event.button !== undefined && event.button !== 0) return;\n        if (event.target.closest(\"[data-wear-with-prev], [data-wear-with-next]\")) return;\n\n        dragState.active = true;\n        dragState.blockClick = false;\n        dragState.moved = false;\n        dragState.pointerId = event.pointerId;\n        dragState.scrollLeft = viewport.scrollLeft;\n        dragState.startX = event.clientX;\n        dragState.startY = event.clientY;\n      });\n\n      viewport.addEventListener(\"pointermove\", (event) => {\n        if (!dragState.active) return;\n\n        const deltaX = event.clientX - dragState.startX;\n        const deltaY = event.clientY - dragState.startY;\n        const isHorizontalDrag = Math.abs(deltaX) > 4 && Math.abs(deltaX) > Math.abs(deltaY);\n        if (isHorizontalDrag) {\n          if (!dragState.moved) {\n            viewport.classList.add(\"is-dragging\");\n            viewport.setPointerCapture?.(event.pointerId);\n          }\n          dragState.moved = true;\n          dragState.blockClick = true;\n        }\n\n        if (!dragState.moved) return;\n\n        viewport.scrollLeft = dragState.scrollLeft - deltaX;\n        event.preventDefault();\n      });\n\n      const endDrag = (event) => {\n        if (!dragState.active) return;\n\n        const dragDistance = viewport.scrollLeft - dragState.scrollLeft;\n        dragState.active = false;\n        viewport.classList.remove(\"is-dragging\");\n        if (dragState.pointerId !== null && viewport.hasPointerCapture?.(dragState.pointerId)) {\n          viewport.releasePointerCapture?.(dragState.pointerId);\n        }\n        dragState.pointerId = null;\n        if (dragState.moved && event?.type !== \"pointercancel\") {\n          snapToClosestCard(dragDistance);\n        }\n        scheduleControlUpdate();\n\n        if (dragState.moved) {\n          window.setTimeout(() => {\n            dragState.blockClick = false;\n            dragState.moved = false;\n          }, 160);\n        }\n\n        if (event?.type === \"pointercancel\") {\n          dragState.blockClick = false;\n          dragState.moved = false;\n        }\n      };\n\n      viewport.addEventListener(\"pointerup\", endDrag);\n      viewport.addEventListener(\"pointercancel\", endDrag);\n      viewport.addEventListener(\"click\", (event) => {\n        if (!dragState.blockClick) return;\n        event.preventDefault();\n        event.stopPropagation();\n      }, true);\n\n      viewport.addEventListener(\"scroll\", scheduleControlUpdate, { passive: true });\n      window.addEventListener(\"resize\", scheduleControlUpdate, { passive: true });\n      updateControls();\n      window.setTimeout(updateControls, 320);\n    });\n  };\n\n  const bindProductPreorder = () => {\n    document.querySelectorAll(SELECTORS.productPreorderForm).forEach((form) => {\n      if (form.dataset.preorderBound === \"true\") return;\n      form.dataset.preorderBound = \"true\";\n\n      const button = form.querySelector(SELECTORS.addToCart);\n      const buyNowLink = form.querySelector(\"[data-buy-now-link]\");\n      const preorderSubmit = form.querySelector(\"[data-preorder-submit]\");\n      const variantSelect = form.querySelector('select[name=\"id\"]');\n      const variantInput = form.querySelector('input[name=\"id\"]');\n      const accordionId = form.dataset.preorderAccordionId;\n      const accordion = accordionId ? document.getElementById(accordionId) : null;\n      const preorderPolicyAccordion = document.getElementById(\"ProductPreOrderPolicyAccordion\");\n      const deliveryEstimate = document.querySelector(\"[data-product-delivery-estimate]\");\n      const dispatchRow = document.querySelector(\"[data-product-dispatch]\");\n      const dispatchMessage = dispatchRow?.querySelector(\"[data-dispatch-message]\");\n      const defaultLabel = button?.dataset.defaultLabel || \"Add to Bag\";\n      const preorderLabel = preorderSubmit?.dataset.preorderLabel || \"Pre Order\";\n      const cartUrl = (form.dataset.cartUrl || \"/cart\").replace(/\\/$/, \"\");\n\n      const sync = () => {\n        let preorderEligible = form.dataset.preorderEligible === \"true\";\n        let variantId = variantInput?.value || \"\";\n\n        if (variantSelect) {\n          preorderEligible = variantSelect.selectedOptions[0]?.dataset.preorderEligible === \"true\";\n          variantId = variantSelect.value;\n        }\n\n        if (button) {\n          setPointerRevealButtonLabel(button, defaultLabel);\n          button.dataset.originalLabel = defaultLabel;\n        }\n\n        const directPurchaseUrl = variantId ? `${cartUrl}/${variantId}:1` : cartUrl;\n\n        if (buyNowLink) {\n          buyNowLink.setAttribute(\"href\", directPurchaseUrl);\n          buyNowLink.hidden = preorderEligible;\n          buyNowLink.style.display = preorderEligible ? \"none\" : \"\";\n        }\n\n        if (preorderSubmit) {\n          preorderSubmit.setAttribute(\"href\", directPurchaseUrl);\n          preorderSubmit.hidden = !preorderEligible;\n          preorderSubmit.style.display = preorderEligible ? \"\" : \"none\";\n          preorderSubmit.textContent = preorderLabel;\n        }\n\n        if (accordion) {\n          accordion.hidden = !preorderEligible;\n          if (!preorderEligible) {\n            accordion.open = false;\n          }\n        }\n\n        if (preorderPolicyAccordion) {\n          preorderPolicyAccordion.hidden = !preorderEligible;\n          if (!preorderEligible) {\n            preorderPolicyAccordion.open = false;\n          }\n        }\n\n        if (deliveryEstimate) deliveryEstimate.hidden = preorderEligible;\n        if (dispatchMessage) {\n          const selectedVariant = variantSelect?.selectedOptions[0] || variantInput;\n          const enabled = !preorderEligible && selectedVariant?.dataset.dispatchEligible === \"true\";\n          dispatchRow.hidden = !enabled;\n          dispatchMessage.dataset.dispatchEnabled = enabled ? \"true\" : \"false\";\n          updateDispatchMessages();\n        }\n      };\n\n      variantSelect?.addEventListener(\"change\", sync);\n      sync();\n    });\n  };\n\n  const bindReveal = () => {\n    const nodes = [...document.querySelectorAll(SELECTORS.reveal)]\n      .filter((node) => !node.classList.contains(\"is-visible\"));\n    if (!nodes.length) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            entry.target.classList.add(\"is-visible\");\n            observer.unobserve(entry.target);\n          }\n        });\n      },\n      { threshold: 0.18 }\n    );\n\n    nodes.forEach((node) => observer.observe(node));\n  };\n\n  const preparePdpInitialLoadingZone = () => {\n    if (!document.body.classList.contains(\"template-product\")) return;\n    if (!window.matchMedia(\"(max-width: 960px)\").matches) return;\n\n    const productMeta = document.querySelector(\".product-meta\");\n    if (!productMeta) return;\n\n    const wearWith = productMeta.querySelector(\"[data-product-wear-with]\");\n    [productMeta, ...productMeta.querySelectorAll(SELECTORS.reveal)].forEach((node) => {\n      if (node === wearWith || wearWith?.contains(node)) return;\n      node.classList.add(\"is-visible\");\n    });\n\n    productMeta.querySelectorAll('img[loading=\"lazy\"]').forEach((image) => {\n      if (wearWith?.contains(image)) return;\n      image.loading = \"eager\";\n      image.fetchPriority = \"low\";\n    });\n  };\n\n  const loadPdpScrollDeferredImage = (image) => {\n    if (!image || image.dataset.pdpScrollLoaded === \"true\") return;\n\n    const markReady = () => image.classList.add(\"is-loaded\");\n    image.addEventListener(\"load\", markReady, { once: true });\n    image.addEventListener(\"error\", markReady, { once: true });\n\n    if (image.dataset.pdpScrollSizes) image.sizes = image.dataset.pdpScrollSizes;\n    if (image.dataset.pdpScrollSrcset) image.srcset = image.dataset.pdpScrollSrcset;\n    if (image.dataset.pdpScrollSrc) image.src = image.dataset.pdpScrollSrc;\n    image.dataset.pdpScrollLoaded = \"true\";\n\n    window.requestAnimationFrame(() => {\n      if (image.complete && image.naturalWidth > 1) markReady();\n    });\n  };\n\n  const bindPdpScrollDeferredImages = () => {\n    const images = [...document.querySelectorAll(\"[data-pdp-scroll-deferred]\")];\n    if (!images.length) return;\n\n    const observeImages = () => {\n      if (!(\"IntersectionObserver\" in window)) {\n        images.forEach(loadPdpScrollDeferredImage);\n        return;\n      }\n\n      const observer = new IntersectionObserver(\n        (entries) => {\n          entries.forEach((entry) => {\n            if (!entry.isIntersecting) return;\n            loadPdpScrollDeferredImage(entry.target);\n            observer.unobserve(entry.target);\n          });\n        },\n        { rootMargin: \"720px 0px\", threshold: 0.01 }\n      );\n\n      images.forEach((image) => observer.observe(image));\n    };\n\n    if (!window.matchMedia(\"(max-width: 960px)\").matches || window.scrollY > 0) {\n      observeImages();\n      return;\n    }\n\n    window.addEventListener(\"scroll\", observeImages, { once: true, passive: true });\n  };\n\n  const loadDeferredImage = (image) => {\n    if (!image || image.dataset.deferredLoaded === \"true\") return;\n\n    const sizes = image.dataset.deferredSizes;\n    const srcset = image.dataset.deferredSrcset;\n    const src = image.dataset.deferredSrc;\n\n    const markLoaded = () => image.classList.add(\"is-loaded\");\n    image.addEventListener(\"load\", markLoaded, { once: true });\n    image.addEventListener(\"error\", () => image.classList.add(\"is-error\"), { once: true });\n\n    if (sizes) image.setAttribute(\"sizes\", sizes);\n    if (srcset) image.setAttribute(\"srcset\", srcset);\n    if (src) image.setAttribute(\"src\", src);\n\n    image.dataset.deferredLoaded = \"true\";\n\n    window.requestAnimationFrame(() => {\n      if (image.complete && image.naturalWidth > 1) {\n        markLoaded();\n      }\n    });\n  };\n\n  const loadCartRecommendationImages = (drawer) => {\n    if (!drawer?.classList.contains(\"is-open\")) return;\n    drawer.querySelectorAll(\"[data-cart-deferred-src]\").forEach((image) => {\n      image.dataset.deferredSrc = image.dataset.cartDeferredSrc;\n      image.dataset.deferredSrcset = image.dataset.cartDeferredSrcset || \"\";\n      loadDeferredImage(image);\n    });\n  };\n\n  const bindDeferredImages = () => {\n    const images = [...document.querySelectorAll(SELECTORS.deferredImage)];\n    if (!images.length) return;\n\n    if (!(\"IntersectionObserver\" in window)) {\n      images.forEach(loadDeferredImage);\n      return;\n    }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (!entry.isIntersecting) return;\n          loadDeferredImage(entry.target);\n          observer.unobserve(entry.target);\n        });\n      },\n      { rootMargin: \"160px 0px\", threshold: 0.01 }\n    );\n\n    images.forEach((image) => observer.observe(image));\n  };\n\n  const bindFaqSearch = () => {\n    document.querySelectorAll(SELECTORS.faqSearch).forEach((input) => {\n      const container = input.closest(\"[data-faq-root]\");\n      if (!container) return;\n      const items = [...container.querySelectorAll(\"[data-faq-item]\")];\n\n      input.addEventListener(\"input\", () => {\n        const query = input.value.trim().toLowerCase();\n        items.forEach((item) => {\n          const match = item.textContent.toLowerCase().includes(query);\n          item.hidden = query ? !match : false;\n        });\n      });\n    });\n  };\n\n  const bindHomeSignupModal = ({ elapsed = 0 } = {}) => {\n    const modal = document.querySelector(SELECTORS.homeSignupModal);\n    if (!modal) return;\n    if (modal.dataset.modalBound === \"true\") return;\n    modal.dataset.modalBound = \"true\";\n\n    const dismissKey = \"refi-home-signup-dismissed-at\";\n    const subscribedKey = \"refi-home-signup-subscribed\";\n    const pendingEmailKey = \"refi-home-signup-pending-email\";\n    const pendingEmailTtl = 60 * 60 * 1000;\n    const searchParams = new URLSearchParams(window.location.search);\n    const homeSignupJustSubmitted =\n      searchParams.get(\"newsletter\") === \"home-popup\" &&\n      searchParams.get(\"customer_posted\") === \"true\";\n    const footerNewsletterJustSubmitted =\n      searchParams.get(\"newsletter\") === \"footer\" &&\n      searchParams.get(\"customer_posted\") === \"true\";\n    const delay = Number(modal.dataset.modalDelay || 3000);\n    const dismissDays = Number(modal.dataset.modalDismissDays || 7);\n    const dismissWindow = dismissDays * 24 * 60 * 60 * 1000;\n    const form = modal.querySelector(SELECTORS.homeSignupForm);\n    const success = modal.querySelector(SELECTORS.homeSignupSuccess);\n    const successAction = modal.querySelector(\"[data-home-signup-success-action]\");\n    const formRow = modal.querySelector(SELECTORS.homeSignupFormRow);\n    const note = modal.querySelector(\".home-signup-modal__note\");\n    const error = modal.querySelector(\"[data-home-signup-error]\");\n    const formState = form?.querySelector(\"[data-home-signup-state]\");\n    const mediaImage = modal.querySelector(\".home-signup-modal__media img\");\n    let timer = null;\n\n    const storePendingEmail = (email) => {\n      const normalizedEmail = normalizeKnownEmail(email);\n      if (!normalizedEmail) return;\n\n      try {\n        window.localStorage.setItem(\n          pendingEmailKey,\n          JSON.stringify({\n            email: normalizedEmail,\n            createdAt: Date.now()\n          })\n        );\n      } catch (error) {\n        console.warn(\"Unable to persist pending signup email\", error);\n      }\n    };\n\n    const readPendingSignupState = () => {\n      try {\n        const raw = window.localStorage.getItem(pendingEmailKey);\n        if (!raw) return null;\n        const parsed = JSON.parse(raw);\n        if (!parsed?.email || Date.now() - Number(parsed.createdAt || 0) > pendingEmailTtl) {\n          window.localStorage.removeItem(pendingEmailKey);\n          return null;\n        }\n        return {\n          email: normalizeKnownEmail(parsed.email),\n          createdAt: Number(parsed.createdAt || 0)\n        };\n      } catch (_error) {\n        return null;\n      }\n    };\n\n    const readPendingEmail = () => readPendingSignupState()?.email || \"\";\n    const homeSignupReturnedWithPendingEmail =\n      window.location.pathname === \"/\" &&\n      window.location.hash === \"#HomeSignupModalForm\" &&\n      Boolean(readPendingEmail());\n\n    const clearPendingEmail = () => {\n      try {\n        window.localStorage.removeItem(pendingEmailKey);\n      } catch (_error) {}\n    };\n\n    const cleanHomeSignupRedirectUrl = () => {\n      if ((!homeSignupJustSubmitted && !homeSignupReturnedWithPendingEmail) || !window.history?.replaceState) return;\n\n      const cleanedParams = new URLSearchParams(window.location.search);\n      cleanedParams.delete(\"newsletter\");\n      cleanedParams.delete(\"customer_posted\");\n      const cleanedHash = window.location.hash === \"#HomeSignupModalForm\" ? \"\" : window.location.hash;\n      const cleanedUrl = `${window.location.pathname}${cleanedParams.toString() ? `?${cleanedParams.toString()}` : \"\"}${cleanedHash}`;\n      window.history.replaceState({}, \"\", cleanedUrl);\n    };\n\n    const loadMedia = () => {\n      if (!mediaImage || mediaImage.dataset.loaded === \"true\") return;\n      const src = mediaImage.dataset.src;\n      if (!src) return;\n      mediaImage.src = src;\n      mediaImage.dataset.loaded = \"true\";\n    };\n\n    const shouldSuppress = () => {\n      if (footerNewsletterJustSubmitted) return true;\n      if (window.localStorage.getItem(subscribedKey) === \"true\") return true;\n      const dismissedAt = Number(window.localStorage.getItem(dismissKey) || 0);\n      return dismissedAt && Date.now() - dismissedAt < dismissWindow;\n    };\n\n    const setSignupSource = (source = \"default\") => {\n      const fromCart = source === \"cart\";\n      modal.dataset.signupSource = fromCart ? \"cart\" : \"default\";\n      if (!successAction) return;\n      successAction.textContent = fromCart ? \"Copy Code & Checkout\" : \"Discover Best Sellers\";\n      successAction.href = fromCart\n        ? \"/discount/WELCOME15?redirect=%2Fcheckout\"\n        : \"/collections/best-sellers-collection\";\n    };\n\n    setSignupSource();\n\n    const showSuccessState = (submittedEmail = \"\") => {\n      if (formRow) formRow.hidden = true;\n      if (note) note.hidden = true;\n      if (error) error.hidden = true;\n      if (success) success.hidden = false;\n      window.localStorage.setItem(subscribedKey, \"true\");\n      rememberKnownEmail(submittedEmail);\n      const profileProperties = buildNewsletterProfileProperties({ source: \"homepage_popup\" });\n      identifyBrowserWithKlaviyo({\n        email: submittedEmail,\n        properties: profileProperties\n      });\n      clearPendingEmail();\n    };\n\n    const showErrorState = (message) => {\n      if (success) success.hidden = true;\n      if (formRow) formRow.hidden = false;\n      if (note) note.hidden = false;\n      form?.querySelector('button[type=\"submit\"]')?.removeAttribute(\"disabled\");\n      clearPendingEmail();\n      if (error) {\n        error.textContent = message || \"We couldn\u2019t sign you up just yet. Please try again.\";\n        error.hidden = false;\n      }\n    };\n\n    const openModal = ({ force = false } = {}) => {\n      if (!force && shouldSuppress()) return;\n      if (state.activeDrawer === \"cart\" || state.drawers.cart?.hasAttribute(\"data-cart-page\")) return;\n      if (timer) {\n        window.clearTimeout(timer);\n        timer = null;\n      }\n      loadMedia();\n      modal.hidden = false;\n      window.requestAnimationFrame(() => modal.classList.add(\"is-open\"));\n      state.homeSignupModalOpen = true;\n      syncBodyLock();\n      modal.querySelector('input[type=\"email\"]')?.focus();\n    };\n\n    modal.addEventListener(\"refi:open-home-signup\", (event) => {\n      setSignupSource(event.detail?.source);\n      openModal({ force: true });\n    });\n\n    successAction?.addEventListener(\"click\", async (event) => {\n      if (modal.dataset.signupSource !== \"cart\") return;\n      event.preventDefault();\n      try {\n        await navigator.clipboard?.writeText(\"WELCOME15\");\n      } catch (_error) {}\n      window.location.assign(successAction.href);\n    });\n\n    const closeModal = ({ persistDismissal = true } = {}) => {\n      if (persistDismissal) {\n        window.localStorage.setItem(dismissKey, String(Date.now()));\n      }\n      modal.classList.remove(\"is-open\");\n      state.homeSignupModalOpen = false;\n      syncBodyLock();\n      window.setTimeout(() => {\n        modal.hidden = true;\n      }, 220);\n    };\n\n    modal.querySelectorAll(SELECTORS.homeSignupClose).forEach((button) => {\n      button.addEventListener(\"click\", () => closeModal());\n    });\n\n    document.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Escape\" && state.homeSignupModalOpen) {\n        closeModal();\n      }\n    });\n\n    if (form) {\n      form.addEventListener(\"submit\", async (event) => {\n        event.preventDefault();\n        const submit = form.querySelector('button[type=\"submit\"]');\n        const formData = new FormData(form);\n        const submittedEmail = normalizeKnownEmail(formData.get(\"contact[email]\"));\n        if (!submittedEmail) {\n          showErrorState(\"Please enter a valid email address.\");\n          return;\n        }\n\n        storePendingEmail(submittedEmail);\n        if (submit) submit.disabled = true;\n\n        try {\n          const klaviyoResult = await subscribeEmailWithKlaviyo({\n            email: submittedEmail,\n            source: \"homepage_popup\"\n          });\n          if (!klaviyoResult?.ok) throw new Error(klaviyoResult?.error || \"Homepage signup submit failed\");\n          showSuccessState(submittedEmail);\n        } catch (submitError) {\n          console.error(submitError);\n          showErrorState();\n        }\n      });\n    }\n\n    if (homeSignupJustSubmitted || homeSignupReturnedWithPendingEmail || formState?.dataset.homeSignupState === \"success\") {\n      showSuccessState(readPendingEmail());\n      cleanHomeSignupRedirectUrl();\n      openModal({ force: true });\n      return;\n    }\n\n    if (!shouldSuppress()) {\n      const remainingDelay = Math.max(0, delay - elapsed);\n      timer = window.setTimeout(openModal, remainingDelay);\n    }\n\n    window.addEventListener(\"beforeunload\", () => {\n      if (timer) window.clearTimeout(timer);\n    });\n  };\n\n  const bindHomeSignupTriggers = () => {\n    if (document.documentElement.dataset.homeSignupTriggersBound === \"true\") return;\n    document.documentElement.dataset.homeSignupTriggersBound = \"true\";\n\n    document.addEventListener(\"click\", (event) => {\n      const trigger = event.target.closest(SELECTORS.homeSignupTrigger);\n      if (!trigger) return;\n\n      const modal = document.querySelector(SELECTORS.homeSignupModal);\n      if (!modal) return;\n\n      event.preventDefault();\n      bindHomeSignupModal();\n      modal.dispatchEvent(new CustomEvent(\"refi:open-home-signup\", {\n        detail: {\n          source: trigger.closest(\"[data-cart-benefits]\") ? \"cart\" : \"default\"\n        }\n      }));\n    });\n  };\n\n  const scheduleHomeSignupModalBinding = () => {\n    const modal = document.querySelector(SELECTORS.homeSignupModal);\n    if (!modal) return;\n    if (modal.dataset.modalBindingScheduled === \"true\") return;\n    modal.dataset.modalBindingScheduled = \"true\";\n\n    const startedAt =\n      typeof window.performance?.now === \"function\" ? window.performance.now() : Date.now();\n    let fallbackTimer = null;\n\n    const getElapsed = () =>\n      typeof window.performance?.now === \"function\" ? window.performance.now() - startedAt : Date.now() - startedAt;\n\n    const cleanup = () => {\n      window.removeEventListener(\"scroll\", handleTrigger);\n      document.removeEventListener(\"pointerdown\", handleTrigger);\n      document.removeEventListener(\"touchstart\", handleTrigger);\n      document.removeEventListener(\"keydown\", handleKeydown);\n      if (fallbackTimer) {\n        window.clearTimeout(fallbackTimer);\n        fallbackTimer = null;\n      }\n    };\n\n    const triggerBind = () => {\n      cleanup();\n      bindHomeSignupModal({ elapsed: getElapsed() });\n    };\n\n    const handleTrigger = () => {\n      triggerBind();\n    };\n\n    const handleKeydown = (event) => {\n      if (event.metaKey || event.ctrlKey || event.altKey) return;\n      if (event.key === \"Shift\" || event.key === \"Tab\") return;\n      triggerBind();\n    };\n\n    window.addEventListener(\"scroll\", handleTrigger, { passive: true });\n    document.addEventListener(\"pointerdown\", handleTrigger, { passive: true });\n    document.addEventListener(\"touchstart\", handleTrigger, { passive: true });\n    document.addEventListener(\"keydown\", handleKeydown);\n    fallbackTimer = window.setTimeout(triggerBind, 10000);\n  };\n\n  const bindFooterNewsletter = () => {\n    const newsletter = document.querySelector(SELECTORS.footerNewsletter);\n    const form = newsletter?.querySelector(SELECTORS.footerNewsletterForm);\n    if (!newsletter || !form) return;\n    if (newsletter.dataset.newsletterBound === \"true\") return;\n    newsletter.dataset.newsletterBound = \"true\";\n\n    const searchParams = new URLSearchParams(window.location.search);\n    const isFooterFlow = searchParams.get(\"newsletter\") === \"footer\";\n    const isFooterSuccess = isFooterFlow && searchParams.get(\"customer_posted\") === \"true\";\n    const feedback = newsletter.querySelector(\"[data-footer-newsletter-feedback]\");\n    const error = newsletter.querySelector(\"[data-footer-newsletter-error]\");\n    const stateMarker = form.querySelector(\"[data-footer-newsletter-state]\");\n    const submit = form.querySelector('button[type=\"submit\"]');\n    let feedbackTimer = null;\n\n    const clearFeedbackTimer = () => {\n      if (!feedbackTimer) return;\n      window.clearTimeout(feedbackTimer);\n      feedbackTimer = null;\n    };\n\n    const hideFeedback = () => {\n      newsletter.classList.remove(\"is-feedback-visible\");\n      clearFeedbackTimer();\n      window.setTimeout(() => {\n        if (feedback) feedback.hidden = true;\n      }, 520);\n    };\n\n    const showFeedback = (submittedEmail = \"\") => {\n      clearFeedbackTimer();\n      if (error) error.hidden = true;\n      if (feedback) feedback.hidden = false;\n      newsletter.classList.remove(\"is-submitting\");\n      if (submit) submit.disabled = false;\n      newsletter.classList.add(\"is-feedback-visible\");\n      window.localStorage.setItem(\"refi-home-signup-subscribed\", \"true\");\n      rememberKnownEmail(submittedEmail);\n      form.reset();\n      feedbackTimer = window.setTimeout(hideFeedback, 1900);\n    };\n\n    const showError = (message) => {\n      newsletter.classList.remove(\"is-submitting\");\n      if (submit) submit.disabled = false;\n      newsletter.classList.remove(\"is-feedback-visible\");\n      if (feedback) feedback.hidden = true;\n      if (error) {\n        error.textContent = message || \"We couldn\u2019t sign you up just yet. Please try again.\";\n        error.hidden = false;\n      }\n    };\n\n    if (submit) {\n      form.addEventListener(\"submit\", async (event) => {\n        event.preventDefault();\n        newsletter.classList.add(\"is-submitting\");\n        submit.disabled = true;\n        if (error) error.hidden = true;\n        const submittedEmail = normalizeKnownEmail(new FormData(form).get(\"contact[email]\"));\n        if (!submittedEmail) {\n          showError(\"Please enter a valid email address.\");\n          return;\n        }\n\n        try {\n          const klaviyoResult = await subscribeEmailWithKlaviyo({\n            email: submittedEmail,\n            source: \"footer_newsletter\"\n          });\n          if (!klaviyoResult?.ok) throw new Error(klaviyoResult?.error || \"Footer newsletter submit failed\");\n          showFeedback(submittedEmail);\n        } catch (submitError) {\n          console.error(submitError);\n          showError();\n        }\n      });\n    }\n\n    if (isFooterSuccess || stateMarker?.dataset.footerNewsletterState === \"success\") {\n      window.localStorage.setItem(\"refi-home-signup-subscribed\", \"true\");\n      showFeedback();\n      if (isFooterSuccess && window.history && window.history.replaceState) {\n        const cleanedParams = new URLSearchParams(window.location.search);\n        cleanedParams.delete(\"newsletter\");\n        cleanedParams.delete(\"customer_posted\");\n        const cleanedUrl = `${window.location.pathname}${cleanedParams.toString() ? `?${cleanedParams.toString()}` : \"\"}${window.location.hash}`;\n        window.history.replaceState({}, \"\", cleanedUrl);\n      }\n      return;\n    }\n\n    if (stateMarker?.dataset.footerNewsletterState === \"error\") {\n      showError(error?.textContent?.trim());\n      if (isFooterFlow && window.history && window.history.replaceState) {\n        const cleanedParams = new URLSearchParams(window.location.search);\n        cleanedParams.delete(\"newsletter\");\n        const cleanedUrl = `${window.location.pathname}${cleanedParams.toString() ? `?${cleanedParams.toString()}` : \"\"}${window.location.hash}`;\n        window.history.replaceState({}, \"\", cleanedUrl);\n      }\n    }\n  };\n\n  const bindHeaderNewsletter = () => {\n    const newsletter = document.querySelector(SELECTORS.headerNewsletter);\n    const form = newsletter?.querySelector(SELECTORS.headerNewsletterForm);\n    if (!newsletter || !form) return;\n    if (newsletter.dataset.newsletterBound === \"true\") return;\n    newsletter.dataset.newsletterBound = \"true\";\n\n    const searchParams = new URLSearchParams(window.location.search);\n    const isHeaderFlow = searchParams.get(\"newsletter\") === \"header-shop\";\n    const isHeaderSuccess = isHeaderFlow && searchParams.get(\"customer_posted\") === \"true\";\n    const feedback = newsletter.querySelector(\"[data-header-newsletter-feedback]\");\n    const error = newsletter.querySelector(\"[data-header-newsletter-error]\");\n    const stateMarker = form.querySelector(\"[data-header-newsletter-state]\");\n    const submit = form.querySelector('button[type=\"submit\"]');\n    let feedbackTimer = null;\n\n    const clearFeedbackTimer = () => {\n      if (!feedbackTimer) return;\n      window.clearTimeout(feedbackTimer);\n      feedbackTimer = null;\n    };\n\n    const hideFeedback = () => {\n      newsletter.classList.remove(\"is-feedback-visible\");\n      clearFeedbackTimer();\n      window.setTimeout(() => {\n        if (feedback) feedback.hidden = true;\n      }, 520);\n    };\n\n    const showFeedback = (submittedEmail = \"\") => {\n      clearFeedbackTimer();\n      if (error) error.hidden = true;\n      if (feedback) feedback.hidden = false;\n      newsletter.classList.remove(\"is-submitting\");\n      if (submit) submit.disabled = false;\n      newsletter.classList.add(\"is-feedback-visible\");\n      window.localStorage.setItem(\"refi-home-signup-subscribed\", \"true\");\n      rememberKnownEmail(submittedEmail);\n      form.reset();\n      feedbackTimer = window.setTimeout(hideFeedback, 1900);\n    };\n\n    const showError = (message) => {\n      newsletter.classList.remove(\"is-submitting\");\n      if (submit) submit.disabled = false;\n      newsletter.classList.remove(\"is-feedback-visible\");\n      if (feedback) feedback.hidden = true;\n      if (error) {\n        error.textContent = message || \"We couldn\u2019t sign you up just yet. Please try again.\";\n        error.hidden = false;\n      }\n    };\n\n    if (submit) {\n      form.addEventListener(\"submit\", async (event) => {\n        event.preventDefault();\n        newsletter.classList.add(\"is-submitting\");\n        submit.disabled = true;\n        if (error) error.hidden = true;\n        const submittedEmail = normalizeKnownEmail(new FormData(form).get(\"contact[email]\"));\n        if (!submittedEmail) {\n          showError(\"Please enter a valid email address.\");\n          return;\n        }\n\n        try {\n          const klaviyoResult = await subscribeEmailWithKlaviyo({\n            email: submittedEmail,\n            source: \"header_newsletter\"\n          });\n          if (!klaviyoResult?.ok) throw new Error(klaviyoResult?.error || \"Header newsletter submit failed\");\n          showFeedback(submittedEmail);\n        } catch (submitError) {\n          console.error(submitError);\n          showError();\n        }\n      });\n    }\n\n    if (isHeaderSuccess || stateMarker?.dataset.headerNewsletterState === \"success\") {\n      window.localStorage.setItem(\"refi-home-signup-subscribed\", \"true\");\n      showFeedback();\n      if (isHeaderSuccess && window.history && window.history.replaceState) {\n        const cleanedParams = new URLSearchParams(window.location.search);\n        cleanedParams.delete(\"newsletter\");\n        cleanedParams.delete(\"customer_posted\");\n        const cleanedUrl = `${window.location.pathname}${cleanedParams.toString() ? `?${cleanedParams.toString()}` : \"\"}${window.location.hash}`;\n        window.history.replaceState({}, \"\", cleanedUrl);\n      }\n      return;\n    }\n\n    if (stateMarker?.dataset.headerNewsletterState === \"error\") {\n      showError(error?.textContent?.trim());\n      if (isHeaderFlow && window.history && window.history.replaceState) {\n        const cleanedParams = new URLSearchParams(window.location.search);\n        cleanedParams.delete(\"newsletter\");\n        const cleanedUrl = `${window.location.pathname}${cleanedParams.toString() ? `?${cleanedParams.toString()}` : \"\"}${window.location.hash}`;\n        window.history.replaceState({}, \"\", cleanedUrl);\n      }\n    }\n  };\n\n  const bindBloopMobileClose = () => {\n    const CLOSE_BUTTON_CLASS = \"refi-bloop-mobile-close\";\n    const OVERLAY_CLASS = \"refi-bloop-dismiss-overlay\";\n    const OPEN_CLASS = \"refi-bloop-open\";\n\n    let observedContainer = null;\n    let syncFrame = 0;\n    const getBloopContainer = () => observedContainer?.isConnected\n      ? observedContainer\n      : document.querySelector(\"#bss-bloop-container\");\n    const isBloopOpen = (container) =>\n      Boolean(container?.classList.contains(\"opened\") || container?.querySelector(\"#bss-bloop-main.bss__bloop--popup-open\"));\n\n    const syncBloopState = () => {\n      const open = isBloopOpen(getBloopContainer());\n      if (document.body.classList.contains(OPEN_CLASS) !== open) {\n        document.body.classList.toggle(OPEN_CLASS, open);\n      }\n    };\n\n    const clickBloopClose = (container) => {\n      const nativeClose = container.querySelector(\n        \".bss__bloop--action-close, [aria-label='Close'], [aria-label='close'], [aria-label*='Close'], [aria-label*='close']\"\n      );\n\n      if (nativeClose instanceof HTMLElement && !nativeClose.classList.contains(CLOSE_BUTTON_CLASS)) {\n        nativeClose.click();\n        window.setTimeout(syncBloopState, 80);\n        return;\n      }\n\n      const toggle = container.querySelector(\n        \".bss__bloop--widget-wrapper.bss__bloop--widget-open, #bss-bloop-button, .bss__bloop--widget-wrapper\"\n      );\n      if (toggle instanceof HTMLElement) toggle.click();\n      window.setTimeout(syncBloopState, 80);\n    };\n\n    const ensureCloseControls = () => {\n      const container = getBloopContainer();\n      if (!document.querySelector(`.${OVERLAY_CLASS}`)) {\n        const overlay = document.createElement(\"button\");\n        overlay.className = OVERLAY_CLASS;\n        overlay.type = \"button\";\n        overlay.setAttribute(\"aria-label\", \"Close referral popup\");\n        overlay.addEventListener(\"click\", () => {\n          const currentContainer = getBloopContainer();\n          if (currentContainer) clickBloopClose(currentContainer);\n        });\n        document.body.appendChild(overlay);\n      }\n\n      if (!container || container.querySelector(`.${CLOSE_BUTTON_CLASS}`)) return;\n\n      const button = document.createElement(\"button\");\n      button.className = CLOSE_BUTTON_CLASS;\n      button.type = \"button\";\n      button.setAttribute(\"aria-label\", \"Close referral popup\");\n      button.textContent = \"X\";\n      button.addEventListener(\"click\", () => clickBloopClose(container));\n      container.appendChild(button);\n    };\n\n    ensureCloseControls();\n    syncBloopState();\n\n    const containerObserver = new MutationObserver(() => {\n      if (syncFrame) return;\n      syncFrame = window.requestAnimationFrame(() => {\n        syncFrame = 0;\n        ensureCloseControls();\n        syncBloopState();\n      });\n    });\n\n    const observeBloopContainer = () => {\n      const container = getBloopContainer();\n      if (container === observedContainer) return;\n      containerObserver.disconnect();\n      observedContainer = container;\n      if (container) {\n        containerObserver.observe(container, {\n          attributes: true,\n          attributeFilter: [\"class\"],\n          childList: true,\n          subtree: true\n        });\n      }\n      ensureCloseControls();\n      syncBloopState();\n    };\n\n    observeBloopContainer();\n    // Container discovery/replacement only; unrelated class/style changes are ignored.\n    const lifecycleObserver = new MutationObserver(() => {\n      if (observedContainer?.isConnected) return;\n      observeBloopContainer();\n    });\n    lifecycleObserver.observe(document.body, {\n      childList: true,\n      subtree: true\n    });\n  };\n\n  const bindBloopMobileVisibility = () => {\n    const READY_CLASS = \"refi-bloop-mobile-ready\";\n    const mobileQuery = window.matchMedia(\"(max-width: 720px)\");\n    const body = document.body;\n    const isDelayedPage =\n      body.classList.contains(\"template-index\") ||\n      body.classList.contains(\"template-collection\") ||\n      body.classList.contains(\"template-product\");\n    const delay = body.classList.contains(\"template-product\") ? 12000 : 18000;\n    let timer = 0;\n    let delayCompleted = !isDelayedPage;\n\n    const clearTimer = () => {\n      if (!timer) return;\n      window.clearTimeout(timer);\n      timer = 0;\n    };\n\n    const reveal = () => {\n      delayCompleted = true;\n      timer = 0;\n      body.classList.add(READY_CLASS);\n    };\n\n    const sync = () => {\n      clearTimer();\n\n      if (!mobileQuery.matches || delayCompleted) {\n        body.classList.add(READY_CLASS);\n        return;\n      }\n\n      body.classList.remove(READY_CLASS);\n      timer = window.setTimeout(reveal, delay);\n    };\n\n    sync();\n    mobileQuery.addEventListener?.(\"change\", sync);\n  };\n\n  const bindOkendoReviewPopup = () => {\n    const REVIEW_LINK_SELECTOR = \".product-reviews-shell a[href*='okendo.reviews']\";\n\n    document.addEventListener(\"click\", (event) => {\n      if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n        return;\n      }\n\n      const link = event.target instanceof Element ? event.target.closest(REVIEW_LINK_SELECTOR) : null;\n      if (!(link instanceof HTMLAnchorElement) || !link.href) return;\n\n      event.preventDefault();\n\n      const screenWidth = window.screen?.availWidth || window.innerWidth || 560;\n      const screenHeight = window.screen?.availHeight || window.innerHeight || 720;\n      const popupWidth = Math.max(360, Math.min(560, screenWidth - 48));\n      const popupHeight = Math.max(520, Math.min(720, screenHeight - 72));\n      const screenLeft = window.screen?.availLeft || window.screenX || 0;\n      const screenTop = window.screen?.availTop || window.screenY || 0;\n      const popupLeft = Math.max(0, Math.round(screenLeft + (screenWidth - popupWidth) / 2));\n      const popupTop = Math.max(0, Math.round(screenTop + (screenHeight - popupHeight) / 2));\n      const popupFeatures = [\n        `width=${Math.round(popupWidth)}`,\n        `height=${Math.round(popupHeight)}`,\n        `left=${popupLeft}`,\n        `top=${popupTop}`,\n        \"resizable=yes\",\n        \"scrollbars=yes\",\n        \"menubar=no\",\n        \"toolbar=no\",\n        \"status=no\"\n      ].join(\",\");\n\n      const popup = window.open(link.href, \"refimiroOkendoReview\", popupFeatures);\n      if (popup) {\n        popup.opener = null;\n        popup.focus();\n        return;\n      }\n\n      window.location.assign(link.href);\n    });\n  };\n\n  document.addEventListener(\"DOMContentLoaded\", () => {\n    bindHeaderShell();\n    bindMobileHeroLinks();\n    bindDrawers();\n    bindMegaMenus();\n    bindCarousels();\n    bindJourney();\n    bindPointerRevealButtons();\n    bindCartForms();\n    bindProductPreorder();\n    updateDispatchMessages();\n    window.setInterval(() => {\n      if (!document.hidden) updateDispatchMessages();\n    }, 10000);\n    document.addEventListener(\"visibilitychange\", () => {\n      if (!document.hidden) updateDispatchMessages();\n    });\n    window.addEventListener(\"pageshow\", () => updateDispatchMessages());\n    bindProductBrowseBack();\n    bindProductMetaSticky();\n    bindProductGallery();\n    bindProductWearWithRails();\n    preparePdpInitialLoadingZone();\n    bindReveal();\n    bindDeferredImages();\n    bindPdpScrollDeferredImages();\n    bindFaqSearch();\n    bindPendingQuizResultSync();\n    bindCartSnapshotSync();\n    bindBloopMobileVisibility();\n    bindBloopMobileClose();\n    bindOkendoReviewPopup();\n    bindHomeSignupTriggers();\n\n    const footerNewsletterShell = document.querySelector(SELECTORS.footerNewsletter);\n    const homeSignupModal = document.querySelector(SELECTORS.homeSignupModal);\n    const searchParams = new URLSearchParams(window.location.search);\n    const hasHomeSignupRedirectState =\n      searchParams.get(\"customer_posted\") === \"true\" &&\n      searchParams.get(\"newsletter\") === \"home-popup\";\n    const isHomeSignupSessionEntry = homeSignupModal ? claimHomeSignupSessionEntry() : false;\n    const hasNewsletterRedirectState =\n      searchParams.get(\"customer_posted\") === \"true\" &&\n      (searchParams.get(\"newsletter\") === \"footer\" || searchParams.get(\"newsletter\") === \"header-shop\");\n\n    if (homeSignupModal) {\n      if (hasHomeSignupRedirectState) {\n        bindHomeSignupModal();\n      } else if (isHomeSignupSessionEntry) {\n        scheduleHomeSignupModalBinding();\n      }\n    }\n\n    if (hasNewsletterRedirectState) {\n      requestIdle(() => {\n        bindHeaderNewsletter();\n        bindFooterNewsletter();\n      }, 900);\n    } else {\n      footerNewsletterShell?.addEventListener(\"focusin\", bindFooterNewsletter, { once: true });\n      footerNewsletterShell?.addEventListener(\"pointerenter\", bindFooterNewsletter, { once: true });\n      footerNewsletterShell?.addEventListener(\"touchstart\", bindFooterNewsletter, { once: true, passive: true });\n      footerNewsletterShell?.addEventListener(\"submit\", bindFooterNewsletter, { once: true });\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": ["error"]
}
