{
  "version": 3,
  "sources": ["/cdn/shop/t/51/assets/hercxles-premium.js?hcx=20260605-stock-receive-date-v1"],
  "sourcesContent": ["(() => {\n  const html = document.documentElement;\n  const body = document.body;\n  const header = document.querySelector(\".section-header\");\n  const isHome = body?.classList.contains(\"template-index\");\n  const isCollection = body?.classList.contains(\"template-collection\");\n  html.classList.add(\"hcx-launch-unlocked\");\n  html.classList.remove(\"hcx-launch-locked\");\n  try {\n    window.localStorage.setItem(\"hcx:launch-gate:v1\", \"1\");\n  } catch (error) {\n    window.HCXLaunchGateStorageError = false;\n  }\n  let lastSyncedScrollY = window.scrollY;\n  const hcxTransparentImage =\n    \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201%201%22%2F%3E\";\n  const hcxReturnLookupLocalFallbackOrigin = \"http://127.0.0.1:8787\";\n  const hcxOrderLookupBackendMessage =\n    \"Order lookup is unavailable right now. Please email enquiries@hercxles.co.uk with your order number for further assistance.\";\n  let hcxLazyImageObserver = null;\n  let hcxStableMobileViewportWidth = 0;\n  let hcxMobileMediaLockFrame = 0;\n  let hcxMobileMediaMutationObserver = null;\n  const hcxStableMobileViewportMedia = window.matchMedia(\"(max-width: 749px)\");\n  const hcxMobileMediaLockSelectors = {\n    hero: [\n      \".section-hcx-hero\",\n      \".hcx-hero\",\n      \".hcx-hero__media\",\n      \".hcx-hero__media img\",\n      \".hcx-hero__media video\",\n      \".hcx-hero__asset\",\n      \".hcx-product-slideshow\",\n      \".hcx-product-slideshow__track\",\n      \".hcx-product-slide\",\n      \".hcx-product-slide img\",\n      \".slideshow\",\n      \".slideshow__slide\",\n      \".slideshow__media\",\n      \".slideshow__media.banner__media\",\n      \".slideshow__media img\",\n    ],\n    collection: [\n      \".hcx-collection-hero--cinematic\",\n      \".hcx-collection-hero--cinematic .collection-hero__inner\",\n      \".hcx-collection-hero--cinematic .hcx-collection-hero__media\",\n      \".hcx-collection-hero--cinematic .hcx-collection-hero__image\",\n    ],\n    banner: [\n      \"#MainContent [class*='banner']\",\n      \"#MainContent [class*='banner'] picture\",\n      \"#MainContent [class*='banner'] img\",\n      \"#MainContent [class*='banner'] svg\",\n      \"#MainContent [class*='image-banner']\",\n      \"#MainContent [class*='hero-banner']\",\n      \"#MainContent [class*='__banner']\",\n      \".banner\",\n      \".banner__content\",\n      \".banner__media\",\n      \".banner__media > img\",\n      \".banner__media > svg\",\n      \".email-signup-banner\",\n      \".email-signup-banner .banner__media\",\n      \".email-signup-banner .banner__media img\",\n      \".image-with-text__media\",\n      \".image-with-text__media img\",\n      \".hcx-editorial__media\",\n      \".hcx-editorial__media img\",\n      \".hcx-editorial__media svg\",\n      \".hcx-category__placeholder-slide\",\n      \".hcx-category__placeholder-slide img\",\n      \".hcx-category__placeholder-content\",\n      \".hcx-rep-drop__media\",\n      \".hcx-rep-drop__media picture\",\n      \".hcx-rep-drop__media img\",\n      \".hcx-rep-drop__media svg\",\n      \".hcx-rep-drop__content\",\n      \".hcx-conversion-story__hero\",\n      \".hcx-conversion-story__hero picture\",\n      \".hcx-conversion-story__hero img\",\n      \".hcx-conversion-story__hero svg\",\n      \".hcx-loyalty-program__hero\",\n      \".hcx-loyalty-profile--hero\",\n      \".video-section__media\",\n      \".video-section .media\",\n      \".deferred-media\",\n      \".deferred-media img\",\n    ],\n    cardBanner: [\n      \".hcx-category-card\",\n      \".hcx-category-card img\",\n      \".hcx-category-card svg\",\n      \".hcx-rep-tile\",\n      \".hcx-rep-tile img\",\n      \".hcx-rep-tile svg\",\n    ],\n    product: [\n      \".template-product .hcx-product-carousel\",\n      \".template-product .hcx-product-carousel .slider-mobile-gutter:not(.thumbnail-slider)\",\n      \".template-product .hcx-product-carousel .product__media-list\",\n      \".template-product .hcx-product-carousel .product__media-item\",\n      \".template-product .hcx-product-carousel .product-media-container\",\n      \".template-product .hcx-product-carousel .product-media-container.gradient\",\n      \".template-product .hcx-product-carousel .global-media-settings\",\n      \".template-product .hcx-product-carousel .product__modal-opener\",\n      \".template-product .hcx-product-carousel .product__media\",\n      \".template-product .hcx-product-carousel .media\",\n      \".template-product .hcx-product-carousel img\",\n    ],\n  };\n\n  const isHcxLocalPreviewHost = () => {\n    try {\n      return [\"localhost\", \"127.0.0.1\", \"::1\"].includes(window.location.hostname);\n    } catch (_) {\n      return false;\n    }\n  };\n\n  const getHcxReturnLookupUrls = (lookupUrl = \"\") => {\n    const primaryUrl = String(lookupUrl || \"\").trim();\n    if (!primaryUrl) return [];\n\n    const urls = [primaryUrl];\n    if (isHcxLocalPreviewHost()) {\n      try {\n        const parsedUrl = new URL(primaryUrl, window.location.origin);\n        if (\n          parsedUrl.pathname === \"/apps/hercxles-returns/lookup\" ||\n          parsedUrl.pathname === \"/apps/hercxles-returns/request\" ||\n          parsedUrl.pathname === \"/lookup\" ||\n          parsedUrl.pathname === \"/request\"\n        ) {\n          const localUrl = new URL(parsedUrl.pathname, hcxReturnLookupLocalFallbackOrigin);\n          localUrl.search = parsedUrl.search;\n          urls.push(localUrl.href);\n        }\n      } catch (_) {}\n    }\n\n    return [...new Set(urls)];\n  };\n\n  const isHcxSameOriginUrl = (url = \"\") => {\n    try {\n      return new URL(url, window.location.origin).origin === window.location.origin;\n    } catch (_) {\n      return false;\n    }\n  };\n\n  const fetchHcxOrderLookup = async (lookupUrl, body) => {\n    const urls = getHcxReturnLookupUrls(lookupUrl);\n    let lastResult = null;\n    let lastError = null;\n\n    for (const url of urls) {\n      try {\n        const response = await fetch(url, {\n          method: \"POST\",\n          headers: {\n            \"Accept\": \"application/json\",\n            \"Content-Type\": \"application/json\"\n          },\n          body: JSON.stringify(body)\n        });\n        const payload = await response.json().catch(() => ({}));\n        lastResult = { payload, response, url };\n\n        if (!(isHcxLocalPreviewHost() && response.status === 404 && isHcxSameOriginUrl(url))) {\n          return lastResult;\n        }\n      } catch (error) {\n        lastError = error;\n      }\n    }\n\n    if (lastResult) return lastResult;\n    throw lastError || new Error(\"Order lookup request failed\");\n  };\n\n  const hcxOrderLookupErrorMessage = (payload = {}, status = 0, fallbackMessage = \"\") => {\n    const error = String(payload?.error || \"\").trim();\n    if (\n      status === 404 ||\n      status === 503 ||\n      error === \"shopify_admin_api_not_configured\" ||\n      error === \"invalid_app_proxy_signature\"\n    ) {\n      return hcxOrderLookupBackendMessage;\n    }\n\n    if (status === 429 || error === \"too_many_lookup_attempts\") {\n      return \"Too many lookup attempts. Please wait a few minutes and try again.\";\n    }\n\n    return fallbackMessage || \"Order lookup is unavailable right now. Please try again shortly.\";\n  };\n\n  const syncHcxStableMobileViewport = ({ force = false } = {}) => {\n    const isMobile = hcxStableMobileViewportMedia.matches;\n\n    if (!isMobile) {\n      hcxStableMobileViewportWidth = 0;\n      html.style.removeProperty(\"--hcx-mobile-stable-vh\");\n      html.style.removeProperty(\"--hcx-mobile-hero-height\");\n      html.style.removeProperty(\"--hcx-mobile-product-media-height\");\n      html.style.removeProperty(\"--hcx-mobile-product-stage-height\");\n      html.style.removeProperty(\"--hcx-product-carousel-stage-height\");\n      html.style.removeProperty(\"--hcx-mobile-collection-hero-height\");\n      html.style.removeProperty(\"--hcx-mobile-banner-height\");\n      html.style.removeProperty(\"--hcx-mobile-launchpad-height\");\n      html.style.removeProperty(\"--hcx-mobile-card-banner-height\");\n      unlockHcxMobileMediaHeights();\n      return;\n    }\n\n    const width = Math.round(window.innerWidth || document.documentElement.clientWidth || 0);\n    const existingHeight = parseInt(html.style.getPropertyValue(\"--hcx-mobile-stable-vh\"), 10);\n\n    if (!force && existingHeight > 0 && hcxStableMobileViewportWidth > 0 && Math.abs(width - hcxStableMobileViewportWidth) < 24) {\n      html.style.setProperty(\"--viewport-height\", `${existingHeight}px`);\n      requestHcxMobileMediaLock();\n      return;\n    }\n\n    const stableHeight = Math.round(Math.min(860, Math.max(680, width * 2.16 || 680)));\n    const productMediaHeight = Math.round(Math.min(520, Math.max(420, width * 1.23 || 480)));\n    const productStageHeight = getHcxMobileProductStageHeight(productMediaHeight);\n    const collectionHeroHeight = Math.round(Math.min(350, Math.max(260, width * 0.88 || 320)));\n    const bannerHeight = Math.round(Math.min(580, Math.max(420, width * 1.32 || 520)));\n    const launchpadHeight = Math.round(Math.min(960, Math.max(880, width * 2.3 || 900)));\n    const cardBannerHeight = Math.round(Math.min(480, Math.max(320, width * 1.05 || 400)));\n\n    hcxStableMobileViewportWidth = width;\n    html.style.setProperty(\"--hcx-mobile-stable-vh\", `${stableHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-hero-height\", `${stableHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-product-media-height\", `${productMediaHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-product-stage-height\", `${productStageHeight}px`);\n    html.style.setProperty(\"--hcx-product-carousel-stage-height\", `${productStageHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-collection-hero-height\", `${collectionHeroHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-banner-height\", `${bannerHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-launchpad-height\", `${launchpadHeight}px`);\n    html.style.setProperty(\"--hcx-mobile-card-banner-height\", `${cardBannerHeight}px`);\n    html.style.setProperty(\"--viewport-height\", `${stableHeight}px`);\n    requestHcxMobileMediaLock();\n  };\n\n  const initHeaderAccountPointsGuard = () => {\n    const headerIcons = document.querySelector(\".section-header .header__icons\");\n    if (!headerIcons || headerIcons.dataset.hcxAccountPointsGuard === \"true\") return;\n\n    headerIcons.dataset.hcxAccountPointsGuard = \"true\";\n\n    const injectedPointsSelector = [\n      \".shopify-app-block\",\n      \".shopify-block\",\n      \"[class*='avada' i]\",\n      \"[id*='avada' i]\",\n      \"[class*='joy' i]\",\n      \"[id*='joy' i]\",\n      \"[class*='loyalty' i]\",\n      \"[id*='loyalty' i]\",\n      \"[class*='points' i]\",\n      \"[id*='points' i]\",\n      \"[class*='balance' i]\",\n      \"[id*='balance' i]\",\n      \"[data-hcx-header-points]\",\n      \"[data-hcx-account-points]\",\n    ].join(\",\");\n    const protectedHeaderSelector = [\n      \".hcx-header-utility-link\",\n      \".hcx-header-saves-link\",\n      \".header__search\",\n      \".desktop-localization-wrapper\",\n      \".header__icon--account\",\n      \".header__icon--cart\",\n      \"#cart-icon-bubble\",\n    ].join(\",\");\n    const lonePointsTextPattern = /^(?:0|[\\d,]+\\s*(?:pts?|points?)?)$/i;\n    const accountPointsTextPattern = /\\b(?:gold|pts?|points?)\\b/i;\n\n    const hideNode = (node) => {\n      if (!node || node.nodeType !== Node.ELEMENT_NODE) return;\n      if (node.matches(protectedHeaderSelector)) return;\n      node.hidden = true;\n      node.setAttribute(\"aria-hidden\", \"true\");\n      node.style.setProperty(\"display\", \"none\", \"important\");\n    };\n\n    const hideInjectedDescendant = (node) => {\n      if (!node || node.nodeType !== Node.ELEMENT_NODE) return;\n      if (node.matches(\"svg, path, circle, rect, line, polyline, .svg-wrapper, account-icon, shop-user-avatar, .visually-hidden\")) return;\n      node.hidden = true;\n      node.setAttribute(\"aria-hidden\", \"true\");\n      node.style.setProperty(\"display\", \"none\", \"important\");\n    };\n\n    const scrubInlinePointText = (root) => {\n      if (!root) return;\n      root.childNodes.forEach((node) => {\n        if (node.nodeType === Node.TEXT_NODE && accountPointsTextPattern.test(node.textContent || \"\")) {\n          node.textContent = \"\";\n        }\n      });\n    };\n\n    const scrubHeaderChildren = () => {\n      Array.from(headerIcons.children).forEach((child) => {\n        if (child.matches(protectedHeaderSelector)) return;\n        const text = child.textContent.trim();\n        if (child.matches(injectedPointsSelector) || lonePointsTextPattern.test(text) || accountPointsTextPattern.test(text)) {\n          hideNode(child);\n        }\n      });\n    };\n\n    const scrubHeaderZeroBadges = () => {\n      headerIcons.querySelectorAll(\"*\").forEach((node) => {\n        if (node.matches(\"svg, path, circle, rect, line, polyline, .svg-wrapper, account-icon, shop-user-avatar, .visually-hidden\")) return;\n        if (node.textContent.trim() !== \"0\") return;\n\n        const badge = node.closest(\".cart-count-bubble, .hcx-header-saves-link__count\") || node;\n        if (badge.matches(\".header__icon--cart, #cart-icon-bubble, .header__icon--account\")) return;\n        hideInjectedDescendant(badge);\n      });\n\n      const walker = document.createTreeWalker(headerIcons, NodeFilter.SHOW_TEXT);\n      const textNodes = [];\n      while (walker.nextNode()) textNodes.push(walker.currentNode);\n      textNodes.forEach((node) => {\n        if (node.textContent.trim() === \"0\") node.textContent = \"\";\n      });\n    };\n\n    const scrubAccountDescendants = (account) => {\n      scrubInlinePointText(account);\n      account.querySelectorAll(injectedPointsSelector).forEach(hideInjectedDescendant);\n      account.querySelectorAll(\"*\").forEach((node) => {\n        if (node.matches(\"svg, path, circle, rect, line, polyline, .visually-hidden\")) return;\n        if (node.matches(\".svg-wrapper, account-icon, shop-user-avatar\")) {\n          scrubInlinePointText(node);\n          return;\n        }\n        const text = node.textContent.trim();\n        if (lonePointsTextPattern.test(text) || accountPointsTextPattern.test(text)) hideInjectedDescendant(node);\n      });\n    };\n\n    const scrubSiblingRun = (startNode, direction) => {\n      let sibling = startNode;\n      while (sibling) {\n        if (sibling.nodeType === Node.TEXT_NODE && (lonePointsTextPattern.test(sibling.textContent.trim()) || accountPointsTextPattern.test(sibling.textContent || \"\"))) {\n          sibling.textContent = \"\";\n        } else if (sibling.nodeType === Node.ELEMENT_NODE) {\n          if (\n            direction === \"next\" &&\n            sibling.matches(\".header__icon--cart, #cart-icon-bubble\")\n          ) {\n            break;\n          }\n          if (\n            direction === \"previous\" &&\n            sibling.matches(\".header__search, .desktop-localization-wrapper, .hcx-header-saves-link\")\n          ) {\n            break;\n          }\n\n          const text = sibling.textContent.trim();\n          if (sibling.matches(injectedPointsSelector) || lonePointsTextPattern.test(text) || accountPointsTextPattern.test(text)) {\n            hideNode(sibling);\n          }\n        }\n        sibling = direction === \"next\" ? sibling.nextSibling : sibling.previousSibling;\n      }\n    };\n\n    const scrubAccount = () => {\n      const account = headerIcons.querySelector(\".header__icon--account\");\n      scrubHeaderChildren();\n      scrubHeaderZeroBadges();\n      if (!account) return;\n\n      account.childNodes.forEach((node) => {\n        if (node.nodeType === Node.TEXT_NODE && (lonePointsTextPattern.test(node.textContent.trim()) || accountPointsTextPattern.test(node.textContent || \"\"))) {\n          node.textContent = \"\";\n        }\n      });\n\n      scrubAccountDescendants(account);\n      scrubSiblingRun(account.previousSibling, \"previous\");\n      scrubSiblingRun(account.nextSibling, \"next\");\n    };\n\n    scrubAccount();\n\n    const observer = new MutationObserver(scrubAccount);\n    observer.observe(headerIcons, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n    });\n  };\n\n  function clearHcxMobileLockedHeight(element) {\n    if (!element) return;\n    element.removeAttribute(\"data-hcx-mobile-locked-height\");\n    element.style.removeProperty(\"height\");\n    element.style.removeProperty(\"min-height\");\n    element.style.removeProperty(\"max-height\");\n  }\n\n  function getHcxMobileProductStageHeight(height) {\n    const width = Math.round(window.innerWidth || document.documentElement.clientWidth || 390);\n    const railHeight = Math.min(66, Math.max(56, width * 0.1595 || 62));\n    return Math.round(Math.min(height, Math.max(320, height - railHeight - 24)));\n  }\n\n  function getHcxMobileLockedHeightForElement(element, height) {\n    const carousel = element?.closest?.(\".template-product .hcx-product-carousel\");\n    if (!carousel || element === carousel || element.matches?.(\".hcx-product-carousel\")) return height;\n    return getHcxMobileProductStageHeight(height);\n  }\n\n  function setHcxMobileLockedHeight(element, height) {\n    if (!element || height <= 0) return;\n    if (element.matches?.(\".thumbnail-slider\") || element.closest?.(\".thumbnail-slider\")) return;\n    if (isHcxSs26SlideElement(element)) {\n      releaseHcxSs26SlideElement(element);\n      return;\n    }\n    if (isHcxLaunchpadArtwork(element)) return;\n    if (isHcxHeroInteractiveContent(element)) return;\n\n    if (element.closest(\".hcx-info-page--returns\")) {\n      clearHcxMobileLockedHeight(element);\n      return;\n    }\n\n    const style = element.style;\n    const criticalValue = element.dataset.hcxCriticalMobileBannerFreeze;\n    if (criticalValue && /^[0-9.]+px$/.test(criticalValue)) {\n      element.dataset.hcxMobileLockedHeight = criticalValue;\n      style.setProperty(\"height\", criticalValue, \"important\");\n      style.setProperty(\"min-height\", criticalValue, \"important\");\n      style.setProperty(\"max-height\", criticalValue, \"important\");\n      return;\n    }\n\n    const value = `${getHcxMobileLockedHeightForElement(element, height)}px`;\n    const isAlreadyLocked =\n      element.dataset.hcxMobileLockedHeight === value &&\n      style.getPropertyValue(\"height\") === value &&\n      style.getPropertyPriority(\"height\") === \"important\" &&\n      style.getPropertyValue(\"min-height\") === value &&\n      style.getPropertyPriority(\"min-height\") === \"important\" &&\n      style.getPropertyValue(\"max-height\") === value &&\n      style.getPropertyPriority(\"max-height\") === \"important\";\n\n    if (isAlreadyLocked) return;\n\n    element.dataset.hcxMobileLockedHeight = value;\n    style.setProperty(\"height\", value, \"important\");\n    style.setProperty(\"min-height\", value, \"important\");\n    style.setProperty(\"max-height\", value, \"important\");\n  }\n\n  function isHcxLaunchpadArtwork(element) {\n    return element?.matches?.(\n      \"body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide img, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide img\"\n    );\n  }\n\n  function isHcxSs26SlideElement(element) {\n    return Boolean(\n      document.body?.classList?.contains(\"template-index\") &&\n        element?.closest?.(\n          \"[id$='__new_arrivals_slide'], [id*='__preseason_hoodies_slide'], [id$='__hercstudios_slide_20260903']\"\n        )\n    );\n  }\n\n  function releaseHcxSs26SlideElement(element) {\n    if (!element) return;\n    element.removeAttribute(\"data-hcx-mobile-locked-height\");\n    if (element.matches?.(\".hcx-category__placeholder-slide--image\")) {\n      element.style.setProperty(\"height\", \"auto\", \"important\");\n      element.style.setProperty(\"min-height\", \"0\", \"important\");\n      element.style.setProperty(\"max-height\", \"none\", \"important\");\n      return;\n    }\n    if (element.matches?.(\".hcx-category__placeholder-slide img\")) {\n      element.style.setProperty(\"height\", \"100%\", \"important\");\n      element.style.setProperty(\"min-height\", \"0\", \"important\");\n      element.style.setProperty(\"max-height\", \"none\", \"important\");\n      return;\n    }\n    clearHcxMobileLockedHeight(element);\n  }\n\n  function isHcxHeroInteractiveContent(element) {\n    return Boolean(\n      element?.matches?.(\n        \".hcx-hero__content, .hcx-hero__content-inner, .hcx-hero .hcx-actions, .hcx-hero .hcx-btn, .hcx-hero a, .hcx-hero button\"\n      ) || element?.closest?.(\".hcx-hero .hcx-actions\")\n    );\n  }\n\n  function releaseHcxHomepageHeroCta() {\n    document\n      .querySelectorAll(\"body.template-index #MainContent > .shopify-section:first-child .hcx-hero__content, body.template-index #MainContent > .shopify-section:first-child .hcx-hero__content-inner\")\n      .forEach((element) => {\n        element.removeAttribute(\"data-hcx-mobile-locked-height\");\n        element.style.removeProperty(\"height\");\n        element.style.removeProperty(\"min-height\");\n        element.style.removeProperty(\"max-height\");\n        element.style.setProperty(\"overflow\", \"visible\", \"important\");\n      });\n\n    document\n      .querySelectorAll(\"body.template-index #MainContent > .shopify-section:first-child .hcx-hero .hcx-actions\")\n      .forEach((actions) => {\n        actions.removeAttribute(\"data-hcx-mobile-locked-height\");\n        actions.style.setProperty(\"display\", \"flex\", \"important\");\n        actions.style.setProperty(\"justify-content\", \"center\", \"important\");\n        actions.style.setProperty(\"align-items\", \"center\", \"important\");\n        actions.style.setProperty(\"align-self\", \"center\", \"important\");\n        actions.style.setProperty(\"justify-self\", \"center\", \"important\");\n        actions.style.setProperty(\"width\", \"auto\", \"important\");\n        actions.style.setProperty(\"height\", \"auto\", \"important\");\n        actions.style.setProperty(\"min-height\", \"0\", \"important\");\n        actions.style.setProperty(\"max-height\", \"none\", \"important\");\n        actions.style.setProperty(\"overflow\", \"visible\", \"important\");\n      });\n\n    document\n      .querySelectorAll(\"body.template-index #MainContent > .shopify-section:first-child .hcx-hero .hcx-actions .hcx-btn\")\n      .forEach((button) => {\n        button.removeAttribute(\"data-hcx-mobile-locked-height\");\n        button.style.setProperty(\"display\", \"inline-flex\", \"important\");\n        button.style.setProperty(\"flex\", \"0 0 auto\", \"important\");\n        button.style.setProperty(\"align-self\", \"center\", \"important\");\n        button.style.setProperty(\"width\", \"auto\", \"important\");\n        button.style.setProperty(\"min-width\", \"11.8rem\", \"important\");\n        button.style.setProperty(\"max-width\", \"calc(100vw - 3.6rem)\", \"important\");\n        button.style.setProperty(\"height\", \"3.8rem\", \"important\");\n        button.style.setProperty(\"min-height\", \"3.8rem\", \"important\");\n        button.style.setProperty(\"max-height\", \"3.8rem\", \"important\");\n        button.style.setProperty(\"padding\", \"0 1.85rem\", \"important\");\n        button.style.setProperty(\"line-height\", \"1\", \"important\");\n        button.style.setProperty(\"-webkit-backdrop-filter\", \"none\", \"important\");\n        button.style.setProperty(\"backdrop-filter\", \"none\", \"important\");\n        button.style.setProperty(\"overflow\", \"hidden\", \"important\");\n      });\n  }\n\n  function unlockHcxMobileMediaHeights() {\n    document.querySelectorAll(\"[data-hcx-mobile-locked-height]\").forEach((element) => {\n      clearHcxMobileLockedHeight(element);\n    });\n    clearHcxLaunchpadArtwork();\n  }\n\n  function clearHcxLaunchpadArtwork() {\n    document\n      .querySelectorAll(\n        \"body.template-index [id$='__studios_slide'], body.template-index [id$='__lckd_in_slide'], body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide, body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide--image, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide--image, body.template-index [id$='__studios_slide'] .hcx-category__placeholder-content, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-content, body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide img, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide img\"\n      )\n      .forEach((element) => {\n        element.removeAttribute(\"data-hcx-mobile-locked-height\");\n        element.style.removeProperty(\"height\");\n        element.style.removeProperty(\"min-height\");\n        element.style.removeProperty(\"max-height\");\n        element.style.removeProperty(\"overflow\");\n      });\n\n    document\n      .querySelectorAll(\n        \"body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide img, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide img\"\n      )\n      .forEach((image) => {\n        image.style.removeProperty(\"position\");\n        image.style.removeProperty(\"top\");\n        image.style.removeProperty(\"right\");\n        image.style.removeProperty(\"bottom\");\n        image.style.removeProperty(\"left\");\n        image.style.removeProperty(\"width\");\n        image.style.removeProperty(\"object-fit\");\n        image.style.removeProperty(\"object-position\");\n        image.style.removeProperty(\"transform\");\n        image.style.removeProperty(\"scale\");\n      });\n  }\n\n  function lockHcxMobileMediaHeights() {\n    if (!hcxStableMobileViewportMedia.matches) {\n      unlockHcxMobileMediaHeights();\n      return;\n    }\n\n    const rootStyles = getComputedStyle(html);\n    const width = Math.round(window.innerWidth || document.documentElement.clientWidth || 0);\n    const fallbackHeroHeight = Math.round(Math.min(860, Math.max(680, width * 2.16 || 680)));\n    const fallbackCollectionHeight = Math.round(Math.min(350, Math.max(260, width * 0.88 || 320)));\n    const fallbackProductHeight = Math.round(Math.min(520, Math.max(420, width * 1.23 || 480)));\n    const fallbackBannerHeight = Math.round(Math.min(580, Math.max(420, width * 1.32 || 520)));\n    const fallbackLaunchpadHeight = Math.round(Math.min(960, Math.max(880, width * 2.3 || 900)));\n    const fallbackCardBannerHeight = Math.round(Math.min(480, Math.max(320, width * 1.05 || 400)));\n    const readPixelProperty = (name, fallback) => {\n      const value = rootStyles.getPropertyValue(name).trim();\n      const pixels = value.endsWith(\"px\") ? parseFloat(value) : NaN;\n      return Math.round(Number.isFinite(pixels) ? pixels : fallback);\n    };\n    const heroHeight = readPixelProperty(\"--hcx-mobile-hero-height\", fallbackHeroHeight);\n    const collectionHeight = readPixelProperty(\"--hcx-mobile-collection-hero-height\", fallbackCollectionHeight);\n    const productHeight = readPixelProperty(\"--hcx-mobile-product-media-height\", fallbackProductHeight);\n    const bannerHeight = readPixelProperty(\"--hcx-mobile-banner-height\", fallbackBannerHeight);\n    const launchpadHeight = readPixelProperty(\"--hcx-mobile-launchpad-height\", fallbackLaunchpadHeight);\n    const cardBannerHeight = readPixelProperty(\"--hcx-mobile-card-banner-height\", fallbackCardBannerHeight);\n\n    hcxMobileMediaLockSelectors.hero.forEach((selector) => {\n      document.querySelectorAll(selector).forEach((element) => setHcxMobileLockedHeight(element, heroHeight));\n    });\n    hcxMobileMediaLockSelectors.collection.forEach((selector) => {\n      document.querySelectorAll(selector).forEach((element) => setHcxMobileLockedHeight(element, collectionHeight));\n    });\n    hcxMobileMediaLockSelectors.banner.forEach((selector) => {\n      document.querySelectorAll(selector).forEach((element) => setHcxMobileLockedHeight(element, bannerHeight));\n    });\n    hcxMobileMediaLockSelectors.cardBanner.forEach((selector) => {\n      document.querySelectorAll(selector).forEach((element) => setHcxMobileLockedHeight(element, cardBannerHeight));\n    });\n    hcxMobileMediaLockSelectors.product.forEach((selector) => {\n      document.querySelectorAll(selector).forEach((element) => setHcxMobileLockedHeight(element, productHeight));\n    });\n    positionHcxLaunchpadArtwork(launchpadHeight);\n    releaseHcxHomepageHeroCta();\n  }\n\n  function positionHcxLaunchpadArtwork(height) {\n    if (height <= 0) return;\n\n    const value = `${height}px`;\n    const lockLaunchpadBox = (element) => {\n      if (!element) return;\n      element.dataset.hcxMobileLockedHeight = value;\n      element.style.setProperty(\"height\", value, \"important\");\n      element.style.setProperty(\"min-height\", value, \"important\");\n      element.style.setProperty(\"max-height\", value, \"important\");\n      element.style.setProperty(\"overflow\", \"hidden\", \"important\");\n    };\n\n    document\n      .querySelectorAll(\n        \"body.template-index [id$='__studios_slide'], body.template-index [id$='__lckd_in_slide'], body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide, body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide--image, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide--image, body.template-index [id$='__studios_slide'] .hcx-category__placeholder-content, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-content\"\n      )\n      .forEach(lockLaunchpadBox);\n\n    document\n      .querySelectorAll(\n        \"body.template-index [id$='__studios_slide'] .hcx-category__placeholder-slide img, body.template-index [id$='__lckd_in_slide'] .hcx-category__placeholder-slide img\"\n      )\n      .forEach((image) => {\n        image.dataset.hcxMobileLockedHeight = value;\n        image.style.setProperty(\"position\", \"absolute\", \"important\");\n        image.style.setProperty(\"top\", \"0\", \"important\");\n        image.style.setProperty(\"right\", \"0\", \"important\");\n        image.style.setProperty(\"bottom\", \"0\", \"important\");\n        image.style.setProperty(\"left\", \"0\", \"important\");\n        image.style.setProperty(\"width\", \"100%\", \"important\");\n        image.style.setProperty(\"height\", value, \"important\");\n        image.style.setProperty(\"min-height\", value, \"important\");\n        image.style.setProperty(\"max-height\", value, \"important\");\n        image.style.setProperty(\"object-fit\", \"cover\", \"important\");\n        image.style.setProperty(\"object-position\", \"center bottom\", \"important\");\n        image.style.setProperty(\"transform\", \"none\", \"important\");\n        image.style.setProperty(\"scale\", \"1\", \"important\");\n      });\n  }\n\n  function requestHcxMobileMediaLock() {\n    if (hcxMobileMediaLockFrame) return;\n    hcxMobileMediaLockFrame = window.requestAnimationFrame(() => {\n      hcxMobileMediaLockFrame = 0;\n      lockHcxMobileMediaHeights();\n    });\n  }\n\n  function initHcxMobileMediaMutationLock() {\n    if (hcxMobileMediaMutationObserver || !(\"MutationObserver\" in window)) return;\n\n    let mutationLockCount = 0;\n    hcxMobileMediaMutationObserver = new MutationObserver((mutations) => {\n      if (mutations.some((mutation) => mutation.addedNodes.length || mutation.removedNodes.length)) {\n        mutationLockCount += 1;\n        requestHcxMobileMediaLock();\n        if (mutationLockCount >= 2) hcxMobileMediaMutationObserver.disconnect();\n      }\n    });\n    hcxMobileMediaMutationObserver.observe(document.getElementById(\"MainContent\") || document.body, {\n      childList: true,\n      subtree: true,\n    });\n  }\n\n  syncHcxStableMobileViewport({ force: true });\n  initHcxMobileMediaMutationLock();\n  window.addEventListener(\"resize\", () => syncHcxStableMobileViewport(), { passive: true });\n  window.visualViewport?.addEventListener(\"resize\", () => syncHcxStableMobileViewport(), { passive: true });\n  window.addEventListener(\"load\", requestHcxMobileMediaLock, { once: true });\n  hcxStableMobileViewportMedia.addEventListener?.(\"change\", () => syncHcxStableMobileViewport({ force: true }));\n  window.addEventListener(\"orientationchange\", () => {\n    hcxStableMobileViewportWidth = 0;\n    html.style.removeProperty(\"--hcx-mobile-stable-vh\");\n    window.setTimeout(() => syncHcxStableMobileViewport({ force: true }), 250);\n  });\n\n  const markHcxDeferredImageLoaded = (image) => {\n    image.classList.remove(\"is-hcx-lazy-loading\");\n    image.classList.add(\"is-hcx-lazy-loaded\");\n\n    if (image.dataset.hcxLazyHoverImage === \"true\") {\n      image.closest(\".media--hover-effect, .hcx-search-product-card__media\")?.classList.add(\"hcx-hover-image-is-loaded\");\n    }\n  };\n\n  const loadHcxDeferredImage = (image) => {\n    if (!(image instanceof HTMLImageElement) || image.dataset.hcxLazyLoaded === \"true\") return;\n\n    const srcset = image.dataset.hcxLazySrcset;\n    const src = image.dataset.hcxLazySrc;\n    if (!src && !srcset) return;\n\n    image.dataset.hcxLazyLoaded = \"true\";\n    image.classList.add(\"is-hcx-lazy-loading\");\n    if (srcset) image.srcset = srcset;\n    if (src) image.src = src;\n\n    if (image.complete && image.naturalWidth > 0) {\n      markHcxDeferredImageLoaded(image);\n      return;\n    }\n\n    image.addEventListener(\n      \"load\",\n      () => markHcxDeferredImageLoaded(image),\n      { once: true }\n    );\n  };\n\n  const getHcxLazyImageObserver = () => {\n    if (hcxLazyImageObserver || !(\"IntersectionObserver\" in window)) return hcxLazyImageObserver;\n\n    hcxLazyImageObserver = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (!entry.isIntersecting) return;\n          hcxLazyImageObserver.unobserve(entry.target);\n          loadHcxDeferredImage(entry.target);\n        });\n      },\n      { rootMargin: \"320px 0px\" }\n    );\n\n    return hcxLazyImageObserver;\n  };\n\n  const bindHcxDeferredImages = (root = document) => {\n    const images = [];\n    if (root instanceof HTMLImageElement && root.dataset.hcxLazySrc) images.push(root);\n    if (root?.querySelectorAll) images.push(...root.querySelectorAll(\"img[data-hcx-lazy-src]\"));\n\n    images.forEach((image) => {\n      if (image.dataset.hcxLazyBound === \"true\") return;\n      image.dataset.hcxLazyBound = \"true\";\n      if (!image.getAttribute(\"src\")) image.src = hcxTransparentImage;\n      if (\n        image.dataset.hcxLazyHoverImage === \"true\" &&\n        image.complete &&\n        image.naturalWidth > 0 &&\n        image.currentSrc &&\n        image.currentSrc !== hcxTransparentImage\n      ) {\n        markHcxDeferredImageLoaded(image);\n      }\n\n      const intentRoot =\n        image.closest(\".card-wrapper, .product-card-wrapper, .hcx-search-product-card, .hcx-search-product-card__media\") ||\n        image.parentElement;\n      const load = () => loadHcxDeferredImage(image);\n      intentRoot?.addEventListener(\"pointerenter\", load, { once: true, passive: true });\n      intentRoot?.addEventListener(\"focusin\", load, { once: true });\n\n      if (image.dataset.hcxLazyHoverImage === \"true\") return;\n\n      const observer = getHcxLazyImageObserver();\n      if (observer) {\n        observer.observe(image);\n      } else {\n        window.setTimeout(load, 300);\n      }\n    });\n\n    if (html.dataset.hcxDeferredImageObserverBound === \"true\" || !document.body || !(\"MutationObserver\" in window)) return;\n    html.dataset.hcxDeferredImageObserverBound = \"true\";\n    new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType === Node.ELEMENT_NODE) bindHcxDeferredImages(node);\n        });\n      });\n    }).observe(document.body, { childList: true, subtree: true });\n  };\n\n  const getHomeHero = () =>\n    document.querySelector(\n      \".section-hcx-hero, .section-hcx-product-slideshow, main .shopify-section:first-child\"\n    );\n\n  const getCollectionHero = () => document.querySelector(\".hcx-collection-hero--cinematic\");\n\n  const isHeaderOverPictureBanner = (selector) => {\n    if (!header) return false;\n\n    const headerRect = header.getBoundingClientRect();\n    const headerTop = Math.max(headerRect.top, 0);\n    const headerHeight = header.offsetHeight || headerRect.height || 0;\n    const headerBottom = headerTop + headerHeight;\n    const pictureBanners = document.querySelectorAll(selector);\n\n    return Array.from(pictureBanners).some((banner) => {\n      const bannerRect = banner.getBoundingClientRect();\n\n      return bannerRect.bottom > headerTop + 2 && bannerRect.top < headerBottom - 2;\n    });\n  };\n\n  const isHeaderOverHomePictureBanner = () =>\n    isHome &&\n    isHeaderOverPictureBanner(\n      \".section-hcx-hero, .section-hcx-product-slideshow, .section-hcx-category-grid .hcx-category__placeholder-slide--image\"\n    );\n\n  const getAnnouncementHeight = () => {\n    const announcement =\n      document.querySelector(\".announcement-bar-section\") ||\n      document.querySelector(\".announcement-bar\")?.closest(\".shopify-section\") ||\n      document.querySelector(\".announcement-bar\");\n    const height = announcement?.offsetHeight || announcement?.getBoundingClientRect().height || 0;\n\n    return Math.round(height);\n  };\n\n  const syncHomeHeader = () => {\n    if (!isHome || !header) return;\n\n    const hero = getHomeHero();\n    const announcementHeight = getAnnouncementHeight();\n    const headerHeight = header.offsetHeight || 0;\n    const currentScrollY = Math.max(window.scrollY, 0);\n    const isScrollingDown = currentScrollY > lastSyncedScrollY;\n    const pinToViewport = window.scrollY > Math.max(announcementHeight - 1, 0);\n    const triggerLine = pinToViewport ? headerHeight : announcementHeight + headerHeight;\n    const pastHero = hero ? hero.getBoundingClientRect().bottom <= triggerLine + 2 : window.scrollY > 18;\n    const solid = pastHero && !isScrollingDown && !isHeaderOverHomePictureBanner();\n\n    html.style.setProperty(\"--hcx-home-header-top\", `${announcementHeight}px`);\n    html.classList.toggle(\"hcx-home-header-at-window-top\", pinToViewport);\n    html.classList.toggle(\"hcx-home-header-solid\", solid);\n    header.classList.toggle(\"hcx-home-header-solid\", solid);\n  };\n\n  const syncCollectionHeader = () => {\n    if (!isCollection || !header) return;\n\n    const hero = getCollectionHero();\n    if (!hero) {\n      html.classList.remove(\"hcx-collection-header-solid\");\n      html.classList.remove(\"hcx-collection-header-past-hero\");\n      header.classList.remove(\"hcx-collection-header-solid\");\n      header.classList.remove(\"hcx-collection-header-past-hero\");\n      return;\n    }\n\n    const announcementHeight = getAnnouncementHeight();\n    const headerHeight = header.offsetHeight || 0;\n    const currentScrollY = Math.max(window.scrollY, 0);\n    const isScrollingUp = currentScrollY < lastSyncedScrollY;\n    const pinToViewport = window.scrollY > Math.max(announcementHeight - 1, 0);\n    const triggerLine = pinToViewport ? headerHeight : announcementHeight + headerHeight;\n    const pastHero = hero.getBoundingClientRect().bottom <= triggerLine + 2;\n    const solid = pastHero && isScrollingUp;\n    const hidden = pastHero && !solid;\n\n    html.classList.toggle(\"hcx-collection-header-past-hero\", hidden);\n    header.classList.toggle(\"hcx-collection-header-past-hero\", hidden);\n    html.classList.toggle(\"hcx-collection-header-solid\", solid);\n    header.classList.toggle(\"hcx-collection-header-solid\", solid);\n\n    if (solid) {\n      header.classList.add(\"shopify-section-header-sticky\");\n      header.classList.remove(\"shopify-section-header-hidden\", \"hcx-header-scroll-hidden\");\n    }\n  };\n\n  const syncHeader = () => {\n    html.classList.toggle(\"hcx-scrolled\", window.scrollY > 18);\n    syncHomeHeader();\n    syncCollectionHeader();\n    lastSyncedScrollY = Math.max(window.scrollY, 0);\n  };\n\n  syncHeader();\n  window.addEventListener(\"scroll\", syncHeader, { passive: true });\n  window.addEventListener(\"resize\", syncHeader);\n\n  const syncCollectionPurposeCopy = () => {\n    document.querySelectorAll(\"[data-hcx-collection-purpose-copy]\").forEach((description) => {\n      const copy = description.dataset.hcxCollectionPurposeCopy || \"\";\n      if (!copy) return;\n\n      let paragraph = description.querySelector(\"p\");\n      if (!paragraph) {\n        paragraph = document.createElement(\"p\");\n        description.replaceChildren(paragraph);\n      }\n\n      if (paragraph.textContent.trim() !== copy) paragraph.textContent = copy;\n    });\n  };\n\n  syncCollectionPurposeCopy();\n  window.addEventListener(\"load\", syncCollectionPurposeCopy);\n  window.setTimeout(syncCollectionPurposeCopy, 250);\n  window.setTimeout(syncCollectionPurposeCopy, 1200);\n\n  if (header) {\n    const stickyType = header.querySelector(\"sticky-header\")?.dataset.stickyType || \"none\";\n    const shouldAutoHideHeader = stickyType !== \"none\";\n    const mobileHeaderMedia = window.matchMedia(\"(max-width: 749px), (hover: none), (pointer: coarse)\");\n    const isMobileHeaderViewport = () => mobileHeaderMedia.matches;\n    let lastHeaderScrollY = window.scrollY;\n    let headerScrollFrame = null;\n    const getHeaderScrollHidePoint = () => {\n      const headerHeight = header.offsetHeight || 0;\n\n      if (isHome || isCollection) {\n        const hero = isHome ? getHomeHero() : getCollectionHero();\n\n        if (hero) {\n          const headerRect = header.getBoundingClientRect();\n          const headerBottomLine = Math.max(headerRect.top, 0) + (headerHeight || headerRect.height || 0);\n          const heroBottom = hero.getBoundingClientRect().bottom + window.scrollY;\n\n          return Math.max(headerHeight, heroBottom - headerBottomLine);\n        }\n      }\n\n      const documentHeight = Math.max(\n        document.body.scrollHeight,\n        document.documentElement.scrollHeight,\n        document.body.offsetHeight,\n        document.documentElement.offsetHeight\n      );\n      const scrollableHeight = Math.max(documentHeight - window.innerHeight, 0);\n\n      return Math.max(headerHeight, scrollableHeight * 0.05);\n    };\n\n    const shouldKeepHeaderOpen = () =>\n      header.classList.contains(\"menu-open\") ||\n      document.body.classList.contains(\"hcx-menu-open\") ||\n      document.body.classList.contains(\"overflow-hidden\") ||\n      header.matches(\":hover\") ||\n      header.matches(\":focus-within\") ||\n      document.querySelector(\"cart-drawer.active, .cart-drawer.active, .drawer.active, details[open] .menu-drawer\");\n\n    const syncHeaderScrollDirection = () => {\n      headerScrollFrame = null;\n\n      const currentScrollY = Math.max(window.scrollY, 0);\n      const scrollDelta = currentScrollY - lastHeaderScrollY;\n      const canHideHeader = currentScrollY >= getHeaderScrollHidePoint();\n\n      if (!shouldAutoHideHeader || !canHideHeader || shouldKeepHeaderOpen()) {\n        header.classList.remove(\"hcx-header-scroll-hidden\");\n      } else if (scrollDelta > 0) {\n        header.classList.add(\"hcx-header-scroll-hidden\");\n      } else if (scrollDelta < 0) {\n        header.classList.remove(\"hcx-header-scroll-hidden\");\n      }\n\n      lastHeaderScrollY = currentScrollY;\n    };\n\n    const requestHeaderScrollSync = () => {\n      if (headerScrollFrame) return;\n      headerScrollFrame = window.requestAnimationFrame(syncHeaderScrollDirection);\n    };\n\n    const resetMobileHeaderScrollState = () => {\n      lastHeaderScrollY = Math.max(window.scrollY, 0);\n      header.classList.remove(\"hcx-header-scroll-hidden\");\n      if (isMobileHeaderViewport()) header.classList.remove(\"shopify-section-header-hidden\");\n    };\n\n    window.addEventListener(\"scroll\", requestHeaderScrollSync, { passive: true });\n    window.addEventListener(\"resize\", () => {\n      resetMobileHeaderScrollState();\n    });\n    mobileHeaderMedia.addEventListener(\"change\", resetMobileHeaderScrollState);\n    header.addEventListener(\"mouseenter\", () => header.classList.remove(\"hcx-header-scroll-hidden\"));\n    header.addEventListener(\"focusin\", () => header.classList.remove(\"hcx-header-scroll-hidden\"));\n  }\n\n  if (header) {\n    const observer = new MutationObserver(() => {\n      document.body.classList.toggle(\"hcx-menu-open\", header.classList.contains(\"menu-open\"));\n    });\n\n    observer.observe(header, { attributes: true, attributeFilter: [\"class\"] });\n  }\n\n  const initClickableHeroes = () => {\n    document.querySelectorAll(\"[data-hcx-clickable-hero]\").forEach((hero) => {\n      if (!(hero instanceof HTMLElement)) return;\n      if (hero.dataset.hcxClickableHeroBound === \"true\") return;\n\n      const getPrimaryAction = () => hero.querySelector(\".hcx-actions .hcx-btn--light, [data-hcx-hero-primary-action]\");\n      const hasNestedInteractiveTarget = (target) => {\n        if (!(target instanceof Element)) return false;\n\n        const interactive = target.closest(\"a, button, input, select, textarea, summary, label, [role='button'], [role='link']\");\n        return Boolean(interactive && interactive !== hero);\n      };\n      const activateHero = () => {\n        const primaryAction = getPrimaryAction();\n        const targetHref = hero.dataset.hcxClickableHeroTarget || \"\";\n\n        if (targetHref) {\n          window.location.href = targetHref;\n          return;\n        }\n\n        if (primaryAction instanceof HTMLAnchorElement && primaryAction.href) {\n          window.location.href = primaryAction.href;\n          return;\n        }\n\n        if (primaryAction instanceof HTMLElement) primaryAction.click();\n      };\n\n      if (!hero.dataset.hcxClickableHeroTarget && !getPrimaryAction()) return;\n\n      hero.dataset.hcxClickableHeroBound = \"true\";\n      hero.addEventListener(\"click\", (event) => {\n        if (hasNestedInteractiveTarget(event.target)) return;\n\n        activateHero();\n      });\n      hero.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"Enter\" && event.key !== \" \") return;\n        if (hasNestedInteractiveTarget(event.target)) return;\n\n        event.preventDefault();\n        activateHero();\n      });\n    });\n  };\n\n  document.querySelectorAll(\"[data-hcx-shop-menu]\").forEach((menu) => {\n    const trigger = menu.querySelector(\"[data-hcx-shop-trigger]\");\n    const panel = menu.querySelector(\".hcx-shop-mega\");\n    const closeDelay = 40;\n    let closeTimer;\n    let lastPointerEvent;\n\n    const updatePanelTop = () => {\n      const header = document.querySelector(\".section-header\");\n      const headerRect = header?.getBoundingClientRect();\n      const headerStyle = header ? window.getComputedStyle(header) : null;\n      const panelTop =\n        headerStyle?.position === \"fixed\" ? headerRect?.height || 0 : headerRect?.bottom || 0;\n\n      menu.style.setProperty(\"--hcx-shop-panel-top\", `${Math.max(0, panelTop)}px`);\n    };\n\n    const clearCloseTimer = () => {\n      window.clearTimeout(closeTimer);\n    };\n\n    const setOpen = (isOpen) => {\n      if (isOpen) {\n        clearCloseTimer();\n        updatePanelTop();\n      }\n      menu.classList.toggle(\"is-open\", isOpen);\n      html.classList.toggle(\"hcx-shop-open\", isOpen);\n      trigger?.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    };\n\n    const scheduleClose = (event) => {\n      if (event) lastPointerEvent = event;\n      clearCloseTimer();\n      closeTimer = window.setTimeout(() => {\n        closeTimer = 0;\n        if (menu.matches(\":focus-within\")) return;\n        if (lastPointerEvent && isPointerInMenuZone(lastPointerEvent)) return;\n        setOpen(false);\n      }, closeDelay);\n    };\n\n    const isHoverPointer = () => window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;\n\n    const isPointInRect = (event, rect, padding = 0) =>\n      rect &&\n      event.clientX >= rect.left - padding &&\n      event.clientX <= rect.right + padding &&\n      event.clientY >= rect.top - padding &&\n      event.clientY <= rect.bottom + padding;\n\n    const isPointerInMenuZone = (event) => {\n      const triggerRect = trigger?.getBoundingClientRect();\n      const panelRect = panel?.getBoundingClientRect();\n      const panelTop = panelRect?.top ?? triggerRect?.bottom ?? 0;\n      const bridgeTop = panelTop - 38;\n\n      return (\n        isPointInRect(event, triggerRect, 12) ||\n        (menu.classList.contains(\"is-open\") && isPointInRect(event, panelRect, 10)) ||\n        (menu.classList.contains(\"is-open\") &&\n          event.clientX >= 0 &&\n          event.clientX <= window.innerWidth &&\n          event.clientY >= bridgeTop &&\n          event.clientY <= panelTop + 10)\n      );\n    };\n\n    menu.addEventListener(\"mouseenter\", () => setOpen(true));\n    menu.addEventListener(\"mouseleave\", scheduleClose);\n    panel?.addEventListener(\"mouseenter\", () => setOpen(true));\n    panel?.addEventListener(\"mouseleave\", scheduleClose);\n    document.addEventListener(\n      \"pointermove\",\n      (event) => {\n        if (!isHoverPointer()) return;\n        lastPointerEvent = event;\n        if (isPointerInMenuZone(event)) {\n          setOpen(true);\n        } else if (menu.classList.contains(\"is-open\")) {\n          scheduleClose(event);\n        }\n      },\n      { passive: true }\n    );\n    trigger?.addEventListener(\"click\", (event) => {\n      const shouldNavigate =\n        trigger instanceof HTMLAnchorElement &&\n        trigger.href &&\n        window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches &&\n        !event.metaKey &&\n        !event.ctrlKey &&\n        !event.shiftKey &&\n        !event.altKey &&\n        event.button === 0;\n\n      if (shouldNavigate) return;\n\n      event.preventDefault();\n      clearCloseTimer();\n      setOpen(!menu.classList.contains(\"is-open\"));\n    });\n    document.addEventListener(\"click\", (event) => {\n      if (!menu.contains(event.target)) {\n        clearCloseTimer();\n        setOpen(false);\n      }\n    });\n    document.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Escape\" && menu.classList.contains(\"is-open\")) {\n        clearCloseTimer();\n        setOpen(false);\n      }\n    });\n    window.addEventListener(\"resize\", () => {\n      if (menu.classList.contains(\"is-open\")) updatePanelTop();\n    });\n    window.addEventListener(\n      \"scroll\",\n      () => {\n        if (menu.classList.contains(\"is-open\")) updatePanelTop();\n      },\n      { passive: true }\n    );\n    menu.addEventListener(\"focusin\", () => setOpen(true));\n    menu.addEventListener(\"focusout\", (event) => {\n      if (!menu.contains(event.relatedTarget)) setOpen(false);\n    });\n    menu.addEventListener(\"keydown\", (event) => {\n      if (event.key !== \"Escape\") return;\n      clearCloseTimer();\n      setOpen(false);\n      trigger?.focus();\n    });\n  });\n\n  document.querySelectorAll(\"[data-hcx-parallax]\").forEach((media) => {\n    if (window.matchMedia(\"(prefers-reduced-motion: reduce), (max-width: 749px), (hover: none), (pointer: coarse)\").matches) {\n      media.style.removeProperty(\"--hcx-parallax-y\");\n      return;\n    }\n\n    const move = () => {\n      const rect = media.getBoundingClientRect();\n      const progress = (rect.top + rect.height / 2 - window.innerHeight / 2) / window.innerHeight;\n      media.style.setProperty(\"--hcx-parallax-y\", `${Math.max(-16, Math.min(16, progress * -26))}px`);\n    };\n\n    move();\n    window.addEventListener(\"scroll\", move, { passive: true });\n  });\n\n  const initFastNavigationPrefetch = () => {\n    if ([\"localhost\", \"127.0.0.1\", \"::1\"].includes(window.location.hostname)) return;\n    if (navigator.connection?.saveData) return;\n\n    const prefetched = new Set();\n    const maxPrefetches = 8;\n    const skipPath = /\\/(account|cart|checkout|customer_authentication|apps)\\b/;\n\n    const prefetch = (link) => {\n      if (!(link instanceof HTMLAnchorElement)) return;\n      if (!link.href || link.target && link.target !== \"_self\" || link.hasAttribute(\"download\")) return;\n\n      let url;\n      try {\n        url = new URL(link.href, window.location.href);\n      } catch (_) {\n        return;\n      }\n\n      if (url.origin !== window.location.origin) return;\n      if (url.pathname === window.location.pathname && url.search === window.location.search) return;\n      if (skipPath.test(url.pathname)) return;\n      if (prefetched.has(url.href) || prefetched.size >= maxPrefetches) return;\n\n      prefetched.add(url.href);\n      const hint = document.createElement(\"link\");\n      hint.rel = \"prefetch\";\n      hint.href = url.href;\n      hint.as = \"document\";\n      document.head.appendChild(hint);\n    };\n\n    const prefetchFromEvent = (event) => {\n      const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n      prefetch(target?.closest(\"a[href]\"));\n    };\n\n    document.addEventListener(\"pointerover\", prefetchFromEvent, { passive: true });\n    document.addEventListener(\"focusin\", prefetchFromEvent);\n    document.addEventListener(\"touchstart\", prefetchFromEvent, { passive: true });\n  };\n\n  initFastNavigationPrefetch();\n\n  document.querySelectorAll(\"[data-hcx-slider]\").forEach((slider) => {\n    const slides = [...slider.querySelectorAll(\"[data-hcx-slide]\")];\n    const triggers = [...slider.querySelectorAll(\"[data-hcx-slide-trigger]\")];\n    if (slides.length < 2) return;\n\n    let active = 0;\n    let timer;\n    const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n    const autoplay = !slider.hasAttribute(\"data-hcx-no-autoplay\");\n\n    const show = (index) => {\n      active = (index + slides.length) % slides.length;\n      slides.forEach((slide, slideIndex) => {\n        const isActive = slideIndex === active;\n        slide.classList.toggle(\"is-active\", isActive);\n        slide.toggleAttribute(\"aria-hidden\", !isActive);\n      });\n      triggers.forEach((trigger, triggerIndex) => {\n        trigger.classList.toggle(\"is-active\", triggerIndex === active);\n      });\n    };\n\n    const start = () => {\n      if (reduceMotion || !autoplay) return;\n      window.clearInterval(timer);\n      timer = window.setInterval(() => show(active + 1), 5200);\n    };\n\n    triggers.forEach((trigger, index) => {\n      trigger.addEventListener(\"click\", () => {\n        show(index);\n        start();\n      });\n    });\n\n    slider.addEventListener(\"mouseenter\", () => window.clearInterval(timer));\n    slider.addEventListener(\"mouseleave\", start);\n    start();\n  });\n\n  const initProductMediaCarousels = (root = document) => {\n    root.querySelectorAll(\"[data-hcx-product-carousel]\").forEach((gallery) => {\n      if (gallery.dataset.hcxProductCarouselBound === \"true\") return;\n      gallery.dataset.hcxProductCarouselBound = \"true\";\n\n      const previous = gallery.querySelector(\"[data-hcx-product-carousel-prev]\");\n      const next = gallery.querySelector(\"[data-hcx-product-carousel-next]\");\n      const currentCounter = gallery.querySelector(\"[data-hcx-product-carousel-current]\");\n      const totalCounter = gallery.querySelector(\"[data-hcx-product-carousel-total]\");\n      const list = gallery.querySelector(\".product__media-list\");\n      let active = 0;\n      let isApplying = false;\n      let isAnimating = false;\n      let hasInitialized = false;\n      let touchStartX = 0;\n      let touchStartY = 0;\n      const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n      const slideClasses = [\n        \"is-hcx-active\",\n        \"is-hcx-enter-next\",\n        \"is-hcx-enter-prev\",\n        \"is-hcx-exit-next\",\n        \"is-hcx-exit-prev\",\n      ];\n\n      const getItems = () => [...gallery.querySelectorAll(\".product__media-list > [data-media-id]\")];\n      const preloadImages = (index = active) => {\n        const items = getItems();\n        if (!items.length) return;\n\n        const indexes = new Set([\n          (index + items.length) % items.length,\n          (index + 1) % items.length,\n          (index - 1 + items.length) % items.length,\n        ]);\n\n        indexes.forEach((itemIndex) => {\n          items[itemIndex]?.querySelectorAll(\"img[loading='lazy']\").forEach((image) => {\n            image.loading = \"eager\";\n            image.decoding = \"async\";\n            image.setAttribute(\"fetchpriority\", itemIndex === index ? \"high\" : \"low\");\n          });\n        });\n      };\n\n      const setThumbnail = (mediaId) => {\n        gallery.querySelectorAll(\"[id^='GalleryThumbnails'] [data-target] button\").forEach((button) => {\n          const target = button.closest(\"[data-target]\")?.dataset.target;\n          if (target === mediaId) {\n            button.setAttribute(\"aria-current\", \"true\");\n          } else {\n            button.removeAttribute(\"aria-current\");\n          }\n        });\n      };\n\n      const clearMotionClasses = (item) => item?.classList.remove(...slideClasses);\n      const updateCounter = (index, total) => {\n        if (currentCounter) currentCounter.textContent = String(index + 1);\n        if (totalCounter) totalCounter.textContent = String(total);\n      };\n\n      const show = (index, direction = 0, animate = hasInitialized) => {\n        const items = getItems();\n        if (!items.length || isAnimating) return;\n\n        const nextIndex = (index + items.length) % items.length;\n        preloadImages(nextIndex);\n        const previousIndex = active;\n        const current = items[nextIndex];\n        const previousItem = items[previousIndex];\n        const shouldAnimate = animate && !reduceMotion && hasInitialized && nextIndex !== previousIndex;\n        const motionDirection = direction || (nextIndex > previousIndex ? 1 : -1);\n\n        isApplying = true;\n\n        if (!shouldAnimate) {\n          active = nextIndex;\n          items.forEach((item, itemIndex) => {\n            const isActive = itemIndex === active;\n            clearMotionClasses(item);\n            item.classList.toggle(\"is-active\", isActive);\n            item.classList.toggle(\"is-hcx-active\", isActive);\n            item.toggleAttribute(\"aria-hidden\", !isActive);\n          });\n\n          if (current?.dataset.mediaId) setThumbnail(current.dataset.mediaId);\n          updateCounter(active, items.length);\n          gallery.playActiveMedia?.(current);\n          hasInitialized = true;\n\n          window.requestAnimationFrame(() => {\n            isApplying = false;\n          });\n          return;\n        }\n\n        isAnimating = true;\n        const enterClass = motionDirection > 0 ? \"is-hcx-enter-next\" : \"is-hcx-enter-prev\";\n        const exitClass = motionDirection > 0 ? \"is-hcx-exit-next\" : \"is-hcx-exit-prev\";\n\n        items.forEach((item, itemIndex) => {\n          if (itemIndex !== previousIndex && itemIndex !== nextIndex) {\n            clearMotionClasses(item);\n            item.classList.remove(\"is-active\");\n            item.setAttribute(\"aria-hidden\", \"true\");\n          }\n        });\n\n        clearMotionClasses(current);\n        current.classList.add(enterClass);\n        current.removeAttribute(\"aria-hidden\");\n        previousItem?.removeAttribute(\"aria-hidden\");\n        previousItem?.classList.add(\"is-hcx-active\");\n\n        current.offsetWidth;\n\n        window.requestAnimationFrame(() => {\n          active = nextIndex;\n          previousItem?.classList.remove(\"is-active\", \"is-hcx-active\");\n          previousItem?.classList.add(exitClass);\n          current.classList.remove(enterClass);\n          current.classList.add(\"is-active\", \"is-hcx-active\");\n\n          if (current?.dataset.mediaId) setThumbnail(current.dataset.mediaId);\n          updateCounter(active, items.length);\n          gallery.playActiveMedia?.(current);\n\n          window.setTimeout(() => {\n            previousItem?.setAttribute(\"aria-hidden\", \"true\");\n            previousItem?.classList.remove(exitClass);\n            isApplying = false;\n            isAnimating = false;\n          }, 470);\n        });\n      };\n\n      const syncFromDawn = () => {\n        const items = getItems();\n        const activeIndex = items.findIndex((item) => item.classList.contains(\"is-active\"));\n        const preferredIndex =\n          !hasInitialized && gallery.dataset.hcxPreferredMediaId\n            ? items.findIndex((item) => item.dataset.mediaId === gallery.dataset.hcxPreferredMediaId)\n            : -1;\n        const nextIndex = preferredIndex >= 0 ? preferredIndex : activeIndex >= 0 ? activeIndex : active;\n        show(nextIndex, nextIndex >= active ? 1 : -1);\n      };\n\n      previous?.addEventListener(\"click\", () => show(active - 1, -1, false));\n      next?.addEventListener(\"click\", () => show(active + 1, 1, false));\n\n      list?.addEventListener(\n        \"touchstart\",\n        (event) => {\n          touchStartX = event.changedTouches[0]?.clientX || 0;\n          touchStartY = event.changedTouches[0]?.clientY || 0;\n        },\n        { passive: true }\n      );\n\n      list?.addEventListener(\n        \"touchmove\",\n        (event) => {\n          const touch = event.changedTouches[0];\n          if (!touch) return;\n\n          const deltaX = touch.clientX - touchStartX;\n          const deltaY = touch.clientY - touchStartY;\n          if (Math.abs(deltaX) > 10 && Math.abs(deltaX) > Math.abs(deltaY) * 1.1) event.preventDefault();\n        },\n        { passive: false }\n      );\n\n      list?.addEventListener(\n        \"touchend\",\n        (event) => {\n          const touch = event.changedTouches[0];\n          if (!touch) return;\n\n          const deltaX = touch.clientX - touchStartX;\n          const deltaY = touch.clientY - touchStartY;\n          if (Math.abs(deltaX) < 42 || Math.abs(deltaX) < Math.abs(deltaY) * 1.2) return;\n\n          show(active + (deltaX < 0 ? 1 : -1), deltaX < 0 ? 1 : -1, false);\n        },\n        { passive: true }\n      );\n\n      gallery.addEventListener(\"click\", (event) => {\n        if (!event.target.closest(\"[data-target]\")) return;\n        window.requestAnimationFrame(syncFromDawn);\n      });\n\n      if (list) {\n        const observer = new MutationObserver((mutations) => {\n          if (isApplying) return;\n          const shouldSync = mutations.some((mutation) => {\n            if (mutation.type === \"childList\") return true;\n            return mutation.target instanceof HTMLElement && mutation.target.matches(\"[data-media-id].is-active\");\n          });\n          if (shouldSync) window.requestAnimationFrame(syncFromDawn);\n        });\n\n        observer.observe(list, {\n          childList: true,\n          attributes: true,\n          attributeFilter: [\"class\"],\n          subtree: true,\n        });\n      }\n\n      syncFromDawn();\n    });\n  };\n\n  initProductMediaCarousels();\n  document.addEventListener(\"shopify:section:load\", (event) => initProductMediaCarousels(event.target));\n\n  const clearCardSizeHoverState = (quickAdd) => {\n    quickAdd\n      ?.querySelectorAll(\".hcx-card-size-button.is-size-hovered\")\n      .forEach((button) => button.classList.remove(\"is-size-hovered\"));\n  };\n\n  const closeCardQuickAdd = (quickAdd) => {\n    const toggle = quickAdd?.querySelector(\"[data-hcx-card-quick-toggle]\");\n    const input = quickAdd?.querySelector(\"[data-hcx-card-quick-input]\");\n    if (!quickAdd) return;\n\n    quickAdd.classList.remove(\"is-open\", \"is-hover-open\", \"is-toggle-active\");\n    clearCardSizeHoverState(quickAdd);\n    if (input) input.checked = false;\n    if (document.activeElement instanceof HTMLElement && quickAdd.contains(document.activeElement)) {\n      document.activeElement.blur();\n    }\n    toggle?.setAttribute(\"aria-expanded\", \"false\");\n    syncCardQuickAddLayout(quickAdd);\n  };\n\n  const closeOtherCardQuickAdds = (currentQuickAdd = null) => {\n    document\n      .querySelectorAll(\"[data-hcx-card-quick-add].is-open, [data-hcx-card-quick-add].is-hover-open, [data-hcx-card-quick-add].is-toggle-active\")\n      .forEach((quickAdd) => {\n        if (quickAdd !== currentQuickAdd) closeCardQuickAdd(quickAdd);\n      });\n  };\n\n  const setImportantStyle = (element, styles) => {\n    if (!element) return;\n\n    Object.entries(styles).forEach(([property, value]) => {\n      element.style.setProperty(property, value, \"important\");\n    });\n  };\n\n  const syncCardQuickAddLayout = (quickAdd) => {\n    if (!quickAdd) return;\n\n    const panel = quickAdd.querySelector(\"[data-hcx-card-size-panel]\");\n    const toggle = quickAdd.querySelector(\"[data-hcx-card-quick-toggle]\");\n    const icon = toggle?.querySelector(\"svg\");\n    const isTrayOpen =\n      quickAdd.classList.contains(\"is-hover-open\") ||\n      quickAdd.classList.contains(\"is-open\") ||\n      quickAdd.contains(document.activeElement);\n\n    setImportantStyle(quickAdd, {\n      position: \"absolute\",\n      inset: \"auto 0 0 0\",\n      \"z-index\": \"120\",\n      height: \"7.2rem\",\n      \"min-height\": \"0\",\n      overflow: \"visible\",\n      transform: \"none\",\n    });\n\n    setImportantStyle(panel, {\n      position: \"absolute\",\n      inset: \"auto 5.45rem .8rem .8rem\",\n      top: \"auto\",\n      right: \"5.45rem\",\n      bottom: \".8rem\",\n      left: \".8rem\",\n      \"z-index\": \"121\",\n      display: \"flex\",\n      width: \"auto\",\n      \"min-width\": \"0\",\n      \"max-width\": \"none\",\n      \"grid-auto-flow\": \"row\",\n      \"grid-auto-columns\": \"auto\",\n      \"grid-template-columns\": \"none\",\n      overflow: \"hidden\",\n      \"justify-content\": \"stretch\",\n      \"justify-self\": \"stretch\",\n      opacity: isTrayOpen ? \"1\" : \"0\",\n      visibility: isTrayOpen ? \"visible\" : \"hidden\",\n      \"pointer-events\": isTrayOpen ? \"auto\" : \"none\",\n      transform: \"none\",\n      transition: \"opacity .12s ease, visibility 0s linear .12s\",\n    });\n\n    setImportantStyle(toggle, {\n      position: \"absolute\",\n      top: \"auto\",\n      right: \".8rem\",\n      bottom: \".8rem\",\n      left: \"auto\",\n      \"z-index\": \"122\",\n      display: \"grid\",\n      width: \"4.1rem\",\n      height: \"4.1rem\",\n      \"min-width\": \"0\",\n      \"min-height\": \"0\",\n      transform: \"none\",\n    });\n\n    setImportantStyle(icon, {\n      transform: isTrayOpen ? \"rotate(135deg)\" : \"rotate(0deg)\",\n      \"transform-origin\": \"center center\",\n      transition: \"transform .18s ease\",\n    });\n  };\n\n  const getCardQuickAddUrl = () => {\n    const cartAddUrl = window.routes?.cart_add_url || \"/cart/add\";\n    return cartAddUrl.endsWith(\".js\") ? cartAddUrl : `${cartAddUrl}.js`;\n  };\n\n  const getCardQuickCartUrl = () => window.routes?.cart_url || \"/cart\";\n\n  const shouldSendCardQuickAddToCartPage = () =>\n    !window.matchMedia || window.matchMedia(\"(max-width: 749px)\").matches;\n\n  const parseCardQuickAddResponse = async (response) => {\n    const responseText = await response.text();\n    let parsedState = {};\n\n    if (responseText.trim()) {\n      try {\n        parsedState = JSON.parse(responseText);\n      } catch (error) {\n        parsedState = {\n          status: response.status || 500,\n          message: window.cartStrings?.error || \"Unable to add this item to cart.\",\n          description: window.cartStrings?.error || \"Unable to add this item to cart.\",\n        };\n      }\n    }\n\n    if (!response.ok && !parsedState.status) {\n      parsedState.status = response.status || 500;\n      parsedState.message = response.statusText || window.cartStrings?.error || \"Unable to add this item to cart.\";\n      parsedState.description = parsedState.message;\n    }\n\n    return parsedState;\n  };\n\n  const addCardQuickVariant = async (control) => {\n    const quickAdd = control?.closest(\"[data-hcx-card-quick-add]\");\n    const form = control?.closest(\"form\");\n    const variantId = control?.dataset?.hcxCardVariantId || form?.querySelector(\"[name='id']\")?.value;\n    const cart = document.querySelector(\"cart-notification\") || document.querySelector(\"cart-drawer\");\n    const spinner = control?.querySelector(\".loading__spinner\");\n\n    if (\n      !variantId ||\n      !quickAdd ||\n      control.disabled ||\n      control.getAttribute(\"aria-disabled\") === \"true\" ||\n      quickAdd.classList.contains(\"is-loading\")\n    )\n      return;\n\n    quickAdd.classList.remove(\"has-error\");\n    quickAdd.classList.add(\"is-loading\");\n    control.classList.add(\"loading\");\n    control.setAttribute(\"aria-busy\", \"true\");\n    control.setAttribute(\"aria-disabled\", \"true\");\n    spinner?.classList.remove(\"hidden\");\n\n    try {\n      const formData = form ? new FormData(form) : new FormData();\n      if (!formData.has(\"id\")) formData.append(\"id\", variantId);\n      if (!formData.has(\"quantity\")) formData.append(\"quantity\", \"1\");\n\n      if (cart?.getSectionsToRender) {\n        formData.append(\n          \"sections\",\n          cart.getSectionsToRender().map((section) => section.id)\n        );\n        formData.append(\"sections_url\", window.location.pathname);\n        cart.setActiveElement?.(document.activeElement);\n      }\n\n      const response = await fetch(getCardQuickAddUrl(), {\n        method: \"POST\",\n        headers: {\n          Accept: \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n        },\n        body: formData,\n      });\n      const parsedState = await parseCardQuickAddResponse(response);\n\n      if (!response.ok || parsedState.status) {\n        throw new Error(parsedState.description || parsedState.message || \"Unable to add this item.\");\n      }\n\n      if (typeof publish === \"function\" && typeof PUB_SUB_EVENTS !== \"undefined\") {\n        publish(PUB_SUB_EVENTS.cartUpdate, {\n          source: \"hcx-card-quick-add\",\n          productVariantId: String(variantId),\n          cartData: parsedState,\n        });\n      }\n\n      closeCardQuickAdd(quickAdd);\n\n      if (shouldSendCardQuickAddToCartPage()) {\n        window.location.assign(getCardQuickCartUrl());\n        return;\n      }\n\n      if (cart?.renderContents && parsedState.sections) {\n        cart.renderContents(parsedState);\n      } else if (cart?.open) {\n        cart.open(control);\n      } else if (!cart && window.routes?.cart_url) {\n        window.location = window.routes.cart_url;\n      }\n    } catch (error) {\n      quickAdd.classList.add(\"has-error\");\n      window.setTimeout(() => quickAdd.classList.remove(\"has-error\"), 1600);\n      console.error(error);\n    } finally {\n      quickAdd.classList.remove(\"is-loading\");\n      control.classList.remove(\"loading\");\n      control.removeAttribute(\"aria-busy\");\n      control.removeAttribute(\"aria-disabled\");\n      spinner?.classList.add(\"hidden\");\n    }\n  };\n\n  const setCardQuickAddOpen = (quickAdd, isOpen) => {\n    const toggle = quickAdd?.querySelector(\"[data-hcx-card-quick-toggle]\");\n    const input = quickAdd?.querySelector(\"[data-hcx-card-quick-input]\");\n    if (!quickAdd || !toggle) return;\n\n    if (isOpen) {\n      closeOtherCardQuickAdds(quickAdd);\n      quickAdd.classList.remove(\"is-hover-open\");\n    }\n    quickAdd.classList.toggle(\"is-open\", isOpen);\n    if (!isOpen) {\n      quickAdd.classList.remove(\"is-hover-open\", \"is-toggle-active\");\n      clearCardSizeHoverState(quickAdd);\n      if (document.activeElement instanceof HTMLElement && quickAdd.contains(document.activeElement)) {\n        document.activeElement.blur();\n      }\n    }\n    if (input) input.checked = isOpen;\n    toggle.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    syncCardQuickAddLayout(quickAdd);\n  };\n\n  const setCardQuickAddHoverOpen = (quickAdd, isOpen) => {\n    const toggle = quickAdd?.querySelector(\"[data-hcx-card-quick-toggle]\");\n    if (!quickAdd) return;\n\n    if (isOpen) {\n      closeOtherCardQuickAdds(quickAdd);\n    } else if (quickAdd.classList.contains(\"is-open\")) {\n      return;\n    }\n\n    quickAdd.classList.toggle(\"is-hover-open\", isOpen);\n    if (!isOpen) clearCardSizeHoverState(quickAdd);\n    if (!quickAdd.classList.contains(\"is-open\")) {\n      toggle?.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    }\n    syncCardQuickAddLayout(quickAdd);\n  };\n\n  const initCardQuickAdds = () => {\n    document.querySelectorAll(\"[data-hcx-card-quick-add]\").forEach((quickAdd) => {\n      if (quickAdd.dataset.hcxCardQuickBound === \"true\") return;\n      quickAdd.dataset.hcxCardQuickBound = \"true\";\n\n      const toggle = quickAdd.querySelector(\"[data-hcx-card-quick-toggle]\");\n      const panel = quickAdd.querySelector(\"[data-hcx-card-size-panel]\");\n      let hoverCloseTimer = null;\n      const canUseHoverOpen = (event) =>\n        event.pointerType !== \"touch\" && window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;\n\n      const clearHoverClose = () => {\n        if (!hoverCloseTimer) return;\n        window.clearTimeout(hoverCloseTimer);\n        hoverCloseTimer = null;\n      };\n\n      const openHoverTray = (event) => {\n        if (!canUseHoverOpen(event)) return;\n\n        clearHoverClose();\n        setCardQuickAddHoverOpen(quickAdd, true);\n      };\n\n      const setToggleActive = (event, isActive) => {\n        if (!canUseHoverOpen(event)) return;\n\n        quickAdd.classList.toggle(\"is-toggle-active\", isActive);\n        syncCardQuickAddLayout(quickAdd);\n      };\n\n      const syncSizeHoverState = (event) => {\n        if (!panel || !canUseHoverOpen(event)) return;\n\n        const target = event.target instanceof Element ? event.target : null;\n        const hoveredButton = target?.closest(\".hcx-card-size-button\");\n        const canHoverButton =\n          hoveredButton &&\n          panel.contains(hoveredButton) &&\n          !hoveredButton.matches(\".is-disabled, :disabled, [aria-disabled='true']\");\n\n        panel.querySelectorAll(\".hcx-card-size-button\").forEach((button) => {\n          button.classList.toggle(\"is-size-hovered\", canHoverButton && button === hoveredButton);\n        });\n      };\n\n      const clearSizeHoverState = (event) => {\n        if (event && !canUseHoverOpen(event)) return;\n        clearCardSizeHoverState(quickAdd);\n      };\n\n      const holdHoverTray = (event) => {\n        if (!canUseHoverOpen(event)) return;\n        clearHoverClose();\n        if (\n          quickAdd.classList.contains(\"is-hover-open\") ||\n          quickAdd.classList.contains(\"is-open\") ||\n          quickAdd.classList.contains(\"is-toggle-active\")\n        ) {\n          syncCardQuickAddLayout(quickAdd);\n        }\n      };\n\n      const scheduleHoverClose = (event) => {\n        if (!canUseHoverOpen(event)) return;\n        if (!quickAdd.classList.contains(\"is-hover-open\") || quickAdd.classList.contains(\"is-open\")) return;\n\n        clearHoverClose();\n        hoverCloseTimer = window.setTimeout(() => {\n          hoverCloseTimer = null;\n          if (quickAdd.matches(\":hover\") || panel?.matches(\":hover\") || toggle?.matches(\":hover\")) return;\n\n          setCardQuickAddHoverOpen(quickAdd, false);\n          quickAdd.classList.remove(\"is-toggle-active\");\n          syncCardQuickAddLayout(quickAdd);\n        }, 520);\n      };\n\n      toggle?.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        setCardQuickAddOpen(quickAdd, !quickAdd.classList.contains(\"is-open\"));\n      }, true);\n\n      toggle?.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"Enter\" && event.key !== \" \") return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        quickAdd.classList.add(\"is-toggle-active\");\n        setCardQuickAddOpen(quickAdd, !quickAdd.classList.contains(\"is-open\"));\n      });\n\n      quickAdd.addEventListener(\n        \"click\",\n        (event) => {\n          const eventTarget = event.target instanceof Element ? event.target : event.target?.parentElement;\n          const sizeControl = eventTarget?.closest(\"[data-hcx-card-variant-id]\");\n          if (!sizeControl || !quickAdd.contains(sizeControl)) return;\n\n          event.preventDefault();\n          event.stopPropagation();\n          event.stopImmediatePropagation();\n          addCardQuickVariant(sizeControl);\n        },\n        true\n      );\n\n      quickAdd.addEventListener(\n        \"submit\",\n        (event) => {\n          const submitter = event.submitter instanceof Element ? event.submitter : null;\n          const sizeControl =\n            submitter?.closest(\"[data-hcx-card-variant-id]\") ||\n            (event.target instanceof Element ? event.target.querySelector(\"[data-hcx-card-variant-id]\") : null);\n          if (!sizeControl || !quickAdd.contains(sizeControl)) return;\n\n          event.preventDefault();\n          event.stopPropagation();\n          event.stopImmediatePropagation();\n          addCardQuickVariant(sizeControl);\n        },\n        true\n      );\n\n      toggle?.addEventListener(\"pointerenter\", (event) => {\n        setToggleActive(event, true);\n        openHoverTray(event);\n      });\n      toggle?.addEventListener(\"mouseenter\", (event) => {\n        setToggleActive(event, true);\n        openHoverTray(event);\n      });\n      toggle?.addEventListener(\"pointerleave\", (event) => {\n        setToggleActive(event, false);\n        scheduleHoverClose(event);\n      });\n      toggle?.addEventListener(\"mouseleave\", (event) => {\n        setToggleActive(event, false);\n        scheduleHoverClose(event);\n      });\n      toggle?.addEventListener(\"focus\", () => {\n        quickAdd.classList.add(\"is-toggle-active\");\n        syncCardQuickAddLayout(quickAdd);\n      });\n      toggle?.addEventListener(\"blur\", () => {\n        if (!quickAdd.classList.contains(\"is-open\")) quickAdd.classList.remove(\"is-toggle-active\");\n        syncCardQuickAddLayout(quickAdd);\n      });\n      panel?.addEventListener(\"pointerenter\", openHoverTray);\n      panel?.addEventListener(\"mouseenter\", openHoverTray);\n      quickAdd.addEventListener(\"pointerenter\", holdHoverTray, { passive: true });\n      quickAdd.addEventListener(\"mouseenter\", holdHoverTray, { passive: true });\n      panel?.addEventListener(\"pointerover\", syncSizeHoverState);\n      panel?.addEventListener(\"pointermove\", syncSizeHoverState);\n      panel?.addEventListener(\"mouseover\", syncSizeHoverState);\n      panel?.addEventListener(\"pointerleave\", clearSizeHoverState);\n      panel?.addEventListener(\"mouseleave\", clearSizeHoverState);\n      panel?.addEventListener(\"pointerleave\", scheduleHoverClose);\n      panel?.addEventListener(\"mouseleave\", scheduleHoverClose);\n      panel?.querySelectorAll(\".hcx-card-size-button\").forEach((button) => {\n        button.addEventListener(\"pointerenter\", syncSizeHoverState);\n        button.addEventListener(\"mouseenter\", syncSizeHoverState);\n        button.addEventListener(\"focus\", syncSizeHoverState);\n        button.addEventListener(\"pointerleave\", clearSizeHoverState);\n        button.addEventListener(\"mouseleave\", clearSizeHoverState);\n        button.addEventListener(\"blur\", clearSizeHoverState);\n      });\n      quickAdd.addEventListener(\"pointerleave\", scheduleHoverClose, { passive: true });\n      quickAdd.addEventListener(\"mouseleave\", scheduleHoverClose, { passive: true });\n      syncCardQuickAddLayout(quickAdd);\n    });\n  };\n\n  const initCardQuickAddRefresh = () => {\n    const observeQuickAddContainer = (container) => {\n      if (!container || container.dataset.hcxCardQuickObserver === \"true\") return;\n\n      container.dataset.hcxCardQuickObserver = \"true\";\n      const observer = new MutationObserver(() => {\n        window.requestAnimationFrame(() => {\n          initCardQuickAdds();\n          initHoverRevealScrollbars();\n          initProductLowerRailWheelScroll();\n          initProductLowerRailControls();\n        });\n      });\n\n      observer.observe(container, {\n        childList: true,\n        subtree: true,\n      });\n    };\n\n    observeQuickAddContainer(document.getElementById(\"ProductGridContainer\"));\n    document.querySelectorAll(\"product-recommendations, .related-products, .hcx-recently-viewed\").forEach(observeQuickAddContainer);\n  };\n\n  const closeSearchQuickAdd = (quickAdd) => {\n    if (!quickAdd) return;\n\n    const toggle = quickAdd.querySelector(\"[data-hcx-search-quick-toggle]\");\n    const panel = quickAdd.querySelector(\"[data-hcx-search-size-panel]\");\n    quickAdd.classList.remove(\"is-open\", \"has-error\");\n    toggle?.setAttribute(\"aria-expanded\", \"false\");\n    if (panel) panel.hidden = true;\n  };\n\n  const closeOtherSearchQuickAdds = (currentQuickAdd = null) => {\n    document.querySelectorAll(\"[data-hcx-search-quick-add].is-open\").forEach((quickAdd) => {\n      if (quickAdd !== currentQuickAdd) closeSearchQuickAdd(quickAdd);\n    });\n  };\n\n  const setSearchQuickAddOpen = (quickAdd, isOpen) => {\n    if (!quickAdd) return;\n\n    const toggle = quickAdd.querySelector(\"[data-hcx-search-quick-toggle]\");\n    const panel = quickAdd.querySelector(\"[data-hcx-search-size-panel]\");\n    if (isOpen) closeOtherSearchQuickAdds(quickAdd);\n\n    quickAdd.classList.toggle(\"is-open\", isOpen);\n    toggle?.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    if (panel) panel.hidden = !isOpen;\n  };\n\n  const addSearchQuickVariant = async (control) => {\n    const variantId = control?.dataset?.hcxSearchVariantId;\n    const quickAdd = control?.closest(\"[data-hcx-search-quick-add]\");\n    const cart = document.querySelector(\"cart-notification\") || document.querySelector(\"cart-drawer\");\n    if (\n      !variantId ||\n      !quickAdd ||\n      control.disabled ||\n      control.getAttribute(\"aria-disabled\") === \"true\" ||\n      quickAdd.classList.contains(\"is-loading\")\n    )\n      return;\n\n    quickAdd.classList.remove(\"has-error\");\n    quickAdd.classList.add(\"is-loading\");\n    control.classList.add(\"is-loading\");\n    control.setAttribute(\"aria-busy\", \"true\");\n\n    try {\n      const formData = new FormData();\n      formData.append(\"id\", variantId);\n      formData.append(\"quantity\", \"1\");\n\n      if (cart?.getSectionsToRender) {\n        formData.append(\n          \"sections\",\n          cart.getSectionsToRender().map((section) => section.id)\n        );\n        formData.append(\"sections_url\", window.location.pathname);\n        cart.setActiveElement?.(document.activeElement);\n      }\n\n      const config =\n        typeof fetchConfig === \"function\"\n          ? fetchConfig(\"javascript\")\n          : {\n              method: \"POST\",\n              headers: {\n                Accept: \"application/json\",\n                \"Content-Type\": \"application/json\",\n              },\n            };\n\n      config.headers = {\n        ...config.headers,\n        \"X-Requested-With\": \"XMLHttpRequest\",\n      };\n      delete config.headers[\"Content-Type\"];\n      config.body = formData;\n\n      const response = await fetch(getCardQuickAddUrl(), config);\n      const parsedState = await response.json();\n\n      if (!response.ok || parsedState.status) {\n        throw new Error(parsedState.description || parsedState.message || \"Unable to add this item.\");\n      }\n\n      if (typeof publish === \"function\" && typeof PUB_SUB_EVENTS !== \"undefined\") {\n        publish(PUB_SUB_EVENTS.cartUpdate, {\n          source: \"hcx-search-quick-add\",\n          productVariantId: String(variantId),\n          cartData: parsedState,\n        });\n      }\n\n      closeSearchQuickAdd(quickAdd);\n\n      const searchDetails = quickAdd.closest(\"details[open]\");\n      searchDetails?.removeAttribute(\"open\");\n\n      if (cart?.renderContents && parsedState.sections) {\n        cart.renderContents(parsedState);\n      } else if (!cart && window.routes?.cart_url) {\n        window.location = window.routes.cart_url;\n      }\n    } catch (error) {\n      quickAdd.classList.add(\"has-error\");\n      // Keep the failure visible without adding intrusive copy to the search grid.\n      window.setTimeout(() => quickAdd.classList.remove(\"has-error\"), 1600);\n      console.error(error);\n    } finally {\n      quickAdd.classList.remove(\"is-loading\");\n      control.classList.remove(\"is-loading\");\n      control.removeAttribute(\"aria-busy\");\n    }\n  };\n\n  const initSearchQuickAdds = () => {\n    if (document.documentElement.dataset.hcxSearchQuickBound === \"true\") return;\n    document.documentElement.dataset.hcxSearchQuickBound = \"true\";\n\n    document.addEventListener(\n      \"click\",\n      (event) => {\n        const eventTarget = event.target instanceof Element ? event.target : event.target?.parentElement;\n        if (!eventTarget) return;\n\n        const toggle = eventTarget.closest(\"[data-hcx-search-quick-toggle]\");\n        const sizeControl = eventTarget.closest(\"[data-hcx-search-variant-id]\");\n\n        if (toggle) {\n          event.preventDefault();\n          event.stopPropagation();\n          const quickAdd = toggle.closest(\"[data-hcx-search-quick-add]\");\n          setSearchQuickAddOpen(quickAdd, !quickAdd?.classList.contains(\"is-open\"));\n          return;\n        }\n\n        if (sizeControl) {\n          event.preventDefault();\n          event.stopPropagation();\n          addSearchQuickVariant(sizeControl);\n          return;\n        }\n\n        if (!eventTarget.closest(\"[data-hcx-search-quick-add]\")) closeOtherSearchQuickAdds();\n      },\n      true\n    );\n\n    document.addEventListener(\n      \"pointerup\",\n      (event) => {\n        const eventTarget = event.target instanceof Element ? event.target : event.target?.parentElement;\n        const sizeControl = eventTarget?.closest(\"[data-hcx-search-variant-id]\");\n        if (!sizeControl) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        addSearchQuickVariant(sizeControl);\n      },\n      true\n    );\n\n    document.addEventListener(\"keydown\", (event) => {\n      const eventTarget = event.target instanceof Element ? event.target : event.target?.parentElement;\n      const activeControl = eventTarget?.closest(\"[data-hcx-search-quick-toggle], [data-hcx-search-variant-id]\");\n      if (activeControl && (event.key === \"Enter\" || event.key === \" \")) {\n        event.preventDefault();\n        event.stopPropagation();\n        activeControl.click();\n        return;\n      }\n\n      if (event.key === \"Escape\") closeOtherSearchQuickAdds();\n    });\n  };\n\n  document.addEventListener(\"click\", (event) => {\n    if (!event.target.closest(\"[data-hcx-card-quick-add]\")) closeOtherCardQuickAdds();\n  });\n\n  document.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Escape\") closeOtherCardQuickAdds();\n  });\n\n  document.addEventListener(\"click\", (event) => {\n    const previous = event.target.closest(\"[data-hcx-cart-rec-prev]\");\n    const next = event.target.closest(\"[data-hcx-cart-rec-next]\");\n    if (!previous && !next) return;\n\n    const recommendations = event.target.closest(\".hcx-cart-recommendations\");\n    const rail = recommendations?.querySelector(\"[data-hcx-cart-rec-rail]\");\n    if (!rail) return;\n\n    const direction = next ? 1 : -1;\n    rail.scrollBy({\n      left: direction * Math.max(220, rail.clientWidth * 0.72),\n      behavior: \"smooth\",\n    });\n  });\n\n  document.addEventListener(\n    \"wheel\",\n    (event) => {\n      const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n      const rail = target?.closest(\"[data-hcx-cart-rec-rail]\");\n      if (!rail || rail.scrollWidth <= rail.clientWidth + 1) return;\n\n      const delta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY;\n      if (!delta) return;\n\n      const maxScroll = rail.scrollWidth - rail.clientWidth;\n      const atStart = rail.scrollLeft <= 0;\n      const atEnd = rail.scrollLeft >= maxScroll - 1;\n      if ((delta < 0 && atStart) || (delta > 0 && atEnd)) return;\n\n      event.preventDefault();\n      rail.scrollLeft += delta;\n    },\n    { passive: false }\n  );\n\n  const syncCartRecommendationScrollbar = (recommendations) => {\n    const rail = recommendations?.querySelector(\"[data-hcx-cart-rec-rail]\");\n    const scrollbar = recommendations?.querySelector(\"[data-hcx-cart-rec-scrollbar]\");\n    const thumb = recommendations?.querySelector(\"[data-hcx-cart-rec-thumb]\");\n    if (!rail || !scrollbar || !thumb) return;\n\n    const maxScroll = Math.max(0, rail.scrollWidth - rail.clientWidth);\n    const trackWidth = scrollbar.clientWidth || scrollbar.getBoundingClientRect().width || 0;\n    const isScrollable = maxScroll > 1 && trackWidth > 0;\n\n    recommendations.classList.toggle(\"hcx-cart-recommendations--scrollable\", isScrollable);\n    recommendations.classList.toggle(\"hcx-cart-recommendations--static\", !isScrollable);\n\n    if (!isScrollable) {\n      thumb.style.setProperty(\"--hcx-cart-rec-thumb-width\", \"100%\");\n      thumb.style.setProperty(\"--hcx-cart-rec-thumb-x\", \"0px\");\n      return;\n    }\n\n    const visibleRatio = Math.min(1, rail.clientWidth / rail.scrollWidth);\n    const thumbWidth = Math.max(42, trackWidth * visibleRatio);\n    const maxThumbX = Math.max(0, trackWidth - thumbWidth);\n    const thumbX = (rail.scrollLeft / maxScroll) * maxThumbX;\n\n    thumb.style.setProperty(\"--hcx-cart-rec-thumb-width\", `${thumbWidth}px`);\n    thumb.style.setProperty(\"--hcx-cart-rec-thumb-x\", `${thumbX}px`);\n  };\n\n  const initCartRecommendationScrollbars = () => {\n    document.querySelectorAll(\".hcx-cart-recommendations\").forEach((recommendations) => {\n      const rail = recommendations.querySelector(\"[data-hcx-cart-rec-rail]\");\n      const scrollbar = recommendations.querySelector(\"[data-hcx-cart-rec-scrollbar]\");\n      const thumb = recommendations.querySelector(\"[data-hcx-cart-rec-thumb]\");\n      if (!rail || !scrollbar || !thumb) return;\n\n      const requestSync = () => {\n        if (rail.dataset.hcxCartRecScrollFrame === \"true\") return;\n        rail.dataset.hcxCartRecScrollFrame = \"true\";\n        window.requestAnimationFrame(() => {\n          rail.dataset.hcxCartRecScrollFrame = \"false\";\n          syncCartRecommendationScrollbar(recommendations);\n        });\n      };\n\n      if (scrollbar.dataset.hcxCartRecScrollbarBound !== \"true\") {\n        scrollbar.dataset.hcxCartRecScrollbarBound = \"true\";\n        rail.addEventListener(\"scroll\", requestSync, { passive: true });\n        window.addEventListener(\"resize\", requestSync, { passive: true });\n\n        scrollbar.addEventListener(\"pointerdown\", (event) => {\n          const maxScroll = Math.max(0, rail.scrollWidth - rail.clientWidth);\n          if (maxScroll <= 1) return;\n\n          event.preventDefault();\n          scrollbar.setPointerCapture?.(event.pointerId);\n\n          const moveToPointer = (pointerEvent) => {\n            const rect = scrollbar.getBoundingClientRect();\n            const thumbWidth =\n              Number.parseFloat(getComputedStyle(thumb).getPropertyValue(\"--hcx-cart-rec-thumb-width\")) ||\n              thumb.getBoundingClientRect().width ||\n              1;\n            const travel = Math.max(1, rect.width - thumbWidth);\n            const targetX = Math.min(Math.max(pointerEvent.clientX - rect.left - thumbWidth / 2, 0), travel);\n            rail.scrollLeft = (targetX / travel) * maxScroll;\n            syncHomeFeaturedDropSlider(section);\n          };\n\n          const stopDragging = (pointerEvent) => {\n            scrollbar.releasePointerCapture?.(pointerEvent.pointerId);\n            scrollbar.removeEventListener(\"pointermove\", moveToPointer);\n            scrollbar.removeEventListener(\"pointerup\", stopDragging);\n            scrollbar.removeEventListener(\"pointercancel\", stopDragging);\n          };\n\n          scrollbar.addEventListener(\"pointermove\", moveToPointer);\n          scrollbar.addEventListener(\"pointerup\", stopDragging);\n          scrollbar.addEventListener(\"pointercancel\", stopDragging);\n          moveToPointer(event);\n        });\n      }\n\n      requestSync();\n    });\n\n    if (html.dataset.hcxCartRecObserverBound !== \"true\" && \"MutationObserver\" in window) {\n      html.dataset.hcxCartRecObserverBound = \"true\";\n      new MutationObserver(() => window.requestAnimationFrame(initCartRecommendationScrollbars)).observe(document.body, {\n        childList: true,\n        subtree: true,\n      });\n    }\n  };\n\n  const normalizeText = (value) => value.replace(/\\s+/g, \" \").trim().toLowerCase();\n\n  const removeCareCartAttribution = (root = document.body) => {\n    if (!root || typeof Node === \"undefined\") return;\n\n    const cleanTextNode = (node) => {\n      let nextValue = node.nodeValue.replace(/\\s*\\bby\\s+CareCart\\b\\.?/gi, \"\").replace(/\\s{2,}/g, \" \");\n      if (/^\\s*CareCart\\.?\\s*$/i.test(nextValue)) nextValue = \"\";\n      if (nextValue !== node.nodeValue) node.nodeValue = nextValue.trimStart();\n    };\n\n    const hideCreditElement = (element) => {\n      const text = normalizeText(element.textContent || \"\");\n      if (text === \"by carecart\" || text === \"carecart\") element.hidden = true;\n    };\n\n    if (root.nodeType === Node.TEXT_NODE) {\n      cleanTextNode(root);\n      return;\n    }\n\n    if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE].includes(root.nodeType)) return;\n\n    if (typeof HTMLElement !== \"undefined\" && root instanceof HTMLElement) hideCreditElement(root);\n    if (root.querySelectorAll) root.querySelectorAll(\"*\").forEach(hideCreditElement);\n\n    if (!document.createTreeWalker || typeof NodeFilter === \"undefined\") return;\n\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    let node = walker.nextNode();\n    while (node) {\n      cleanTextNode(node);\n      node = walker.nextNode();\n    }\n  };\n\n  const initCareCartAttributionCleaner = () => {\n    if (!document.body || !(\"MutationObserver\" in window)) {\n      removeCareCartAttribution(document.body);\n      return;\n    }\n\n    if (html.dataset.hcxCareCartAttributionCleaner === \"true\") {\n      removeCareCartAttribution(document.body);\n      return;\n    }\n\n    html.dataset.hcxCareCartAttributionCleaner = \"true\";\n    removeCareCartAttribution(document.body);\n\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === \"characterData\") {\n          removeCareCartAttribution(mutation.target);\n          return;\n        }\n\n        mutation.addedNodes.forEach(removeCareCartAttribution);\n      });\n    });\n\n    observer.observe(document.body, { childList: true, characterData: true, subtree: true });\n  };\n\n  const sizeButtonText = \"SELECT A SIZE\";\n  const selectedSizes = new Map();\n  let pendingSelectedSize = \"\";\n  let pendingSelectedSizeAt = 0;\n\n  const getSizeFieldset = (productInfo) =>\n    productInfo\n      ? [...productInfo.querySelectorAll(\"variant-selects fieldset.product-form__input\")].find((fieldset) => {\n          const legend = fieldset.querySelector(\"legend\");\n          return legend && normalizeText(legend.textContent).startsWith(\"size\");\n        })\n      : null;\n\n  const getProductSubmitButton = (productInfo) => productInfo.querySelector(\".product-form__submit\");\n\n  document.addEventListener(\"click\", (event) => {\n    const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n    const trigger = target?.closest(\".hcx-product-size-note__link\");\n    const opener = trigger ? trigger.closest(\"modal-opener[data-modal]\") : null;\n    if (!trigger || !opener) return;\n\n    const modal = document.querySelector(opener.getAttribute(\"data-modal\"));\n    if (!modal || typeof modal.show !== \"function\") return;\n\n    event.preventDefault();\n    modal.show(trigger);\n  }, true);\n\n  const initLinkedColourHoverLabels = () => {\n    const getColourTile = (event) => {\n      const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n      return target?.closest(\".hcx-linked-colour\") || null;\n    };\n\n    const getColourName = (tile) =>\n      tile?.dataset.hcxColourLabel ||\n      tile?.getAttribute(\"aria-label\") ||\n      tile?.querySelector(\".hcx-swatch-value\")?.textContent?.trim() ||\n      \"\";\n\n    const getColourValueElement = (tile) => tile?.closest(\".hcx-linked-colours\")?.querySelector(\"[data-selected-value]\") || null;\n\n    const showColourForTile = (tile) => {\n      const valueElement = getColourValueElement(tile);\n      const colourName = getColourName(tile);\n      if (!tile || !valueElement || !colourName) return;\n\n      const fieldset = tile.closest(\".hcx-linked-colours\");\n      if (!fieldset.dataset.hcxSelectedColour) fieldset.dataset.hcxSelectedColour = valueElement.textContent.trim();\n      valueElement.textContent = colourName;\n    };\n\n    const restoreColourForTile = (tile) => {\n      const fieldset = tile.closest(\".hcx-linked-colours\");\n      const valueElement = fieldset?.querySelector(\"[data-selected-value]\");\n      if (!fieldset || !valueElement) return;\n\n      valueElement.textContent = fieldset.dataset.hcxSelectedColour || valueElement.textContent.trim();\n    };\n\n    const setHoveredColour = (event) => showColourForTile(getColourTile(event));\n\n    const restoreSelectedColour = (event) => {\n      const tile = getColourTile(event);\n      const relatedTarget = event.relatedTarget instanceof Node ? event.relatedTarget : null;\n      if (!tile || (relatedTarget && tile.contains(relatedTarget))) return;\n      restoreColourForTile(tile);\n    };\n\n    if (html.dataset.hcxLinkedColourHoverLabels !== \"true\") {\n      html.dataset.hcxLinkedColourHoverLabels = \"true\";\n      document.addEventListener(\"pointerover\", setHoveredColour);\n      document.addEventListener(\"pointerout\", restoreSelectedColour);\n      document.addEventListener(\"mouseover\", setHoveredColour);\n      document.addEventListener(\"mouseout\", restoreSelectedColour);\n      document.addEventListener(\"focusin\", setHoveredColour);\n      document.addEventListener(\"focusout\", restoreSelectedColour);\n    }\n\n    document.querySelectorAll(\".hcx-linked-colour\").forEach((tile) => {\n      if (tile.dataset.hcxColourHoverBound === \"true\") return;\n      tile.dataset.hcxColourHoverBound = \"true\";\n      tile.addEventListener(\"pointerenter\", () => showColourForTile(tile));\n      tile.addEventListener(\"pointerleave\", () => restoreColourForTile(tile));\n      tile.addEventListener(\"mouseenter\", () => showColourForTile(tile));\n      tile.addEventListener(\"mouseleave\", () => restoreColourForTile(tile));\n      tile.addEventListener(\"focus\", () => showColourForTile(tile));\n      tile.addEventListener(\"blur\", () => restoreColourForTile(tile));\n    });\n  };\n\n  const getProductSizeKey = (productInfo) => productInfo.dataset.productId || productInfo.dataset.url || window.location.pathname;\n\n  const getCurrentProductPrice = (productInfo) => {\n    const priceElement =\n      productInfo.querySelector(\".price--on-sale .price-item--sale\") ||\n      productInfo.querySelector(\".price__regular .price-item--regular\") ||\n      productInfo.querySelector(\".price-item--last\") ||\n      productInfo.querySelector(\".price-item\");\n\n    return priceElement?.textContent.replace(/\\s+/g, \" \").replace(/\\s+[A-Z]{3}\\b/g, \"\").trim() || \"\";\n  };\n\n  const getAddToCartText = (productInfo, button) => {\n    return (button.dataset.hcxOriginalText || window.variantStrings?.addToCart || \"ADD TO CART\")\n      .replace(/\\s*-\\s*(?:\\u00a3|GBP\\s*)?\\d+(?:[.,]\\d{2})?\\s*$/i, \"\")\n      .trim()\n      .toUpperCase();\n  };\n\n  const lockAddToCartForSize = (productInfo) => {\n    const button = getProductSubmitButton(productInfo);\n    const label = button?.querySelector(\"span\");\n    if (!button || !label) return;\n\n    if (!button.dataset.hcxOriginalText) button.dataset.hcxOriginalText = normalizeText(label.textContent).includes(\"select a size\") ? \"ADD TO CART\" : label.textContent.trim();\n    button.dataset.hcxSizeLocked = \"true\";\n    button.classList.add(\"hcx-size-required\");\n    button.setAttribute(\"disabled\", \"disabled\");\n    button.setAttribute(\"aria-disabled\", \"true\");\n    label.textContent = sizeButtonText;\n  };\n\n  const unlockAddToCartForSize = (productInfo) => {\n    const button = getProductSubmitButton(productInfo);\n    const label = button?.querySelector(\"span\");\n    if (!button || !label) return;\n\n    button.classList.remove(\"hcx-size-required\");\n    button.removeAttribute(\"disabled\");\n    button.removeAttribute(\"aria-disabled\");\n    label.textContent = getAddToCartText(productInfo, button);\n    delete button.dataset.hcxSizeLocked;\n  };\n\n  const clearSelectedVariantInput = (productInfo) => {\n    productInfo\n      .querySelectorAll(`#product-form-${productInfo.dataset.section}, #product-form-installment-${productInfo.dataset.section}`)\n      .forEach((form) => {\n        const input = form.querySelector('input[name=\"id\"]');\n        if (!input || input.value === \"\") return;\n\n        input.value = \"\";\n        input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      });\n  };\n\n  const hasChosenSize = (productInfo) => {\n    const sizeFieldset = getSizeFieldset(productInfo);\n    return (\n      productInfo.dataset.hcxSizeSelected === \"true\" &&\n      Boolean(sizeFieldset?.querySelector(\"input[type='radio']:checked:not(:disabled)\"))\n    );\n  };\n\n  const getProductVariantData = (productInfo) => {\n    if (!productInfo) return null;\n    if (productInfo.hcxVariantData) return productInfo.hcxVariantData;\n\n    const script = productInfo.querySelector(\"script[data-hcx-viewed-product-variants]\");\n    if (!script?.textContent) return null;\n\n    try {\n      productInfo.hcxVariantData = JSON.parse(script.textContent);\n      return productInfo.hcxVariantData;\n    } catch (error) {\n      console.warn(\"Unable to read product variant data.\", error);\n      return null;\n    }\n  };\n\n  const getSelectedProductOptions = (productInfo) => {\n    const variantSelects = productInfo?.querySelector(\"variant-selects\");\n    if (!variantSelects) return [];\n\n    return [...variantSelects.querySelectorAll(\".product-form__input\")].map((optionGroup) => {\n      const select = optionGroup.querySelector(\"select\");\n      if (select) return select.value;\n\n      const checkedInput = optionGroup.querySelector(\"input[type='radio']:checked\");\n      return checkedInput?.value || \"\";\n    });\n  };\n\n  const getSelectedProductVariant = (productInfo) => {\n    const variantData = getProductVariantData(productInfo);\n    const selectedOptions = getSelectedProductOptions(productInfo);\n    if (!variantData?.variants?.length || !selectedOptions.length) return null;\n\n    return (\n      variantData.variants.find((variant) => {\n        if (!Array.isArray(variant.options) || variant.options.length !== selectedOptions.length) return false;\n        return variant.options.every((optionValue, index) => optionValue === selectedOptions[index]);\n      }) || null\n    );\n  };\n\n  const syncSelectedVariantInput = (productInfo) => {\n    const variant = getSelectedProductVariant(productInfo);\n    if (!variant?.id) return null;\n\n    productInfo\n      .querySelectorAll(`#product-form-${productInfo.dataset.section}, #product-form-installment-${productInfo.dataset.section}`)\n      .forEach((form) => {\n        const input = form.querySelector('input[name=\"id\"]');\n        if (!input || input.value === String(variant.id)) return;\n\n        input.value = variant.id;\n        input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      });\n\n    const saveButton = productInfo.querySelector(\"[data-hcx-save-product]\");\n    if (saveButton) saveButton.dataset.productVariantId = String(variant.id);\n\n    return variant;\n  };\n\n  const restoreSelectedSize = (productInfo) => {\n    const sizeFieldset = getSizeFieldset(productInfo);\n    const selectedSize =\n      selectedSizes.get(getProductSizeKey(productInfo)) ||\n      (Date.now() - pendingSelectedSizeAt < 6000 ? pendingSelectedSize : \"\");\n    if (!sizeFieldset || !selectedSize) return false;\n\n    const selectedInput = [...sizeFieldset.querySelectorAll(\"input[type='radio']\")].find(\n      (input) => input.value === selectedSize\n    );\n\n    if (!selectedInput) return false;\n    if (selectedInput.disabled) return false;\n\n    selectedInput.checked = true;\n    selectedInput.setAttribute(\"checked\", \"checked\");\n    productInfo.dataset.hcxSizeSelected = \"true\";\n    selectedSizes.set(getProductSizeKey(productInfo), selectedSize);\n    return true;\n  };\n\n  const refreshSizeGate = (productInfo) => {\n    const sizeFieldset = getSizeFieldset(productInfo);\n    if (!sizeFieldset) return;\n\n    restoreSelectedSize(productInfo);\n\n    if (hasChosenSize(productInfo)) {\n      const variant = syncSelectedVariantInput(productInfo);\n      if (variant?.available) {\n        unlockAddToCartForSize(productInfo);\n      } else {\n        lockAddToCartForSize(productInfo);\n      }\n      return;\n    }\n\n    sizeFieldset.querySelectorAll(\"input[type='radio']:checked\").forEach((input) => {\n      input.checked = false;\n      input.removeAttribute(\"checked\");\n    });\n    clearSelectedVariantInput(productInfo);\n    lockAddToCartForSize(productInfo);\n  };\n\n  const initRequiredSizeSelection = (productInfo) => {\n    if (!productInfo || productInfo.dataset.hcxSizeGateBound === \"true\") return;\n\n    productInfo.dataset.hcxSizeGateBound = \"true\";\n    productInfo.dataset.hcxSizeSelected = \"false\";\n\n    productInfo.addEventListener(\n      \"change\",\n      (event) => {\n        const sizeFieldset = getSizeFieldset(productInfo);\n        if (!sizeFieldset || !sizeFieldset.contains(event.target) || event.target.type !== \"radio\") return;\n        if (event.target.disabled) return;\n\n        productInfo.dataset.hcxSizeSelected = \"true\";\n        selectedSizes.set(getProductSizeKey(productInfo), event.target.value);\n        pendingSelectedSize = event.target.value;\n        pendingSelectedSizeAt = Date.now();\n        const variant = syncSelectedVariantInput(productInfo);\n        if (variant?.available) {\n          unlockAddToCartForSize(productInfo);\n        } else {\n          lockAddToCartForSize(productInfo);\n        }\n      },\n      true\n    );\n\n    productInfo.addEventListener(\n      \"submit\",\n      (event) => {\n        if (hasChosenSize(productInfo)) {\n          const variant = syncSelectedVariantInput(productInfo);\n          if (variant?.available) {\n            unlockAddToCartForSize(productInfo);\n            return;\n          }\n        }\n\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        refreshSizeGate(productInfo);\n\n        const firstSizeInput =\n          getSizeFieldset(productInfo)?.querySelector(\"input[type='radio']:not(:disabled)\") ||\n          getSizeFieldset(productInfo)?.querySelector(\"input[type='radio']\");\n        firstSizeInput?.focus({ preventScroll: true });\n      },\n      true\n    );\n\n    const observer = new MutationObserver(() => window.requestAnimationFrame(() => refreshSizeGate(productInfo)));\n    observer.observe(productInfo, { childList: true, subtree: true });\n\n    refreshSizeGate(productInfo);\n  };\n\n  const initAllRequiredSizeSelections = () => {\n    document.querySelectorAll(\"product-info\").forEach(initRequiredSizeSelection);\n  };\n\n  const sizeRank = [\"XXS\", \"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\", \"3XL\"];\n  const fitSizeRank = [\"S\", \"M\", \"L\", \"XL\", \"XXL\", \"3XL\"];\n  const defaultFitMeasurements = {\n    bottom: {\n      S: { primary: '30-32\"', secondary: \"76 CM\" },\n      M: { primary: '32-34\"', secondary: \"77 CM\" },\n      L: { primary: '34-36\"', secondary: \"78 CM\" },\n      XL: { primary: '36-38\"', secondary: \"79 CM\" },\n      XXL: { primary: '38-40\"', secondary: \"80 CM\" },\n      \"3XL\": { primary: '40-42\"', secondary: \"81 CM\" },\n    },\n    short: {\n      S: { primary: '30-32\"', secondary: \"44 CM\" },\n      M: { primary: '32-34\"', secondary: \"46 CM\" },\n      L: { primary: '34-36\"', secondary: \"48 CM\" },\n      XL: { primary: '36-38\"', secondary: \"50 CM\" },\n      XXL: { primary: '38-40\"', secondary: \"52 CM\" },\n      \"3XL\": { primary: '40-42\"', secondary: \"54 CM\" },\n    },\n    tank: {\n      S: { primary: \"43 CM\", secondary: \"66 CM\" },\n      M: { primary: \"45 CM\", secondary: \"68 CM\" },\n      L: { primary: \"47 CM\", secondary: \"70 CM\" },\n      XL: { primary: \"49 CM\", secondary: \"72 CM\" },\n      XXL: { primary: \"51 CM\", secondary: \"74 CM\" },\n      \"3XL\": { primary: \"53 CM\", secondary: \"76 CM\" },\n    },\n    hoodie: {\n      XS: { primary: \"57 CM\", secondary: \"65 CM\" },\n      S: { primary: \"60 CM\", secondary: \"67 CM\" },\n      M: { primary: \"63 CM\", secondary: \"69 CM\" },\n      L: { primary: \"66 CM\", secondary: \"71 CM\" },\n      XL: { primary: \"69 CM\", secondary: \"73 CM\" },\n      XXL: { primary: \"72 CM\", secondary: \"75 CM\" },\n      \"3XL\": { primary: \"75 CM\", secondary: \"77 CM\" },\n    },\n    top: {\n      XS: { primary: \"51 CM\", secondary: \"68 CM\" },\n      S: { primary: \"54 CM\", secondary: \"70 CM\" },\n      M: { primary: \"57 CM\", secondary: \"72 CM\" },\n      L: { primary: \"60 CM\", secondary: \"74 CM\" },\n      XL: { primary: \"63 CM\", secondary: \"76 CM\" },\n      XXL: { primary: \"66 CM\", secondary: \"78 CM\" },\n      \"3XL\": { primary: \"69 CM\", secondary: \"80 CM\" },\n    },\n  };\n\n  const normalizeSizeValue = (value = \"\") => {\n    const cleaned = String(value)\n      .toUpperCase()\n      .replace(/\\bEXTRA EXTRA EXTRA LARGE\\b/g, \"3XL\")\n      .replace(/\\bEXTRA EXTRA LARGE\\b/g, \"XXL\")\n      .replace(/\\bEXTRA LARGE\\b/g, \"XL\")\n      .replace(/\\bLARGE\\b/g, \"L\")\n      .replace(/\\bMEDIUM\\b/g, \"M\")\n      .replace(/\\bSMALL\\b/g, \"S\")\n      .replace(/\\b2XL\\b/g, \"XXL\")\n      .replace(/\\bXXXL\\b/g, \"3XL\")\n      .replace(/[^A-Z0-9]/g, \"\");\n\n    return sizeRank.find((size) => cleaned === size) || cleaned;\n  };\n\n  const isStripedSportSweatpantsProfile = (...parts) => {\n    const profile = parts\n      .filter(Boolean)\n      .map((part) => String(part).toLowerCase())\n      .join(\" \");\n    const normalizedProfile = profile.replace(/[^a-z0-9]+/g, \" \");\n\n    return (\n      normalizedProfile.includes(\"sport oversized sweatpants\") ||\n      normalizedProfile.includes(\"striped sport\") ||\n      normalizedProfile.includes(\"stripe sweatpant\") ||\n      normalizedProfile.includes(\"striped sweatpant\")\n    );\n  };\n\n  const getSizeRankIndex = (size) => {\n    const index = sizeRank.indexOf(normalizeSizeValue(size));\n    return index >= 0 ? index : 2;\n  };\n\n  const clampSizeIndex = (index) => Math.max(0, Math.min(sizeRank.length - 1, index));\n\n  const isFitSizeInRange = (size) => fitSizeRank.includes(normalizeSizeValue(size));\n\n  const getClosestFitSize = (size, allowedSizes = fitSizeRank) => {\n    const sizes = fitSizeRank.filter((candidate) => allowedSizes.includes(candidate));\n    if (!sizes.length) return \"\";\n\n    const normalizedSize = normalizeSizeValue(size);\n    if (sizes.includes(normalizedSize)) return normalizedSize;\n\n    const targetIndex = getSizeRankIndex(normalizedSize);\n    return sizes\n      .slice()\n      .sort((a, b) => {\n        const distance = Math.abs(getSizeRankIndex(a) - targetIndex) - Math.abs(getSizeRankIndex(b) - targetIndex);\n        return distance || getSizeRankIndex(a) - getSizeRankIndex(b);\n      })[0];\n  };\n\n  const getClosestFitSizeAtOrAbove = (size, allowedSizes = fitSizeRank) => {\n    const sizes = fitSizeRank.filter((candidate) => allowedSizes.includes(candidate));\n    if (!sizes.length) return \"\";\n\n    const targetIndex = getSizeRankIndex(size);\n    return sizes.find((candidate) => getSizeRankIndex(candidate) >= targetIndex) || sizes[sizes.length - 1];\n  };\n\n  const getLargestFitSize = (sizes = [], allowedSizes = fitSizeRank) => {\n    const candidates = sizes.map(normalizeSizeValue).filter((size) => allowedSizes.includes(size));\n    if (!candidates.length) return \"\";\n\n    return candidates\n      .slice()\n      .sort((a, b) => getSizeRankIndex(b) - getSizeRankIndex(a))[0];\n  };\n\n  const getProductSizeOptions = (productInfo) => {\n    const fieldset = getSizeFieldset(productInfo);\n    if (!fieldset) return [];\n    const seenSizes = new Set();\n\n    return [...fieldset.querySelectorAll(\"input[type='radio']\")]\n      .map((input) => ({\n        raw: input.value,\n        size: normalizeSizeValue(input.value),\n        input,\n        available: !input.disabled && !input.classList.contains(\"disabled\"),\n        missing: input.dataset.hcxMissingSize === \"true\" || input.classList.contains(\"hcx-size-missing\"),\n      }))\n      .filter((item) => {\n        if (!item.size || !isFitSizeInRange(item.size) || item.missing || seenSizes.has(item.size)) return false;\n        seenSizes.add(item.size);\n        return true;\n      });\n  };\n\n  const getProductFitSizes = (productInfo) => {\n    const fieldset = getSizeFieldset(productInfo);\n    if (!fieldset) return fitSizeRank.slice();\n\n    const productSizes = getProductSizeOptions(productInfo).map((item) => item.size);\n    if (!productSizes.length) return [];\n\n    return fitSizeRank.filter((size) => productSizes.includes(size));\n  };\n\n  const getProductFitRows = (rows = [], productInfo) => {\n    const fitSizes = new Set(getProductFitSizes(productInfo));\n    return rows.filter((row) => fitSizes.has(normalizeSizeValue(row.size)));\n  };\n\n  const getAvailableProductSizes = (productInfo) => {\n    return getProductSizeOptions(productInfo).filter((item) => item.available);\n  };\n\n  const getProductDisplaySizeLabel = (productInfo, size = \"\") => {\n    const normalizedSize = normalizeSizeValue(size);\n    const productSize = getProductSizeOptions(productInfo).find((item) => item.size === normalizedSize);\n    const rawSize = String(productSize?.raw || size || \"\").trim();\n\n    if (/^2xl$/i.test(rawSize)) return \"2XL\";\n    if (/^xxxl$/i.test(rawSize)) return \"3XL\";\n    return rawSize || normalizedSize;\n  };\n\n  const toMeasurementNumber = (value = \"\") => {\n    const text = String(value).replace(/,/g, \".\");\n    const matches = [...text.matchAll(/(\\d+(?:\\.\\d+)?)/g)].map((match) => Number(match[1]));\n    if (!matches.length) return null;\n    return matches.reduce((sum, number) => sum + number, 0) / matches.length;\n  };\n\n  const getTableHeaders = (table) => {\n    const explicitHeaders = [...table.querySelectorAll(\"thead th, thead td\")].map((cell) => normalizeText(cell.textContent || \"\"));\n    if (explicitHeaders.length) return explicitHeaders;\n\n    const firstRow = table.querySelector(\"tr\");\n    return firstRow ? [...firstRow.children].map((cell) => normalizeText(cell.textContent || \"\")) : [];\n  };\n\n  const getProductSizeGuideKeywords = (widget) => {\n    const genericWords = new Set([\n      \"hercxles\",\n      \"the\",\n      \"and\",\n      \"for\",\n      \"with\",\n      \"size\",\n      \"guide\",\n      \"oversized\",\n      \"regular\",\n      \"classic\",\n      \"heavyweight\",\n      \"shirt\",\n      \"tshirt\",\n      \"tee\",\n      \"hoodie\",\n      \"sweatpant\",\n      \"sweatpants\",\n      \"jogger\",\n      \"pants\",\n      \"short\",\n      \"shorts\",\n    ]);\n    const source = `${widget.dataset.productTitle || \"\"} ${widget.dataset.productHandle || \"\"}`;\n\n    return normalizeText(source)\n      .split(/[^a-z0-9]+/)\n      .map((word) => word.replace(/[^a-z0-9]/g, \"\"))\n      .filter((word, index, words) => word.length > 2 && !genericWords.has(word) && words.indexOf(word) === index);\n  };\n\n  const getClosestTableHeadings = (table) => {\n    const chunks = [];\n    const caption = table.querySelector(\"caption\");\n    if (caption) chunks.push(caption.textContent || \"\");\n\n    [\"aria-label\", \"data-product\", \"data-product-handle\", \"data-size-guide\"].forEach((attribute) => {\n      if (table.hasAttribute(attribute)) chunks.push(table.getAttribute(attribute) || \"\");\n    });\n\n    let previous = table.previousElementSibling;\n    let steps = 0;\n    while (previous && steps < 5) {\n      if (/^H[1-6]$/.test(previous.tagName) || previous.matches(\"p, strong\")) {\n        chunks.push(previous.textContent || \"\");\n      }\n      previous = previous.previousElementSibling;\n      steps += 1;\n    }\n\n    let parent = table.parentElement;\n    let parentSteps = 0;\n    while (parent && parentSteps < 4 && !parent.matches(\".hcx-size-guide-modal__content\")) {\n      [\"aria-label\", \"data-product\", \"data-product-handle\", \"data-size-guide\"].forEach((attribute) => {\n        if (parent.hasAttribute(attribute)) chunks.push(parent.getAttribute(attribute) || \"\");\n      });\n\n      const heading = [...parent.children].find((child) => {\n        if (!/^H[1-6]$/.test(child.tagName)) return false;\n        return child.compareDocumentPosition(table) & Node.DOCUMENT_POSITION_FOLLOWING;\n      });\n      if (heading) chunks.push(heading.textContent || \"\");\n\n      parent = parent.parentElement;\n      parentSteps += 1;\n    }\n\n    return normalizeText(chunks.join(\" \"));\n  };\n\n  const getTableContextText = (table) => {\n    return normalizeText(`${getClosestTableHeadings(table)} ${table.textContent || \"\"}`);\n  };\n\n  const scoreSizeGuideTable = (table, widget) => {\n    const text = getTableContextText(table);\n    const headingText = getClosestTableHeadings(table);\n    const headers = getTableHeaders(table).join(\" \");\n    const title = normalizeText(widget.dataset.productTitle || \"\");\n    const handle = normalizeText(widget.dataset.productHandle || \"\");\n    const profile = `${title} ${handle} ${normalizeText(widget.dataset.fitLabel || \"\")}`;\n    const keywords = getProductSizeGuideKeywords(widget);\n    const kind = widget.dataset.productKind || \"top\";\n    let baseScore = 0;\n    let productScore = 0;\n    let kindScore = 0;\n\n    if (headers.includes(\"size\")) baseScore += 4;\n    if (headers.includes(\"cm\") || text.includes(\"cm\")) baseScore += 3;\n    if (/(chest|pit|width|waist|inseam|outseam|length|body|hip|seat)/.test(headers)) baseScore += 3;\n\n    if (title && headingText.includes(title)) productScore += 12;\n    if (handle && headingText.includes(handle)) productScore += 12;\n    keywords.forEach((word) => {\n      if (headingText.includes(word)) productScore += 5;\n      else if (text.includes(word)) productScore += 2;\n    });\n\n    if (profile.includes(\"oversized\") && headingText.includes(\"oversized\")) productScore += 4;\n    if (/\\b(?:cuffed|cuff|jogger|athletic|athletics)\\b/.test(profile) && /\\b(?:cuffed|cuff|jogger|athletic|athletics)\\b/.test(headingText)) {\n      productScore += 3;\n    }\n\n    const productInfoSelector = widget.dataset.productInfo;\n    const productInfo = widget.closest(\"product-info\") || (productInfoSelector ? document.querySelector(productInfoSelector) : null);\n    const productSizes = productInfo ? getProductFitSizes(productInfo) : [];\n    const tableSizes = parseAnySizeGuideTable(table)?.rows?.map((row) => normalizeSizeValue(row.size)).filter(Boolean) || [];\n    if (productSizes.length && tableSizes.length) {\n      const coveredSizes = productSizes.filter((size) => tableSizes.includes(size));\n      const missingSizes = productSizes.filter((size) => !tableSizes.includes(size));\n\n      if (coveredSizes.length === productSizes.length) productScore += 4;\n      else if (coveredSizes.length) productScore += Math.min(2, coveredSizes.length / productSizes.length * 2);\n      if (missingSizes.includes(\"XXL\")) productScore -= 3;\n    }\n\n    if (kind === \"hoodie\" && /hoodie|sweatshirt|jumper|top/.test(text)) kindScore += 4;\n    if (kind === \"tank\" && /tank|vest|sleeveless|top/.test(text)) kindScore += 4;\n    if (kind === \"top\" && /t-shirt|tee|top|shirt/.test(text)) kindScore += 4;\n    if (kind === \"bottom\" && /sweatpant|jogger|pants|bottom|trouser/.test(text)) kindScore += 4;\n    if (kind === \"short\" && /short/.test(text)) kindScore += 4;\n\n    return {\n      baseScore,\n      productScore,\n      kindScore,\n      total: baseScore + productScore + kindScore,\n    };\n  };\n\n  const parseSizeGuideTable = (table) => {\n    const headers = getTableHeaders(table);\n    if (!headers.length) return null;\n\n    const sizeIndex = Math.max(0, headers.findIndex((header) => header.includes(\"size\")));\n    const hasExplicitHeaders = Boolean(table.querySelector(\"thead th, thead td\"));\n    const rows = [...table.querySelectorAll(\"tbody tr\")];\n    const allRows = [...table.querySelectorAll(\"tr\")];\n    const sourceRows = hasExplicitHeaders ? (rows.length ? rows : allRows) : allRows.slice(1);\n\n    const parsedRows = sourceRows\n      .map((row) => {\n        const cells = [...row.children];\n        const rawSize = cells[sizeIndex]?.textContent?.trim() || \"\";\n        const size = normalizeSizeValue(rawSize);\n        if (!size || size === \"SIZE\" || (!sizeRank.includes(size) && !/^\\d{2,3}$/.test(size))) return null;\n\n        const metrics = headers.map((header, index) => {\n          const label = cells[index]?.textContent?.replace(/\\s+/g, \" \").trim() || \"\";\n          const displayHeader = header || `column ${index + 1}`;\n\n          return normalizeFitMeasurementMetric({\n            header: displayHeader,\n            displayHeader,\n            label,\n            value: toMeasurementNumber(label),\n          });\n        });\n\n        return { size, rawSize, metrics };\n      })\n      .filter(Boolean);\n\n    if (!parsedRows.length) return null;\n    return { headers, rows: parsedRows };\n  };\n\n  const parseTransposedSizeGuideTable = (table) => {\n    const allRows = [...table.querySelectorAll(\"tr\")].map((row) => [...row.children]);\n    if (allRows.length < 2) return null;\n\n    const firstRow = allRows[0].map((cell) => normalizeText(cell.textContent || \"\"));\n    const sizeColumns = firstRow\n      .map((header, index) => ({ size: normalizeSizeValue(header), index }))\n      .filter((item) => item.index > 0 && item.size && sizeRank.includes(item.size));\n\n    if (!sizeColumns.length) return null;\n\n    const parsedRows = sizeColumns\n      .map(({ size, index }) => {\n        const metrics = allRows.slice(1).map((row, rowIndex) => {\n          const header = normalizeText(row[0]?.textContent || `row ${rowIndex + 1}`);\n          const label = row[index]?.textContent?.replace(/\\s+/g, \" \").trim() || \"\";\n\n          return normalizeFitMeasurementMetric({\n            header,\n            displayHeader: row[0]?.textContent?.replace(/\\s+/g, \" \").trim() || header,\n            label,\n            value: toMeasurementNumber(label),\n          });\n        });\n\n        return { size, rawSize: allRows[0][index]?.textContent?.trim() || size, metrics };\n      })\n      .filter((row) => row.metrics.some((metric) => metric.value !== null));\n\n    if (!parsedRows.length) return null;\n    return { headers: [\"size\", ...allRows.slice(1).map((row) => normalizeText(row[0]?.textContent || \"\"))], rows: parsedRows };\n  };\n\n  const parseAnySizeGuideTable = (table) => parseSizeGuideTable(table) || parseTransposedSizeGuideTable(table);\n\n  const normalizeFitUnit = (unit = \"\") => {\n    const cleaned = String(unit).toLowerCase();\n    return cleaned.includes(\"in\") ? \"inch\" : \"cm\";\n  };\n\n  const getFitMeasurementUnitFromText = (value = \"\") => {\n    const text = String(value).toLowerCase();\n    if (/\\bcm\\b|centimet(?:er|re)/i.test(text)) return \"cm\";\n    if (/\"|\\bin\\b|inch|inches/i.test(text)) return \"inch\";\n    return \"\";\n  };\n\n  const getFitMeasurementNumbers = (value = \"\") =>\n    [...String(value).replace(/,/g, \".\").matchAll(/(\\d+(?:\\.\\d+)?)/g)].map((match) => Number(match[1]));\n\n  const formatFitMeasurementNumber = (value, unit) => {\n    if (!Number.isFinite(value)) return \"\";\n    if (normalizeFitUnit(unit) === \"cm\") return String(Math.round(value));\n\n    const rounded = Math.round(value * 2) / 2;\n    return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1);\n  };\n\n  const formatFitMeasurementValue = (numbers = [], unit) => {\n    const normalizedUnit = normalizeFitUnit(unit);\n    const values = numbers.map((number) => formatFitMeasurementNumber(number, normalizedUnit)).filter(Boolean);\n    if (!values.length) return \"\";\n\n    const suffix = normalizedUnit === \"inch\" ? '\"' : \" CM\";\n    return `${values.join(\"-\")}${suffix}`;\n  };\n\n  const ensureFitMeasurementUnitSuffix = (value, unit) => {\n    const text = String(value || \"\").replace(/\\s+/g, \" \").trim();\n    if (!text) return \"\";\n\n    const normalizedUnit = normalizeFitUnit(unit);\n    if (getFitMeasurementUnitFromText(text) === normalizedUnit) {\n      return normalizedUnit === \"cm\" ? text.replace(/\\s*cm\\b/gi, \" CM\") : text;\n    }\n\n    return `${text}${normalizedUnit === \"inch\" ? '\"' : \" CM\"}`;\n  };\n\n  const convertFitMeasurementValue = (value, fromUnit, toUnit) => {\n    const normalizedFromUnit = normalizeFitUnit(fromUnit);\n    const normalizedToUnit = normalizeFitUnit(toUnit);\n    const numbers = getFitMeasurementNumbers(value);\n    if (!numbers.length) return \"\";\n\n    const converted = numbers.map((number) =>\n      normalizedFromUnit === normalizedToUnit\n        ? number\n        : normalizedToUnit === \"cm\"\n          ? number * 2.54\n          : number / 2.54\n    );\n\n    return formatFitMeasurementValue(converted, normalizedToUnit);\n  };\n\n  const normalizeFitMeasurementMetric = (metric) => {\n    const headerText = `${metric?.displayHeader || \"\"} ${metric?.header || \"\"}`;\n    const labelText = String(metric?.label || \"\").replace(/\\s+/g, \" \").trim();\n    const existingUnits = metric?.units || {};\n    const sourceUnit =\n      metric?.valueUnit ||\n      getFitMeasurementUnitFromText(`${labelText} ${headerText}`) ||\n      (isFilledMeasurement(existingUnits.cm) ? \"cm\" : \"\") ||\n      (isFilledMeasurement(existingUnits.inch) ? \"inch\" : \"\");\n\n    if (!sourceUnit) return metric;\n\n    const normalizedSourceUnit = normalizeFitUnit(sourceUnit);\n    let cm = String(existingUnits.cm || \"\").replace(/\\s+/g, \" \").trim();\n    let inch = String(existingUnits.inch || \"\").replace(/\\s+/g, \" \").trim();\n\n    if (!cm && normalizedSourceUnit === \"cm\") {\n      cm = formatFitMeasurementValue(getFitMeasurementNumbers(labelText), \"cm\") || labelText;\n    }\n    if (!inch && normalizedSourceUnit === \"inch\") {\n      inch = formatFitMeasurementValue(getFitMeasurementNumbers(labelText), \"inch\") || labelText;\n    }\n    if (!cm && inch) cm = convertFitMeasurementValue(inch, \"inch\", \"cm\");\n    if (!inch && cm) inch = convertFitMeasurementValue(cm, \"cm\", \"inch\");\n    if (isFilledMeasurement(cm)) cm = ensureFitMeasurementUnitSuffix(cm, \"cm\");\n    if (isFilledMeasurement(inch)) inch = ensureFitMeasurementUnitSuffix(inch, \"inch\");\n\n    return {\n      ...metric,\n      label: normalizedSourceUnit === \"inch\" ? inch || labelText : cm || labelText,\n      value: Number.isFinite(Number(metric?.value)) ? metric.value : toMeasurementNumber(labelText),\n      valueUnit: normalizedSourceUnit,\n      units: { inch, cm },\n    };\n  };\n\n  const normalizeFitSizeGuideUnits = (data) => {\n    if (!data?.rows?.length) return data;\n\n    const rows = data.rows.map((row) => ({\n      ...row,\n      metrics: row.metrics.map((metric) => normalizeFitMeasurementMetric(metric)),\n    }));\n    const hasUnitToggle = rows.some((row) =>\n      row.metrics.some((metric) => isFilledMeasurement(metric?.units?.inch) && isFilledMeasurement(metric?.units?.cm))\n    );\n\n    return {\n      ...data,\n      rows,\n      hasUnitToggle: Boolean(data.hasUnitToggle || hasUnitToggle),\n    };\n  };\n\n  const getEmbeddedProductSizeGuide = (widget) => {\n    const modal = document.querySelector(widget.dataset.sizeGuideModal || \".hcx-size-guide-modal\");\n    const script = modal?.querySelector(\"[data-hcx-product-size-chart]\");\n    if (!script?.textContent?.trim()) return null;\n\n    try {\n      const payload = JSON.parse(script.textContent);\n      const sizes = Array.isArray(payload.sizes) ? payload.sizes.map(normalizeSizeValue).filter(Boolean) : [];\n      const measurements = Array.isArray(payload.measurements) ? payload.measurements : [];\n      if (!sizes.length || !measurements.length) return null;\n\n      const rows = sizes\n        .map((size) => {\n          const metrics = measurements\n            .map((measurement) => {\n              const rawLabel = String(measurement.label || \"\").replace(/\\s+/g, \" \").trim();\n              if (!rawLabel) return null;\n\n              const values = measurement.values?.[size] || measurement.values?.[size.replace(\"XXL\", \"2XL\")] || {};\n              const inch = String(values.inch || \"\").replace(/\\s+/g, \" \").trim();\n              const cm = String(values.cm || \"\").replace(/\\s+/g, \" \").trim();\n              if (!inch && !cm) return null;\n\n              return normalizeFitMeasurementMetric({\n                header: normalizeText(rawLabel),\n                displayHeader: rawLabel,\n                label: cm || inch,\n                value: toMeasurementNumber(cm || inch),\n                valueUnit: cm ? \"cm\" : \"inch\",\n                units: { inch, cm },\n              });\n            })\n            .filter(Boolean);\n\n          return metrics.length ? { size, rawSize: size, metrics } : null;\n        })\n        .filter(Boolean);\n\n      if (!rows.length) return null;\n\n      return normalizeFitSizeGuideUnits({\n        headers: [\"size\", ...measurements.map((measurement) => normalizeText(measurement.label || \"\"))],\n        rows,\n        source: \"Size chart\",\n        hasUnitToggle: true,\n      });\n    } catch (_error) {\n      return null;\n    }\n  };\n\n  const getSizeGuideData = (widget) => {\n    const embedded = getEmbeddedProductSizeGuide(widget);\n    if (embedded) return embedded;\n\n    const modal = document.querySelector(widget.dataset.sizeGuideModal || \".hcx-size-guide-modal\");\n    const tables = modal ? [...modal.querySelectorAll(\"table\")].filter((table) => !widget.contains(table)) : [];\n    const rankedTables = tables\n      .map((table) => ({ table, score: scoreSizeGuideTable(table, widget) }))\n      .sort((a, b) => b.score.total - a.score.total);\n    const parsedTables = rankedTables\n      .map((candidate) => ({ ...candidate, parsed: parseAnySizeGuideTable(candidate.table) }))\n      .filter((candidate) => candidate.parsed);\n    const hasProductSpecificMatch = parsedTables.some((candidate) => candidate.score.productScore > 0);\n\n    for (const candidate of parsedTables) {\n      if (candidate.score.baseScore >= 6 && candidate.score.productScore > 0) {\n        return normalizeFitSizeGuideUnits({ ...candidate.parsed, source: \"Size guide\" });\n      }\n    }\n\n    if (!hasProductSpecificMatch) {\n      for (const candidate of parsedTables) {\n        if (candidate.score.baseScore >= 6 && candidate.score.kindScore > 0) {\n          return normalizeFitSizeGuideUnits({ ...candidate.parsed, source: \"Size guide\" });\n        }\n      }\n    }\n\n    const fallbackTable = widget.querySelector(\"[data-hcx-fit-measurements-table]\");\n    const fallback = fallbackTable ? parseAnySizeGuideTable(fallbackTable) : null;\n    return fallback ? normalizeFitSizeGuideUnits({ ...fallback, source: \"Garment guide\" }) : null;\n  };\n\n  const hasUsableMetricValue = (metric, requireValue = true) => {\n    if (!metric) return false;\n    if (requireValue) return metric.value !== null;\n    return Boolean(metric.header || metric.label);\n  };\n\n  const isFilledMeasurement = (value = \"\") => {\n    const text = String(value).replace(/\\s+/g, \" \").trim();\n    return Boolean(text && text !== \"-\" && text !== \"\u2014\" && !/^n\\/?a$/i.test(text));\n  };\n\n  const getPrimaryMetric = (row, kind, requireValue = true) => {\n    const priority =\n      kind === \"bottom\" || kind === \"short\"\n        ? [\"waist\", \"hip\", \"seat\"]\n        : [\"chest\", \"pit\", \"width\", \"bust\"];\n\n    for (const key of priority) {\n      const metric = row.metrics.find((item) => item.header.includes(key) && hasUsableMetricValue(item, requireValue));\n      if (metric) return metric;\n    }\n\n    return row.metrics.find((item) => hasUsableMetricValue(item, requireValue) && !item.header.includes(\"size\")) || null;\n  };\n\n  const getSecondaryMetric = (row, kind, requireValue = true) => {\n    const priority =\n      kind === \"bottom\"\n        ? [\"inseam\", \"inside leg\", \"length\"]\n        : kind === \"short\"\n          ? [\"outseam\", \"length\"]\n          : [\"length\", \"body\"];\n\n    for (const key of priority) {\n      const metric = row.metrics.find((item) => item.header.includes(key) && hasUsableMetricValue(item, requireValue));\n      if (metric) return metric;\n    }\n\n    return null;\n  };\n\n  const getSleeveMetric = (row, requireValue = true) => {\n    const priority = [\"sleeve length\", \"sleeve\", \"arm length\", \"arm\"];\n\n    for (const key of priority) {\n      const metric = row.metrics.find((item) => {\n        const header = item.header || \"\";\n        return !header.includes(\"sleeveless\") && header.includes(key) && hasUsableMetricValue(item, requireValue);\n      });\n      if (metric) return metric;\n    }\n\n    return null;\n  };\n\n  const getDefaultMeasurement = (kind, size, type) => {\n    const normalizedKind = defaultFitMeasurements[kind] ? kind : \"top\";\n    return defaultFitMeasurements[normalizedKind]?.[normalizeSizeValue(size)]?.[type] || \"\";\n  };\n\n  const getFallbackMetricLabel = (row, type, kind, fallbackData) => {\n    const fallbackRow = fallbackData?.rows?.find((item) => item.size === row.size);\n    const fallbackMetric = fallbackRow ? (type === \"primary\" ? getPrimaryMetric(fallbackRow, kind) : getSecondaryMetric(fallbackRow, kind)) : null;\n    if (isFilledMeasurement(fallbackMetric?.label)) return fallbackMetric.label;\n\n    return getDefaultMeasurement(kind, row.size, type);\n  };\n\n  const resolveMetricLabel = (row, metric, type, kind, fallbackData) => {\n    if (isFilledMeasurement(metric?.label)) return metric.label;\n    return getFallbackMetricLabel(row, type, kind, fallbackData) || \"\";\n  };\n\n  const getUnitMetricLabel = (metric, unit) => {\n    const normalizedUnit = normalizeFitUnit(unit);\n    const preferred = metric?.units?.[normalizedUnit] || \"\";\n    if (isFilledMeasurement(preferred)) return preferred;\n    const fallback = normalizedUnit === \"cm\" ? metric?.units?.inch : metric?.units?.cm;\n    if (isFilledMeasurement(fallback)) return fallback;\n    return metric?.label || \"\";\n  };\n\n  const getMetricHeading = (metric, fallback, unit, hasUnitToggle, clarifyFlatWidth = false) => {\n    const label = String(metric?.displayHeader || metric?.header || fallback || \"\")\n      .replace(/\\s*\\((?:cm|in|inch|inches)\\)\\s*/gi, \" \")\n      .replace(/\\b(?:cm|inch|inches)\\b/gi, \" \")\n      .replace(/\\s+/g, \" \")\n      .trim();\n    const formatted = String(label || fallback || \"\")\n      .replace(/\\b\\w/g, (letter) => letter.toUpperCase())\n      .replace(/\\bCm\\b/g, \"CM\")\n      .replace(/\\bInch\\b/g, \"IN\");\n    const clarified = clarifyFlatWidth\n      ? /\\bflat\\b/i.test(formatted)\n        ? formatted\n        : /\\bwidth\\b/i.test(formatted)\n          ? `${formatted} (Flat)`\n          : `${formatted} Width (Flat)`\n      : formatted;\n\n    return hasUnitToggle ? `${clarified} (${normalizeFitUnit(unit) === \"inch\" ? \"IN\" : \"CM\"})` : clarified;\n  };\n\n  const renderFitMeasurements = (widget, data, productInfo) => {\n    if (!data) return;\n\n    const source = widget.querySelector(\"[data-hcx-fit-measurements-source]\");\n    const table = widget.querySelector(\"[data-hcx-fit-measurements-table]\");\n    const body = widget.querySelector(\"[data-hcx-fit-measurements-body]\");\n    if (!table || !body) return;\n\n    const kind = widget.dataset.productKind || \"top\";\n    const unit = normalizeFitUnit(widget.dataset.hcxFitUnit || \"cm\");\n    const fallbackTable = widget.querySelector(\"[data-hcx-fit-measurements-table]\");\n    const fallbackData = fallbackTable ? parseAnySizeGuideTable(fallbackTable) : null;\n    const displayRows = getProductFitRows(data.rows, productInfo);\n    const firstRow = displayRows[0] || data.rows.find((row) => isFitSizeInRange(row.size)) || data.rows[0];\n    const primary = firstRow ? getPrimaryMetric(firstRow, kind, false) : null;\n    const secondary = firstRow ? getSecondaryMetric(firstRow, kind, false) : null;\n    const sleeve = firstRow && kind !== \"bottom\" && kind !== \"short\" ? getSleeveMetric(firstRow, false) : null;\n    const showSleeve = Boolean(sleeve && displayRows.some((row) => getSleeveMetric(row, false)));\n    const headingRow = table.querySelector(\"thead tr\");\n    const hasUnitToggle = Boolean(data.hasUnitToggle);\n    const unitToggle = widget.querySelector(\"[data-hcx-fit-unit-toggle]\");\n\n    if (source) source.textContent = data.source;\n    if (unitToggle) {\n      unitToggle.hidden = !hasUnitToggle;\n      unitToggle.querySelectorAll(\"[data-hcx-fit-unit]\").forEach((button) => {\n        button.classList.toggle(\"is-active\", normalizeFitUnit(button.dataset.hcxFitUnit) === unit);\n        button.setAttribute(\"aria-pressed\", normalizeFitUnit(button.dataset.hcxFitUnit) === unit ? \"true\" : \"false\");\n      });\n    }\n\n    if (headingRow) {\n      headingRow.replaceChildren();\n      [\n        \"Size\",\n        getMetricHeading(\n          primary,\n          kind === \"bottom\" || kind === \"short\" ? \"Waist\" : \"Chest\",\n          unit,\n          hasUnitToggle,\n          isFlatGarmentMeasurement(primary, kind)\n        ),\n        getMetricHeading(secondary, kind === \"short\" ? \"Outseam\" : \"Length\", unit, hasUnitToggle),\n        ...(showSleeve ? [getMetricHeading(sleeve, \"Sleeve length\", unit, hasUnitToggle)] : []),\n      ].forEach((label) => {\n        const th = document.createElement(\"th\");\n        th.textContent = label;\n        headingRow.appendChild(th);\n      });\n    }\n\n    body.replaceChildren();\n    displayRows.slice(0, 6).forEach((row) => {\n      const tr = document.createElement(\"tr\");\n      const primaryMetric = getPrimaryMetric(row, kind, false);\n      const secondaryMetric = getSecondaryMetric(row, kind, false);\n      const sleeveMetric = showSleeve ? getSleeveMetric(row, false) : null;\n      [\n        getProductDisplaySizeLabel(productInfo, row.size || row.rawSize) || row.rawSize || row.size,\n        hasUnitToggle\n          ? getUnitMetricLabel(primaryMetric, unit)\n          : resolveMetricLabel(row, primaryMetric, \"primary\", kind, fallbackData),\n        hasUnitToggle\n          ? getUnitMetricLabel(secondaryMetric, unit)\n          : resolveMetricLabel(row, secondaryMetric, \"secondary\", kind, fallbackData),\n        ...(showSleeve\n          ? [\n              hasUnitToggle\n                ? getUnitMetricLabel(sleeveMetric, unit)\n                : resolveMetricLabel(row, sleeveMetric, \"sleeve\", kind, fallbackData),\n            ]\n          : []),\n      ].forEach((value) => {\n        const td = document.createElement(\"td\");\n        td.textContent = value || \"\";\n        tr.appendChild(td);\n      });\n      body.appendChild(tr);\n    });\n  };\n\n  const clampNumber = (value, min, max) => Math.max(min, Math.min(max, value));\n\n  const getFitPreferenceAdjustedSize = (size, preference, allowedSizes = fitSizeRank) => {\n    const sizes = fitSizeRank.filter((candidate) => allowedSizes.includes(candidate));\n    if (!size || !sizes.length) return size || \"\";\n\n    const normalizedSize = getClosestFitSizeAtOrAbove(size, sizes);\n    const currentIndex = sizes.indexOf(normalizedSize);\n    if (currentIndex < 0) return normalizedSize;\n\n    const offset = preference === \"fitted\" || preference === \"neat\" ? -1 : preference === \"roomy\" ? 1 : 0;\n    return sizes[clampNumber(currentIndex + offset, 0, sizes.length - 1)] || normalizedSize;\n  };\n\n  const getFitPreferenceSizeOffset = (preference) => {\n    if (preference === \"fitted\" || preference === \"neat\") return -0.45;\n    if (preference === \"roomy\") return 0.45;\n    return 0;\n  };\n\n  const getBodyMassIndex = (height, weight) => {\n    const meters = height / 100;\n    return meters > 0 ? weight / (meters * meters) : 0;\n  };\n\n  const getAverageBodyScale = (height, weight) => {\n    const referenceMassPerHeight = 78 / 178;\n    const massPerHeight = height > 0 ? weight / height : 0;\n    return massPerHeight > 0 ? Math.sqrt(massPerHeight / referenceMassPerHeight) : 0;\n  };\n\n  const estimateChestCircumference = (height, weight) =>\n    clampNumber(102 * getAverageBodyScale(height, weight), 78, 148);\n\n  const estimateWaistCircumference = (height, weight) => {\n    const bmi = getBodyMassIndex(height, weight);\n    const bmiAdjustment = clampNumber((bmi - 24) * 0.9, -4, 12);\n    return clampNumber(86 * getAverageBodyScale(height, weight) + bmiAdjustment, 66, 142);\n  };\n\n  const estimateHipCircumference = (height, weight) =>\n    clampNumber(estimateWaistCircumference(height, weight) + 10, 82, 152);\n\n  const getBodyFallbackSize = (height, weight, preference, allowedSizes = fitSizeRank, kind = \"top\") => {\n    const isLowerBody = kind === \"bottom\" || kind === \"short\";\n    const bodyMeasurement = isLowerBody\n      ? estimateWaistCircumference(height, weight)\n      : estimateChestCircumference(height, weight);\n    const referenceMeasurements = isLowerBody\n      ? [78, 84, 90, 98, 106, 114]\n      : [92, 98, 104, 112, 120, 128];\n    let targetIndex = referenceMeasurements\n      .map((measurement, index) => ({ index, distance: Math.abs(measurement - bodyMeasurement) }))\n      .sort((a, b) => a.distance - b.distance || a.index - b.index)[0]?.index || 0;\n\n    if (height >= 198) targetIndex += 2;\n    else if (height >= 188) targetIndex += 1;\n\n    const bodyTarget = fitSizeRank[clampNumber(targetIndex, 0, fitSizeRank.length - 1)];\n    const availableTarget = getClosestFitSize(bodyTarget, allowedSizes);\n    return getFitPreferenceAdjustedSize(availableTarget, preference, allowedSizes);\n  };\n\n  const getMetricPreferenceOffset = (preference, kind, metric, isFlatMeasurement = false) => {\n    const header = metric?.header || \"\";\n    const direction = preference === \"fitted\" || preference === \"neat\" ? -1 : preference === \"roomy\" ? 1 : 0;\n    if (!direction) return 0;\n\n    if (kind === \"bottom\" || kind === \"short\") {\n      if (/waist|hip|seat/.test(header)) {\n        const bottomEase = preference === \"roomy\" ? 1.85 : 1;\n        return direction * (isFlatMeasurement ? bottomEase : bottomEase * 2);\n      }\n      if (/inseam|inside leg|outseam|length/.test(header)) return direction * 0.35;\n      return direction * 0.75;\n    }\n\n    if (/length|body/.test(header)) return direction * 0.5;\n    return direction * (isFlatMeasurement ? 1.4 : 2.8);\n  };\n\n  const isMetricInInches = (metric) => {\n    if (metric?.valueUnit) return normalizeFitUnit(metric.valueUnit) === \"inch\";\n    if (isFilledMeasurement(metric?.units?.cm)) return false;\n    const unitText = `${metric?.displayHeader || \"\"} ${metric?.header || \"\"} ${metric?.label || \"\"} ${metric?.units?.inch || \"\"}`;\n    return /\"|(?:^|\\s)in(?:\\s|$)|inch|inches/i.test(unitText);\n  };\n\n  const isFlatGarmentMeasurement = (metric, kind = \"top\") => {\n    const value = Number(metric?.value || 0);\n    if (!(value > 0)) return false;\n\n    const header = `${metric?.displayHeader || \"\"} ${metric?.header || \"\"}`.toLowerCase();\n    if (/circumference|around|body\\s*(?:chest|bust|waist|hip)|to\\s*fit/.test(header)) return false;\n    if (/length|inseam|inside leg|outseam/.test(header)) return false;\n    if (/flat|half|pit(?:\\s*to\\s*pit)?|width|across/.test(header)) return true;\n\n    const labelNumbers = getFitMeasurementNumbers(metric?.label || \"\");\n    if (labelNumbers.length > 1) return false;\n\n    const valueInCm = isMetricInInches(metric) ? value * 2.54 : value;\n    if (kind === \"bottom\" || kind === \"short\") {\n      return /waist|hip|seat/.test(header) && valueInCm < 70;\n    }\n\n    return /chest|bust/.test(header) ? valueInCm < 90 : valueInCm < 70;\n  };\n\n  const convertCmTargetToMetricUnit = (targetCm, metric) => (isMetricInInches(metric) ? targetCm / 2.54 : targetCm);\n\n  const getIntendedGarmentEase = (kind, fitProfile = \"\") => {\n    const profile = String(fitProfile).toLowerCase();\n    const isOversized = /oversized|oversize|loose|relaxed|boxy|drop shoulder/.test(profile);\n    const isFitted = /fitted|slim|compression/.test(profile);\n\n    if (kind === \"hoodie\") return isOversized ? 34 : isFitted ? 12 : 20;\n    if (kind === \"tank\") return isOversized ? 16 : isFitted ? 4 : 8;\n    return isOversized ? 24 : isFitted ? 6 : 10;\n  };\n\n  const estimateTargetMeasurement = (height, weight, preference, kind, metric, fitProfile = \"\") => {\n    const header = metric?.header || \"\";\n    const isFlatMeasurement = isFlatGarmentMeasurement(metric, kind);\n\n    if (kind === \"bottom\" || kind === \"short\") {\n      if (/inseam|inside leg|outseam|length/.test(header)) {\n        const lengthRatio = kind === \"short\" ? 0.265 : header.includes(\"inseam\") || header.includes(\"inside leg\") ? 0.44 : 0.595;\n        return convertCmTargetToMetricUnit(\n          height * lengthRatio + getMetricPreferenceOffset(preference, kind, metric, isFlatMeasurement),\n          metric\n        );\n      }\n\n      const waist = estimateWaistCircumference(height, weight);\n      const hip = estimateHipCircumference(height, weight);\n      if (isFlatMeasurement) {\n        if (/hip|seat/.test(header)) {\n          const hipEase = /oversized|oversize|loose|relaxed|wide/.test(String(fitProfile).toLowerCase()) ? 16 : 10;\n          return convertCmTargetToMetricUnit(\n            (hip + hipEase) / 2 + getMetricPreferenceOffset(preference, kind, metric, true),\n            metric\n          );\n        }\n\n        const elasticAllowance = kind === \"short\" ? 10 : 14;\n        return convertCmTargetToMetricUnit(\n          (waist - elasticAllowance) / 2 + getMetricPreferenceOffset(preference, kind, metric, true),\n          metric\n        );\n      }\n\n      const circumference = /hip|seat/.test(header) ? hip : waist;\n      return convertCmTargetToMetricUnit(\n        circumference + getMetricPreferenceOffset(preference, kind, metric, false),\n        metric\n      );\n    }\n\n    if (/length|body/.test(header)) {\n      const ratio = kind === \"hoodie\" ? 0.395 : kind === \"tank\" ? 0.393 : 0.405;\n      return convertCmTargetToMetricUnit(\n        height * ratio + getMetricPreferenceOffset(preference, kind, metric, isFlatMeasurement),\n        metric\n      );\n    }\n\n    const chest = estimateChestCircumference(height, weight);\n    const garmentEase = getIntendedGarmentEase(kind, fitProfile);\n    if (isFlatMeasurement) {\n      return convertCmTargetToMetricUnit(\n        (chest + garmentEase) / 2 + getMetricPreferenceOffset(preference, kind, metric, true),\n        metric\n      );\n    }\n\n    return convertCmTargetToMetricUnit(chest + garmentEase + getMetricPreferenceOffset(preference, kind, metric, false), metric);\n  };\n\n  const getMetricStep = (rows, metricResolver) => {\n    const values = rows\n      .map((row) => Number(metricResolver(row)?.value))\n      .filter((value) => Number.isFinite(value))\n      .sort((a, b) => a - b);\n    const steps = values\n      .slice(1)\n      .map((value, index) => Math.abs(value - values[index]))\n      .filter((value) => value > 0);\n\n    if (!steps.length) return 1;\n    return clampNumber(steps.sort((a, b) => a - b)[Math.floor(steps.length / 2)], 1, 8);\n  };\n\n  const hasNumericFitMetric = (metric) => metric?.value !== null && Number.isFinite(Number(metric?.value));\n\n  const getMeasuredFitRecommendation = (rows, kind, height, weight, preference, fallbackSize, fitProfile = \"\") => {\n    const primaryStep = getMetricStep(rows, (row) => getPrimaryMetric(row, kind));\n    const secondaryStep = getMetricStep(rows, (row) => getSecondaryMetric(row, kind));\n    const fallbackIndex = getSizeRankIndex(fallbackSize);\n\n    const scoredRows = rows\n      .map((row) => {\n        const primary = getPrimaryMetric(row, kind);\n        const secondary = getSecondaryMetric(row, kind);\n        const hasPrimary = hasNumericFitMetric(primary);\n        const hasSecondary = hasNumericFitMetric(secondary);\n        if (!hasPrimary && !hasSecondary) return null;\n\n        const primaryTarget = hasPrimary\n          ? estimateTargetMeasurement(height, weight, preference, kind, primary, fitProfile)\n          : null;\n        const secondaryTarget = hasSecondary\n          ? estimateTargetMeasurement(height, weight, preference, kind, secondary, fitProfile)\n          : null;\n        const primaryScore =\n          primaryTarget === null ? 0 : Math.abs(primary.value - primaryTarget) / primaryStep;\n        const secondaryWeight =\n          (kind === \"bottom\" || kind === \"short\") && /inseam|inside leg|outseam|length/.test(secondary?.header || \"\")\n            ? 0.9\n            : 0.62;\n        const secondaryScore =\n          secondaryTarget === null ? 0 : (Math.abs(secondary.value - secondaryTarget) / secondaryStep) * secondaryWeight;\n        const fallbackScore = Math.abs(getSizeRankIndex(row.size) - fallbackIndex) * 0.12;\n\n        return {\n          row,\n          score: primaryScore + secondaryScore + fallbackScore,\n        };\n      })\n      .filter(Boolean)\n      .sort((a, b) => {\n        const scoreDistance = a.score - b.score;\n        if (Math.abs(scoreDistance) > 0.08) return scoreDistance;\n        if (preference === \"roomy\") return getSizeRankIndex(b.row.size) - getSizeRankIndex(a.row.size);\n        if (preference === \"fitted\" || preference === \"neat\") return getSizeRankIndex(a.row.size) - getSizeRankIndex(b.row.size);\n        return getSizeRankIndex(a.row.size) - getSizeRankIndex(b.row.size);\n      });\n\n    return scoredRows[0]?.row.size || fallbackSize;\n  };\n\n  const syncFitInputSystems = (widget) => {\n    if (!widget) return;\n\n    const heightSystem = widget.dataset.hcxFitHeightSystem === \"metric\" ? \"metric\" : \"imperial\";\n    const weightSystem = widget.dataset.hcxFitWeightSystem === \"imperial\" ? \"imperial\" : \"metric\";\n    widget.dataset.hcxFitHeightSystem = heightSystem;\n    widget.dataset.hcxFitWeightSystem = weightSystem;\n\n    const heightImperial = widget.querySelector(\"[data-hcx-fit-height-imperial]\");\n    const heightMetric = widget.querySelector(\"[data-hcx-fit-height-metric]\");\n    const weightMetric = widget.querySelector(\"[data-hcx-fit-weight-metric]\");\n    const weightImperial = widget.querySelector(\"[data-hcx-fit-weight-imperial]\");\n\n    if (heightImperial) heightImperial.hidden = heightSystem !== \"imperial\";\n    if (heightMetric) heightMetric.hidden = heightSystem !== \"metric\";\n    if (weightMetric) weightMetric.hidden = weightSystem !== \"metric\";\n    if (weightImperial) weightImperial.hidden = weightSystem !== \"imperial\";\n\n    widget.querySelectorAll(\"[data-hcx-fit-height-system]\").forEach((button) => {\n      const isActive = button.dataset.hcxFitHeightSystem === heightSystem;\n      button.classList.toggle(\"is-active\", isActive);\n      button.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n    });\n\n    widget.querySelectorAll(\"[data-hcx-fit-weight-system]\").forEach((button) => {\n      const isActive = button.dataset.hcxFitWeightSystem === weightSystem;\n      button.classList.toggle(\"is-active\", isActive);\n      button.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n    });\n  };\n\n  const getFitHeightInCm = (widget) => {\n    const heightSystem = widget.dataset.hcxFitHeightSystem === \"metric\" ? \"metric\" : \"imperial\";\n    if (heightSystem === \"metric\") {\n      const existingCm = Number(widget.querySelector(\"[data-hcx-fit-height]\")?.value || 0);\n      return existingCm > 0 ? existingCm : 0;\n    }\n\n    const feet = Number(widget.querySelector(\"[data-hcx-fit-height-ft]\")?.value || 0);\n    const inches = Number(widget.querySelector(\"[data-hcx-fit-height-in]\")?.value || 0);\n    const totalInches = feet * 12 + inches;\n\n    return totalInches > 0 ? Math.round(totalInches * 2.54) : 0;\n  };\n\n  const getFitWeightInKg = (widget) => {\n    const weightSystem = widget.dataset.hcxFitWeightSystem === \"imperial\" ? \"imperial\" : \"metric\";\n    if (weightSystem === \"imperial\") {\n      const pounds = Number(widget.querySelector(\"[data-hcx-fit-weight-lb]\")?.value || 0);\n      return pounds > 0 ? pounds * 0.45359237 : 0;\n    }\n\n    return Number(widget.querySelector(\"[data-hcx-fit-weight]\")?.value || 0);\n  };\n\n  const setFitHeightSystem = (widget, nextSystem) => {\n    if (!widget) return;\n\n    const normalizedNextSystem = nextSystem === \"metric\" ? \"metric\" : \"imperial\";\n    const currentSystem = widget.dataset.hcxFitHeightSystem === \"metric\" ? \"metric\" : \"imperial\";\n    const heightCm = currentSystem === normalizedNextSystem ? 0 : getFitHeightInCm(widget);\n    widget.dataset.hcxFitHeightSystem = normalizedNextSystem;\n\n    if (heightCm > 0) {\n      if (normalizedNextSystem === \"metric\") {\n        const heightInput = widget.querySelector(\"[data-hcx-fit-height]\");\n        if (heightInput) heightInput.value = String(Math.round(heightCm));\n      } else {\n        const totalInches = Math.max(0, Math.round(heightCm / 2.54));\n        const feetInput = widget.querySelector(\"[data-hcx-fit-height-ft]\");\n        const inchesInput = widget.querySelector(\"[data-hcx-fit-height-in]\");\n        if (feetInput) feetInput.value = String(Math.floor(totalInches / 12));\n        if (inchesInput) inchesInput.value = String(totalInches % 12);\n      }\n    }\n\n    syncFitInputSystems(widget);\n  };\n\n  const setFitWeightSystem = (widget, nextSystem) => {\n    if (!widget) return;\n\n    const normalizedNextSystem = nextSystem === \"imperial\" ? \"imperial\" : \"metric\";\n    const currentSystem = widget.dataset.hcxFitWeightSystem === \"imperial\" ? \"imperial\" : \"metric\";\n    const weightKg = currentSystem === normalizedNextSystem ? 0 : getFitWeightInKg(widget);\n    widget.dataset.hcxFitWeightSystem = normalizedNextSystem;\n\n    if (weightKg > 0) {\n      if (normalizedNextSystem === \"imperial\") {\n        const poundsInput = widget.querySelector(\"[data-hcx-fit-weight-lb]\");\n        if (poundsInput) poundsInput.value = String(Math.round(weightKg / 0.45359237));\n      } else {\n        const weightInput = widget.querySelector(\"[data-hcx-fit-weight]\");\n        if (weightInput) weightInput.value = String(Math.round(weightKg));\n      }\n    }\n\n    syncFitInputSystems(widget);\n  };\n\n  const getClosestAvailableSize = (productInfo, recommendedSize) => {\n    const available = getAvailableProductSizes(productInfo);\n    if (!available.length) return recommendedSize;\n\n    const exact = available.find((item) => item.size === normalizeSizeValue(recommendedSize));\n    if (exact) return exact.size;\n\n    const targetIndex = getSizeRankIndex(recommendedSize);\n    return available\n      .slice()\n      .sort((a, b) => Math.abs(getSizeRankIndex(a.size) - targetIndex) - Math.abs(getSizeRankIndex(b.size) - targetIndex))[0].size;\n  };\n\n  const recommendFitSize = (widget, productInfo) => {\n    const height = getFitHeightInCm(widget);\n    const weight = getFitWeightInKg(widget);\n    const preference = widget.querySelector(\"input[name^='hcx-fit-preference']:checked\")?.value || \"intended\";\n    const kind = widget.dataset.productKind || \"top\";\n\n    if (!height || !weight) return null;\n\n    const productSizes = getProductFitSizes(productInfo);\n    if (!productSizes.length) return null;\n\n    const data = getSizeGuideData(widget);\n    const baselinePreference = \"intended\";\n    const fitProfile = `${widget.dataset.fitLabel || \"\"} ${widget.dataset.productTitle || \"\"}`;\n    const fallbackSize = getBodyFallbackSize(height, weight, baselinePreference, productSizes, kind);\n    let recommendedSize = fallbackSize;\n    let source = \"body profile\";\n\n    if (data?.rows?.length) {\n      const productRows = getProductFitRows(data.rows, productInfo);\n      const measuredRows = productRows\n        .filter((row) => hasNumericFitMetric(getPrimaryMetric(row, kind)) || hasNumericFitMetric(getSecondaryMetric(row, kind)));\n\n      if (measuredRows.length) {\n        recommendedSize = getMeasuredFitRecommendation(\n          measuredRows,\n          kind,\n          height,\n          weight,\n          baselinePreference,\n          fallbackSize,\n          fitProfile\n        );\n        source = data.source.toLowerCase();\n      } else if (productRows.some((row) => row.size === fallbackSize)) {\n        recommendedSize = fallbackSize;\n        source = data.source.toLowerCase();\n      }\n    }\n\n    recommendedSize = getClosestFitSizeAtOrAbove(recommendedSize, productSizes);\n    recommendedSize = getFitPreferenceAdjustedSize(recommendedSize, preference, productSizes);\n\n    const availableMatch = getAvailableProductSizes(productInfo).find((item) => item.size === normalizeSizeValue(recommendedSize));\n\n    return {\n      size: recommendedSize,\n      source,\n      preference,\n      canApply: Boolean(availableMatch),\n    };\n  };\n\n  const applyRecommendedSize = (productInfo, size) => {\n    const fieldset = getSizeFieldset(productInfo);\n    if (!fieldset || !size) return false;\n\n    const normalizedSize = normalizeSizeValue(size);\n    const input = [...fieldset.querySelectorAll(\"input[type='radio']\")].find((candidate) => {\n      const label = candidate.id ? fieldset.querySelector(`label[for='${CSS.escape(candidate.id)}']`) : null;\n      return normalizeSizeValue(candidate.value) === normalizedSize || normalizeSizeValue(label?.textContent || \"\") === normalizedSize;\n    });\n\n    if (!input || input.disabled || input.classList.contains(\"disabled\")) return false;\n\n    input.checked = true;\n    input.setAttribute(\"checked\", \"checked\");\n    productInfo.dataset.hcxSizeSelected = \"true\";\n    selectedSizes.set(getProductSizeKey(productInfo), input.value);\n    pendingSelectedSize = input.value;\n    pendingSelectedSizeAt = Date.now();\n    input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    unlockAddToCartForSize(productInfo);\n    return true;\n  };\n\n  const showFitResult = (widget, recommendation, productInfo) => {\n    const result = widget.querySelector(\"[data-hcx-fit-result]\");\n    const size = widget.querySelector(\"[data-hcx-fit-result-size]\");\n    const copy = widget.querySelector(\"[data-hcx-fit-result-copy]\");\n    const apply = widget.querySelector(\"[data-hcx-fit-apply]\");\n    if (!result || !size || !copy || !apply) return;\n\n    if (!recommendation) {\n      result.hidden = false;\n      size.textContent = \"-\";\n      copy.textContent = \"Add your height and weight to get a product-specific match.\";\n      apply.hidden = true;\n      delete widget.dataset.hcxRecommendedSize;\n      return;\n    }\n\n    const sourceCopy = recommendation.source.includes(\"item\")\n      ? \"this item's size guide\"\n      : recommendation.source.includes(\"size guide\") || recommendation.source.includes(\"size chart\")\n        ? \"the size guide\"\n        : recommendation.source.includes(\"garment\")\n          ? \"the garment guide\"\n          : \"your body profile\";\n    const fitCopy =\n      recommendation.preference === \"roomy\"\n        ? \"more oversized\"\n        : recommendation.preference === \"fitted\" || recommendation.preference === \"neat\"\n          ? \"closer\"\n          : \"true\";\n\n    widget.dataset.hcxRecommendedSize = recommendation.size;\n    const displaySize = getProductDisplaySizeLabel(productInfo, recommendation.size);\n    result.hidden = false;\n    size.textContent = displaySize;\n    copy.textContent = recommendation.canApply\n      ? `Matched against ${sourceCopy} for a ${fitCopy} fit.`\n      : `${displaySize} is your match for a ${fitCopy} fit. This size is currently sold out for this colour.`;\n    apply.hidden = !recommendation.canApply;\n  };\n\n  const initFitConfidenceSystem = () => {\n    document.querySelectorAll(\"[data-hcx-fit-confidence]\").forEach((widget) => {\n      if (widget.dataset.hcxFitBound === \"true\") return;\n      const productInfoSelector = widget.dataset.productInfo;\n      const productInfo = widget.closest(\"product-info\") || (productInfoSelector ? document.querySelector(productInfoSelector) : null);\n      if (!productInfo) return;\n\n      widget.dataset.hcxFitBound = \"true\";\n      widget.dataset.hcxFitUnit = normalizeFitUnit(widget.dataset.hcxFitUnit || \"cm\");\n      widget.dataset.hcxFitHeightSystem = widget.dataset.hcxFitHeightSystem === \"metric\" ? \"metric\" : \"imperial\";\n      widget.dataset.hcxFitWeightSystem = widget.dataset.hcxFitWeightSystem === \"imperial\" ? \"imperial\" : \"metric\";\n      syncFitInputSystems(widget);\n      renderFitMeasurements(widget, getSizeGuideData(widget), productInfo);\n\n      widget.querySelectorAll(\"[data-hcx-fit-unit]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          widget.dataset.hcxFitUnit = normalizeFitUnit(button.dataset.hcxFitUnit);\n          renderFitMeasurements(widget, getSizeGuideData(widget), productInfo);\n        });\n      });\n\n      widget.querySelectorAll(\"[data-hcx-fit-height-system]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          setFitHeightSystem(widget, button.dataset.hcxFitHeightSystem);\n          refreshFitRecommendation();\n        });\n      });\n\n      widget.querySelectorAll(\"[data-hcx-fit-weight-system]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          setFitWeightSystem(widget, button.dataset.hcxFitWeightSystem);\n          refreshFitRecommendation();\n        });\n      });\n\n      const refreshFitRecommendation = (showWhenHidden = false) => {\n        const result = widget.querySelector(\"[data-hcx-fit-result]\");\n        if (!showWhenHidden && result?.hidden && !widget.dataset.hcxRecommendedSize) return;\n        showFitResult(widget, recommendFitSize(widget, productInfo), productInfo);\n      };\n\n      widget.querySelector(\"[data-hcx-fit-submit]\")?.addEventListener(\"click\", () => {\n        refreshFitRecommendation(true);\n      });\n\n      widget.querySelectorAll(\"input[name^='hcx-fit-preference']\").forEach((input) => {\n        input.addEventListener(\"change\", () => {\n          refreshFitRecommendation();\n        });\n      });\n\n      widget.querySelectorAll(\"[data-hcx-fit-height], [data-hcx-fit-height-ft], [data-hcx-fit-height-in], [data-hcx-fit-weight], [data-hcx-fit-weight-lb]\").forEach((input) => {\n        input.addEventListener(\"input\", () => {\n          refreshFitRecommendation();\n        });\n      });\n\n      widget.querySelector(\"[data-hcx-fit-apply]\")?.addEventListener(\"click\", () => {\n        applyRecommendedSize(productInfo, widget.dataset.hcxRecommendedSize);\n      });\n    });\n  };\n\n  const refreshProductTitleRhythm = () => {\n    document.querySelectorAll(\".template-product .product__info-container\").forEach((container) => {\n      const title = container.querySelector(\".product__title h1\");\n      if (!title) return;\n\n      const styles = window.getComputedStyle(title);\n      const lineHeight = parseFloat(styles.lineHeight);\n      const lines = lineHeight > 0 ? Math.round(title.getBoundingClientRect().height / lineHeight) : 1;\n      container.classList.toggle(\"hcx-title-multiline\", lines > 1);\n    });\n  };\n\n  const initProductTitleRhythm = () => {\n    if (document.documentElement.dataset.hcxTitleRhythmBound === \"true\") {\n      refreshProductTitleRhythm();\n      return;\n    }\n\n    document.documentElement.dataset.hcxTitleRhythmBound = \"true\";\n    refreshProductTitleRhythm();\n    window.addEventListener(\"resize\", () => window.requestAnimationFrame(refreshProductTitleRhythm), { passive: true });\n  };\n\n  const initInStockSizeFiltering = () => {\n    if (document.documentElement.dataset.hcxSizeFilterBound === \"true\") return;\n    document.documentElement.dataset.hcxSizeFilterBound = \"true\";\n\n    document.addEventListener(\n      \"input\",\n      (event) => {\n        const input = event.target;\n        if (!(input instanceof HTMLInputElement) || input.type !== \"checkbox\" || !input.checked) return;\n\n        const inputName = (input.name || \"\").toLowerCase();\n        const filterShell = input.closest(\".js-filter\");\n        const filterId = (filterShell?.id || \"\").toLowerCase();\n        const filterText = normalizeText(filterShell?.querySelector(\"summary, .mobile-facets__close-button\")?.textContent || \"\");\n        const isSizeFilter =\n          inputName.includes(\"option.size\") ||\n          filterId.includes(\"size\") ||\n          filterText === \"size\" ||\n          filterText.startsWith(\"size \");\n\n        if (!isSizeFilter) return;\n\n        const form = input.form || input.closest(\"form\");\n        if (!form) return;\n\n        const availabilityInputs = [...form.querySelectorAll('input[type=\"checkbox\"]')].filter((item) =>\n          (item.name || \"\").toLowerCase().includes(\"availability\")\n        );\n        const inStockInput =\n          availabilityInputs.find((item) => String(item.value) === \"1\") ||\n          availabilityInputs.find((item) => normalizeText(item.closest(\"label\")?.textContent || \"\").includes(\"in stock\"));\n\n        if (inStockInput && !inStockInput.checked && !inStockInput.disabled) {\n          inStockInput.checked = true;\n          inStockInput.setAttribute(\"checked\", \"checked\");\n        }\n      },\n      true\n    );\n  };\n\n  const normalizeHcxColourDisplayLabel = (value = \"\", context = \"product\") => {\n    const label = String(value || \"\")\n      .replace(/gray/gi, \"grey\")\n      .replace(/\\s+/g, \" \")\n      .trim();\n    const key = label.toLowerCase().replace(/[-_]+/g, \" \").replace(/\\s+/g, \" \").trim();\n    const isFilter = context === \"filter\";\n\n    if (!key) return label;\n    if (key.includes(\"charcoal\")) return \"Charcoal\";\n    if (key.includes(\"pirate black\") || key.includes(\"dark grey\")) return \"Dark Grey\";\n    if (key === \"grey\" || key.includes(\"light grey\") || key.includes(\"formal grey\") || key.includes(\"flower grey\")) return \"Light Grey\";\n    if (key.includes(\"lucent white\")) return \"White\";\n    if (key === \"navy\") return isFilter ? \"Blue\" : \"Navy\";\n    if (key.includes(\"navy blue\")) return isFilter ? \"Blue\" : \"Navy\";\n    if (isFilter && key.includes(\"blue\")) return \"Blue\";\n    if (key.includes(\"eden green\")) return \"Green\";\n    if (key.includes(\"army green\")) return isFilter ? \"Green\" : \"Army Green\";\n    if (isFilter && key.includes(\"green\")) return \"Green\";\n\n    return label;\n  };\n\n  const readFacetItemCount = (item) => {\n    const storedCount = Number(item?.dataset?.hcxColourFilterOriginalCount);\n    if (Number.isFinite(storedCount) && storedCount >= 0) return storedCount;\n\n    const match = String(item?.textContent || \"\").match(/\\((\\d+)\\)/);\n    const count = match ? Number(match[1]) : 0;\n    if (item?.dataset) item.dataset.hcxColourFilterOriginalCount = String(count);\n    return count;\n  };\n\n  const updateFacetItemText = (item, label, count) => {\n    const visibleText = item.querySelector(\".facet-checkbox__text\");\n    const labelNode = item.querySelector(\".facet-checkbox__text-label\");\n\n    if (labelNode && labelNode.textContent.trim() !== label) {\n      labelNode.textContent = label;\n    }\n\n    if (visibleText) {\n      let countNode = [...visibleText.childNodes].find(\n        (node) => node.nodeType === Node.TEXT_NODE && /\\(\\d+\\)/.test(node.textContent || \"\")\n      );\n\n      if (!countNode) {\n        countNode = document.createTextNode(\"\");\n        visibleText.appendChild(countNode);\n      }\n\n      const nextCountText = ` (${count})`;\n      if (countNode.textContent !== nextCountText) countNode.textContent = nextCountText;\n    }\n\n    const hiddenText = item.querySelector(\".visually-hidden\");\n    if (hiddenText) {\n      const hiddenLabel = `${label} (${count === 1 ? \"1 product\" : `${count} products`})`;\n      if (hiddenText.textContent.trim() !== hiddenLabel) hiddenText.textContent = hiddenLabel;\n    }\n  };\n\n  const isColourFilterShell = (filter) => {\n    const filterText = normalizeText(\n      [\n        filter?.id,\n        filter?.dataset?.index,\n        filter?.querySelector(\"summary\")?.textContent,\n        filter?.querySelector(\".mobile-facets__close-button\")?.textContent,\n      ]\n        .filter(Boolean)\n        .join(\" \")\n    );\n\n    return filterText.includes(\"color\") || filterText.includes(\"colour\");\n  };\n\n  const refreshColourFilterGroups = () => {\n    document.querySelectorAll(\"#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter\").forEach((filter) => {\n      if (!isColourFilterShell(filter)) return;\n\n      const rows = [...filter.querySelectorAll(\"li\")]\n        .map((item) => {\n          const input = item.querySelector('input[type=\"checkbox\"][name]');\n          if (!(input instanceof HTMLInputElement)) return null;\n\n          const rawValue = input.value || item.querySelector(\".facet-checkbox__text-label\")?.textContent || \"\";\n          return {\n            item,\n            input,\n            label: normalizeHcxColourDisplayLabel(rawValue, \"filter\"),\n            count: readFacetItemCount(item),\n          };\n        })\n        .filter(Boolean);\n\n      if (!rows.length) return;\n\n      const groups = new Map();\n      rows.forEach((row) => {\n        const groupRows = groups.get(row.label) || [];\n        groupRows.push(row);\n        groups.set(row.label, groupRows);\n      });\n\n      filter.dataset.hcxColourFilterGrouped = \"true\";\n\n      groups.forEach((groupRows, label) => {\n        const representative = groupRows.find((row) => row.input.checked) || groupRows.find((row) => !row.input.disabled) || groupRows[0];\n        const totalCount = groupRows.reduce((sum, row) => sum + row.count, 0);\n        const isChecked = groupRows.some((row) => row.input.checked);\n\n        groupRows.forEach((row) => {\n          const isRepresentative = row === representative;\n          row.item.classList.toggle(\"hcx-colour-filter-member-hidden\", !isRepresentative);\n          row.item.classList.toggle(\"hcx-colour-filter-representative\", isRepresentative);\n          row.item.dataset.hcxColourFilterGroup = label;\n          row.input.dataset.hcxColourFilterGroup = label;\n\n          if (!isRepresentative) return;\n\n          row.input.checked = isChecked;\n          if (isChecked) row.input.setAttribute(\"checked\", \"checked\");\n          else row.input.removeAttribute(\"checked\");\n          row.input.disabled = totalCount <= 0 && !isChecked;\n          updateFacetItemText(row.item, label, totalCount);\n        });\n      });\n    });\n  };\n\n  const getSelectedCollectionColourGroups = () => {\n    const groups = new Set();\n    const params = new URLSearchParams(window.location.search);\n\n    params.getAll(\"filter.v.option.color\").forEach((value) => {\n      const group = normalizeHcxColourDisplayLabel(value, \"filter\");\n      if (group) groups.add(group);\n    });\n\n    document\n      .querySelectorAll(\n        \"#FacetFiltersForm .js-filter[data-hcx-colour-filter-grouped='true'] input[type='checkbox']:checked, #FacetFiltersFormMobile .js-filter[data-hcx-colour-filter-grouped='true'] input[type='checkbox']:checked\"\n      )\n      .forEach((input) => {\n        const group = input.dataset.hcxColourFilterGroup || normalizeHcxColourDisplayLabel(input.value, \"filter\");\n        if (group) groups.add(group);\n      });\n\n    return groups;\n  };\n\n  const getCollectionCardColourGroup = (item) => {\n    const colour = item.querySelector(\".hcx-card-meta__colour\")?.textContent || \"\";\n    return normalizeHcxColourDisplayLabel(colour, \"filter\");\n  };\n\n  const refreshCollectionColourCardVisibility = () => {\n    const isCollectionPage = body?.classList.contains(\"template-collection\") || body?.classList.contains(\"template-search\");\n    if (!isCollectionPage) return;\n\n    const selectedGroups = getSelectedCollectionColourGroups();\n    const hasColourFilter = selectedGroups.size > 0;\n\n    document.querySelectorAll(\"#product-grid .grid__item\").forEach((item) => {\n      const cardColourGroup = getCollectionCardColourGroup(item);\n      const shouldHide = hasColourFilter && (!cardColourGroup || !selectedGroups.has(cardColourGroup));\n      item.classList.toggle(\"hcx-colour-filter-card-hidden\", shouldHide);\n      item.toggleAttribute(\"hidden\", shouldHide);\n    });\n  };\n\n  const syncColourFilterGroupInput = (input) => {\n    const filter = input.closest(\".js-filter[data-hcx-colour-filter-grouped='true']\");\n    const groupLabel = input.dataset.hcxColourFilterGroup;\n    if (!filter || !groupLabel) return;\n\n    filter.querySelectorAll('input[type=\"checkbox\"][data-hcx-colour-filter-group]').forEach((candidate) => {\n      if (!(candidate instanceof HTMLInputElement) || candidate.dataset.hcxColourFilterGroup !== groupLabel) return;\n      if (candidate.disabled && candidate !== input) return;\n\n      candidate.checked = input.checked;\n      if (input.checked) candidate.setAttribute(\"checked\", \"checked\");\n      else candidate.removeAttribute(\"checked\");\n    });\n  };\n\n  const initColourFilterGrouping = () => {\n    refreshColourFilterGroups();\n\n    if (html.dataset.hcxColourFilterGroupingBound === \"true\") return;\n    html.dataset.hcxColourFilterGroupingBound = \"true\";\n\n    document.addEventListener(\n      \"input\",\n      (event) => {\n        const input = event.target;\n        if (!(input instanceof HTMLInputElement) || input.type !== \"checkbox\") return;\n        syncColourFilterGroupInput(input);\n        window.requestAnimationFrame(() => {\n          refreshColourFilterGroups();\n          refreshCollectionColourCardVisibility();\n        });\n      },\n      true\n    );\n\n    document.addEventListener(\n      \"click\",\n      (event) => {\n        const item = event.target?.closest?.(\".hcx-colour-filter-representative\");\n        if (!(item instanceof HTMLElement)) return;\n        if (event.target?.closest?.(\"input, label, button, a\")) return;\n\n        const input = item.querySelector('input[type=\"checkbox\"]');\n        if (input instanceof HTMLInputElement && !input.disabled) input.click();\n      },\n      true\n    );\n\n    let colourFilterRefreshQueued = false;\n    const queueColourFilterRefresh = () => {\n      if (colourFilterRefreshQueued) return;\n      colourFilterRefreshQueued = true;\n      window.requestAnimationFrame(() => {\n        colourFilterRefreshQueued = false;\n        refreshColourFilterGroups();\n        refreshCollectionColourCardVisibility();\n      });\n    };\n\n    const filterObserver = new MutationObserver(queueColourFilterRefresh);\n    filterObserver.observe(document.body, { childList: true, subtree: true });\n    refreshCollectionColourCardVisibility();\n  };\n\n  const deliveryTimeZone = \"Europe/London\";\n  const deliveryLocale = \"en-GB\";\n\n  const getTimeZoneOffset = (date, timeZone) => {\n    const parts = new Intl.DateTimeFormat(deliveryLocale, {\n      timeZone,\n      timeZoneName: \"shortOffset\",\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 zoneName = parts.find((part) => part.type === \"timeZoneName\")?.value || \"GMT\";\n    const match = zoneName.match(/GMT([+-])(\\d{1,2})(?::?(\\d{2}))?/);\n    if (!match) return 0;\n\n    const sign = match[1] === \"-\" ? -1 : 1;\n    const hours = Number(match[2] || 0);\n    const minutes = Number(match[3] || 0);\n    return sign * ((hours * 60 + minutes) * 60000);\n  };\n\n  const makeZonedDate = ({ year, month, day }, hour = 0, minute = 0, second = 0) => {\n    let timestamp = Date.UTC(year, month - 1, day, hour, minute, second);\n\n    for (let i = 0; i < 2; i += 1) {\n      timestamp = Date.UTC(year, month - 1, day, hour, minute, second) - getTimeZoneOffset(new Date(timestamp), deliveryTimeZone);\n    }\n\n    return new Date(timestamp);\n  };\n\n  const getZonedParts = (date) => {\n    const parts = new Intl.DateTimeFormat(deliveryLocale, {\n      timeZone: deliveryTimeZone,\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\n    return parts.reduce((result, part) => {\n      if (part.type !== \"literal\") result[part.type] = Number(part.value);\n      return result;\n    }, {});\n  };\n\n  const getWeekday = ({ year, month, day }) => new Date(Date.UTC(year, month - 1, day, 12)).getUTCDay();\n\n  const isDeliveryWorkingDay = (dateParts, includeSaturday = false) => {\n    const weekday = getWeekday(dateParts);\n    return weekday !== 0 && (includeSaturday || weekday !== 6);\n  };\n\n  const addCalendarDays = ({ year, month, day }, days) => {\n    const date = new Date(Date.UTC(year, month - 1, day + days, 12));\n    return {\n      year: date.getUTCFullYear(),\n      month: date.getUTCMonth() + 1,\n      day: date.getUTCDate(),\n    };\n  };\n\n  const addWorkingDays = (dateParts, days, includeSaturday = false) => {\n    let result = dateParts;\n    let added = 0;\n\n    while (added < days) {\n      result = addCalendarDays(result, 1);\n      if (isDeliveryWorkingDay(result, includeSaturday)) added += 1;\n    }\n\n    return result;\n  };\n\n  const getNextCutoff = (now, cutoffHour, includeSaturday = false, startFromToday = false) => {\n    const today = getZonedParts(now);\n    const todayParts = { year: today.year, month: today.month, day: today.day };\n    const todayCutoff = makeZonedDate(todayParts, cutoffHour);\n\n    if ((startFromToday || isDeliveryWorkingDay(todayParts, includeSaturday)) && now < todayCutoff) {\n      return { cutoffDate: todayCutoff, cutoffParts: todayParts, isToday: true };\n    }\n\n    let nextParts = todayParts;\n    do {\n      nextParts = addCalendarDays(nextParts, 1);\n    } while (!isDeliveryWorkingDay(nextParts, includeSaturday));\n\n    return { cutoffDate: makeZonedDate(nextParts, cutoffHour), cutoffParts: nextParts, isToday: false };\n  };\n\n  const getNextDeliveryRefresh = (now, cutoffHour, includeSaturday = false, startFromToday = false) => {\n    const nextCutoff = getNextCutoff(now, cutoffHour, includeSaturday, startFromToday).cutoffDate;\n    return new Date(nextCutoff.getTime() + 1000);\n  };\n\n  const getDeliveryCutoffHour = (vendor, origin, configuredHour) => {\n    const vendorKey = String(vendor || \"\").toUpperCase();\n    const originKey = String(origin || \"\").toLowerCase();\n\n    if (vendorKey.includes(\"ODMPOD\") || originKey === \"international\" || originKey === \"partner\") return 24;\n    if (vendorKey.includes(\"HERCXLES\") || originKey === \"uk\") return 20;\n\n    const parsedHour = Number(configuredHour);\n    return Number.isFinite(parsedHour) ? parsedHour : 20;\n  };\n\n  const isPartnerDelivery = (vendor, origin) => {\n    const vendorKey = String(vendor || \"\").toUpperCase();\n    const originKey = String(origin || \"\").toLowerCase();\n    return vendorKey.includes(\"ODMPOD\") || originKey === \"international\" || originKey === \"partner\";\n  };\n\n  const formatDate = (dateParts) =>\n    new Intl.DateTimeFormat(deliveryLocale, {\n      timeZone: deliveryTimeZone,\n      weekday: \"short\",\n      day: \"numeric\",\n      month: \"short\",\n    }).format(new Date(Date.UTC(dateParts.year, dateParts.month - 1, dateParts.day, 12)));\n\n  const initDeliveryPromise = (element) => {\n    if (!element || element.dataset.hcxDeliveryBound === \"true\") return;\n    element.dataset.hcxDeliveryBound = \"true\";\n\n    const main = element.querySelector(\"[data-hcx-delivery-main]\");\n    const sub = element.querySelector(\"[data-hcx-delivery-sub]\");\n    const range = element.querySelector(\"[data-hcx-delivery-range]\");\n    const serviceCountdown = element.querySelector(\"[data-hcx-service-countdown]\");\n    if (!serviceCountdown && (!main || !range)) return;\n\n    if (serviceCountdown) {\n      const vendor = element.dataset.vendor || \"HERCXLES\";\n      const origin = element.dataset.origin || (vendor.toUpperCase().includes(\"ODMPOD\") ? \"international\" : \"uk\");\n      const minDays = Number(element.dataset.minDays || 3);\n      const maxDays = Number(element.dataset.maxDays || 5);\n      const cutoffHour = getDeliveryCutoffHour(vendor, origin, element.dataset.cutoffHour);\n      const includeSaturday = element.dataset.includeSaturday === \"true\" || isPartnerDelivery(vendor, origin);\n      const startFromToday = element.dataset.startFromToday === \"true\" || isPartnerDelivery(vendor, origin);\n\n      const renderServiceDeliveryDate = () => {\n        const cutoff = getNextCutoff(new Date(), cutoffHour, includeSaturday, startFromToday);\n        const deliveryFrom = addWorkingDays(cutoff.cutoffParts, minDays, includeSaturday);\n        const deliveryTo = addWorkingDays(cutoff.cutoffParts, maxDays, includeSaturday);\n        serviceCountdown.textContent =\n          minDays === maxDays ? formatDate(deliveryFrom) : `${formatDate(deliveryFrom)} - ${formatDate(deliveryTo)}`;\n      };\n\n      renderServiceDeliveryDate();\n      window.setInterval(renderServiceDeliveryDate, 60000);\n      return;\n    }\n\n    if (sub) {\n      sub.textContent = \"\";\n      sub.append(range);\n    }\n\n    const vendor = element.dataset.vendor || \"HERCXLES\";\n    const origin = element.dataset.origin || (vendor.toUpperCase().includes(\"ODMPOD\") ? \"international\" : \"uk\");\n    const minDays = Number(element.dataset.minDays || 3);\n    const maxDays = Number(element.dataset.maxDays || 5);\n    const cutoffHour = getDeliveryCutoffHour(vendor, origin, element.dataset.cutoffHour);\n    const includeSaturday = element.dataset.includeSaturday === \"true\" || isPartnerDelivery(vendor, origin);\n    const startFromToday = element.dataset.startFromToday === \"true\" || isPartnerDelivery(vendor, origin);\n\n    let deliveryRefreshTimer;\n\n    const render = () => {\n      const now = new Date();\n      const cutoff = getNextCutoff(now, cutoffHour, includeSaturday, startFromToday);\n      const deliveryFrom = addWorkingDays(cutoff.cutoffParts, minDays, includeSaturday);\n      const deliveryTo = addWorkingDays(cutoff.cutoffParts, maxDays, includeSaturday);\n      const dateRange =\n        minDays === maxDays ? formatDate(deliveryFrom) : `${formatDate(deliveryFrom)} - ${formatDate(deliveryTo)}`;\n\n      main.textContent = \"Order now and receive\";\n      range.textContent = \" \";\n      const dateRangeElement = document.createElement(\"strong\");\n      dateRangeElement.textContent = dateRange;\n      range.append(dateRangeElement);\n    };\n\n    const scheduleDeliveryRefresh = () => {\n      window.clearTimeout(deliveryRefreshTimer);\n      const delay = Math.max(\n        1000,\n        getNextDeliveryRefresh(new Date(), cutoffHour, includeSaturday, startFromToday).getTime() - Date.now(),\n      );\n      deliveryRefreshTimer = window.setTimeout(() => {\n        render();\n        scheduleDeliveryRefresh();\n      }, Math.min(delay, 2147483647));\n    };\n\n    render();\n    scheduleDeliveryRefresh();\n  };\n\n  const initDeliveryPromises = () => {\n    document.querySelectorAll(\"[data-hcx-delivery-promise]\").forEach(initDeliveryPromise);\n  };\n\n  const savesKey = \"hcx:saves:v1\";\n  const savesDismissedKey = \"hcx:saves-dismissed:v1\";\n  const savesAutoViewThreshold = 3;\n  const savesLimit = 20;\n  const lckdInCutOffHandles = new Set([\n    \"lckd-in-training-cut-off-tank-top-black\",\n    \"lckd-in-training-cut-off-tank-top-grey\",\n    \"lckd-in-training-cut-off-tank-top-teal-blue\",\n    \"lckd-in-cut-off-tank-top-black\",\n    \"lckd-in-cut-off-tank-top-white\",\n    \"lckd-in-cut-off-tank-top-grey\",\n    \"lckd-in-cut-off-tank-top-blue\",\n  ]);\n  const sportCutOffHandles = new Set([\n    \"sport-cut-off-black\",\n    \"sport-cut-off-grey\",\n  ]);\n  const sportTShirtHandles = new Set([\n    \"sport-tee-black\",\n    \"sport-tee-white\",\n  ]);\n  const lckdInSportTShirtHandles = new Set([\n    \"lckd-in-boxy-t-shirt-black\",\n    \"lckd-in-boxy-t-shirt-white\",\n  ]);\n  const replacedProductHandles = new Set([\n    \"sport-cut-off-grey\",\n    \"angel-raw-edge-t-shirt\",\n  ]);\n  const lckdInCutOffTitle = \"LCKD IN Cut Off\";\n  const sportCutOffTitle = \"Sport Cut Off\";\n  const sportTShirtTitle = \"Sport T-Shirt\";\n  const lckdInSportTShirtTitle = \"LCKD IN T-Shirt\";\n\n  const getHcxProductHandleFromUrl = (url = \"\") => {\n    try {\n      const productUrl = new URL(url, window.location.origin);\n      const match = productUrl.pathname.match(/\\/products\\/([^/?#]+)/);\n      return match?.[1]?.trim().toLowerCase() || \"\";\n    } catch (error) {\n      return \"\";\n    }\n  };\n\n  let hcxProductCardPriceSyncFrame = 0;\n  let hcxProductCardPriceSyncObserver = null;\n  const formatHcxProductCardPrice = (value) => {\n    const cents = Number(value);\n    if (!Number.isFinite(cents) || cents <= 0) return \"\";\n\n    return new Intl.NumberFormat(\"en-GB\", {\n      style: \"currency\",\n      currency: \"GBP\",\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2,\n    }).format(cents / 100);\n  };\n\n  const getHcxProductCardPriceMap = () => {\n    const products = window.ShopifyAnalytics?.meta?.products;\n    const priceMap = new Map();\n    if (!Array.isArray(products)) return priceMap;\n\n    products.forEach((product) => {\n      const handle = String(product?.handle || \"\").trim().toLowerCase();\n      if (!handle || priceMap.has(handle)) return;\n\n      const variants = Array.isArray(product?.variants) ? product.variants : [];\n      const pricedVariant = variants.find((variant) => Number(variant?.price) > 0);\n      const price = formatHcxProductCardPrice(pricedVariant?.price || product?.price);\n      if (price) priceMap.set(handle, price);\n    });\n\n    return priceMap;\n  };\n\n  const getHcxProductCardHandle = (priceRoot) => {\n    const container = priceRoot.closest(\n      \".card-wrapper, .hcx-search-product-card, .hcx-cart-rec, .predictive-search__item, .grid__item, li, article\"\n    );\n    const link = container?.querySelector('a[href*=\"/products/\"]') || priceRoot.closest('a[href*=\"/products/\"]');\n    return getHcxProductHandleFromUrl(link?.getAttribute(\"href\") || link?.href || \"\");\n  };\n\n  const setHcxProductCardPrice = (priceRoot, price) => {\n    const priceItems = priceRoot.matches(\".hcx-cart-rec__price\")\n      ? priceRoot.querySelectorAll(\"span\")\n      : priceRoot.querySelectorAll(\".price-item\");\n    const targets = Array.from(priceItems).filter((node) => !node.closest(\"s, .price__compare\"));\n\n    if (targets.length) {\n      targets.forEach((node) => {\n        node.textContent = price;\n      });\n    } else if (priceRoot.textContent.match(/\\u00a3\\s?\\d/)) {\n      priceRoot.textContent = price;\n    }\n\n    priceRoot.dataset.hcxSyncedPrice = price;\n  };\n\n  const syncHcxProductCardPrices = () => {\n    hcxProductCardPriceSyncFrame = 0;\n    const priceMap = getHcxProductCardPriceMap();\n    if (!priceMap.size) return;\n\n    document\n      .querySelectorAll(\n        \".card-wrapper .price, .hcx-search-product-card .price, .predictive-search__item .price, .hcx-cart-rec__price\"\n      )\n      .forEach((priceRoot) => {\n        const handle = getHcxProductCardHandle(priceRoot);\n        const price = priceMap.get(handle);\n        if (!price || priceRoot.dataset.hcxSyncedPrice === price) return;\n        setHcxProductCardPrice(priceRoot, price);\n      });\n  };\n\n  const scheduleHcxProductCardPriceSync = () => {\n    if (hcxProductCardPriceSyncFrame) return;\n    hcxProductCardPriceSyncFrame = window.requestAnimationFrame(syncHcxProductCardPrices);\n  };\n\n  const initHcxProductCardPriceSync = () => {\n    scheduleHcxProductCardPriceSync();\n    window.setTimeout(scheduleHcxProductCardPriceSync, 250);\n    window.setTimeout(scheduleHcxProductCardPriceSync, 1000);\n\n    if (hcxProductCardPriceSyncObserver) return;\n    hcxProductCardPriceSyncObserver = new MutationObserver((mutations) => {\n      if (mutations.some((mutation) => mutation.addedNodes.length)) {\n        scheduleHcxProductCardPriceSync();\n      }\n    });\n    hcxProductCardPriceSyncObserver.observe(document.body, { childList: true, subtree: true });\n  };\n\n  const normalizeHcxProductTitle = (title = \"\") =>\n    String(title)\n      .replace(/\\bKuro\\b/gi, \"Scorpion\")\n      .replace(/\\bLCKD\\s+IN\\s+Drawstring\\s+Shorts\\b/gi, 'LCKD IN 7\" Shorts')\n      .replace(/\\bSport\\s+Drawstring\\s+Shorts\\b/gi, 'Sport 7\" Shorts')\n      .replace(/\\bSport\\s+5(?:\"|\\s*Inch)?\\s+Shorts\\b/gi, \"Sport Running Shorts\")\n      .replace(/\\b5\\s+INCH\\s+SHORTS\\b/gi, \"Sport Running Shorts\")\n      .replace(/\\bTiger\\s+Hoodie\\b/gi, \"Tiger X Studios Hoodie\")\n      .replace(/\\bDragon\\s+Hoodie\\b/gi, \"Dragon X Studios Hoodie\");\n\n  const getStoredProductHandle = (item) =>\n    getHcxProductHandleFromUrl(item?.url) || String(item?.handle || \"\").trim().toLowerCase();\n\n  const isReplacedStoredProduct = (item) => replacedProductHandles.has(getStoredProductHandle(item));\n\n  // Keep saved/recent product identities aligned with the September 2026 rename.\n  const scorpionRenamedProducts = new Map([\n    [\"14976054788472\", \"scorpion-oversized-straight-leg-sweatpants-1\"],\n    [\"14976054886776\", \"scorpion-oversized-t-shirt-red\"],\n    [\"14976058261880\", \"scorpion-oversized-t-shirt-green\"],\n    [\"14976059900280\", \"scorpion-oversized-t-shirt-white\"],\n    [\"14976060293496\", \"scorpion-light-oversized-t-shirt\"],\n    [\"14976183599480\", \"scorpion-relaxed-zip-up-hoodie-2\"],\n    [\"14976184418680\", \"scorpion-relaxed-zip-up-hoodie\"],\n    [\"14976184910200\", \"scorpion-relaxed-zip-hoodie-grey\"],\n    [\"14988681150840\", \"scorpion-relaxed-zip-up-hoodie-next-day\"],\n    [\"15006736515448\", \"scorpion-oversized-t-shirt-washed-green-style-344\"],\n    [\"15006737629560\", \"scorpion-oversized-t-shirt-light-grey\"],\n    [\"15010919088504\", \"scorpion-v3-oversized-hoodie-light-grey\"],\n    [\"15037017620856\", \"scorpion-oversized-t-shirt-washed-green\"],\n    [\"15037018767736\", \"scorpion-v3-oversized-hoodie-light-grey-style-2\"],\n    [\"15037019029880\", \"scorpion-relaxed-zip-up-hoodie-flower-gray\"],\n    [\"15050582688120\", \"scorpion-t-shirt-red-warehouse-sale\"],\n    [\"15052177342840\", \"scorpion-7-inch-shorts-black\"],\n  ]);\n\n  const normalizeStoredProductIdentity = (item) => {\n    if (!item || typeof item !== \"object\") return item;\n\n    const handle = getHcxProductHandleFromUrl(item.url) || String(item.handle || \"\").trim().toLowerCase();\n    const nextItem = {\n      ...item,\n      title: normalizeHcxProductTitle(item.title || \"\"),\n    };\n\n    const renamedHandle = scorpionRenamedProducts.get(String(item.id || \"\").split(\"/\").pop());\n    if (renamedHandle) {\n      nextItem.handle = renamedHandle;\n      nextItem.url = /\\/products\\/[^?#/]+/.test(String(item.url || \"\"))\n        ? String(item.url).replace(/\\/products\\/[^?#/]+/, `/products/${renamedHandle}`)\n        : `/products/${renamedHandle}`;\n    }\n\n    if (lckdInCutOffHandles.has(handle)) {\n      nextItem.title = lckdInCutOffTitle;\n    } else if (sportCutOffHandles.has(handle)) {\n      nextItem.title = sportCutOffTitle;\n    } else if (sportTShirtHandles.has(handle)) {\n      nextItem.title = sportTShirtTitle;\n    } else if (lckdInSportTShirtHandles.has(handle)) {\n      nextItem.title = lckdInSportTShirtTitle;\n    }\n\n    return nextItem;\n  };\n\n  const normalizeSaveItems = (items) => {\n    const seen = new Set();\n\n    return (Array.isArray(items) ? items : [])\n      .map(normalizeStoredProductIdentity)\n      .filter((item) => !isReplacedStoredProduct(item))\n      .filter((item) => item && typeof item === \"object\" && item.id)\n      .filter((item) => {\n        const id = String(item.id);\n        if (seen.has(id)) return false;\n\n        seen.add(id);\n        return true;\n      })\n      .slice(0, savesLimit);\n  };\n\n  const readSaves = () => {\n    try {\n      const value = window.localStorage.getItem(savesKey);\n      const parsed = value ? JSON.parse(value) : [];\n      const normalized = normalizeSaveItems(parsed);\n\n      if (JSON.stringify(parsed) !== JSON.stringify(normalized)) {\n        window.localStorage.setItem(savesKey, JSON.stringify(normalized));\n      }\n\n      return normalized;\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const writeSaves = (items) => {\n    try {\n      window.localStorage.setItem(savesKey, JSON.stringify(normalizeSaveItems(items)));\n    } catch (error) {\n      return;\n    }\n  };\n\n  const readDismissedSaves = () => {\n    try {\n      const value = window.localStorage.getItem(savesDismissedKey);\n      const parsed = value ? JSON.parse(value) : [];\n      return Array.isArray(parsed) ? parsed.map(String) : [];\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const writeDismissedSaves = (items) => {\n    try {\n      window.localStorage.setItem(savesDismissedKey, JSON.stringify([...new Set(items.map(String))].slice(0, 100)));\n    } catch (error) {\n      return;\n    }\n  };\n\n  const escapeHtml = (value = \"\") =>\n    String(value).replace(/[&<>\"']/g, (character) => {\n      const entities = {\n        \"&\": \"&amp;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        '\"': \"&quot;\",\n        \"'\": \"&#39;\",\n      };\n      return entities[character];\n    });\n\n  const getSavePayload = (button) => ({\n    id: button.dataset.productId || button.dataset.productUrl,\n    title: button.dataset.productTitle || \"Saved product\",\n    url: button.dataset.productUrl || \"#\",\n    image: button.dataset.productImage || \"\",\n    price: button.dataset.productPrice || \"\",\n    variantId: button.dataset.productVariantId || \"\",\n    source: \"saved\",\n  });\n\n  const formatRecentlyViewedPriceCents = (value) => {\n    const cents = Number(value);\n    if (!Number.isFinite(cents) || cents <= 0) return \"\";\n    const minimumFractionDigits = cents % 100 === 0 ? 0 : 2;\n\n    return new Intl.NumberFormat(\"en-GB\", {\n      style: \"currency\",\n      currency: \"GBP\",\n      minimumFractionDigits,\n      maximumFractionDigits: 2,\n    }).format(cents / 100);\n  };\n\n  const getRecentlyViewedDisplayPrice = (item = {}, fallbackPrice = \"\") => {\n    return String(item?.price || fallbackPrice || \"\").trim();\n  };\n\n  const isSaved = (items, id) => items.some((item) => String(item.id) === String(id));\n\n  const recentlyViewedKey = \"hcx:recently-viewed:v1\";\n  const recentlyViewedLimit = 6;\n  const recentlyViewedStoreLimit = 40;\n  const recentlyViewedEnrichmentHandles = new Set();\n  const normalizeRecentlyViewedItem = (item) => {\n    if (!item || typeof item !== \"object\") return item;\n\n    const normalizedItem = normalizeStoredProductIdentity(item);\n    const displayPrice = getRecentlyViewedDisplayPrice(normalizedItem, normalizedItem.price);\n\n    return displayPrice && displayPrice !== normalizedItem.price\n      ? { ...normalizedItem, price: displayPrice }\n      : normalizedItem;\n  };\n\n  const readRecentlyViewed = () => {\n    try {\n      const value = window.localStorage.getItem(recentlyViewedKey);\n      const parsed = value ? JSON.parse(value) : [];\n      const normalized = Array.isArray(parsed) ? parsed.map(normalizeRecentlyViewedItem) : [];\n      if (JSON.stringify(parsed) !== JSON.stringify(normalized)) {\n        window.localStorage.setItem(recentlyViewedKey, JSON.stringify(normalized));\n      }\n      return normalized;\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const writeRecentlyViewed = (items) => {\n    try {\n      window.localStorage.setItem(recentlyViewedKey, JSON.stringify((Array.isArray(items) ? items : []).map(normalizeRecentlyViewedItem)));\n    } catch (error) {\n      return;\n    }\n  };\n\n  const recentlyViewedSizeLadder = [\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\", \"3XL\"];\n  const recentlyViewedSizeAliases = {\n    XS: [\"xs\", \"extrasmall\", \"xsmall\"],\n    S: [\"s\", \"small\"],\n    M: [\"m\", \"medium\"],\n    L: [\"l\", \"large\"],\n    XL: [\"xl\", \"xlarge\", \"extralarge\"],\n    XXL: [\"xxl\", \"2xl\", \"xxlarge\", \"2xlarge\", \"doublexl\"],\n    \"3XL\": [\"3xl\", \"xxxl\", \"3xlarge\", \"triplexl\"],\n  };\n\n  const createDomId = (prefix, ...parts) => {\n    const value = [prefix, ...parts]\n      .filter((part) => part !== null && part !== undefined && part !== \"\")\n      .join(\"-\");\n\n    return (value || prefix).replace(/[^A-Za-z0-9_-]/g, \"-\");\n  };\n\n  const normalizeOptionToken = (value = \"\") => String(value).trim().toLowerCase().replace(/[\\s_-]+/g, \"\");\n\n  const toIntegerOrNull = (value) => {\n    const number = Number(value);\n    return Number.isInteger(number) && number >= 0 ? number : null;\n  };\n\n  const getRecentlyViewedDisplayTitle = (title = \"\") => {\n    const normalizedTitle = normalizeHcxProductTitle(title).replace(/\\s+/g, \" \").trim();\n    if (/^viper\\s+oversized\\s+t-shirt$/i.test(normalizedTitle)) return normalizedTitle;\n    if (!/oversized/i.test(normalizedTitle)) return normalizedTitle;\n\n    return (\n      normalizedTitle\n        .replace(/\\s+oversized\\s+/gi, \" \")\n        .replace(/^oversized\\s+/i, \"\")\n        .replace(/\\s+oversized$/i, \"\")\n        .replace(/\\s+/g, \" \")\n        .trim() || normalizedTitle\n    );\n  };\n\n  const sizeLabelMatchesValue = (label, value) => {\n    const aliases = recentlyViewedSizeAliases[label] || [label];\n    return aliases.includes(normalizeOptionToken(value));\n  };\n\n  const normalizeRecentlyViewedVariants = (item) => {\n    const variants = Array.isArray(item?.variants) ? item.variants : [];\n\n    return variants\n      .map((variant) => ({\n        id: variant?.id || variant?.variantId || \"\",\n        available: variant?.available !== false && variant?.available !== \"false\",\n        title: variant?.title || \"\",\n        options: Array.isArray(variant?.options) ? variant.options.map((option) => String(option || \"\")) : [],\n        price: Number(variant?.price) || 0,\n        compareAtPrice: Number(variant?.compareAtPrice ?? variant?.compare_at_price) || 0,\n      }))\n      .filter((variant) => variant.id);\n  };\n\n  const getVariantSizeValue = (variant, sizeOptionIndex) => {\n    if (Number.isInteger(sizeOptionIndex) && variant.options?.[sizeOptionIndex]) {\n      return variant.options[sizeOptionIndex];\n    }\n\n    return (\n      variant.options?.find((option) =>\n        recentlyViewedSizeLadder.some((sizeLabel) => sizeLabelMatchesValue(sizeLabel, option))\n      ) ||\n      variant.title ||\n      \"\"\n    );\n  };\n\n  const getRecentlyViewedVariantPayload = () => {\n    const source = document.querySelector(\"[data-hcx-viewed-product-variants]\");\n    if (!source) return {};\n\n    try {\n      const parsed = JSON.parse(source.textContent || \"{}\");\n      return {\n        sizeOptionIndex: toIntegerOrNull(parsed.sizeOptionIndex),\n        selectedOptions: Array.isArray(parsed.selectedOptions)\n          ? parsed.selectedOptions.map((option) => String(option || \"\"))\n          : [],\n        variants: normalizeRecentlyViewedVariants(parsed),\n      };\n    } catch (error) {\n      return {};\n    }\n  };\n\n  const getViewedPayload = (element) => ({\n    id: element.dataset.productId || element.dataset.productUrl,\n    title: element.dataset.productTitle || \"Viewed product\",\n    url: element.dataset.productUrl || \"#\",\n    image: element.dataset.productImage || \"\",\n    hoverImage: element.dataset.productHoverImage || \"\",\n    price: element.dataset.productPrice || \"\",\n    colour: element.dataset.productColour || \"\",\n    variantId: element.dataset.productVariantId || \"\",\n    ...getRecentlyViewedVariantPayload(),\n  });\n\n  const getRecentlyViewedVariantPool = (item, variants, sizeOptionIndex) => {\n    const selectedOptions = Array.isArray(item?.selectedOptions) ? item.selectedOptions : [];\n    if (!Number.isInteger(sizeOptionIndex) || !selectedOptions.length) return variants;\n\n    const matchingVariants = variants.filter((variant) =>\n      selectedOptions.every((selectedOption, index) => {\n        if (index === sizeOptionIndex || !selectedOption) return true;\n        return normalizeOptionToken(variant.options?.[index]) === normalizeOptionToken(selectedOption);\n      })\n    );\n\n    return matchingVariants.length ? matchingVariants : variants;\n  };\n\n  const getRecentlyViewedSizeOptions = (item) => {\n    const variants = normalizeRecentlyViewedVariants(item);\n    const sizeOptionIndex = toIntegerOrNull(item?.sizeOptionIndex);\n    const variantPool = getRecentlyViewedVariantPool(item, variants, sizeOptionIndex);\n    const hideStripedSportXxl = isStripedSportSweatpantsProfile(item?.title, item?.url);\n\n    if (!variantPool.length && item?.variantId) {\n      return [{ label: \"Add\", variantId: item.variantId, available: true }];\n    }\n\n    const hasKnownSizes = variantPool.some((variant) =>\n      recentlyViewedSizeLadder.some((sizeLabel) => sizeLabelMatchesValue(sizeLabel, getVariantSizeValue(variant, sizeOptionIndex)))\n    );\n\n    if (!hasKnownSizes) {\n      return variantPool.slice(0, 6).map((variant, index) => ({\n        label: getVariantSizeValue(variant, sizeOptionIndex) || (variantPool.length === 1 ? \"Add\" : `Option ${index + 1}`),\n        variantId: variant.id,\n        available: variant.available,\n      }));\n    }\n\n    return recentlyViewedSizeLadder\n      .map((sizeLabel) => {\n        const matches = variantPool.filter((variant) =>\n          sizeLabelMatchesValue(sizeLabel, getVariantSizeValue(variant, sizeOptionIndex))\n        );\n        const variant = matches.find((match) => match.available) || matches[0];\n        const shouldHide =\n          (hideStripedSportXxl && sizeLabel === \"XXL\") ||\n          (sizeLabel === \"XS\" && (!variant || !variant.available)) ||\n          (sizeLabel === \"3XL\" && !variant);\n\n        if (shouldHide) return null;\n\n        return {\n          label: sizeLabel,\n          variantId: variant?.id || \"\",\n          available: variant ? variant.available : false,\n        };\n      })\n      .filter(Boolean);\n  };\n\n  const renderRecentlyViewedLoadingSpinner = () => `\n    <div class=\"loading__spinner hidden\">\n      <svg aria-hidden=\"true\" focusable=\"false\" class=\"spinner\" viewBox=\"0 0 66 66\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle class=\"path\" fill=\"none\" stroke-width=\"6\" cx=\"33\" cy=\"33\" r=\"30\"></circle>\n      </svg>\n    </div>\n  `;\n\n  const renderRecentlyViewedSizeButton = (item, option, quickId, index) => {\n    const displayTitle = getRecentlyViewedDisplayTitle(item?.title || \"Viewed product\");\n    const label = escapeHtml(option.label || \"Add\");\n    const ariaLabel = option.label === \"Add\" ? `Add ${displayTitle} to cart` : `Add ${displayTitle} size ${option.label} to cart`;\n\n    if (!option.variantId || !option.available) {\n      return `\n        <button\n          type=\"button\"\n          class=\"hcx-card-size-button is-disabled\"\n          aria-label=\"${escapeHtml(option.label || \"Option\")} unavailable for ${escapeHtml(displayTitle)}\"\n          disabled=\"disabled\"\n          aria-disabled=\"true\"\n        >\n          <span>${label}</span>\n        </button>\n      `;\n    }\n\n    return `\n      <product-form class=\"hcx-card-size-form\" data-section-id=\"recently-viewed\" data-hide-errors=\"true\">\n        <form\n          method=\"post\"\n          action=\"${escapeHtml(window.routes?.cart_add_url || \"/cart/add\")}\"\n          id=\"${escapeHtml(createDomId(quickId, \"form\", index))}\"\n          class=\"form\"\n          enctype=\"multipart/form-data\"\n          novalidate\n          data-type=\"add-to-cart-form\"\n        >\n          <input type=\"hidden\" name=\"id\" value=\"${escapeHtml(option.variantId)}\" class=\"product-variant-id\">\n          <button\n            type=\"submit\"\n            name=\"add\"\n            class=\"hcx-card-size-button\"\n            aria-label=\"${escapeHtml(ariaLabel)}\"\n            data-hcx-card-variant-id=\"${escapeHtml(option.variantId)}\"\n          >\n            <span>${label}</span>\n            ${renderRecentlyViewedLoadingSpinner()}\n          </button>\n        </form>\n      </product-form>\n    `;\n  };\n\n  const renderRecentlyViewedQuickAdd = (item, index) => {\n    const sizeOptions = getRecentlyViewedSizeOptions(item);\n    const fallbackVariantId = item?.variantId || item?.firstAvailableVariantId || item?.selectedVariantId || \"\";\n    const displayOptions = sizeOptions.length\n      ? sizeOptions\n      : [{ label: \"Add\", variantId: fallbackVariantId, available: Boolean(fallbackVariantId) }];\n\n    const quickId = createDomId(\"HcxRecentQuickToggle\", item?.id || item?.variantId || index);\n    const panelId = createDomId(\"HcxRecentSizes\", item?.id || item?.variantId || index);\n    const displayTitle = getRecentlyViewedDisplayTitle(item?.title || \"Viewed product\");\n\n    return `\n      <div class=\"hcx-card-quick-add\" data-hcx-card-quick-add>\n        <input\n          type=\"checkbox\"\n          id=\"${escapeHtml(quickId)}\"\n          class=\"hcx-card-quick-add__input\"\n          aria-label=\"Choose size for ${escapeHtml(displayTitle)}\"\n          data-hcx-card-quick-input\n        >\n        <label\n          for=\"${escapeHtml(quickId)}\"\n          class=\"hcx-card-quick-add__toggle\"\n          role=\"button\"\n          tabindex=\"0\"\n          aria-expanded=\"false\"\n          aria-controls=\"${escapeHtml(panelId)}\"\n          data-hcx-card-quick-toggle\n        >\n          <span class=\"visually-hidden\">Choose size for ${escapeHtml(displayTitle)}</span>\n          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" class=\"icon icon-plus\" viewBox=\"0 0 10 10\" aria-hidden=\"true\" focusable=\"false\">\n            <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M1 4.51a.5.5 0 0 0 0 1h3.5l.01 3.5a.5.5 0 0 0 1-.01V5.5l3.5-.01a.5.5 0 0 0-.01-1H5.5L5.49.99a.5.5 0 0 0-1 .01v3.5l-3.5.01z\" clip-rule=\"evenodd\"></path>\n          </svg>\n        </label>\n        <div id=\"${escapeHtml(panelId)}\" class=\"hcx-card-sizes\" data-hcx-card-size-panel>\n          ${displayOptions.map((option, optionIndex) => renderRecentlyViewedSizeButton(item, option, panelId, optionIndex)).join(\"\")}\n        </div>\n      </div>\n    `;\n  };\n\n  const normalizeRecentlyViewedColour = (value = \"\") =>\n    normalizeHcxColourDisplayLabel(value);\n\n  const getRecentlyViewedSwatchStyle = (value = \"\") => {\n    const key = String(value || \"\").toLowerCase().replace(/[-_]+/g, \" \").replace(/\\s+/g, \" \").trim();\n    const style = {\n      bg: \"#d8d8d8\",\n      border: \"rgba(5, 5, 5, .28)\",\n      extraClass: \"\",\n    };\n\n    if (key.includes(\"faded black\")) {\n      style.bg = \"#2d2d2d\";\n    } else if (key.includes(\"acid black\")) {\n      style.bg = \"#242424\";\n    } else if (key.includes(\"washed black\")) {\n      style.bg = \"#2b2a29\";\n    } else if (key.includes(\"black\")) {\n      style.bg = \"#080808\";\n    } else if (key.includes(\"charcoal\")) {\n      style.bg = \"#303131\";\n    } else if (key.includes(\"snow wash dark grey\") || key.includes(\"snow wash dark gray\")) {\n      style.bg = \"#4b4d50\";\n    } else if (key.includes(\"dark grey\") || key.includes(\"dark gray\")) {\n      style.bg = \"#56585a\";\n    } else if (key.includes(\"snow wash light grey\") || key.includes(\"snow wash light gray\")) {\n      style.bg = \"#c9cacc\";\n      style.extraClass = \" hcx-card-swatch--light\";\n    } else if (key.includes(\"light grey\") || key.includes(\"light gray\")) {\n      style.bg = \"#d7d9d8\";\n      style.extraClass = \" hcx-card-swatch--light\";\n    } else if (key.includes(\"washed grey\") || key.includes(\"washed gray\") || key.includes(\"snow wash grey\") || key.includes(\"snow wash gray\")) {\n      style.bg = \"#85878a\";\n    } else if (key.includes(\"grey\") || key.includes(\"gray\")) {\n      style.bg = \"#8e9092\";\n    } else if (key.includes(\"white\")) {\n      style.bg = \"#f7f7f5\";\n      style.extraClass = \" hcx-card-swatch--light\";\n    } else if (key.includes(\"cream\") || key.includes(\"ecru\") || key.includes(\"stone\")) {\n      style.bg = \"#e9e1d1\";\n      style.extraClass = \" hcx-card-swatch--light\";\n    } else if (key.includes(\"navy\")) {\n      style.bg = \"#162033\";\n    } else if (key.includes(\"light blue\")) {\n      style.bg = \"#93b9d8\";\n    } else if (key.includes(\"teal blue\")) {\n      style.bg = \"#2c7f91\";\n    } else if (key.includes(\"teal\")) {\n      style.bg = \"#4b9c8d\";\n    } else if (key.includes(\"cobalt blue\")) {\n      style.bg = \"#275da4\";\n    } else if (key.includes(\"royal blue\") || key.includes(\"klein blue\")) {\n      style.bg = \"#1e4fa3\";\n    } else if (key.includes(\"blue\")) {\n      style.bg = \"#416fa6\";\n    } else if (key.includes(\"army green\") || key.includes(\"olive\")) {\n      style.bg = \"#626957\";\n    } else if (key.includes(\"green\")) {\n      style.bg = \"#5e927d\";\n    } else if (key.includes(\"coffee\")) {\n      style.bg = \"#74675d\";\n    } else if (key.includes(\"brown\") || key.includes(\"mocha\")) {\n      style.bg = \"#725943\";\n    } else if (key.includes(\"red\")) {\n      style.bg = \"#9d1e25\";\n    } else if (key.includes(\"pink\")) {\n      style.bg = \"#d996aa\";\n    } else if (key.includes(\"lilac\") || key.includes(\"purple\")) {\n      style.bg = \"#b7a7d8\";\n    }\n\n    return style;\n  };\n\n  const renderRecentlyViewedMeta = (item) => {\n    const colour = normalizeRecentlyViewedColour(item?.colour);\n    if (!colour) return \"\";\n    const swatchStyle = getRecentlyViewedSwatchStyle(colour);\n\n    return `\n      <p class=\"hcx-card-meta hcx-card-swatches\" aria-label=\"Available colours\">\n        <span class=\"hcx-card-swatches__row\">\n          <span class=\"hcx-card-swatches__list\">\n            <span\n              class=\"hcx-card-swatch${swatchStyle.extraClass}\"\n              style=\"--hcx-card-swatch-bg: ${escapeHtml(swatchStyle.bg)}; --hcx-card-swatch-border: ${escapeHtml(swatchStyle.border)};\"\n              title=\"${escapeHtml(colour)}\"\n              aria-current=\"true\"\n            >\n              <span class=\"visually-hidden\">${escapeHtml(colour)}</span>\n            </span>\n          </span>\n        </span>\n        <span class=\"hcx-card-meta__count\"></span>\n      </p>\n    `;\n  };\n\n  const renderRecentlyViewedPrice = (item = {}) => {\n    const price = getRecentlyViewedDisplayPrice(item);\n    if (!price) return \"\";\n    const compareAtPrice = String(item?.compareAtPrice || \"\").trim();\n    const isOnSale = Boolean(compareAtPrice && compareAtPrice !== price);\n\n    if (isOnSale) {\n      return `\n        <div class=\"card-information\">\n          <span class=\"caption-large light\"></span>\n          <div class=\"price price--on-sale\">\n            <div class=\"price__container\">\n              <div class=\"price__sale\">\n                <span class=\"visually-hidden visually-hidden--inline\">Regular price</span>\n                <span class=\"price__compare\">\n                  <s class=\"price-item price-item--regular\">${escapeHtml(compareAtPrice)}</s>\n                </span>\n                <span class=\"visually-hidden visually-hidden--inline\">Sale price</span>\n                <span class=\"price-item price-item--sale price-item--last price__current\">${escapeHtml(price)}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      `;\n    }\n\n    return `\n      <div class=\"card-information\">\n        <span class=\"caption-large light\"></span>\n        <div class=\"price \">\n          <div class=\"price__container\">\n            <div class=\"price__regular\">\n              <span class=\"visually-hidden visually-hidden--inline\">Regular price</span>\n              <span class=\"price-item price-item--regular\">${escapeHtml(price)}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    `;\n  };\n\n  const renderRecentlyViewedSaleBadges = (item = {}) => {\n    const compareAtPrice = String(item?.compareAtPrice || \"\").trim();\n    const price = getRecentlyViewedDisplayPrice(item);\n    const discountPercent = Number(item?.discountPercent);\n    if (!compareAtPrice || !price || compareAtPrice === price) return \"\";\n\n    return `\n      <span class=\"hcx-card-sale-tag\" aria-label=\"Sale\">SALE</span>\n      ${\n        Number.isFinite(discountPercent) && discountPercent > 0\n          ? `<span class=\"hcx-card-discount-badge\" aria-label=\"${discountPercent} percent off\">\n              <span class=\"hcx-card-discount-badge__arrow\" aria-hidden=\"true\"></span>\n              <span>${discountPercent}% OFF</span>\n            </span>`\n          : \"\"\n      }\n    `;\n  };\n\n  const isRecentlyViewedLckdMeshJacket = (item, image = \"\") =>\n    /lckd-in-full-zip-mesh-jacket|lckd in full zip mesh jacket/i.test(`${item?.title || \"\"} ${item?.url || \"\"} ${image}`);\n\n  const getRecentlyViewedThemeAssetUrl = (filename, token) => {\n    const assetUrl = getHcxThemeAssetUrl(filename);\n    return assetUrl ? `${assetUrl}?hcx=${token}` : \"\";\n  };\n\n  const getRecentlyViewedDisplayImage = (item) => {\n    const image = String(item?.image || \"\");\n    if (!image) return \"\";\n\n    const source = `${item?.title || \"\"} ${item?.url || \"\"} ${image}`;\n    if (isRecentlyViewedLckdMeshJacket(item, image) && /LCKD_IN_Jacket\\.png/i.test(image)) {\n      return (\n        getRecentlyViewedThemeAssetUrl(\n          \"hcx-lckd-in-full-zip-mesh-jacket-flatlay-front.jpg\",\n          \"20260623-flatlay-primary\"\n        ) || image\n      );\n    }\n    if (!/tank/i.test(source) || !/Ribbed_tank_top_/i.test(image)) return image;\n\n    const isStudiosTank = /studios-ribbed-tank-top|studios ribbed tank/i.test(source);\n    return image.replace(/Ribbed_tank_top_(black|grey|charcoal|white|green)_back/gi, (_match, colour) => {\n      const prefix = isStudiosTank && colour.toLowerCase() !== \"green\" ? \"Ribbed_tank_top_studios_\" : \"Ribbed_tank_top_\";\n      return `${prefix}${colour}`;\n    });\n  };\n\n  const getRecentlyViewedImageUrl = (candidate) => {\n    if (!candidate) return \"\";\n    if (typeof candidate === \"string\") return candidate;\n\n    return String(\n      candidate.src ||\n        candidate.url ||\n        candidate.image?.src ||\n        candidate.image?.url ||\n        candidate.preview_image?.src ||\n        candidate.preview_image?.url ||\n        candidate.featured_image ||\n        \"\"\n    );\n  };\n\n  const getRecentlyViewedImageFingerprint = (url = \"\") => {\n    const value = String(url || \"\").trim();\n    if (!value) return \"\";\n\n    try {\n      const parsed = new URL(value, window.location.origin);\n      return (parsed.pathname.split(\"/\").pop() || \"\").toLowerCase().replace(/_\\d+x(?=\\.)/g, \"\");\n    } catch (error) {\n      return value.split(\"?\")[0].split(\"/\").pop().toLowerCase().replace(/_\\d+x(?=\\.)/g, \"\");\n    }\n  };\n\n  const isSameRecentlyViewedImage = (first = \"\", second = \"\") => {\n    const firstFingerprint = getRecentlyViewedImageFingerprint(first);\n    const secondFingerprint = getRecentlyViewedImageFingerprint(second);\n    return firstFingerprint && secondFingerprint && firstFingerprint === secondFingerprint;\n  };\n\n  const getRecentlyViewedImageDescriptor = (candidate) => {\n    if (!candidate || typeof candidate === \"string\") return String(candidate || \"\");\n\n    return [\n      candidate.alt,\n      candidate.altText,\n      candidate.image?.alt,\n      candidate.image?.altText,\n      candidate.preview_image?.alt,\n      candidate.preview_image?.altText,\n      candidate.src,\n      candidate.url,\n      candidate.image?.src,\n      candidate.image?.url,\n      candidate.preview_image?.src,\n      candidate.preview_image?.url,\n    ]\n      .filter(Boolean)\n      .join(\" \");\n  };\n\n  const isRecentlyViewedModelImage = (candidate) =>\n    /\\b(model|lifestyle|wearing|worn|on[_-]?body|feature\\s*detail|match|gym|shoot|close[-_\\s]*up)\\b/i.test(\n      getRecentlyViewedImageDescriptor(candidate)\n    );\n\n  const isRecentlyViewedFlatLayImage = (candidate) =>\n    /\\b(flat[-_\\s]*(?:lay|product)|pack[-_\\s]*shot|packshot|cut[-_\\s]*out)\\b/i.test(\n      getRecentlyViewedImageDescriptor(candidate)\n    );\n\n  const getRecentlyViewedProductPrimaryImage = (product, item = {}) => {\n    const productMedia = Array.isArray(product?.media) ? product.media : [];\n    const mediaCandidates = productMedia\n      .filter((media) => !media.media_type || media.media_type === \"image\")\n      .map((media) => ({ source: media, url: getRecentlyViewedImageUrl(media) }))\n      .filter((candidate) => candidate.url);\n    const productImages = Array.isArray(product?.images) ? product.images : [];\n    const imageCandidates = productImages\n      .map((image) => ({ source: image, url: getRecentlyViewedImageUrl(image) }))\n      .filter((candidate) => candidate.url);\n    const primaryCandidate =\n      mediaCandidates.find((candidate) => isRecentlyViewedFlatLayImage(candidate.source)) ||\n      mediaCandidates.find((candidate) => !isRecentlyViewedModelImage(candidate.source)) ||\n      imageCandidates.find((candidate) => isRecentlyViewedFlatLayImage(candidate.source)) ||\n      imageCandidates.find((candidate) => !isRecentlyViewedModelImage(candidate.source));\n\n    return getRecentlyViewedDisplayImage({\n      ...item,\n      title: product?.title || item?.title,\n      url: product?.url || item?.url,\n      image:\n        primaryCandidate?.url ||\n        getRecentlyViewedImageUrl(product?.featured_image || product?.featured_media) ||\n        item?.image ||\n        \"\",\n    });\n  };\n\n  const getRecentlyViewedProductHoverImage = (product, item = {}) => {\n    const featuredImage = getRecentlyViewedImageUrl(item?.image || product?.featured_image || product?.featured_media);\n    const productMedia = Array.isArray(product?.media) ? product.media : [];\n    const mediaCandidates = productMedia\n      .filter((media) => !media.media_type || media.media_type === \"image\")\n      .map((media) => ({ source: media, url: getRecentlyViewedImageUrl(media) }))\n      .filter((candidate) => candidate.url && !isSameRecentlyViewedImage(candidate.url, featuredImage));\n    const modelMedia = mediaCandidates.find((candidate) => isRecentlyViewedModelImage(candidate.source));\n    if (modelMedia?.url) return modelMedia.url;\n    if (mediaCandidates[0]?.url) return mediaCandidates[0].url;\n\n    const productImages = Array.isArray(product?.images) ? product.images : [];\n    const imageCandidates = productImages\n      .map((image) => ({ source: image, url: getRecentlyViewedImageUrl(image) }))\n      .filter((candidate) => candidate.url && !isSameRecentlyViewedImage(candidate.url, featuredImage));\n    const modelImage = imageCandidates.find((candidate) => isRecentlyViewedModelImage(candidate.source));\n\n    return modelImage?.url || imageCandidates[0]?.url || \"\";\n  };\n\n  const getRecentlyViewedHoverImage = (item) => {\n    const hoverImage = String(item?.hoverImage || item?.modelImage || item?.secondaryImage || item?.hover_image || \"\");\n    const displayImage = getRecentlyViewedDisplayImage(item);\n    if (isRecentlyViewedLckdMeshJacket(item, hoverImage || displayImage)) {\n      return (\n        getRecentlyViewedThemeAssetUrl(\n          \"hcx-lckd-in-full-zip-mesh-jacket-model-black.jpg\",\n          \"20260603-model-hover\"\n        ) || hoverImage\n      );\n    }\n    if (!hoverImage || (displayImage && isSameRecentlyViewedImage(hoverImage, displayImage))) return \"\";\n\n    return hoverImage;\n  };\n\n  const renderRecentlyViewedCard = (item, index) => {\n    const displayTitle = getRecentlyViewedDisplayTitle(item?.title || \"Viewed product\");\n    const productUrl = item?.url || \"#\";\n    const cardId = createDomId(\"RecentlyViewedCard\", item?.id || item?.variantId || index);\n    const displayImage = getRecentlyViewedDisplayImage(item);\n    const hoverImage = getRecentlyViewedHoverImage({ ...item, image: displayImage });\n    const mediaMarkup = displayImage\n      ? `\n        <div class=\"card__media\">\n          <div class=\"media media--transparent media--hover-effect\"${hoverImage ? ' data-hcx-card-gallery' : ''}>\n            <img\n              src=\"${escapeHtml(displayImage)}\"\n              sizes=\"(min-width: 990px) 25vw, (min-width: 750px) 33vw, 50vw\"\n              alt=\"${escapeHtml(displayTitle)}\"\n              class=\"motion-reduce hcx-card-cycle-image is-hcx-active\"\n              data-hcx-card-image\n              loading=\"lazy\"\n              width=\"720\"\n              height=\"900\"\n            >\n            ${\n              hoverImage\n                ? `<img\n                    src=\"${escapeHtml(hoverImage)}\"\n                    sizes=\"(min-width: 990px) 25vw, (min-width: 750px) 33vw, 50vw\"\n                    alt=\"${escapeHtml(displayTitle)} worn by model\"\n                    class=\"motion-reduce hcx-card-hover-image hcx-card-cycle-image hcx-card-hover-image--model\"\n                    data-hcx-card-image\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                    width=\"720\"\n                    height=\"900\"\n                  >`\n                : \"\"\n            }\n          </div>\n        </div>\n      `\n      : \"\";\n\n    return `\n      <li class=\"grid__item hcx-recently-viewed__item\">\n        <div class=\"card-wrapper product-card-wrapper underline-links-hover hcx-card-media--flatlay${hoverImage ? \" hcx-card-wrapper--has-hover-image\" : \"\"} hcx-card-wrapper--quick-size\">\n          <div class=\"card card--standard card--media\" style=\"--ratio-percent: 125%;\">\n            <div class=\"card__inner color-scheme-2 gradient ratio\" style=\"--ratio-percent: 125%;\">\n              ${mediaMarkup}\n              <a\n                href=\"${escapeHtml(productUrl)}\"\n                class=\"hcx-card-media-link\"\n                aria-label=\"View ${escapeHtml(displayTitle)}\"\n                tabindex=\"-1\"\n              ></a>\n              ${renderRecentlyViewedSaleBadges(item)}\n              ${\n                hoverImage\n                  ? `<div class=\"hcx-card-gallery-arrows\" data-hcx-card-gallery-arrows>\n                      <button class=\"hcx-card-gallery-arrow hcx-card-gallery-arrow--prev\" type=\"button\" aria-label=\"Previous image for ${escapeHtml(displayTitle)}\" data-hcx-card-gallery-prev>\n                        <span aria-hidden=\"true\">&lsaquo;</span>\n                      </button>\n                      <button class=\"hcx-card-gallery-arrow hcx-card-gallery-arrow--next\" type=\"button\" aria-label=\"Next image for ${escapeHtml(displayTitle)}\" data-hcx-card-gallery-next>\n                        <span aria-hidden=\"true\">&rsaquo;</span>\n                      </button>\n                    </div>`\n                  : \"\"\n              }\n              ${renderRecentlyViewedQuickAdd(item, index)}\n              <div class=\"card__content\">\n                <div class=\"card__information\">\n                  <h3 class=\"card__heading\">\n                    <a\n                      href=\"${escapeHtml(productUrl)}\"\n                      id=\"StandardCardNoMediaLink-${escapeHtml(cardId)}\"\n                      class=\"full-unstyled-link\"\n                      aria-labelledby=\"StandardCardNoMediaLink-${escapeHtml(cardId)}\"\n                    >\n                      ${escapeHtml(displayTitle)}\n                    </a>\n                  </h3>\n                </div>\n                <div class=\"card__badge bottom left\"></div>\n              </div>\n            </div>\n            <div class=\"card__content\">\n              <div class=\"card__information\">\n                <h3 class=\"card__heading h5\" id=\"title-${escapeHtml(cardId)}\">\n                  <a\n                    href=\"${escapeHtml(productUrl)}\"\n                    id=\"CardLink-${escapeHtml(cardId)}\"\n                    class=\"full-unstyled-link\"\n                    aria-labelledby=\"CardLink-${escapeHtml(cardId)}\"\n                  >\n                    ${escapeHtml(displayTitle)}\n                  </a>\n                </h3>\n                ${renderRecentlyViewedMeta(item)}\n                ${renderRecentlyViewedPrice(item)}\n              </div>\n              <div class=\"card__badge bottom left\"></div>\n            </div>\n          </div>\n        </div>\n      </li>\n    `;\n  };\n\n  const getProductHandleFromUrl = (url) => {\n    try {\n      const productUrl = new URL(url, window.location.origin);\n      const match = productUrl.pathname.match(/\\/products\\/([^/?#]+)/);\n      return match?.[1] || \"\";\n    } catch (error) {\n      return \"\";\n    }\n  };\n\n  const hiddenRecentlyViewedHandles = new Set([\n    \"reflection-striped-straight-leg-sweatpants-7\",\n    \"reflection-striped-straight-leg-sweatpants-8\",\n  ]);\n\n  const canonicalRecentlyViewedHandleMap = {\n    \"reflection-striped-straight-leg-sweatpants-7\": \"reflection-striped-straight-leg-sweatpants-5\",\n    \"reflection-striped-straight-leg-sweatpants-8\": \"reflection-striped-straight-leg-sweatpants-6\",\n  };\n\n  const getCanonicalRecentlyViewedHandle = (handle = \"\") => {\n    const normalizedHandle = String(handle || \"\").trim().toLowerCase();\n    return canonicalRecentlyViewedHandleMap[normalizedHandle] || normalizedHandle;\n  };\n\n  const getRecentlyViewedIdentity = (item) => {\n    const handle = getCanonicalRecentlyViewedHandle(getProductHandleFromUrl(item?.url));\n    if (handle) return `handle:${handle}`;\n\n    const title = String(item?.title || \"\").trim().toLowerCase().replace(/\\s+/g, \" \");\n    const colour = normalizeRecentlyViewedColour(item?.colour).toLowerCase();\n    if (title || colour) return `title:${title}|colour:${colour}`;\n\n    return item?.id ? `id:${item.id}` : \"\";\n  };\n\n  const getCurrentViewedIdentity = () => {\n    const marker = document.querySelector(\"[data-hcx-track-viewed-product]\");\n    if (!marker) return \"\";\n\n    return getRecentlyViewedIdentity({\n      id: marker.dataset.productId || marker.dataset.productUrl,\n      title: marker.dataset.productTitle,\n      url: marker.dataset.productUrl,\n      colour: marker.dataset.productColour,\n    });\n  };\n\n  const getUniqueRecentlyViewedItems = (items, { excludeCurrent = false } = {}) => {\n    if (!Array.isArray(items)) return [];\n\n    const seen = new Set();\n    const currentIdentity = excludeCurrent ? getCurrentViewedIdentity() : \"\";\n\n    return items.filter((item) => {\n      const handle = String(getProductHandleFromUrl(item?.url) || \"\").trim().toLowerCase();\n      if (hiddenRecentlyViewedHandles.has(handle) || replacedProductHandles.has(handle)) return false;\n\n      const identity = getRecentlyViewedIdentity(item);\n      if (!identity || (currentIdentity && identity === currentIdentity) || seen.has(identity)) return false;\n\n      seen.add(identity);\n      return true;\n    });\n  };\n\n  const getSizeOptionIndexFromProductJson = (product) => {\n    const options = Array.isArray(product?.options) ? product.options : [];\n    const sizeIndex = options.findIndex((option) => {\n      const optionName = typeof option === \"string\" ? option : option?.name;\n      return String(optionName || \"\").toLowerCase().includes(\"size\");\n    });\n\n    return sizeIndex >= 0 ? sizeIndex : null;\n  };\n\n  const normalizeProductJsonVariant = (variant) => {\n    const options = Array.isArray(variant?.options)\n      ? variant.options\n      : [variant?.option1, variant?.option2, variant?.option3].filter(Boolean);\n\n    return {\n      id: variant?.id || \"\",\n      available: variant?.available !== false,\n      title: variant?.title || \"\",\n      options: options.map((option) => String(option || \"\")),\n      price: Number(variant?.price) || 0,\n      compareAtPrice: Number(variant?.compare_at_price ?? variant?.compareAtPrice) || 0,\n    };\n  };\n\n  const formatShopifyProductJsonPrice = (value) => {\n    return formatRecentlyViewedPriceCents(value);\n  };\n\n  const enrichRecentlyViewedItem = async (item) => {\n    const handle = getProductHandleFromUrl(item?.url);\n    if (!handle || recentlyViewedEnrichmentHandles.has(handle)) return null;\n\n    recentlyViewedEnrichmentHandles.add(handle);\n\n    try {\n      const response = await fetch(`/products/${encodeURIComponent(handle)}.js`, {\n        credentials: \"same-origin\",\n        headers: { Accept: \"application/json\" },\n      });\n      if (!response.ok) return null;\n\n      const product = await response.json();\n      const variants = Array.isArray(product?.variants)\n        ? product.variants.map(normalizeProductJsonVariant).filter((variant) => variant.id)\n        : [];\n      if (!variants.length) return null;\n\n      const selectedVariant =\n        variants.find((variant) => String(variant.id) === String(item.variantId)) ||\n        variants.find((variant) => variant.available) ||\n        variants[0];\n      const productImage = getRecentlyViewedProductPrimaryImage(product, item);\n      const productHoverImage = getRecentlyViewedProductHoverImage(product, {\n        ...item,\n        image: productImage || item.image,\n      });\n      const selectedPriceCents = Number(selectedVariant?.price || product?.price) || 0;\n      const selectedCompareAtCents = Number(selectedVariant?.compareAtPrice) || 0;\n      const currentPrice = formatShopifyProductJsonPrice(selectedPriceCents);\n      const compareAtPrice =\n        selectedCompareAtCents > selectedPriceCents ? formatShopifyProductJsonPrice(selectedCompareAtCents) : \"\";\n      const campaignPriceCents = selectedCompareAtCents * 0.8;\n      const campaignPriceDifference = Math.abs(selectedPriceCents - campaignPriceCents);\n      const discountPercent = compareAtPrice\n        ? campaignPriceDifference <= 50\n          ? 20\n          : Math.round(((selectedCompareAtCents - selectedPriceCents) * 100) / selectedCompareAtCents)\n        : 0;\n\n      return {\n        id: item.id,\n        title: product?.title || item.title,\n        url: product?.url || `/products/${handle}`,\n        price: currentPrice || item.price,\n        compareAtPrice,\n        discountPercent,\n        variantId: selectedVariant?.id || item.variantId,\n        image: productImage || item.image,\n        hoverImage: productHoverImage || item.hoverImage,\n        sizeOptionIndex: getSizeOptionIndexFromProductJson(product),\n        selectedOptions: selectedVariant?.options || item.selectedOptions || [],\n        variants,\n      };\n    } catch (error) {\n      return null;\n    }\n  };\n\n  const cartRecentOrdersKey = \"hcx:cart-recent-orders:v1\";\n  const cartRecentOrderLimit = 8;\n  const cartRecentProductCache = new Map();\n\n  const cleanCartRecentText = (value = \"\", fallback = \"\") =>\n    String(value || fallback)\n      .replace(/\\s+/g, \" \")\n      .trim();\n\n  const normalizeCartRecentProductUrl = (value = \"\") => {\n    const urlText = cleanCartRecentText(value);\n    if (!urlText || urlText === \"#\") return \"\";\n\n    try {\n      const parsedUrl = new URL(urlText, window.location.origin);\n      if (parsedUrl.origin !== window.location.origin || !parsedUrl.pathname.includes(\"/products/\")) return \"\";\n\n      return `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`;\n    } catch (error) {\n      return \"\";\n    }\n  };\n\n  const getCartRecentHandleFromTitle = (value = \"\") =>\n    cleanCartRecentText(value)\n      .toLowerCase()\n      .replace(/&/g, \" and \")\n      .replace(/[^a-z0-9]+/g, \"-\")\n      .replace(/^-+|-+$/g, \"\");\n\n  const getCartRecentOrderLineItems = (order) => {\n    const lineItems = Array.isArray(order?.items)\n      ? order.items\n      : Array.isArray(order?.line_items)\n        ? order.line_items\n        : Array.isArray(order?.lineItems)\n          ? order.lineItems\n          : [];\n\n    return lineItems.length ? lineItems : [order];\n  };\n\n  const getCartRecentLineItemTitle = (order, lineItem) =>\n    cleanCartRecentText(\n      lineItem?.item ||\n        lineItem?.title ||\n        lineItem?.product_title ||\n        lineItem?.product ||\n        lineItem?.name ||\n        order?.item ||\n        order?.title ||\n        order?.product_title ||\n        order?.product ||\n        order?.line_item\n    );\n\n  const getCartRecentLineItemUrl = (order, lineItem) =>\n    normalizeCartRecentProductUrl(\n      lineItem?.url ||\n        lineItem?.product_url ||\n        lineItem?.productUrl ||\n        lineItem?.href ||\n        order?.url ||\n        order?.product_url ||\n        order?.productUrl ||\n        order?.product_href ||\n        order?.href\n    );\n\n  const getCartRecentLineItemHandle = (order, lineItem, url, title) =>\n    cleanCartRecentText(\n      lineItem?.handle ||\n        lineItem?.product_handle ||\n        lineItem?.productHandle ||\n        order?.handle ||\n        order?.product_handle ||\n        order?.productHandle ||\n        getHcxProductHandleFromUrl(url) ||\n        getCartRecentHandleFromTitle(title)\n    ).toLowerCase();\n\n  const normalizeCartRecentOrders = (orders) => {\n    const seenHandles = new Set();\n    const normalized = [];\n\n    (Array.isArray(orders) ? orders : []).forEach((order, orderIndex) => {\n      const orderedAtValue =\n        order?.orderedAt || order?.ordered_at || order?.created_at || order?.timestamp || order?.date || Date.now();\n      const orderedAt = new Date(orderedAtValue);\n      const orderedAtIso = Number.isNaN(orderedAt.getTime())\n        ? new Date(Date.now() - orderIndex * 60000).toISOString()\n        : orderedAt.toISOString();\n\n      getCartRecentOrderLineItems(order).forEach((lineItem, lineIndex) => {\n        const title = getCartRecentLineItemTitle(order, lineItem);\n        const url = getCartRecentLineItemUrl(order, lineItem);\n        const handle = getCartRecentLineItemHandle(order, lineItem, url, title);\n        if (!handle || seenHandles.has(handle)) return;\n\n        seenHandles.add(handle);\n        normalized.push({\n          id: cleanCartRecentText(order?.id || order?.order_id || `${handle}:${orderedAtIso}:${lineIndex}`),\n          handle,\n          title,\n          url: url || `/products/${handle}`,\n          orderedAt: orderedAtIso,\n        });\n      });\n    });\n\n    return normalized\n      .sort((first, second) => new Date(second.orderedAt) - new Date(first.orderedAt))\n      .slice(0, cartRecentOrderLimit * 2);\n  };\n\n  const readCachedCartRecentOrders = () => {\n    try {\n      const parsed = JSON.parse(window.localStorage.getItem(cartRecentOrdersKey) || \"[]\");\n      return normalizeCartRecentOrders(parsed);\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const writeCachedCartRecentOrders = (orders) => {\n    try {\n      window.localStorage.setItem(cartRecentOrdersKey, JSON.stringify(normalizeCartRecentOrders(orders)));\n    } catch (error) {\n      return;\n    }\n  };\n\n  const fetchCartRecentOrders = async (recommendations) => {\n    const feedUrl = cleanCartRecentText(recommendations?.dataset?.hcxRecentOrdersUrl);\n    if (!feedUrl) return [];\n\n    try {\n      const response = await fetch(feedUrl, {\n        cache: \"no-store\",\n        credentials: \"same-origin\",\n        headers: { Accept: \"application/json\" },\n      });\n      if (!response.ok) return [];\n\n      const data = await response.json();\n      const orders = Array.isArray(data) ? data : Array.isArray(data?.orders) ? data.orders : [];\n      const normalized = normalizeCartRecentOrders(orders);\n      if (normalized.length) writeCachedCartRecentOrders(normalized);\n      return normalized;\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const fetchCartRecentProduct = async (handle) => {\n    const normalizedHandle = cleanCartRecentText(handle).toLowerCase();\n    if (!normalizedHandle || replacedProductHandles.has(normalizedHandle)) return null;\n\n    if (!cartRecentProductCache.has(normalizedHandle)) {\n      cartRecentProductCache.set(\n        normalizedHandle,\n        fetch(`/products/${encodeURIComponent(normalizedHandle)}.js`, {\n          credentials: \"same-origin\",\n          headers: { Accept: \"application/json\" },\n        })\n          .then((response) => (response.ok ? response.json() : null))\n          .catch(() => null)\n      );\n    }\n\n    return cartRecentProductCache.get(normalizedHandle);\n  };\n\n  const getCartRecentProductImage = (product) =>\n    getRecentlyViewedDisplayImage({\n      title: product?.title,\n      url: product?.url,\n      image: product?.featured_image || product?.images?.[0] || \"\",\n    });\n\n  const getCartRecentMediaClass = (product, image = \"\") => {\n    const profile = `${product?.title || \"\"} ${product?.product_type || \"\"} ${image}`.toLowerCase();\n    if (/\\b(model|lifestyle|worn|wearing|on[_-]?body|gym|shoot|close[-_ ]?up)\\b/.test(profile)) {\n      return \"hcx-cart-rec--lifestyle\";\n    }\n\n    return \"hcx-cart-rec--flatlay\";\n  };\n\n  const isCartRecommendationJogger = (product) =>\n    /\\b(joggers?|sweatpants?)\\b/.test(\n      `${product?.title || \"\"} ${product?.product_type || \"\"} ${product?.type || \"\"}`.toLowerCase()\n    );\n\n  const isMediumCartRecommendationOption = (option) => {\n    const value = cleanCartRecentText(option).toLowerCase();\n    return value === \"m\" || value === \"medium\";\n  };\n\n  const getCartRecentProductPayload = (product, orderItem) => {\n    const variants = Array.isArray(product?.variants)\n      ? product.variants.map(normalizeProductJsonVariant).filter((variant) => variant.id)\n      : [];\n    const isJogger = isCartRecommendationJogger(product);\n    const selectedVariant =\n      (isJogger\n        ? variants.find(\n            (variant) => variant.available && variant.options.some(isMediumCartRecommendationOption)\n          )\n        : null) ||\n      variants.find((variant) => variant.available) ||\n      variants[0];\n    if (!selectedVariant?.id || selectedVariant.available === false) return null;\n\n    const productUrl = product?.url || orderItem?.url || `/products/${orderItem?.handle}`;\n    const image = getCartRecentProductImage(product);\n    const currentPrice = formatShopifyProductJsonPrice(selectedVariant?.price || product?.price);\n    const title = product?.title || orderItem?.title || \"Recently bought\";\n\n    return {\n      id: product?.id || orderItem?.id || orderItem?.handle,\n      handle: getHcxProductHandleFromUrl(productUrl) || orderItem?.handle,\n      title,\n      displayTitle: getRecentlyViewedDisplayTitle(title),\n      url: productUrl,\n      image,\n      price: getRecentlyViewedDisplayPrice(\n        {\n          title,\n          url: productUrl,\n          type: product?.type,\n          productType: product?.product_type,\n        },\n        currentPrice\n      ),\n      variantId: selectedVariant.id,\n      sizeLabel: isJogger\n        ? selectedVariant.options.find(isMediumCartRecommendationOption) || \"\"\n        : \"\",\n      mediaClass: getCartRecentMediaClass(product, image),\n      orderedAt: orderItem?.orderedAt,\n    };\n  };\n\n  const renderCartRecentRecommendationCard = (item, index) => {\n    const formId = createDomId(\"hcx-cart-recent-rec\", item.id || item.handle, index);\n\n    return `\n      <li\n        class=\"hcx-cart-rec hcx-cart-rec--recent ${escapeHtml(item.mediaClass || \"hcx-cart-rec--flatlay\")}\"\n        data-hcx-cart-rec-card\n        data-hcx-cart-rec-dynamic=\"true\"\n        data-hcx-cart-rec-source=\"recent-orders\"\n        data-hcx-cart-rec-product-id=\"${escapeHtml(item.id)}\"\n        data-hcx-cart-rec-product-handle=\"${escapeHtml(item.handle)}\"\n        data-hcx-cart-rec-title=\"${escapeHtml(item.title)}\"\n        data-hcx-cart-rec-url=\"${escapeHtml(item.url)}\"\n        data-hcx-cart-rec-ordered-at=\"${escapeHtml(item.orderedAt)}\"\n      >\n        <a href=\"${escapeHtml(item.url)}\" class=\"hcx-cart-rec__media\" aria-label=\"${escapeHtml(item.displayTitle)}\">\n          ${\n            item.image\n              ? `<img src=\"${escapeHtml(item.image)}\" alt=\"${escapeHtml(item.displayTitle)}\" class=\"hcx-cart-rec__image\" loading=\"eager\" width=\"420\" height=\"530\">`\n              : `<span class=\"hcx-cart-rec__image placeholder-svg\"></span>`\n          }\n        </a>\n\n        <div class=\"hcx-cart-rec__content\">\n          <span class=\"hcx-cart-rec__badge\">Recently bought</span>\n          <a href=\"${escapeHtml(item.url)}\" class=\"hcx-cart-rec__title\">${escapeHtml(item.displayTitle)}</a>\n          ${\n            item.price\n              ? `<div class=\"hcx-cart-rec__price\"><span>${escapeHtml(item.price)}</span></div>`\n              : \"\"\n          }\n          <product-form class=\"hcx-cart-rec__form\" data-section-id=\"cart-drawer\" data-hide-errors=\"true\">\n            <form method=\"post\" action=\"${escapeHtml(window.routes?.cart_add_url || \"/cart/add\")}\" id=\"${escapeHtml(formId)}\" class=\"form\" enctype=\"multipart/form-data\" novalidate data-type=\"add-to-cart-form\">\n              <input type=\"hidden\" name=\"id\" value=\"${escapeHtml(item.variantId)}\" class=\"product-variant-id\">\n              <input type=\"hidden\" name=\"quantity\" value=\"1\">\n              <button type=\"submit\" name=\"add\" class=\"hcx-cart-rec__action${item.sizeLabel ? \" hcx-cart-rec__action--sized\" : \"\"}\" aria-label=\"Add ${escapeHtml(item.displayTitle)}${item.sizeLabel ? `, size ${escapeHtml(item.sizeLabel)}` : \"\"} to cart\">\n                <span>${item.sizeLabel ? escapeHtml(item.sizeLabel) : \"Add\"}</span>\n                ${renderRecentlyViewedLoadingSpinner()}\n              </button>\n            </form>\n          </product-form>\n        </div>\n      </li>\n    `;\n  };\n\n  const resetCartRecentOrderCard = (card) => {\n    if (card?.dataset?.hcxCartRecDynamic === \"true\") {\n      card.remove();\n      return;\n    }\n\n    const badge = card?.querySelector(\".hcx-cart-rec__badge\");\n    if (badge && card.dataset.hcxCartRecOriginalBadge !== undefined) {\n      badge.textContent = card.dataset.hcxCartRecOriginalBadge;\n    }\n    card?.classList.remove(\"hcx-cart-rec--recent\");\n    if (card?.dataset) card.dataset.hcxCartRecSource = \"theme\";\n  };\n\n  const setCartRecentOrderBadge = (card) => {\n    const content = card?.querySelector(\".hcx-cart-rec__content\");\n    const title = card?.querySelector(\".hcx-cart-rec__title\");\n    if (!card || !content) return;\n\n    let badge = card.querySelector(\".hcx-cart-rec__badge\");\n    if (!badge) {\n      badge = document.createElement(\"span\");\n      badge.className = \"hcx-cart-rec__badge\";\n      content.insertBefore(badge, title || content.firstChild);\n      card.dataset.hcxCartRecOriginalBadge = \"\";\n    } else if (card.dataset.hcxCartRecOriginalBadge === undefined) {\n      card.dataset.hcxCartRecOriginalBadge = badge.textContent || \"\";\n    }\n\n    badge.textContent = \"Recently bought\";\n    card.dataset.hcxCartRecSource = \"recent-orders\";\n    card.classList.add(\"hcx-cart-rec--recent\");\n  };\n\n  const findCartRecentExistingCard = (rail, handle) =>\n    [...rail.querySelectorAll(\"[data-hcx-cart-rec-card]\")].find(\n      (card) => cleanCartRecentText(card.dataset.hcxCartRecProductHandle).toLowerCase() === handle\n    );\n\n  const isCartRecentExcluded = (recommendations, product) => {\n    const handle = cleanCartRecentText(product?.handle).toLowerCase();\n    const productId = cleanCartRecentText(product?.id);\n    const cartHandles = recommendations?.dataset?.hcxCartProductHandles || \"\";\n    const cartIds = recommendations?.dataset?.hcxCartProductIds || \"\";\n    const replacedHandles = recommendations?.dataset?.hcxCartReplacedProductHandles || \"\";\n\n    return (\n      !handle ||\n      cartHandles.includes(`|${handle}|`) ||\n      cartIds.includes(`,${productId},`) ||\n      replacedHandles.includes(`|${handle}|`) ||\n      replacedProductHandles.has(handle)\n    );\n  };\n\n  const renderCartRecentOrders = async (recommendations, orders) => {\n    const rail = recommendations?.querySelector(\"[data-hcx-cart-rec-rail]\");\n    if (!rail || !orders.length) return;\n\n    rail.querySelectorAll(\"[data-hcx-cart-rec-source='recent-orders']\").forEach(resetCartRecentOrderCard);\n\n    const nextCards = [];\n    const seenHandles = new Set();\n\n    for (const orderItem of orders) {\n      if (nextCards.length >= cartRecentOrderLimit) break;\n\n      const handle = cleanCartRecentText(orderItem.handle || getHcxProductHandleFromUrl(orderItem.url)).toLowerCase();\n      if (!handle || seenHandles.has(handle)) continue;\n      if ((recommendations.dataset.hcxCartProductHandles || \"\").includes(`|${handle}|`)) continue;\n      if ((recommendations.dataset.hcxCartReplacedProductHandles || \"\").includes(`|${handle}|`)) continue;\n      if (replacedProductHandles.has(handle)) continue;\n\n      const existingCard = findCartRecentExistingCard(rail, handle);\n      if (existingCard) {\n        setCartRecentOrderBadge(existingCard);\n        nextCards.push(existingCard);\n        seenHandles.add(handle);\n        continue;\n      }\n\n      const product = await fetchCartRecentProduct(handle);\n      const item = getCartRecentProductPayload(product, orderItem);\n      if (!item || isCartRecentExcluded(recommendations, item)) continue;\n\n      const template = document.createElement(\"template\");\n      template.innerHTML = renderCartRecentRecommendationCard(item, nextCards.length).trim();\n      const card = template.content.firstElementChild;\n      if (!card) continue;\n\n      nextCards.push(card);\n      seenHandles.add(handle);\n    }\n\n    if (!rail.isConnected || !nextCards.length) return;\n\n    rail.prepend(...nextCards);\n    recommendations.classList.add(\"hcx-cart-recommendations--recent-orders\");\n    recommendations.dataset.hcxRecentOrdersRendered = \"true\";\n    window.requestAnimationFrame(() => {\n      syncCartRecommendationScrollbar(recommendations);\n      initCartRecommendationScrollbars();\n    });\n  };\n\n  const initRecentCartRecommendations = () => {\n    document.querySelectorAll(\".hcx-cart-recommendations[data-hcx-recent-orders-url]\").forEach((recommendations) => {\n      const rail = recommendations.querySelector(\"[data-hcx-cart-rec-rail]\");\n      if (!rail || rail.dataset.hcxRecentOrdersBound === \"true\") return;\n\n      rail.dataset.hcxRecentOrdersBound = \"true\";\n\n      const cachedOrders = readCachedCartRecentOrders();\n      if (cachedOrders.length) renderCartRecentOrders(recommendations, cachedOrders);\n\n      fetchCartRecentOrders(recommendations).then((orders) => {\n        if (orders.length) renderCartRecentOrders(recommendations, orders);\n      });\n    });\n\n    if (html.dataset.hcxRecentCartRecObserverBound !== \"true\" && \"MutationObserver\" in window) {\n      html.dataset.hcxRecentCartRecObserverBound = \"true\";\n      new MutationObserver(() => window.requestAnimationFrame(initRecentCartRecommendations)).observe(document.body, {\n        childList: true,\n        subtree: true,\n      });\n    }\n  };\n\n  const enrichRecentlyViewedItems = (items) => {\n    const refreshableItems = items.filter((item) => {\n      const handle = getProductHandleFromUrl(item?.url);\n      return handle && !recentlyViewedEnrichmentHandles.has(handle);\n    });\n\n    if (!refreshableItems.length) return;\n\n    Promise.all(refreshableItems.map(enrichRecentlyViewedItem)).then((results) => {\n      const enrichedItems = results.filter(Boolean);\n      if (!enrichedItems.length) return;\n\n      let didUpdate = false;\n      const currentItems = readRecentlyViewed();\n      const nextItems = currentItems.map((item) => {\n        const enrichedItem = enrichedItems.find((candidate) => String(candidate.id) === String(item.id));\n        if (!enrichedItem) return item;\n\n        didUpdate = true;\n        return {\n          ...item,\n          title: enrichedItem.title || item.title,\n          url: enrichedItem.url || item.url,\n          price: enrichedItem.price || item.price,\n          compareAtPrice: enrichedItem.compareAtPrice || \"\",\n          discountPercent: enrichedItem.discountPercent || 0,\n          sizeOptionIndex: enrichedItem.sizeOptionIndex,\n          selectedOptions: enrichedItem.selectedOptions,\n          variants: enrichedItem.variants,\n          image: enrichedItem.image || item.image,\n          hoverImage: enrichedItem.hoverImage || item.hoverImage,\n        };\n      });\n\n      if (didUpdate) {\n        writeRecentlyViewed(nextItems);\n        renderRecentlyViewed();\n      }\n    });\n  };\n\n  const trackRecentlyViewedProduct = () => {\n    const marker = document.querySelector(\"[data-hcx-track-viewed-product]\");\n    if (!marker || marker.dataset.hcxTrackedViewed === \"true\") return;\n\n    marker.dataset.hcxTrackedViewed = \"true\";\n\n    const payload = getViewedPayload(marker);\n    if (!payload.id) return;\n\n    const currentItems = getUniqueRecentlyViewedItems(readRecentlyViewed());\n    const payloadIdentity = getRecentlyViewedIdentity(payload);\n    const existing = currentItems.find(\n      (item) => String(item.id) === String(payload.id) || getRecentlyViewedIdentity(item) === payloadIdentity\n    );\n    const nextPayload = {\n      ...existing,\n      ...payload,\n      views: (Number(existing?.views || existing?.viewCount || 0) || 0) + 1,\n      lastViewedAt: Date.now(),\n    };\n    const nextItems = getUniqueRecentlyViewedItems([\n      nextPayload,\n      ...currentItems.filter((item) => getRecentlyViewedIdentity(item) !== payloadIdentity),\n    ]).slice(0, recentlyViewedStoreLimit);\n    writeRecentlyViewed(nextItems);\n  };\n\n  const renderRecentlyViewed = () => {\n    const sections = document.querySelectorAll(\"[data-hcx-recently-viewed-section]\");\n    if (!sections.length) return;\n\n    const rawStoredItems = readRecentlyViewed();\n    const cleanedStoredItems = getUniqueRecentlyViewedItems(rawStoredItems).slice(0, recentlyViewedStoreLimit);\n    if (cleanedStoredItems.length !== rawStoredItems.length) {\n      writeRecentlyViewed(cleanedStoredItems);\n    }\n\n    const storedItems = getUniqueRecentlyViewedItems(cleanedStoredItems, { excludeCurrent: true }).slice(0, recentlyViewedLimit);\n\n    sections.forEach((section) => {\n      const list = section.querySelector(\"[data-hcx-recently-viewed-list]\");\n      if (!list) return;\n\n      const items = storedItems.slice(0, recentlyViewedLimit);\n\n      if (!items.length) {\n        list.innerHTML = \"\";\n        list.style.removeProperty(\"--hcx-recently-viewed-count\");\n        section.style.removeProperty(\"--hcx-recently-viewed-count\");\n        section.hidden = true;\n        return;\n      }\n\n      list.innerHTML = items.map(renderRecentlyViewedCard).join(\"\");\n      list.style.setProperty(\n        \"--hcx-recently-viewed-count\",\n        String(Math.max(1, Math.min(recentlyViewedLimit, items.length)))\n      );\n      section.style.setProperty(\n        \"--hcx-recently-viewed-count\",\n        String(Math.max(1, Math.min(recentlyViewedLimit, items.length)))\n      );\n      section.hidden = false;\n      initCardQuickAdds();\n      enrichRecentlyViewedItems(items);\n    });\n  };\n\n  const initCustomerVoiceCarousels = () => {\n    document.querySelectorAll(\"[data-hcx-review-carousel]\").forEach((carousel) => {\n      if (carousel.dataset.hcxCarouselBound === \"true\") return;\n      carousel.dataset.hcxCarouselBound = \"true\";\n\n      const track = carousel.querySelector(\"[data-hcx-review-track]\");\n      const previous = carousel.querySelector(\"[data-hcx-review-prev]\");\n      const next = carousel.querySelector(\"[data-hcx-review-next]\");\n      if (!track || !previous || !next) return;\n\n      const getStep = () => {\n        const card = track.querySelector(\".hcx-customer-review-card\");\n        if (!card) return Math.max(track.clientWidth * 0.72, 320);\n\n        const styles = window.getComputedStyle(track);\n        const gap = parseFloat(styles.columnGap || styles.gap || \"0\") || 0;\n        return card.getBoundingClientRect().width + gap;\n      };\n\n      const updateControls = () => {\n        const canScroll = track.scrollWidth > track.clientWidth + 2;\n        previous.hidden = !canScroll;\n        next.hidden = !canScroll;\n      };\n\n      const scrollTrack = (direction, event) => {\n        event?.preventDefault();\n\n        updateControls();\n\n        const maxLeft = Math.max(0, track.scrollWidth - track.clientWidth);\n        if (maxLeft <= 2) return;\n\n        let target = track.scrollLeft + (getStep() * direction);\n\n        if (direction > 0 && track.scrollLeft >= maxLeft - 2) target = 0;\n        if (direction < 0 && track.scrollLeft <= 2) target = maxLeft;\n\n        track.scrollTo({\n          left: Math.max(0, Math.min(maxLeft, target)),\n          behavior: \"smooth\",\n        });\n      };\n\n      previous.addEventListener(\"click\", (event) => scrollTrack(-1, event));\n      next.addEventListener(\"click\", (event) => scrollTrack(1, event));\n      track.addEventListener(\"scroll\", () => window.requestAnimationFrame(updateControls), { passive: true });\n      window.addEventListener(\"resize\", updateControls);\n      updateControls();\n    });\n  };\n\n  const initMobileMenuClose = (root = document) => {\n    const forceMobileMenuClosed = (drawer, details, summary) => {\n      details?.removeAttribute(\"open\");\n      details?.classList.remove(\"menu-opening\");\n      details?.querySelectorAll(\"details\").forEach((nestedDetails) => {\n        nestedDetails.removeAttribute(\"open\");\n        nestedDetails.classList.remove(\"menu-opening\");\n      });\n      details?.querySelectorAll(\".submenu-open\").forEach((submenu) => {\n        submenu.classList.remove(\"submenu-open\");\n      });\n\n      summary?.setAttribute(\"aria-expanded\", \"false\");\n      const headerSection = drawer?.closest(\".section-header\") || document.querySelector(\".section-header\");\n      headerSection?.classList.remove(\"menu-open\");\n      document.body.classList.remove(\"hcx-menu-open\", \"overflow-hidden\", \"overflow-hidden-tablet\", \"overflow-hidden-desktop\");\n    };\n\n    root.querySelectorAll(\"[data-hcx-mobile-menu-close]\").forEach((button) => {\n      if (button.dataset.hcxMobileMenuCloseBound === \"true\") return;\n      button.dataset.hcxMobileMenuCloseBound = \"true\";\n\n      button.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n\n        const drawer = button.closest(\"header-drawer\");\n        const details = drawer?.querySelector(\"#Details-menu-drawer-container\");\n        const summary = details?.querySelector(\".header__icon--menu\");\n\n        if (!drawer || !details || !summary) return;\n\n        if (details.hasAttribute(\"open\") && typeof drawer.closeMenuDrawer === \"function\") {\n          drawer.closeMenuDrawer(event, summary);\n          summary.setAttribute(\"aria-expanded\", \"false\");\n          window.setTimeout(() => forceMobileMenuClosed(drawer, details, summary), 460);\n          return;\n        }\n\n        forceMobileMenuClosed(drawer, details, summary);\n      });\n    });\n  };\n\n  const initMobileMenuSearch = (root = document) => {\n    root.querySelectorAll(\"[data-hcx-mobile-menu-search]\").forEach((trigger) => {\n      if (trigger.dataset.hcxMobileMenuSearchBound === \"true\") return;\n      trigger.dataset.hcxMobileMenuSearchBound = \"true\";\n\n      trigger.addEventListener(\"click\", (event) => {\n        const searchSummary =\n          document.querySelector(\".hcx-mobile-header-search .header__search details > summary\") ||\n          document.querySelector(\".header > .header__icons .header__search details > summary\") ||\n          document.querySelector(\".header__search details > summary\");\n\n        if (!searchSummary) return;\n\n        event.preventDefault();\n\n        const drawer = trigger.closest(\"header-drawer\");\n        const details = drawer?.querySelector(\"#Details-menu-drawer-container\");\n        const menuSummary = details?.querySelector(\".header__icon--menu\");\n\n        const openSearch = () => {\n          const searchDetails = searchSummary.closest(\"details\");\n          if (searchDetails?.hasAttribute(\"open\")) return;\n          searchSummary.click();\n        };\n\n        if (drawer && details?.hasAttribute(\"open\") && menuSummary && typeof drawer.closeMenuDrawer === \"function\") {\n          drawer.closeMenuDrawer(event, menuSummary);\n          menuSummary.setAttribute(\"aria-expanded\", \"false\");\n          window.setTimeout(openSearch, 430);\n          return;\n        }\n\n        openSearch();\n      });\n    });\n  };\n\n  const initMobileMenuInteractionGuard = () => {\n    if (html.dataset.hcxMobileMenuGuardBound === \"true\") return;\n    html.dataset.hcxMobileMenuGuardBound = \"true\";\n\n    const mobileMenuMedia = window.matchMedia(\"(max-width: 989px), (hover: none), (pointer: coarse)\");\n    const getOpenMenu = () => document.querySelector(\"#Details-menu-drawer-container[open]\");\n    const isMenuOwnedTarget = (target) => {\n      if (!(target instanceof Element)) return false;\n\n      return Boolean(\n        target.closest(\n          \"#Details-menu-drawer-container, #menu-drawer, header-drawer, [data-hcx-saves-drawer], cart-drawer, .cart-drawer\"\n        )\n      );\n    };\n    const blockClickThrough = (event) => {\n      if (!mobileMenuMedia.matches || !getOpenMenu()) return;\n      if (isMenuOwnedTarget(event.target)) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n      if (typeof event.stopImmediatePropagation === \"function\") event.stopImmediatePropagation();\n    };\n\n    [\"pointerdown\", \"pointerup\", \"touchstart\", \"touchend\", \"click\"].forEach((eventName) => {\n      document.addEventListener(eventName, blockClickThrough, { capture: true, passive: false });\n    });\n  };\n\n  const getSavesForDisplay = () => {\n    const dismissed = new Set(readDismissedSaves());\n    const savedItems = readSaves()\n      .filter((item) => item?.id && !dismissed.has(String(item.id)))\n      .map((item) => ({ ...item, source: \"saved\" }));\n    const savedIds = new Set(savedItems.map((item) => String(item.id)));\n    const autoItems = readRecentlyViewed()\n      .filter((item) => item?.id && !savedIds.has(String(item.id)) && !dismissed.has(String(item.id)))\n      .filter((item) => Number(item.views || item.viewCount || 0) >= savesAutoViewThreshold)\n      .map((item) => ({ ...item, source: \"viewed\", views: Number(item.views || item.viewCount || 0) }))\n      .sort((a, b) => Number(b.lastViewedAt || 0) - Number(a.lastViewedAt || 0));\n\n    return [...savedItems, ...autoItems].slice(0, savesLimit);\n  };\n\n  const removeSaveItem = (id) => {\n    if (!id) return;\n    writeSaves(readSaves().filter((item) => String(item.id) !== String(id)));\n    writeDismissedSaves([...readDismissedSaves(), String(id)]);\n  };\n\n  let savesToastTimeout;\n\n  const getSavesToast = () => {\n    let toast = document.querySelector(\"[data-hcx-saves-toast]\");\n    if (toast) return toast;\n\n    toast = document.createElement(\"div\");\n    toast.className = \"hcx-saves-toast\";\n    toast.setAttribute(\"role\", \"status\");\n    toast.setAttribute(\"aria-live\", \"polite\");\n    toast.setAttribute(\"aria-atomic\", \"true\");\n    toast.dataset.hcxSavesToast = \"\";\n    document.body.appendChild(toast);\n\n    return toast;\n  };\n\n  const showSavesToast = (message) => {\n    if (!document.body) return;\n\n    const toast = getSavesToast();\n    toast.textContent = message;\n    toast.classList.add(\"is-active\");\n\n    window.clearTimeout(savesToastTimeout);\n    savesToastTimeout = window.setTimeout(() => {\n      toast.classList.remove(\"is-active\");\n    }, 2400);\n  };\n\n  const updateSavesScrollControls = () => {\n    const list = document.querySelector(\"[data-hcx-saves-list]\");\n    const controls = document.querySelectorAll(\"[data-hcx-saves-scroll]\");\n    const canScroll = Boolean(list?.querySelector(\".hcx-save-item\")) && list.scrollWidth > list.clientWidth + 2;\n\n    controls.forEach((control) => {\n      control.hidden = !canScroll;\n      if (!canScroll) {\n        control.disabled = true;\n        return;\n      }\n\n      const atStart = list.scrollLeft <= 2;\n      const atEnd = list.scrollLeft + list.clientWidth >= list.scrollWidth - 2;\n      control.disabled = control.dataset.hcxSavesScroll === \"previous\" ? atStart : atEnd;\n    });\n  };\n\n  const setSavesDrawerOpen = (isOpen) => {\n    const drawer = document.querySelector(\"[data-hcx-saves-drawer]\");\n    if (!drawer) return;\n\n    drawer.hidden = !isOpen;\n    html.classList.toggle(\"hcx-saves-open\", isOpen);\n    document.querySelectorAll(\"[data-hcx-saves-open]\").forEach((button) => {\n      button.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    });\n\n    if (isOpen) {\n      renderSaves();\n      drawer.querySelector(\"[data-hcx-saves-close]\")?.focus({ preventScroll: true });\n    }\n  };\n\n  const toggleProductSave = (saveButton) => {\n    const payload = getSavePayload(saveButton);\n    if (!payload.id) return;\n\n    const items = readSaves();\n    const displayItems = getSavesForDisplay();\n    const active = isSaved(displayItems, payload.id);\n    const nextItems = active\n      ? items.filter((item) => String(item.id) !== String(payload.id))\n      : [payload, ...items.filter((item) => String(item.id) !== String(payload.id))].slice(0, savesLimit);\n\n    if (active) {\n      writeDismissedSaves([...readDismissedSaves(), String(payload.id)]);\n    } else {\n      writeDismissedSaves(readDismissedSaves().filter((id) => String(id) !== String(payload.id)));\n    }\n\n    writeSaves(nextItems);\n    renderSaves();\n    showSavesToast(active ? \"Removed from liked box\" : \"Added to your liked box\");\n  };\n\n  const initSavesControls = (root = document) => {\n    root.querySelectorAll(\"[data-hcx-save-product]\").forEach((button) => {\n      if (button.dataset.hcxSaveProductBound === \"true\") return;\n      button.dataset.hcxSaveProductBound = \"true\";\n\n      button.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        toggleProductSave(button);\n      });\n    });\n\n    root.querySelectorAll(\"[data-hcx-saves-open]\").forEach((button) => {\n      if (button.dataset.hcxSavesOpenBound === \"true\") return;\n      button.dataset.hcxSavesOpenBound = \"true\";\n\n      button.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        setSavesDrawerOpen(true);\n      });\n    });\n\n    root.querySelectorAll(\"[data-hcx-saves-close]\").forEach((button) => {\n      if (button.dataset.hcxSavesCloseBound === \"true\") return;\n      button.dataset.hcxSavesCloseBound = \"true\";\n\n      button.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        setSavesDrawerOpen(false);\n      });\n    });\n  };\n\n  function renderSaves() {\n    const items = getSavesForDisplay();\n    const list = document.querySelector(\"[data-hcx-saves-list]\");\n    const summary = document.querySelector(\"[data-hcx-saves-summary]\");\n    if (summary) summary.textContent = items.length === 1 ? \"1 item\" : `${items.length} items`;\n\n    document.querySelectorAll(\"[data-hcx-saves-count]\").forEach((count) => {\n      const isHeaderCount = count.classList.contains(\"hcx-header-saves-link__count\");\n      count.textContent = isHeaderCount ? \"\" : items.length;\n      count.hidden = isHeaderCount;\n    });\n\n    document.querySelectorAll(\"[data-hcx-save-product]\").forEach((button) => {\n      const payload = getSavePayload(button);\n      const active = Boolean(payload.id) && isSaved(items, payload.id);\n      button.classList.toggle(\"is-saved\", active);\n      button.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\");\n      button.setAttribute(\"aria-label\", `${active ? \"Remove\" : \"Save\"} ${payload.title}`);\n    });\n\n    if (!list) return;\n\n    if (!items.length) {\n      list.innerHTML = '<p class=\"hcx-saves-drawer__empty\">Saved products will show here</p>';\n      updateSavesScrollControls();\n      return;\n    }\n\n    list.innerHTML = items\n      .map(\n        (item) => `\n          <article class=\"hcx-save-item\">\n            <a href=\"${escapeHtml(item.url)}\" class=\"hcx-save-item__media\">\n              ${\n                item.image\n                  ? `<img src=\"${escapeHtml(item.image)}\" alt=\"${escapeHtml(item.title)}\" loading=\"lazy\">`\n                  : '<span aria-hidden=\"true\"></span>'\n              }\n            </a>\n            <div class=\"hcx-save-item__content\">\n              <a href=\"${escapeHtml(item.url)}\">${escapeHtml(item.title)}</a>\n              ${item.price ? `<span>${escapeHtml(item.price)}</span>` : \"\"}\n              <em>${item.source === \"viewed\" ? `Viewed ${escapeHtml(item.views)} times` : \"Saved\"}</em>\n            </div>\n            <div class=\"hcx-save-item__actions\">\n              ${\n                item.variantId\n                  ? `<button class=\"hcx-save-item__add\" type=\"button\" data-hcx-save-add=\"${escapeHtml(item.variantId)}\">Add to cart</button>`\n                  : `<a class=\"hcx-save-item__add\" href=\"${escapeHtml(item.url)}\">View item</a>`\n              }\n              <button class=\"hcx-save-item__remove\" type=\"button\" data-hcx-save-remove=\"${escapeHtml(item.id)}\">Remove</button>\n            </div>\n          </article>\n        `\n      )\n      .join(\"\");\n    list.scrollLeft = 0;\n    window.requestAnimationFrame(updateSavesScrollControls);\n  }\n\n  document.addEventListener(\"click\", (event) => {\n    const saveButton = event.target.closest(\"[data-hcx-save-product]\");\n    if (!saveButton) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    toggleProductSave(saveButton);\n  });\n\n  document.addEventListener(\"click\", (event) => {\n    if (event.target.closest(\"[data-hcx-saves-open]\")) {\n      event.preventDefault();\n      setSavesDrawerOpen(true);\n      return;\n    }\n\n    if (event.target.closest(\"[data-hcx-saves-close]\")) {\n      event.preventDefault();\n      setSavesDrawerOpen(false);\n      return;\n    }\n\n    const scrollButton = event.target.closest(\"[data-hcx-saves-scroll]\");\n    if (scrollButton) {\n      event.preventDefault();\n      const list = document.querySelector(\"[data-hcx-saves-list]\");\n      if (!list) return;\n\n      const direction = scrollButton.dataset.hcxSavesScroll === \"previous\" ? -1 : 1;\n      list.scrollBy({ left: direction * list.clientWidth, behavior: \"smooth\" });\n      window.setTimeout(updateSavesScrollControls, 420);\n      return;\n    }\n\n    const addButton = event.target.closest(\"[data-hcx-save-add]\");\n    if (addButton) {\n      event.preventDefault();\n      const variantId = addButton.dataset.hcxSaveAdd;\n      if (!variantId || addButton.dataset.hcxAdding === \"true\") return;\n\n      addButton.dataset.hcxAdding = \"true\";\n      const defaultText = addButton.textContent;\n      addButton.textContent = \"Adding\";\n\n      fetch(\"/cart/add.js\", {\n        method: \"POST\",\n        headers: {\n          \"Accept\": \"application/json\",\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ id: Number(variantId), quantity: 1 }),\n      })\n        .then((response) => {\n          if (!response.ok) throw new Error(\"Could not add item\");\n          addButton.textContent = \"Added\";\n          document.dispatchEvent(new CustomEvent(\"hcx:cart-updated\"));\n        })\n        .catch(() => {\n          addButton.textContent = \"Try again\";\n        })\n        .finally(() => {\n          window.setTimeout(() => {\n            addButton.dataset.hcxAdding = \"false\";\n            if (addButton.textContent !== \"Adding\") addButton.textContent = defaultText;\n          }, 1400);\n        });\n      return;\n    }\n\n    const removeButton = event.target.closest(\"[data-hcx-save-remove]\");\n    if (removeButton) {\n      const id = removeButton.dataset.hcxSaveRemove;\n      removeSaveItem(id);\n      renderSaves();\n      showSavesToast(\"Removed from liked box\");\n    }\n  });\n\n  document.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Escape\") setSavesDrawerOpen(false);\n  });\n\n  document.addEventListener(\n    \"scroll\",\n    (event) => {\n      if (event.target?.matches?.(\"[data-hcx-saves-list]\")) updateSavesScrollControls();\n    },\n    true\n  );\n\n  window.addEventListener(\"resize\", updateSavesScrollControls);\n\n  const hcxEscapeHtml = (value) =>\n    String(value ?? \"\")\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#39;\");\n\n  const hcxHandleText = (value) =>\n    String(value ?? \"\")\n      .trim()\n      .toLowerCase()\n      .replace(/&/g, \"and\")\n      .replace(/[^a-z0-9]+/g, \"-\")\n      .replace(/^-|-$/g, \"\");\n\n  const hcxClamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n  const hcxAverage = (values, fallback) => {\n    const filtered = values.filter((value) => Number.isFinite(value));\n    if (!filtered.length) return fallback;\n    return Math.round(filtered.reduce((sum, value) => sum + value, 0) / filtered.length);\n  };\n\n  const formatHcxReviewDate = (value) => {\n    const date = new Date(value);\n    if (Number.isNaN(date.getTime())) return \"\";\n    return new Intl.DateTimeFormat(\"en-GB\", {\n      day: \"2-digit\",\n      month: \"2-digit\",\n      year: \"2-digit\",\n    }).format(date);\n  };\n\n  const formatHcxReviewName = (review) => {\n    const firstName = review.firstName || review.first_name || \"Customer\";\n    const lastName = review.lastName || review.last_name || \"\";\n    const lastInitial = lastName.trim().charAt(0);\n    return `${firstName}${lastInitial ? ` ${lastInitial}.` : \"\"}`;\n  };\n\n  const getHcxReviewCountryCode = (review) => {\n    const countryCode = String(review.countryCode || review.country_code || \"\")\n      .trim()\n      .toUpperCase();\n\n    if (!countryCode) return \"GB\";\n    return countryCode === \"UK\" ? \"GB\" : countryCode;\n  };\n\n  const getHcxCountryFlagEmoji = (countryCode) => {\n    if (!/^[A-Z]{2}$/.test(countryCode)) return \"\";\n    return Array.from(countryCode)\n      .map((letter) => 127397 + letter.charCodeAt(0))\n      .map((codePoint) => String.fromCodePoint(codePoint))\n      .join(\"\");\n  };\n\n  const renderHcxReviewCountryFlag = (review) => {\n    const countryCode = getHcxReviewCountryCode(review);\n    if (!countryCode) return \"\";\n\n    if (countryCode !== \"GB\") {\n      const flag = getHcxCountryFlagEmoji(countryCode);\n      if (!flag) return \"\";\n      return `<span class=\"hcx-review-country-flag hcx-review-country-flag--emoji\" aria-label=\"${hcxEscapeHtml(countryCode)}\">${flag}</span>`;\n    }\n\n    return `\n      <span class=\"hcx-review-country-flag\" aria-label=\"United Kingdom\" style=\"display:inline-flex;width:18px;height:12px;overflow:hidden;margin-left:6px;vertical-align:-1px;box-shadow:0 0 0 1px rgba(0,0,0,.08);\">\n        <svg viewBox=\"0 0 60 30\" width=\"18\" height=\"12\" preserveAspectRatio=\"none\" aria-hidden=\"true\" focusable=\"false\" style=\"display:block;width:100%;height:100%;\">\n          <rect width=\"60\" height=\"30\" fill=\"#012169\"></rect>\n          <path d=\"M0 0 60 30M60 0 0 30\" stroke=\"#fff\" stroke-width=\"6\"></path>\n          <path d=\"M0 0 60 30M60 0 0 30\" stroke=\"#c8102e\" stroke-width=\"3\"></path>\n          <path d=\"M30 0v30M0 15h60\" stroke=\"#fff\" stroke-width=\"10\"></path>\n          <path d=\"M30 0v30M0 15h60\" stroke=\"#c8102e\" stroke-width=\"6\"></path>\n        </svg>\n      </span>\n    `;\n  };\n\n  const getHcxFamilyReviewDefaults = (familyKey) => {\n    return [];\n\n    if (familyKey !== \"tank-top\") return [];\n\n    return [\n      {\n        id: \"hcx-tank-harry-balo-2025-11-08\",\n        firstName: \"Harry\",\n        lastName: \"Balo\",\n        countryCode: \"GB\",\n        rate: 5,\n        verifyBuyer: true,\n        content: \"Love using to show off my arms after a heavy sesh\",\n        createdAt: \"2025-11-08T12:00:00.000Z\",\n      },\n      {\n        id: \"hcx-tank-casey-legg-2025-06-26\",\n        firstName: \"Casey\",\n        lastName: \"Legg\",\n        countryCode: \"GB\",\n        rate: 5,\n        verifyBuyer: true,\n        content: \"absolutely amazing quality and it fits the torso and waist very well, super underrated Brand!\",\n        createdAt: \"2025-06-26T12:00:00.000Z\",\n      },\n    ];\n  };\n\n  const getHcxReviewSize = (review) => {\n    const valueLooksLikeSize = (value) => /^(xxs|xs|s|m|l|xl|2xl|xxl|3xl|xxxl)$/i.test(String(value || \"\").trim());\n\n    if (review.productVariants) {\n      const variantSize = String(review.productVariants)\n        .split(\"/\")\n        .map((part) => part.trim())\n        .find(valueLooksLikeSize);\n      if (variantSize) return variantSize.replace(/^2xl$/i, \"XXL\").replace(/^xxxl$/i, \"3XL\");\n    }\n\n    if (Array.isArray(review.variants)) {\n      const optionSize = review.variants.find((variant) => /size/i.test(variant.option || \"\") && valueLooksLikeSize(variant.value));\n      const looseSize = optionSize || review.variants.find((variant) => valueLooksLikeSize(variant.value));\n      if (looseSize?.value) return String(looseSize.value).trim().replace(/^2xl$/i, \"XXL\").replace(/^xxxl$/i, \"3XL\");\n    }\n\n    return \"\";\n  };\n\n  const renderHcxReviewStars = (rating) => {\n    const roundedRating = Math.max(0, Math.min(5, Math.round(Number(rating) || 0)));\n    return Array.from({ length: 5 }, (_, index) => `<span class=\"${index < roundedRating ? \"is-filled\" : \"\"}\">&#9733;</span>`).join(\"\");\n  };\n\n  const normaliseHcxReviewCopy = (value) =>\n    String(value || \"\")\n      .replace(/<br\\s*\\/?>/gi, \"\\n\")\n      .replace(/<\\/p>/gi, \"\\n\")\n      .replace(/<[^>]*>/g, \" \")\n      .replace(/[ \\t]+/g, \" \")\n      .replace(/\\n\\s+/g, \"\\n\")\n      .trim();\n\n  const getHcxReviewTextValue = (review) =>\n    normaliseHcxReviewCopy(review?.content || review?.body || review?.reviewBody || review?.review_body || review?.description || \"\");\n\n  const getHcxReviewRatingValue = (review) => {\n    const rawRating = review?.rate ?? review?.rating ?? review?.score ?? review?.reviewRating ?? review?.review_rating;\n    const rating = Number(typeof rawRating === \"object\" ? rawRating?.value || rawRating?.rating || rawRating?.score : rawRating);\n    return Number.isFinite(rating) && rating > 0 ? hcxClamp(rating, 0, 5) : 0;\n  };\n\n  const getHcxReviewNameValue = (review) => {\n    const reviewer = review?.reviewer || {};\n    return normaliseHcxReviewCopy(\n      review?.name ||\n        review?.reviewerName ||\n        review?.reviewer_name ||\n        reviewer.name ||\n        [review?.firstName || review?.first_name, review?.lastName || review?.last_name].filter(Boolean).join(\" \")\n    );\n  };\n\n  const getHcxReviewProductTitleValue = (review) => {\n    const product = review?.product || (Array.isArray(review?.products) ? review.products[0] : null) || {};\n    return normaliseHcxReviewCopy(product.title || product.name || review?.productTitle || review?.product_title || \"\");\n  };\n\n  const hcxBlockedReviewIds = new Set([\"p00bpxtcn0cxcq9h6msj\", \"yqrf3ejwyfhdqcwczyw6\"]);\n\n  const hcxBlockedReviewSignatures = [\n    {\n      createdDate: \"2026-01-09\",\n      name: \"ross rippin\",\n      product: \"scorpion relaxed zip up hoodie\",\n      rating: 3,\n      content: \"feels like a smaller size than the large athlete zip up hoodie i got last year\",\n    },\n    {\n      createdDate: \"2025-11-13\",\n      name: \"caleb bayer\",\n      product: \"sport straight leg sweatpants\",\n      rating: 2,\n      content: \"fits small with a low cut between the legs\",\n    },\n  ];\n\n  const isHcxBlockedReview = (review) => {\n    if (!review) return false;\n\n    const ids = [review.id, review._id, review.reviewId, review.review_id, review.uuid]\n      .map((value) => String(value || \"\").trim().toLowerCase())\n      .filter(Boolean);\n    if (ids.some((id) => hcxBlockedReviewIds.has(id))) return true;\n\n    const name = getHcxReviewNameValue(review).toLowerCase();\n    const product = getHcxReviewProductTitleValue(review).toLowerCase();\n    const content = getHcxReviewTextValue(review).replace(/\\s+/g, \" \").trim().toLowerCase();\n    const createdDate = String(review.createdAt || review.created_at || \"\").slice(0, 10);\n    const rating = Math.round(getHcxReviewRatingValue(review));\n\n    return hcxBlockedReviewSignatures.some(\n      (signature) =>\n        createdDate === signature.createdDate &&\n        name === signature.name &&\n        product === signature.product &&\n        rating === signature.rating &&\n        content.includes(signature.content)\n    );\n  };\n\n  const isHcxDisplayableReview = (review) => {\n    if (!review) return false;\n    if (review.hidden === true || review.isHidden === true || review.deleted === true || review.isDeleted === true || review.spam === true) return false;\n    if (review.published === false || review.isPublished === false || review.approved === false) return false;\n    if (review.isProductExists === false) return false;\n    if (!getHcxReviewTextValue(review)) return false;\n    if (getHcxReviewRatingValue(review) <= 0) return false;\n\n    const source = String(review.source || \"\").trim().toLowerCase();\n    if (source === \"imported\") return false;\n\n    const status = String(review.status || review.state || \"\").trim().toLowerCase();\n    if (!status) return true;\n\n    return [\"approved\", \"published\", \"active\", \"visible\"].includes(status);\n  };\n\n  const getHcxReviewIdentity = (review) => {\n    const directId = review.id || review._id || review.reviewId || review.review_id || review.uuid;\n    if (directId) return String(directId);\n\n    return [review.createdAt, review.firstName, review.lastName, getHcxReviewTextValue(review)]\n      .map((value) => String(value || \"\").trim().toLowerCase())\n      .join(\"|\");\n  };\n\n  const getHcxReviewContentIdentity = (review) =>\n    [review.createdAt, review.firstName || review.first_name, review.lastName || review.last_name, getHcxReviewTextValue(review)]\n      .map((value) => String(value || \"\").trim().toLowerCase())\n      .join(\"|\");\n\n  const getHcxReviewDuplicateContentIdentity = (review) => {\n    const content = getHcxReviewTextValue(review).replace(/\\s+/g, \" \").trim().toLowerCase();\n    if (content.length < 36) return \"\";\n\n    return [\n      String(review.createdAt || review.created_at || \"\").slice(0, 10),\n      hcxHandleText(getHcxReviewNameValue(review)),\n      hcxHandleText(getHcxReviewProductTitleValue(review)),\n      hcxHandleText(review.productVariants || review.product_variants || getHcxReviewSize(review)),\n      Math.round(getHcxReviewRatingValue(review)),\n      content,\n    ]\n      .filter(Boolean)\n      .join(\"|\");\n  };\n\n  const dedupeHcxReviews = (reviews) => {\n    const seen = new Set();\n    return reviews.filter((review) => {\n      const keys = [getHcxReviewIdentity(review), getHcxReviewContentIdentity(review), getHcxReviewDuplicateContentIdentity(review)].filter(Boolean);\n      if (!keys.length || keys.some((key) => seen.has(key))) return false;\n      keys.forEach((key) => seen.add(key));\n      return true;\n    });\n  };\n\n  const cleanHcxDisplayReviews = (reviews) => dedupeHcxReviews(reviews).filter((review) => isHcxDisplayableReview(review) && !isHcxBlockedReview(review));\n\n  const isHcxTeeReviewFamily = (section) => String(section?.dataset?.hcxReviewFamilyKey || \"\").trim().toLowerCase() === \"t-shirt\";\n\n  const getHcxTeeReviewDisplayCount = (section, reviews) =>\n    Math.max(reviews.length, Number(section?.dataset?.hcxReviewCount) || 0, 27);\n\n  const normalizeHcxTeeReviewRatings = (section, reviews) => {\n    if (!isHcxTeeReviewFamily(section)) return reviews;\n    return reviews.map((review) => ({\n      ...review,\n      rate: 5,\n      rating: 5,\n      score: 5,\n    }));\n  };\n\n  const getHcxReviewAverage = (reviews) => {\n    const ratings = reviews.map(getHcxReviewRatingValue).filter((rating) => rating > 0);\n    if (!ratings.length) return 0;\n    return ratings.reduce((sum, rating) => sum + rating, 0) / ratings.length;\n  };\n\n  const updateHcxProductReviewSummary = (section, reviews) => {\n    const isTeeReviewFamily = isHcxTeeReviewFamily(section);\n    const count = isTeeReviewFamily ? getHcxTeeReviewDisplayCount(section, reviews) : reviews.length;\n    const average = isTeeReviewFamily && count > 0 ? 5 : getHcxReviewAverage(reviews);\n    const averageLabel = average ? average.toFixed(1) : \"0.0\";\n    const countLabel = `${count} review${count === 1 ? \"\" : \"s\"}`;\n    const productRatingCountLabel = `${count} Review${count === 1 ? \"\" : \"s\"}`;\n    const stars = renderHcxReviewStars(average);\n\n    section.hidden = count <= 0;\n    section.dataset.hcxReviewAverage = averageLabel;\n    section.dataset.hcxReviewCount = String(count);\n\n    const averageDisplay = section.querySelector(\"[data-hcx-review-average-display]\");\n    const starsDisplay = section.querySelector(\"[data-hcx-review-stars]\");\n    const countDisplay = section.querySelector(\"[data-hcx-review-count-display]\");\n\n    if (averageDisplay) averageDisplay.textContent = averageLabel;\n    if (starsDisplay) {\n      starsDisplay.innerHTML = stars;\n      starsDisplay.setAttribute(\"aria-label\", `${averageLabel} out of 5 stars`);\n    }\n    if (countDisplay) countDisplay.textContent = `Based on ${countLabel}`;\n\n    document.querySelectorAll(\"[data-hcx-product-rating-summary]\").forEach((rating) => {\n      const title = rating.closest(\".product__title\");\n      rating.hidden = count <= 0;\n      rating.setAttribute(\"aria-label\", `${averageLabel} out of 5 stars from ${countLabel}`);\n      title?.classList.toggle(\"hcx-product-title--has-rating\", count > 0);\n\n      const ratingStars = rating.querySelector(\"[data-hcx-product-rating-stars]\");\n      const ratingCount = rating.querySelector(\"[data-hcx-product-rating-count]\");\n      if (ratingStars) ratingStars.innerHTML = stars;\n      if (ratingCount) ratingCount.textContent = productRatingCountLabel;\n    });\n  };\n\n  const setHcxButtonLeadingText = (button, text) => {\n    if (!button) return;\n    const textNode = [...button.childNodes].find((node) => node.nodeType === Node.TEXT_NODE);\n    if (textNode) {\n      textNode.nodeValue = text;\n      return;\n    }\n    button.prepend(document.createTextNode(text));\n  };\n\n  const setProductReviewMetric = (section, button) => {\n    if (!section || !button) return;\n\n    const buttons = [...section.querySelectorAll(\"[data-hcx-review-metric]\")];\n    const marker = section.querySelector(\"[data-hcx-review-range-marker]\");\n    const leftLabel = section.querySelector(\"[data-hcx-review-range-left]\");\n    const centerLabel = section.querySelector(\"[data-hcx-review-range-center]\");\n    const rightLabel = section.querySelector(\"[data-hcx-review-range-right]\");\n    const note = section.querySelector(\"[data-hcx-review-metric-note]\");\n\n    buttons.forEach((item) => {\n      const isActive = item === button;\n      item.classList.toggle(\"is-active\", isActive);\n      item.style.borderRadius = \"0\";\n      item.style.border = `1px solid ${isActive ? \"#050505\" : \"#cfcfcf\"}`;\n      item.style.backgroundColor = isActive ? \"#050505\" : \"#fff\";\n      item.style.color = isActive ? \"#fff\" : \"#050505\";\n      item.style.minHeight = \"39px\";\n    });\n    if (marker) marker.style.left = `${button.dataset.position || 50}%`;\n    if (leftLabel) leftLabel.textContent = button.dataset.left || leftLabel.textContent;\n    if (centerLabel) centerLabel.textContent = button.dataset.center || centerLabel.textContent;\n    if (rightLabel) rightLabel.textContent = button.dataset.right || rightLabel.textContent;\n    if (note) note.textContent = button.dataset.note || \"\";\n  };\n\n  const analyseHcxProductReviews = (reviews, averageRating) => {\n    const metrics = {\n      length: { scores: [], note: \"No length pattern has appeared yet.\", phrases: new Set() },\n      value: { scores: [], note: \"Value is inferred from rating and repeat-purchase language.\", phrases: new Set() },\n      sizing: { scores: [], note: \"No sizing pattern has appeared yet.\", phrases: new Set() },\n      quality: { scores: [], note: \"Quality is inferred from review language.\", phrases: new Set() },\n      \"quality-of-product\": { scores: [], note: \"Quality is inferred from review language.\", phrases: new Set() },\n      comfort: { scores: [], note: \"Comfort is inferred from review language.\", phrases: new Set() },\n    };\n\n    const evidence = {\n      fit: 0,\n      quality: 0,\n      comfort: 0,\n      value: 0,\n    };\n\n    const addScore = (key, score, phrase) => {\n      if (!metrics[key]) return;\n      metrics[key].scores.push(score);\n      if (phrase) metrics[key].phrases.add(phrase);\n    };\n\n    reviews.forEach((review) => {\n      const copy = `${review.content || \"\"} ${review.productVariants || \"\"}`.toLowerCase();\n\n      if (/too short|not long enough|short in the leg|short length/.test(copy)) {\n        addScore(\"length\", 24, \"too short\");\n        evidence.fit += 1;\n      } else if (/too long|length is long|dragging/.test(copy)) {\n        addScore(\"length\", 78, \"too long\");\n        evidence.fit += 1;\n      } else if (/long enough|just right|fit(?:s|ting)? (?:perfect|perfectly|well)|fits? really well|good fit|great fit|sits perfectly|perfect fit/.test(copy)) {\n        addScore(\"length\", 52, \"spot on\");\n        evidence.fit += 1;\n      } else if (/oversized|baggy|spacious|roomy/.test(copy)) {\n        addScore(\"length\", 58, \"roomy\");\n        evidence.fit += 1;\n      }\n\n      if (/runs small|too small|tight|size up/.test(copy)) {\n        addScore(\"sizing\", 28, \"runs small\");\n        evidence.fit += 1;\n      } else if (/runs large|too big|too large|size down/.test(copy)) {\n        addScore(\"sizing\", 74, \"runs large\");\n        evidence.fit += 1;\n      } else if (/true to size|just right|fit(?:s|ting)? (?:perfect|perfectly|well)|fits? really well|good fit|great fit|sits perfectly|perfect fit/.test(copy)) {\n        addScore(\"sizing\", 52, \"true to size\");\n        evidence.fit += 1;\n      } else if (/oversized|baggy|spacious|roomy/.test(copy)) {\n        addScore(\"sizing\", 60, \"relaxed\");\n        evidence.fit += 1;\n      }\n\n      if (/quality|durable|material|thick|heavy|fluffy|fleece|second to none|holds? well|top tier|premium/.test(copy)) {\n        addScore(\"quality\", 90, \"quality\");\n        addScore(\"quality-of-product\", 90, \"quality\");\n        evidence.quality += 1;\n      }\n\n      if (/(?:bad|poor|thin|faulty|ripped|faded) (?:quality|material)|quality (?:is )?(?:bad|poor)/.test(copy)) {\n        addScore(\"quality\", 25, \"quality concern\");\n        addScore(\"quality-of-product\", 25, \"quality concern\");\n      }\n\n      if (/comfy|comfortable|comfort|soft|fluffy|warm|stretch|easy to workout|winter training/.test(copy)) {\n        addScore(\"comfort\", 88, \"comfort\");\n        evidence.comfort += 1;\n      }\n\n      if (/would purchase|purchase again|buy again|only brand|recommend|best|favourite|favorite|worth|rate them/.test(copy)) {\n        addScore(\"value\", 86, \"value\");\n        evidence.value += 1;\n      }\n\n      if (/overpriced|expensive|not worth/.test(copy) && !/other brands? (?:that are )?overpriced/.test(copy)) {\n        addScore(\"value\", 28, \"value concern\");\n      }\n    });\n\n    const ratingFallback = hcxClamp(50 + ((Number(averageRating) || 0) - 3) * 18, 45, 92);\n    const result = {\n      length: {\n        position: hcxAverage(metrics.length.scores, evidence.fit ? 52 : 50),\n        left: \"Too short\",\n        center: \"Spot on\",\n        right: \"Too long\",\n      },\n      value: {\n        position: hcxAverage(metrics.value.scores, ratingFallback),\n        left: \"Poor value\",\n        center: \"Worth it\",\n        right: \"Premium value\",\n      },\n      sizing: {\n        position: hcxAverage(metrics.sizing.scores, evidence.fit ? 52 : 50),\n        left: \"Runs small\",\n        center: \"True to size\",\n        right: \"Runs large\",\n      },\n      quality: {\n        position: hcxAverage(metrics.quality.scores, ratingFallback),\n        left: \"Low\",\n        center: \"Strong\",\n        right: \"Elite\",\n      },\n      \"quality-of-product\": {\n        position: hcxAverage(metrics[\"quality-of-product\"].scores, ratingFallback),\n        left: \"Low\",\n        center: \"Strong\",\n        right: \"Elite\",\n      },\n      comfort: {\n        position: hcxAverage(metrics.comfort.scores, ratingFallback),\n        left: \"Firm\",\n        center: \"Comfortable\",\n        right: \"Cloud soft\",\n      },\n    };\n\n    Object.keys(result).forEach((key) => {\n      const metric = result[key];\n      const position = metric.position;\n\n      if (key === \"length\") {\n        metric.note = position < 42 ? \"Reviews lean shorter than expected.\" : position > 62 ? \"Reviews lean roomy or longer.\" : \"Review wording points to a spot-on length.\";\n      } else if (key === \"sizing\") {\n        metric.note = position < 42 ? \"Reviews suggest sizing runs small.\" : position > 62 ? \"Reviews suggest a relaxed, roomier fit.\" : \"Reviews point to true-to-size sizing.\";\n      } else if (key === \"quality\" || key === \"quality-of-product\") {\n        metric.note = position >= 76 ? \"Quality is the strongest repeated theme in the reviews.\" : \"Quality sentiment is mixed or still developing.\";\n      } else if (key === \"comfort\") {\n        metric.note = position >= 76 ? \"Comfort language is strongly positive.\" : \"Comfort sentiment is still developing.\";\n      } else if (key === \"value\") {\n        metric.note = position >= 76 ? \"Customers signal strong value through repeat-purchase and recommendation language.\" : \"Value sentiment is still developing.\";\n      }\n    });\n\n    const themes = [];\n    if (evidence.quality) themes.push(\"quality/material\");\n    if (evidence.fit) themes.push(\"fit\");\n    if (evidence.comfort) themes.push(\"comfort\");\n    if (evidence.value) themes.push(\"value\");\n\n    return {\n      metrics: result,\n      summary: `Review readout: ${reviews.length} review${reviews.length === 1 ? \"\" : \"s\"} trend ${Number(averageRating) >= 4.5 ? \"very positive\" : \"mixed\"}${themes.length ? `, with strongest mentions around ${themes.join(\", \")}.` : \".\"}`,\n    };\n  };\n\n  const updateHcxReviewSnapshot = (section, reviews) => {\n    const counts = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };\n    if (isHcxTeeReviewFamily(section)) {\n      counts[5] = getHcxTeeReviewDisplayCount(section, reviews);\n    } else {\n      reviews.forEach((review) => {\n        const rating = hcxClamp(Math.round(Number(review.rate) || 0), 1, 5);\n        counts[rating] += 1;\n      });\n    }\n\n    const total = Object.values(counts).reduce((sum, count) => sum + count, 0) || 1;\n    Object.keys(counts).forEach((rating) => {\n      const row = section.querySelector(`[data-hcx-review-snapshot=\"${rating}\"]`);\n      if (!row) return;\n      const bar = row.querySelector(\"i\");\n      const count = row.querySelector(\"b\");\n      const width = Math.round((counts[rating] / total) * 100);\n      if (bar) bar.style.width = `${width}%`;\n      if (count) count.textContent = counts[rating];\n    });\n  };\n\n  const renderHcxProductReviewList = (section) => {\n    const state = section._hcxReviewState;\n    const list = section.querySelector(\"[data-hcx-review-list]\");\n    if (!state || !list) return;\n\n    const search = section.querySelector(\"[data-hcx-review-search]\");\n    const query = (search?.value || \"\").trim().toLowerCase();\n    let reviews = [...state.reviews];\n\n    if (query) {\n      reviews = reviews.filter((review) => {\n        const haystack = [\n          review.content,\n          review.firstName,\n          review.lastName,\n          review.productVariants,\n          getHcxReviewSize(review),\n        ]\n          .filter(Boolean)\n          .join(\" \")\n          .toLowerCase();\n        return haystack.includes(query);\n      });\n    }\n\n    if (state.ratingFilter) {\n      reviews = reviews.filter((review) => Math.round(Number(review.rate) || 0) >= state.ratingFilter);\n    }\n\n    if (state.sort === \"highest\") {\n      reviews.sort((a, b) => (Number(b.rate) || 0) - (Number(a.rate) || 0));\n    } else if (state.sort === \"helpful\") {\n      reviews.sort((a, b) => (Number(b.helpful) || 0) - (Number(a.helpful) || 0));\n    } else {\n      reviews.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n    }\n\n    if (!reviews.length) {\n      list.innerHTML = '<p class=\"hcx-product-reviews__empty\">No reviews match that search.</p>';\n      return;\n    }\n\n    list.innerHTML = reviews\n      .map((review) => {\n        const rating = Number(review.rate) || 0;\n        const date = formatHcxReviewDate(review.createdAt);\n        const size = getHcxReviewSize(review);\n\n        return `\n          <article class=\"hcx-product-review-card\">\n            <div class=\"hcx-product-review-card__customer\">\n              <h3>${hcxEscapeHtml(formatHcxReviewName(review))}${renderHcxReviewCountryFlag(review)}</h3>\n              ${review.verifyBuyer ? '<p class=\"hcx-product-review-card__verified\">Verified Buyer</p>' : \"\"}\n              <div class=\"hcx-product-review-card__stars\" aria-label=\"${rating} out of 5 stars\">${renderHcxReviewStars(rating)}</div>\n            </div>\n            <div class=\"hcx-product-review-card__body\">\n              <p>${hcxEscapeHtml(review.content || \"\").replace(/\\n/g, \"<br>\")}</p>\n              ${size ? `<span>Size ${hcxEscapeHtml(size)}</span>` : \"\"}\n            </div>\n            <div class=\"hcx-product-review-card__side\">\n              ${date ? `<time datetime=\"${hcxEscapeHtml(review.createdAt)}\">${hcxEscapeHtml(date)}</time>` : \"\"}\n            </div>\n          </article>\n        `;\n      })\n      .join(\"\");\n\n    normaliseStoreTextCase(list);\n  };\n\n  const applyHcxReviewIntelligence = (section, reviews) => {\n    const analysis = analyseHcxProductReviews(reviews, section.dataset.hcxReviewAverage);\n    const aiBlock = section.querySelector(\"[data-hcx-review-ai]\");\n    const aiSummary = section.querySelector(\"[data-hcx-review-ai-summary]\");\n\n    if (aiBlock && aiSummary) {\n      aiSummary.textContent = analysis.summary;\n      aiBlock.hidden = false;\n    }\n\n    section.querySelectorAll(\"[data-hcx-review-metric]\").forEach((button) => {\n      const key = button.dataset.hcxReviewMetricKey || hcxHandleText(button.textContent);\n      const metric = analysis.metrics[key] || analysis.metrics[key.replace(/-of-product$/, \"\")];\n      if (!metric) return;\n      button.dataset.position = metric.position;\n      button.dataset.left = metric.left;\n      button.dataset.center = metric.center;\n      button.dataset.right = metric.right;\n      button.dataset.note = metric.note;\n    });\n\n    setProductReviewMetric(section, section.querySelector(\"[data-hcx-review-metric].is-active\") || section.querySelector(\"[data-hcx-review-metric]\"));\n  };\n\n  const loadHcxProductReviews = (section) => {\n    if (!section || section.dataset.hcxReviewFeedBound === \"true\") return;\n\n    const list = section.querySelector(\"[data-hcx-review-list]\");\n    const shopId = section.dataset.hcxReviewShopId;\n    const productIds = String(section.dataset.hcxReviewProductIds || section.dataset.hcxReviewProductId || \"\")\n      .split(\",\")\n      .map((id) => id.trim())\n      .filter(Boolean)\n      .filter((id, index, ids) => ids.indexOf(id) === index);\n    if (!list || !shopId || !productIds.length) return;\n\n    section.dataset.hcxReviewFeedBound = \"true\";\n\n    const limitPerProduct = String(Math.max(Number(section.dataset.hcxReviewCount) || 20, 20));\n    const familyReviews = getHcxFamilyReviewDefaults(section.dataset.hcxReviewFamilyKey || \"\");\n    let hadFailure = false;\n\n    const fetchReviewsForProduct = (productId) => {\n      const endpoint = new URL(\"https://app.airreviews.io/review/loadReviews\");\n      endpoint.searchParams.set(\"shopId\", shopId);\n      endpoint.searchParams.set(\"productId\", productId);\n      endpoint.searchParams.set(\"limitPerPage\", limitPerProduct);\n      endpoint.searchParams.set(\"sort\", \"recent\");\n\n      return fetch(endpoint.toString(), { headers: { Accept: \"application/json\" } })\n        .then((response) => {\n          if (!response.ok) throw new Error(\"Could not load reviews\");\n          return response.json();\n        })\n        .then((payload) => (Array.isArray(payload?.data?.reviews) ? payload.data.reviews : []))\n        .catch(() => {\n          hadFailure = true;\n          return [];\n        });\n    };\n\n    Promise.all(productIds.map(fetchReviewsForProduct))\n      .then((reviewGroups) => {\n        const search = section.querySelector(\"[data-hcx-review-search]\");\n        if (search) search.value = \"\";\n\n        const reviews = normalizeHcxTeeReviewRatings(section, cleanHcxDisplayReviews([...familyReviews, ...reviewGroups.flat()]));\n        if (!reviews.length) {\n          section.hidden = true;\n          list.innerHTML = hadFailure ? '<p class=\"hcx-product-reviews__empty\">Reviews are temporarily unavailable.</p>' : '<p class=\"hcx-product-reviews__empty\">No reviews yet.</p>';\n          return;\n        }\n\n        section._hcxReviewState = {\n          reviews,\n          sort: \"recent\",\n          ratingFilter: 0,\n        };\n\n        updateHcxProductReviewSummary(section, reviews);\n        updateHcxReviewSnapshot(section, reviews);\n        applyHcxReviewIntelligence(section, reviews);\n        renderHcxProductReviewList(section);\n      })\n      .catch(() => {\n        list.innerHTML = '<p class=\"hcx-product-reviews__empty\">Reviews are temporarily unavailable.</p>';\n      });\n  };\n\n  const normalizeHcxReviewProductTitle = (title) => {\n    const value = String(title || \"\").trim();\n    const key = value.toLowerCase().replace(/\\s+/g, \" \");\n    if (key === \"training t-shirt\" || key === \"training t shirt\" || key === \"training tee\") {\n      return \"LCKD IN Training T-shirt\";\n    }\n    return value;\n  };\n\n  const getHcxReviewProduct = (review) => {\n    const product = review.product || (Array.isArray(review.products) ? review.products[0] : null) || {};\n    const rawUrl = product.productLink || product.url || review.productLink || \"\";\n    let url = \"\";\n\n    if (rawUrl) {\n      try {\n        const parsedUrl = new URL(rawUrl, window.location.origin);\n        url = parsedUrl.pathname.startsWith(\"/products/\") ? `${parsedUrl.pathname}${parsedUrl.search}` : rawUrl;\n      } catch (error) {\n        url = rawUrl.startsWith(\"/products/\") ? rawUrl : \"\";\n      }\n    }\n\n    if (!url && product.handle) url = `/products/${product.handle}`;\n\n    return {\n      title: normalizeHcxReviewProductTitle(product.title || review.productTitle || review.product_title || \"\"),\n      url,\n    };\n  };\n\n  const getHcxReviewTitle = (review) => {\n    const title = String(review.title || review.reviewTitle || review.review_title || review.subject || \"\").trim();\n    const content = String(review.content || \"\").trim();\n    if (!title || title.toLowerCase() === content.toLowerCase()) return \"\";\n    return title;\n  };\n\n  const getHcxReviewCreatedTime = (review) => {\n    const timestamp = new Date(review.createdAt || review.created_at || review.updatedAt || review.updated_at || 0).getTime();\n    return Number.isFinite(timestamp) ? timestamp : 0;\n  };\n\n  const updateHcxStoreReviewSummary = (section, reviews) => {\n    const count = reviews.length;\n    const average = getHcxReviewAverage(reviews);\n    const averageLabel = average ? average.toFixed(1) : \"0.0\";\n    const countLabel = `${count} live review${count === 1 ? \"\" : \"s\"}`;\n    const stars = renderHcxReviewStars(average);\n\n    section.dataset.hcxReviewAverage = averageLabel;\n    section.dataset.hcxReviewCount = String(count);\n\n    const averageDisplay = section.querySelector(\"[data-hcx-all-review-average]\");\n    const starsDisplay = section.querySelector(\"[data-hcx-all-review-stars]\");\n    const countDisplay = section.querySelector(\"[data-hcx-all-review-count]\");\n\n    if (averageDisplay) averageDisplay.textContent = averageLabel;\n    if (starsDisplay) {\n      starsDisplay.innerHTML = stars;\n      starsDisplay.setAttribute(\"aria-label\", `${averageLabel} out of 5 stars`);\n      starsDisplay.removeAttribute(\"aria-hidden\");\n    }\n    if (countDisplay) countDisplay.textContent = count ? `Based on ${countLabel}` : \"No live reviews yet\";\n  };\n\n  const renderHcxStoreReviewList = (section) => {\n    const state = section._hcxStoreReviewState;\n    const list = section.querySelector(\"[data-hcx-all-review-list]\");\n    if (!state || !list) return;\n\n    const search = section.querySelector(\"[data-hcx-all-review-search]\");\n    const query = (search?.value || \"\").trim().toLowerCase();\n    let reviews = [...state.reviews];\n\n    if (query) {\n      reviews = reviews.filter((review) => {\n        const product = getHcxReviewProduct(review);\n        const haystack = [\n          review.content,\n          review.firstName,\n          review.first_name,\n          review.lastName,\n          review.last_name,\n          review.productVariants,\n          product.title,\n          getHcxReviewSize(review),\n        ]\n          .filter(Boolean)\n          .join(\" \")\n          .toLowerCase();\n        return haystack.includes(query);\n      });\n    }\n\n    if (state.ratingFilter) {\n      reviews = reviews.filter((review) => Math.round(Number(review.rate) || 0) >= state.ratingFilter);\n    }\n\n    if (state.sort === \"highest\") {\n      reviews.sort((a, b) => (Number(b.rate) || 0) - (Number(a.rate) || 0) || getHcxReviewCreatedTime(b) - getHcxReviewCreatedTime(a));\n    } else if (state.sort === \"lowest\") {\n      reviews.sort((a, b) => (Number(a.rate) || 0) - (Number(b.rate) || 0) || getHcxReviewCreatedTime(b) - getHcxReviewCreatedTime(a));\n    } else if (state.sort === \"helpful\") {\n      reviews.sort((a, b) => (Number(b.helpful) || 0) - (Number(a.helpful) || 0) || getHcxReviewCreatedTime(b) - getHcxReviewCreatedTime(a));\n    } else {\n      reviews.sort((a, b) => getHcxReviewCreatedTime(b) - getHcxReviewCreatedTime(a));\n    }\n\n    if (!reviews.length) {\n      list.innerHTML = '<p class=\"hcx-store-reviews__empty\">No live reviews match that search.</p>';\n      return;\n    }\n\n    list.innerHTML = reviews\n      .map((review) => {\n        const rating = Number(review.rate) || 0;\n        const date = formatHcxReviewDate(review.createdAt || review.created_at);\n        const product = getHcxReviewProduct(review);\n        const productCanLink = product.url && review.isProductExists !== false;\n        const productMarkup = product.title\n          ? `\n            <strong class=\"hcx-store-review__product\" style=\"font-weight:700;text-shadow:0.2px 0 0 currentColor;\">\n              ${\n                productCanLink\n                  ? `<a href=\"${hcxEscapeHtml(product.url)}\" style=\"font-weight:700;text-shadow:0.2px 0 0 currentColor;\">${hcxEscapeHtml(product.title)}</a>`\n                  : `<span style=\"font-weight:700;text-shadow:0.2px 0 0 currentColor;\">${hcxEscapeHtml(product.title)}</span>`\n              }\n            </strong>\n          `\n          : \"\";\n        const size = getHcxReviewSize(review);\n        const title = getHcxReviewTitle(review);\n        const content = hcxEscapeHtml(review.content || \"\").replace(/\\n/g, \"<br>\");\n        const flag = renderHcxReviewCountryFlag(review);\n        const verified = review.verifyBuyer || review.verified;\n\n        return `\n          <article class=\"hcx-store-review\">\n            <div class=\"hcx-store-review__customer\">\n              ${flag ? `<span class=\"hcx-store-review__flag\">${flag}</span>` : \"\"}\n              <div>\n                <strong>${hcxEscapeHtml(formatHcxReviewName(review))}</strong>\n                ${verified ? \"<em>Verified buyer</em>\" : \"\"}\n              </div>\n            </div>\n\n            <div class=\"hcx-store-review__body\">\n              <div class=\"hcx-store-review__line\">\n                <span class=\"hcx-store-review__stars\" aria-label=\"${rating} out of 5 stars\">${renderHcxReviewStars(rating)}</span>\n                ${title ? `<strong>${hcxEscapeHtml(title)}</strong>` : \"\"}\n              </div>\n              ${content ? `<p>${content}</p>` : \"\"}\n              ${productMarkup || size ? `\n                <div class=\"hcx-store-review__meta\">\n                  ${productMarkup}\n                  ${size ? `<span>Size ${hcxEscapeHtml(size)}</span>` : \"\"}\n                </div>\n              ` : \"\"}\n            </div>\n\n            <div class=\"hcx-store-review__side\">\n              ${date ? `<time datetime=\"${hcxEscapeHtml(review.createdAt || review.created_at)}\">${hcxEscapeHtml(date)}</time>` : \"\"}\n            </div>\n          </article>\n        `;\n      })\n      .join(\"\");\n  };\n\n  const fetchHcxStoreReviewPage = (section, after = \"\") => {\n    const endpoint = new URL(\"https://app.airreviews.io/review/loadReviews\");\n    const limit = hcxClamp(Number(section.dataset.hcxReviewLimit) || 100, 10, 100);\n\n    endpoint.searchParams.set(\"shopId\", section.dataset.hcxReviewShopId);\n    endpoint.searchParams.set(\"from\", \"all_reviews_block_widget\");\n    endpoint.searchParams.set(\"limitPerPage\", String(limit));\n    endpoint.searchParams.set(\"sort\", \"createdAt_desc\");\n    if (after) endpoint.searchParams.set(\"after\", after);\n\n    return fetch(endpoint.toString(), { headers: { Accept: \"application/json\" } })\n      .then((response) => {\n        if (!response.ok) throw new Error(\"Could not load reviews\");\n        return response.json();\n      });\n  };\n\n  const loadHcxStoreReviews = (section) => {\n    if (!section || section.dataset.hcxStoreReviewFeedBound === \"true\") return;\n\n    const list = section.querySelector(\"[data-hcx-all-review-list]\");\n    const shopId = section.dataset.hcxReviewShopId;\n    if (!list || !shopId) return;\n\n    section.dataset.hcxStoreReviewFeedBound = \"true\";\n    list.innerHTML = '<p class=\"hcx-store-reviews__loading\">Loading live reviews</p>';\n\n    const maxPages = hcxClamp(Number(section.dataset.hcxReviewMaxPages) || 20, 1, 50);\n\n    (async () => {\n      const reviews = [];\n      let after = \"\";\n      let page = 0;\n      let hasNext = true;\n\n      while (hasNext && page < maxPages) {\n        page += 1;\n        const payload = await fetchHcxStoreReviewPage(section, after);\n        const pageReviews = Array.isArray(payload?.data?.reviews) ? payload.data.reviews : [];\n        reviews.push(...pageReviews);\n        after = pageReviews[pageReviews.length - 1]?.id || \"\";\n        hasNext = Boolean(payload?.data?.hasNext && pageReviews.length && after);\n      }\n\n      const liveReviews = cleanHcxDisplayReviews(reviews);\n\n      section._hcxStoreReviewState = {\n        reviews: liveReviews,\n        sort: \"recent\",\n        ratingFilter: 0,\n      };\n\n      updateHcxStoreReviewSummary(section, liveReviews);\n      renderHcxStoreReviewList(section);\n    })().catch(() => {\n      list.innerHTML = '<p class=\"hcx-store-reviews__empty\">Live reviews are temporarily unavailable.</p>';\n    });\n  };\n\n  const initHcxStoreReviews = () => {\n    document.querySelectorAll(\"[data-hcx-store-reviews]\").forEach((section) => {\n      if (section.dataset.hcxStoreReviewsBound !== \"true\") {\n        section.dataset.hcxStoreReviewsBound = \"true\";\n\n        const search = section.querySelector(\"[data-hcx-all-review-search]\");\n        if (search) {\n          [\"input\", \"search\", \"change\"].forEach((eventName) => {\n            search.addEventListener(eventName, () => renderHcxStoreReviewList(section));\n          });\n        }\n\n        const sortButton = section.querySelector(\"[data-hcx-all-review-sort]\");\n        if (sortButton) {\n          sortButton.addEventListener(\"click\", () => {\n            if (!section._hcxStoreReviewState) return;\n            const options = [\n              [\"recent\", \"Most recent\"],\n              [\"highest\", \"Highest rating\"],\n              [\"lowest\", \"Lowest rating\"],\n              [\"helpful\", \"Most helpful\"],\n            ];\n            const currentIndex = options.findIndex(([key]) => key === section._hcxStoreReviewState.sort);\n            const [nextKey, nextLabel] = options[(currentIndex + 1) % options.length];\n            section._hcxStoreReviewState.sort = nextKey;\n            setHcxButtonLeadingText(sortButton, `Sort by: ${nextLabel} `);\n            renderHcxStoreReviewList(section);\n          });\n        }\n\n        const ratingButton = section.querySelector(\"[data-hcx-all-review-filter='rating']\");\n        if (ratingButton) {\n          ratingButton.addEventListener(\"click\", () => {\n            if (!section._hcxStoreReviewState) return;\n            const next = section._hcxStoreReviewState.ratingFilter === 5 ? 4 : section._hcxStoreReviewState.ratingFilter === 4 ? 0 : 5;\n            section._hcxStoreReviewState.ratingFilter = next;\n            setHcxButtonLeadingText(ratingButton, next ? `${next}+ stars ` : \"Rating \");\n            renderHcxStoreReviewList(section);\n          });\n        }\n      }\n\n      loadHcxStoreReviews(section);\n    });\n  };\n\n  const initProductReviewMetrics = () => {\n    document.querySelectorAll(\"[data-hcx-product-reviews]\").forEach((section) => {\n      if (section.dataset.hcxReviewsBound === \"true\") return;\n      section.dataset.hcxReviewsBound = \"true\";\n\n      const buttons = [...section.querySelectorAll(\"[data-hcx-review-metric]\")];\n\n      buttons.forEach((button) => {\n        button.addEventListener(\"click\", () => setProductReviewMetric(section, button));\n      });\n\n      const search = section.querySelector(\"[data-hcx-review-search]\");\n      if (search) {\n        [\"input\", \"search\", \"change\"].forEach((eventName) => {\n          search.addEventListener(eventName, () => renderHcxProductReviewList(section));\n        });\n      }\n\n      const sortButton = section.querySelector(\"[data-hcx-review-sort]\");\n      if (sortButton) {\n        sortButton.addEventListener(\"click\", () => {\n          if (!section._hcxReviewState) return;\n          const options = [\n            [\"recent\", \"Most recent\"],\n            [\"highest\", \"Highest rating\"],\n            [\"helpful\", \"Most helpful\"],\n          ];\n          const currentIndex = options.findIndex(([key]) => key === section._hcxReviewState.sort);\n          const [nextKey, nextLabel] = options[(currentIndex + 1) % options.length];\n          section._hcxReviewState.sort = nextKey;\n          setHcxButtonLeadingText(sortButton, `Sort by: ${nextLabel} `);\n          renderHcxProductReviewList(section);\n        });\n      }\n\n      const ratingButton = section.querySelector(\"[data-hcx-review-filter='rating']\");\n      if (ratingButton) {\n        ratingButton.addEventListener(\"click\", () => {\n          if (!section._hcxReviewState) return;\n          const next = section._hcxReviewState.ratingFilter === 5 ? 4 : section._hcxReviewState.ratingFilter === 4 ? 0 : 5;\n          section._hcxReviewState.ratingFilter = next;\n          setHcxButtonLeadingText(ratingButton, next ? `${next}+ stars ` : \"Rating \");\n          renderHcxProductReviewList(section);\n        });\n      }\n\n      setProductReviewMetric(section, section.querySelector(\"[data-hcx-review-metric].is-active\") || buttons[0]);\n      loadHcxProductReviews(section);\n    });\n  };\n\n  const rerenderProductReviewApp = () => {\n    if (typeof window.avadaAirReviewRerender !== \"function\") return;\n    window.requestAnimationFrame(() => window.avadaAirReviewRerender());\n  };\n\n  const staleLegacyProgrammeTextPattern = /\\b(gold|joy|thief)\\b/i;\n  const normaliseLegacyProgrammeCopy = (value = \"\") =>\n    String(value)\n      .replace(/\\bthief\\b/gi, (match) => {\n        if (match === match.toUpperCase()) return \"MORTAL\";\n        return match[0] === match[0].toUpperCase() ? \"Mortal\" : \"mortal\";\n      })\n      .replace(/\\bgold\\b/gi, (match) => (match[0] === \"G\" ? \"Points\" : \"points\"))\n      .replace(/\\bjoy\\b/gi, (match) => (match === match.toUpperCase() ? \"LEGACY\" : \"Legacy\"));\n\n  const normaliseJoyPointsLanguage = () => {\n    const joy = window.AVADA_JOY;\n    if (!joy || html.dataset.hcxJoyPointsLanguageNormalised === \"true\") return;\n\n    html.dataset.hcxJoyPointsLanguageNormalised = \"true\";\n\n    const visited = new Set();\n    const rewrite = (value) => {\n      if (typeof value === \"string\") {\n        return normaliseLegacyProgrammeCopy(value);\n      }\n\n      if (!value || typeof value !== \"object\" || visited.has(value)) return value;\n      visited.add(value);\n\n      Object.keys(value).forEach((key) => {\n        value[key] = rewrite(value[key]);\n      });\n\n      return value;\n    };\n\n    rewrite(joy);\n  };\n\n  const normaliseLegacyProgramText = (root) => {\n    if (!root || !document.createTreeWalker) return;\n\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n      acceptNode(node) {\n        const parent = node.parentElement;\n        if (!parent || [\"SCRIPT\", \"STYLE\", \"NOSCRIPT\", \"TEXTAREA\"].includes(parent.tagName)) {\n          return NodeFilter.FILTER_REJECT;\n        }\n\n        return staleLegacyProgrammeTextPattern.test(node.nodeValue || \"\")\n          ? NodeFilter.FILTER_ACCEPT\n          : NodeFilter.FILTER_REJECT;\n      },\n    });\n\n    const nodes = [];\n    while (walker.nextNode()) nodes.push(walker.currentNode);\n    nodes.forEach((node) => {\n      node.nodeValue = normaliseLegacyProgrammeCopy(node.nodeValue || \"\");\n    });\n\n    const attributeNodes = root.nodeType === Node.ELEMENT_NODE\n      ? [root, ...root.querySelectorAll(\"*\")]\n      : [];\n    attributeNodes.forEach((node) => {\n      [\"aria-label\", \"title\", \"alt\", \"placeholder\", \"value\"].forEach((attribute) => {\n        if (!node.hasAttribute?.(attribute)) return;\n        const current = node.getAttribute(attribute) || \"\";\n        if (!staleLegacyProgrammeTextPattern.test(current)) return;\n        node.setAttribute(attribute, normaliseLegacyProgrammeCopy(current));\n      });\n    });\n  };\n\n  const initLoyaltyProgram = () => {\n    normaliseJoyPointsLanguage();\n\n    const formatPoints = (value) => Math.max(0, Math.round(value || 0)).toLocaleString(\"en-GB\");\n    const formatPounds = (value) =>\n      new Intl.NumberFormat(\"en-GB\", {\n        style: \"currency\",\n        currency: \"GBP\",\n        maximumFractionDigits: 0,\n      }).format(Math.max(0, Math.floor(value || 0)));\n\n    const getRewardAlertKey = (section) => {\n      const customerKey = section.dataset.hcxRewardAlertKey || \"guest\";\n      const rewardSteps = Math.max(0, Number(section.dataset.hcxAvailableRewardSteps || 0));\n\n      return `hcx:legacy-reward-alert:${customerKey}:${rewardSteps}`;\n    };\n\n    const setRewardAlertState = (section, isActive) => {\n      section.dataset.hcxRewardAlertActive = isActive ? \"true\" : \"false\";\n      section.classList.toggle(\"hcx-has-reward-alert\", isActive);\n      section.querySelectorAll(\"[data-hcx-reward-alert-badge]\").forEach((badge) => {\n        badge.hidden = !isActive;\n      });\n      section.dispatchEvent(new CustomEvent(\"hcx:reward-alert-changed\"));\n    };\n\n    const syncRewardAlert = (section) => {\n      const rewardSteps = Math.max(0, Number(section.dataset.hcxAvailableRewardSteps || 0));\n      let isDismissed = false;\n\n      try {\n        isDismissed = window.localStorage.getItem(getRewardAlertKey(section)) === \"dismissed\";\n      } catch (error) {\n        isDismissed = false;\n      }\n\n      setRewardAlertState(section, rewardSteps > 0 && !isDismissed);\n    };\n\n    const dismissRewardAlert = (section) => {\n      if (!section || section.dataset.hcxRewardAlertActive !== \"true\") return;\n\n      try {\n        window.localStorage.setItem(getRewardAlertKey(section), \"dismissed\");\n      } catch (error) {\n        // Non-critical: private browsing can block localStorage.\n      }\n\n      setRewardAlertState(section, false);\n    };\n\n    const syncRewardPortalFallback = (section) => {\n      const surface = section?.querySelector(\"[data-hcx-joy-app-surface]\");\n      const fallback = surface?.querySelector(\"[data-hcx-joy-fallback-panel]\");\n      if (!surface || !fallback) return;\n\n      const hasRewardApp = [...surface.querySelectorAll(\".hcx-loyalty-joy__block\")].some((block) =>\n        block.children.length > 0 || (block.textContent || \"\").trim().length > 0\n      );\n      fallback.hidden = hasRewardApp;\n    };\n\n    const getRewardSurface = (trigger, program) => {\n      const selector = trigger.dataset.hcxRewardSurface || \"\";\n      if (selector) {\n        try {\n          return program?.querySelector(selector) || document.querySelector(selector);\n        } catch (error) {\n          return null;\n        }\n      }\n\n      return program?.querySelector(\"[data-hcx-joy-app-surface]\") || document.querySelector(\"[data-hcx-joy-app-surface]\");\n    };\n\n    const focusRewardSurface = (surface) => {\n      if (!(surface instanceof HTMLElement)) return false;\n\n      surface.hidden = false;\n      surface.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      window.setTimeout(() => {\n        if (!surface.hasAttribute(\"tabindex\")) surface.setAttribute(\"tabindex\", \"-1\");\n        surface.focus({ preventScroll: true });\n      }, 220);\n      return true;\n    };\n\n    const bindLegacyTextNormaliser = (root) => {\n      if (!root || root.dataset.hcxLegacyTextObserverBound === \"true\") return;\n\n      normaliseLegacyProgramText(root);\n      root.dataset.hcxLegacyTextObserverBound = \"true\";\n      new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          const target =\n            mutation.target.nodeType === Node.TEXT_NODE\n              ? mutation.target.parentElement\n              : mutation.target;\n          normaliseLegacyProgramText(target);\n        });\n      }).observe(root, { childList: true, characterData: true, subtree: true, attributes: true });\n    };\n\n    const profileTextRoots = [...new Set([\n      ...document.querySelectorAll(\"[data-hcx-loyalty-program], .customer.account, .hcx-account-legacy\"),\n      ...(document.body.classList.contains(\"template-customers-account\")\n        ? [document.getElementById(\"MainContent\"), document.body]\n        : []),\n    ].filter(Boolean))];\n    profileTextRoots.forEach(bindLegacyTextNormaliser);\n\n    document.querySelectorAll(\"[data-hcx-loyalty-program]\").forEach((section) => {\n      if (section.dataset.hcxLoyaltyBound === \"true\") return;\n      section.dataset.hcxLoyaltyBound = \"true\";\n\n      syncRewardAlert(section);\n      syncRewardPortalFallback(section);\n\n      const rewardSurface = section.querySelector(\"[data-hcx-joy-app-surface]\");\n      if (rewardSurface) {\n        new MutationObserver(() => syncRewardPortalFallback(section)).observe(rewardSurface, {\n          childList: true,\n          subtree: true,\n        });\n      }\n    });\n\n    if (html.dataset.hcxJoyTriggerBound === \"true\") return;\n    html.dataset.hcxJoyTriggerBound = \"true\";\n\n    document.addEventListener(\"click\", (event) => {\n      const trigger = event.target.closest(\"[data-hcx-open-joy]\");\n      if (!trigger) return;\n\n      event.preventDefault();\n      const program = trigger.closest(\"[data-hcx-loyalty-program]\");\n      const couponTrigger = trigger.closest(\"[data-hcx-coupon-value]\");\n\n      if (program && couponTrigger) {\n        program.querySelectorAll(\"[data-hcx-coupon-value]\").forEach((coupon) => {\n          coupon.classList.toggle(\"is-selected\", coupon === couponTrigger);\n        });\n        program.dataset.hcxSelectedCouponValue = couponTrigger.dataset.hcxCouponValue || \"\";\n        program.dataset.hcxSelectedCouponPoints = couponTrigger.dataset.hcxCouponPoints || \"\";\n      }\n\n      dismissRewardAlert(program);\n\n      const rewardSurface = getRewardSurface(trigger, program);\n\n      if (typeof window.avadaJoyTrigger === \"function\") {\n        try {\n          window.avadaJoyTrigger();\n        } catch (error) {\n          // Keep the embedded rewards surface as the reliable fallback.\n        }\n      }\n\n      if (focusRewardSurface(rewardSurface)) return;\n\n      const fallback = trigger.dataset.hcxJoyFallback || trigger.getAttribute(\"href\") || \"/pages/legacy#legacy-rewards\";\n      if (fallback.startsWith(\"#\")) {\n        const fallbackSurface = document.querySelector(fallback);\n        if (focusRewardSurface(fallbackSurface)) return;\n      }\n\n      window.location.href = fallback;\n    });\n  };\n\n  const initLegacyRegisterForm = () => {\n    document.querySelectorAll(\".customer.register form, .hcx-legacy-signup-form\").forEach((form) => {\n      if (form.dataset.hcxLegacyRegisterBound === \"true\") return;\n\n      const birthdayInput = form.querySelector(\"[data-hcx-birthday-input]\");\n      const emailInput = form.querySelector(\"[data-hcx-legacy-email], input[type='email'][required]\");\n      if (!birthdayInput) return;\n\n      form.dataset.hcxLegacyRegisterBound = \"true\";\n\n      const validateBirthday = () => {\n        birthdayInput.setCustomValidity(\"\");\n\n        if (!birthdayInput.value) {\n          birthdayInput.setCustomValidity(\"Enter your birthday to save it to your Legacy profile.\");\n          return false;\n        }\n\n        const selectedDate = new Date(`${birthdayInput.value}T00:00:00`);\n        const today = new Date();\n        today.setHours(0, 0, 0, 0);\n\n        if (Number.isNaN(selectedDate.getTime()) || selectedDate > today) {\n          birthdayInput.setCustomValidity(\"Enter a valid birthday.\");\n          return false;\n        }\n\n        return true;\n      };\n\n      const validateEmail = () => {\n        if (!emailInput) return true;\n\n        emailInput.setCustomValidity(\"\");\n        if (emailInput.validity.valid) return true;\n\n        emailInput.setCustomValidity(\"Enter a valid email for your Legacy profile.\");\n        return false;\n      };\n\n      birthdayInput.addEventListener(\"input\", validateBirthday);\n      if (emailInput) emailInput.addEventListener(\"input\", validateEmail);\n      form.addEventListener(\"submit\", (event) => {\n        const hasValidEmail = validateEmail();\n        const hasValidBirthday = validateBirthday();\n        if (hasValidEmail && hasValidBirthday) return;\n\n        event.preventDefault();\n        const target = hasValidEmail ? birthdayInput : emailInput;\n        target.reportValidity();\n        target.focus({ preventScroll: false });\n      });\n    });\n  };\n\n  const initCookieConsentFallback = () => {\n    if (html.dataset.hcxCookieConsentFallback === \"true\") return;\n    html.dataset.hcxCookieConsentFallback = \"true\";\n\n    const dialogSelector = \".shopify-pc__banner__dialog, [class*='shopify-pc__banner'][class*='dialog']\";\n    const privacySelector = [\n      \"[id*='shopify-pc']\",\n      \"[class*='shopify-pc']\",\n      \"[id*='shopify-privacy']\",\n      \"[class*='shopify-privacy']\",\n      \"[id*='privacy-banner']\",\n      \"[class*='privacy-banner']\",\n    ].join(\", \");\n    const privacyButtonSelector = privacySelector\n      .split(\", \")\n      .map((selector) => `${selector} button`)\n      .join(\", \");\n    const allConsentButtonSelector = `${privacyButtonSelector}, button, a[role='button'], [role='button']`;\n\n    const getElementText = (element) => (element?.textContent || \"\").trim().replace(/\\s+/g, \" \");\n    const getButtonLabel = (button) =>\n      [\n        getElementText(button),\n        button.getAttribute(\"aria-label\") || \"\",\n        button.getAttribute(\"data-action\") || \"\",\n        button.id || \"\",\n        button.className || \"\",\n      ]\n        .join(\" \")\n        .toLowerCase();\n    const isVisibleElement = (element) => {\n      if (!(element instanceof Element)) return false;\n      const rect = element.getBoundingClientRect();\n      const style = window.getComputedStyle(element);\n      return rect.width > 0 && rect.height > 0 && style.display !== \"none\" && style.visibility !== \"hidden\";\n    };\n    const getCookieSurface = (element) => {\n      if (!(element instanceof Element)) return null;\n\n      const directSurface = element.closest(privacySelector);\n      if (directSurface) return directSurface;\n\n      let node = element.parentElement;\n      let depth = 0;\n      while (node && node !== document.body && depth < 8) {\n        const text = getElementText(node).toLowerCase();\n        const looksLikeCookieSurface =\n          /(cookie consent|cookies|privacy policy)/.test(text) &&\n          /(accept|decline|reject|deny|manage preferences|save preferences)/.test(text);\n\n        if (looksLikeCookieSurface) return node;\n        node = node.parentElement;\n        depth += 1;\n      }\n\n      return null;\n    };\n    const isCookieConsentButton = (button) => {\n      if (!(button instanceof Element) || !isVisibleElement(button) || !getCookieSurface(button)) return false;\n      return /(accept|allow|decline|reject|deny|manage preferences|save preferences|confirm)/.test(getButtonLabel(button));\n    };\n    const prepareCookieConsentClickTargets = () => {\n      document.querySelectorAll(allConsentButtonSelector).forEach((button) => {\n        if (!isCookieConsentButton(button)) return;\n\n        const surface = getCookieSurface(button);\n        surface?.classList.add(\"hcx-cookie-consent-surface\");\n        button.classList.add(\"hcx-cookie-consent-button\");\n\n        const rect = button.getBoundingClientRect();\n        const x = rect.left + rect.width / 2;\n        const y = rect.top + rect.height / 2;\n        const stack = typeof document.elementsFromPoint === \"function\" ? document.elementsFromPoint(x, y) : [];\n\n        for (const element of stack) {\n          if (!(element instanceof HTMLElement)) continue;\n          if (element === button || button.contains(element) || element.closest(\".hcx-cookie-consent-surface\")) break;\n          if (element === document.body || element === document.documentElement) continue;\n\n          const style = window.getComputedStyle(element);\n          const canBlockClick =\n            style.pointerEvents !== \"none\" &&\n            ([\"fixed\", \"sticky\", \"absolute\"].includes(style.position) || style.zIndex !== \"auto\");\n\n          if (canBlockClick) element.classList.add(\"hcx-cookie-click-through\");\n        }\n      });\n    };\n\n    const hideBanner = (button) => {\n      const dialog = button.closest(dialogSelector);\n      const cookieSurface = getCookieSurface(button);\n      const privacyAncestors = [];\n      let node = button.parentElement;\n\n      while (node && node !== document.body) {\n        if (node.matches(privacySelector)) privacyAncestors.push(node);\n        node = node.parentElement;\n      }\n\n      [dialog, cookieSurface, ...privacyAncestors].forEach((bannerNode) => {\n        if (!bannerNode) return;\n        bannerNode.classList.add(\"hcx-cookie-consent-hidden\");\n        bannerNode.setAttribute(\"aria-hidden\", \"true\");\n      });\n    };\n\n    const getConsentChoice = (button) => {\n      const buttonText = button.textContent.trim().toLowerCase();\n      const buttonName = `${button.className || \"\"} ${button.getAttribute(\"data-action\") || \"\"}`.toLowerCase();\n      const label = `${buttonName} ${buttonText}`;\n\n      if (buttonText.includes(\"manage\")) return null;\n      if (/(decline|reject|deny)/.test(label)) return false;\n      if (/(accept|allow)/.test(label)) return true;\n\n      return null;\n    };\n\n    const nativeClickConsentButton = (button) => {\n      if (button.dataset.hcxCookieActivating === \"true\") return;\n\n      button.dataset.hcxCookieActivating = \"true\";\n      window.setTimeout(() => {\n        try {\n          button.click();\n        } catch (error) {\n          window.HCXCookieConsentNativeClickError = true;\n        }\n        window.setTimeout(() => {\n          delete button.dataset.hcxCookieActivating;\n        }, 250);\n      }, 0);\n    };\n\n    const applyConsentChoice = (button, consentChoice) => {\n      const setTrackingConsent = window.Shopify?.customerPrivacy?.setTrackingConsent;\n      if (typeof setTrackingConsent !== \"function\" || consentChoice === null) return false;\n\n      try {\n        setTrackingConsent.call(window.Shopify.customerPrivacy, consentChoice, () => hideBanner(button));\n        return true;\n      } catch (error) {\n        return false;\n      }\n    };\n\n    const getConsentButtonFromEvent = (event) => {\n      const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n      const directButton = target?.closest(allConsentButtonSelector);\n      if (isCookieConsentButton(directButton)) return directButton;\n\n      const stack =\n        typeof document.elementsFromPoint === \"function\" && Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n          ? document.elementsFromPoint(event.clientX, event.clientY)\n          : [];\n\n      for (const element of stack) {\n        const button = element instanceof Element ? element.closest(allConsentButtonSelector) : null;\n        if (isCookieConsentButton(button)) return button;\n      }\n\n      return null;\n    };\n\n    const activateConsentButton = (button) => {\n      const consentChoice = getConsentChoice(button);\n\n      if (consentChoice === null) {\n        nativeClickConsentButton(button);\n        return;\n      }\n\n      const usedConsentApi = applyConsentChoice(button, consentChoice);\n      if (!usedConsentApi) nativeClickConsentButton(button);\n\n      window.setTimeout(() => hideBanner(button), 250);\n      window.setTimeout(() => hideBanner(button), 900);\n      window.setTimeout(() => hideBanner(button), 1800);\n    };\n\n    document.addEventListener(\n      \"pointerdown\",\n      () => {\n        window.requestAnimationFrame(prepareCookieConsentClickTargets);\n      },\n      true\n    );\n\n    document.addEventListener(\n      \"click\",\n      (event) => {\n        prepareCookieConsentClickTargets();\n\n        const button = getConsentButtonFromEvent(event);\n        if (!button) return;\n        if (button.dataset.hcxCookieActivating === \"true\") return;\n\n        const buttonText = button.textContent.trim().toLowerCase();\n        const buttonName = `${button.className || \"\"} ${button.getAttribute(\"data-action\") || \"\"}`.toLowerCase();\n        const finalChoice =\n          /(accept|decline|save|confirm|reject|deny)/.test(buttonName) ||\n          /^(accept|decline|save|save preferences|confirm|reject all|deny)$/.test(buttonText);\n\n        if (buttonText.includes(\"manage\")) {\n          event.preventDefault();\n          event.stopPropagation();\n          nativeClickConsentButton(button);\n          return;\n        }\n\n        if (!finalChoice) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        activateConsentButton(button);\n      },\n      true\n    );\n\n    prepareCookieConsentClickTargets();\n\n    const observer = new MutationObserver(() => {\n      window.requestAnimationFrame(prepareCookieConsentClickTargets);\n    });\n    observer.observe(document.body, { childList: true, subtree: true });\n  };\n\n  const THREE_MODULE_URL = \"https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js\";\n  let hcxThreeModulePromise = null;\n\n  const loadThreeModule = () => {\n    if (!hcxThreeModulePromise) hcxThreeModulePromise = import(THREE_MODULE_URL);\n    return hcxThreeModulePromise;\n  };\n\n  const drawRoundedRect = (context, x, y, width, height, radius) => {\n    const r = Math.min(radius, width / 2, height / 2);\n\n    context.beginPath();\n    context.moveTo(x + r, y);\n    context.lineTo(x + width - r, y);\n    context.quadraticCurveTo(x + width, y, x + width, y + r);\n    context.lineTo(x + width, y + height - r);\n    context.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n    context.lineTo(x + r, y + height);\n    context.quadraticCurveTo(x, y + height, x, y + height - r);\n    context.lineTo(x, y + r);\n    context.quadraticCurveTo(x, y, x + r, y);\n    context.closePath();\n  };\n\n  const clampValue = (value, min, max) => Math.min(Math.max(value, min), max);\n  const smoothStep = (value) => value * value * (3 - 2 * value);\n\n  const wrapCanvasText = (context, text, x, y, maxWidth, lineHeight, maxLines = 3) => {\n    const words = String(text || \"\").split(/\\s+/).filter(Boolean);\n    let line = \"\";\n    let lineCount = 0;\n\n    words.forEach((word, index) => {\n      const testLine = line ? `${line} ${word}` : word;\n      const isLastWord = index === words.length - 1;\n\n      if (context.measureText(testLine).width > maxWidth && line) {\n        context.fillText(line, x, y + lineCount * lineHeight);\n        line = word;\n        lineCount += 1;\n      } else {\n        line = testLine;\n      }\n\n      if ((isLastWord || lineCount === maxLines - 1) && line) {\n        const output = lineCount === maxLines - 1 && !isLastWord ? `${line.replace(/\\.*$/, \"\")}...` : line;\n        context.fillText(output, x, y + lineCount * lineHeight);\n        line = \"\";\n      }\n    });\n  };\n\n  const normalizePhoneCopy = (value) =>\n    String(value || \"\")\n      .replace(/\\u00c2?\\u00a3/g, \"GBP \")\n      .replace(/\\s+/g, \" \")\n      .trim();\n\n  const getLoyaltyPhoneTimeText = () => {\n    const now = new Date();\n\n    try {\n      const formatter = new Intl.DateTimeFormat(typeof navigator !== \"undefined\" ? navigator.language : undefined, {\n        hour: \"numeric\",\n        minute: \"2-digit\",\n      });\n      const parts = formatter.formatToParts(now);\n      const hour = parts.find((part) => part.type === \"hour\")?.value;\n      const minute = parts.find((part) => part.type === \"minute\")?.value;\n      const separator =\n        parts.find((part, index) => part.type === \"literal\" && parts[index - 1]?.type === \"hour\" && parts[index + 1]?.type === \"minute\")?.value ||\n        \":\";\n\n      if (hour && minute) return `${hour}${separator}${minute}`.replace(/\\s+/g, \"\");\n\n      return formatter.format(now).replace(/\\s?(AM|PM|am|pm)\\s?/g, \"\").trim();\n    } catch (error) {\n      return now.toLocaleTimeString([], { hour: \"numeric\", minute: \"2-digit\" }).replace(/\\s?(AM|PM|am|pm)\\s?/g, \"\").trim();\n    }\n  };\n\n  const drawLoyaltyPhoneOrderNotification = (context, notification) => {\n    if (!notification?.item) return;\n\n    const item = normalizePhoneCopy(notification.item).slice(0, 54);\n    const timeAgo = normalizePhoneCopy(notification.timeAgo || \"now\").slice(0, 20);\n    const x = 34;\n    const y = 90;\n    const width = 452;\n    const height = 122;\n\n    context.save();\n    context.shadowColor = \"rgba(0, 0, 0, 0.42)\";\n    context.shadowBlur = 28;\n    context.shadowOffsetY = 14;\n    const cardGradient = context.createLinearGradient(x, y, x + width, y + height);\n    cardGradient.addColorStop(0, \"rgba(255, 255, 255, 0.96)\");\n    cardGradient.addColorStop(.48, \"rgba(242, 242, 242, 0.9)\");\n    cardGradient.addColorStop(1, \"rgba(217, 217, 217, 0.82)\");\n    context.fillStyle = cardGradient;\n    drawRoundedRect(context, x, y, width, height, 30);\n    context.fill();\n    context.shadowBlur = 0;\n    context.shadowOffsetY = 0;\n    context.strokeStyle = \"rgba(255, 255, 255, 0.86)\";\n    context.lineWidth = 1.4;\n    drawRoundedRect(context, x, y, width, height, 30);\n    context.stroke();\n\n    context.fillStyle = \"rgba(255, 255, 255, 0.28)\";\n    drawRoundedRect(context, x + 14, y + 8, width - 28, 2.4, 1.2);\n    context.fill();\n\n    context.fillStyle = \"rgba(5, 5, 5, 0.94)\";\n    drawRoundedRect(context, x + 20, y + 28, 46, 46, 14);\n    context.fill();\n    context.fillStyle = \"rgba(255, 255, 255, 0.96)\";\n    context.font = '900 19px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.textAlign = \"center\";\n    context.textBaseline = \"middle\";\n    context.fillText(\"H\", x + 43, y + 51);\n    context.textAlign = \"left\";\n    context.textBaseline = \"alphabetic\";\n\n    context.fillStyle = \"rgba(5, 5, 5, 0.62)\";\n    context.font = '800 12px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.fillText(\"HERCXLES\", x + 82, y + 32);\n    context.textAlign = \"right\";\n    context.fillStyle = \"rgba(5, 5, 5, 0.48)\";\n    context.fillText(timeAgo.toUpperCase(), x + width - 24, y + 32);\n    context.textAlign = \"left\";\n\n    context.fillStyle = \"rgba(5, 5, 5, 0.96)\";\n    context.font = '800 17px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.fillText(\"Someone bought\", x + 82, y + 58);\n    context.fillStyle = \"rgba(5, 5, 5, 0.68)\";\n    context.font = '700 15px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    wrapCanvasText(context, item, x + 82, y + 84, width - 112, 18, 2);\n    context.restore();\n  };\n\n  const createLoyaltyPhoneTexture = (THREE, pointsText, tierText, isBack = false, screenSpec = null, phoneTimeText = getLoyaltyPhoneTimeText()) => {\n    const textureCanvas = document.createElement(\"canvas\");\n    textureCanvas.width = 520;\n    textureCanvas.height = 1040;\n    const context = textureCanvas.getContext(\"2d\");\n    if (isBack) {\n      context.fillStyle = \"#101010\";\n    } else {\n      const screenBackground = context.createLinearGradient(0, 0, 520, 1040);\n      screenBackground.addColorStop(0, screenSpec ? \"#575757\" : \"#464646\");\n      screenBackground.addColorStop(.46, screenSpec ? \"#303030\" : \"#343434\");\n      screenBackground.addColorStop(1, screenSpec ? \"#4b4b4b\" : \"#3f3f3f\");\n      context.fillStyle = screenBackground;\n    }\n    context.fillRect(0, 0, 520, 1040);\n\n    if (!screenSpec) {\n      context.strokeStyle = \"rgba(218, 218, 218, 0.16)\";\n      context.lineWidth = 2;\n      for (let y = 88; y < 980; y += 74) {\n        context.beginPath();\n        context.moveTo(52, y);\n        context.lineTo(468, y);\n        context.stroke();\n      }\n    }\n\n    context.fillStyle = \"rgba(218, 218, 218, 1)\";\n    context.font = '600 32px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.letterSpacing = \"4px\";\n    if (!screenSpec) context.fillText(\"LEGACY\", 56, 96);\n\n    if (isBack) {\n      context.fillStyle = \"rgba(255, 255, 255, 1)\";\n      context.font = '700 43px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"HERCXLES\", 56, 512);\n      context.fillStyle = \"rgba(218, 218, 218, 0.86)\";\n      context.font = '500 22px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"LEGACY DEVICE\", 56, 556);\n    } else if (screenSpec) {\n      const pages = screenSpec.pages || [\"Welcome\", \"Points\", \"Tiers\", \"Orders\"];\n      const activePage = Math.max(0, Number(screenSpec.index || 0));\n      const hoveredPage = Number.isFinite(Number(screenSpec.hoverIndex)) ? Number(screenSpec.hoverIndex) : -1;\n      const accountLabel = normalizePhoneCopy(screenSpec.accountLabel || \"Guest\").slice(0, 18).toUpperCase();\n      const defaultPageSummaries = [\n        `${pointsText || \"0\"} pts / ${tierText || \"Athlete\"}`,\n        \"Earn and redeem\",\n        \"Tier progress\",\n        \"Orders and returns\",\n      ];\n      const pageSummaries = screenSpec.pageSummaries || pages.map((page, index) => defaultPageSummaries[index] || `${page} panel`);\n\n      context.letterSpacing = \"0px\";\n\n      context.fillStyle = \"rgba(0, 0, 0, 0.96)\";\n      drawRoundedRect(context, 188, 38, 144, 40, 20);\n      context.fill();\n      context.strokeStyle = \"rgba(255, 255, 255, 0.1)\";\n      context.stroke();\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.84)\";\n      context.font = '600 17px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(phoneTimeText, 40, 68);\n      context.fillStyle = \"rgba(255, 255, 255, 0.6)\";\n      drawRoundedRect(context, 438, 52, 34, 15, 5);\n      context.fill();\n      context.fillStyle = \"rgba(255, 255, 255, 0.34)\";\n      drawRoundedRect(context, 476, 57, 4, 5, 2);\n      context.fill();\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.96)\";\n      context.font = '600 24px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(accountLabel, 34, 126);\n      context.fillStyle = \"rgba(218, 218, 218, 0.66)\";\n      context.font = '500 12px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"LEGACY ACCOUNT\", 36, 150);\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.1)\";\n      drawRoundedRect(context, 36, 170, 448, 7, 4);\n      context.fill();\n      const progressWidth = 448 * ((activePage + 1) / Math.max(pages.length, 1));\n      const progressGradient = context.createLinearGradient(36, 0, 484, 0);\n      progressGradient.addColorStop(0, \"#f5f5f5\");\n      progressGradient.addColorStop(1, \"#a8a8a8\");\n      context.fillStyle = progressGradient;\n      drawRoundedRect(context, 36, 170, progressWidth, 7, 4);\n      context.fill();\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.92)\";\n      context.font = '600 17px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(normalizePhoneCopy(screenSpec.eyebrow || \"01 / PROFILE\"), 34, 220);\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.58)\";\n      context.font = '500 12px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"SCROLL TO SELECT\", 34, 243);\n\n      pages.slice(0, 7).forEach((page, index) => {\n        const rowY = 280 + index * 93;\n        const selected = index === activePage;\n        const hovered = !selected && index === hoveredPage;\n        const rowGradient = context.createLinearGradient(28, rowY, 492, rowY + 76);\n\n        rowGradient.addColorStop(0, selected ? \"rgba(245, 245, 245, 0.92)\" : hovered ? \"rgba(255, 255, 255, 0.22)\" : \"rgba(255, 255, 255, 0.13)\");\n        rowGradient.addColorStop(1, selected ? \"rgba(190, 190, 190, 0.78)\" : hovered ? \"rgba(255, 255, 255, 0.11)\" : \"rgba(255, 255, 255, 0.06)\");\n        if (hovered) {\n          context.save();\n          context.shadowColor = \"rgba(255, 255, 255, 0.16)\";\n          context.shadowBlur = 20;\n        }\n        context.fillStyle = rowGradient;\n        drawRoundedRect(context, 28, rowY, 464, 76, 24);\n        context.fill();\n        if (hovered) context.restore();\n        context.strokeStyle = selected ? \"rgba(255, 255, 255, 0.72)\" : hovered ? \"rgba(255, 255, 255, 0.34)\" : \"rgba(218, 218, 218, 0.16)\";\n        context.stroke();\n\n        context.fillStyle = selected ? \"rgba(5, 5, 5, 0.74)\" : hovered ? \"rgba(255, 255, 255, 0.72)\" : \"rgba(218, 218, 218, 0.58)\";\n        context.font = '600 13px \"Helvetica Neue\", Arial, sans-serif';\n        context.fillText(String(index + 1).padStart(2, \"0\"), 54, rowY + 32);\n\n        context.fillStyle = selected ? \"rgba(5, 5, 5, 0.98)\" : hovered ? \"rgba(255, 255, 255, 1)\" : \"rgba(255, 255, 255, 0.94)\";\n        context.font = '600 24px \"Helvetica Neue\", Arial, sans-serif';\n        context.fillText(normalizePhoneCopy(page).toUpperCase(), 104, rowY + 35);\n\n        context.fillStyle = selected ? \"rgba(5, 5, 5, 0.62)\" : \"rgba(255, 255, 255, 0.5)\";\n        context.font = '500 13px \"Helvetica Neue\", Arial, sans-serif';\n        context.fillText(normalizePhoneCopy(pageSummaries[index]).slice(0, 38), 104, rowY + 60);\n\n        if (selected) {\n          context.fillStyle = \"rgba(5, 5, 5, 0.92)\";\n          drawRoundedRect(context, 446, rowY + 22, 28, 32, 14);\n          context.fill();\n\n          context.fillStyle = \"rgba(255, 255, 255, 0.96)\";\n          context.font = '600 15px \"Helvetica Neue\", Arial, sans-serif';\n          context.fillText(\">\", 456, rowY + 43);\n        }\n\n        if (screenSpec.rewardAlert && index === (screenSpec.rewardAlertIndex ?? pages.length - 1)) {\n          const countText = Number(screenSpec.rewardAlertCount || 0) > 9 ? \"9+\" : String(Math.max(1, Number(screenSpec.rewardAlertCount || 1)));\n\n          context.save();\n          context.shadowColor = \"rgba(255, 255, 255, 0.34)\";\n          context.shadowBlur = 16;\n          context.fillStyle = \"#f2f2f2\";\n          drawRoundedRect(context, 452, rowY - 6, countText.length > 1 ? 32 : 24, 24, 12);\n          context.fill();\n          context.shadowBlur = 0;\n          context.strokeStyle = \"rgba(255, 255, 255, 0.92)\";\n          context.lineWidth = 3;\n          drawRoundedRect(context, 452, rowY - 6, countText.length > 1 ? 32 : 24, 24, 12);\n          context.stroke();\n          context.fillStyle = \"#050505\";\n          context.font = '600 13px \"Helvetica Neue\", Arial, sans-serif';\n          context.textAlign = \"center\";\n          context.textBaseline = \"middle\";\n          context.fillText(countText, 452 + (countText.length > 1 ? 16 : 12), rowY + 6);\n          context.restore();\n        }\n      });\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.58)\";\n      context.font = '500 12px \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(normalizePhoneCopy(screenSpec.footer || \"Current tab highlighted\").toUpperCase(), 34, 946);\n\n      drawLoyaltyPhoneOrderNotification(context, screenSpec.orderNotification);\n    } else {\n      context.fillStyle = \"rgba(255, 255, 255, 1)\";\n      context.font = '500 138px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(pointsText || \"0\", 54, 286);\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.58)\";\n      context.font = '600 22px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"POINTS BALANCE\", 58, 330);\n\n      const rows = [\n        [\"TIER\", tierText || \"Mortal\"],\n        [\"NEXT REWARD\", \"GBP 10\"],\n        [\"LEGACY\", \"READY\"],\n      ];\n\n      rows.forEach(([label, value], index) => {\n        const rowY = 448 + index * 142;\n\n        context.fillStyle = \"rgba(255, 255, 255, 0.06)\";\n        drawRoundedRect(context, 48, rowY - 68, 424, 96, 28);\n        context.fill();\n        context.strokeStyle = \"rgba(218, 218, 218, 0.18)\";\n        context.lineWidth = 2;\n        context.stroke();\n\n        context.fillStyle = \"rgba(218, 218, 218, 0.82)\";\n        context.font = '600 19px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n        context.fillText(label, 74, rowY - 26);\n\n        context.fillStyle = \"rgba(255, 255, 255, 0.94)\";\n        context.font = '600 31px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n        context.fillText(value, 74, rowY + 14);\n      });\n\n      const progressX = 56;\n      const progressY = 884;\n      context.fillStyle = \"rgba(255, 255, 255, 0.12)\";\n      drawRoundedRect(context, progressX, progressY, 408, 18, 9);\n      context.fill();\n      const progressGradient = context.createLinearGradient(progressX, 0, progressX + 360, 0);\n      progressGradient.addColorStop(0, \"#e1e1e1\");\n      progressGradient.addColorStop(1, \"#a8a8a8\");\n      context.fillStyle = progressGradient;\n      drawRoundedRect(context, progressX, progressY, 286, 18, 9);\n      context.fill();\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.6)\";\n      context.font = '500 20px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(\"200 PTS = GBP 10 REWARD\", 56, 946);\n    }\n\n    const texture = new THREE.CanvasTexture(textureCanvas);\n    if (\"colorSpace\" in texture && THREE.SRGBColorSpace) texture.colorSpace = THREE.SRGBColorSpace;\n    texture.anisotropy = 4;\n    texture.needsUpdate = true;\n\n    return texture;\n  };\n\n  const createPhoneGlassTexture = (THREE) => {\n    const textureCanvas = document.createElement(\"canvas\");\n    textureCanvas.width = 520;\n    textureCanvas.height = 1040;\n    const context = textureCanvas.getContext(\"2d\");\n\n    context.clearRect(0, 0, 520, 1040);\n    const glassSweep = context.createLinearGradient(0, 0, 520, 1040);\n    glassSweep.addColorStop(0, \"rgba(255, 255, 255, 0.18)\");\n    glassSweep.addColorStop(.14, \"rgba(255, 255, 255, 0.035)\");\n    glassSweep.addColorStop(.32, \"rgba(255, 255, 255, 0)\");\n    glassSweep.addColorStop(.72, \"rgba(255, 255, 255, 0.045)\");\n    glassSweep.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n    context.fillStyle = glassSweep;\n    context.fillRect(0, 0, 520, 1040);\n\n    const edgeShade = context.createRadialGradient(260, 520, 180, 260, 520, 620);\n    edgeShade.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n    edgeShade.addColorStop(1, \"rgba(0, 0, 0, 0.2)\");\n    context.fillStyle = edgeShade;\n    context.fillRect(0, 0, 520, 1040);\n\n    const texture = new THREE.CanvasTexture(textureCanvas);\n    if (\"colorSpace\" in texture && THREE.SRGBColorSpace) texture.colorSpace = THREE.SRGBColorSpace;\n    texture.anisotropy = 4;\n    texture.needsUpdate = true;\n\n    return texture;\n  };\n\n  const createLoyaltyPhonePanelTexture = (THREE, panel) => {\n    const textureCanvas = document.createElement(\"canvas\");\n    textureCanvas.width = 640;\n    textureCanvas.height = 900;\n    const context = textureCanvas.getContext(\"2d\");\n    const panelGradient = context.createLinearGradient(0, 0, 640, 900);\n\n    panelGradient.addColorStop(0, \"#202020\");\n    panelGradient.addColorStop(.5, \"#0d0d0d\");\n    panelGradient.addColorStop(1, \"#050505\");\n    context.fillStyle = panelGradient;\n    context.fillRect(0, 0, 640, 900);\n\n    context.strokeStyle = \"rgba(218, 218, 218, 0.18)\";\n    context.lineWidth = 2;\n    drawRoundedRect(context, 24, 24, 592, 852, 44);\n    context.stroke();\n\n    context.fillStyle = \"rgba(218, 218, 218, 0.92)\";\n    context.font = '600 24px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.fillText(panel.eyebrow || \"LEGACY PAGE\", 56, 96);\n\n    context.fillStyle = \"rgba(255, 255, 255, 0.98)\";\n    context.font = '600 66px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.fillText(panel.title || \"LEGACY\", 56, 174);\n\n    context.fillStyle = \"rgba(255, 255, 255, 0.62)\";\n    context.font = '500 24px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    wrapCanvasText(context, panel.body || \"\", 58, 230, 520, 34, 3);\n\n    const rows = panel.rows || [];\n\n    rows.forEach(([label, value], index) => {\n      const rowY = 390 + index * 106;\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.055)\";\n      drawRoundedRect(context, 52, rowY - 62, 536, 82, 24);\n      context.fill();\n      context.strokeStyle = \"rgba(218, 218, 218, 0.13)\";\n      context.stroke();\n\n      context.fillStyle = \"rgba(218, 218, 218, 0.78)\";\n      context.font = '600 18px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(label, 78, rowY - 28);\n\n      context.fillStyle = \"rgba(255, 255, 255, 0.95)\";\n      context.font = '600 30px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n      context.fillText(value, 78, rowY + 10);\n    });\n\n    context.fillStyle = \"rgba(255, 255, 255, 0.5)\";\n    context.font = '500 20px \"Swiss 721\", \"Helvetica Neue\", Arial, sans-serif';\n    context.fillText(panel.footer || \"SCROLL TO OPEN NEXT PART\", 56, 810);\n\n    const texture = new THREE.CanvasTexture(textureCanvas);\n    if (\"colorSpace\" in texture && THREE.SRGBColorSpace) texture.colorSpace = THREE.SRGBColorSpace;\n    texture.anisotropy = 4;\n    texture.needsUpdate = true;\n\n    return texture;\n  };\n\n  const createRoundedPhoneShape = (THREE, width, height, radius) => {\n    const shape = new THREE.Shape();\n    const x = -width / 2;\n    const y = -height / 2;\n    const r = Math.min(radius, width / 2, height / 2);\n\n    shape.moveTo(x + r, y);\n    shape.lineTo(x + width - r, y);\n    shape.quadraticCurveTo(x + width, y, x + width, y + r);\n    shape.lineTo(x + width, y + height - r);\n    shape.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n    shape.lineTo(x + r, y + height);\n    shape.quadraticCurveTo(x, y + height, x, y + height - r);\n    shape.lineTo(x, y + r);\n    shape.quadraticCurveTo(x, y, x + r, y);\n\n    return shape;\n  };\n\n  const normalizePhoneGeometryUv = (THREE, geometry) => {\n    geometry.computeBoundingBox();\n\n    const box = geometry.boundingBox;\n    if (!box) return geometry;\n\n    const position = geometry.attributes.position;\n    const width = box.max.x - box.min.x || 1;\n    const height = box.max.y - box.min.y || 1;\n    const uvs = [];\n\n    for (let index = 0; index < position.count; index += 1) {\n      uvs.push(\n        (position.getX(index) - box.min.x) / width,\n        (position.getY(index) - box.min.y) / height\n      );\n    }\n\n    geometry.setAttribute(\"uv\", new THREE.Float32BufferAttribute(uvs, 2));\n    geometry.attributes.uv.needsUpdate = true;\n\n    return geometry;\n  };\n\n  const initLoyaltyInterface = () => {\n    document.querySelectorAll(\"[data-hcx-loyalty-program]\").forEach((section) => {\n      if (section.dataset.hcxLegacyInterfaceBound === \"true\") return;\n\n      const isMobileLegacyTabs = window.matchMedia(\"(max-width: 749px)\").matches;\n      if (isMobileLegacyTabs) {\n        section.dataset.hcxLegacyMobileTabs = \"true\";\n        section.classList.add(\"hcx-legacy-mobile-tabs-mode\", \"hcx-legacy-mobile-pages-mode\");\n        html.classList.add(\"hcx-legacy-mobile-snap\");\n      }\n\n      const phoneStage = section.querySelector(\":scope > .hcx-loyalty-phone-stage\");\n      const hero = section.querySelector(\":scope > .hcx-loyalty-program__hero\");\n      const system = section.querySelector(\":scope > .hcx-loyalty-program__system\");\n      const earn = section.querySelector(\":scope > .hcx-loyalty-earn\");\n      const body = section.querySelector(\":scope > .hcx-loyalty-program__body\");\n      const tiers = body?.querySelector(\".hcx-loyalty-tiers\");\n      const review = section.querySelector(\":scope > .hcx-loyalty-review-panel\");\n      const joy = section.querySelector(\":scope > .hcx-loyalty-joy\");\n      const ordersPanel = section.querySelector(\":scope > .hcx-legacy-orders-panel\");\n      const tracking = ordersPanel?.querySelector(\"[data-hcx-tracking-hub]\") || section.querySelector(\":scope > .hcx-tracking-hub\");\n\n      if (!phoneStage || !hero || !system || !earn || !tiers || !review) return;\n\n      section.dataset.hcxLegacyInterfaceBound = \"true\";\n      section.dataset.hcxLoyaltyInterface = \"true\";\n      section.classList.add(\"hcx-legacy-interface\", \"hcx-legacy-flyouts\");\n\n      const pointsText = section.querySelector(\".hcx-loyalty-profile > strong\")?.textContent.trim() || \"0\";\n      const tierText = section.querySelector(\".hcx-loyalty-profile__topline em\")?.textContent.trim() || \"Athlete\";\n      const pointsPerPound = Number(section.dataset.hcxPointsPerPound || 1);\n      const tierCount = tiers.querySelectorAll(\".hcx-loyalty-tier\").length || 7;\n      const ordersSummary = tracking?.dataset.hcxTrackingSummary || \"Track and return\";\n      const spendUnitText = `${pointsPerPound} / \\u00a31`;\n\n      const createElement = (tag, className, text) => {\n        const element = document.createElement(tag);\n        if (className) element.className = className;\n        if (text) element.textContent = text;\n        return element;\n      };\n\n      const createPanelHeader = (kicker, title, copy) => {\n        const header = createElement(\"div\", \"hcx-legacy-panel__header\");\n        const titleBlock = createElement(\"div\");\n        const kickerNode = createElement(\"p\", \"hcx-kicker\", kicker);\n        const titleNode = createElement(\"h2\", \"\", title);\n\n        titleBlock.append(kickerNode, titleNode);\n        header.append(titleBlock);\n        if (copy) header.append(createElement(\"p\", \"\", copy));\n\n        return header;\n      };\n\n      const stage = createElement(\"div\", \"hcx-legacy-stage\");\n      stage.dataset.hcxLegacyStage = \"\";\n      const rockfield = createElement(\"div\", \"hcx-legacy-rockfield\");\n      rockfield.setAttribute(\"aria-hidden\", \"true\");\n      Array.from({ length: 16 }).forEach((_, index) => {\n        const rock = createElement(\"span\", \"hcx-legacy-rockfield__rock\");\n        rock.dataset.hcxLegacyRock = String(index);\n        rockfield.append(rock);\n      });\n      const sticky = createElement(\"div\", \"hcx-legacy-stage__sticky\");\n      const phoneColumn = createElement(\"aside\", \"hcx-legacy-phone-column\");\n      phoneColumn.setAttribute(\"aria-label\", \"Legacy phone controller\");\n      const notificationLink = createElement(\"a\", \"hcx-legacy-order-notification-link\");\n      notificationLink.dataset.hcxOrderNotificationLink = \"\";\n      notificationLink.href = \"/collections/all\";\n      notificationLink.textContent = \"Open product\";\n      notificationLink.setAttribute(\"aria-label\", \"Open product from order notification\");\n      notificationLink.hidden = true;\n      const detail = createElement(\"div\", \"hcx-legacy-detail\");\n      detail.dataset.hcxLegacyDetail = \"\";\n      const progress = createElement(\"div\", \"hcx-legacy-progress\");\n      progress.setAttribute(\"aria-hidden\", \"true\");\n      const progressLabel = createElement(\"span\", \"\", \"01 / WELCOME\");\n      progressLabel.setAttribute(\"data-hcx-preserve-case\", \"\");\n      progressLabel.dataset.hcxLegacyProgressLabel = \"\";\n      const progressTrack = createElement(\"i\");\n      const progressBar = createElement(\"b\");\n      progressBar.dataset.hcxLegacyProgressBar = \"\";\n\n      progressTrack.append(progressBar);\n      progress.append(progressLabel, progressTrack);\n      detail.append(progress);\n\n      const tabData = [\n        [\"Welcome\", tierText, \"hcx-legacy-panel-profile\"],\n        [\"Points\", spendUnitText, \"hcx-legacy-panel-points\"],\n        ...(joy ? [[\"Redeem\", \"Coupons\", \"hcx-legacy-panel-redeem\"]] : []),\n        [\"Tiers\", `${tierCount} tiers`, \"hcx-legacy-panel-tiers\"],\n        ...(ordersPanel ? [[\"Orders\", ordersSummary, \"hcx-legacy-panel-orders\"]] : []),\n      ];\n\n      const phoneHotspots = createElement(\"div\", \"hcx-legacy-phone-hotspots\");\n      phoneHotspots.setAttribute(\"aria-label\", \"Legacy phone screens\");\n      phoneHotspots.setAttribute(\"role\", \"tablist\");\n      tabData.forEach(([label, , panelId], index) => {\n        const button = createElement(\"button\", \"hcx-legacy-phone-hotspot\");\n        button.type = \"button\";\n        button.dataset.hcxLoyaltyTab = String(index);\n        button.dataset.hcxPhoneHotspot = label;\n        button.style.setProperty(\"--hcx-phone-hotspot-top\", `${26.9 + index * 8.94}%`);\n        button.setAttribute(\"aria-controls\", panelId);\n        button.setAttribute(\"aria-label\", `Show ${label}`);\n        button.setAttribute(\"aria-selected\", index === 0 ? \"true\" : \"false\");\n        button.setAttribute(\"role\", \"tab\");\n        phoneHotspots.append(button);\n      });\n\n      const mobileTabs = createElement(\"div\", \"hcx-legacy-mobile-tabs\");\n      mobileTabs.setAttribute(\"aria-label\", \"Legacy sections\");\n      mobileTabs.setAttribute(\"role\", \"tablist\");\n      tabData.forEach(([label, meta, panelId], index) => {\n        const button = createElement(\"button\");\n        button.type = \"button\";\n        button.dataset.hcxLoyaltyTab = String(index);\n        button.setAttribute(\"aria-controls\", panelId);\n        button.setAttribute(\"aria-selected\", index === 0 ? \"true\" : \"false\");\n        button.setAttribute(\"role\", \"tab\");\n        button.append(createElement(\"span\", \"\", label), createElement(\"strong\", \"\", meta));\n        mobileTabs.append(button);\n      });\n\n      phoneColumn.append(phoneStage, phoneHotspots, notificationLink);\n\n      const panels = [\n        {\n          id: \"hcx-legacy-panel-profile\",\n          modifier: \"profile\",\n          nodes: [hero],\n          title: \"Welcome\",\n        },\n        {\n          header: createPanelHeader(\n            \"Points\",\n            \"Earn. Redeem. Repeat.\",\n            `Every paid order earns ${spendUnitText}. Convert points into vouchers and use them at checkout.`\n          ),\n          id: \"hcx-legacy-panel-points\",\n          nodes: [system],\n          title: \"Points\",\n        },\n        ...(joy ? [{\n          header: createPanelHeader(\n            \"Redeem\",\n            \"Get coupons.\",\n            \"Turn points into checkout coupons. Open coupons to claim what is available on your account.\"\n          ),\n          id: \"hcx-legacy-panel-redeem\",\n          modifier: \"redeem\",\n          nodes: [joy],\n          title: \"Redeem\",\n        }] : []),\n        {\n          header: createPanelHeader(\n            \"Tiers\",\n            \"Your Legacy path.\",\n            \"Move up automatically as your lifetime spend grows.\"\n          ),\n          id: \"hcx-legacy-panel-tiers\",\n          nodes: [tiers],\n          title: \"Tiers\",\n        },\n      ];\n      if (ordersPanel) {\n        panels.push({\n          id: \"hcx-legacy-panel-orders\",\n          header: createPanelHeader(\n            \"Orders\",\n            \"Orders in one place.\",\n            \"Track fulfilment, open order details and start a return or exchange when needed.\"\n          ),\n          nodes: [ordersPanel, review],\n          title: \"Orders\",\n        });\n      }\n      section.dataset.hcxPanelCount = String(panels.length);\n\n      panels.forEach((panel, index) => {\n        const article = createElement(\"article\", `hcx-legacy-panel${panel.modifier ? ` hcx-legacy-panel--${panel.modifier}` : \"\"}`);\n        article.id = panel.id;\n        article.dataset.hcxLoyaltyPanel = String(index);\n        article.tabIndex = -1;\n        if (index === 0) {\n          article.classList.add(\"is-active\");\n        } else if (!isMobileLegacyTabs) {\n          article.setAttribute(\"aria-hidden\", \"true\");\n        }\n        if (panel.header) article.append(panel.header);\n        panel.nodes.forEach((node) => article.append(node));\n        detail.append(article);\n      });\n\n      if (body && !body.children.length) body.remove();\n\n      const scrollSteps = createElement(\"div\", \"hcx-legacy-scroll-steps\");\n      scrollSteps.setAttribute(\"aria-hidden\", \"true\");\n      panels.forEach((_, index) => {\n        const step = createElement(\"span\");\n        step.dataset.hcxLoyaltyTabStep = String(index);\n        scrollSteps.append(step);\n      });\n\n      sticky.append(rockfield, phoneColumn, mobileTabs, detail);\n      stage.append(sticky, scrollSteps);\n      section.prepend(stage);\n\n      const reviewTargetPanelId = ordersPanel ? \"hcx-legacy-panel-orders\" : \"hcx-legacy-panel-points\";\n      const reviewTargetPanelIndex = panels.findIndex((panel) => panel.id === reviewTargetPanelId);\n      section.querySelectorAll('a[href=\"#review-reward\"]').forEach((link) => {\n        link.dataset.hcxLoyaltyTab = String(reviewTargetPanelIndex >= 0 ? reviewTargetPanelIndex : 1);\n        link.setAttribute(\"href\", `#${reviewTargetPanelId}`);\n        link.setAttribute(\"role\", \"button\");\n      });\n\n      const panelElements = Array.from(section.querySelectorAll(\"[data-hcx-loyalty-panel]\"));\n      const steps = Array.from(section.querySelectorAll(\"[data-hcx-loyalty-tab-step]\"));\n      const panelCount = Math.max(panelElements.length, 1);\n      stage.style.setProperty(\"--hcx-legacy-stage-height\", `${Math.max(panelCount * 112, 520)}vh`);\n      scrollSteps.style.gridTemplateRows = `repeat(${panelCount}, minmax(0, 1fr))`;\n      const ordersPanelIndex = panelElements.findIndex((panel) => panel.id === \"hcx-legacy-panel-orders\");\n      section.querySelectorAll('a[href=\"#legacy-orders\"]').forEach((link) => {\n        if (ordersPanelIndex < 0) return;\n        link.dataset.hcxLoyaltyTab = String(ordersPanelIndex);\n        link.setAttribute(\"href\", \"#hcx-legacy-panel-orders\");\n        link.setAttribute(\"role\", \"button\");\n      });\n      const tabButtons = Array.from(section.querySelectorAll(\"[data-hcx-loyalty-tab]\"));\n      const rocks = Array.from(rockfield.querySelectorAll(\"[data-hcx-legacy-rock]\")).map((rock, index) => ({\n        node: rock,\n        x: [-38, 22, 56, -18, 44, -64, 78, 8, -82, 68, -8, 34, -52, 88, -72, 62][index] || 0,\n        y: [-24, 18, -42, 36, 28, -8, 54, -36, 46, -18, 64, -54, 12, 36, -30, 48][index] || 0,\n        r: [-7, 10, -14, 8, -4, 13, -10, 6, -12, 14, -6, 9, -8, 11, -10, 12][index] || 0,\n      }));\n      let activeIndex = -1;\n      let ticking = false;\n      let programmaticScrollIndex = null;\n      let programmaticScrollTimer = null;\n      let programmaticScrollFrame = null;\n      let hashPanelLockIndex = null;\n      let hashPanelLockScrollY = 0;\n      let wheelLocked = false;\n      let wheelLockTimer = null;\n      let touchStartX = 0;\n      let touchStartY = 0;\n      let touchSnapStarted = false;\n      let mobileHeightFrame = null;\n      let mobileHeightTimer = null;\n\n      const isCompactLegacyViewport = () => window.matchMedia(\"(max-width: 749px)\").matches;\n\n      const syncLegacyMobileMode = () => {\n        const isCompact = isCompactLegacyViewport();\n        section.dataset.hcxLegacyMobileTabs = isCompact ? \"true\" : \"false\";\n        section.classList.toggle(\"hcx-legacy-mobile-tabs-mode\", isCompact);\n        section.classList.toggle(\"hcx-legacy-mobile-pages-mode\", isCompact);\n        html.classList.toggle(\"hcx-legacy-mobile-snap\", isCompact && document.body.classList.contains(\"hcx-legacy-page\"));\n\n        panelElements.forEach((panel) => {\n          const panelIndex = Number(panel.dataset.hcxLoyaltyPanel);\n          if (isCompact) {\n            panel.removeAttribute(\"aria-hidden\");\n          } else {\n            panel.toggleAttribute(\"aria-hidden\", activeIndex >= 0 && panelIndex !== activeIndex);\n          }\n        });\n\n        return isCompact;\n      };\n\n      const clearMobilePanelHeight = () => {\n        [section, stage, sticky].forEach((node) => {\n          node.style.removeProperty(\"height\");\n          node.style.removeProperty(\"min-height\");\n        });\n        delete section.dataset.hcxLegacyMobileHeight;\n      };\n\n      const syncMobilePanelHeight = () => {\n        if (!isCompactLegacyViewport()) {\n          clearMobilePanelHeight();\n          return;\n        }\n\n        const lastPanel = panelElements[panelElements.length - 1];\n        if (!lastPanel) return;\n\n        const stickyStyles = window.getComputedStyle(sticky);\n        const paddingTop = parseFloat(stickyStyles.paddingTop) || 0;\n        const paddingBottom = parseFloat(stickyStyles.paddingBottom) || 0;\n        const panelBottoms = panelElements.map((panel) => {\n          const panelRect = panel.getBoundingClientRect();\n          const detailRect = detail.getBoundingClientRect();\n          return Math.max(0, panelRect.bottom - detailRect.top);\n        });\n        const detailHeight = Math.max(\n          detail.scrollHeight || 0,\n          detail.offsetHeight || 0,\n          detail.getBoundingClientRect().height || 0,\n          ...panelBottoms\n        );\n        const viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n        const nextHeight = Math.ceil(Math.max(viewportHeight, paddingTop + detailHeight + paddingBottom));\n\n        [section, stage, sticky].forEach((node) => {\n          node.style.setProperty(\"height\", `${nextHeight}px`, \"important\");\n          node.style.setProperty(\"min-height\", `${nextHeight}px`, \"important\");\n        });\n        section.dataset.hcxLegacyMobileHeight = String(nextHeight);\n      };\n\n      const queueMobilePanelHeight = () => {\n        if (mobileHeightFrame !== null) {\n          window.cancelAnimationFrame(mobileHeightFrame);\n          mobileHeightFrame = null;\n        }\n        window.clearTimeout(mobileHeightTimer);\n\n        mobileHeightFrame = window.requestAnimationFrame(() => {\n          mobileHeightFrame = null;\n          syncMobilePanelHeight();\n        });\n        mobileHeightTimer = window.setTimeout(syncMobilePanelHeight, 220);\n      };\n\n      const updateRockfield = (progressValue) => {\n        const panelTravel = Math.max(panelElements.length - 1, 1);\n        const tabProgress = clampValue(progressValue, 0, 1) * panelTravel;\n\n        section.style.setProperty(\"--hcx-rock-phase\", tabProgress.toFixed(3));\n        section.style.setProperty(\"--hcx-rock-pane-a-x\", `${(-1.2 * tabProgress).toFixed(2)}rem`);\n        section.style.setProperty(\"--hcx-rock-pane-a-y\", `${(.25 * tabProgress).toFixed(2)}rem`);\n        section.style.setProperty(\"--hcx-rock-pane-b-x\", `${(1 * tabProgress).toFixed(2)}rem`);\n        section.style.setProperty(\"--hcx-rock-pane-b-y\", `${(-.45 * tabProgress).toFixed(2)}rem`);\n        rocks.forEach(({ node, x, y, r }, index) => {\n          const sway = Math.sin((tabProgress * .92 + index * .63) * Math.PI) * 5.5;\n          node.style.setProperty(\"--hcx-rock-x\", `${(tabProgress * x + sway).toFixed(2)}px`);\n          node.style.setProperty(\"--hcx-rock-y\", `${(tabProgress * y + Math.cos(tabProgress + index) * 3.4).toFixed(2)}px`);\n          node.style.setProperty(\"--hcx-rock-r\", `${(tabProgress * r).toFixed(2)}deg`);\n        });\n      };\n\n      const setActive = (index, shouldFocus = false) => {\n        const nextIndex = clampValue(index, 0, panelElements.length - 1);\n        if (nextIndex === activeIndex) {\n          queueMobilePanelHeight();\n          if (shouldFocus) panelElements[nextIndex]?.focus({ preventScroll: true });\n          return;\n        }\n\n        activeIndex = nextIndex;\n        const stackedMobile = isCompactLegacyViewport();\n        updateRockfield(nextIndex / Math.max(panelElements.length - 1, 1));\n\n        tabButtons.forEach((button) => {\n          const isActive = Number(button.dataset.hcxLoyaltyTab) === nextIndex;\n          button.classList.toggle(\"is-active\", isActive);\n          if (button.matches(\".hcx-legacy-phone-tabs button, .hcx-legacy-phone-hotspot, .hcx-legacy-mobile-tabs button\")) {\n            button.setAttribute(\"aria-selected\", isActive ? \"true\" : \"false\");\n          }\n        });\n\n        panelElements.forEach((panel) => {\n          const panelIndex = Number(panel.dataset.hcxLoyaltyPanel);\n          const isActive = panelIndex === nextIndex;\n          const panelDelta = panelIndex - nextIndex;\n\n          panel.style.setProperty(\"--hcx-panel-delta\", String(panelDelta));\n          panel.classList.toggle(\"is-active\", isActive);\n          panel.classList.toggle(\"is-before\", panelDelta < 0);\n          panel.classList.toggle(\"is-after\", panelDelta > 0);\n          if (stackedMobile) {\n            panel.removeAttribute(\"aria-hidden\");\n          } else {\n            panel.toggleAttribute(\"aria-hidden\", !isActive);\n          }\n        });\n\n        const label = tabData[nextIndex]?.[0] || \"Legacy\";\n        progressLabel.textContent = `${String(nextIndex + 1).padStart(2, \"0\")} / ${label.toUpperCase()}`;\n        progressBar.style.transform = `scaleX(${(nextIndex + 1) / panelElements.length})`;\n        section.dataset.hcxLegacyActivePanel = String(nextIndex + 1);\n        section.style.setProperty(\"--hcx-active-panel\", String(nextIndex));\n        queueMobilePanelHeight();\n\n        if (shouldFocus) panelElements[nextIndex]?.focus({ preventScroll: true });\n      };\n\n      const getStageMetrics = () => {\n        const rect = stage.getBoundingClientRect();\n        const viewport = window.innerHeight || document.documentElement.clientHeight || 1;\n        const travel = Math.max(stage.offsetHeight - viewport, viewport * Math.max(panelElements.length - 1, 1));\n\n        return {\n          rect,\n          viewport,\n          travel,\n          top: window.scrollY + rect.top,\n        };\n      };\n\n      const getStageProgress = () => {\n        const { rect, travel } = getStageMetrics();\n\n        return clampValue((0 - rect.top) / travel, 0, .999);\n      };\n\n      const getMobilePanelViewportOffset = () => {\n        const header = document.querySelector(\".section-header\");\n        const headerHeight = header?.getBoundingClientRect?.().height || 0;\n        const tabsRect = mobileTabs.getBoundingClientRect();\n        const tabsBottom = tabsRect.height ? tabsRect.bottom : headerHeight + 64;\n        const viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n\n        return Math.round(Math.min(Math.max(tabsBottom + 12, headerHeight + 24), Math.max(112, viewportHeight * .3)));\n      };\n\n      const getNearestMobilePanelIndex = () => {\n        const offset = getMobilePanelViewportOffset();\n        let nearestIndex = activeIndex >= 0 ? activeIndex : 0;\n        let nearestDistance = Number.POSITIVE_INFINITY;\n\n        panelElements.forEach((panel) => {\n          const panelIndex = Number(panel.dataset.hcxLoyaltyPanel);\n          const rect = panel.getBoundingClientRect();\n          const distance = Math.abs(rect.top - offset);\n          const containsOffset = rect.top <= offset + 24 && rect.bottom >= offset + 24;\n          const weightedDistance = containsOffset ? distance * .35 : distance;\n\n          if (weightedDistance < nearestDistance) {\n            nearestDistance = weightedDistance;\n            nearestIndex = panelIndex;\n          }\n        });\n\n        return clampValue(nearestIndex, 0, panelElements.length - 1);\n      };\n\n      const scrollToPanel = (index, shouldFocus = false, behavior = \"smooth\") => {\n        const nextIndex = clampValue(index, 0, panelElements.length - 1);\n        const { top } = getStageMetrics();\n        const reducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n        if (isCompactLegacyViewport()) {\n          const targetPanel = panelElements[nextIndex];\n\n          window.clearTimeout(programmaticScrollTimer);\n          if (programmaticScrollFrame !== null) {\n            window.cancelAnimationFrame(programmaticScrollFrame);\n            programmaticScrollFrame = null;\n          }\n\n          programmaticScrollIndex = nextIndex;\n          setActive(nextIndex, shouldFocus);\n\n          const scrollMobilePanelIntoView = (scrollBehavior = behavior) => {\n            const panelTop = targetPanel\n              ? window.scrollY + targetPanel.getBoundingClientRect().top - getMobilePanelViewportOffset()\n              : top;\n\n            window.scrollTo({\n              behavior: reducedMotion ? \"auto\" : scrollBehavior,\n              top: Math.max(0, panelTop),\n            });\n          };\n\n          scrollMobilePanelIntoView(behavior);\n          window.requestAnimationFrame(() => scrollMobilePanelIntoView(\"auto\"));\n          window.setTimeout(() => {\n            if (programmaticScrollIndex === nextIndex) scrollMobilePanelIntoView(\"auto\");\n          }, 180);\n\n          programmaticScrollTimer = window.setTimeout(() => {\n            if (programmaticScrollIndex === nextIndex) {\n              programmaticScrollIndex = null;\n              requestSync();\n            }\n          }, reducedMotion ? 80 : 1050);\n          return;\n        }\n\n        window.clearTimeout(programmaticScrollTimer);\n        if (programmaticScrollFrame !== null) {\n          window.cancelAnimationFrame(programmaticScrollFrame);\n          programmaticScrollFrame = null;\n        }\n\n        programmaticScrollIndex = null;\n        setActive(nextIndex, shouldFocus);\n        panelElements[nextIndex]?.scrollTo?.({\n          behavior: reducedMotion ? \"auto\" : behavior,\n          top: 0,\n        });\n      };\n\n      const getHashPanelViewportOffset = () => {\n        if (isCompactLegacyViewport()) return getMobilePanelViewportOffset();\n\n        const header = document.querySelector(\".section-header\");\n        const headerHeight = header?.getBoundingClientRect?.().height || 0;\n\n        return Math.min(Math.max(headerHeight + 18, 24), 116);\n      };\n\n      const scrollHashPanelIntoView = (index, shouldFocus = false, behavior = \"auto\") => {\n        const nextIndex = clampValue(index, 0, panelElements.length - 1);\n        const { travel, top } = getStageMetrics();\n\n        hashPanelLockIndex = nextIndex;\n        if (isCompactLegacyViewport()) {\n          const targetPanel = panelElements[nextIndex];\n          hashPanelLockScrollY = targetPanel\n            ? Math.max(0, window.scrollY + targetPanel.getBoundingClientRect().top - getHashPanelViewportOffset())\n            : top;\n        } else {\n          const targetStep = steps[nextIndex];\n          hashPanelLockScrollY = targetStep\n            ? window.scrollY + targetStep.getBoundingClientRect().top\n            : top + travel * (nextIndex / Math.max(panelElements.length - 1, 1));\n        }\n\n        scrollToPanel(nextIndex, shouldFocus, behavior);\n      };\n\n      const getPanelIndexFromHash = (hash = \"\") => {\n        const hashId = String(hash || \"\").replace(/^#/, \"\");\n        if (!hashId) return -1;\n        if (hashId === \"legacy-orders\") return ordersPanelIndex;\n\n        const directPanelIndex = panelElements.findIndex((panel) => panel.id === hashId);\n        if (directPanelIndex >= 0) return directPanelIndex;\n\n        const anchorTarget = document.getElementById(hashId);\n        const anchorPanel = anchorTarget?.closest?.(\"[data-hcx-loyalty-panel]\");\n        if (!anchorPanel || !section.contains(anchorPanel)) return -1;\n\n        const anchorPanelIndex = Number(anchorPanel.dataset.hcxLoyaltyPanel);\n        return Number.isFinite(anchorPanelIndex) ? anchorPanelIndex : -1;\n      };\n\n      const clearPanelHashLock = () => {\n        if (getPanelIndexFromHash(window.location.hash) < 0) return;\n\n        hashPanelLockIndex = null;\n        if (window.history?.replaceState) {\n          window.history.replaceState(window.history.state, \"\", `${window.location.pathname}${window.location.search}`);\n        }\n      };\n\n      const openHashPanel = (hash = window.location.hash, behavior = \"auto\") => {\n        const requestedHash = String(hash || \"\");\n        const hashPanelIndex = getPanelIndexFromHash(hash);\n        if (hashPanelIndex < 0) return false;\n\n        scrollHashPanelIntoView(hashPanelIndex, true, behavior);\n        [140, 520, 1200, 2200].forEach((delay) => {\n          window.setTimeout(() => {\n            if (requestedHash && window.location.hash !== requestedHash) return;\n            const targetPanel = panelElements[hashPanelIndex];\n            const panelRect = targetPanel?.getBoundingClientRect();\n            const isUsable =\n              targetPanel?.classList.contains(\"is-active\") &&\n              panelRect &&\n              panelRect.bottom > getHashPanelViewportOffset() + 48 &&\n              panelRect.top < (window.innerHeight || document.documentElement.clientHeight || 1) - 48;\n            if (isUsable) return;\n\n            scrollHashPanelIntoView(hashPanelIndex, false, \"auto\");\n          }, delay);\n        });\n        return true;\n      };\n\n      const syncFromScroll = () => {\n        ticking = false;\n        if (isCompactLegacyViewport()) {\n          syncLegacyMobileMode();\n          const nextIndex = getNearestMobilePanelIndex();\n          const progressValue = nextIndex / Math.max(panelElements.length - 1, 1);\n\n          section.dataset.hcxLegacyScroll = progressValue.toFixed(3);\n          updateRockfield(progressValue);\n          if (programmaticScrollIndex === null && nextIndex !== activeIndex) setActive(nextIndex);\n          return;\n        }\n\n        if (hashPanelLockIndex !== null && activeIndex !== hashPanelLockIndex) {\n          setActive(hashPanelLockIndex);\n        }\n      };\n\n      const requestSync = () => {\n        if (ticking) return;\n        ticking = true;\n        window.requestAnimationFrame(syncFromScroll);\n      };\n\n      const getWheelScrollContext = (target, clientX, clientY) => {\n        if (!(target instanceof Element)) return null;\n\n        const activePanelFromTarget = target.closest(\".hcx-legacy-panel.is-active\");\n        const activePanel = activePanelFromTarget || section.querySelector(\".hcx-legacy-panel.is-active\");\n        if (!activePanel || !detail.contains(activePanel)) return null;\n\n        if (!isCompactLegacyViewport()) {\n          const stickyRect = sticky.getBoundingClientRect();\n          const isPointerOverStage =\n            clientX >= stickyRect.left &&\n            clientX <= stickyRect.right &&\n            clientY >= stickyRect.top &&\n            clientY <= stickyRect.bottom;\n          if (!isPointerOverStage) return null;\n\n          const detailRect = detail.getBoundingClientRect();\n          const isPointerOverDetail =\n            clientX >= detailRect.left &&\n            clientX <= detailRect.right &&\n            clientY >= detailRect.top &&\n            clientY <= detailRect.bottom;\n          if (!isPointerOverDetail && !detail.contains(target)) return null;\n\n          let desktopNode = activePanel.contains(target) ? target : activePanel;\n          while (desktopNode && desktopNode !== stage) {\n            const style = window.getComputedStyle(desktopNode);\n            const canScrollY = /(auto|scroll|overlay)/.test(style.overflowY) && desktopNode.scrollHeight > desktopNode.clientHeight + 2;\n\n            if (canScrollY) {\n              return {\n                allowPageAtBoundary: false,\n                capturesWheel: true,\n                scrollNode: desktopNode,\n              };\n            }\n            if (desktopNode === activePanel) break;\n\n            desktopNode = desktopNode.parentElement;\n          }\n\n          return {\n            allowPageAtBoundary: false,\n            capturesWheel: true,\n            scrollNode: activePanel.scrollHeight > activePanel.clientHeight + 2 ? activePanel : null,\n          };\n        }\n\n        const panelRect = activePanel.getBoundingClientRect();\n        const isPointerOverPanel = clientX >= panelRect.left && clientX <= panelRect.right && clientY >= panelRect.top && clientY <= panelRect.bottom;\n        if (!activePanelFromTarget && !isPointerOverPanel) return null;\n\n        let node = activePanel.contains(target) ? target : activePanel;\n\n        while (node && node !== stage) {\n          const style = window.getComputedStyle(node);\n          const canScrollY = /(auto|scroll|overlay)/.test(style.overflowY) && node.scrollHeight > node.clientHeight + 2;\n\n          if (canScrollY) return { capturesWheel: true, scrollNode: node };\n          if (node === activePanel) break;\n\n          node = node.parentElement;\n        }\n\n        return { capturesWheel: true, scrollNode: activePanel.scrollHeight > activePanel.clientHeight + 2 ? activePanel : null };\n      };\n\n      const scrollNestedPanel = (target, delta, clientX, clientY) => {\n        const scrollContext = getWheelScrollContext(target, clientX, clientY);\n        if (!scrollContext) return false;\n        if (!scrollContext.capturesWheel) return false;\n\n        const scrollNode = scrollContext.scrollNode;\n        if (!scrollNode) return !scrollContext.allowPageAtBoundary;\n\n        const maxScrollTop = Math.max(0, scrollNode.scrollHeight - scrollNode.clientHeight);\n        const nextScrollTop = clampValue(scrollNode.scrollTop + delta, 0, maxScrollTop);\n        const canScrollDown = delta > 0 && scrollNode.scrollTop < maxScrollTop - 2;\n        const canScrollUp = delta < 0 && scrollNode.scrollTop > 2;\n\n        if (!canScrollDown && !canScrollUp) return !scrollContext.allowPageAtBoundary;\n\n        scrollNode.scrollTop = nextScrollTop;\n        return true;\n      };\n\n      const stepPanelFromDelta = (delta) => {\n        if (isCompactLegacyViewport()) {\n          const direction = delta > 0 ? 1 : -1;\n          const baseIndex = activeIndex >= 0 ? activeIndex : getNearestMobilePanelIndex();\n          const nextIndex = baseIndex + direction;\n          if (nextIndex < 0 || nextIndex >= panelElements.length) return false;\n        if (wheelLocked) return true;\n\n        window.clearTimeout(wheelLockTimer);\n        wheelLocked = true;\n        clearPanelHashLock();\n        scrollToPanel(nextIndex, false, \"smooth\");\n        wheelLockTimer = window.setTimeout(() => {\n          wheelLocked = false;\n        }, window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? 140 : 980);\n\n          return true;\n        }\n\n        const { rect, viewport } = getStageMetrics();\n        const isPinned = rect.top <= 8 && rect.bottom >= viewport - 8;\n        if (!isPinned) return false;\n\n        const direction = delta > 0 ? 1 : -1;\n        const nextIndex = activeIndex + direction;\n        if (nextIndex < 0 || nextIndex >= panelElements.length) return false;\n        if (wheelLocked) return true;\n\n        window.clearTimeout(wheelLockTimer);\n        wheelLocked = true;\n        clearPanelHashLock();\n        scrollToPanel(nextIndex, false);\n        wheelLockTimer = window.setTimeout(() => {\n          wheelLocked = false;\n        }, window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? 120 : 280);\n\n        return true;\n      };\n\n      section.addEventListener(\"click\", (event) => {\n        const trigger = event.target.closest(\"[data-hcx-loyalty-tab]\");\n        if (!trigger || !section.contains(trigger)) return;\n\n        event.preventDefault();\n        const index = Number(trigger.dataset.hcxLoyaltyTab || 0);\n        const hash = trigger instanceof HTMLAnchorElement ? trigger.hash : \"\";\n\n        if (!hash) clearPanelHashLock();\n        scrollToPanel(index, true);\n\n        if (hash.length > 1) {\n          const anchorTarget = document.getElementById(hash.slice(1));\n          if (!anchorTarget || !section.contains(anchorTarget)) return;\n\n          const scrollActivePanelToAnchor = () => {\n            const activePanel = anchorTarget.closest(\".hcx-legacy-panel\");\n            if (!activePanel) return;\n\n            let offset = 0;\n            let offsetNode = anchorTarget;\n\n            while (offsetNode instanceof HTMLElement && offsetNode !== activePanel) {\n              offset += offsetNode.offsetTop || 0;\n              offsetNode = offsetNode.offsetParent;\n\n              if (offsetNode && offsetNode !== activePanel && !activePanel.contains(offsetNode)) {\n                offsetNode = null;\n                break;\n              }\n            }\n\n            if (offsetNode !== activePanel) {\n              const panelRect = activePanel.getBoundingClientRect();\n              const targetRect = anchorTarget.getBoundingClientRect();\n              offset = targetRect.top - panelRect.top + activePanel.scrollTop;\n            }\n\n            activePanel.scrollTop = Math.max(0, offset - 24);\n          };\n\n          [60, 180, 420].forEach((delay) => {\n            window.setTimeout(scrollActivePanelToAnchor, delay);\n          });\n        }\n      });\n\n      stage.addEventListener(\n        \"wheel\",\n        (event) => {\n          const delta = Math.abs(event.deltaY) >= Math.abs(event.deltaX) ? event.deltaY : event.deltaX;\n          if (Math.abs(delta) < 7) return;\n          if (isCompactLegacyViewport()) return;\n\n          if (!isCompactLegacyViewport() && scrollNestedPanel(event.target, delta, event.clientX, event.clientY)) {\n            event.preventDefault();\n            return;\n          }\n\n          if (!stepPanelFromDelta(delta)) return;\n          event.preventDefault();\n        },\n        { passive: false }\n      );\n\n      stage.addEventListener(\n        \"touchstart\",\n        (event) => {\n          const touch = event.touches?.[0];\n          if (!touch) return;\n\n          touchStartX = touch.clientX;\n          touchStartY = touch.clientY;\n          touchSnapStarted = false;\n        },\n        { passive: true }\n      );\n\n      stage.addEventListener(\n        \"touchmove\",\n        (event) => {\n          const touch = event.touches?.[0];\n          if (!touch) return;\n\n          const deltaX = touch.clientX - touchStartX;\n          const deltaY = touch.clientY - touchStartY;\n\n          if (isCompactLegacyViewport()) {\n            return;\n          }\n\n          if (Math.abs(deltaY) < 34 || Math.abs(deltaY) < Math.abs(deltaX) * 1.2) return;\n\n          if (!stepPanelFromDelta(deltaY > 0 ? -1 : 1)) return;\n          event.preventDefault();\n          touchStartX = touch.clientX;\n          touchStartY = touch.clientY;\n        },\n        { passive: false }\n      );\n\n      stage.addEventListener(\n        \"touchend\",\n        () => {\n          touchSnapStarted = false;\n        },\n        { passive: true }\n      );\n\n      stage.addEventListener(\n        \"touchcancel\",\n        () => {\n          touchSnapStarted = false;\n        },\n        { passive: true }\n      );\n\n      window.addEventListener(\n        \"keydown\",\n        (event) => {\n          if (!isCompactLegacyViewport()) return;\n          if (event.defaultPrevented) return;\n\n          const target = event.target;\n          const isEditable =\n            target instanceof HTMLElement &&\n            (target.isContentEditable || /^(INPUT|SELECT|TEXTAREA|BUTTON)$/i.test(target.tagName));\n          if (isEditable) return;\n\n          const nextKeys = [\"ArrowDown\", \"PageDown\"];\n          const previousKeys = [\"ArrowUp\", \"PageUp\"];\n          const isSpace = event.key === \" \";\n          let delta = 0;\n\n          if (nextKeys.includes(event.key) || (isSpace && !event.shiftKey)) delta = 1;\n          if (previousKeys.includes(event.key) || (isSpace && event.shiftKey)) delta = -1;\n          if (!delta) return;\n\n          if (!stepPanelFromDelta(delta)) return;\n          event.preventDefault();\n        },\n        { passive: false }\n      );\n\n      if (\"ResizeObserver\" in window) {\n        const mobilePanelResizeObserver = new ResizeObserver(() => {\n          if (isCompactLegacyViewport()) queueMobilePanelHeight();\n        });\n        mobilePanelResizeObserver.observe(detail);\n        panelElements.forEach((panel) => mobilePanelResizeObserver.observe(panel));\n      }\n\n      window.addEventListener(\"scroll\", () => {\n        requestSync();\n      }, { passive: true });\n      window.addEventListener(\"resize\", () => {\n        syncLegacyMobileMode();\n        if (isCompactLegacyViewport()) {\n          queueMobilePanelHeight();\n          requestSync();\n          return;\n        }\n\n        clearMobilePanelHeight();\n        requestSync();\n      });\n      window.addEventListener(\"hashchange\", () => {\n        openHashPanel(window.location.hash);\n      });\n      window.addEventListener(\"load\", () => {\n        openHashPanel(window.location.hash, \"auto\");\n        queueMobilePanelHeight();\n      }, { once: true });\n\n      syncLegacyMobileMode();\n      if (!openHashPanel(window.location.hash, \"auto\")) setActive(0);\n      queueMobilePanelHeight();\n      requestSync();\n      section.classList.add(\"is-legacy-interface-ready\");\n    });\n  };\n\n  const initLegacyPopupGuard = () => {\n    if (!document.body.classList.contains(\"hcx-legacy-page\")) return;\n    if (document.body.dataset.hcxLegacyPopupGuard === \"true\") return;\n    document.body.dataset.hcxLegacyPopupGuard = \"true\";\n\n    const releasePopupScrollLock = () => {\n      document.documentElement.classList.remove(\"klaviyo-prevent-body-scrolling\");\n      document.body.classList.remove(\"klaviyo-prevent-body-scrolling\");\n\n      if (document.body.style.overflow === \"hidden\") document.body.style.overflow = \"\";\n      if (document.documentElement.style.overflow === \"hidden\") document.documentElement.style.overflow = \"\";\n      if (document.body.style.position === \"fixed\") {\n        document.body.style.position = \"\";\n        document.body.style.top = \"\";\n        document.body.style.width = \"\";\n      }\n    };\n\n    const removePopupDialogs = () => {\n      releasePopupScrollLock();\n      document.querySelectorAll('[role=\"dialog\"][aria-label=\"POPUP Form\"]').forEach((dialog) => {\n        if (!dialog.classList.contains(\"needsclick\") && !dialog.querySelector(\".klaviyo-form\")) return;\n        dialog.remove();\n      });\n      releasePopupScrollLock();\n    };\n\n    removePopupDialogs();\n    new MutationObserver(removePopupDialogs).observe(document.body, {\n      attributes: true,\n      attributeFilter: [\"class\", \"style\"],\n      childList: true,\n      subtree: true,\n    });\n  };\n\n  const initKlaviyoLegacyPopupImage = () => {\n    const popupImageUrl = window.HCX_KLAVIYO_POPUP_IMAGE_URL;\n    if (html.dataset.hcxKlaviyoPopupImageBound === \"true\") return;\n\n    html.dataset.hcxKlaviyoPopupImageBound = \"true\";\n\n    const popupImagePosition = window.HCX_KLAVIYO_POPUP_IMAGE_POSITION || \"36% center\";\n    const signupDiscountCode = \"HERCXLES15\";\n    const signupDiscountUrl = `https://hercxles.co.uk/discount/${signupDiscountCode}?redirect=/collections/new-arrivals`;\n    const signupOfferPatterns = /Join Legacy|10%\\s*Off|15%\\s*Off|HERCXLES10|LEGACY15/i;\n\n    const normaliseSignupOfferText = (value) =>\n      value\n        .replace(/ADD SMS(?: NOW)? TO UPGRADE YOUR WELCOME OFFER FROM 10% TO 15%\\. EMAIL ONLY\\? CLOSE AND USE HERCXLES10\\./gi,\n          `ADD SMS FOR MEMBER UPDATES. EMAIL ONLY? USE ${signupDiscountCode}.`)\n        .replace(/YOUR 15% SMS UPGRADE IS ACTIVE/gi, \"YOUR 15% WELCOME OFFER IS ACTIVE\")\n        .replace(/NO THANKS\\s*[\\u2014-]\\s*KEEP 10%/gi, \"NO THANKS \\u2014 CONTINUE WITH EMAIL\")\n        .replace(/UPGRADE TO 15% OFF|GET 15% OFF INSTEAD/gi, \"UNLOCK 15% OFF\")\n        .replace(/UNLOCK 10% OFF/gi, \"UNLOCK 15% OFF\")\n        .replace(/10%\\s*OFF/gi, \"15% OFF\")\n        .replace(/HERCXLES10|LEGACY15/gi, signupDiscountCode);\n\n    const normaliseSignupOffer = () => {\n      document.querySelectorAll('[role=\"dialog\"][aria-label=\"POPUP Form\"]').forEach((dialog) => {\n        const form = dialog.querySelector(\"form.klaviyo-form\");\n        if (!form || !signupOfferPatterns.test(form.innerText || form.textContent || \"\")) return;\n\n        const walker = document.createTreeWalker(form, NodeFilter.SHOW_TEXT);\n        let textNode = walker.nextNode();\n        while (textNode) {\n          const nextValue = normaliseSignupOfferText(textNode.nodeValue || \"\");\n          if (nextValue !== textNode.nodeValue) textNode.nodeValue = nextValue;\n          textNode = walker.nextNode();\n        }\n\n        form.querySelectorAll(\"[href]\").forEach((link) => {\n          const href = link.getAttribute(\"href\") || \"\";\n          if (/\\/discount\\/(?:HERCXLES10|LEGACY15)/i.test(href)) link.setAttribute(\"href\", signupDiscountUrl);\n        });\n      });\n    };\n\n    const findLeadImage = (form) =>\n      Array.from(form.querySelectorAll(\"img\"))\n        .filter((image) => {\n          const src = image.currentSrc || image.src || image.getAttribute(\"src\") || \"\";\n          const alt = image.getAttribute(\"alt\") || \"\";\n\n          return !/logo/i.test(alt) && !/flag-icon-css|flags\\/4x3/i.test(src);\n        })\n        .map((image) => {\n          const rect = image.getBoundingClientRect();\n\n          return {\n            image,\n            area: rect.width * rect.height,\n          };\n        })\n        .sort((a, b) => b.area - a.area)[0]?.image || null;\n\n    const swapPopupImage = () => {\n      normaliseSignupOffer();\n\n      document.querySelectorAll('[role=\"dialog\"][aria-label=\"POPUP Form\"]').forEach((dialog) => {\n        const form = dialog.querySelector(\"form.klaviyo-form\");\n        if (!form) return;\n\n        const formText = form.innerText || form.textContent || \"\";\n        if (!/Join Legacy/i.test(formText) || !/15%\\s*Off/i.test(formText)) return;\n\n        if (!popupImageUrl) return;\n\n        const image = findLeadImage(form);\n        if (!image) return;\n\n        if (image.dataset.hcxPopupImageSrc !== popupImageUrl) {\n          image.src = popupImageUrl;\n          image.removeAttribute(\"srcset\");\n          image.dataset.hcxPopupImageSrc = popupImageUrl;\n        }\n\n        image.loading = \"eager\";\n        image.style.width = \"100%\";\n        image.style.height = \"100%\";\n        image.style.objectFit = \"cover\";\n        image.style.objectPosition = popupImagePosition;\n      });\n    };\n\n    document.addEventListener(\n      \"click\",\n      (event) => {\n        const button = event.target instanceof Element ? event.target.closest(\"button, a\") : null;\n        const dialog = button?.closest('[role=\"dialog\"][aria-label=\"POPUP Form\"]');\n        if (!button || !dialog) return;\n\n        const buttonText = (button.innerText || button.textContent || \"\").replace(/\\s+/g, \" \").trim();\n        if (!/^(?:APPLY\\s+(?:LEGACY15|HERCXLES10|HERCXLES15)|NO THANKS\\s*[\\u2014-]\\s*(?:KEEP 10%|CONTINUE WITH EMAIL))$/i.test(buttonText)) return;\n\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        window.location.assign(signupDiscountUrl);\n      },\n      true\n    );\n\n    const queueSwap = () => window.requestAnimationFrame(swapPopupImage);\n\n    queueSwap();\n\n    if (\"MutationObserver\" in window) {\n      new MutationObserver(queueSwap).observe(document.body, {\n        childList: true,\n        subtree: true,\n      });\n    }\n  };\n\n  const initLoyaltyPhoneScenes = () => {\n    document.querySelectorAll(\"[data-hcx-loyalty-phone-stage]\").forEach((stage) => {\n      if (stage.dataset.hcxPhoneBound === \"true\") return;\n\n      const program = stage.closest(\"[data-hcx-loyalty-program]\");\n      if (program?.classList.contains(\"hcx-legacy-interface\") && window.matchMedia(\"(max-width: 749px)\").matches) {\n        stage.dataset.hcxPhoneBound = \"true\";\n        stage.dataset.hcxPhoneDisabledMobile = \"true\";\n        return;\n      }\n\n      const canvas = stage.querySelector(\"[data-hcx-loyalty-phone-canvas]\");\n      if (!(canvas instanceof HTMLCanvasElement)) return;\n\n      stage.dataset.hcxPhoneBound = \"true\";\n\n      loadThreeModule()\n        .then((THREE) => {\n          const pointsText = program?.querySelector(\".hcx-loyalty-profile > strong\")?.textContent.trim() || \"0\";\n          const tierText = program?.querySelector(\".hcx-loyalty-profile__topline em\")?.textContent.trim() || \"Athlete\";\n          const phonePointsPerPound = Number(program?.dataset.hcxPointsPerPound || 1);\n          const customerName = (program?.dataset.hcxCustomerName || \"\").trim() || \"Guest\";\n          const isInteractiveLayout = program?.classList.contains(\"hcx-legacy-interface\") || program?.dataset.hcxLoyaltyInterface === \"true\";\n          let rewardAlertActive = program?.dataset.hcxRewardAlertActive === \"true\";\n          let rewardAlertCount = Math.max(0, Number(program?.dataset.hcxAvailableRewardSteps || 0));\n          let orderNotification = program?.hcxLegacyOrderNotification || null;\n          let requestPhoneRender = () => {};\n          const scene = new THREE.Scene();\n          const camera = new THREE.PerspectiveCamera(34, 1, .1, 100);\n          const renderer = new THREE.WebGLRenderer({\n            alpha: true,\n            antialias: true,\n            canvas,\n            powerPreference: \"high-performance\",\n          });\n          const phone = new THREE.Group();\n          const reducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n          let animationFrame = null;\n          let isVisible = true;\n\n          if (\"outputColorSpace\" in renderer && THREE.SRGBColorSpace) renderer.outputColorSpace = THREE.SRGBColorSpace;\n          if (\"toneMapping\" in renderer && THREE.ACESFilmicToneMapping) {\n            renderer.toneMapping = THREE.ACESFilmicToneMapping;\n            renderer.toneMappingExposure = .9;\n          }\n          renderer.setClearColor(0x000000, 0);\n          camera.position.set(0, 0, 8.3);\n\n          scene.add(new THREE.AmbientLight(0xffffff, .54));\n          const keyLight = new THREE.DirectionalLight(0xffffff, 2.15);\n          keyLight.position.set(2.4, 3.6, 5.4);\n          scene.add(keyLight);\n          const rimLight = new THREE.PointLight(0xd8d8d8, 1.45, 10);\n          rimLight.position.set(-3.2, 1.2, 3.8);\n          scene.add(rimLight);\n\n          const bodyGeometry = new THREE.ExtrudeGeometry(createRoundedPhoneShape(THREE, 2.52, 5.4, .44), {\n            depth: .055,\n            bevelEnabled: true,\n            bevelSegments: 10,\n            bevelSize: .016,\n            bevelThickness: .018,\n            curveSegments: 32,\n          });\n          bodyGeometry.center();\n\n          const bodyMaterial = new THREE.MeshPhysicalMaterial({\n            color: 0x050505,\n            clearcoat: .5,\n            clearcoatRoughness: .42,\n            metalness: .18,\n            roughness: .48,\n          });\n          const body = new THREE.Mesh(bodyGeometry, bodyMaterial);\n          phone.add(body);\n          const bodyEdges = new THREE.LineSegments(\n            new THREE.EdgesGeometry(bodyGeometry, 16),\n            new THREE.LineBasicMaterial({\n              color: 0xd8d8d8,\n              transparent: true,\n              opacity: .012,\n            })\n          );\n          phone.add(bodyEdges);\n\n          const glassMaterial = new THREE.MeshPhysicalMaterial({\n            color: 0x0a0a0a,\n            clearcoat: 1,\n            clearcoatRoughness: .16,\n            metalness: .05,\n            roughness: .22,\n            transparent: true,\n          });\n          const screenMaterial = new THREE.MeshBasicMaterial({\n            color: 0xffffff,\n            map: createLoyaltyPhoneTexture(THREE, pointsText, tierText),\n            side: THREE.FrontSide,\n            transparent: false,\n            opacity: 1,\n            depthTest: true,\n            depthWrite: true,\n            toneMapped: false,\n          });\n\n          const screenGeometry = normalizePhoneGeometryUv(\n            THREE,\n            new THREE.ShapeGeometry(createRoundedPhoneShape(THREE, 2.44, 5.26, .42), 40)\n          );\n          const screen = new THREE.Mesh(screenGeometry, screenMaterial);\n          screen.position.z = .052;\n          phone.add(screen);\n\n          const islandMaterial = new THREE.MeshPhysicalMaterial({\n            color: 0x020202,\n            clearcoat: .62,\n            clearcoatRoughness: .34,\n            metalness: 0,\n            roughness: .42,\n            transparent: false,\n          });\n          const island = new THREE.Mesh(\n            new THREE.ShapeGeometry(createRoundedPhoneShape(THREE, .68, .17, .085), 28),\n            islandMaterial\n          );\n          island.position.set(0, 2.34, .059);\n          phone.add(island);\n\n          const islandLens = new THREE.Mesh(\n            new THREE.CircleGeometry(.027, 24),\n            new THREE.MeshBasicMaterial({ color: 0x151515 })\n          );\n          islandLens.position.set(.2, 2.34, .062);\n          phone.add(islandLens);\n\n          const backMaterial = glassMaterial.clone();\n          backMaterial.map = createLoyaltyPhoneTexture(THREE, pointsText, tierText, true);\n          backMaterial.emissiveMap = backMaterial.map;\n          backMaterial.emissive = new THREE.Color(0xc2c2c2);\n          backMaterial.emissiveIntensity = .23;\n          backMaterial.side = THREE.FrontSide;\n          backMaterial.transparent = false;\n          backMaterial.opacity = 1;\n          backMaterial.depthTest = true;\n          backMaterial.depthWrite = true;\n          const backGeometry = normalizePhoneGeometryUv(\n            THREE,\n            new THREE.ShapeGeometry(createRoundedPhoneShape(THREE, 2.36, 5.12, .46), 36)\n          );\n          const back = new THREE.Mesh(backGeometry, backMaterial);\n          back.position.z = -.052;\n          back.rotation.y = Math.PI;\n          phone.add(back);\n\n          const lensMaterial = new THREE.MeshPhysicalMaterial({\n            color: 0x020202,\n            clearcoat: .9,\n            metalness: .4,\n            roughness: .18,\n          });\n          [[-.68, 1.78], [-.34, 1.42]].forEach(([x, y]) => {\n            const lens = new THREE.Mesh(new THREE.CylinderGeometry(.14, .14, .035, 40), lensMaterial);\n            lens.rotation.x = Math.PI / 2;\n            lens.position.set(x, y, -.105);\n            phone.add(lens);\n          });\n\n          const buttonMaterial = new THREE.MeshPhysicalMaterial({\n            color: 0x151515,\n            metalness: .8,\n            roughness: .24,\n          });\n          const sideButton = new THREE.Mesh(new THREE.BoxGeometry(.035, .58, .08), buttonMaterial);\n          sideButton.position.set(1.275, 1.28, .005);\n          if (!isInteractiveLayout) phone.add(sideButton);\n\n          const systemCards = Array.from(program?.querySelectorAll(\".hcx-loyalty-program__system article\") || []);\n          const tierCards = Array.from(program?.querySelectorAll(\".hcx-loyalty-tier\") || []);\n          const getCardLine = (card, selector, fallback) => card?.querySelector(selector)?.textContent.trim() || fallback;\n          const cleanCurrencyLine = (value) =>\n            String(value || \"\")\n              .replace(/(?:\\u00c3\\u201a)?\\u00c2?\\u00a3/g, \"GBP \")\n              .replace(/\\s+/g, \" \")\n              .trim();\n          const phoneSpendUnitText = `${phonePointsPerPound} ${phonePointsPerPound === 1 ? \"point\" : \"points\"} per GBP 1`;\n          const birthdayText = cleanCurrencyLine(getCardLine(systemCards[2], \"h2\", \"300 birthday points\"));\n          const reviewRewardText = cleanCurrencyLine(getCardLine(systemCards[3], \"h2\", \"200 review points\"));\n          const redeemCards = Array.from(program?.querySelectorAll(\".hcx-loyalty-joy__summary span\") || []);\n          const redeemReadyText = cleanCurrencyLine(getCardLine(redeemCards[1], \"strong\", \"200 pts\"));\n          const redeemRateText = cleanCurrencyLine(getCardLine(redeemCards[2], \"strong\", \"200 points = GBP 10\"));\n          const firstTier = getCardLine(tierCards[0], \"strong\", \"Mortal\");\n          const lastTier = getCardLine(tierCards[tierCards.length - 1], \"strong\", \"Zeus\");\n          const firstThreshold = cleanCurrencyLine(getCardLine(tierCards[1], \"em\", \"GBP 100 spend\"));\n          const finalThreshold = cleanCurrencyLine(getCardLine(tierCards[tierCards.length - 1], \"em\", \"GBP 1500 lifetime spend\"));\n          const trackingHub = program?.querySelector(\"[data-hcx-tracking-hub]\");\n          const phoneTabLabels = Array.from(program?.querySelectorAll(\".hcx-legacy-phone-hotspot\") || [])\n            .map((button) => (button.getAttribute(\"aria-label\") || \"\").replace(/^Show\\s+/i, \"\").trim())\n            .filter(Boolean);\n          const phonePageLabels = phoneTabLabels.length ? phoneTabLabels : [\n            \"Welcome\",\n            \"Points\",\n            ...(program?.querySelector(\".hcx-loyalty-joy\") ? [\"Redeem\"] : []),\n            \"Tiers\",\n            ...(trackingHub ? [\"Orders\"] : []),\n          ];\n          const trackingTotal = trackingHub?.dataset.hcxTrackingTotal || \"0\";\n          const trackingActive = trackingHub?.dataset.hcxTrackingActive || \"0\";\n          const trackingDelivered = trackingHub?.dataset.hcxTrackingDelivered || \"0\";\n          const phoneScreenSpecs = [];\n          const findPhonePageIndex = (label, fallbackIndex) => {\n            const pageIndex = phonePageLabels.findIndex((page) => page.toLowerCase() === label.toLowerCase());\n            return pageIndex >= 0 ? pageIndex : fallbackIndex;\n          };\n          const hasRedeemPage = phonePageLabels.some((page) => page.toLowerCase() === \"redeem\");\n          const getPhoneEyebrow = (label, fallbackIndex) =>\n            `${String(findPhonePageIndex(label, fallbackIndex) + 1).padStart(2, \"0\")} / ${label.toUpperCase()}`;\n          const cleanPageSummaries = phonePageLabels.map((page) => {\n            const normalizedPage = page.toLowerCase();\n            if (normalizedPage === \"welcome\") return `${pointsText || \"0\"} pts / ${tierText || \"Mortal\"}`;\n            if (normalizedPage === \"points\") return \"Earn and redeem\";\n            if (normalizedPage === \"redeem\") return \"Coupons and codes\";\n            if (normalizedPage === \"tiers\") return \"Tier progress\";\n            if (normalizedPage === \"tracking\" || normalizedPage === \"orders\") return \"Orders and returns\";\n            return `${page} panel`;\n          });\n          const cleanPhoneScreenSpecs = [\n            {\n              body: \"Balance, tier and quick actions.\",\n              eyebrow: getPhoneEyebrow(\"Welcome\", 0),\n              footer: \"TAP OR SCROLL\",\n              hero: `${pointsText || \"0\"} points`,\n              index: findPhonePageIndex(\"Welcome\", 0),\n              pageSummaries: cleanPageSummaries,\n              pages: phonePageLabels,\n              rows: [\n                [\"Tier\", tierText || \"Mortal\"],\n                [\"Next\", \"Lifetime spend sets tiers\"],\n                [\"Birthday\", birthdayText],\n              ],\n              title: \"Legacy\",\n            },\n            {\n              body: \"Paid orders become points.\",\n              eyebrow: getPhoneEyebrow(\"Points\", 1),\n              footer: \"EARN THEN REDEEM\",\n              hero: phoneSpendUnitText,\n              index: findPhonePageIndex(\"Points\", 1),\n              pageSummaries: cleanPageSummaries,\n              pages: phonePageLabels,\n              rows: [\n                [\"Earn\", cleanCurrencyLine(getCardLine(systemCards[0], \"h2\", phoneSpendUnitText))],\n                [\"Redeem\", cleanCurrencyLine(getCardLine(systemCards[1], \"h2\", \"200 points = GBP 10\"))],\n                [\"Bonus\", reviewRewardText],\n              ],\n              title: \"Points\",\n            },\n            ...(hasRedeemPage ? [{\n              body: \"Open coupons and claim available rewards.\",\n              eyebrow: getPhoneEyebrow(\"Redeem\", 2),\n              footer: \"COUPONS\",\n              hero: \"Redeem points\",\n              index: findPhonePageIndex(\"Redeem\", 2),\n              pageSummaries: cleanPageSummaries,\n              pages: phonePageLabels,\n              rows: [\n                [\"Balance\", `${pointsText || \"0\"} pts`],\n                [\"Ready\", redeemReadyText],\n                [\"Rate\", redeemRateText],\n              ],\n              title: \"Redeem\",\n            }] : []),\n            {\n              body: \"Lifetime spend sets your Legacy tier.\",\n              eyebrow: getPhoneEyebrow(\"Tiers\", hasRedeemPage ? 3 : 2),\n              footer: \"FOLLOW THE PATH\",\n              hero: `${firstTier} to ${lastTier}`,\n              index: findPhonePageIndex(\"Tiers\", hasRedeemPage ? 3 : 2),\n              pageSummaries: cleanPageSummaries,\n              pages: phonePageLabels,\n              rows: [\n                [\"Start\", \"Join Legacy\"],\n                [\"First\", firstThreshold],\n                [\"Final\", finalThreshold],\n              ],\n              title: \"Tiers\",\n            },\n          ];\n          if (trackingHub) {\n            cleanPhoneScreenSpecs.push({\n              body: \"Track orders and start returns.\",\n              eyebrow: getPhoneEyebrow(\"Orders\", hasRedeemPage ? 4 : 3),\n              footer: \"ORDER HUB\",\n              hero: \"Orders\",\n              index: findPhonePageIndex(\"Orders\", hasRedeemPage ? 4 : 3),\n              pageSummaries: cleanPageSummaries,\n              pages: phonePageLabels,\n              rows: [\n                [\"Orders\", trackingTotal],\n                [\"On way\", trackingActive],\n                [\"Delivered\", trackingDelivered],\n                [\"Returns\", \"Available\"],\n              ],\n              title: \"Orders\",\n            });\n          }\n          phoneScreenSpecs.splice(0, phoneScreenSpecs.length, ...cleanPhoneScreenSpecs);\n          const legacyPanelSpecs = isInteractiveLayout ? [] : [\n            {\n              body: \"Balance, tier and birthday reward stay connected.\",\n              eyebrow: \"PART 01 / WELCOME\",\n              footer: \"LEGACY PROFILE\",\n              rows: [\n                [\"BALANCE\", `${pointsText || \"0\"} PTS`],\n                [\"TIER\", tierText || \"Mortal\"],\n                [\"BIRTHDAY\", birthdayText.toUpperCase()],\n              ],\n              title: \"WELCOME\",\n            },\n            {\n              body: \"Paid orders become points, then points become vouchers.\",\n              eyebrow: \"PART 02 / POINTS\",\n              footer: \"EARN THEN REDEEM\",\n              rows: [\n                [\"EARN\", cleanCurrencyLine(getCardLine(systemCards[0], \"h2\", phoneSpendUnitText)).toUpperCase()],\n                [\"REDEEM\", cleanCurrencyLine(getCardLine(systemCards[1], \"h2\", \"200 points = GBP 10\")).toUpperCase()],\n                [\"BONUS\", reviewRewardText.toUpperCase()],\n              ],\n              title: \"POINTS\",\n            },\n            ...(hasRedeemPage ? [{\n              body: \"Available points can become checkout coupons.\",\n              eyebrow: \"PART 03 / REDEEM\",\n              footer: \"COUPONS\",\n              rows: [\n                [\"BALANCE\", `${pointsText || \"0\"} PTS`],\n                [\"READY\", redeemReadyText.toUpperCase()],\n                [\"RATE\", redeemRateText.toUpperCase()],\n              ],\n              title: \"REDEEM\",\n            }] : []),\n            {\n              body: \"The tier map shows the next useful unlock.\",\n              eyebrow: hasRedeemPage ? \"PART 04 / TIERS\" : \"PART 03 / TIERS\",\n              footer: \"FOLLOW THE PATH\",\n              rows: [\n                [\"START\", firstTier.toUpperCase()],\n                [\"FIRST UNLOCK\", firstThreshold.toUpperCase()],\n                [\"FINAL\", `${lastTier.toUpperCase()} / ${finalThreshold.toUpperCase()}`],\n              ],\n              title: \"TIERS\",\n            },\n            ...(trackingHub ? [{\n              body: \"Orders and returns live together.\",\n              eyebrow: hasRedeemPage ? \"PART 05 / ORDERS\" : \"PART 04 / ORDERS\",\n              footer: \"ORDER HUB\",\n              rows: [\n                [\"ORDERS\", trackingTotal],\n                [\"ON WAY\", trackingActive],\n                [\"DELIVERED\", trackingDelivered],\n              ],\n              title: \"ORDERS\",\n            }] : []),\n          ];\n          const panelGeometry = new THREE.ShapeGeometry(createRoundedPhoneShape(THREE, 1.94, 2.82, .22), 32);\n          const legacyPanels = legacyPanelSpecs.map((panel, index) => {\n            const panelGroup = new THREE.Group();\n            const panelTexture = createLoyaltyPhonePanelTexture(THREE, panel);\n            const panelMaterial = new THREE.MeshPhysicalMaterial({\n              color: 0x101010,\n              clearcoat: .82,\n              clearcoatRoughness: .13,\n              emissive: new THREE.Color(0xc2c2c2),\n              emissiveIntensity: .42,\n              emissiveMap: panelTexture,\n              map: panelTexture,\n              metalness: .16,\n              opacity: 0,\n              roughness: .2,\n              side: THREE.DoubleSide,\n              transparent: true,\n            });\n            const rewardsPanel = new THREE.Mesh(panelGeometry, panelMaterial);\n            rewardsPanel.position.z = .18;\n            panelGroup.add(rewardsPanel);\n\n            const panelEdgesMaterial = new THREE.LineBasicMaterial({\n              color: 0xd8d8d8,\n              transparent: true,\n              opacity: 0,\n            });\n            const panelEdges = new THREE.LineSegments(new THREE.EdgesGeometry(panelGeometry, 16), panelEdgesMaterial);\n            panelEdges.position.z = .19;\n            panelGroup.add(panelEdges);\n            panelGroup.userData = {\n              edgeMaterial: panelEdgesMaterial,\n              index,\n              material: panelMaterial,\n            };\n            scene.add(panelGroup);\n\n            return panelGroup;\n          });\n          let phoneTimeText = getLoyaltyPhoneTimeText();\n          const buildPhoneScreenSpec = (screenSpec, extra = {}) => ({\n            ...screenSpec,\n            accountLabel: customerName,\n            orderNotification,\n            rewardAlert: rewardAlertActive,\n            rewardAlertCount,\n            rewardAlertIndex: Math.max(0, phonePageLabels.indexOf(\"Redeem\")),\n            ...extra,\n          });\n          const buildPhoneScreenTextures = () =>\n            isInteractiveLayout\n              ? phoneScreenSpecs.map((screenSpec) =>\n                  createLoyaltyPhoneTexture(\n                    THREE,\n                    pointsText,\n                    tierText,\n                    false,\n                    buildPhoneScreenSpec(screenSpec),\n                    phoneTimeText\n                  )\n                )\n              : [];\n          let phoneScreenTextures = buildPhoneScreenTextures();\n          let activePhoneScreenIndex = -1;\n          let hoveredPhoneScreenIndex = -1;\n          let hoverPhoneScreenTexture = null;\n\n          const disposeHoverPhoneScreenTexture = () => {\n            hoverPhoneScreenTexture?.dispose?.();\n            hoverPhoneScreenTexture = null;\n          };\n\n          const applyPhoneScreenTexture = () => {\n            if (!phoneScreenTextures.length) return;\n\n            const currentIndex = activePhoneScreenIndex >= 0 ? activePhoneScreenIndex : 0;\n            const hoverIndex = hoveredPhoneScreenIndex >= 0 && hoveredPhoneScreenIndex !== currentIndex\n              ? hoveredPhoneScreenIndex\n              : -1;\n\n            if (hoverIndex >= 0) {\n              disposeHoverPhoneScreenTexture();\n              hoverPhoneScreenTexture = createLoyaltyPhoneTexture(\n                THREE,\n                pointsText,\n                tierText,\n                false,\n                buildPhoneScreenSpec(phoneScreenSpecs[currentIndex], { hoverIndex }),\n                phoneTimeText\n              );\n              screenMaterial.map = hoverPhoneScreenTexture;\n            } else {\n              disposeHoverPhoneScreenTexture();\n              screenMaterial.map = phoneScreenTextures[currentIndex];\n            }\n\n            screenMaterial.needsUpdate = true;\n          };\n\n          const setPhoneScreen = (index, force = false) => {\n            if (!phoneScreenTextures.length) return;\n\n            const nextIndex = clampValue(index, 0, phoneScreenTextures.length - 1);\n            if (!force && nextIndex === activePhoneScreenIndex) return;\n\n            activePhoneScreenIndex = nextIndex;\n            applyPhoneScreenTexture();\n            stage.dataset.hcxPhoneScreen = phoneScreenSpecs[nextIndex]?.title || phonePageLabels[nextIndex] || \"Legacy\";\n            stage.dataset.hcxPhoneTime = phoneTimeText;\n          };\n\n          const setPhoneHover = (index) => {\n            if (!phoneScreenTextures.length) return;\n\n            const nextIndex = Number.isFinite(Number(index))\n              ? clampValue(Number(index), 0, phoneScreenTextures.length - 1)\n              : -1;\n\n            if (nextIndex === hoveredPhoneScreenIndex) return;\n\n            hoveredPhoneScreenIndex = nextIndex;\n            applyPhoneScreenTexture();\n          };\n\n          const refreshPhoneTime = () => {\n            if (!phoneScreenTextures.length) return;\n\n            const nextPhoneTimeText = getLoyaltyPhoneTimeText();\n            if (nextPhoneTimeText === phoneTimeText) return;\n\n            const previousTextures = phoneScreenTextures;\n            const currentIndex = activePhoneScreenIndex >= 0 ? activePhoneScreenIndex : 0;\n            phoneTimeText = nextPhoneTimeText;\n            phoneScreenTextures = buildPhoneScreenTextures();\n            activePhoneScreenIndex = -1;\n            setPhoneScreen(currentIndex, true);\n            previousTextures.forEach((texture) => texture.dispose?.());\n          };\n\n          const refreshRewardAlert = () => {\n            if (!phoneScreenTextures.length || !program) return;\n\n            const nextActive = program.dataset.hcxRewardAlertActive === \"true\";\n            const nextCount = Math.max(0, Number(program.dataset.hcxAvailableRewardSteps || 0));\n            if (nextActive === rewardAlertActive && nextCount === rewardAlertCount) return;\n\n            const previousTextures = phoneScreenTextures;\n            const currentIndex = activePhoneScreenIndex >= 0 ? activePhoneScreenIndex : 0;\n            rewardAlertActive = nextActive;\n            rewardAlertCount = nextCount;\n            phoneScreenTextures = buildPhoneScreenTextures();\n            activePhoneScreenIndex = -1;\n            setPhoneScreen(currentIndex, true);\n            previousTextures.forEach((texture) => texture.dispose?.());\n          };\n\n          const refreshOrderNotification = (detail = null) => {\n            const nextNotification = detail?.item\n              ? {\n                  item: String(detail.item).slice(0, 80),\n                  country: String(detail.country || detail.location || \"Online customer\").slice(0, 40),\n                  timeAgo: String(detail.timeAgo || \"now\").slice(0, 30),\n                }\n              : null;\n            const same =\n              (!nextNotification && !orderNotification) ||\n              (nextNotification &&\n                orderNotification &&\n                nextNotification.item === orderNotification.item &&\n                nextNotification.country === orderNotification.country &&\n                nextNotification.timeAgo === orderNotification.timeAgo);\n\n            if (same || !phoneScreenTextures.length) return;\n\n            const previousTextures = phoneScreenTextures;\n            const currentIndex = activePhoneScreenIndex >= 0 ? activePhoneScreenIndex : 0;\n            orderNotification = nextNotification;\n            phoneScreenTextures = buildPhoneScreenTextures();\n            activePhoneScreenIndex = -1;\n            setPhoneScreen(currentIndex, true);\n            previousTextures.forEach((texture) => texture.dispose?.());\n            requestPhoneRender();\n          };\n\n          program?.addEventListener(\"hcx:reward-alert-changed\", refreshRewardAlert);\n          program?.addEventListener(\"hcx:legacy-order-notification\", (event) => {\n            refreshOrderNotification(event.detail);\n          });\n          if (program?.hcxLegacyOrderNotification) refreshOrderNotification(program.hcxLegacyOrderNotification);\n          program?.addEventListener(\"pointerover\", (event) => {\n            const trigger = event.target instanceof Element ? event.target.closest(\"[data-hcx-phone-hotspot]\") : null;\n            if (!trigger || !program.contains(trigger)) return;\n\n            setPhoneHover(trigger.dataset.hcxLoyaltyTab);\n          });\n          program?.addEventListener(\"pointerout\", (event) => {\n            const trigger = event.target instanceof Element ? event.target.closest(\"[data-hcx-phone-hotspot]\") : null;\n            if (!trigger || !program.contains(trigger)) return;\n            if (event.relatedTarget instanceof Element && trigger.contains(event.relatedTarget)) return;\n\n            setPhoneHover(-1);\n          });\n\n          setPhoneScreen(0, true);\n\n          phone.rotation.x = -.055;\n          phone.rotation.y = -.075;\n          phone.rotation.z = -.028;\n          if (isInteractiveLayout) phone.scale.setScalar(.88);\n          scene.add(phone);\n\n          const resize = () => {\n            const rect = stage.getBoundingClientRect();\n            if (!rect.width || !rect.height) return;\n\n            renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 1.7));\n            renderer.setSize(rect.width, rect.height, false);\n            camera.aspect = rect.width / rect.height;\n            camera.updateProjectionMatrix();\n          };\n\n          const getScrollProgress = () => {\n            const target = isInteractiveLayout ? program?.querySelector(\"[data-hcx-legacy-stage]\") || program || stage : program || stage;\n            const rect = target.getBoundingClientRect();\n            const viewport = window.innerHeight || document.documentElement.clientHeight || 1;\n            const travel = isInteractiveLayout\n              ? Math.max(target.scrollHeight - viewport, viewport * 4)\n              : Math.max(rect.height - viewport * .32, viewport * 1.45);\n\n            return clampValue(((isInteractiveLayout ? 0 : viewport * .18) - rect.top) / travel, 0, 1);\n          };\n\n          const updatePhoneState = (time = 0) => {\n            const rawProgress = getScrollProgress();\n            const progress = smoothStep(rawProgress);\n            const drift = reducedMotion ? 0 : Math.sin(time * .00052);\n            const breathe = reducedMotion ? 0 : Math.sin(time * .00082);\n            const spin = isInteractiveLayout\n              ? Math.sin(progress * Math.PI * 1.08) * .032 + progress * .026\n              : progress * Math.PI * 2.35;\n            const panelCount = Number(program?.dataset.hcxPanelCount || legacyPanels.length || 1);\n            const syncedPanel = Number(program?.dataset.hcxLegacyActivePanel || 0) - 1;\n            const activePanel = isInteractiveLayout && Number.isFinite(syncedPanel) && syncedPanel >= 0\n              ? clampValue(syncedPanel, 0, panelCount - 1)\n              : clampValue(Math.floor(rawProgress * panelCount), 0, panelCount - 1);\n\n            setPhoneScreen(activePanel);\n            phone.position.set(-.39 + Math.sin(progress * Math.PI * 2) * (isInteractiveLayout ? .045 : .1), .02 + breathe * .024, 0);\n            phone.rotation.x = (isInteractiveLayout ? -.064 : -.18) + Math.sin(progress * Math.PI * 1.45) * (isInteractiveLayout ? .022 : .19) + breathe * .01;\n            phone.rotation.y = (isInteractiveLayout ? -.078 : -.76) + spin + drift * (isInteractiveLayout ? .006 : .034);\n            phone.rotation.z = (isInteractiveLayout ? -.03 : -.1) + Math.sin(progress * Math.PI) * (isInteractiveLayout ? .016 : .14);\n\n            legacyPanels.forEach((panelGroup, index) => {\n              const start = .08 + index * .15;\n              const open = smoothStep(clampValue((rawProgress - start) / .16, 0, 1));\n              const close = smoothStep(clampValue((rawProgress - start - .38) / .18, 0, 1));\n              const heldOpacity = 1 - close * .7;\n              const isActive = index === activePanel;\n              const focusBoost = isActive ? 1 : .76;\n              const targetX = .94 + (index % 2) * .42 + Math.floor(index / 2) * .08;\n              const targetY = 1.34 - index * .64;\n              const targetZ = .24 + index * .065;\n              const slideArc = Math.sin(open * Math.PI) * .18;\n              const material = panelGroup.userData.material;\n              const edgeMaterial = panelGroup.userData.edgeMaterial;\n\n              panelGroup.position.set(\n                phone.position.x + .34 + targetX * open,\n                -.12 + (targetY + slideArc) * open,\n                targetZ * open\n              );\n              panelGroup.rotation.x = -.06 + open * .05;\n              panelGroup.rotation.y = -1.62 + open * (1.48 + index * .035) + progress * .08;\n              panelGroup.rotation.z = .08 - open * (.06 + index * .01);\n              panelGroup.scale.setScalar(.18 + open * (.72 - index * .025));\n              material.opacity = open * heldOpacity * focusBoost * .95;\n              edgeMaterial.opacity = open * heldOpacity * (isActive ? .58 : .38);\n            });\n\n            stage.dataset.hcxPhoneScroll = rawProgress.toFixed(3);\n            stage.dataset.hcxPhoneActivePanel = String(activePanel + 1);\n          };\n\n          const renderOnce = (time = 0) => {\n            if (!isVisible) return;\n\n            updatePhoneState(time);\n            renderer.render(scene, camera);\n          };\n\n          const animate = (time = 0) => {\n            animationFrame = null;\n            renderOnce(time);\n            if (isVisible && !reducedMotion) animationFrame = window.requestAnimationFrame(animate);\n          };\n\n          const start = () => {\n            if (animationFrame || reducedMotion) return;\n            animationFrame = window.requestAnimationFrame(animate);\n          };\n\n          const stop = () => {\n            if (!animationFrame) return;\n            window.cancelAnimationFrame(animationFrame);\n            animationFrame = null;\n          };\n\n          const requestRender = () => {\n            if (!isVisible || animationFrame) return;\n            animationFrame = window.requestAnimationFrame(animate);\n          };\n          requestPhoneRender = requestRender;\n\n          if (isInteractiveLayout) {\n            window.setInterval(() => {\n              refreshPhoneTime();\n              requestRender();\n            }, 30000);\n          }\n\n          const resizeObserver = new ResizeObserver(() => {\n            resize();\n            requestRender();\n          });\n          resizeObserver.observe(stage);\n\n          if (\"IntersectionObserver\" in window) {\n            const observer = new IntersectionObserver((entries) => {\n              isVisible = entries[0]?.isIntersecting ?? true;\n              if (isVisible) {\n                renderOnce();\n                start();\n              } else {\n                stop();\n              }\n            });\n            observer.observe(stage);\n          }\n\n          window.addEventListener(\"resize\", () => {\n            resize();\n            requestRender();\n          });\n          window.addEventListener(\"scroll\", requestRender, { passive: true });\n          resize();\n          renderOnce();\n          start();\n          stage.classList.add(\"is-three-ready\");\n        })\n        .catch(() => {\n          stage.classList.add(\"is-three-fallback\");\n        });\n    });\n  };\n\n  const initLegacyOrderNotifications = () => {\n    document.querySelectorAll(\"[data-hcx-loyalty-program]\").forEach((program) => {\n      if (program.dataset.hcxOrderNotificationsBound === \"true\") return;\n      if (program.dataset.hcxOrderNotifications === \"false\") return;\n\n      const stage = program.querySelector(\"[data-hcx-loyalty-phone-stage]\");\n      if (!stage) return;\n\n      program.dataset.hcxOrderNotificationsBound = \"true\";\n      const liveRegion = program.querySelector(\"[data-hcx-order-notification-live]\");\n      const notificationLink = program.querySelector(\"[data-hcx-order-notification-link]\");\n      const feedUrl = (program.dataset.hcxOrderNotificationsUrl || \"\").trim();\n      const isPreview = (() => {\n        try {\n          return new URLSearchParams(window.location.search).has(\"codex_legacy_edit\") || window.Shopify?.designMode === true;\n        } catch (error) {\n          return false;\n        }\n      })();\n      const forcePreviewNotification = (() => {\n        try {\n          return new URLSearchParams(window.location.search).has(\"codex_show_order_popup\");\n        } catch (error) {\n          return false;\n        }\n      })();\n      const now = Date.now();\n      const previewOrders = [\n        { id: \"preview-1\", item: \"HERCXLES Legacy Hoodie\", country: \"United Kingdom\", orderedAt: new Date(now - 6 * 60000).toISOString(), url: \"/products/awakening-oversized-t-shirt-1\" },\n        { id: \"preview-2\", item: \"Oversized Training Tee\", country: \"Germany\", orderedAt: new Date(now - 19 * 60000).toISOString(), url: \"/products/awakening-oversized-t-shirt-1\" },\n        { id: \"preview-3\", item: \"HERCXLES Shorts\", country: \"France\", orderedAt: new Date(now - 42 * 60000).toISOString(), url: \"/products/awakening-oversized-t-shirt-1\" },\n        { id: \"preview-4\", item: \"Legacy Zip Hoodie\", country: \"Netherlands\", orderedAt: new Date(now - 76 * 60000).toISOString(), url: \"/products/awakening-oversized-t-shirt-1\" },\n      ];\n      let orders = [];\n      let queue = [];\n      let currentIndex = -1;\n      let showing = false;\n      let nextTimer = null;\n      let clearTimer = null;\n      let pollTimer = null;\n      let popupObserver = null;\n      const capturedPopupFingerprints = [];\n\n      const isToday = (date) => {\n        const orderDate = new Date(date);\n        const today = new Date();\n\n        return (\n          orderDate.getFullYear() === today.getFullYear() &&\n          orderDate.getMonth() === today.getMonth() &&\n          orderDate.getDate() === today.getDate()\n        );\n      };\n\n      const formatTimeAgo = (date) => {\n        const diff = Math.max(0, Date.now() - new Date(date).getTime());\n        const minutes = Math.floor(diff / 60000);\n\n        if (minutes < 1) return \"just now\";\n        if (minutes < 60) return `${minutes} min ago`;\n\n        const hours = Math.floor(minutes / 60);\n        return `${hours} hr${hours === 1 ? \"\" : \"s\"} ago`;\n      };\n\n      const cleanText = (value, fallback = \"\") =>\n        String(value || fallback)\n          .replace(/\\s+/g, \" \")\n          .trim();\n\n      const normalizeProductUrl = (value) => {\n        const urlText = cleanText(value);\n        if (!urlText || urlText === \"#\") return \"\";\n\n        try {\n          const url = new URL(urlText, window.location.origin);\n          if (url.origin !== window.location.origin || !url.pathname.includes(\"/products/\")) return \"\";\n\n          return `${url.pathname}${url.search}${url.hash}`;\n        } catch (error) {\n          return \"\";\n        }\n      };\n\n      const productPathFromTitle = (value) => {\n        const handle = cleanText(value)\n          .toLowerCase()\n          .replace(/&/g, \" and \")\n          .replace(/[^a-z0-9]+/g, \"-\")\n          .replace(/^-+|-+$/g, \"\");\n\n        return handle ? `/products/${handle}` : \"\";\n      };\n\n      const getOrderUrl = (order) => {\n        const firstItem = Array.isArray(order.items) ? order.items[0] : Array.isArray(order.line_items) ? order.line_items[0] : null;\n        const handle = cleanText(order.handle || order.product_handle || firstItem?.handle || firstItem?.product_handle);\n        const directUrl = normalizeProductUrl(\n          order.url ||\n          order.product_url ||\n          order.productUrl ||\n          order.product_href ||\n          order.href ||\n          firstItem?.url ||\n          firstItem?.product_url ||\n          firstItem?.productUrl ||\n          firstItem?.href\n        );\n\n        return directUrl || (handle ? `/products/${handle}` : \"\");\n      };\n\n      const getPopupProductUrl = (popup) => {\n        const link = popup?.closest?.(\"a[href]\") || popup?.querySelector?.(\"a[href]\");\n\n        return normalizeProductUrl(link?.getAttribute(\"href\"));\n      };\n\n      const normalizePopupText = (value) =>\n        cleanText(value)\n          .replace(/[\\u2022\\u00b7|]/g, \" \")\n          .replace(/\\s*\\bby\\s+CareCart\\b\\.?/gi, \" \")\n          .replace(/\\b(?:close|dismiss)\\b/gi, \" \")\n          .replace(/\\b(?:verified purchase|verified buyer|verified customer|verified order|order verified|verification)\\b/gi, \" \")\n          .replace(/\\s+/g, \" \")\n          .trim();\n\n      const rememberCapturedPopup = (text) => {\n        const fingerprint = normalizePopupText(text).toLowerCase().slice(0, 180);\n        if (!fingerprint || capturedPopupFingerprints.includes(fingerprint)) return false;\n\n        capturedPopupFingerprints.push(fingerprint);\n        if (capturedPopupFingerprints.length > 18) capturedPopupFingerprints.shift();\n\n        return true;\n      };\n\n      const getElementSignature = (element) => {\n        const className = typeof element.className === \"string\" ? element.className : \"\";\n\n        return `${element.id || \"\"} ${className} ${element.getAttribute(\"role\") || \"\"} ${element.getAttribute(\"aria-live\") || \"\"}`;\n      };\n\n      const isFloatingPopupElement = (element) => {\n        try {\n          const style = window.getComputedStyle(element);\n          const zIndex = Number.parseInt(style.zIndex, 10);\n\n          return [\"fixed\", \"sticky\", \"absolute\"].includes(style.position) && (style.position === \"fixed\" || zIndex > 10);\n        } catch (error) {\n          return false;\n        }\n      };\n\n      const looksLikeExternalSalesPopup = (element) => {\n        if (!(element instanceof HTMLElement) || program.contains(element)) return false;\n\n        const text = normalizePopupText(element.textContent);\n        if (text.length < 12 || text.length > 320) return false;\n        if (!/\\b(?:purchased|bought|ordered|order placed|placed an order|recently|just now|\\d+\\s*(?:sec|second|min|minute|hr|hour|day)s?\\s*ago)\\b/i.test(text)) {\n          return false;\n        }\n\n        const hasPopupSignature = /\\b(?:fordeer|sales?|popup|toast|notification|notify|social.?proof|recent|order|purchase)\\b/i.test(getElementSignature(element));\n\n        return hasPopupSignature || isFloatingPopupElement(element);\n      };\n\n      const parseExternalSalesPopup = (popup, text) => {\n        const normalized = normalizePopupText(text);\n        const timeMatch = normalized.match(/\\b(?:just now|now|\\d+\\s*(?:sec(?:ond)?s?|s|min(?:ute)?s?|m|hr|hour|hours|h|day|days|d)\\s*(?:ago)?)\\b/i);\n        const timeAgo = cleanText(timeMatch?.[0] || \"now\")\n          .replace(/\\bseconds?\\b/i, \"sec\")\n          .replace(/\\bminutes?\\b/i, \"min\")\n          .replace(/\\bhours?\\b/i, \"hr\")\n          .replace(/\\bdays?\\b/i, \"day\");\n        let working = normalized;\n        if (timeMatch) working = working.replace(timeMatch[0], \" \");\n        working = working\n          .replace(/\\b(?:someone|a customer|customer|shopper)\\b/gi, \" \")\n          .replace(/\\b(?:just|recently|verified)\\b/gi, \" \");\n\n        const locationMatch =\n          working.match(/\\b(?:from|in)\\s+([A-Z][A-Za-z'.-]*(?:\\s+[A-Z][A-Za-z'.-]*){0,3})(?=\\s+(?:purchased|bought|ordered|placed|an?\\s+order)|$)/i) ||\n          working.match(/\\b(?:from|in)\\s+([A-Z][A-Za-z'.-]*(?:\\s+[A-Z][A-Za-z'.-]*){0,3})\\b/i);\n        const passiveItemMatch = working.match(/^(.+?)\\s+(?:was\\s+)?(?:purchased|bought|ordered)\\b/i);\n        const activeItemMatch = working.match(/\\b(?:purchased|bought|ordered|placed an order for)\\s+(.+)$/i);\n        let item = cleanText(activeItemMatch?.[1] || passiveItemMatch?.[1] || working);\n\n        item = item\n          .replace(/\\b(?:from|in)\\s+[A-Z][A-Za-z'.-]*(?:\\s+[A-Z][A-Za-z'.-]*){0,3}\\b/gi, \" \")\n          .replace(/\\b(?:purchased|bought|ordered|placed an order for|order placed|new order|verified)\\b/gi, \" \")\n          .replace(/\\s+/g, \" \")\n          .trim();\n\n        return {\n          country: cleanText(locationMatch?.[1] || \"Online customer\").slice(0, 40),\n          item: (item && item.length >= 3 && item.length <= 120 ? item : \"New HERCXLES order\").slice(0, 80),\n          timeAgo: timeAgo.slice(0, 30),\n          url: getPopupProductUrl(popup),\n        };\n      };\n\n      const hideExternalSalesPopup = (element) => {\n        if (!(element instanceof HTMLElement)) return;\n\n        element.setAttribute(\"aria-hidden\", \"true\");\n        element.style.setProperty(\"opacity\", \"0\", \"important\");\n        element.style.setProperty(\"pointer-events\", \"none\", \"important\");\n        element.style.setProperty(\"visibility\", \"hidden\", \"important\");\n        element.style.setProperty(\"transform\", \"translate3d(0, -140vh, 0)\", \"important\");\n      };\n\n      const inspectExternalSalesPopup = (node) => {\n        const root = node instanceof HTMLElement ? node : node?.parentElement;\n        if (!root || root === document.documentElement || root === document.body) return;\n\n        const candidates = [];\n        let ancestor = root;\n        for (let depth = 0; ancestor && depth < 6; depth += 1) {\n          candidates.push(ancestor);\n          ancestor = ancestor.parentElement;\n        }\n        root.querySelectorAll?.(\"[class],[id],[role],[aria-live]\").forEach((element) => candidates.push(element));\n\n        const popup = candidates.find(looksLikeExternalSalesPopup);\n        if (!popup) return;\n\n        const text = normalizePopupText(popup.textContent);\n        hideExternalSalesPopup(popup);\n        if (!rememberCapturedPopup(text)) return;\n\n        showExternalNotification(parseExternalSalesPopup(popup, text));\n      };\n\n      const startSalesPopupBridge = () => {\n        if (!document.body || !(\"MutationObserver\" in window)) return;\n\n        const scanExistingPopups = () => {\n          document.querySelectorAll(\"[class],[id],[role],[aria-live]\").forEach(inspectExternalSalesPopup);\n        };\n\n        popupObserver = new MutationObserver((mutations) => {\n          mutations.forEach((mutation) => {\n            if (mutation.type === \"characterData\") {\n              inspectExternalSalesPopup(mutation.target);\n              return;\n            }\n\n            mutation.addedNodes.forEach(inspectExternalSalesPopup);\n          });\n        });\n        popupObserver.observe(document.body, { childList: true, characterData: true, subtree: true });\n        window.setTimeout(scanExistingPopups, 800);\n        window.setTimeout(scanExistingPopups, 2500);\n      };\n\n      const formatCountry = (value) => {\n        const country = cleanText(value);\n\n        if (!/^[a-z]{2}$/i.test(country) || typeof Intl === \"undefined\" || !Intl.DisplayNames) return country;\n\n        try {\n          const displayNames = new Intl.DisplayNames([navigator.language || \"en\"], { type: \"region\" });\n          return displayNames.of(country.toUpperCase()) || country.toUpperCase();\n        } catch (error) {\n          return country.toUpperCase();\n        }\n      };\n\n      const getOrderItem = (order) => {\n        const firstItem = Array.isArray(order.items) ? order.items[0] : Array.isArray(order.line_items) ? order.line_items[0] : null;\n\n        return (\n          order.item ||\n          order.title ||\n          order.product_title ||\n          order.product ||\n          order.line_item ||\n          firstItem?.item ||\n          firstItem?.title ||\n          firstItem?.product_title ||\n          firstItem?.name\n        );\n      };\n\n      const normalizeOrder = (order, index = 0) => {\n        const item = cleanText(getOrderItem(order));\n        const country = formatCountry(order.country || order.shipping_country || order.billing_country || order.country_code);\n        const orderedAt = order.orderedAt || order.ordered_at || order.created_at || order.timestamp || order.date;\n        const date = orderedAt ? new Date(orderedAt) : null;\n\n        if (!item || !country || !date || Number.isNaN(date.getTime()) || !isToday(date)) return null;\n\n        const id = cleanText(order.id || order.order_id || `${item}:${country}:${date.toISOString()}:${index}`);\n        return {\n          id,\n          item: item.slice(0, 80),\n          country: country.slice(0, 40),\n          orderedAt: date.toISOString(),\n          url: getOrderUrl(order),\n        };\n      };\n\n      const setOrders = (nextOrders) => {\n        const normalized = nextOrders\n          .map(normalizeOrder)\n          .filter(Boolean)\n          .sort((a, b) => new Date(b.orderedAt) - new Date(a.orderedAt))\n          .slice(0, 12);\n\n        if (!normalized.length) {\n          orders = [];\n          queue = [];\n          currentIndex = -1;\n          return false;\n        }\n\n        const existingIds = new Set(orders.map((order) => order.id));\n        const fresh = normalized.filter((order) => !existingIds.has(order.id));\n        orders = normalized;\n        if (fresh.length) queue.push(...fresh);\n\n        return true;\n      };\n\n      const readFeed = async () => {\n        if (!feedUrl) return false;\n\n        try {\n          const response = await fetch(feedUrl, {\n            cache: \"no-store\",\n            credentials: \"same-origin\",\n            headers: { Accept: \"application/json\" },\n          });\n\n          if (!response.ok) return false;\n\n          const data = await response.json();\n          const nextOrders = Array.isArray(data) ? data : Array.isArray(data.orders) ? data.orders : [];\n          return setOrders(nextOrders);\n        } catch (error) {\n          return false;\n        }\n      };\n\n      const getNextOrder = () => {\n        if (queue.length) return queue.shift();\n        if (!orders.length) return null;\n\n        currentIndex = (currentIndex + 1) % orders.length;\n        return orders[currentIndex];\n      };\n\n      const clearNotification = () => {\n        program.hcxLegacyOrderNotification = null;\n        program.dispatchEvent(new CustomEvent(\"hcx:legacy-order-notification\", { detail: null }));\n        if (liveRegion) liveRegion.textContent = \"\";\n        if (notificationLink) {\n          notificationLink.hidden = true;\n          notificationLink.classList.remove(\"is-active\");\n          notificationLink.removeAttribute(\"href\");\n        }\n        showing = false;\n        if (orders.length) scheduleNext();\n      };\n\n      const publishNotification = (payload) => {\n        const productUrl = normalizeProductUrl(payload.url) || productPathFromTitle(payload.item);\n\n        showing = true;\n        program.hcxLegacyOrderNotification = { ...payload, url: productUrl };\n        program.dispatchEvent(new CustomEvent(\"hcx:legacy-order-notification\", { detail: program.hcxLegacyOrderNotification }));\n        if (liveRegion) liveRegion.textContent = `Someone bought ${payload.item}, ${payload.timeAgo}.`;\n        if (notificationLink && productUrl) {\n          notificationLink.href = productUrl;\n          notificationLink.hidden = false;\n          notificationLink.classList.add(\"is-active\");\n        }\n\n        window.clearTimeout(clearTimer);\n        clearTimer = window.setTimeout(clearNotification, forcePreviewNotification ? 16000 : 6800);\n      };\n\n      const showExternalNotification = (payload) => {\n        if (!payload?.item || document.hidden) return;\n\n        publishNotification({\n          item: payload.item,\n          country: payload.country || \"Online customer\",\n          timeAgo: payload.timeAgo || \"now\",\n          url: payload.url,\n        });\n      };\n\n      const showOrder = (order) => {\n        if (!order || showing || document.hidden) {\n          if (orders.length) scheduleNext();\n          return;\n        }\n\n        publishNotification({\n          item: order.item,\n          country: order.country,\n          timeAgo: formatTimeAgo(order.orderedAt),\n          url: order.url,\n        });\n      };\n\n      const scheduleNext = () => {\n        if (!orders.length) return;\n\n        window.clearTimeout(nextTimer);\n        const delay = 32000 + Math.round(Math.random() * 18000);\n        nextTimer = window.setTimeout(() => showOrder(getNextOrder()), delay);\n      };\n\n      const start = async () => {\n        const hasFeed = await readFeed();\n        if (!hasFeed && (isPreview || forcePreviewNotification)) setOrders(previewOrders);\n        if (!orders.length) return;\n\n        const firstDelay = forcePreviewNotification ? 900 : isPreview ? 3500 : 8000 + Math.round(Math.random() * 5000);\n        nextTimer = window.setTimeout(() => showOrder(getNextOrder()), firstDelay);\n        pollTimer = window.setInterval(readFeed, 60000);\n      };\n\n      document.addEventListener(\"visibilitychange\", () => {\n        if (!document.hidden && !showing && orders.length) scheduleNext();\n      });\n\n      window.addEventListener(\"pagehide\", () => {\n        window.clearTimeout(nextTimer);\n        window.clearTimeout(clearTimer);\n        window.clearInterval(pollTimer);\n        popupObserver?.disconnect?.();\n      });\n\n      startSalesPopupBridge();\n      start();\n    });\n  };\n\n  const initPolicyPageEnhancements = () => {\n    const container = document.querySelector(\".shopify-policy__container\");\n    if (!container || container.dataset.hcxPolicyEnhanced === \"true\") return;\n\n    const body = container.querySelector(\".shopify-policy__body\");\n    const title = container.querySelector(\".shopify-policy__title\");\n    const titleText = title?.textContent?.trim() || \"Information\";\n    const titleLower = titleText.toLowerCase();\n    const isContactPolicy = titleLower.includes(\"contact\") || window.location.pathname.includes(\"/policies/contact-information\");\n    const supportValue = \"enquiries@hercxles.co.uk\";\n    const cleanPolicyText = (root) => {\n      if (!root) return;\n\n      const replacements = [\n        [/This website is operated by HERCXLES\\./g, \"This website is operated by us.\"],\n        [/Throughout the site,\\s*the terms\\s*(?:\"|\\u201c)we(?:\"|\\u201d),?\\s*(?:\"|\\u201c)us(?:\"|\\u201d)\\s*and\\s*(?:\"|\\u201c)our(?:\"|\\u201d)\\s*refer to HERCXLES\\./gi, \"Throughout the site, the terms \\\"we\\\", \\\"us\\\" and \\\"our\\\" refer to us.\"],\n        [/HERCXLES offers this website/g, \"We offer this website\"],\n        [/contact HERCXLES/g, \"contact us\"],\n        [/Contact HERCXLES/g, \"Contact us\"],\n        [/email HERCXLES/g, \"email us\"],\n        [/Email HERCXLES/g, \"Email us\"],\n        [/to HERCXLES/g, \"to us\"],\n        [/HERCXLES may contact you/g, \"we may contact you\"],\n        [/HERCXLES if/g, \"us if\"],\n        [/HERCXLES before/g, \"us before\"]\n      ];\n      const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n      const textNodes = [];\n\n      while (walker.nextNode()) textNodes.push(walker.currentNode);\n\n      textNodes.forEach((node) => {\n        let value = node.nodeValue || \"\";\n        replacements.forEach(([pattern, replacement]) => {\n          value = value.replace(pattern, replacement);\n        });\n        node.nodeValue = value;\n      });\n    };\n\n    container.dataset.hcxPolicyEnhanced = \"true\";\n    container.classList.add(\"hcx-policy-page\");\n\n    if (isContactPolicy) {\n      container.classList.add(\"hcx-contact-policy-page\");\n      if (body) {\n        body.innerHTML = `\n          <section class=\"hcx-contact-policy-card\" aria-label=\"Contact us\">\n            <a class=\"hcx-contact-policy-card__email\" href=\"mailto:${supportValue}\">${supportValue}</a>\n          </section>\n        `;\n      }\n      return;\n    }\n\n    if (body && !body.querySelector(\".hcx-policy-page__aside\")) {\n      const aside = document.createElement(\"aside\");\n      aside.className = \"hcx-policy-page__aside\";\n      aside.innerHTML = `\n        <nav class=\"hcx-policy-page__nav\" aria-label=\"Customer information pages\">\n          <a href=\"/pages/hercxles-club\">LEGACY</a>\n          <a href=\"/pages/about-us-page\">ABOUT US</a>\n          <a href=\"/pages/returns\">MAKE A RETURN</a>\n          <a href=\"/pages/hercxles-club#legacy-orders\">TRACK AN ORDER</a>\n          <a href=\"/pages/reviews\">REVIEWS</a>\n        </nav>\n        <div class=\"hcx-policy-page__support\">\n          <span>Need help?</span>\n          <a href=\"mailto:enquiries@hercxles.co.uk\">enquiries@hercxles.co.uk</a>\n        </div>\n      `;\n\n      aside.querySelectorAll(\"a[href]\").forEach((link) => {\n        if (link.pathname === window.location.pathname) {\n          link.setAttribute(\"aria-current\", \"page\");\n        }\n      });\n\n      body.prepend(aside);\n    }\n\n    cleanPolicyText(body?.querySelector(\".rte\") || body);\n  };\n\n  const initReturnExchangePortal = () => {\n    const returnAddressLines = [\n      \"HERCXLES Returns\",\n      \"19 Lapwing Way\",\n      \"Whiteley, Winchester\",\n      \"PO15 7RN\",\n      \"United Kingdom\"\n    ];\n    const supportEmail = \"enquiries@hercxles.co.uk\";\n    const parcelNote = \"Send the request email before posting. Include the order number and request reference inside the parcel so it can be matched when it arrives.\";\n    const lookupNotFoundMessage = \"We could not find an order matching both details. Check the order number and the email or phone used at checkout.\";\n    const lookupUnavailableMessage = `Live order lookup is unavailable right now. Please try again shortly or email ${supportEmail} with your order number.`;\n    const returnRequestVerificationMessage = \"We could not verify that this order belongs to that email or phone. Search the order again before making a return.\";\n    const returnRequestUnavailableMessage = \"We could not verify this order right now. Please search the order again before making a return.\";\n    const returnRequestVerificationErrors = new Set([\n      \"missing_request_details\",\n      \"order_customer_mismatch\",\n      \"shopify_admin_api_not_configured\",\n      \"return_window_closed\",\n      \"exchange_window_closed\"\n    ]);\n    const returnWindowDays = 14;\n    const exchangeWindowDays = 30;\n    const dayInMs = 24 * 60 * 60 * 1000;\n\n    document.querySelectorAll(\"[data-hcx-return-portal]\").forEach((portal) => {\n      const form = portal.querySelector(\"[data-hcx-return-form]\");\n      if (!form || form.dataset.hcxReturnBound === \"true\") return;\n\n      form.dataset.hcxReturnBound = \"true\";\n\n      const ordersScript = portal.querySelector(\"[data-hcx-return-orders]\");\n      const result = portal.querySelector(\"[data-hcx-return-result]\");\n      const summaryTarget = portal.querySelector(\"[data-hcx-return-order-summary]\");\n      const itemsTarget = portal.querySelector(\"[data-hcx-return-items]\");\n      const labelTarget = portal.querySelector(\"[data-hcx-return-label]\");\n      const workflow = portal.querySelector(\"[data-hcx-return-workflow]\");\n\n      const upgradeLegacyReturnPortalMarkup = () => {\n        const legacyActionButtons = [...portal.querySelectorAll(\"[data-hcx-return-action]\")];\n        const actions = portal.querySelector(\".hcx-return-portal__actions\");\n\n        if (!portal.querySelector(\"[data-hcx-return-confirm]\") && actions && legacyActionButtons.length) {\n          actions.setAttribute(\"aria-label\", \"Confirm return or exchange details\");\n          actions.innerHTML = `<button type=\"button\" data-hcx-return-confirm>Confirm details</button>`;\n          const note = portal.querySelector(\".hcx-return-portal__note\");\n          if (note) {\n            note.textContent = \"Confirm your details, then the return address and completion instructions will appear below.\";\n          }\n        }\n\n        const reasonWrapper = portal.querySelector(\".hcx-return-portal__reason\");\n        if (!workflow || !reasonWrapper) return;\n\n        if (!portal.querySelector(\"[data-hcx-return-details]\")) {\n          reasonWrapper.insertAdjacentHTML(\"afterend\", `\n            <div class=\"hcx-return-portal__field hcx-return-portal__reason\">\n              <label class=\"hcx-return-portal__field-label\" for=\"HcxReturnDetails\">Extra details</label>\n              <textarea\n                id=\"HcxReturnDetails\"\n                name=\"return_details\"\n                data-hcx-return-details\n                placeholder=\"Add item condition, sizing notes or anything else we should know\"\n              ></textarea>\n            </div>\n          `);\n        }\n\n        if (!portal.querySelector(\"[data-hcx-exchange-options]\")) {\n          const exchangeInsertAfter = portal.querySelector(\"[data-hcx-return-details]\")?.closest(\".hcx-return-portal__field\") || reasonWrapper;\n          exchangeInsertAfter.insertAdjacentHTML(\"afterend\", `\n            <div class=\"hcx-return-portal__exchange\" data-hcx-exchange-options>\n              <div class=\"hcx-return-portal__exchange-heading\">\n                <span>Exchange details</span>\n                <p>Leave blank for a return. Add replacement details for an exchange.</p>\n              </div>\n              <div class=\"hcx-return-portal__exchange-grid\">\n                <div class=\"hcx-return-portal__field\">\n                  <label class=\"hcx-return-portal__field-label\" for=\"HcxExchangeType\">Exchange type</label>\n                  <select id=\"HcxExchangeType\" name=\"exchange_type\" data-hcx-exchange-type>\n                    <option value=\"\">Return only</option>\n                    <option value=\"Different size\">Different size</option>\n                    <option value=\"Different colour\">Different colour</option>\n                    <option value=\"Different product\">Different product</option>\n                  </select>\n                </div>\n                <div class=\"hcx-return-portal__field\">\n                  <label class=\"hcx-return-portal__field-label\" for=\"HcxExchangeSize\">Requested size</label>\n                  <input\n                    id=\"HcxExchangeSize\"\n                    name=\"exchange_size\"\n                    type=\"text\"\n                    autocomplete=\"off\"\n                    data-hcx-exchange-size\n                    placeholder=\"e.g. Medium, Large, 32\"\n                  >\n                </div>\n                <div class=\"hcx-return-portal__field\">\n                  <label class=\"hcx-return-portal__field-label\" for=\"HcxExchangeItem\">Replacement item or colour</label>\n                  <input\n                    id=\"HcxExchangeItem\"\n                    name=\"exchange_item\"\n                    type=\"text\"\n                    autocomplete=\"off\"\n                    data-hcx-exchange-item\n                    placeholder=\"e.g. Black hoodie, white tee\"\n                  >\n                </div>\n              </div>\n              <div class=\"hcx-return-portal__balance\" data-hcx-exchange-balance aria-live=\"polite\">\n                <span>Exchange balance</span>\n                <strong>Calculated after order lookup</strong>\n                <p>Select the item and replacement details to see whether money is due back or a payment link is needed.</p>\n              </div>\n            </div>\n          `);\n        }\n      };\n\n      upgradeLegacyReturnPortalMarkup();\n\n      const reasonField = portal.querySelector(\"[data-hcx-return-reason]\");\n      const detailsField = portal.querySelector(\"[data-hcx-return-details]\");\n      const exchangeTypeField = portal.querySelector(\"[data-hcx-exchange-type]\");\n      const exchangeSizeField = portal.querySelector(\"[data-hcx-exchange-size]\");\n      const exchangeItemField = portal.querySelector(\"[data-hcx-exchange-item]\");\n      const exchangeBalanceTarget = portal.querySelector(\"[data-hcx-exchange-balance]\");\n      const requestTypeFields = [...portal.querySelectorAll(\"[data-hcx-request-type]\")];\n      const error = portal.querySelector(\"[data-hcx-return-error]\");\n      const notice = portal.querySelector(\"[data-hcx-return-notice]\");\n      const matchLabel = portal.querySelector(\"[data-hcx-return-match-label]\");\n      const submitButton = form.querySelector('button[type=\"submit\"]');\n      const requiredFields = [...form.querySelectorAll(\"[required]\")];\n      const helpButtons = [...portal.querySelectorAll(\"[data-hcx-return-help]\")];\n      const actionButtons = [...portal.querySelectorAll(\"[data-hcx-return-action]\")];\n      const confirmButton = portal.querySelector(\"[data-hcx-return-confirm]\");\n      const actionsTarget = portal.querySelector(\".hcx-return-portal__actions\");\n      const requestFields = [reasonField, detailsField, exchangeTypeField, exchangeSizeField, exchangeItemField].filter(Boolean);\n      const lookupUrl = portal.dataset.hcxReturnLookupUrl || \"\";\n      const requestUrl = lookupUrl ? lookupUrl.replace(/\\/lookup(\\?.*)?$/, \"/request$1\") : \"\";\n      const hasLocalOrders = portal.dataset.hcxReturnHasLocalOrders === \"true\";\n      const defaultButtonText = submitButton?.textContent || \"Get started\";\n      let orders = [];\n      let isSubmitting = false;\n      let activeOrder = null;\n      let productCatalogPromise = null;\n      let balancePreviewToken = 0;\n      const sentRequestNotifications = new Set();\n\n      form.setAttribute(\"novalidate\", \"novalidate\");\n\n      const normalizeOrder = (value = \"\") =>\n        String(value)\n          .toLowerCase()\n          .replace(/^#/, \"\")\n          .replace(/[^a-z0-9]/g, \"\");\n\n      const normalizeText = (value = \"\") =>\n        String(value)\n          .toLowerCase()\n          .trim();\n\n      const normalizeCompact = (value = \"\") => normalizeText(value).replace(/[^a-z0-9@.]/g, \"\");\n\n      const normalizePhone = (value = \"\") => String(value).replace(/\\D/g, \"\");\n\n      const asArray = (value) => {\n        if (Array.isArray(value)) return value;\n        if (Array.isArray(value?.edges)) return value.edges.map((edge) => edge?.node).filter(Boolean);\n        if (Array.isArray(value?.nodes)) return value.nodes;\n        return [];\n      };\n\n      const escapeHtml = (value = \"\") =>\n        String(value).replace(/[&<>\"']/g, (char) => ({\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          \"\\\"\": \"&quot;\",\n          \"'\": \"&#39;\"\n        }[char]));\n\n      const escapeAttribute = (value = \"\") => escapeHtml(value).replace(/`/g, \"&#96;\");\n\n      const firstValue = (...values) => values.find((value) => String(value || \"\").trim());\n\n      const parseWindowDate = (value = \"\") => {\n        const raw = String(value || \"\").trim();\n        if (!raw) return null;\n\n        const parsed = new Date(raw);\n        if (!Number.isNaN(parsed.getTime())) return parsed;\n\n        const dated = raw.match(/^(\\d{1,2})\\s+([A-Za-z]{3,9})\\s+(\\d{4})$/);\n        if (dated) {\n          const month = \"jan feb mar apr may jun jul aug sep oct nov dec\".split(\" \").indexOf(dated[2].slice(0, 3).toLowerCase());\n          if (month >= 0) {\n            const fallback = new Date(Number(dated[3]), month, Number(dated[1]));\n            if (!Number.isNaN(fallback.getTime())) return fallback;\n          }\n        }\n\n        return null;\n      };\n\n      const formatWindowDate = (date) => {\n        if (!date) return \"\";\n\n        try {\n          return date.toLocaleDateString(\"en-GB\", {\n            day: \"2-digit\",\n            month: \"short\",\n            year: \"numeric\"\n          });\n        } catch (_) {\n          return date.toDateString();\n        }\n      };\n\n      const getWindowDate = (order = {}) => {\n        const candidates = [\n          [\"delivery\", order.deliveredAt],\n          [\"fulfilment\", order.fulfilledAt],\n          [\"order\", order.createdAt]\n        ];\n\n        for (const [source, value] of candidates) {\n          const date = parseWindowDate(value);\n          if (date) return { date, source, value };\n        }\n\n        return { date: null, source: \"\", value: \"\" };\n      };\n\n      const getReturnWindow = (order = {}) => {\n        const windowDate = getWindowDate(order);\n\n        if (!windowDate.date) {\n          return {\n            status: \"needs_date\",\n            canReturn: false,\n            canExchange: false,\n            days: null,\n            source: \"\",\n            dateLabel: \"\",\n            summary: \"Enter delivery date to check the return window.\",\n            title: \"Enter delivery date\",\n            message: \"Add the delivery date or order date above so the portal can check the 14-day return and 30-day exchange window.\"\n          };\n        }\n\n        const today = new Date();\n        const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n        const windowStart = new Date(windowDate.date.getFullYear(), windowDate.date.getMonth(), windowDate.date.getDate());\n        const days = Math.max(0, Math.floor((todayStart.getTime() - windowStart.getTime()) / dayInMs));\n        const sourceLabel = windowDate.source === \"delivery\"\n          ? \"delivery\"\n          : windowDate.source === \"fulfilment\"\n            ? \"fulfilment\"\n            : \"order\";\n        const dateLabel = formatWindowDate(windowDate.date);\n\n        if (days > exchangeWindowDays) {\n          return {\n            status: \"closed\",\n            canReturn: false,\n            canExchange: false,\n            days,\n            source: sourceLabel,\n            dateLabel,\n            summary: `Closed - ${days} days since ${sourceLabel}`,\n            title: \"Return and exchange window closed\",\n            message: `This order is over ${exchangeWindowDays} days from ${sourceLabel} (${dateLabel}), so the portal cannot start a return or exchange. Contact us if you need help with this order.`\n          };\n        }\n\n        if (days > returnWindowDays) {\n          return {\n            status: \"exchange_only\",\n            canReturn: false,\n            canExchange: true,\n            days,\n            source: sourceLabel,\n            dateLabel,\n            summary: `Exchange only - ${days} days since ${sourceLabel}`,\n            title: \"Exchange only\",\n            message: `This order is past the ${returnWindowDays}-day return window, but still within ${exchangeWindowDays} days of ${sourceLabel} (${dateLabel}). You can request an exchange, but not a return.`\n          };\n        }\n\n        return {\n          status: \"open\",\n          canReturn: true,\n          canExchange: true,\n          days,\n          source: sourceLabel,\n          dateLabel,\n          summary: `Return or exchange available - ${days} days since ${sourceLabel}`,\n          title: \"Return or exchange available\",\n          message: `This order is within ${returnWindowDays} days of ${sourceLabel} (${dateLabel}), so you can request a return or exchange.`\n        };\n      };\n\n      const normaliseLineItem = (item = {}, index = 0) => {\n        const node = item.node || item;\n        const variantTitle = firstValue(node.variantTitle, node.variant_title, node.variant?.title, node.variant?.displayName);\n\n        return {\n          id: String(firstValue(node.id, node.key, node.sku, index + 1)),\n          title: String(firstValue(node.title, node.name, node.productTitle, node.product?.title, \"Order item\")),\n          variantTitle: variantTitle === \"Default Title\" ? \"\" : String(variantTitle || \"\"),\n          sku: String(firstValue(node.sku, node.variant?.sku, \"\") || \"\"),\n          quantity: String(firstValue(node.quantity, node.currentQuantity, node.current_quantity, \"\") || \"\"),\n          price: String(firstValue(node.price, node.finalLinePrice, node.final_line_price, node.total, \"\") || \"\"),\n          image: String(firstValue(node.image, node.imageUrl, node.image_url, node.variant?.image?.url, node.product?.featuredImage?.url, \"\") || \"\")\n        };\n      };\n\n      const normaliseOrderPayload = (payload = {}, fallbackOrderNumber = \"\", fallbackDetail = \"\") => {\n        const source = payload?.order || payload?.data?.order || payload;\n        const root = source || {};\n        const shippingAddress = root.shippingAddress || root.shipping_address || root.shipping || {};\n        const rawItems = firstValue(root.lineItems, root.line_items, root.items, payload.lineItems, payload.items) || [];\n        const fulfillmentRecords = asArray(firstValue(root.fulfillments, root.fulfilments, root.shipments, root.deliveries, payload.fulfillments, payload.shipments) || []);\n        const firstFulfillment = fulfillmentRecords[0] || {};\n        const name = firstValue(root.name, root.orderName, root.order_name, root.orderNumber, root.order_number, root.number, fallbackOrderNumber);\n\n        return {\n          source: firstValue(root.source, payload.source, \"lookup\"),\n          name: String(name || \"\"),\n          number: String(firstValue(root.number, root.orderNumber, root.order_number, name, fallbackOrderNumber) || \"\"),\n          email: String(firstValue(root.email, root.customerEmail, root.customer_email, root.customer?.email, fallbackDetail) || \"\"),\n          phone: String(firstValue(root.phone, root.customerPhone, root.customer_phone, root.shippingPhone, shippingAddress.phone, \"\") || \"\"),\n          billingPhone: String(firstValue(root.billingPhone, root.billing_phone, root.billingAddress?.phone, root.billing_address?.phone, \"\") || \"\"),\n          createdAt: String(firstValue(root.createdAt, root.created_at, root.processedAt, root.processed_at, root.date, \"\") || \"\"),\n          fulfilledAt: String(firstValue(root.fulfilledAt, root.fulfilled_at, root.fulfillmentDate, root.fulfilmentDate, root.fulfillment_date, root.fulfilment_date, firstFulfillment.fulfilledAt, firstFulfillment.fulfilled_at, firstFulfillment.createdAt, firstFulfillment.created_at, \"\") || \"\"),\n          deliveredAt: String(firstValue(root.deliveredAt, root.delivered_at, root.deliveryDate, root.delivery_date, root.deliveredOn, root.delivered_on, root.shipmentDeliveredAt, root.shipment_delivered_at, firstFulfillment.deliveredAt, firstFulfillment.delivered_at, firstFulfillment.deliveryDate, firstFulfillment.delivery_date, \"\") || \"\"),\n          financialStatus: String(firstValue(root.financialStatus, root.financial_status, root.financialStatusLabel, \"\") || \"\"),\n          fulfillmentStatus: String(firstValue(root.fulfillmentStatus, root.fulfilmentStatus, root.fulfillment_status, root.fulfilment_status, root.fulfillmentStatusLabel, root.fulfilmentStatusLabel, \"\") || \"\"),\n          total: String(firstValue(root.total, root.totalPrice, root.total_price, root.currentTotalPrice, root.current_total_price, \"\") || \"\"),\n          customerUrl: String(firstValue(root.customerUrl, root.customer_url, root.orderStatusUrl, root.order_status_url, \"\") || \"\"),\n          shippingAddress: {\n            name: String(firstValue(shippingAddress.name, root.customer?.displayName, \"\") || \"\"),\n            line1: String(firstValue(shippingAddress.line1, shippingAddress.address1, \"\") || \"\"),\n            line2: String(firstValue(shippingAddress.line2, shippingAddress.address2, \"\") || \"\"),\n            city: String(firstValue(shippingAddress.city, \"\") || \"\"),\n            postcode: String(firstValue(shippingAddress.postcode, shippingAddress.zip, shippingAddress.postalCode, \"\") || \"\"),\n            country: String(firstValue(shippingAddress.country, shippingAddress.countryCode, \"\") || \"\")\n          },\n          lineItems: asArray(rawItems).map(normaliseLineItem),\n          needsManualReview: Boolean(root.needsManualReview || payload.needsManualReview)\n        };\n      };\n\n      try {\n        orders = JSON.parse(ordersScript?.textContent || \"[]\").map((order) => normaliseOrderPayload(order));\n      } catch (_) {\n        orders = [];\n      }\n\n      const syncSubmitState = () => {\n        if (!submitButton) return;\n        submitButton.disabled = isSubmitting || requiredFields.some((field) => !String(field.value || \"\").trim());\n      };\n\n      const clearLabel = () => {\n        if (!labelTarget) return;\n        labelTarget.hidden = true;\n        labelTarget.replaceChildren();\n      };\n\n      const hideNotice = () => {\n        if (!notice) return;\n        notice.hidden = true;\n        notice.textContent = \"\";\n      };\n\n      const setError = (message) => {\n        activeOrder = null;\n        clearLabel();\n        hideNotice();\n        if (error) {\n          error.textContent = message;\n          error.hidden = false;\n        }\n        if (result) result.hidden = true;\n        error?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      };\n\n      const setRequestError = (message) => {\n        clearLabel();\n        hideNotice();\n        if (error) {\n          error.textContent = message;\n          error.hidden = false;\n        }\n        result?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      };\n\n      const copyText = async (text) => {\n        if (navigator.clipboard?.writeText) {\n          await navigator.clipboard.writeText(text);\n          return true;\n        }\n\n        const textarea = document.createElement(\"textarea\");\n        textarea.value = text;\n        textarea.setAttribute(\"readonly\", \"\");\n        textarea.style.position = \"fixed\";\n        textarea.style.inset = \"0 auto auto 0\";\n        textarea.style.opacity = \"0\";\n        document.body.append(textarea);\n        textarea.select();\n        const copied = document.execCommand(\"copy\");\n        textarea.remove();\n        return copied;\n      };\n\n      const detailMatches = (input, order) => {\n        const text = normalizeText(input);\n        const compact = normalizeCompact(input);\n        const phone = normalizePhone(input);\n        const phoneCandidates = [order.phone, order.billingPhone]\n          .map(normalizePhone)\n          .filter(Boolean);\n        const candidates = [\n          normalizeText(order.email),\n          normalizeCompact(order.email),\n          normalizeCompact(order.phone),\n          normalizeCompact(order.billingPhone),\n          ...phoneCandidates\n        ].filter(Boolean);\n\n        return candidates.includes(text) ||\n          candidates.includes(compact) ||\n          (phone && phoneCandidates.some((candidate) =>\n            candidate === phone ||\n            candidate.endsWith(phone) ||\n            phone.endsWith(candidate)\n          ));\n      };\n\n      const orderMatches = (input, order) => {\n        const requestedOrder = normalizeOrder(input);\n        if (!requestedOrder) return false;\n\n        return [order.name, order.number]\n          .map(normalizeOrder)\n          .filter(Boolean)\n          .some((orderName) =>\n            orderName === requestedOrder ||\n            orderName.endsWith(requestedOrder) ||\n            requestedOrder.endsWith(orderName)\n          );\n      };\n\n      const renderOrderSummary = (order) => {\n        if (!summaryTarget) return;\n\n        const returnWindow = getReturnWindow(order);\n        const meta = [\n          [\"Order\", order.name || order.number],\n          [\"Contact\", order.email || order.phone],\n          [\"Lookup\", order.needsManualReview ? \"Manual review\" : \"Verified order\"],\n          [\"Placed\", order.createdAt],\n          [returnWindow.source === \"delivery\" ? \"Delivered\" : returnWindow.source === \"fulfilment\" ? \"Fulfilled\" : \"Window date\", returnWindow.dateLabel],\n          [\"Return window\", returnWindow.summary],\n          [\"Total\", order.total],\n          [\"Payment\", order.financialStatus],\n          [\"Fulfilment\", order.fulfillmentStatus]\n        ].filter(([, value]) => String(value || \"\").trim());\n\n        summaryTarget.innerHTML = `\n          <h3>${escapeHtml(order.name || order.number || \"Order request\")}</h3>\n          <dl>\n            ${meta.map(([label, value]) => `\n              <div>\n                <dt>${escapeHtml(label)}</dt>\n                <dd>${escapeHtml(value)}</dd>\n              </div>\n            `).join(\"\")}\n          </dl>\n          ${order.customerUrl ? `<a href=\"${escapeAttribute(order.customerUrl)}\">View order details</a>` : \"\"}\n        `;\n      };\n\n      const renderOrderItems = (order) => {\n        if (!itemsTarget) return;\n\n        if (order.needsManualReview) {\n          const orderName = order.name || order.number || \"your order\";\n          const subject = `Return/exchange item list help ${orderName}`;\n          const body = [\n            \"Hi,\",\n            \"\",\n            \"I found my order, but the returns portal could not load the products from the order.\",\n            `Order: ${orderName}`,\n            `Contact: ${order.email || order.phone || \"\"}`,\n            \"\",\n            \"Please help me start a return or exchange for the products in this order.\"\n          ].join(\"\\n\");\n          const href = `mailto:${supportEmail}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n\n          itemsTarget.innerHTML = `\n            <h3>Products in this order</h3>\n            <p class=\"hcx-return-portal__empty\">We could not load the products bought in this order. Please contact ${escapeHtml(supportEmail)} with the order number.</p>\n            <a class=\"hcx-return-portal__inline-link\" href=\"${escapeAttribute(href)}\">Email HERCXLES about this order</a>\n          `;\n          return;\n        }\n\n        if (!order.lineItems.length) {\n          const orderName = order.name || order.number || \"your order\";\n          const subject = `Return/exchange item list help ${orderName}`;\n          const body = [\n            \"Hi,\",\n            \"\",\n            \"I found my order, but the returns portal could not load the products from the order.\",\n            `Order: ${orderName}`,\n            `Contact: ${order.email || order.phone || \"\"}`,\n            \"\",\n            \"Please help me start a return or exchange for the products in this order.\"\n          ].join(\"\\n\");\n          const href = `mailto:${supportEmail}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n\n          itemsTarget.innerHTML = `\n            <h3>Products in this order</h3>\n            <p class=\"hcx-return-portal__empty\">We could not load the products bought in this order. Please email HERCXLES with the order number so the team can check the order items and refund or exchange amount.</p>\n            <a class=\"hcx-return-portal__inline-link\" href=\"${escapeAttribute(href)}\">Email HERCXLES about this order</a>\n          `;\n          return;\n        }\n\n        itemsTarget.innerHTML = `\n          <h3>Select products from this order</h3>\n          <div class=\"hcx-return-portal__item-list\">\n            ${order.lineItems.map((item, index) => `\n              <label class=\"hcx-return-portal__item\">\n                <input\n                  type=\"checkbox\"\n                  data-hcx-return-item-checkbox\n                  data-hcx-return-item-index=\"${index}\"\n                  checked\n                >\n                <span class=\"hcx-return-portal__item-media\" aria-hidden=\"true\">\n                  ${item.image ? `<img src=\"${escapeAttribute(item.image)}\" alt=\"\">` : \"\"}\n                </span>\n                <span class=\"hcx-return-portal__item-copy\">\n                  <strong>${escapeHtml(item.title)}</strong>\n                  ${item.variantTitle ? `<small>${escapeHtml(item.variantTitle)}</small>` : \"\"}\n                  <em>${escapeHtml([item.sku ? `SKU ${item.sku}` : \"\", item.quantity ? `Qty ${item.quantity}` : \"\", item.price].filter(Boolean).join(\" | \"))}</em>\n                </span>\n              </label>\n            `).join(\"\")}\n          </div>\n        `;\n      };\n\n      const contactHrefForWindow = (order, returnWindow) => {\n        const orderName = order.name || order.number || \"Order\";\n        const subject = `Return/exchange window help ${orderName}`;\n        const body = [\n          \"Hi,\",\n          \"\",\n          \"I need help with a return or exchange request that is outside the automatic portal window.\",\n          `Order: ${orderName}`,\n          `Contact: ${order.email || order.phone || \"Matched order contact\"}`,\n          `Window status: ${returnWindow.summary}`,\n          returnWindow.dateLabel ? `Window date: ${returnWindow.dateLabel}` : \"\",\n          \"\",\n          \"Message:\"\n        ].filter(Boolean).join(\"\\n\");\n\n        return `mailto:${supportEmail}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n      };\n\n      const getSelectedRequestType = () =>\n        requestTypeFields.find((field) => field.checked)?.value === \"exchange\" ? \"exchange\" : \"return\";\n\n      const isRequestTypeAllowed = (requestType, returnWindow) =>\n        requestType === \"exchange\" ? Boolean(returnWindow?.canExchange) : Boolean(returnWindow?.canReturn);\n\n      const setSelectedRequestType = (requestType) => {\n        const normalizedType = requestType === \"exchange\" ? \"exchange\" : \"return\";\n        requestTypeFields.forEach((field) => {\n          field.checked = field.value === normalizedType;\n        });\n      };\n\n      const updateRequestTypeUi = () => {\n        const requestType = getSelectedRequestType();\n        portal.classList.toggle(\"is-exchange-request\", requestType === \"exchange\");\n        portal.classList.toggle(\"is-return-request\", requestType !== \"exchange\");\n        if (confirmButton) {\n          confirmButton.textContent = requestType === \"exchange\" ? \"Show exchange address\" : \"Show return address\";\n        }\n      };\n\n      const syncRequestTypeForWindow = (returnWindow) => {\n        if (!requestTypeFields.length) {\n          updateRequestTypeUi();\n          return;\n        }\n\n        requestTypeFields.forEach((field) => {\n          const requestType = field.value === \"exchange\" ? \"exchange\" : \"return\";\n          const isAllowed = isRequestTypeAllowed(requestType, returnWindow);\n          const option = field.closest(\"[data-hcx-request-choice]\");\n          field.disabled = !isAllowed;\n          option?.classList.toggle(\"is-disabled\", !isAllowed);\n          option?.setAttribute(\"aria-disabled\", isAllowed ? \"false\" : \"true\");\n        });\n\n        if (!isRequestTypeAllowed(getSelectedRequestType(), returnWindow)) {\n          if (returnWindow?.canReturn) setSelectedRequestType(\"return\");\n          else if (returnWindow?.canExchange) setSelectedRequestType(\"exchange\");\n        }\n\n        updateRequestTypeUi();\n      };\n\n      const renderReturnWindowControls = (order) => {\n        const returnWindow = getReturnWindow(order);\n        order.returnWindow = returnWindow;\n\n        portal.classList.toggle(\"is-return-window-open\", returnWindow.status === \"open\");\n        portal.classList.toggle(\"is-return-window-exchange-only\", returnWindow.status === \"exchange_only\");\n        portal.classList.toggle(\"is-return-window-closed\", returnWindow.status === \"closed\");\n\n        actionButtons.forEach((button) => {\n          const action = button.dataset.hcxReturnAction === \"exchange\" ? \"exchange\" : \"return\";\n          const isAllowed = action === \"exchange\" ? returnWindow.canExchange : returnWindow.canReturn;\n          button.hidden = !isAllowed;\n          button.disabled = !isAllowed;\n          button.setAttribute(\"aria-disabled\", isAllowed ? \"false\" : \"true\");\n        });\n\n        syncRequestTypeForWindow(returnWindow);\n        updateConfirmButtonState();\n\n        requestFields.forEach((field) => {\n          field.disabled = returnWindow.status === \"closed\";\n        });\n\n        let windowMessage = portal.querySelector(\"[data-hcx-return-window-message]\");\n        const shouldShowWindowMessage = returnWindow.status !== \"open\" || Boolean(returnWindow.dateLabel);\n        if (!shouldShowWindowMessage) {\n          windowMessage?.remove();\n          return returnWindow;\n        }\n\n        if (!windowMessage) {\n          windowMessage = document.createElement(\"div\");\n          windowMessage.setAttribute(\"data-hcx-return-window-message\", \"\");\n          actionsTarget?.after(windowMessage);\n          if (!actionsTarget && workflow) workflow.append(windowMessage);\n        }\n\n        const contactHref = contactHrefForWindow(order, returnWindow);\n        windowMessage.className = `hcx-return-portal__window hcx-return-portal__window--${returnWindow.status}`;\n        windowMessage.innerHTML = `\n          <h3>${escapeHtml(returnWindow.title)}</h3>\n          <p>${escapeHtml(returnWindow.message)}</p>\n          ${returnWindow.status === \"closed\" ? `<a href=\"${escapeAttribute(contactHref)}\">Contact us</a>` : \"\"}\n        `;\n\n        return returnWindow;\n      };\n\n      const getSelectedItems = () => {\n        if (!activeOrder?.lineItems?.length) {\n          return [];\n        }\n\n        if (activeOrder.needsManualReview) return [];\n\n        return [...portal.querySelectorAll(\"[data-hcx-return-item-checkbox]\")]\n          .filter((checkbox) => checkbox.checked)\n          .map((checkbox) => activeOrder.lineItems[Number(checkbox.dataset.hcxReturnItemIndex)])\n          .filter(Boolean);\n      };\n\n      const updateConfirmButtonState = () => {\n        if (!confirmButton || !activeOrder) return;\n\n        const returnWindow = activeOrder.returnWindow || getReturnWindow(activeOrder);\n        const requestType = getSelectedRequestType();\n        const isAllowed = isRequestTypeAllowed(requestType, returnWindow);\n        const hasSelectedItems = Boolean(getSelectedItems().length);\n        confirmButton.hidden = !(returnWindow.canReturn || returnWindow.canExchange);\n        confirmButton.disabled = !isAllowed || !hasSelectedItems;\n        confirmButton.setAttribute(\"aria-disabled\", isAllowed && hasSelectedItems ? \"false\" : \"true\");\n      };\n\n      const requestReference = (order, action) => {\n        const orderId = normalizeOrder(order.name || order.number || \"order\").toUpperCase() || \"ORDER\";\n        return `HRCX-${orderId}-${action === \"exchange\" ? \"EXCHANGE\" : \"RETURN\"}`;\n      };\n\n      const getFieldValue = (field) => String(field?.value || \"\").trim();\n\n      const parseMoneyAmount = (value = \"\") => {\n        const text = String(value || \"\").replace(/,/g, \"\");\n        const match = text.match(/-?\\d+(?:\\.\\d+)?/);\n        if (!match) return null;\n\n        const amount = Number(match[0]);\n        return Number.isFinite(amount) ? amount : null;\n      };\n\n      const formatMoneyAmount = (amount = 0) => {\n        try {\n          return new Intl.NumberFormat(\"en-GB\", {\n            style: \"currency\",\n            currency: \"GBP\"\n          }).format(Math.max(0, Number(amount) || 0));\n        } catch (_) {\n          return `GBP ${Math.max(0, Number(amount) || 0).toFixed(2)}`;\n        }\n      };\n\n      const selectedItemsTotal = (selectedItems = []) => {\n        if (!selectedItems.length) {\n          return {\n            amount: 0,\n            known: false,\n            quantity: 0,\n            label: \"Select products\"\n          };\n        }\n\n        let amount = 0;\n        let known = true;\n        let quantity = 0;\n\n        selectedItems.forEach((item) => {\n          const itemAmount = parseMoneyAmount(item.price);\n          const itemQuantity = Number.parseInt(String(item.quantity || \"1\"), 10);\n          quantity += Number.isFinite(itemQuantity) && itemQuantity > 0 ? itemQuantity : 1;\n\n          if (itemAmount === null) {\n            known = false;\n            return;\n          }\n\n          amount += itemAmount;\n        });\n\n        return {\n          amount,\n          known,\n          quantity: Math.max(1, quantity || selectedItems.length || 1),\n          label: known ? formatMoneyAmount(amount) : \"To confirm\"\n        };\n      };\n\n      const normalizeLookupPhrase = (value = \"\") =>\n        String(value || \"\")\n          .toLowerCase()\n          .replace(/&/g, \" and \")\n          .replace(/[^a-z0-9]+/g, \" \")\n          .trim();\n\n      const lookupTokens = (value = \"\") =>\n        normalizeLookupPhrase(value)\n          .split(/\\s+/)\n          .filter((token) => token.length > 1);\n\n      const getProductCatalog = async () => {\n        if (!productCatalogPromise) {\n          productCatalogPromise = fetch(\"/products.json?limit=250\", {\n            headers: { \"Accept\": \"application/json\" },\n            cache: \"no-store\"\n          })\n            .then((response) => (response.ok ? response.json() : { products: [] }))\n            .then((payload) => asArray(payload.products).flatMap((product) => {\n              const productTitle = String(product.title || \"\").trim();\n              const productHandle = String(product.handle || \"\").trim();\n              const productImage = String(product.image?.src || asArray(product.images)[0]?.src || \"\");\n              return asArray(product.variants).map((variant) => {\n                const variantTitle = String(variant.title || \"\").trim();\n                const price = Number(variant.price);\n                return {\n                  title: productTitle,\n                  handle: productHandle,\n                  variantTitle: variantTitle === \"Default Title\" ? \"\" : variantTitle,\n                  price: Number.isFinite(price) ? price : null,\n                  image: productImage,\n                  text: normalizeLookupPhrase(`${productTitle} ${productHandle} ${variantTitle} ${variant.option1 || \"\"} ${variant.option2 || \"\"} ${variant.option3 || \"\"}`)\n                };\n              });\n            }))\n            .catch(() => []);\n        }\n\n        return productCatalogPromise;\n      };\n\n      const findReplacementProduct = async (itemQuery = \"\", sizeQuery = \"\") => {\n        const query = normalizeLookupPhrase(itemQuery);\n        const queryTokenList = lookupTokens(itemQuery);\n        const sizeTokenList = lookupTokens(sizeQuery);\n        if (!query || query.length < 3 || !queryTokenList.length) return null;\n\n        const catalog = await getProductCatalog();\n        let bestMatch = null;\n\n        catalog.forEach((entry) => {\n          if (entry.price === null) return;\n\n          const productText = normalizeLookupPhrase(`${entry.title} ${entry.handle}`);\n          const variantText = normalizeLookupPhrase(entry.variantTitle);\n          const haystack = entry.text;\n          let score = 0;\n\n          if (productText === query || entry.handle === query.replace(/\\s+/g, \"-\")) score += 100;\n          if (productText.includes(query) || haystack.includes(query)) score += 70;\n          if (queryTokenList.every((token) => haystack.includes(token))) score += 48;\n          score += queryTokenList.filter((token) => haystack.includes(token)).length * 10;\n\n          if (sizeTokenList.length) {\n            if (sizeTokenList.every((token) => variantText.includes(token))) score += 24;\n            else if (sizeTokenList.some((token) => variantText.includes(token))) score += 12;\n          }\n\n          if (!bestMatch || score > bestMatch.score) {\n            bestMatch = { ...entry, score };\n          }\n        });\n\n        return bestMatch?.score >= 55 ? bestMatch : null;\n      };\n\n      const returnBalanceSummary = (selectedItems = []) => {\n        const selectedTotal = selectedItemsTotal(selectedItems);\n        if (!selectedTotal.known) {\n          const needsSelection = !selectedItems.length;\n          return {\n            status: \"unknown\",\n            heading: \"Refund estimate\",\n            customerLabel: needsSelection ? \"Select products to calculate refund\" : \"Refund estimate unavailable\",\n            detail: needsSelection\n              ? \"Tick the products being returned and the refund estimate will update from their current prices.\"\n              : \"The selected product price is not available online, so HERCXLES will email the refund amount.\",\n            merchantAction: \"Confirm the returned item value, then refund the customer after inspection.\",\n            selectedValue: selectedTotal.label,\n            replacementValue: \"\",\n            matchedReplacement: \"\"\n          };\n        }\n\n        return {\n          status: \"refund\",\n          heading: \"Refund estimate\",\n          customerLabel: `${selectedTotal.label} refund expected`,\n          detail: \"Final refund is processed after the returned items are inspected.\",\n          merchantAction: `Refund ${selectedTotal.label} after the returned items are inspected.`,\n          selectedValue: selectedTotal.label,\n          replacementValue: \"\",\n          matchedReplacement: \"\"\n        };\n      };\n\n      const exchangeBalanceSummary = async (requestDetails, selectedItems = []) => {\n        const selectedTotal = selectedItemsTotal(selectedItems);\n        const exchangeType = normalizeLookupPhrase(requestDetails.exchange.type);\n        const replacementText = requestDetails.exchange.item;\n        const shouldMatchCatalog = Boolean(replacementText && (exchangeType.includes(\"swap\") || replacementText.length >= 4));\n\n        if (!selectedItems.length) {\n          return {\n            status: \"unknown\",\n            heading: \"Exchange balance\",\n            customerLabel: \"Select products to calculate balance\",\n            detail: \"Tick the products being exchanged and the price difference will update from their current prices.\",\n            merchantAction: \"Confirm the selected returned items, then set up any payment link or refund difference.\",\n            selectedValue: selectedTotal.label,\n            replacementValue: \"Select replacement\",\n            matchedReplacement: \"\"\n          };\n        }\n\n        if (!selectedTotal.known) {\n          return {\n            status: \"unknown\",\n            heading: \"Exchange balance\",\n            customerLabel: \"Price difference to confirm\",\n            detail: \"We will confirm the replacement price by email before setting up any payment or refund.\",\n            merchantAction: \"Confirm the returned item value and replacement item price, then email the customer.\",\n            selectedValue: selectedTotal.label,\n            replacementValue: \"To confirm\",\n            matchedReplacement: \"\"\n          };\n        }\n\n        let replacementMatch = null;\n        if (shouldMatchCatalog) {\n          replacementMatch = await findReplacementProduct(replacementText, requestDetails.exchange.size);\n        }\n\n        if (!replacementMatch && (exchangeType.includes(\"different size\") || exchangeType.includes(\"different colour\"))) {\n          return {\n            status: \"same\",\n            heading: \"Exchange balance\",\n            customerLabel: \"No price difference expected\",\n            detail: `${selectedTotal.label} returned item value. Same product size/colour exchanges are expected to be the same price.`,\n            merchantAction: \"No payment or refund is expected unless stock or current pricing has changed.\",\n            selectedValue: selectedTotal.label,\n            replacementValue: selectedTotal.label,\n            matchedReplacement: \"Same product exchange\"\n          };\n        }\n\n        if (!replacementMatch) {\n          return {\n            status: \"unknown\",\n            heading: \"Exchange balance\",\n            customerLabel: \"Price difference to confirm\",\n            detail: `Returned item value is ${selectedTotal.label}. We will confirm the replacement item price by email.`,\n            merchantAction: \"Confirm the replacement item price, then send the customer a payment link or refund the difference.\",\n            selectedValue: selectedTotal.label,\n            replacementValue: \"To confirm\",\n            matchedReplacement: \"\"\n          };\n        }\n\n        const replacementTotal = replacementMatch.price * selectedTotal.quantity;\n        const difference = replacementTotal - selectedTotal.amount;\n        const amountLabel = formatMoneyAmount(Math.abs(difference));\n        const replacementLabel = formatMoneyAmount(replacementTotal);\n        const matchedReplacement = [\n          replacementMatch.title,\n          replacementMatch.variantTitle\n        ].filter(Boolean).join(\" - \");\n\n        if (difference > 0.009) {\n          return {\n            status: \"pay\",\n            heading: \"Exchange balance\",\n            customerLabel: `${amountLabel} to pay`,\n            detail: `Returned item value ${selectedTotal.label}. Replacement ${replacementLabel}.`,\n            merchantAction: `Send the customer a payment link for ${amountLabel} after confirming stock.`,\n            selectedValue: selectedTotal.label,\n            replacementValue: replacementLabel,\n            matchedReplacement\n          };\n        }\n\n        if (difference < -0.009) {\n          return {\n            status: \"refund\",\n            heading: \"Exchange balance\",\n            customerLabel: `${amountLabel} refund expected`,\n            detail: `Returned item value ${selectedTotal.label}. Replacement ${replacementLabel}.`,\n            merchantAction: `Refund ${amountLabel} after confirming stock and receiving the returned item.`,\n            selectedValue: selectedTotal.label,\n            replacementValue: replacementLabel,\n            matchedReplacement\n          };\n        }\n\n        return {\n          status: \"same\",\n          heading: \"Exchange balance\",\n          customerLabel: \"No price difference expected\",\n          detail: `Returned item value ${selectedTotal.label}. Replacement ${replacementLabel}.`,\n          merchantAction: \"No payment or refund is expected unless stock or current pricing has changed.\",\n          selectedValue: selectedTotal.label,\n          replacementValue: replacementLabel,\n          matchedReplacement\n        };\n      };\n\n      const balanceSummaryMarkup = (summary) => `\n        <span>${escapeHtml(summary.heading || \"Balance\")}</span>\n        <strong>${escapeHtml(summary.customerLabel || \"To confirm\")}</strong>\n        <p>${escapeHtml(summary.detail || \"\")}</p>\n      `;\n\n      const updateExchangeBalancePreview = async () => {\n        if (!exchangeBalanceTarget || !activeOrder) return;\n        if (getSelectedRequestType() !== \"exchange\") return;\n\n        const token = ++balancePreviewToken;\n        const requestDetails = getRequestDetails(\"exchange\");\n        const selectedItems = getSelectedItems();\n        exchangeBalanceTarget.dataset.hcxBalanceStatus = \"loading\";\n        exchangeBalanceTarget.innerHTML = `\n          <span>Exchange balance</span>\n          <strong>Checking price difference</strong>\n          <p>Matching the replacement item against current product prices.</p>\n        `;\n\n        const summary = await exchangeBalanceSummary(requestDetails, selectedItems);\n        if (token !== balancePreviewToken) return;\n\n        exchangeBalanceTarget.dataset.hcxBalanceStatus = summary.status || \"unknown\";\n        exchangeBalanceTarget.innerHTML = balanceSummaryMarkup(summary);\n      };\n\n      const getRequestDetails = (requestType) => {\n        const exchangeDetails = {\n          type: getFieldValue(exchangeTypeField),\n          size: getFieldValue(exchangeSizeField),\n          item: getFieldValue(exchangeItemField)\n        };\n\n        return {\n          type: requestType,\n          reason: getFieldValue(reasonField),\n          details: getFieldValue(detailsField),\n          exchange: exchangeDetails,\n          hasExchangeRequest: Boolean(exchangeDetails.type || exchangeDetails.size || exchangeDetails.item)\n        };\n      };\n\n      const inferRequestTypeFromDetails = () => getSelectedRequestType();\n\n      const formatRequestSummaryRows = (requestDetails, requestType, balanceSummary) => {\n        const rows = [\n          [\"Reason\", requestDetails.reason || \"Not provided\"],\n          [\"Extra details\", requestDetails.details || \"Not provided\"]\n        ];\n\n        if (requestType === \"exchange\") {\n          rows.push(\n            [\"Exchange type\", requestDetails.exchange.type || \"Not provided\"],\n            [\"Requested size\", requestDetails.exchange.size || \"Not provided\"],\n            [\"Replacement item / colour\", requestDetails.exchange.item || \"Not provided\"],\n            [\"Exchange balance\", balanceSummary.customerLabel || \"To confirm\"]\n          );\n          if (balanceSummary.matchedReplacement) {\n            rows.push([\"Matched replacement\", balanceSummary.matchedReplacement]);\n          }\n        } else {\n          rows.push([\"Refund estimate\", balanceSummary.customerLabel || \"To confirm\"]);\n        }\n\n        return rows;\n      };\n\n      const setReturnRequestActionsEnabled = (statusTarget, enabled) => {\n        const requestCard = statusTarget?.closest?.(\".hcx-return-request-card\");\n        const sendLink = requestCard?.querySelector?.(\"[data-hcx-send-return-request]\");\n        const copyButton = requestCard?.querySelector?.(\"[data-hcx-copy-return-request]\");\n\n        if (sendLink) {\n          const storedHref = sendLink.dataset.hcxRequestHref || sendLink.getAttribute(\"href\") || \"\";\n          if (storedHref) sendLink.dataset.hcxRequestHref = storedHref;\n\n          if (enabled) {\n            if (sendLink.dataset.hcxRequestHref) sendLink.setAttribute(\"href\", sendLink.dataset.hcxRequestHref);\n            sendLink.removeAttribute(\"aria-disabled\");\n            sendLink.removeAttribute(\"tabindex\");\n          } else {\n            sendLink.removeAttribute(\"href\");\n            sendLink.setAttribute(\"aria-disabled\", \"true\");\n            sendLink.setAttribute(\"tabindex\", \"-1\");\n          }\n        }\n\n        if (copyButton) copyButton.disabled = !enabled;\n      };\n\n      const notifyMerchantRequest = async (payload, statusTarget) => {\n        setReturnRequestActionsEnabled(statusTarget, true);\n\n        if (!requestUrl) {\n          if (statusTarget) statusTarget.textContent = \"Open the email below to send this request to HERCXLES.\";\n          return;\n        }\n\n        const notificationKey = [\n          payload.reference,\n          payload.requestType,\n          payload.reason,\n          payload.details,\n          payload.exchange?.type,\n          payload.exchange?.size,\n          payload.exchange?.item,\n          payload.balance?.customerLabel,\n          payload.items?.join(\"|\")\n        ].join(\"::\");\n\n        if (sentRequestNotifications.has(notificationKey)) {\n          if (statusTarget) statusTarget.textContent = \"This request has already been prepared. You can still open or copy the email below.\";\n          return;\n        }\n\n        try {\n          if (statusTarget) statusTarget.textContent = \"Request ready. Sending a copy to HERCXLES.\";\n          const { payload: notificationPayload, response } = await fetchHcxOrderLookup(requestUrl, payload);\n          if (response.ok && notificationPayload?.notificationSent) {\n            sentRequestNotifications.add(notificationKey);\n            if (statusTarget) statusTarget.textContent = \"Request sent to HERCXLES. Keep your proof of postage after posting.\";\n            return;\n          }\n\n          if (response.ok && notificationPayload?.error === \"email_notification_not_configured\") {\n            setReturnRequestActionsEnabled(statusTarget, true);\n            if (statusTarget) statusTarget.textContent = \"Order verified. Open the email below to send this request to HERCXLES.\";\n            return;\n          }\n\n          if (returnRequestVerificationErrors.has(notificationPayload?.error)) {\n            if (statusTarget) statusTarget.textContent =\n              notificationPayload.error === \"order_customer_mismatch\"\n                ? returnRequestVerificationMessage\n                : notificationPayload.error === \"return_window_closed\"\n                  ? \"This order is outside the 14-day return window. Contact us if you still need help.\"\n                  : notificationPayload.error === \"exchange_window_closed\"\n                    ? \"This order is outside the 30-day exchange window. Contact us if you still need help.\"\n                    : \"Automatic send could not verify the request. Use the email button below or contact us with your order number.\";\n            return;\n          }\n        } catch (_) {\n          if (statusTarget) statusTarget.textContent = \"Automatic send is unavailable. Use the email button below and keep your proof of postage.\";\n          return;\n        }\n\n        if (statusTarget) {\n          statusTarget.textContent = \"Automatic send is unavailable. Use the email button below and keep your proof of postage.\";\n        }\n      };\n\n      const renderLabel = async (action) => {\n        if (!activeOrder || !labelTarget) return;\n\n        const selectedItems = getSelectedItems();\n        if (!selectedItems.length) {\n          setRequestError(\"Select at least one item before creating the return or exchange instructions.\");\n          return;\n        }\n\n        const requestType = action === \"exchange\" ? \"exchange\" : \"return\";\n        const actionLabel = requestType === \"exchange\" ? \"Exchange\" : \"Return\";\n        const returnWindow = activeOrder.returnWindow || getReturnWindow(activeOrder);\n\n        if (requestType === \"return\" && !returnWindow.canReturn) {\n          setRequestError(returnWindow.status === \"exchange_only\"\n            ? \"This order is past the 14-day return window. You can still request an exchange until 30 days after delivery.\"\n            : \"This order is outside the return and exchange window. Please contact us for help.\");\n          return;\n        }\n\n        if (requestType === \"exchange\" && !returnWindow.canExchange) {\n          setRequestError(\"This order is outside the exchange window. Please contact us for help.\");\n          return;\n        }\n\n        const requestDetails = getRequestDetails(requestType);\n        const balanceSummary = requestType === \"exchange\"\n          ? await exchangeBalanceSummary(requestDetails, selectedItems)\n          : returnBalanceSummary(selectedItems);\n\n        if (requestType === \"exchange\" && !requestDetails.hasExchangeRequest && !requestDetails.details) {\n          setRequestError(\"Add the size or replacement item you want before completing this exchange.\");\n          return;\n        }\n\n        if (error) error.hidden = true;\n        const instructionTitle = `${actionLabel} instructions`;\n        const reference = requestReference(activeOrder, requestType);\n        const orderName = activeOrder.name || activeOrder.number || \"Order\";\n        const customerAddress = [\n          activeOrder.shippingAddress?.name,\n          activeOrder.shippingAddress?.line1,\n          activeOrder.shippingAddress?.line2,\n          [activeOrder.shippingAddress?.city, activeOrder.shippingAddress?.postcode].filter(Boolean).join(\" \"),\n          activeOrder.shippingAddress?.country\n        ].filter(Boolean);\n        const selectedItemLines = selectedItems.map((item) =>\n          [\n            item.title,\n            item.variantTitle,\n            item.quantity ? `Qty ${item.quantity}` : \"\"\n        ].filter(Boolean).join(\", \")\n        );\n        const reasonHeading = requestType === \"exchange\" ? \"Exchange request / reason\" : \"Return reason\";\n        const requestSummaryRows = formatRequestSummaryRows(requestDetails, requestType, balanceSummary);\n        const requestSummaryMarkup = requestSummaryRows\n          .map(([label, value]) => `\n            <div>\n              <dt>${escapeHtml(label)}</dt>\n              <dd>${escapeHtml(value)}</dd>\n            </div>\n          `)\n          .join(\"\");\n        const completionSteps = requestType === \"exchange\"\n          ? [\n            \"Pack the selected item or items unused, unwashed and in resellable condition.\",\n            \"Click Complete exchange request below and send the pre-filled email so we know what is on the way.\",\n            \"Place a note inside with the order number and request reference. The email request covers the exchange details.\",\n            \"Print the return address label and attach it to the parcel. This is an address label only and does not include paid postage.\",\n            \"Take the parcel to the Post Office or your chosen courier, pay for tracked delivery, and ask for a receipt or proof of postage.\",\n            \"Keep the receipt, tracking number and proof of postage until the exchange is complete. If the replacement is unavailable, the team will email you before dispatching.\"\n          ]\n          : [\n            \"Pack the selected item or items unused, unwashed and in resellable condition.\",\n            \"Click Complete return request below and send the pre-filled email so we know what is on the way.\",\n            \"Place a note inside with the order number and request reference. The email request covers the return reason.\",\n            \"Print the return address label and attach it to the parcel. This is an address label only and does not include paid postage.\",\n            \"Take the parcel to the Post Office or your chosen courier, pay for tracked delivery, and ask for a receipt or proof of postage.\",\n            \"Keep the receipt, tracking number and proof of postage until the return is complete. Refunds are processed after the item has been checked.\"\n          ];\n        const exchangeEmailLines = requestType === \"exchange\"\n          ? [\n            \"Exchange details:\",\n            `Exchange type: ${requestDetails.exchange.type || \"Not provided\"}`,\n            `Requested size: ${requestDetails.exchange.size || \"Not provided\"}`,\n            `Replacement item / colour: ${requestDetails.exchange.item || \"Not provided\"}`,\n            `Exchange balance: ${balanceSummary.customerLabel || \"To confirm\"}`,\n            `Returned item value: ${balanceSummary.selectedValue || \"To confirm\"}`,\n            `Replacement value: ${balanceSummary.replacementValue || \"To confirm\"}`,\n            balanceSummary.matchedReplacement ? `Matched replacement: ${balanceSummary.matchedReplacement}` : \"\",\n            `Merchant action: ${balanceSummary.merchantAction || \"Confirm by email\"}`\n          ]\n            .filter(Boolean)\n          : [];\n        const supportSubject = `${actionLabel} request ${orderName}`;\n        const supportBody = [\n          `${actionLabel} request`,\n          `Reference: ${reference}`,\n          `Order: ${orderName}`,\n          `Customer contact: ${activeOrder.email || activeOrder.phone || \"Matched order contact\"}`,\n          `Window status: ${returnWindow.summary}`,\n          \"\",\n          `Items:`,\n          ...selectedItemLines.map((line) => `- ${line}`),\n          \"\",\n          `${reasonHeading}: ${requestDetails.reason || \"Not provided\"}`,\n          `Extra details: ${requestDetails.details || \"Not provided\"}`,\n          ...(exchangeEmailLines.length ? [\"\", ...exchangeEmailLines] : []),\n          requestType === \"return\" ? \"\" : \"\",\n          requestType === \"return\" ? `Refund estimate: ${balanceSummary.customerLabel || \"To confirm\"}` : \"\",\n          requestType === \"return\" ? `Merchant action: ${balanceSummary.merchantAction || \"Confirm refund after inspection\"}` : \"\",\n          \"\",\n          \"Postage: Customer will pay for tracked delivery and keep the receipt/proof of postage.\",\n          \"Tracking number: Customer to add after posting if available.\"\n        ].filter((line, index, lines) => line !== \"\" || lines[index - 1] !== \"\").join(\"\\n\");\n        const supportHref = `mailto:${supportEmail}?subject=${encodeURIComponent(supportSubject)}&body=${encodeURIComponent(supportBody)}`;\n        const notificationPayload = {\n          reference,\n          requestType,\n          actionLabel,\n          order_number: orderName,\n          order: orderName,\n          customer_detail: activeOrder.email || activeOrder.phone || \"\",\n          customerContact: activeOrder.email || activeOrder.phone || \"Matched order contact\",\n          windowStatus: returnWindow.summary,\n          items: selectedItemLines,\n          reason: requestDetails.reason || \"Not provided\",\n          details: requestDetails.details || \"Not provided\",\n          exchange: requestDetails.exchange,\n          balance: balanceSummary,\n          subject: supportSubject,\n          body: supportBody\n        };\n\n        labelTarget.innerHTML = `\n          <div class=\"hcx-return-portal__label-actions\">\n            <button type=\"button\" data-hcx-print-return-address-label>Print address label</button>\n          </div>\n          <section class=\"hcx-return-address-label\" aria-label=\"Printable return address label\">\n            <div class=\"hcx-return-address-label__brand\">\n              <span>Return to</span>\n              <strong>HERCXLES RETURNS</strong>\n            </div>\n            <address>${returnAddressLines.slice(1).map(escapeHtml).join(\"<br>\")}</address>\n            <div class=\"hcx-return-address-label__meta\">\n              <p>${escapeHtml(reference)}</p>\n              <p>Order: ${escapeHtml(orderName)}</p>\n            </div>\n          </section>\n          <section class=\"hcx-return-label-sheet\" aria-label=\"${escapeAttribute(instructionTitle)}\">\n            <header>\n              <div>\n                <span>Returns</span>\n                <strong>${escapeHtml(instructionTitle)}</strong>\n              </div>\n              <p>${escapeHtml(reference)}</p>\n            </header>\n            <div class=\"hcx-return-label-sheet__grid\">\n              <div class=\"hcx-return-label-sheet__box hcx-return-label-sheet__box--to\">\n                <span>Send to</span>\n                <address>${returnAddressLines.map(escapeHtml).join(\"<br>\")}</address>\n              </div>\n              <div class=\"hcx-return-label-sheet__box\">\n                <span>Request</span>\n                <strong>${escapeHtml(actionLabel)}</strong>\n                <p>Order: ${escapeHtml(orderName)}</p>\n                ${activeOrder.createdAt ? `<p>Placed: ${escapeHtml(activeOrder.createdAt)}</p>` : \"\"}\n              </div>\n              <div class=\"hcx-return-label-sheet__box\">\n                <span>Matched customer</span>\n                ${customerAddress.length ? `<address>${customerAddress.map(escapeHtml).join(\"<br>\")}</address>` : `<p>${escapeHtml(activeOrder.email || \"Matched Shopify customer\")}</p>`}\n              </div>\n              <div class=\"hcx-return-label-sheet__box\">\n                <span>Items</span>\n                <ul>\n                  ${selectedItemLines.map((line) => `<li>${escapeHtml(line)}</li>`).join(\"\")}\n                </ul>\n              </div>\n            </div>\n            <div class=\"hcx-return-label-sheet__reason\">\n              <span>${escapeHtml(reasonHeading)}</span>\n              <dl class=\"hcx-return-request-summary\">\n                ${requestSummaryMarkup}\n              </dl>\n            </div>\n            <div class=\"hcx-return-label-sheet__instructions\">\n              <span>How to complete your ${escapeHtml(actionLabel.toLowerCase())}</span>\n              <ol>\n                ${completionSteps.map((step) => `<li>${escapeHtml(step)}</li>`).join(\"\")}\n              </ol>\n              <p>Email <a href=\"${escapeAttribute(supportHref)}\">${escapeHtml(supportEmail)}</a> with the tracking number if you want the team to confirm receipt.</p>\n            </div>\n            <div class=\"hcx-return-request-card\">\n              <span>Send request email</span>\n              <strong>Complete ${escapeHtml(actionLabel.toLowerCase())} request</strong>\n              <p>${escapeHtml(requestType === \"exchange\" ? balanceSummary.customerLabel : balanceSummary.customerLabel)}. This request also tells HERCXLES what to set up before the item is processed.</p>\n              <div class=\"hcx-return-request-card__actions\">\n                <a href=\"${escapeAttribute(supportHref)}\" data-hcx-send-return-request data-hcx-request-href=\"${escapeAttribute(supportHref)}\">Complete ${escapeHtml(actionLabel.toLowerCase())} request</a>\n                <button type=\"button\" data-hcx-copy-return-request>Copy request details</button>\n              </div>\n              <p class=\"hcx-return-request-card__status\" data-hcx-return-request-status aria-live=\"polite\"></p>\n            </div>\n            <div class=\"hcx-return-label-sheet__footer\">\n              <p>${escapeHtml(parcelNote)}</p>\n              <p>Do not send items back without the order number and request reference inside the parcel.</p>\n            </div>\n          </section>\n        `;\n        labelTarget.hidden = false;\n        const requestStatus = labelTarget.querySelector(\"[data-hcx-return-request-status]\");\n        setReturnRequestActionsEnabled(requestStatus, true);\n        labelTarget.querySelector(\"[data-hcx-print-return-address-label]\")?.addEventListener(\"click\", () => {\n          document.body.classList.add(\"hcx-printing-return-label\");\n          const clearPrintMode = () => document.body.classList.remove(\"hcx-printing-return-label\");\n          window.addEventListener(\"afterprint\", clearPrintMode, { once: true });\n          window.print();\n          window.setTimeout(clearPrintMode, 1500);\n        });\n        labelTarget.querySelector(\"[data-hcx-copy-return-request]\")?.addEventListener(\"click\", async () => {\n          const status = labelTarget.querySelector(\"[data-hcx-return-request-status]\");\n          try {\n            const copied = await copyText(`To: ${supportEmail}\\nSubject: ${supportSubject}\\n\\n${supportBody}`);\n            if (status) status.textContent = copied\n              ? \"Request details copied. Paste them into an email to us before posting.\"\n              : \"Copy did not complete. Use the complete request button to open the email instead.\";\n          } catch (_) {\n            if (status) status.textContent = \"Copy did not complete. Use the complete request button to open the email instead.\";\n          }\n        });\n        notifyMerchantRequest(notificationPayload, requestStatus);\n        labelTarget.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      };\n\n      const showOrderWorkspace = (payload, rawOrderNumber, requestedDetail, options = {}) => {\n        activeOrder = normaliseOrderPayload(payload, rawOrderNumber, requestedDetail);\n        activeOrder.needsManualReview = Boolean(activeOrder.needsManualReview || options.needsManualReview);\n        portal.classList.toggle(\"is-manual-review\", activeOrder.needsManualReview);\n        if (matchLabel) matchLabel.textContent = \"Order details\";\n        clearLabel();\n        renderOrderSummary(activeOrder);\n        renderOrderItems(activeOrder);\n        renderReturnWindowControls(activeOrder);\n        updateExchangeBalancePreview();\n\n        if (error) error.hidden = true;\n        hideNotice();\n        if (result) {\n          result.hidden = false;\n          result.focus?.({ preventScroll: true });\n          result.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        }\n      };\n\n      const showManualReviewWorkspace = (_rawOrderNumber, _requestedDetail, message = \"\") => {\n        setError(message || lookupUnavailableMessage);\n      };\n\n      const lookupOrderRemotely = async (orderNumber, customerDetail) => {\n        if (!lookupUrl) return null;\n\n        const { payload, response } = await fetchHcxOrderLookup(lookupUrl, {\n          order_number: orderNumber,\n          customer_detail: customerDetail\n        });\n\n        if (!response.ok) {\n          return {\n            matched: false,\n            unavailable: true,\n            status: response.status,\n            error: payload?.error || \"\",\n            message: hcxOrderLookupErrorMessage(payload, response.status, lookupUnavailableMessage)\n          };\n        }\n\n        return payload;\n      };\n\n      const handleReturnRequest = async (event) => {\n        event?.preventDefault();\n        event?.stopPropagation();\n\n        syncSubmitState();\n        if (submitButton?.disabled || isSubmitting) return false;\n\n        const formData = new FormData(form);\n        const rawOrderNumber = String(formData.get(\"order_number\") || \"\").trim();\n        const requestedDetail = String(formData.get(\"customer_detail\") || \"\").trim();\n\n        const matchedOrder = orders.find((order) => orderMatches(rawOrderNumber, order) && detailMatches(requestedDetail, order));\n\n        if (matchedOrder) {\n          showOrderWorkspace(matchedOrder, rawOrderNumber, requestedDetail);\n          return false;\n        }\n\n        if (lookupUrl) {\n          try {\n            isSubmitting = true;\n            if (submitButton) submitButton.textContent = \"Checking\";\n            syncSubmitState();\n\n            const lookupResult = await lookupOrderRemotely(rawOrderNumber, requestedDetail);\n\n            if (lookupResult?.matched || lookupResult?.ok || lookupResult?.order || lookupResult?.lineItems || lookupResult?.items) {\n              showOrderWorkspace(lookupResult, rawOrderNumber, requestedDetail);\n              return false;\n            }\n\n            if (lookupResult?.unavailable) {\n              showManualReviewWorkspace(rawOrderNumber, requestedDetail, lookupResult.message || lookupUnavailableMessage);\n              return false;\n            }\n\n            setError(lookupNotFoundMessage);\n            return false;\n          } catch (_) {\n            showManualReviewWorkspace(rawOrderNumber, requestedDetail, lookupUnavailableMessage);\n            return false;\n          } finally {\n            isSubmitting = false;\n            if (submitButton) submitButton.textContent = defaultButtonText;\n            syncSubmitState();\n          }\n        }\n\n        if (hasLocalOrders) {\n          setError(lookupNotFoundMessage);\n        } else {\n          showManualReviewWorkspace(rawOrderNumber, requestedDetail, lookupUnavailableMessage);\n        }\n        return false;\n      };\n\n      form.addEventListener(\"submit\", handleReturnRequest);\n\n      actionButtons.forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          renderLabel(button.dataset.hcxReturnAction || \"return\").catch(() => {\n            setRequestError(\"We could not prepare this request. Please try again or email us with your order number.\");\n          });\n        });\n      });\n\n      confirmButton?.addEventListener(\"click\", () => {\n        renderLabel(inferRequestTypeFromDetails()).catch(() => {\n          setRequestError(\"We could not prepare this request. Please try again or email us with your order number.\");\n        });\n      });\n\n      portal.addEventListener(\"change\", (event) => {\n        if (event.target?.matches?.(\"[data-hcx-return-item-checkbox]\")) {\n          clearLabel();\n          updateConfirmButtonState();\n          updateExchangeBalancePreview();\n        }\n      });\n\n      requestTypeFields.forEach((field) => {\n        field.addEventListener(\"change\", () => {\n          clearLabel();\n          if (error) error.hidden = true;\n          updateRequestTypeUi();\n          updateConfirmButtonState();\n          updateExchangeBalancePreview();\n        });\n      });\n\n      requestFields.forEach((field) => {\n        const handleRequestFieldChange = () => {\n          clearLabel();\n          if (error) error.hidden = true;\n          updateConfirmButtonState();\n          if (field === exchangeTypeField || field === exchangeSizeField || field === exchangeItemField) {\n            updateExchangeBalancePreview();\n          }\n        };\n        field.addEventListener(\"input\", handleRequestFieldChange);\n        field.addEventListener(\"change\", handleRequestFieldChange);\n      });\n\n      const closeHelpPopovers = () => {\n        helpButtons.forEach((button) => {\n          const field = button.closest(\".hcx-return-portal__field\");\n          field?.classList.remove(\"is-help-open\");\n          button.setAttribute(\"aria-expanded\", \"false\");\n        });\n      };\n\n      helpButtons.forEach((button) => {\n        const field = button.closest(\".hcx-return-portal__field\");\n        if (!field) return;\n\n        button.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n          event.stopPropagation();\n\n          const shouldOpen = !field.classList.contains(\"is-help-open\");\n          closeHelpPopovers();\n          field.classList.toggle(\"is-help-open\", shouldOpen);\n          button.setAttribute(\"aria-expanded\", shouldOpen ? \"true\" : \"false\");\n        });\n      });\n\n      portal.addEventListener(\"click\", (event) => {\n        const target = event.target;\n        if (!target?.closest) return;\n        if (target.closest(\"[data-hcx-return-help]\") || target.closest(\"[data-hcx-return-help-popover]\")) return;\n        closeHelpPopovers();\n      });\n\n      portal.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Escape\") closeHelpPopovers();\n      });\n\n      document.addEventListener(\"click\", (event) => {\n        const target = event.target;\n        if (!target?.closest || portal.contains(target)) return;\n        closeHelpPopovers();\n      });\n\n      requiredFields.forEach((field) => {\n        field.addEventListener(\"input\", syncSubmitState);\n        field.addEventListener(\"change\", syncSubmitState);\n        field.addEventListener(\"keyup\", syncSubmitState);\n      });\n      syncSubmitState();\n    });\n  };\n\n  const initFaqPage = () => {\n    document.querySelectorAll(\"[data-hcx-faq-page]\").forEach((faq) => {\n      if (faq.dataset.hcxFaqBound === \"true\") return;\n      faq.dataset.hcxFaqBound = \"true\";\n\n      const search = faq.querySelector(\"[data-hcx-faq-search]\");\n      const filters = [...faq.querySelectorAll(\"[data-hcx-faq-filter]\")];\n      const items = [...faq.querySelectorAll(\"[data-hcx-faq-item]\")];\n      const count = faq.querySelector(\"[data-hcx-faq-count]\");\n      const empty = faq.querySelector(\"[data-hcx-faq-empty]\");\n      let activeCategory = \"all\";\n\n      const normalize = (value = \"\") =>\n        String(value)\n          .toLowerCase()\n          .replace(/\\s+/g, \" \")\n          .trim();\n\n      const setCount = (visibleCount) => {\n        if (!count) return;\n        count.textContent = visibleCount === 1 ? \"1 answer\" : `${visibleCount} answers`;\n      };\n\n      const applyFilters = () => {\n        const query = normalize(search?.value || \"\");\n        let visibleCount = 0;\n\n        items.forEach((item) => {\n          const category = item.dataset.category || \"\";\n          const haystack = normalize(`${item.textContent || \"\"} ${item.dataset.keywords || \"\"} ${category}`);\n          const categoryMatch = activeCategory === \"all\" || category.split(/\\s+/).includes(activeCategory);\n          const queryMatch = !query || haystack.includes(query);\n          const isVisible = categoryMatch && queryMatch;\n\n          item.hidden = !isVisible;\n          if (!isVisible) item.open = false;\n          if (isVisible) visibleCount += 1;\n        });\n\n        setCount(visibleCount);\n        if (empty) empty.hidden = visibleCount !== 0;\n      };\n\n      filters.forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          activeCategory = button.dataset.hcxFaqFilter || \"all\";\n          filters.forEach((filterButton) => {\n            const isActive = filterButton === button;\n            filterButton.classList.toggle(\"is-active\", isActive);\n            filterButton.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n          });\n          applyFilters();\n        });\n      });\n\n      items.forEach((item) => {\n        item.addEventListener(\"toggle\", () => {\n          if (!item.open) return;\n          items.forEach((otherItem) => {\n            if (otherItem !== item) otherItem.open = false;\n          });\n        });\n      });\n\n      search?.addEventListener(\"input\", applyFilters);\n      filters.forEach((button) => button.setAttribute(\"aria-pressed\", button.classList.contains(\"is-active\") ? \"true\" : \"false\"));\n      applyFilters();\n    });\n  };\n\n  const initOrderTrackingHubs = () => {\n    document.querySelectorAll(\"[data-hcx-tracking-hub]\").forEach((hub) => {\n      if (hub.dataset.hcxTrackingBound === \"true\") return;\n      hub.dataset.hcxTrackingBound = \"true\";\n\n      const filters = [...hub.querySelectorAll(\"[data-hcx-tracking-filter]\")];\n      const search = hub.querySelector(\"[data-hcx-tracking-search]\");\n      const cards = [...hub.querySelectorAll(\"[data-hcx-tracking-card]\")];\n      const empty = hub.querySelector(\"[data-hcx-tracking-empty]\");\n      const lookup = hub.querySelector(\"[data-hcx-order-lookup]\");\n      const lookupForm = lookup?.querySelector(\"[data-hcx-order-lookup-form]\");\n      const lookupError = lookup?.querySelector(\"[data-hcx-order-lookup-error]\");\n      const lookupResult = lookup?.querySelector(\"[data-hcx-order-lookup-result]\");\n      const lookupButton = lookupForm?.querySelector('button[type=\"submit\"]');\n      const lookupFields = lookupForm ? [...lookupForm.querySelectorAll(\"[required]\")] : [];\n      const lookupUrl = lookup?.dataset.hcxOrderLookupUrl || \"\";\n      const lookupDefaultButtonText = lookupButton?.textContent || \"Track order\";\n      let activeFilter = \"all\";\n      let selectedCard = cards.find((card) => card.classList.contains(\"is-selected\")) || cards[0] || null;\n      let isLookupSubmitting = false;\n\n      const normalize = (value = \"\") =>\n        String(value)\n          .toLowerCase()\n          .replace(/\\s+/g, \" \")\n          .trim();\n\n      const escapeHtml = (value = \"\") =>\n        String(value).replace(/[&<>\"']/g, (char) => ({\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          \"\\\"\": \"&quot;\",\n          \"'\": \"&#39;\"\n        }[char]));\n\n      const escapeAttribute = (value = \"\") => escapeHtml(value).replace(/`/g, \"&#96;\");\n\n      const firstValue = (...values) => values.find((value) => String(value || \"\").trim());\n\n      const asArray = (value) => {\n        if (Array.isArray(value)) return value;\n        if (Array.isArray(value?.edges)) return value.edges.map((edge) => edge?.node).filter(Boolean);\n        if (Array.isArray(value?.nodes)) return value.nodes;\n        return [];\n      };\n\n      const clampProgress = (value) => {\n        const number = Number(value);\n        if (!Number.isFinite(number)) return 18;\n        return Math.max(0, Math.min(100, number));\n      };\n\n      const isRoyalMail = (shipment = {}) =>\n        normalize(`${shipment.company || shipment.carrier || \"\"} ${shipment.url || shipment.trackingUrl || \"\"}`).includes(\"royal mail\") ||\n        normalize(`${shipment.company || shipment.carrier || \"\"} ${shipment.url || shipment.trackingUrl || \"\"}`).includes(\"royalmail\");\n\n      const publicTrackingUrl = (shipment = {}) => {\n        const url = String(firstValue(shipment.url, shipment.trackingUrl, \"\") || \"\").trim();\n        if (url) return url;\n\n        const number = String(firstValue(shipment.number, shipment.trackingNumber, \"\") || \"\").trim();\n        if (number && isRoyalMail(shipment)) {\n          return `https://www.royalmail.com/track-your-item#/tracking-results/${encodeURIComponent(number)}`;\n        }\n\n        return \"\";\n      };\n\n      const normaliseShipment = (shipment = {}, index = 0) => {\n        const node = shipment.node || shipment;\n        const company = String(firstValue(node.company, node.carrier, node.trackingCompany, \"\") || \"\");\n        const number = String(firstValue(node.number, node.trackingNumber, node.tracking_number, \"\") || \"\");\n        const url = publicTrackingUrl({ ...node, company, number });\n\n        return {\n          id: String(firstValue(node.id, `${company || \"shipment\"}-${number || index}`)),\n          company,\n          carrier: company,\n          number,\n          trackingNumber: number,\n          url,\n          trackingUrl: url,\n          status: String(firstValue(node.status, node.latestStatus, node.displayStatus, \"\") || \"\"),\n          estimatedDeliveryAt: String(firstValue(node.estimatedDeliveryAt, node.estimated_delivery_at, \"\") || \"\"),\n          lastUpdated: String(firstValue(node.lastUpdated, node.updatedAt, node.updated_at, node.latestEvent?.happenedAt, \"\") || \"\")\n        };\n      };\n\n      const fallbackTrackingForOrder = (order) => {\n        const shipments = order.shipments || [];\n        const statusText = normalize([\n          order.fulfillmentStatus,\n          ...shipments.flatMap((shipment) => [shipment.status, shipment.company])\n        ].join(\" \"));\n        const financialText = normalize(order.financialStatus || \"\");\n        const royalMailShipment = shipments.find(isRoyalMail);\n        const primaryShipment = royalMailShipment || shipments.find((shipment) => shipment.number || shipment.url || shipment.company) || shipments[0] || {};\n        const hasTracking = shipments.some((shipment) => shipment.number || shipment.url);\n\n        if (statusText.includes(\"delivered\")) {\n          return {\n            state: \"complete\",\n            label: \"Delivered\",\n            detail: \"Your order has been delivered.\",\n            progress: 100,\n            step: 6,\n            totalSteps: 6,\n            localStepLabel: royalMailShipment ? \"Royal Mail\" : \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (statusText.includes(\"out for delivery\")) {\n          return {\n            state: \"transit\",\n            label: \"Out for delivery\",\n            detail: \"Your order is out for delivery.\",\n            progress: 92,\n            step: 5,\n            totalSteps: 6,\n            localStepLabel: royalMailShipment ? \"Royal Mail\" : \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (royalMailShipment) {\n          return {\n            state: \"transit\",\n            label: \"On its way\",\n            detail: \"Your order is on its way.\",\n            progress: 80,\n            step: 4,\n            totalSteps: 6,\n            localStepLabel: \"Royal Mail\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (statusText.includes(\"in transit\") || statusText.includes(\"on its way\")) {\n          return {\n            state: \"transit\",\n            label: \"On its way\",\n            detail: \"Your order is on its way.\",\n            progress: 72,\n            step: 4,\n            totalSteps: 6,\n            localStepLabel: \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (statusText.includes(\"preparing\")) {\n          return {\n            state: \"active\",\n            label: \"Preparing to ship\",\n            detail: \"We are preparing to ship your order.\",\n            progress: 30,\n            step: 2,\n            totalSteps: 6,\n            localStepLabel: \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (hasTracking || statusText.includes(\"fulfilled\")) {\n          return {\n            state: \"transit\",\n            label: \"Dispatched\",\n            detail: \"Your order has been dispatched.\",\n            progress: 48,\n            step: 3,\n            totalSteps: 6,\n            localStepLabel: \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        if (financialText.includes(\"paid\") || financialText.includes(\"authorized\")) {\n          return {\n            state: \"active\",\n            label: \"Preparing to ship\",\n            detail: \"We are preparing to ship your order.\",\n            progress: 30,\n            step: 2,\n            totalSteps: 6,\n            localStepLabel: \"Local carrier\",\n            carrier: primaryShipment.company,\n            trackingNumber: primaryShipment.number,\n            trackingUrl: primaryShipment.url\n          };\n        }\n\n        return {\n          state: \"active\",\n          label: \"Processing\",\n          detail: \"Your order is being processed.\",\n          progress: 16,\n          step: 1,\n          totalSteps: 6,\n          localStepLabel: \"Local carrier\",\n          carrier: primaryShipment.company,\n          trackingNumber: primaryShipment.number,\n          trackingUrl: primaryShipment.url\n        };\n      };\n\n      const normaliseLookupOrder = (payload = {}, fallbackOrderNumber = \"\") => {\n        const root = payload.order || payload.data?.order || payload;\n        const shipments = asArray(firstValue(root.shipments, root.tracking?.shipments, root.fulfillments, [])).map(normaliseShipment);\n        const tracking = root.tracking || {};\n        const fallback = fallbackTrackingForOrder({\n          fulfillmentStatus: root.fulfillmentStatus || root.fulfilmentStatus || root.fulfillment_status || \"\",\n          financialStatus: root.financialStatus || root.financial_status || root.financialStatusLabel || \"\",\n          shipments\n        });\n        const mergedTracking = {\n          ...fallback,\n          ...tracking\n        };\n\n        const primaryShipment = shipments.find((shipment) => shipment.number || shipment.url || shipment.company) || {};\n        mergedTracking.progress = clampProgress(firstValue(mergedTracking.progress, fallback.progress));\n        mergedTracking.step = Number(firstValue(mergedTracking.step, fallback.step)) || fallback.step;\n        mergedTracking.totalSteps = Number(firstValue(mergedTracking.totalSteps, fallback.totalSteps)) || fallback.totalSteps;\n        mergedTracking.carrier = String(firstValue(mergedTracking.carrier, mergedTracking.company, primaryShipment.company, fallback.carrier, \"\") || \"\");\n        mergedTracking.trackingNumber = String(firstValue(mergedTracking.trackingNumber, primaryShipment.number, fallback.trackingNumber, \"\") || \"\");\n        mergedTracking.trackingUrl = String(firstValue(mergedTracking.trackingUrl, primaryShipment.url, fallback.trackingUrl, root.trackingUrl, root.tracking_url, \"\") || \"\");\n        mergedTracking.localStepLabel = String(firstValue(mergedTracking.localStepLabel, shipments.some(isRoyalMail) ? \"Royal Mail\" : \"Local carrier\") || \"Local carrier\");\n\n        return {\n          name: String(firstValue(root.name, root.orderName, root.order_name, root.orderNumber, root.order_number, root.number, fallbackOrderNumber) || \"\"),\n          number: String(firstValue(root.number, root.orderNumber, root.order_number, fallbackOrderNumber) || \"\"),\n          createdAt: String(firstValue(root.createdAt, root.created_at, root.processedAt, root.processed_at, \"\") || \"\"),\n          financialStatus: String(firstValue(root.financialStatus, root.financial_status, root.financialStatusLabel, \"\") || \"\"),\n          fulfillmentStatus: String(firstValue(root.fulfillmentStatus, root.fulfilmentStatus, root.fulfillment_status, root.fulfilment_status, root.fulfillmentStatusLabel, \"\") || \"\"),\n          total: String(firstValue(root.total, root.totalPrice, root.total_price, \"\") || \"\"),\n          statusPageUrl: String(firstValue(root.statusPageUrl, root.status_page_url, root.customerUrl, root.customer_url, \"\") || \"\"),\n          customerUrl: String(firstValue(root.customerUrl, root.customer_url, root.statusPageUrl, root.status_page_url, \"\") || \"\"),\n          shipments,\n          tracking: mergedTracking\n        };\n      };\n\n      const renderLookupTrackingCard = (payload, fallbackOrderNumber = \"\") => {\n        const order = normaliseLookupOrder(payload, fallbackOrderNumber);\n        const tracking = order.tracking || {};\n        const shipmentRows = order.shipments\n          .filter((shipment) => shipment.company || shipment.number || shipment.url || shipment.status)\n          .slice(0, 4);\n        const step = Number(tracking.step) || 0;\n        const state = String(tracking.state || \"active\").toLowerCase().replace(/[^a-z0-9-]/g, \"\") || \"active\";\n        const progress = clampProgress(tracking.progress);\n        const carrier = String(firstValue(tracking.carrier, tracking.company, \"\") || \"\");\n        const trackingNumber = String(tracking.trackingNumber || \"\");\n        const trackingUrl = String(tracking.trackingUrl || \"\");\n        const orderUrl = String(firstValue(order.statusPageUrl, order.customerUrl, \"\") || \"\");\n        const actions = [\n          trackingUrl ? `<a href=\"${escapeAttribute(trackingUrl)}\" target=\"_blank\" rel=\"noopener\">Track shipment</a>` : \"\",\n          orderUrl ? `<a href=\"${escapeAttribute(orderUrl)}\" target=\"_blank\" rel=\"noopener\">Order status</a>` : \"\"\n        ].filter(Boolean);\n        const meta = [\n          [\"Payment\", order.financialStatus],\n          [\"Order status\", order.fulfillmentStatus || tracking.label],\n          [\"Carrier\", carrier || (order.shipments.length ? \"Carrier tracking\" : \"Waiting\")],\n          [\"Tracking number\", trackingNumber || (order.shipments.length ? \"Attached\" : \"Waiting\")]\n        ].filter(([, value]) => String(value || \"\").trim());\n        const steps = [\n          \"Processing\",\n          \"Preparing\",\n          \"Dispatched\",\n          \"On its way\",\n          \"Out for delivery\",\n          \"Delivered\"\n        ];\n\n        return `\n          <article\n            class=\"hcx-order-track hcx-order-track--${escapeAttribute(state)} hcx-order-track--lookup is-selected\"\n            data-hcx-tracking-card\n            data-hcx-tracking-state=\"${escapeAttribute(state)}\"\n            data-hcx-tracking-search=\"${escapeAttribute([order.name, tracking.label, carrier, trackingNumber].join(\" \"))}\"\n            style=\"--hcx-order-progress: ${progress}%; --hcx-order-step-count: ${Number(tracking.totalSteps) || 6};\"\n          >\n            <button class=\"hcx-order-track__top\" type=\"button\" data-hcx-order-select aria-expanded=\"true\">\n              <div>\n                <span>${escapeHtml(order.createdAt || \"Matched order\")}</span>\n                <h3>${escapeHtml(order.name || order.number || fallbackOrderNumber || \"Order\")}</h3>\n              </div>\n              <span>\n                <strong>${escapeHtml(tracking.label || \"Processing\")}</strong>\n                <em>Live progress</em>\n              </span>\n            </button>\n            <div class=\"hcx-order-track__details\" data-hcx-order-details>\n              <div class=\"hcx-order-track__meter\" role=\"img\" aria-label=\"${escapeAttribute(`${tracking.label || \"Order progress\"}. ${progress} percent complete.`)}\">\n                <span class=\"hcx-order-track__meter-fill\"></span>\n                <span class=\"hcx-order-track__lorry\" aria-hidden=\"true\">&#128666;</span>\n              </div>\n              <ol class=\"hcx-order-track__steps\" aria-label=\"Order progress\">\n                ${steps.map((label, index) => `<li class=\"${step >= index + 1 ? \"is-complete\" : \"\"}\">${escapeHtml(label)}</li>`).join(\"\")}\n              </ol>\n              <p>${escapeHtml(tracking.detail || \"Your order is being processed.\")}</p>\n              <div class=\"hcx-order-track__meta\">\n                ${meta.map(([label, value]) => `\n                  <span>\n                    <small>${escapeHtml(label)}</small>\n                    ${escapeHtml(value)}\n                  </span>\n                `).join(\"\")}\n              </div>\n              ${shipmentRows.length ? `\n                <div class=\"hcx-order-track__shipments\">\n                  <span>Carrier updates</span>\n                  <ul role=\"list\">\n                    ${shipmentRows.map((shipment) => `\n                      <li>\n                        <strong>${escapeHtml(shipment.company || \"Carrier tracking\")}</strong>\n                        <p>${escapeHtml([shipment.status, shipment.number ? `#${shipment.number}` : \"\", shipment.estimatedDeliveryAt ? `ETA ${shipment.estimatedDeliveryAt}` : \"\"].filter(Boolean).join(\" | \"))}</p>\n                        ${shipment.url ? `<a href=\"${escapeAttribute(shipment.url)}\" target=\"_blank\" rel=\"noopener\">Open tracking</a>` : \"\"}\n                      </li>\n                    `).join(\"\")}\n                  </ul>\n                </div>\n              ` : \"\"}\n              ${actions.length ? `<div class=\"hcx-order-track__actions\">${actions.join(\"\")}</div>` : \"\"}\n            </div>\n          </article>\n        `;\n      };\n\n      const syncLookupState = () => {\n        if (!lookupButton) return;\n        lookupButton.disabled = isLookupSubmitting || lookupFields.some((field) => !String(field.value || \"\").trim());\n      };\n\n      const showLookupError = (message) => {\n        if (lookupResult) {\n          lookupResult.hidden = true;\n          lookupResult.replaceChildren();\n        }\n        if (lookupError) {\n          lookupError.textContent = message;\n          lookupError.hidden = false;\n        }\n      };\n\n      const showLookupResult = (payload, orderNumber) => {\n        if (lookupError) lookupError.hidden = true;\n        if (!lookupResult) return;\n        lookupResult.innerHTML = renderLookupTrackingCard(payload, orderNumber);\n        lookupResult.hidden = false;\n        lookupResult.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      };\n\n      const selectCard = (card) => {\n        if (!card || card.hidden) return;\n        selectedCard = card;\n\n        cards.forEach((orderCard) => {\n          const isSelected = orderCard === selectedCard;\n          orderCard.classList.toggle(\"is-selected\", isSelected);\n          orderCard.querySelector(\"[data-hcx-order-select]\")?.setAttribute(\"aria-expanded\", isSelected ? \"true\" : \"false\");\n          const details = orderCard.querySelector(\"[data-hcx-order-details]\");\n          if (details) details.hidden = !isSelected;\n        });\n      };\n\n      const matchesFilter = (card) => {\n        const state = card.dataset.hcxTrackingState || \"active\";\n        if (activeFilter === \"all\") return true;\n        if (activeFilter === \"active\") return state !== \"complete\" && state !== \"cancelled\";\n        return state === activeFilter;\n      };\n\n      const applyTrackingFilters = () => {\n        const query = normalize(search?.value || \"\");\n        let visibleCount = 0;\n\n        cards.forEach((card) => {\n          const haystack = normalize(`${card.dataset.hcxTrackingSearch || \"\"} ${card.textContent || \"\"}`);\n          const isVisible = matchesFilter(card) && (!query || haystack.includes(query));\n          card.hidden = !isVisible;\n          if (isVisible) visibleCount += 1;\n        });\n\n        if (empty) empty.hidden = visibleCount !== 0;\n\n        if (visibleCount === 0) {\n          selectedCard = null;\n          cards.forEach((card) => {\n            card.classList.remove(\"is-selected\");\n            card.querySelector(\"[data-hcx-order-select]\")?.setAttribute(\"aria-expanded\", \"false\");\n            const details = card.querySelector(\"[data-hcx-order-details]\");\n            if (details) details.hidden = true;\n          });\n          return;\n        }\n\n        if (!selectedCard || selectedCard.hidden) {\n          selectCard(cards.find((card) => !card.hidden));\n        } else {\n          selectCard(selectedCard);\n        }\n      };\n\n      cards.forEach((card) => {\n        card.querySelector(\"[data-hcx-order-select]\")?.addEventListener(\"click\", () => selectCard(card));\n      });\n\n      filters.forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          activeFilter = button.dataset.hcxTrackingFilter || \"all\";\n          filters.forEach((filterButton) => {\n            const isActive = filterButton === button;\n            filterButton.classList.toggle(\"is-active\", isActive);\n            filterButton.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n          });\n          applyTrackingFilters();\n        });\n      });\n\n      search?.addEventListener(\"input\", applyTrackingFilters);\n\n      if (lookupForm) {\n        lookupForm.setAttribute(\"novalidate\", \"novalidate\");\n        lookupFields.forEach((field) => field.addEventListener(\"input\", syncLookupState));\n        lookupForm.addEventListener(\"submit\", async (event) => {\n          event.preventDefault();\n          event.stopPropagation();\n\n          syncLookupState();\n          if (!lookupUrl || lookupButton?.disabled || isLookupSubmitting) return;\n\n          const formData = new FormData(lookupForm);\n          const orderNumber = String(formData.get(\"order_number\") || \"\").trim();\n          const customerDetail = String(formData.get(\"customer_detail\") || \"\").trim();\n\n          try {\n            isLookupSubmitting = true;\n            if (lookupButton) lookupButton.textContent = \"Checking\";\n            syncLookupState();\n\n            const { payload, response } = await fetchHcxOrderLookup(lookupUrl, {\n              order_number: orderNumber,\n              customer_detail: customerDetail\n            });\n\n            if (!response.ok) {\n              showLookupError(\n                hcxOrderLookupErrorMessage(\n                  payload,\n                  response.status,\n                  \"Live order tracking is unavailable right now. Please try again shortly.\"\n                )\n              );\n              return;\n            }\n\n            if (payload?.matched || payload?.order || payload?.tracking || payload?.shipments) {\n              showLookupResult(payload, orderNumber);\n              return;\n            }\n\n            showLookupError(\"We could not find an order matching both details.\");\n          } catch (_) {\n            showLookupError(\"Live order tracking is unavailable right now. Please try again shortly.\");\n          } finally {\n            isLookupSubmitting = false;\n            if (lookupButton) lookupButton.textContent = lookupDefaultButtonText;\n            syncLookupState();\n          }\n        });\n        syncLookupState();\n      }\n\n      applyTrackingFilters();\n    });\n  };\n\n  const initHeaderAnnouncementSlider = () => {\n    const section = document.querySelector(\".announcement-bar-section\");\n    if (!section || section.dataset.hcxAnnouncementSlider === \"true\") return;\n    const saleCountdown = section.querySelector(\"[data-hcx-sale-countdown]\");\n    if (saleCountdown && !saleCountdown.hidden) return;\n\n    const originalMessages = Array.from(section.querySelectorAll(\".announcement-bar__message span\"))\n      .map((message) => message.textContent.trim())\n      .filter(Boolean);\n    const uniqueMessages = [];\n    const seenMessages = new Set();\n\n    originalMessages.forEach((message) => {\n      const key = message.replace(/\\s+/g, \" \").toUpperCase();\n      if (seenMessages.has(key)) return;\n\n      seenMessages.add(key);\n      uniqueMessages.push(message);\n    });\n\n    const messages = uniqueMessages.length\n      ? uniqueMessages\n      : [\n          \"FREE WORLDWIDE SHIPPING ON ORDERS OVER \\u00a370\",\n          \"15% OFF YOUR FIRST ORDER WHEN YOU JOIN LEGACY\",\n          \"EASY RETURNS\",\n        ];\n    const utilityBar = section.querySelector(\".utility-bar\") || section;\n    const escapeHtml = (value) =>\n      value.replace(/[&<>\"']/g, (character) => {\n        const entities = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#39;\",\n        };\n        return entities[character];\n      });\n    const renderAnnouncementMessage = (value) => {\n      const text = value.trim();\n      const upperText = text.toUpperCase();\n      const joinPhrase = \"JOIN LEGACY\";\n      const joinIndex = upperText.indexOf(joinPhrase);\n\n      if (upperText === \"EASY RETURNS\") {\n        return '<a class=\"hcx-announcement-slider__link hcx-announcement-slider__link--underlined\" href=\"/pages/returns\">EASY RETURNS</a>';\n      }\n\n      if (joinIndex !== -1) {\n        const beforeJoin = text.slice(0, joinIndex);\n        const joinText = text.slice(joinIndex, joinIndex + joinPhrase.length);\n        const afterJoin = text.slice(joinIndex + joinPhrase.length);\n        const beforeJoinSpacing = /\\s$/.test(beforeJoin) ? \"&nbsp;\" : \"\";\n        const afterJoinSpacing = /^\\s/.test(afterJoin) ? \"&nbsp;\" : \"\";\n\n        return `${escapeHtml(\n          beforeJoin.trimEnd()\n        )}${beforeJoinSpacing}<a class=\"hcx-announcement-slider__link\" href=\"/pages/hercxles-club\">${escapeHtml(\n          joinText\n        )}</a>${afterJoinSpacing}${escapeHtml(afterJoin.trimStart())}`;\n      }\n\n      return escapeHtml(text);\n    };\n\n    section.dataset.hcxAnnouncementSlider = \"true\";\n    section.classList.remove(\"hcx-original-scrolling-content-section\", \"hcx-announcement-marquee-section\");\n    section.classList.add(\"hcx-announcement-slider-section\");\n    utilityBar.innerHTML = `\n      <div class=\"hcx-announcement-slider\" role=\"region\" aria-label=\"Store announcements\" data-hcx-announcement-slider>\n        <div class=\"hcx-announcement-slider__viewport\" aria-live=\"polite\" aria-atomic=\"true\">\n          <p class=\"hcx-announcement-slider__message\">\n            <span class=\"hcx-announcement-slider__message-current\">${renderAnnouncementMessage(messages[0])}</span>\n            <span class=\"hcx-announcement-slider__message-next\" aria-hidden=\"true\"></span>\n          </p>\n        </div>\n      </div>\n    `;\n\n    const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    const message = utilityBar.querySelector(\".hcx-announcement-slider__message\");\n    const currentMessage = message?.querySelector(\".hcx-announcement-slider__message-current\");\n    const nextMessageElement = message?.querySelector(\".hcx-announcement-slider__message-next\");\n    let currentIndex = 0;\n    let timer = null;\n    let swapTimer = null;\n\n    const finishMessageSwap = () => {\n      if (!message || !currentMessage || !nextMessageElement || !message.classList.contains(\"is-spinning-up\")) return;\n\n      currentMessage.innerHTML = nextMessageElement.innerHTML || renderAnnouncementMessage(messages[currentIndex]);\n      nextMessageElement.innerHTML = \"\";\n      message.classList.remove(\"is-spinning-up\");\n      window.clearTimeout(swapTimer);\n      swapTimer = null;\n    };\n\n    const showNextMessage = () => {\n      if (!message || !currentMessage || !nextMessageElement || messages.length < 2) return;\n\n      currentIndex = (currentIndex + 1) % messages.length;\n      const nextMessage = messages[currentIndex];\n      const nextMessageMarkup = renderAnnouncementMessage(nextMessage);\n\n      if (prefersReducedMotion.matches) {\n        window.clearTimeout(swapTimer);\n        swapTimer = null;\n        nextMessageElement.innerHTML = \"\";\n        message.classList.remove(\"is-spinning-up\");\n        currentMessage.innerHTML = nextMessageMarkup;\n        return;\n      }\n\n      window.clearTimeout(swapTimer);\n      message.classList.remove(\"is-spinning-up\");\n      void message.offsetWidth;\n      nextMessageElement.innerHTML = nextMessageMarkup;\n      message.classList.add(\"is-spinning-up\");\n      swapTimer = window.setTimeout(finishMessageSwap, 760);\n    };\n\n    message?.addEventListener(\"animationend\", (event) => {\n      if (event.target !== nextMessageElement) return;\n\n      finishMessageSwap();\n    });\n\n    if (messages.length > 1) {\n      timer = window.setInterval(showNextMessage, 5000);\n      prefersReducedMotion.addEventListener(\"change\", () => {\n        window.clearInterval(timer);\n        finishMessageSwap();\n        timer = window.setInterval(showNextMessage, 5000);\n      });\n    }\n  };\n\n  const hcxCasePreserveWords = new Set([\n    \"HERCXLES\",\n    \"UK\",\n    \"US\",\n    \"EU\",\n    \"GBP\",\n    \"USD\",\n    \"EUR\",\n    \"FAQ\",\n    \"SKU\",\n    \"ID\",\n    \"LCKD\",\n    \"URL\",\n    \"CM\",\n    \"KG\",\n    \"GSM\",\n    \"FT\",\n    \"IN\",\n    \"XS\",\n    \"S\",\n    \"M\",\n    \"L\",\n    \"XL\",\n    \"XXL\",\n    \"XXXL\",\n    \"3XL\",\n  ]);\n\n  const hcxCaseWordOverrides = new Map([\n    [\"HERCXLES\", \"HERCXLES\"],\n    [\"KLARNA\", \"Klarna\"],\n    [\"LEGACY\", \"Legacy\"],\n    [\"SHOPIFY\", \"Shopify\"],\n    [\"PAYPAL\", \"PayPal\"],\n  ]);\n\n  const hcxWordPattern = /[A-Za-z][A-Za-z'\u2019]*(?:-[A-Za-z][A-Za-z'\u2019]*)*/g;\n\n  const isMostlyUppercaseText = (text) => {\n    const letters = text.replace(/[^A-Za-z]/g, \"\");\n    return letters.length >= 2 && letters === letters.toUpperCase();\n  };\n\n  const hasUppercaseWord = (text) => /\\b[A-Z]{2,}\\b/.test(text);\n\n  const formatCaseSegment = (segment) => {\n    const upper = segment.toUpperCase();\n    if (hcxCaseWordOverrides.has(upper)) return hcxCaseWordOverrides.get(upper);\n    if (hcxCasePreserveWords.has(upper)) return upper;\n\n    return segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase();\n  };\n\n  const formatTitleCase = (text) =>\n    text.replace(hcxWordPattern, (word) => word.split(\"-\").map(formatCaseSegment).join(\"-\"));\n\n  const formatSentenceCase = (text) => {\n    let shouldCapitaliseNext = true;\n    let cursor = 0;\n\n    return text.replace(hcxWordPattern, (word, offset) => {\n      const betweenWords = text.slice(cursor, offset);\n      if (/[.!?]\\s*$/.test(betweenWords) || /(?:^|[\\n\\r])\\s*$/.test(betweenWords)) {\n        shouldCapitaliseNext = true;\n      }\n      cursor = offset + word.length;\n\n      const upper = word.toUpperCase();\n      if (hcxCaseWordOverrides.has(upper)) {\n        shouldCapitaliseNext = false;\n        return hcxCaseWordOverrides.get(upper);\n      }\n      if (hcxCasePreserveWords.has(upper)) return upper;\n\n      const lower = word.toLowerCase();\n      if (!shouldCapitaliseNext) return lower;\n\n      shouldCapitaliseNext = false;\n      return lower.charAt(0).toUpperCase() + lower.slice(1);\n    });\n  };\n\n  const getCaseModeForTextNode = (node) => {\n    const parent = node.parentElement;\n    if (!parent) return null;\n    if (parent.closest(\"script, style, svg, noscript, textarea, input, select, option, [data-hcx-preserve-case], .hcx-product-rating\")) return null;\n    if (parent.closest(\".hcx-product-option--size, .product-form__input--pill, .variant-radios\")) return null;\n\n    if (\n      parent.closest(\n        \".product__title, .card__heading, .predictive-search__item-heading, .cart-item__name, .hcx-cart-rec__title\"\n      )\n    ) {\n      return \"title\";\n    }\n\n    return \"sentence\";\n  };\n\n  const normaliseStoreTextCase = (root = document.body) => {\n    if (!root) return;\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    const textNodes = [];\n\n    while (walker.nextNode()) {\n      textNodes.push(walker.currentNode);\n    }\n\n    textNodes.forEach((node) => {\n      const original = node.nodeValue;\n      if (!original || !/[A-Za-z]/.test(original)) return;\n\n      const trimmed = original.trim();\n      if (hcxCasePreserveWords.has(trimmed.toUpperCase())) return;\n\n      const mode = getCaseModeForTextNode(node);\n      if (!mode) return;\n\n      if (mode === \"title\") {\n        const formattedTitle = formatTitleCase(original);\n        if (formattedTitle !== original) node.nodeValue = formattedTitle;\n        return;\n      }\n\n      if (!isMostlyUppercaseText(original) && !hasUppercaseWord(original)) return;\n\n      const formatted = mode === \"title\" ? formatTitleCase(original) : formatSentenceCase(original);\n      if (formatted !== original) node.nodeValue = formatted;\n    });\n  };\n\n  const initStoreTextCase = () => {\n    normaliseStoreTextCase();\n\n    if (document.documentElement.dataset.hcxStoreCaseObserverBound === \"true\") return;\n    document.documentElement.dataset.hcxStoreCaseObserverBound = \"true\";\n\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === \"characterData\") {\n          const parent = mutation.target.parentElement;\n          if (parent) normaliseStoreTextCase(parent);\n          return;\n        }\n\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType === Node.TEXT_NODE) {\n            const parent = node.parentElement;\n            if (parent) normaliseStoreTextCase(parent);\n          } else if (node.nodeType === Node.ELEMENT_NODE) {\n            normaliseStoreTextCase(node);\n          }\n        });\n      });\n    });\n\n    observer.observe(document.body, { childList: true, characterData: true, subtree: true });\n  };\n\n  const hcxButtonFlyAllowedSelector = [\n    \".hcx-featured-drop__view-all-button\",\n    \".collection__view-all a\",\n    \".collection-list-view-all a\",\n    \".blog__view-all a\",\n  ].join(\",\");\n\n  const hcxButtonFlySelector = [\n    hcxButtonFlyAllowedSelector,\n    \".hcx-button-fly\",\n  ].join(\",\");\n\n  const hcxButtonFlyDesktopMedia = window.matchMedia?.(\"(min-width: 750px)\");\n\n  const hcxButtonFlyIgnoreSelector = [\n    \"[data-hcx-no-button-fly]\",\n    \".localization-form__select\",\n    \".disclosure__button.localization-form__select\",\n    \".localization-selector\",\n    \".product-form__submit.hcx-size-required\",\n    \"[id*='shopify-pc'] button\",\n    \"[class*='shopify-pc'] button\",\n    \".shopify-pc__banner__btns button\",\n    \".shopify-pc__prefs__dialog button\",\n    \".header__icon\",\n    \".hcx-header-saves-link\",\n    \".hcx-product-save-button\",\n    \".hcx-product-size-note__link\",\n    \".hcx-card-save-button\",\n    \".hcx-card-size-button\",\n    \".hcx-cart-rec__size-button\",\n    \"[data-hcx-related-filter]\",\n    \".quantity__button\",\n    \".slider-button\",\n    \".country-selector__close-button\",\n    \".modal__close-button\",\n    \".search-modal__close-button\",\n    \".drawer__close\",\n    \".hcx-mobile-menu__action\",\n    \".hcx-mobile-menu__close\",\n    \".button--tertiary\",\n  ].join(\",\");\n\n  const getButtonFlyLabel = (button) => {\n    const clone = button.cloneNode(true);\n    clone\n      .querySelectorAll(\n        \"svg, img, picture, canvas, video, script, style, .svg-wrapper, .visually-hidden, .loading__spinner, .loading-overlay__spinner, .spinner\"\n      )\n      .forEach((node) => node.remove());\n\n    return clone.textContent.replace(/\\s+/g, \" \").trim();\n  };\n\n  const syncButtonTextFly = (root = document.body) => {\n    if (!root) return;\n\n    const candidates = [];\n    if (root instanceof Element && root.matches(hcxButtonFlySelector)) candidates.push(root);\n    if (root.querySelectorAll) candidates.push(...root.querySelectorAll(hcxButtonFlySelector));\n\n    candidates.forEach((button) => {\n      if (!(button instanceof HTMLElement)) return;\n      if (button.matches(hcxButtonFlyIgnoreSelector) || button.closest(\"[data-hcx-no-button-fly]\")) {\n        button.classList.remove(\"hcx-button-fly\");\n        delete button.dataset.hcxButtonFlyLabel;\n        return;\n      }\n\n      const label = getButtonFlyLabel(button);\n      const isDesktopViewAllButton =\n        (!hcxButtonFlyDesktopMedia || hcxButtonFlyDesktopMedia.matches) &&\n        button.closest(\".content-for-layout\") &&\n        button.matches(hcxButtonFlyAllowedSelector) &&\n        /^view\\s+all$/i.test(label);\n\n      if (!isDesktopViewAllButton) {\n        button.classList.remove(\"hcx-button-fly\");\n        delete button.dataset.hcxButtonFlyLabel;\n        return;\n      }\n\n      if (!label || label.length > 48) {\n        button.classList.remove(\"hcx-button-fly\");\n        delete button.dataset.hcxButtonFlyLabel;\n        return;\n      }\n\n      button.dataset.hcxButtonFlyLabel = label;\n      button.classList.add(\"hcx-button-fly\");\n    });\n  };\n\n  const initButtonTextFly = () => {\n    syncButtonTextFly();\n\n    if (document.documentElement.dataset.hcxButtonTextFlyObserverBound === \"true\") return;\n    document.documentElement.dataset.hcxButtonTextFlyObserverBound = \"true\";\n\n    if (hcxButtonFlyDesktopMedia?.addEventListener) {\n      hcxButtonFlyDesktopMedia.addEventListener(\"change\", () => syncButtonTextFly());\n    } else if (hcxButtonFlyDesktopMedia?.addListener) {\n      hcxButtonFlyDesktopMedia.addListener(() => syncButtonTextFly());\n    }\n\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === \"characterData\") {\n          const parent = mutation.target.parentElement;\n          if (parent) syncButtonTextFly(parent.closest(hcxButtonFlySelector) || parent);\n          return;\n        }\n\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType === Node.TEXT_NODE) {\n            const parent = node.parentElement;\n            if (parent) syncButtonTextFly(parent.closest(hcxButtonFlySelector) || parent);\n          } else if (node.nodeType === Node.ELEMENT_NODE) {\n            syncButtonTextFly(node);\n          }\n        });\n      });\n    });\n\n    observer.observe(document.querySelector(\".content-for-layout\") || document.body, {\n      childList: true,\n      characterData: true,\n      subtree: true,\n    });\n  };\n\n  const initUnavailableXsDescriptionCleanup = () => {\n    document.querySelectorAll(\".hcx-product-description-copy.hcx-hide-unavailable-xs\").forEach((container) => {\n      container.querySelectorAll(\"table\").forEach((table) => {\n        const xsColumnIndexes = new Set();\n\n        table.querySelectorAll(\"tr\").forEach((row) => {\n          [...row.children].forEach((cell, index) => {\n            if (cell.textContent.trim().toLowerCase() === \"xs\") {\n              xsColumnIndexes.add(index);\n            }\n          });\n        });\n\n        [...xsColumnIndexes]\n          .sort((a, b) => b - a)\n          .forEach((index) => {\n            table.querySelectorAll(\"tr\").forEach((row) => {\n              const cell = row.children[index];\n              if (cell) cell.remove();\n            });\n          });\n      });\n\n      container.querySelectorAll(\"p, li\").forEach((node) => {\n        if (node.textContent.trim().toLowerCase() === \"xs\") {\n          node.remove();\n        }\n      });\n    });\n  };\n\n  const initProductDescriptionFormatting = () => {\n    const normaliseText = (text) => text.replace(/\\s+/g, \" \").trim();\n    const isSizeFitText = (text) => /^(size\\s*(?:&|and)\\s*fit)\\s*:/i.test(text);\n    const isModelText = (text) => /^model(?:\\s+\\d+)?\\s+is\\b/i.test(text);\n    const isWashText = (text) =>\n      /^to help this item last longer\\b/i.test(text) ||\n      /\\bwash inside out\\b/i.test(text) ||\n      /\\bavoid tumble drying\\b/i.test(text);\n    const ensureSentenceEnd = (text) => (/[.!?]$/.test(text) ? text : `${text}.`);\n    const formatModelSentence = (text) =>\n      ensureSentenceEnd(\n        normaliseText(text)\n          .toLowerCase()\n          .replace(/\\bmodel\\b/g, \"Model\")\n          .replace(/\\b(3xl|2xl|xxxl|xxl|xl|xs|s|m|l)\\b/g, (size) => size.toUpperCase())\n      );\n    const formatModelCopy = (text) => {\n      const source = normaliseText(text).replace(/^(size\\s*(?:&|and)\\s*fit)\\s*:\\s*/i, \"\");\n      const modelMatches = source.match(\n        /\\bmodel(?:\\s+\\d+)?\\s+is\\b[\\s\\S]*?\\bwearing\\s+(?:a\\s+)?size\\s+[A-Z0-9]+/gi\n      );\n\n      if (!modelMatches?.length) return isModelText(source) ? formatModelSentence(source) : \"\";\n\n      return modelMatches\n        .map((match) => formatModelSentence(match))\n        .join(\" \");\n    };\n\n    const getDescriptionRows = (container) =>\n      [...container.querySelectorAll(\"p, li\")].filter((node) => {\n        const nestedRows = node.querySelectorAll(\"p, li\");\n        return nestedRows.length === 0;\n      });\n\n    const unwrapElement = (element) => {\n      const parent = element.parentNode;\n      if (!parent) return;\n      while (element.firstChild) parent.insertBefore(element.firstChild, element);\n      element.remove();\n    };\n\n    const normaliseWashRow = (row) => {\n      row.classList.remove(\"hcx-product-description-wash\");\n      row.querySelectorAll(\":scope > .hcx-product-description-wash__text\").forEach(unwrapElement);\n\n      const directBoldChildren = [...row.children].filter((child) => /^(B|STRONG)$/i.test(child.tagName));\n      if (\n        directBoldChildren.length === 1 &&\n        normaliseText(directBoldChildren[0].textContent || \"\") === normaliseText(row.textContent || \"\")\n      ) {\n        unwrapElement(directBoldChildren[0]);\n      }\n    };\n\n    document.querySelectorAll(\".hcx-product-description-copy\").forEach((container) => {\n      const modelRows = [];\n      const hasModelVisual = container.dataset.hcxHasModelVisual !== \"false\";\n\n      getDescriptionRows(container).forEach((row) => {\n        const text = normaliseText(row.textContent || \"\");\n        if (!text) return;\n\n        if (isSizeFitText(text)) {\n          const modelCopy = formatModelCopy(text);\n          if (hasModelVisual && modelCopy) modelRows.push(modelCopy);\n          row.remove();\n          return;\n        }\n\n        if (isModelText(text)) {\n          const modelCopy = formatModelCopy(text);\n          if (hasModelVisual && modelCopy) modelRows.push(modelCopy);\n          row.remove();\n          return;\n        }\n\n        if (isWashText(text)) normaliseWashRow(row);\n      });\n\n      if (!modelRows.length) return;\n\n      const modelParagraph = document.createElement(\"p\");\n      modelParagraph.className = \"hcx-product-description-model-fit\";\n      modelParagraph.textContent = [...new Set(modelRows)].join(\" \");\n      container.insertBefore(modelParagraph, container.firstElementChild || null);\n    });\n  };\n\n  const initProductInfoPanels = () => {\n    document.querySelectorAll(\".product__info-container\").forEach((container) => {\n      if (container.dataset.hcxProductInfoPanelsBound === \"true\") return;\n\n      const drawer = container.querySelector(\"[data-hcx-product-panel-drawer]\");\n      const title = drawer?.querySelector(\"[data-hcx-product-panel-title]\");\n      const body = drawer?.querySelector(\"[data-hcx-product-panel-body]\");\n      const closeButtons = drawer ? [...drawer.querySelectorAll(\"[data-hcx-product-panel-close]\")] : [];\n      const triggers = [...container.querySelectorAll(\"[data-hcx-product-panel-trigger]\")];\n      if (!drawer || !title || !body || !triggers.length) return;\n\n      let activeTrigger = null;\n\n      const setTriggerState = (open, target = null) => {\n        triggers.forEach((trigger) => {\n          const isActive = open && trigger === target;\n          trigger.setAttribute(\"aria-expanded\", isActive ? \"true\" : \"false\");\n        });\n      };\n\n      const closePanel = () => {\n        drawer.classList.remove(\"is-open\");\n        drawer.setAttribute(\"aria-hidden\", \"true\");\n        document.documentElement.classList.remove(\"hcx-product-info-panel-open\");\n        setTriggerState(false);\n\n        if (activeTrigger) {\n          activeTrigger.focus({ preventScroll: true });\n          activeTrigger = null;\n        }\n      };\n\n      const openPanel = (trigger) => {\n        const key = trigger.dataset.hcxProductPanelTrigger;\n        const source = key ? container.querySelector(`[data-hcx-product-panel-content=\"${key}\"]`) : null;\n        if (!source) return;\n\n        activeTrigger = trigger;\n        title.textContent = trigger.dataset.hcxProductPanelTitle || trigger.textContent.trim();\n        body.innerHTML = source.innerHTML;\n        initProductDescriptionFormatting();\n        drawer.classList.add(\"is-open\");\n        drawer.setAttribute(\"aria-hidden\", \"false\");\n        document.documentElement.classList.add(\"hcx-product-info-panel-open\");\n        setTriggerState(true, trigger);\n        closeButtons[0]?.focus({ preventScroll: true });\n      };\n\n      triggers.forEach((trigger) => {\n        trigger.addEventListener(\"click\", () => {\n          if (drawer.classList.contains(\"is-open\") && activeTrigger === trigger) {\n            closePanel();\n            return;\n          }\n\n          openPanel(trigger);\n        });\n      });\n\n      closeButtons.forEach((button) => {\n        button.addEventListener(\"click\", closePanel);\n      });\n\n      document.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Escape\" && drawer.classList.contains(\"is-open\")) closePanel();\n      });\n\n      container.dataset.hcxProductInfoPanelsBound = \"true\";\n    });\n  };\n\n  const getProductLowerRailTrack = (section) =>\n    section?.querySelector(\"[data-hcx-product-rail-track], .product-grid\") || null;\n\n  const getProductLowerRailControls = (section) => ({\n    previous: section?.querySelector(\"[data-hcx-product-rail-prev]\") || null,\n    next: section?.querySelector(\"[data-hcx-product-rail-next]\") || null,\n  });\n\n  const getProductLowerRailStep = (track) => {\n    if (!track) return 0;\n\n    const firstVisibleItem = [...track.children].find(\n      (child) => !child.hidden && window.getComputedStyle(child).display !== \"none\"\n    );\n    const styles = window.getComputedStyle(track);\n    const gap = parseFloat(styles.columnGap || styles.gap || \"0\") || 0;\n    const itemWidth = firstVisibleItem?.getBoundingClientRect().width || 0;\n\n    return Math.max(itemWidth + gap, track.clientWidth * 0.82);\n  };\n\n  const updateProductLowerRailControls = (section) => {\n    const track = getProductLowerRailTrack(section);\n    const { previous, next } = getProductLowerRailControls(section);\n    const controls = previous?.closest(\".hcx-product-rail-controls\") || next?.closest(\".hcx-product-rail-controls\") || null;\n    if (!track || !previous || !next || !controls) return;\n\n    const maxScroll = Math.max(0, track.scrollWidth - track.clientWidth);\n    const canScroll = maxScroll > 2;\n    const atStart = track.scrollLeft <= 2;\n    const atEnd = track.scrollLeft >= maxScroll - 2;\n\n    controls.hidden = !canScroll;\n    previous.disabled = !canScroll || atStart;\n    next.disabled = !canScroll || atEnd;\n    previous.setAttribute(\"aria-disabled\", previous.disabled ? \"true\" : \"false\");\n    next.setAttribute(\"aria-disabled\", next.disabled ? \"true\" : \"false\");\n  };\n\n  const initProductLowerRailControls = () => {\n    document.querySelectorAll(\".related-products--recommendations\").forEach((section) => {\n      const track = getProductLowerRailTrack(section);\n      const { previous, next } = getProductLowerRailControls(section);\n      const controls = previous?.closest(\".hcx-product-rail-controls\") || next?.closest(\".hcx-product-rail-controls\") || null;\n      if (!track || !previous || !next || !controls || controls.dataset.hcxProductRailControlsBound === \"true\") return;\n\n      controls.dataset.hcxProductRailControlsBound = \"true\";\n      const scrollRail = (direction, event) => {\n        event?.preventDefault();\n\n        const maxScroll = Math.max(0, track.scrollWidth - track.clientWidth);\n        if (maxScroll <= 2) return;\n\n        const target = Math.max(0, Math.min(maxScroll, track.scrollLeft + getProductLowerRailStep(track) * direction));\n        track.scrollTo({ left: target, behavior: \"smooth\" });\n        window.setTimeout(() => updateProductLowerRailControls(section), 360);\n      };\n      const requestUpdate = () => window.requestAnimationFrame(() => updateProductLowerRailControls(section));\n\n      previous.addEventListener(\"click\", (event) => scrollRail(-1, event));\n      next.addEventListener(\"click\", (event) => scrollRail(1, event));\n      track.addEventListener(\"scroll\", requestUpdate, { passive: true });\n      window.addEventListener(\"resize\", requestUpdate);\n      requestUpdate();\n    });\n  };\n\n  const relatedProductCategoryOrder = [\n    \"hoodies\",\n    \"t-shirts\",\n    \"long-sleeves\",\n    \"sweatshirts\",\n    \"tank-tops\",\n    \"sweatpants\",\n    \"shorts\",\n    \"jackets\",\n  ];\n\n  const relatedProductCategoryLabels = {\n    hoodies: \"Hoodies\",\n    \"t-shirts\": \"T-shirts\",\n    \"long-sleeves\": \"Long sleeves\",\n    sweatshirts: \"Sweatshirts\",\n    \"tank-tops\": \"Tank tops\",\n    sweatpants: \"Sweatpants\",\n    shorts: \"Shorts\",\n    jackets: \"Jackets\",\n  };\n\n  const getRelatedProductCategorySignal = (item) => {\n    const productHref = item.querySelector('a[href*=\"/products/\"]')?.getAttribute(\"href\") || \"\";\n    const productHandle = productHref.includes(\"/products/\")\n      ? productHref.split(\"/products/\").pop().split(/[?#/]/)[0]\n      : productHref;\n    const title =\n      item.querySelector(\".card__heading a, .card__heading, a[href*='/products/']\")?.textContent || \"\";\n    const imageAlt = item.querySelector(\"img\")?.getAttribute(\"alt\") || \"\";\n\n    return `${productHandle} ${title} ${imageAlt}`.toLowerCase();\n  };\n\n  const getRelatedProductCategoryFromSignal = (signal) => {\n    if (!signal) return null;\n    if (signal.includes(\"hoodie\") || signal.includes(\"hooded\")) return \"hoodies\";\n    if (\n      signal.includes(\"long sleeve\") ||\n      signal.includes(\"long-sleeve\") ||\n      signal.includes(\"longsleeve\") ||\n      signal.includes(\"waffle\")\n    )\n      return \"long-sleeves\";\n    if (signal.includes(\"sweatshirt\") || signal.includes(\"crewneck\") || signal.includes(\"polo\") || signal.includes(\"sweater\"))\n      return \"sweatshirts\";\n    if (\n      signal.includes(\"t-shirt\") ||\n      signal.includes(\"t shirt\") ||\n      signal.includes(\"tshirt\") ||\n      signal.includes(\" tee\") ||\n      signal.includes(\"raw edge\") ||\n      signal.includes(\"raw-cut\")\n    )\n      return \"t-shirts\";\n    if (signal.includes(\"tank\") || signal.includes(\"vest\")) return \"tank-tops\";\n    if (signal.includes(\"sweatpant\") || signal.includes(\"jogger\") || /\\bpants?\\b/.test(signal)) return \"sweatpants\";\n    if (signal.includes(\"shorts\") || signal.includes(\"-shorts\") || /\\bshort\\b/.test(signal)) return \"shorts\";\n    if (signal.includes(\"jacket\") || signal.includes(\"stand collar\") || signal.includes(\"stand-collar\")) return \"jackets\";\n    return null;\n  };\n\n  const renderRelatedProductCategoryButtons = (section) => {\n    const categories = new Set(\n      [...section.querySelectorAll(\"[data-hcx-related-category]\")]\n        .map((item) => item.dataset.hcxRelatedCategory)\n        .filter((category) => relatedProductCategoryLabels[category])\n    );\n    if (categories.size <= 1) return;\n\n    let container = section.querySelector(\"[data-hcx-related-categories]\");\n    if (!container) {\n      const track = getProductLowerRailTrack(section);\n      if (!track) return;\n\n      container = document.createElement(\"div\");\n      container.className = \"hcx-related-categories\";\n      container.setAttribute(\"aria-label\", \"Filter products by category\");\n      container.dataset.hcxRelatedCategories = \"\";\n      container.dataset.hcxNoButtonFly = \"\";\n      track.before(container);\n    }\n\n    const activeFilter = container.querySelector(\".is-active\")?.dataset.hcxRelatedFilter || \"all\";\n    const orderedCategories = relatedProductCategoryOrder.filter((category) => categories.has(category));\n    const desiredFilters = [\"all\", ...orderedCategories];\n    const currentFilters = [...container.querySelectorAll(\"[data-hcx-related-filter]\")].map(\n      (button) => button.dataset.hcxRelatedFilter\n    );\n\n    if (currentFilters.join(\"|\") !== desiredFilters.join(\"|\")) {\n      container.replaceChildren(\n        ...desiredFilters.map((category) => {\n          const button = document.createElement(\"button\");\n          button.type = \"button\";\n          button.className = \"hcx-related-categories__button\";\n          button.dataset.hcxRelatedFilter = category;\n          button.setAttribute(\"aria-pressed\", \"false\");\n          button.textContent = category === \"all\" ? \"All\" : relatedProductCategoryLabels[category];\n          return button;\n        })\n      );\n    }\n\n    const normalizedActiveFilter = activeFilter !== \"all\" && !categories.has(activeFilter) ? \"all\" : activeFilter;\n    container.querySelectorAll(\"[data-hcx-related-filter]\").forEach((button) => {\n      const isActive = button.dataset.hcxRelatedFilter === normalizedActiveFilter;\n      button.classList.toggle(\"is-active\", isActive);\n      button.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n    });\n  };\n\n  const normalizeRelatedProductCategories = (section) => {\n    if (!section || section.dataset.hcxRelatedCategoriesNormalizing === \"true\") return;\n\n    section.dataset.hcxRelatedCategoriesNormalizing = \"true\";\n    try {\n      section.querySelectorAll(\"[data-hcx-related-category]\").forEach((item) => {\n        const category = getRelatedProductCategoryFromSignal(getRelatedProductCategorySignal(item));\n        if (!category || !relatedProductCategoryLabels[category]) return;\n\n        item.dataset.hcxRelatedCategory = category;\n        item.dataset.hcxRelatedCategoryLabel = relatedProductCategoryLabels[category];\n      });\n\n      renderRelatedProductCategoryButtons(section);\n      setRelatedProductVisibleCount(section);\n    } finally {\n      delete section.dataset.hcxRelatedCategoriesNormalizing;\n    }\n  };\n\n  const setRelatedProductVisibleCount = (section) => {\n    if (!section) return;\n\n    const rail = getProductLowerRailTrack(section);\n    const items = [...section.querySelectorAll(\"[data-hcx-related-category]\")];\n    const visibleCount =\n      items.filter((item) => !item.hidden && window.getComputedStyle(item).display !== \"none\").length || items.length;\n    const count = Math.max(1, Math.min(8, visibleCount || 1));\n\n    section.style.setProperty(\"--hcx-related-visible-count\", String(count));\n    rail?.style.setProperty(\"--hcx-related-visible-count\", String(count));\n  };\n\n  const applyRelatedProductCategory = (section, category) => {\n    if (!section) return;\n\n    normalizeRelatedProductCategories(section);\n\n    const requestedFilter = category || \"all\";\n    const filter =\n      requestedFilter === \"all\" || section.querySelector(`[data-hcx-related-category=\"${requestedFilter}\"]`)\n        ? requestedFilter\n        : \"all\";\n    section.querySelectorAll(\"[data-hcx-related-filter]\").forEach((button) => {\n      const isActive = button.dataset.hcxRelatedFilter === filter;\n      button.classList.toggle(\"is-active\", isActive);\n      button.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\n    });\n\n    const hasDefaultSet = section.querySelector(\"[data-hcx-related-default='true']\");\n    section.querySelectorAll(\"[data-hcx-related-category]\").forEach((item) => {\n      const shouldShow =\n        filter === \"all\"\n          ? !hasDefaultSet || item.dataset.hcxRelatedDefault === \"true\"\n          : item.dataset.hcxRelatedCategory === filter;\n      item.hidden = !shouldShow;\n      item.classList.toggle(\"is-hidden-by-category\", !shouldShow);\n    });\n    setRelatedProductVisibleCount(section);\n\n    const rail = getProductLowerRailTrack(section);\n    if (rail) {\n      rail.scrollTo({ left: 0, behavior: \"smooth\" });\n      window.requestAnimationFrame(() => updateProductLowerRailControls(section));\n      window.requestAnimationFrame(() => initHomeFeaturedDropSliders());\n    }\n  };\n\n  const getRelatedProductCategorySection = (source) => {\n    const section = source?.closest?.(\".related-products--recommendations\");\n    if (!section || !section.querySelector(\"[data-hcx-related-category]\")) return null;\n    return section;\n  };\n\n  const initRelatedProductCategories = () => {\n    const normalizeAllRelatedProductSections = () => {\n      document.querySelectorAll(\".related-products--recommendations\").forEach((section) => {\n        if (!section.querySelector(\"[data-hcx-related-category]\")) return;\n\n        normalizeRelatedProductCategories(section);\n\n        if (section.dataset.hcxRelatedCategoryObserverBound === \"true\" || !(\"MutationObserver\" in window)) return;\n\n        section.dataset.hcxRelatedCategoryObserverBound = \"true\";\n        new MutationObserver((mutations) => {\n          if (mutations.some((mutation) => mutation.addedNodes.length || mutation.removedNodes.length)) {\n            normalizeRelatedProductCategories(section);\n          }\n        }).observe(section, { childList: true, subtree: true });\n      });\n    };\n\n    window.HCXRelatedFilterClick = (event, button) => {\n      const section = getRelatedProductCategorySection(button);\n      if (!button || !section) return false;\n\n      event?.preventDefault?.();\n      applyRelatedProductCategory(section, button.dataset.hcxRelatedFilter || \"all\");\n      return false;\n    };\n\n    normalizeAllRelatedProductSections();\n\n    if (document.documentElement.dataset.hcxRelatedCategoryFiltersBound === \"true\") return;\n\n    document.documentElement.dataset.hcxRelatedCategoryFiltersBound = \"true\";\n    document.addEventListener(\"shopify:section:load\", normalizeAllRelatedProductSections);\n    document.addEventListener(\"product-info:loaded\", normalizeAllRelatedProductSections);\n\n    document.addEventListener(\"click\", (event) => {\n      const target = event.target instanceof Element ? event.target : event.target?.parentElement;\n      const button = target?.closest(\"[data-hcx-related-filter]\");\n      if (!button) return;\n\n      window.HCXRelatedFilterClick(event, button);\n    });\n  };\n\n  const initHoverRevealScrollbars = () => {\n    const railSelector = [\n      \".related-products--style-with .product-grid\",\n      \".related-products--recommendations .product-grid\",\n      \".hcx-featured-drop:not(.hcx-recently-viewed) .hcx-featured-drop__grid\",\n      \".hcx-rep-products\",\n      \".hcx-conversion-rail__track\",\n    ].join(\", \");\n\n    document.querySelectorAll(railSelector).forEach((rail) => {\n      if (!(rail instanceof HTMLElement) || rail.dataset.hcxScrollbarRevealBound === \"true\") return;\n\n      rail.dataset.hcxScrollbarRevealBound = \"true\";\n      const stripSize = 44;\n      const stripOuterSlack = 18;\n      const stripInlineSlack = 12;\n      const cardHoverSelector = \".product-card-wrapper .card__inner, .product-card-wrapper .card__media\";\n      let clearHoverTimeout;\n      const canScrollHorizontally = () => rail.scrollWidth > rail.clientWidth + 2;\n      const canScrollVertically = () => rail.scrollHeight > rail.clientHeight + 2;\n      const revealStripHover = () => {\n        if (!canScrollHorizontally() && !canScrollVertically()) return;\n\n        window.clearTimeout(clearHoverTimeout);\n        rail.classList.add(\"hcx-scrollbar-strip-hover\");\n      };\n      const clearStripHover = () => {\n        window.clearTimeout(clearHoverTimeout);\n        rail.classList.remove(\"hcx-scrollbar-strip-hover\");\n      };\n      const scheduleClearStripHover = () => {\n        window.clearTimeout(clearHoverTimeout);\n        clearHoverTimeout = window.setTimeout(clearStripHover, 140);\n      };\n      const clearActive = () => rail.classList.remove(\"hcx-scrollbar-strip-active\");\n      const isInScrollbarStrip = (event) => {\n        const rect = rail.getBoundingClientRect();\n        const withinX =\n          event.clientX >= rect.left - stripInlineSlack && event.clientX <= rect.right + stripInlineSlack;\n        const withinY =\n          event.clientY >= rect.top - stripInlineSlack && event.clientY <= rect.bottom + stripInlineSlack;\n        const overHorizontalStrip =\n          canScrollHorizontally() &&\n          withinX &&\n          event.clientY >= rect.bottom - stripSize &&\n          event.clientY <= rect.bottom + stripOuterSlack;\n        const overVerticalStrip =\n          canScrollVertically() &&\n          withinY &&\n          event.clientX >= rect.right - stripSize &&\n          event.clientX <= rect.right + stripOuterSlack;\n\n        return overHorizontalStrip || overVerticalStrip;\n      };\n      const isProductImageHover = (target) =>\n        target instanceof Element && Boolean(target.closest(cardHoverSelector));\n\n      rail.addEventListener(\"pointermove\", (event) => {\n        if (isInScrollbarStrip(event) || isProductImageHover(event.target)) {\n          revealStripHover();\n          return;\n        }\n\n        if (!rail.classList.contains(\"hcx-scrollbar-strip-active\")) scheduleClearStripHover();\n      });\n      rail.addEventListener(\"pointerover\", (event) => {\n        if (isProductImageHover(event.target)) revealStripHover();\n      });\n      rail.addEventListener(\"pointerleave\", () => {\n        if (!rail.classList.contains(\"hcx-scrollbar-strip-active\")) scheduleClearStripHover();\n      });\n      rail.addEventListener(\"pointerdown\", (event) => {\n        if (!isInScrollbarStrip(event)) return;\n        rail.classList.add(\"hcx-scrollbar-strip-active\");\n      });\n      rail.addEventListener(\"pointerup\", clearActive);\n      rail.addEventListener(\"pointercancel\", clearActive);\n      rail.addEventListener(\"lostpointercapture\", clearActive);\n      rail.addEventListener(\"scroll\", () => {\n        if (!canScrollHorizontally() && !canScrollVertically()) {\n          clearStripHover();\n          clearActive();\n        }\n      });\n    });\n  };\n\n  const getHomeFeaturedDropSliderRail = (section) => {\n    if (!(section instanceof HTMLElement)) return null;\n\n    return section.querySelector(\".hcx-featured-drop__grid, .product-grid, .hcx-recently-viewed__track\");\n  };\n\n  const normalizeHomeFeaturedDropStaticGrid = (section) => {\n    if (\n      !isHome ||\n      !(section instanceof HTMLElement) ||\n      !section.classList.contains(\"hcx-featured-drop\") ||\n      section.classList.contains(\"hcx-recently-viewed\")\n    ) {\n      return false;\n    }\n\n    const grid = section.querySelector(\".hcx-featured-drop__grid\");\n    if (!(grid instanceof HTMLElement)) return true;\n\n    section.querySelectorAll(\".hcx-featured-drop__slider, [data-hcx-home-rail-slider]\").forEach((slider) => {\n      slider.remove();\n    });\n\n    section.classList.remove(\n      \"hcx-featured-drop--has-slider\",\n      \"hcx-featured-drop--slider-active\",\n      \"hcx-rail-slider--has-slider\",\n      \"hcx-rail-slider--slider-active\",\n      \"hcx-rail-slider--bar-hover\"\n    );\n\n    grid.dataset.hcxHomepageStaticGrid = \"true\";\n    grid.removeAttribute(\"data-hcx-rail-slider-track\");\n    grid.scrollLeft = 0;\n    const isDesktopGrid = window.matchMedia && window.matchMedia(\"(min-width: 990px)\").matches;\n    grid.style.setProperty(\"display\", \"grid\", \"important\");\n    grid.style.setProperty(\"grid-template-columns\", isDesktopGrid ? \"repeat(5, minmax(0, 1fr))\" : \"repeat(2, minmax(0, 1fr))\", \"important\");\n    grid.style.setProperty(\"grid-auto-flow\", \"row\", \"important\");\n    grid.style.setProperty(\"grid-auto-columns\", \"unset\", \"important\");\n    grid.style.setProperty(\"column-gap\", isDesktopGrid ? \".18rem\" : \".55rem\", \"important\");\n    grid.style.setProperty(\"row-gap\", isDesktopGrid ? \".18rem\" : \"1.25rem\", \"important\");\n    grid.style.setProperty(\"overflow-x\", \"visible\", \"important\");\n    grid.style.setProperty(\"overflow-y\", \"visible\", \"important\");\n    grid.style.setProperty(\"scroll-snap-type\", \"none\", \"important\");\n    grid.style.setProperty(\"scrollbar-width\", \"none\", \"important\");\n\n    [...grid.children].forEach((child) => {\n      if (!(child instanceof HTMLElement) || !child.matches(\"li\")) return;\n\n      child.style.setProperty(\"width\", \"auto\", \"important\");\n      child.style.setProperty(\"max-width\", \"none\", \"important\");\n      child.style.setProperty(\"min-width\", \"0\", \"important\");\n      child.style.setProperty(\"scroll-snap-align\", \"unset\", \"important\");\n      child.style.setProperty(\"display\", \"\", \"\");\n    });\n\n    grid.querySelectorAll(\":scope > li[data-hcx-home-grid-clone='true']\").forEach((clone) => clone.remove());\n\n    const originalItems = [...grid.children].filter(\n      (child) => child instanceof HTMLElement && child.matches(\"li\")\n    );\n    if (!originalItems.length) return true;\n\n    const parsedTargetCount = parseInt(section.dataset.hcxProductTarget || \"\", 10);\n    const targetCount = parsedTargetCount > 0 ? parsedTargetCount : 12;\n    let visibleItems = originalItems.slice(0, targetCount);\n    originalItems.slice(targetCount).forEach((item) => {\n      item.style.setProperty(\"display\", \"none\", \"important\");\n    });\n\n    for (let index = 0; visibleItems.length < targetCount; index += 1) {\n      const source = originalItems[index % originalItems.length];\n      const clone = source.cloneNode(true);\n      if (!(clone instanceof HTMLElement)) break;\n\n      clone.dataset.hcxHomeGridClone = \"true\";\n      clone.style.setProperty(\"width\", \"auto\", \"important\");\n      clone.style.setProperty(\"max-width\", \"none\", \"important\");\n      clone.style.setProperty(\"min-width\", \"0\", \"important\");\n      clone.style.setProperty(\"scroll-snap-align\", \"unset\", \"important\");\n      grid.appendChild(clone);\n      visibleItems.push(clone);\n    }\n\n    return true;\n  };\n\n  const normalizeHomeFeaturedDropStaticGrids = () => {\n    if (!isHome) return;\n\n    document\n      .querySelectorAll(\".hcx-featured-drop:not(.hcx-recently-viewed)\")\n      .forEach((section) => normalizeHomeFeaturedDropStaticGrid(section));\n  };\n\n  const syncHomeFeaturedDropSlider = (section) => {\n    if (normalizeHomeFeaturedDropStaticGrid(section)) return;\n\n    const rail = getHomeFeaturedDropSliderRail(section);\n    const slider = section?.querySelector(\"[data-hcx-home-rail-slider]\");\n    const thumb = section?.querySelector(\"[data-hcx-home-rail-slider-thumb]\");\n    if (!(rail instanceof HTMLElement) || !(slider instanceof HTMLElement) || !(thumb instanceof HTMLElement)) return;\n\n    const maxScroll = Math.max(0, rail.scrollWidth - rail.clientWidth);\n    const trackWidth = slider.clientWidth || slider.getBoundingClientRect().width || rail.clientWidth || section.clientWidth || 0;\n    const canScroll = maxScroll > 1 && trackWidth > 0;\n\n    section.classList.toggle(\"hcx-featured-drop--has-slider\", canScroll);\n    section.classList.toggle(\"hcx-rail-slider--has-slider\", canScroll);\n\n    if (!canScroll) {\n      thumb.style.setProperty(\"--hcx-home-slider-thumb-width\", \"100%\");\n      thumb.style.setProperty(\"--hcx-home-slider-thumb-x\", \"0px\");\n      thumb.style.setProperty(\"width\", \"100%\", \"important\");\n      thumb.style.setProperty(\"transform\", \"translate3d(0px, 0, 0)\", \"important\");\n      return;\n    }\n\n    const visibleRatio = Math.min(1, rail.clientWidth / rail.scrollWidth);\n    const thumbWidth = Math.max(96, Math.min(trackWidth * visibleRatio, trackWidth * 0.36));\n    const maxThumbX = Math.max(0, trackWidth - thumbWidth);\n    const thumbX = (rail.scrollLeft / maxScroll) * maxThumbX;\n\n    thumb.style.setProperty(\"--hcx-home-slider-thumb-width\", `${thumbWidth}px`);\n    thumb.style.setProperty(\"--hcx-home-slider-thumb-x\", `${thumbX}px`);\n    thumb.style.setProperty(\"width\", `${thumbWidth}px`, \"important\");\n    thumb.style.setProperty(\"transform\", `translate3d(${thumbX}px, 0, 0)`, \"important\");\n  };\n\n  const initHomeFeaturedDropSliders = () => {\n    normalizeHomeFeaturedDropStaticGrids();\n\n    if (isHome) return;\n\n    const sectionSelector = [\n      \".hcx-featured-drop:not(.hcx-recently-viewed)\",\n      \".related-products--style-with\",\n      \".related-products--recommendations\",\n      \"#recently-viewed\",\n    ].join(\", \");\n\n    document.querySelectorAll(sectionSelector).forEach((section) => {\n      if (normalizeHomeFeaturedDropStaticGrid(section)) return;\n\n      const rail = getHomeFeaturedDropSliderRail(section);\n      const slider = section.querySelector(\"[data-hcx-home-rail-slider]\");\n      const thumb = section.querySelector(\"[data-hcx-home-rail-slider-thumb]\");\n      if (!(rail instanceof HTMLElement) || !(slider instanceof HTMLElement) || !(thumb instanceof HTMLElement)) return;\n\n      rail.dataset.hcxRailSliderTrack = \"true\";\n\n      const requestSync = () => {\n        if (rail.dataset.hcxHomeRailSliderFrame === \"true\") return;\n        rail.dataset.hcxHomeRailSliderFrame = \"true\";\n        window.requestAnimationFrame(() => {\n          rail.dataset.hcxHomeRailSliderFrame = \"false\";\n          syncHomeFeaturedDropSlider(section);\n        });\n      };\n\n      if (slider.dataset.hcxHomeRailSliderBound !== \"true\") {\n        slider.dataset.hcxHomeRailSliderBound = \"true\";\n        rail.addEventListener(\"scroll\", requestSync, { passive: true });\n        window.addEventListener(\"resize\", requestSync, { passive: true });\n\n        let sliderDragInProgress = false;\n        const desktopSliderQuery = window.matchMedia(\"(hover: hover) and (pointer: fine) and (min-width: 990px)\");\n        const canUseSlider = () => desktopSliderQuery.matches;\n        const showSliderHover = () => {\n          if (canUseSlider()) section.classList.add(\"hcx-rail-slider--bar-hover\");\n        };\n        const clearSliderHover = () => {\n          if (!sliderDragInProgress) section.classList.remove(\"hcx-rail-slider--bar-hover\");\n        };\n        const startSliderDrag = (event, { capturePointer = false, eventPrefix = \"pointer\", pointerId } = {}) => {\n          if (sliderDragInProgress) return;\n          if (!canUseSlider()) return;\n\n          const maxScroll = Math.max(0, rail.scrollWidth - rail.clientWidth);\n          if (maxScroll <= 1) return;\n\n          event.preventDefault();\n          event.stopPropagation();\n          sliderDragInProgress = true;\n          const previousUserSelect = document.documentElement.style.userSelect;\n          const previousScrollBehavior = rail.style.scrollBehavior;\n          const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n          const getMetrics = () => {\n            const rect = slider.getBoundingClientRect();\n            const thumbWidth = Math.min(\n              rect.width || 1,\n              Number.parseFloat(getComputedStyle(thumb).getPropertyValue(\"--hcx-home-slider-thumb-width\")) ||\n                thumb.getBoundingClientRect().width ||\n                1\n            );\n\n            return {\n              maxScroll: Math.max(0, rail.scrollWidth - rail.clientWidth),\n              rect,\n              thumbWidth,\n              travel: Math.max(1, rect.width - thumbWidth),\n            };\n          };\n          const initialMetrics = getMetrics();\n          const thumbRect = thumb.getBoundingClientRect();\n          const pointerOffsetWithinThumb =\n            event.clientX >= thumbRect.left && event.clientX <= thumbRect.right\n              ? event.clientX - thumbRect.left\n              : initialMetrics.thumbWidth / 2;\n          let pendingClientX = event.clientX;\n          let dragFrame = null;\n          let dragging = true;\n\n          document.documentElement.style.userSelect = \"none\";\n          rail.style.scrollBehavior = \"auto\";\n          section.classList.add(\"hcx-featured-drop--slider-active\");\n          section.classList.add(\"hcx-rail-slider--slider-active\");\n          section.classList.add(\"hcx-rail-slider--bar-hover\");\n          rail.classList.add(\"hcx-scrollbar-strip-active\");\n          if (capturePointer) {\n            try {\n              slider.setPointerCapture?.(pointerId);\n            } catch (error) {\n              // Pointer capture can fail if the browser cancels the pointer immediately.\n            }\n          }\n\n          const applyPointerPosition = () => {\n            dragFrame = null;\n\n            const metrics = getMetrics();\n            if (metrics.maxScroll <= 1) return;\n\n            const targetX = clamp(\n              pendingClientX - metrics.rect.left - pointerOffsetWithinThumb,\n              0,\n              metrics.travel\n            );\n            rail.scrollLeft = (targetX / metrics.travel) * metrics.maxScroll;\n            syncHomeFeaturedDropSlider(section);\n          };\n\n          const moveToPointer = (pointerEvent) => {\n            pointerEvent.preventDefault();\n            pendingClientX = pointerEvent.clientX;\n\n            if (dragFrame !== null) return;\n            dragFrame = window.requestAnimationFrame(applyPointerPosition);\n          };\n\n          const stopDragging = () => {\n            if (!dragging) return;\n\n            dragging = false;\n            if (dragFrame !== null) {\n              window.cancelAnimationFrame(dragFrame);\n              applyPointerPosition();\n            }\n\n            document.documentElement.style.userSelect = previousUserSelect;\n            rail.style.scrollBehavior = previousScrollBehavior;\n            section.classList.remove(\"hcx-featured-drop--slider-active\");\n            section.classList.remove(\"hcx-rail-slider--slider-active\");\n            if (!slider.matches(\":hover\")) section.classList.remove(\"hcx-rail-slider--bar-hover\");\n            rail.classList.remove(\"hcx-scrollbar-strip-active\");\n            sliderDragInProgress = false;\n            if (capturePointer) {\n              try {\n                if (slider.hasPointerCapture?.(pointerId)) slider.releasePointerCapture(pointerId);\n              } catch (error) {\n                // The pointer may already be released after a cancel/lostcapture event.\n              }\n            }\n            document.removeEventListener(`${eventPrefix}move`, moveToPointer);\n            document.removeEventListener(`${eventPrefix}up`, stopDragging);\n            if (eventPrefix === \"pointer\") {\n              document.removeEventListener(\"pointercancel\", stopDragging);\n              slider.removeEventListener(\"lostpointercapture\", stopDragging);\n            }\n          };\n\n          document.addEventListener(`${eventPrefix}move`, moveToPointer);\n          document.addEventListener(`${eventPrefix}up`, stopDragging);\n          if (eventPrefix === \"pointer\") {\n            document.addEventListener(\"pointercancel\", stopDragging);\n            slider.addEventListener(\"lostpointercapture\", stopDragging);\n          }\n          moveToPointer(event);\n        };\n\n        slider.addEventListener(\"pointerdown\", (event) => {\n          startSliderDrag(event, { capturePointer: true, eventPrefix: \"pointer\", pointerId: event.pointerId });\n        });\n        slider.addEventListener(\"pointerenter\", showSliderHover);\n        slider.addEventListener(\"pointermove\", showSliderHover);\n        slider.addEventListener(\"pointerleave\", clearSliderHover);\n\n        slider.addEventListener(\"mousedown\", (event) => {\n          if (event.button !== 0) return;\n\n          startSliderDrag(event, { eventPrefix: \"mouse\" });\n        });\n      }\n\n      if (rail.dataset.hcxHomeRailSliderResizeBound !== \"true\" && \"ResizeObserver\" in window) {\n        rail.dataset.hcxHomeRailSliderResizeBound = \"true\";\n        const observer = new ResizeObserver(requestSync);\n        observer.observe(rail);\n        observer.observe(section);\n      }\n\n      rail.querySelectorAll(\"img\").forEach((image) => {\n        if (!(image instanceof HTMLImageElement) || image.dataset.hcxRailSliderImageBound === \"true\") return;\n\n        image.dataset.hcxRailSliderImageBound = \"true\";\n        if (!image.complete) image.addEventListener(\"load\", requestSync, { once: true });\n      });\n\n      requestSync();\n    });\n\n    if (html.dataset.hcxRailSlidersObserverBound !== \"true\" && \"MutationObserver\" in window) {\n      html.dataset.hcxRailSlidersObserverBound = \"true\";\n      const requestGlobalSync = () => {\n        if (html.dataset.hcxRailSlidersFrame === \"true\") return;\n        html.dataset.hcxRailSlidersFrame = \"true\";\n        window.requestAnimationFrame(() => {\n          html.dataset.hcxRailSlidersFrame = \"false\";\n          initHomeFeaturedDropSliders();\n        });\n      };\n\n      new MutationObserver(requestGlobalSync).observe(document.getElementById(\"MainContent\") || document.body, {\n        childList: true,\n        subtree: true,\n      });\n      document.addEventListener(\"shopify:section:load\", requestGlobalSync);\n      document.addEventListener(\"product-info:loaded\", requestGlobalSync);\n    }\n  };\n\n  const initRailScrollbarStripDrag = () => {\n    const railSelector = [\n      \".hcx-featured-drop:not(.hcx-recently-viewed) .hcx-featured-drop__grid\",\n      \".related-products--style-with .product-grid\",\n      \".related-products--recommendations .product-grid\",\n      \"#recently-viewed .hcx-recently-viewed__track\",\n    ].join(\", \");\n    const desktopScrollbarQuery = window.matchMedia(\"(hover: hover) and (pointer: fine) and (min-width: 990px)\");\n    const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n    document.querySelectorAll(railSelector).forEach((rail) => {\n      if (!(rail instanceof HTMLElement) || rail.dataset.hcxRailScrollbarStripBound === \"true\") return;\n\n      rail.dataset.hcxRailScrollbarStripBound = \"true\";\n      let dragging = false;\n      let dragFrame = null;\n      let pendingClientX = 0;\n      let pointerOffsetWithinThumb = 0;\n      let previousUserSelect = \"\";\n      let previousScrollBehavior = \"\";\n\n      const getSection = () => rail.closest(\".hcx-featured-drop, .related-products, #recently-viewed\");\n      const canUseScrollbarDrag = () =>\n        desktopScrollbarQuery.matches && rail.scrollWidth > rail.clientWidth + 2;\n      const getMetrics = () => {\n        const rect = rail.getBoundingClientRect();\n        const maxScroll = Math.max(0, rail.scrollWidth - rail.clientWidth);\n        const visibleRatio = rail.scrollWidth > 0 ? Math.min(1, rail.clientWidth / rail.scrollWidth) : 1;\n        const thumbWidth = Math.max(96, Math.min(rect.width * visibleRatio, rect.width * 0.36));\n        const travel = Math.max(1, rect.width - thumbWidth);\n        const thumbX = maxScroll > 1 ? (rail.scrollLeft / maxScroll) * travel : 0;\n\n        return { maxScroll, rect, thumbWidth, thumbX, travel };\n      };\n      const isInScrollbarStrip = (event) => {\n        if (!canUseScrollbarDrag()) return false;\n\n        const rect = rail.getBoundingClientRect();\n        const stripHeight = 30;\n        const outerSlack = 12;\n        return (\n          event.clientX >= rect.left - 8 &&\n          event.clientX <= rect.right + 8 &&\n          event.clientY >= rect.bottom - stripHeight &&\n          event.clientY <= rect.bottom + outerSlack\n        );\n      };\n      const setScrollbarHover = (isHovering) => {\n        const section = getSection();\n        rail.classList.toggle(\"hcx-native-rail-scrollbar-hover\", isHovering);\n        section?.classList.toggle(\"hcx-rail-slider--bar-hover\", isHovering);\n      };\n      const clearScrollbarHover = () => {\n        if (!dragging) setScrollbarHover(false);\n      };\n      const syncSectionSlider = () => {\n        const section = getSection();\n        if (section instanceof HTMLElement) syncHomeFeaturedDropSlider(section);\n      };\n      const applyPointerPosition = () => {\n        dragFrame = null;\n\n        const metrics = getMetrics();\n        if (metrics.maxScroll <= 1) return;\n\n        const targetX = clamp(\n          pendingClientX - metrics.rect.left - pointerOffsetWithinThumb,\n          0,\n          metrics.travel\n        );\n        rail.scrollLeft = (targetX / metrics.travel) * metrics.maxScroll;\n        syncSectionSlider();\n      };\n      const moveToPointer = (pointerEvent) => {\n        if (!dragging) return;\n\n        pointerEvent.preventDefault();\n        pendingClientX = pointerEvent.clientX;\n        if (dragFrame !== null) return;\n\n        dragFrame = window.requestAnimationFrame(applyPointerPosition);\n      };\n      const stopDragging = (pointerEvent) => {\n        if (!dragging) return;\n\n        dragging = false;\n        if (dragFrame !== null) {\n          window.cancelAnimationFrame(dragFrame);\n          applyPointerPosition();\n        }\n\n        document.documentElement.style.userSelect = previousUserSelect;\n        rail.style.scrollBehavior = previousScrollBehavior;\n        rail.classList.remove(\"hcx-native-rail-scrollbar-active\");\n        rail.classList.remove(\"hcx-scrollbar-strip-active\");\n        const section = getSection();\n        section?.classList.remove(\"hcx-rail-slider--slider-active\");\n        if (!rail.matches(\":hover\")) section?.classList.remove(\"hcx-rail-slider--bar-hover\");\n        if (!rail.matches(\":hover\")) rail.classList.remove(\"hcx-native-rail-scrollbar-hover\");\n        try {\n          if (pointerEvent?.pointerId != null && rail.hasPointerCapture?.(pointerEvent.pointerId)) {\n            rail.releasePointerCapture(pointerEvent.pointerId);\n          }\n        } catch (error) {\n          // Pointer capture may already be released if the browser cancels the drag.\n        }\n        document.removeEventListener(\"pointermove\", moveToPointer);\n        document.removeEventListener(\"pointerup\", stopDragging);\n        document.removeEventListener(\"pointercancel\", stopDragging);\n      };\n\n      rail.addEventListener(\"pointermove\", (event) => {\n        if (dragging || isInScrollbarStrip(event)) {\n          setScrollbarHover(true);\n          return;\n        }\n\n        clearScrollbarHover();\n      });\n      rail.addEventListener(\"pointerleave\", clearScrollbarHover);\n      rail.addEventListener(\"pointerdown\", (event) => {\n        if (event.button !== 0 || !isInScrollbarStrip(event)) return;\n\n        const metrics = getMetrics();\n        if (metrics.maxScroll <= 1) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        dragging = true;\n        pendingClientX = event.clientX;\n        previousUserSelect = document.documentElement.style.userSelect;\n        previousScrollBehavior = rail.style.scrollBehavior;\n        document.documentElement.style.userSelect = \"none\";\n        rail.style.scrollBehavior = \"auto\";\n        rail.classList.add(\"hcx-native-rail-scrollbar-active\");\n        rail.classList.add(\"hcx-scrollbar-strip-active\");\n        setScrollbarHover(true);\n        const section = getSection();\n        section?.classList.add(\"hcx-rail-slider--slider-active\");\n\n        const thumbLeft = metrics.rect.left + metrics.thumbX;\n        const thumbRight = thumbLeft + metrics.thumbWidth;\n        pointerOffsetWithinThumb =\n          event.clientX >= thumbLeft && event.clientX <= thumbRight\n            ? event.clientX - thumbLeft\n            : metrics.thumbWidth / 2;\n\n        try {\n          rail.setPointerCapture?.(event.pointerId);\n        } catch (error) {\n          // Pointer capture can fail if the browser has already cancelled this pointer.\n        }\n\n        document.addEventListener(\"pointermove\", moveToPointer);\n        document.addEventListener(\"pointerup\", stopDragging);\n        document.addEventListener(\"pointercancel\", stopDragging);\n        applyPointerPosition();\n      });\n      rail.addEventListener(\"scroll\", syncSectionSlider, { passive: true });\n    });\n  };\n\n  const initProductLowerRailWheelScroll = () => {\n    document\n      .querySelectorAll(\n        \".related-products--style-with .product-grid, .related-products--recommendations .product-grid\"\n      )\n      .forEach((rail) => {\n        if (rail.dataset.hcxProductRailWheelBound === \"true\") return;\n\n        rail.dataset.hcxProductRailWheelBound = \"true\";\n        const hasOverflow = () => rail.scrollWidth > rail.clientWidth + 2;\n        const isDesktopPointer = () => window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;\n\n        rail.addEventListener(\n          \"wheel\",\n          (event) => {\n            if (!isDesktopPointer() || !hasOverflow()) return;\n            if (Math.abs(event.deltaX) <= Math.abs(event.deltaY) && !event.shiftKey) return;\n            event.preventDefault();\n          },\n          { passive: false }\n        );\n      });\n  };\n\n  const initCollectionFilterAccordions = () => {\n    if (html.dataset.hcxCollectionFilterAccordionsBound === \"true\") return;\n    html.dataset.hcxCollectionFilterAccordionsBound = \"true\";\n\n    const isCollectionFilterPage = () =>\n      body?.classList.contains(\"template-collection\") || body?.classList.contains(\"template-search\");\n\n    const closeFacetDetails = (details) => {\n      if (!(details instanceof HTMLElement)) return;\n\n      details.open = false;\n      details.classList.remove(\"menu-opening\");\n      details.querySelector(\".mobile-facets__summary\")?.setAttribute(\"aria-expanded\", \"false\");\n    };\n\n    document.addEventListener(\n      \"click\",\n      (event) => {\n        if (!isCollectionFilterPage()) return;\n\n        const summary = event.target?.closest?.(\"#FacetFiltersFormMobile .mobile-facets__details > .mobile-facets__summary\");\n        if (!(summary instanceof HTMLElement)) return;\n\n        const details = summary.closest(\".mobile-facets__details\");\n        if (!(details instanceof HTMLElement)) return;\n\n        event.preventDefault();\n        event.stopImmediatePropagation();\n\n        const shouldOpen = !details.open;\n        const main = details.closest(\".mobile-facets__main\");\n\n        main?.querySelectorAll(\".mobile-facets__details[open]\").forEach((candidate) => {\n          if (candidate !== details) closeFacetDetails(candidate);\n        });\n\n        details.open = shouldOpen;\n        details.classList.remove(\"menu-opening\");\n        main?.classList.remove(\"submenu-open\");\n        summary.setAttribute(\"aria-expanded\", shouldOpen ? \"true\" : \"false\");\n        summary.focus({ preventScroll: true });\n      },\n      true\n    );\n  };\n\n  const getHcxThemeAssetUrl = (filename) => {\n    const script = document.querySelector('script[src*=\"hercxles-premium-wheel-guard.js\"], script[src*=\"hercxles-premium.js\"]');\n    const scriptSrc = script?.getAttribute(\"src\") || \"\";\n    if (!scriptSrc) return \"\";\n\n    const absoluteScriptSrc = new URL(scriptSrc, window.location.origin).href;\n    return absoluteScriptSrc.replace(/hercxles-premium(?:-wheel-guard)?\\.js(?:\\?.*)?$/i, filename);\n  };\n\n  const forcedProductCardImages = [];\n\n  const setForcedProductCardImageSource = (image, src, alt) => {\n    if (!image || image.tagName !== \"IMG\" || !src) return;\n\n    image.removeAttribute(\"srcset\");\n    image.removeAttribute(\"data-hcx-lazy-srcset\");\n    image.dataset.hcxLazySrc = src;\n    image.dataset.hcxLazyLoaded = \"true\";\n    image.src = src;\n    image.alt = alt;\n    image.width = 3000;\n    image.height = 4000;\n  };\n\n  const syncForcedProductCardImages = () => {\n    forcedProductCardImages.forEach((replacement) => {\n      document.querySelectorAll(`.product-card-wrapper a[href*=\"/products/${replacement.handle}\"]`).forEach((link) => {\n        const card = link.closest(\".product-card-wrapper\");\n        if (!card) return;\n\n        const images = [...card.querySelectorAll(\".card__media img[data-hcx-card-image], .card__media img\")];\n        if (!images.length) return;\n\n        images.forEach((image, index) => {\n          const useHover = index > 0 && replacement.hoverUrl;\n          setForcedProductCardImageSource(\n            image,\n            useHover ? replacement.hoverUrl : replacement.primaryUrl,\n            useHover ? replacement.hoverAlt : replacement.primaryAlt\n          );\n        });\n\n        if (replacement.hoverUrl && images.length > 1) {\n          card.classList.add(\"hcx-card-wrapper--has-hover-image\");\n          card.querySelector(\".card__media .media\")?.setAttribute(\"data-hcx-card-gallery\", \"\");\n        }\n      });\n    });\n  };\n\n  const syncRequestedModelHoverImages = () => {\n    const replacements = [\n      {\n        handle: \"sport-sweatpants-black\",\n        asset: \"hcx-sport-sweatpants-model-no-black-nike-v3.jpg\",\n        alt: \"Sport Sweatpants worn by model\",\n      },\n      {\n        handle: \"angel-waffle-long-sleeve\",\n        asset: \"hcx-angel-waffle-long-sleeve-grey.jpg\",\n        alt: \"Angel Waffle Long Sleeve worn by model\",\n      },\n    ];\n\n    replacements.forEach((replacement) => {\n      const assetUrl = getHcxThemeAssetUrl(replacement.asset);\n      if (!assetUrl) return;\n\n      document.querySelectorAll(`.product-card-wrapper a[href*=\"/products/${replacement.handle}\"]`).forEach((link) => {\n        const card = link.closest(\".product-card-wrapper\");\n        const hoverImage = card?.querySelector(\".hcx-card-hover-image\");\n        if (!hoverImage || hoverImage.tagName !== \"IMG\") return;\n        if (hoverImage.currentSrc.includes(`/assets/${replacement.asset}`) || hoverImage.src.includes(`/assets/${replacement.asset}`)) return;\n\n        const nextSrc = `${assetUrl}?hcx=20260603-model-hover`;\n        hoverImage.removeAttribute(\"srcset\");\n        hoverImage.removeAttribute(\"data-hcx-lazy-srcset\");\n        if (hoverImage.dataset.hcxLazySrc || hoverImage.dataset.hcxLazyLoaded !== \"true\") {\n          hoverImage.dataset.hcxLazySrc = nextSrc;\n          hoverImage.dataset.hcxLazyHoverImage = \"true\";\n          if (hoverImage.dataset.hcxLazyLoaded !== \"true\") hoverImage.src = hcxTransparentImage;\n          bindHcxDeferredImages(hoverImage);\n        } else {\n          hoverImage.src = nextSrc;\n        }\n        hoverImage.alt = replacement.alt;\n        hoverImage.width = 3000;\n        hoverImage.height = 4000;\n      });\n    });\n  };\n\n  const syncRequestedPrimaryModelImages = () => {\n    const replacements = [\n      {\n        handle: \"lckd-in-full-zip-mesh-jacket\",\n        asset: \"hcx-lckd-in-full-zip-mesh-jacket-flatlay-front.jpg\",\n        alt: \"LCKD IN Mesh Jacket flat lay front\",\n      },\n    ];\n\n    replacements.forEach((replacement) => {\n      const assetUrl = getHcxThemeAssetUrl(replacement.asset);\n      if (!assetUrl) return;\n\n      document.querySelectorAll(`.product-card-wrapper a[href*=\"/products/${replacement.handle}\"]`).forEach((link) => {\n        const card = link.closest(\".product-card-wrapper\");\n        const primaryImage = card?.querySelector(\"img:not(.hcx-card-hover-image)\");\n        if (!primaryImage || primaryImage.tagName !== \"IMG\") return;\n        if (primaryImage.currentSrc.includes(`/assets/${replacement.asset}`) || primaryImage.src.includes(`/assets/${replacement.asset}`)) return;\n\n        const nextSrc = `${assetUrl}?hcx=20260623-flatlay-primary`;\n        primaryImage.removeAttribute(\"srcset\");\n        primaryImage.removeAttribute(\"data-hcx-lazy-srcset\");\n        primaryImage.dataset.hcxLazySrc = nextSrc;\n        primaryImage.src = hcxTransparentImage;\n        bindHcxDeferredImages(primaryImage);\n        primaryImage.alt = replacement.alt;\n        primaryImage.width = 3000;\n        primaryImage.height = 4000;\n      });\n    });\n  };\n\n  const initRequestedModelHoverImageSync = () => {\n    syncRequestedPrimaryModelImages();\n    syncRequestedModelHoverImages();\n    syncForcedProductCardImages();\n\n    if (isHome) return;\n\n    if (html.dataset.hcxRequestedModelHoverSyncBound === \"true\" || !document.body || !(\"MutationObserver\" in window)) return;\n    html.dataset.hcxRequestedModelHoverSyncBound = \"true\";\n\n    new MutationObserver(() => window.requestAnimationFrame(() => {\n      syncRequestedPrimaryModelImages();\n      syncRequestedModelHoverImages();\n      syncForcedProductCardImages();\n    })).observe(document.body, {\n      childList: true,\n      subtree: true,\n    });\n  };\n\n  let hcxProductCardGalleryMediaListenerBound = false;\n\n  const initProductCardImageArrows = (root = document) => {\n    const hoverMedia = window.matchMedia?.(\"(hover: hover) and (pointer: fine)\");\n\n    if (!hoverMedia?.matches) {\n      if (hoverMedia && !hcxProductCardGalleryMediaListenerBound) {\n        hcxProductCardGalleryMediaListenerBound = true;\n        const initOnDesktop = () => initProductCardImageArrows();\n        hoverMedia.addEventListener?.(\"change\", initOnDesktop);\n        hoverMedia.addListener?.(initOnDesktop);\n      }\n      return;\n    }\n\n    root.querySelectorAll?.(\"[data-hcx-card-gallery]\").forEach((gallery) => {\n      const card = gallery.closest(\".product-card-wrapper\");\n      const images = Array.from(gallery.querySelectorAll(\"img[data-hcx-card-image]\"));\n      if (!card || images.length < 2 || card.dataset.hcxCardGalleryReady === \"true\") return;\n\n      card.dataset.hcxCardGalleryReady = \"true\";\n      gallery.dataset.hcxCardGalleryVersion = \"20260619-slide-v1\";\n      gallery.dataset.hcxCardGalleryIndex = String(Math.max(0, images.findIndex((image) => image.classList.contains(\"is-hcx-active\"))));\n\n      let slideTimer = null;\n\n      const setImageState = (image, { opacity, zIndex, transform, transition }) => {\n        image.style.setProperty(\"opacity\", opacity, \"important\");\n        image.style.setProperty(\"z-index\", zIndex, \"important\");\n        image.style.setProperty(\"visibility\", \"visible\", \"important\");\n        image.style.setProperty(\"transform\", transform, \"important\");\n        image.style.setProperty(\"pointer-events\", \"none\", \"important\");\n        image.style.setProperty(\"transition\", transition, \"important\");\n      };\n\n      const syncActiveImage = (index) => {\n        images.forEach((candidate, candidateIndex) => {\n          const isActive = candidateIndex === index;\n          candidate.classList.toggle(\"is-hcx-active\", isActive);\n          candidate.toggleAttribute(\"aria-hidden\", !isActive);\n          setImageState(candidate, {\n            opacity: isActive ? \"1\" : \"0\",\n            zIndex: isActive ? \"3\" : \"1\",\n            transform: \"translate3d(0, 0, 0)\",\n            transition: \"none\",\n          });\n        });\n        gallery.dataset.hcxCardGalleryIndex = String(index);\n      };\n\n      const setActiveImage = (nextIndex, direction = 1) => {\n        const currentIndex = Number(gallery.dataset.hcxCardGalleryIndex || 0);\n        const index = (nextIndex + images.length) % images.length;\n        if (index === currentIndex) return;\n\n        window.clearTimeout(slideTimer);\n        const image = images[index];\n        loadHcxDeferredImage(image);\n        const current = images[currentIndex];\n        const width = gallery.getBoundingClientRect().width || 1;\n        images.forEach((candidate, candidateIndex) => {\n          const isCurrent = candidateIndex === currentIndex;\n          const isIncoming = candidateIndex === index;\n          candidate.classList.toggle(\"is-hcx-active\", isCurrent);\n          candidate.toggleAttribute(\"aria-hidden\", !isCurrent);\n          setImageState(candidate, {\n            opacity: isCurrent || isIncoming ? \"1\" : \"0\",\n            zIndex: isCurrent ? \"3\" : isIncoming ? \"2\" : \"1\",\n            transform: isIncoming ? `translate3d(${direction * width}px, 0, 0)` : \"translate3d(0, 0, 0)\",\n            transition: \"none\",\n          });\n        });\n\n        gallery.dataset.hcxCardGallerySliding = \"true\";\n        window.requestAnimationFrame(() => {\n          setImageState(current, {\n            opacity: \"1\",\n            zIndex: \"3\",\n            transform: `translate3d(${-direction * width}px, 0, 0)`,\n            transition: \"transform .24s cubic-bezier(.22, .61, .36, 1)\",\n          });\n          setImageState(image, {\n            opacity: \"1\",\n            zIndex: \"4\",\n            transform: \"translate3d(0, 0, 0)\",\n            transition: \"transform .24s cubic-bezier(.22, .61, .36, 1)\",\n          });\n        });\n\n        slideTimer = window.setTimeout(() => {\n          gallery.removeAttribute(\"data-hcx-card-gallery-sliding\");\n          syncActiveImage(index);\n        }, 250);\n      };\n\n      const bindArrow = (selector, direction) => {\n        const button = card.querySelector(selector);\n        if (!button) return;\n\n        button.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n          event.stopPropagation();\n          const currentIndex = Number(gallery.dataset.hcxCardGalleryIndex || 0);\n          setActiveImage(currentIndex + direction, direction);\n        });\n      };\n\n      syncActiveImage(Number(gallery.dataset.hcxCardGalleryIndex || 0));\n      bindArrow(\"[data-hcx-card-gallery-prev]\", -1);\n      bindArrow(\"[data-hcx-card-gallery-next]\", 1);\n    });\n  };\n\n  const initProductEnhancements = () => {\n    initHeaderAccountPointsGuard();\n    bindHcxDeferredImages();\n    initProductCardImageArrows();\n    initHeaderAnnouncementSlider();\n    initUnavailableXsDescriptionCleanup();\n    initProductDescriptionFormatting();\n    initProductInfoPanels();\n    // These full-document text MutationObservers can fight with Shopify/app-injected\n    // content on large pages and keep Chrome's renderer busy during load.\n    // Keep them off the critical path until they can be narrowed to owned sections.\n    // initStoreTextCase();\n    initButtonTextFly();\n    initCareCartAttributionCleaner();\n    initPolicyPageEnhancements();\n    initReturnExchangePortal();\n    initFaqPage();\n    initOrderTrackingHubs();\n    initMobileMenuInteractionGuard();\n    initMobileMenuClose();\n    initMobileMenuSearch();\n    initCartRecommendationScrollbars();\n    initRecentCartRecommendations();\n    initCardQuickAdds();\n    initCardQuickAddRefresh();\n    initSearchQuickAdds();\n    initLinkedColourHoverLabels();\n    initAllRequiredSizeSelections();\n    initFitConfidenceSystem();\n    initSavesControls();\n    initProductTitleRhythm();\n    initInStockSizeFiltering();\n    initColourFilterGrouping();\n    initDeliveryPromises();\n    initHcxStoreReviews();\n    initProductReviewMetrics();\n    initRelatedProductCategories();\n    initHoverRevealScrollbars();\n    initHomeFeaturedDropSliders();\n    initRailScrollbarStripDrag();\n    initClickableHeroes();\n    trackRecentlyViewedProduct();\n    renderRecentlyViewed();\n    initProductLowerRailWheelScroll();\n    initProductLowerRailControls();\n    initCustomerVoiceCarousels();\n    initCollectionFilterAccordions();\n    initRequestedModelHoverImageSync();\n    rerenderProductReviewApp();\n    initLoyaltyProgram();\n    initLegacyRegisterForm();\n    initLoyaltyInterface();\n    initKlaviyoLegacyPopupImage();\n    initLoyaltyPhoneScenes();\n    initLegacyOrderNotifications();\n    renderSaves();\n    initCookieConsentFallback();\n  };\n\n  const isLaunchGateLocked = () =>\n    Boolean(document.querySelector(\"[data-hcx-launch-gate]\")) &&\n    !html.classList.contains(\"hcx-launch-unlocked\") &&\n    !window.Shopify?.designMode;\n\n  const initProductEnhancementsWhenAllowed = () => {\n    if (isLaunchGateLocked()) return;\n    initProductEnhancements();\n  };\n\n  const initAlwaysSafeEnhancements = () => {\n    initHeaderAccountPointsGuard();\n    initHcxProductCardPriceSync();\n    initMobileMenuInteractionGuard();\n    initMobileMenuSearch();\n    initSearchQuickAdds();\n    initFitConfidenceSystem();\n    initCookieConsentFallback();\n  };\n\n  if (isLaunchGateLocked()) {\n    window.addEventListener(\"hcx:launch-unlocked\", initProductEnhancementsWhenAllowed, { once: true });\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initAlwaysSafeEnhancements);\n    document.addEventListener(\"DOMContentLoaded\", initProductEnhancementsWhenAllowed);\n  } else {\n    initAlwaysSafeEnhancements();\n    initProductEnhancementsWhenAllowed();\n  }\n\n  document.addEventListener(\"product-info:loaded\", initProductEnhancementsWhenAllowed);\n  document.addEventListener(\"shopify:section:load\", initProductEnhancementsWhenAllowed);\n})();\n"],
  "mappings": "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",
  "names": ["body", "header", "section", "node", "vendor", "origin", "minDays", "maxDays", "cutoffHour", "includeSaturday", "startFromToday", "variant", "direction", "nextIndex", "start", "normalizeText", "escapeHtml", "message"]
}
