{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/vrinda-v2.js?ck=20260722r3"],
  "sourcesContent": ["/* vrinda.js v3 - thumbnail fix */\n(function () {\n  function getStoreConfig() {\n    try {\n      const el = document.getElementById('vrinda-store-config');\n      return el ? JSON.parse(el.textContent) : {};\n    } catch {\n      return {};\n    }\n  }\n\n  const store = getStoreConfig();\n  let geoIndia = null;\n  let fastrrLoaderPromise = null;\n  let pendingVrindaCartOpen = false;\n\n  function isIndiaTimezone() {\n    try {\n      const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n      return tz === 'Asia/Kolkata' || tz === 'Asia/Calcutta';\n    } catch {\n      return false;\n    }\n  }\n\n  function applyIndiaCheckoutDomClass(isIndia) {\n    if (!isIndia || store.shiprocketHeadlessCheckout === false) return;\n    document.documentElement.classList.add('vrinda-india-checkout');\n    document.body.classList.add('vrinda-india-checkout');\n  }\n\n  function iconSvg(name, size) {\n    size = size || 16;\n    const paths = {\n      close: '<path d=\"M18 6 6 18M6 6l12 12\"/>',\n      minus: '<path d=\"M5 12h14\"/>',\n      plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n      remove: '<path d=\"M3 6h18\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n      camera: '<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"/><circle cx=\"12\" cy=\"13\" r=\"3\"/>',\n    };\n    const d = paths[name];\n    if (!d) return '';\n    return '<svg class=\"vrinda-icon\" width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">' + d + '</svg>';\n  }\n\n  function formatWithDelimiters(number, precision, thousands, decimal) {\n    if (isNaN(number) || number == null) return '0';\n    thousands = thousands || ',';\n    decimal = decimal || '.';\n    number = (number / 100.0).toFixed(precision);\n    const parts = number.split('.');\n    const whole = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n    const fraction = parts[1] ? decimal + parts[1] : '';\n    return whole + fraction;\n  }\n\n  function formatMoney(cents, format) {\n    if (typeof cents === 'string') cents = cents.replace('.', '');\n    const formatString = format || store.moneyFormat || '${{amount}}';\n    const placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n    const match = formatString.match(placeholderRegex);\n    const placeholder = match ? match[1] : 'amount';\n    let value = '';\n\n    switch (placeholder) {\n      case 'amount':\n        value = formatWithDelimiters(cents, 2);\n        break;\n      case 'amount_no_decimals':\n        value = formatWithDelimiters(cents, 0);\n        break;\n      case 'amount_with_comma_separator':\n        value = formatWithDelimiters(cents, 2, '.', ',');\n        break;\n      case 'amount_no_decimals_with_comma_separator':\n        value = formatWithDelimiters(cents, 0, '.', ',');\n        break;\n      case 'amount_with_apostrophe_separator':\n        value = formatWithDelimiters(cents, 2, \"'\", '.');\n        break;\n      case 'amount_with_space_separator':\n        value = formatWithDelimiters(cents, 2, ' ', ',');\n        break;\n      default:\n        value = formatWithDelimiters(cents, 2);\n    }\n\n    return formatString.replace(placeholderRegex, value);\n  }\n\n  function initLocalization() {\n    const select = document.querySelector('[data-country-select]');\n    const form = select?.closest('form');\n    if (!select || !form) return;\n    select.addEventListener('change', () => form.submit());\n  }\n\n  /* Account icon: native Shopify New Accounts (/account). Fastrr phone OTP is checkout-only unless shiprocketLoginEnabled. */\n  const NATIVE_ACCOUNT_URL = store.accountNativeUrl || store.accountUrl || '/account';\n  const ACCOUNT_HUB_URL =\n    store.shiprocketLoginEnabled === true\n      ? store.accountPageUrl || store.accountPortalUrl || NATIVE_ACCOUNT_URL\n      : NATIVE_ACCOUNT_URL;\n  let userOpenedShiprocketLogin = false;\n\n  function suppressLegacyAuthWidgets() {\n    const selectors = [\n      '#icon-kwikpass',\n      '#kp-login-button-header-logo',\n      '#kwikpass-drawer-desktop',\n      '#kwikpass-drawer-mobile',\n      '.header--icon',\n      '.header--icon--mobile',\n      '[id*=\"gokwik\"]',\n      '[class*=\"gokwik\"]',\n    ];\n    document.querySelectorAll(selectors.join(',')).forEach((el) => {\n      el.setAttribute('hidden', '');\n      el.setAttribute('aria-hidden', 'true');\n      el.style.display = 'none';\n    });\n    document.body.classList.remove('cart-provider-gokwik');\n    document.documentElement.classList.remove('kp-session-pending');\n  }\n\n  function isHeaderAccountTrigger(link) {\n    if (!link) return false;\n    return (\n      link.classList.contains('header__icon--account') ||\n      link.hasAttribute('data-shiprocket-account-login') ||\n      link.getAttribute('aria-label') === 'Sign in' ||\n      link.getAttribute('aria-label') === 'My account'\n    );\n  }\n\n  function initAccountLinks() {\n    suppressLegacyAuthWidgets();\n\n    let suppressTimer = 0;\n    const runSuppression = () => {\n      suppressLegacyAuthWidgets();\n      suppressTimer += 1;\n      if (suppressTimer >= 8) clearInterval(interval);\n    };\n    const interval = setInterval(runSuppression, 500);\n    runSuppression();\n\n    // Native New Accounts: do not intercept \u2014 let header links go to /account (email OTP).\n    if (store.shiprocketLoginEnabled !== true) {\n      document\n        .querySelectorAll(\n          'a.header__icon--account, a[data-shiprocket-account-login], .mobile-menu-footer a[aria-label=\"Sign in\"], .mobile-menu-footer a[href=\"#account-login\"]'\n        )\n        .forEach((link) => {\n          if (!(link instanceof HTMLAnchorElement)) return;\n          link.removeAttribute('data-shiprocket-account-login');\n          if (isShopifyCustomerLoggedIn()) {\n            link.setAttribute('href', NATIVE_ACCOUNT_URL);\n            link.setAttribute('aria-label', 'My account');\n          } else {\n            link.setAttribute('href', store.accountLoginUrl || NATIVE_ACCOUNT_URL);\n            link.setAttribute('aria-label', 'Sign in');\n          }\n        });\n      return;\n    }\n\n    document.addEventListener(\n      'click',\n      (event) => {\n        const link = event.target && event.target.closest\n          ? event.target.closest(\n              'a.header__icon--account, a[data-shiprocket-account-login], a[aria-label=\"Sign in\"], a[aria-label=\"My account\"]'\n            )\n          : null;\n        if (!link) return;\n        if (link.closest('[data-account-main], .account-sidebar, .account-order-list, [data-account-guest]')) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (isAccountAccessReady()) {\n          window.location.assign(ACCOUNT_HUB_URL);\n          return;\n        }\n        launchShiprocketLogin({ fromIcon: true });\n      },\n      true\n    );\n\n    syncAccountIconForSession();\n  }\n\n  initAccountLinks();\n\n  function isIndiaVisitorSync() {\n    if (isIndiaTimezone()) return true;\n    if (store.isIndia) return true;\n    if (window.Shopify?.country === 'IN') return true;\n    if (geoIndia === true) return true;\n    return false;\n  }\n\n  async function detectIndiaVisitor() {\n    if (isIndiaTimezone()) {\n      geoIndia = true;\n      applyIndiaCheckoutDomClass(true);\n      return true;\n    }\n    if (store.isIndia || window.Shopify?.country === 'IN') {\n      geoIndia = true;\n      applyIndiaCheckoutDomClass(true);\n      return true;\n    }\n    if (geoIndia !== null) return geoIndia;\n    try {\n      const res = await fetch('/browsing_context_suggestions.json');\n      const data = await res.json();\n      geoIndia = data?.detected_values?.country?.handle === 'IN';\n    } catch {\n      geoIndia = false;\n    }\n    if (geoIndia) applyIndiaCheckoutDomClass(true);\n    return geoIndia;\n  }\n\n  function applyIndiaCheckoutLabels(isIndia) {\n    document.querySelectorAll('[data-checkout-actions]').forEach((wrap) => {\n      const isDrawer = wrap.classList.contains('checkout-actions--drawer');\n      const btn = wrap.querySelector('.shiprocket-checkout, [name=\"checkout\"]');\n      const hint = wrap.querySelector('[data-checkout-hint]');\n      const legal = wrap.querySelector('[data-checkout-legal]');\n      if (btn && btn.name !== 'checkout') {\n        const longLabel = btn.querySelector('.checkout-btn__label--long');\n        const shortLabel = btn.querySelector('.checkout-btn__label--short');\n        const singleLabel = btn.querySelector('.sr-buy-cta__label, .checkout-btn__label:not(.checkout-btn__label--long):not(.checkout-btn__label--short)');\n        const indiaLong = isDrawer ? 'Buy now' : 'Checkout \u2014 UPI \u00B7 Cards \u00B7 COD';\n        const intlLong = isDrawer ? 'Checkout' : 'Secure International Checkout';\n        if (singleLabel) {\n          singleLabel.textContent = isDrawer && isIndia ? 'Buy now' : (isIndia ? 'Buy now' : 'Checkout');\n        } else if (longLabel) {\n          longLabel.textContent = isIndia ? indiaLong : intlLong;\n          if (shortLabel) shortLabel.textContent = isDrawer && isIndia ? 'Buy now' : 'Checkout';\n        }\n        if (isIndia) {\n          if (!btn.id) btn.id = isDrawer ? 'shiprocket-checkout-drawer' : 'shiprocket-checkout';\n          btn.classList.add('shiprocket-checkout');\n          btn.type = 'button';\n          btn.removeAttribute('name');\n        }\n      }\n      if (hint) {\n        hint.textContent = isIndia\n          ? 'Secure checkout \u00B7 Phone OTP \u00B7 UPI \u00B7 Cards \u00B7 COD'\n          : 'Pay in ' + (store.currency || 'INR') + ' with cards, PayPal & more. Duties may apply at delivery.';\n      }\n      if (legal) {\n        legal.innerHTML = isIndia\n          ? 'By continuing you agree to our <a href=\"/pages/terms-of-service\">Terms</a> and <a href=\"/pages/privacy-policy\">Privacy Policy</a>. Checkout uses phone OTP verification.'\n          : 'Prices shown in ' + (store.currency || 'INR') + '. Final amount confirmed at checkout. See <a href=\"/pages/shipping-delivery\">Shipping</a> &amp; <a href=\"/pages/returns-exchanges\">Returns</a>.';\n      }\n    });\n    document.querySelectorAll('[data-market-banner]').forEach((banner) => {\n      if (isIndia) {\n        banner.innerHTML = '<span>Shipping across India \u00B7 Free over ' + (store.freeShippingThresholdFormatted || formatMoney((store.freeShippingThreshold || 999) * 100)) + ' \u00B7 COD available</span>';\n      }\n    });\n  }\n\n  function shouldUseShiprocketCheckout(isIndia) {\n    return !!isIndia && store.shiprocketCheckoutEnabled !== false;\n  }\n\n  function ensureShiprocketScript() {\n    if (\n      typeof window.shiprocketCheckoutBuyCartHandler === 'function' ||\n      typeof window.initiateFloCheckout === 'function' ||\n      typeof window.handleFloCheckoutBtn === 'function' ||\n      typeof window.fastrrCheckout === 'function' ||\n      typeof window.FastrrCheckout === 'function' ||\n      window.Fastrr?.Checkout?.open ||\n      window.ShiprocketCheckout?.open\n    ) {\n      return Promise.resolve(true);\n    }\n\n    if (fastrrLoaderPromise) return fastrrLoaderPromise;\n\n    const existing = document.querySelector('script[data-vrinda-fastrr], script[data-vrinda-fastrr=\"channel\"]');\n    if (existing) {\n      fastrrLoaderPromise = new Promise((resolve, reject) => {\n        existing.addEventListener('load', () => resolve(true), { once: true });\n        existing.addEventListener('error', () => reject(new Error('Fastrr script failed to load')), { once: true });\n      });\n      return fastrrLoaderPromise;\n    }\n\n    const src = window.__vrindaFastrrScriptUrl || 'https://fastrr-boost-ui.pickrr.com/assets/js/channels/shopify.js';\n    fastrrLoaderPromise = new Promise((resolve, reject) => {\n      const script = document.createElement('script');\n      script.src = src;\n      script.async = true;\n      script.defer = true;\n      script.dataset.vrindaFastrr = 'true';\n      script.onload = () => resolve(true);\n      script.onerror = () => reject(new Error('Fastrr script failed to load'));\n      document.head.appendChild(script);\n    });\n    return fastrrLoaderPromise;\n  }\n\n  async function waitForShiprocketHandler(timeoutMs = 4000) {\n    const start = Date.now();\n    while (Date.now() - start < timeoutMs) {\n      if (\n        typeof window.shiprocketCheckoutBuyCartHandler === 'function' ||\n        typeof window.initiateFloCheckout === 'function' ||\n        typeof window.handleFloCheckoutBtn === 'function' ||\n        typeof window.fastrrCheckout === 'function' ||\n        typeof window.FastrrCheckout === 'function' ||\n        window.Fastrr?.Checkout?.open ||\n        window.ShiprocketCheckout?.open\n      ) {\n        return true;\n      }\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n    return false;\n  }\n\n  function fastrrCheckoutUiPresent() {\n    return !!(\n      document.getElementById('headless-container') ||\n      document.getElementById('fastrr-main-container') ||\n      document.getElementById('headless-iframe') ||\n      document.getElementById('headless-payment-iframe')\n    );\n  }\n\n  async function waitForFastrrCheckoutUi(timeoutMs = 12000) {\n    const start = Date.now();\n    while (Date.now() - start < timeoutMs) {\n      if (isFastrrCheckoutUiActive()) return true;\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n    return isFastrrCheckoutUiActive();\n  }\n\n  function callShiprocketHandler(handler) {\n    if (typeof handler !== 'function') return false;\n    handler();\n    return true;\n  }\n\n  function invokeShiprocketCheckout() {\n    const handlers = [\n      window.shiprocketCheckoutBuyCartHandler,\n      window.initiateFloCheckout,\n      window.handleFloCheckoutBtn,\n      window.fastrrCheckout,\n      window.FastrrCheckout,\n      () => window.Fastrr?.Checkout?.open?.(),\n      () => window.ShiprocketCheckout?.open?.(),\n      window.openShiprocketCheckout,\n    ];\n    for (const handler of handlers) {\n      try {\n        if (callShiprocketHandler(handler)) return true;\n      } catch (_) {}\n    }\n    return false;\n  }\n\n  function isFastrrCheckoutUiActive() {\n    const nodes = document.querySelectorAll(\n      '#headless-container, #fastrr-main-container, #headless-iframe, #headless-payment-iframe'\n    );\n    for (const node of nodes) {\n      if (!(node instanceof HTMLElement)) continue;\n      const style = window.getComputedStyle(node);\n      if (style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity) === 0) continue;\n      if (node.offsetParent !== null || style.position === 'fixed') return true;\n    }\n    return false;\n  }\n\n  function hideFastrrCheckoutNodes() {\n    document.querySelectorAll(\n      '#headless-container, #fastrr-main-container, #fastrr-prefetch-container, #headless-iframe, #headless-payment-iframe'\n    ).forEach((node) => {\n      if (!(node instanceof HTMLElement)) return;\n      node.style.setProperty('display', 'none', 'important');\n      node.style.setProperty('visibility', 'hidden', 'important');\n      node.style.setProperty('pointer-events', 'none', 'important');\n      node.setAttribute('aria-hidden', 'true');\n    });\n  }\n\n  let fastrrCloseWatchTimer;\n\n  function stopFastrrCloseWatch() {\n    if (!fastrrCloseWatchTimer) return;\n    clearInterval(fastrrCloseWatchTimer);\n    fastrrCloseWatchTimer = null;\n  }\n\n  let fastrrCloseWatchStartedAt = 0;\n\n  function startFastrrCloseWatch() {\n    stopFastrrCloseWatch();\n    fastrrCloseWatchStartedAt = Date.now();\n    fastrrCloseWatchTimer = setInterval(() => {\n      if (!document.body.classList.contains('fastrr-checkout-open')) {\n        stopFastrrCloseWatch();\n        return;\n      }\n      if (isFastrrCheckoutUiActive()) {\n        document.body.classList.add('fastrr-checkout-ui-active');\n        return;\n      }\n      // Fastrr iframe can take a few seconds \u2014 do not tear down during bootstrap.\n      if (Date.now() - fastrrCloseWatchStartedAt < 12000) return;\n      resetFastrrCheckoutUi();\n    }, 350);\n  }\n\n  function resetFastrrCheckoutUi() {\n    document.body.classList.remove('fastrr-checkout-open');\n    document.body.classList.remove('fastrr-checkout-ui-active');\n    document.body.classList.remove('vcc-checkout-pending');\n    document.body.style.removeProperty('overflow');\n    document.documentElement.style.removeProperty('overflow');\n    hideFastrrCheckoutNodes();\n    resetVrindaCommerceCartAfterCheckout();\n    stopCheckoutObserver();\n    stopFastrrCloseWatch();\n    document.dispatchEvent(new CustomEvent('fastrr:checkout-close'));\n  }\n\n  function shouldResetFastrrFromCallback(payload) {\n    if (!payload || typeof payload !== 'object') return false;\n    if (payload.exitCheckout) return true;\n    const eventName = String(payload.event || payload.type || payload.action || '').toLowerCase();\n    return /close|exit|back|cancel|dismiss/.test(eventName);\n  }\n\n  function resetCheckoutLaunchState() {\n    resetFastrrCheckoutUi();\n  }\n\n  function clipFastrrIframes() {\n    document.querySelectorAll('#headless-iframe, #headless-payment-iframe').forEach((iframe) => {\n      iframe.setAttribute('scrolling', 'yes');\n      iframe.style.overflow = 'auto';\n      iframe.style.width = '100%';\n      iframe.style.height = '100%';\n      let clip = iframe.parentElement;\n      if (!clip?.classList.contains('fastrr-iframe-clip')) {\n        clip = document.createElement('div');\n        clip.className = 'fastrr-iframe-clip';\n        iframe.parentNode.insertBefore(clip, iframe);\n        clip.appendChild(iframe);\n      }\n    });\n  }\n\n  function ensureFastrrCheckoutViewport() {\n    const main = document.getElementById('fastrr-main-container');\n    const headless = document.getElementById('headless-container');\n    [main, headless].forEach((node) => {\n      if (!node || node.parentElement === document.body) return;\n      document.body.appendChild(node);\n    });\n    if (fastrrCheckoutUiPresent()) {\n      document.body.classList.add('fastrr-checkout-open');\n      if (isFastrrCheckoutUiActive()) document.body.classList.add('fastrr-checkout-ui-active');\n      document.body.style.overflow = 'hidden';\n      clipFastrrIframes();\n    }\n  }\n\n  function hideVrindaCommerceCartForCheckout() {\n    document.body.classList.add('vcc-checkout-pending');\n    if (window.VrindaCommerceCart && typeof window.VrindaCommerceCart.close === 'function') {\n      window.VrindaCommerceCart.close();\n    }\n    document.querySelectorAll('.vcc-drawer, .vcc-overlay, .vcc-sticky-pill').forEach((node) => {\n      node.classList.add('vcc-hidden');\n    });\n  }\n\n  function resetVrindaCommerceCartAfterCheckout() {\n    document.body.classList.remove('vcc-checkout-pending');\n    document.querySelectorAll('.vcc-drawer, .vcc-overlay, .vcc-sticky-pill').forEach((node) => {\n      node.classList.remove('vcc-hidden');\n    });\n  }\n\n  let checkoutBindTimer;\n  let checkoutViewportTimer;\n  let checkoutObserver;\n\n  function hasRelevantCheckoutMutation(mutations) {\n    return mutations.some((mutation) => {\n      return Array.from(mutation.addedNodes || []).some((node) => {\n        if (!(node instanceof Element)) return false;\n        if (\n          node.id === 'headless-container' ||\n          node.id === 'fastrr-main-container' ||\n          node.id === 'headless-iframe' ||\n          node.id === 'headless-payment-iframe'\n        ) {\n          return true;\n        }\n        return !!node.querySelector?.(\n          '#headless-container, #fastrr-main-container, #headless-iframe, #headless-payment-iframe, [data-shiprocket-checkout], .shiprocket-checkout, #shiprocket-checkout, #shiprocket-checkout-drawer'\n        );\n      });\n    });\n  }\n\n  function startCheckoutObserver() {\n    if (checkoutObserver || !document.body) return;\n    checkoutObserver = new MutationObserver((mutations) => {\n      if (document.body.classList.contains('fastrr-checkout-open') && !isFastrrCheckoutUiActive()) {\n        resetFastrrCheckoutUi();\n        return;\n      }\n      if (!hasRelevantCheckoutMutation(mutations)) return;\n      clearTimeout(checkoutBindTimer);\n      checkoutBindTimer = setTimeout(bindShiprocketCheckoutButtons, 250);\n      if (fastrrCheckoutUiPresent()) {\n        clearTimeout(checkoutViewportTimer);\n        checkoutViewportTimer = setTimeout(ensureFastrrCheckoutViewport, 50);\n      }\n    });\n    checkoutObserver.observe(document.body, { childList: true, subtree: true });\n  }\n\n  function stopCheckoutObserver() {\n    if (!checkoutObserver) return;\n    checkoutObserver.disconnect();\n    checkoutObserver = null;\n    clearTimeout(checkoutBindTimer);\n    clearTimeout(checkoutViewportTimer);\n  }\n\n  async function launchShiprocketCheckout() {\n    const drawer = document.getElementById('cart-drawer');\n    const overlay = document.getElementById('cart-drawer-overlay');\n    if (drawer?.classList.contains('open')) {\n      drawer.classList.remove('open');\n      overlay?.classList.remove('open');\n      document.body.classList.remove('cart-drawer-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      overlay?.setAttribute('aria-hidden', 'true');\n    }\n    overlay?.classList.remove('open');\n    hideVrindaCommerceCartForCheckout();\n    document.body.classList.add('fastrr-checkout-open');\n    document.body.style.overflow = 'hidden';\n    startCheckoutObserver();\n    try {\n      await ensureShiprocketScript();\n      await waitForShiprocketHandler();\n    } catch (_) {\n      resetCheckoutLaunchState();\n      window.location.href = cartUrl('checkout');\n      return;\n    }\n    if (!invokeShiprocketCheckout()) {\n      resetCheckoutLaunchState();\n      showToast('Checkout unavailable', 'Please refresh and try again');\n      return;\n    }\n    const opened = await waitForFastrrCheckoutUi();\n    if (!opened) {\n      resetCheckoutLaunchState();\n      showToast('Checkout is loading', 'Please tap Checkout again');\n      return;\n    }\n    ensureFastrrCheckoutViewport();\n    requestAnimationFrame(ensureFastrrCheckoutViewport);\n    setTimeout(ensureFastrrCheckoutViewport, 100);\n    setTimeout(ensureFastrrCheckoutViewport, 500);\n    startFastrrCloseWatch();\n  }\n\n  window.launchShiprocketCheckout = launchShiprocketCheckout;\n\n  async function launchShiprocketBuyNow(clickEvent) {\n    const btn = clickEvent?.currentTarget;\n    if (!btn) return;\n\n    const form = document.getElementById('product-form');\n    if (!form) return;\n\n    const isIndia = await detectIndiaVisitor();\n    if (!shouldUseShiprocketCheckout(isIndia)) {\n      const labelNode = btn.querySelector('.product-buy-btn__label') || btn;\n      const label = labelNode.textContent;\n      btn.disabled = true;\n      btn.setAttribute('aria-busy', 'true');\n      try {\n        const fd = new FormData(form);\n        await enqueueCartMutation(() => shopifyCartAdd(formDataToCartAddPayload(fd)));\n        window.location.href = cartUrl('checkout');\n      } catch {\n        showToast('Could not proceed', 'Please try again');\n        btn.disabled = false;\n        btn.removeAttribute('aria-busy');\n        if (labelNode !== btn) labelNode.textContent = label;\n      }\n      return;\n    }\n\n    const drawer = document.getElementById('cart-drawer');\n    const overlay = document.getElementById('cart-drawer-overlay');\n    if (drawer?.classList.contains('open')) {\n      drawer.classList.remove('open');\n      overlay?.classList.remove('open');\n      document.body.classList.remove('cart-drawer-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      overlay?.setAttribute('aria-hidden', 'true');\n    }\n    overlay?.classList.remove('open');\n    hideVrindaCommerceCartForCheckout();\n    document.body.classList.add('fastrr-checkout-open');\n    document.body.style.overflow = 'hidden';\n    startCheckoutObserver();\n\n    try {\n      await ensureShiprocketScript();\n      await waitForShiprocketHandler(6000);\n    } catch (_) {\n      resetCheckoutLaunchState();\n      window.location.href = cartUrl('checkout');\n      return;\n    }\n\n    let launched = false;\n    try {\n      if (typeof window.shiprocketCheckoutEvents?.buyProduct === 'function') {\n        window.shiprocketCheckoutEvents.buyProduct(clickEvent);\n        launched = true;\n      } else if (typeof window.shiprocketCheckoutBuyProductHandler === 'function') {\n        window.shiprocketCheckoutBuyProductHandler(clickEvent);\n        launched = true;\n      } else if (typeof window.HeadlessCheckout?.buyNow === 'function') {\n        window.HeadlessCheckout.buyNow(clickEvent);\n        launched = true;\n      }\n    } catch (_) {\n      launched = false;\n    }\n\n    if (!launched) {\n      try {\n        const fd = new FormData(form);\n        await enqueueCartMutation(() => shopifyCartAdd(formDataToCartAddPayload(fd)));\n        if (!invokeShiprocketCheckout()) throw new Error('Checkout handler missing');\n      } catch (_) {\n        resetCheckoutLaunchState();\n        window.location.href = cartUrl('checkout');\n        return;\n      }\n    }\n\n    const opened = await waitForFastrrCheckoutUi();\n    if (!opened) {\n      resetCheckoutLaunchState();\n      showToast('Checkout is loading', 'Please tap Buy now again');\n      return;\n    }\n    ensureFastrrCheckoutViewport();\n    requestAnimationFrame(ensureFastrrCheckoutViewport);\n    setTimeout(ensureFastrrCheckoutViewport, 100);\n    setTimeout(ensureFastrrCheckoutViewport, 500);\n    startFastrrCloseWatch();\n  }\n\n  window.launchShiprocketBuyNow = launchShiprocketBuyNow;\n\n  function isShopifyCustomerLoggedIn() {\n    if (store.customerLoggedIn) return true;\n    if (window.ShopifyAnalytics?.meta?.page?.customerId) return true;\n    if (document.querySelector('[data-shopify-customer=\"true\"]')) return true;\n    return false;\n  }\n\n  function markShiprocketSession() {\n    setFastrrCookie('ShiprocketLoginCompleted', '1');\n    try {\n      localStorage.setItem('vrinda_shiprocket_logged_in', '1');\n    } catch (_) {}\n  }\n\n  function clearShiprocketSession() {\n    setFastrrCookie('ShiprocketLoginCompleted', '', -1);\n    try {\n      localStorage.removeItem('vrinda_shiprocket_logged_in');\n    } catch (_) {}\n  }\n\n  function isShiprocketSessionActive() {\n    if (getFastrrCookie('ShiprocketLoginCompleted') === '1') return true;\n    if (getFastrrCookie('LoggedInShopifyOnce') === '1') return true;\n    try {\n      if (localStorage.getItem('vrinda_shiprocket_logged_in') === '1') return true;\n    } catch (_) {}\n    return false;\n  }\n\n  /** Shopify customer OR completed Shiprocket phone OTP \u2014 enough to open account hub, not login modal again. */\n  function isAccountAccessReady() {\n    return isShopifyCustomerLoggedIn() || isShiprocketSessionActive();\n  }\n\n  function syncAccountIconForSession() {\n    const shopify = isShopifyCustomerLoggedIn();\n    const ready = shopify || isShiprocketSessionActive();\n    document\n      .querySelectorAll(\n        'a.header__icon--account, a[data-shiprocket-account-login], .mobile-menu-footer a[aria-label=\"Sign in\"], .mobile-menu-footer a[href=\"#account-login\"]'\n      )\n      .forEach((link) => {\n        if (!(link instanceof HTMLAnchorElement)) return;\n        if (ready) {\n          link.setAttribute('href', ACCOUNT_HUB_URL);\n          link.setAttribute('aria-label', 'My account');\n          link.removeAttribute('data-shiprocket-account-login');\n          if (link.classList.contains('btn')) link.textContent = 'My account';\n        }\n      });\n    document.documentElement.classList.toggle('vrinda-shiprocket-session', isShiprocketSessionActive());\n    document.documentElement.classList.toggle('vrinda-shopify-customer', shopify);\n  }\n\n  function isAccountAuthPage() {\n    const path = window.location.pathname.replace(/\\/$/, '') || '/';\n    if (path === '/pages/my-account' || path.startsWith('/pages/my-account/')) return true;\n    return new URLSearchParams(window.location.search).get('login') === 'shiprocket';\n  }\n\n  function enforceAccountOnlyLoginModal() {\n    // Allow intentional icon/account login overlays anywhere.\n    // Strip only auto marketing popups that we did not open.\n    if (userOpenedShiprocketLogin || isAccountAuthPage()) return;\n    const container = document.getElementById('shiprocket-login-container');\n    if (container && container.dataset.vrindaLogin === 'true') return;\n    clearShiprocketLoginContainer();\n  }\n\n  function getFastrrCookie(name) {\n    const value = `; ${document.cookie}`;\n    const parts = value.split(`; ${name}=`);\n    if (parts.length === 2) return parts.pop().split(';').shift();\n    return null;\n  }\n\n  function getSellerDomainForFastrr() {\n    const el = document.getElementById('sellerDomain');\n    return el?.value || store.sellerDomain || window.location.hostname;\n  }\n\n  function setFastrrCookie(name, value, minutesToExpire) {\n    const date = new Date();\n    if (minutesToExpire === -1) {\n      date.setTime(0);\n    } else if (minutesToExpire) {\n      date.setTime(date.getTime() + minutesToExpire * 60 * 1000);\n    } else {\n      date.setFullYear(date.getFullYear() + 10);\n    }\n    document.cookie = `${name}=${value};expires=${date.toUTCString()};path=/`;\n  }\n\n  function getVrindaLoginUiConfig() {\n    return {\n      subText: '',\n      subTextLogin: store.shiprocketLoginSubtext || '',\n      discountText: '',\n      theme: 'light',\n      primaryColor: store.shiprocketLoginPrimaryColor || '#B76E79',\n      imgUrl: store.shiprocketLoginLogoUrl || '',\n      imgUrlLogin: store.shiprocketLoginLogoUrl || '',\n      discountCode: '',\n      loginPageTheme: store.shiprocketLoginThemeColor || '#B76E79',\n    };\n  }\n\n  /** Merge Vrinda branding into Pickrr config \u2014 same shape Sammvaad passes as sellerConfigParent. */\n  function mergeVrindaBrandingIntoSellerConfig(raw, options = {}) {\n    const enabled = options.enablePopup === true;\n    const base =\n      raw && typeof raw === 'object'\n        ? JSON.parse(JSON.stringify(raw))\n        : { status: true, data: {} };\n    if (!base.data || typeof base.data !== 'object') base.data = {};\n    base.status = true;\n    // Keep eventsEnabled from Pickrr (Sammvaad). Default true if missing.\n    if (typeof base.data.eventsEnabled !== 'boolean') base.data.eventsEnabled = true;\n    // Match Sammvaad public config: accountPageEnabled false unless Pickrr set it.\n    if (typeof base.data.accountPageEnabled !== 'boolean') base.data.accountPageEnabled = false;\n\n    const ui = getVrindaLoginUiConfig();\n    let list = Array.isArray(base.data.popupConfigList) ? base.data.popupConfigList : null;\n    if (!list || !list.length) {\n      list = [{ type: 'all', pageType: 'all', enabled: false, uiConfig: ui }];\n    }\n    list = list.map((item, idx) => {\n      const next = { ...(item || {}) };\n      next.uiConfig = { ...(next.uiConfig || {}), ...ui };\n      if (enabled && idx === 0) {\n        next.enabled = true;\n        next.pageType = 'account';\n      } else if (!enabled) {\n        // Block sitewide marketing auto-popup (Sammvaad also has enabled:false on landing).\n        next.enabled = false;\n      }\n      return next;\n    });\n    base.data.popupConfigList = list;\n    return base;\n  }\n\n  function buildFastrrSellerConfig(options = {}) {\n    let existing = null;\n    try {\n      const raw = getFastrrCookie('fastrr_seller_config');\n      if (raw) existing = JSON.parse(raw);\n    } catch (_) {}\n    return mergeVrindaBrandingIntoSellerConfig(existing, options);\n  }\n\n  function ensureFastrrSellerConfigBranding() {\n    const config = buildFastrrSellerConfig({ enablePopup: false });\n    setFastrrCookie('fastrr_seller_config', JSON.stringify(config), 30);\n    return config;\n  }\n\n  /**\n   * Exact Sammvaad path: GET https://events.pickrr.com/config with uId header,\n   * then pass JSON as sellerConfigParent (branding merged for Vrinda).\n   */\n  async function fetchPickrrSellerConfigLikeSammvaad(options = {}) {\n    const uId = encodeURI(btoa(getSellerDomainForFastrr()));\n    let remote = null;\n    try {\n      const response = await fetch('https://events.pickrr.com/config', {\n        method: 'GET',\n        headers: { uId },\n      });\n      if (response.ok) remote = await response.json();\n    } catch (_) {}\n    const config = mergeVrindaBrandingIntoSellerConfig(remote, options);\n    setFastrrCookie('fastrr_seller_config', JSON.stringify(config), 30);\n    return config;\n  }\n\n  function applyFastrrLoginOpenState(open) {\n    document.body.classList.toggle('fastrr-login-open', open);\n    document.documentElement.classList.toggle('fastrr-login-open', open);\n    document.querySelectorAll('[id*=\"nector\"], [class*=\"nector\"], [id*=\"Nector\"], [class*=\"Nector\"]').forEach((node) => {\n      if (!(node instanceof HTMLElement)) return;\n      if (open) {\n        node.dataset.vrindaLoginHidden = node.style.display || '';\n        node.style.setProperty('display', 'none', 'important');\n      } else if (node.dataset.vrindaLoginHidden !== undefined) {\n        node.style.display = node.dataset.vrindaLoginHidden;\n        delete node.dataset.vrindaLoginHidden;\n      }\n    });\n    if (open) {\n      document.body.style.overflow = 'hidden';\n    } else if (!document.body.classList.contains('fastrr-checkout-open')) {\n      document.body.style.removeProperty('overflow');\n    }\n  }\n\n  function clearShiprocketLoginContainer() {\n    document.getElementById('shiprocket-login-container')?.remove();\n    applyFastrrLoginOpenState(false);\n  }\n\n  async function waitForShiprocketMarketingLogin(timeoutMs = 8000) {\n    const start = Date.now();\n    while (Date.now() - start < timeoutMs) {\n      if (typeof window.shipRocketMarketingLogin === 'function') return true;\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n    return typeof window.shipRocketMarketingLogin === 'function';\n  }\n\n  function buildShiprocketLoginUrl(accountMode, sellerConfig) {\n    const checkoutBuyer = (window.checkoutBuyer || store.checkoutBuyerUrl || 'https://fastrr-boost-ui.pickrr.com/').replace(/\\/?$/, '/');\n    const sellerConfigParent = JSON.stringify(\n      sellerConfig || buildFastrrSellerConfig({ enablePopup: true })\n    );\n    // Same query string shape as shiprocketMarketing.js triggerFastrLogin\n    const pageType = accountMode ? 'account' : 'Landing';\n    let url =\n      `${checkoutBuyer}?popupType=shiprocketLogin` +\n      `&pageType=${pageType}` +\n      `&seller-domain=${getSellerDomainForFastrr()}` +\n      `&ipAddress=null` +\n      `&sellerConfigParent=${window.btoa(encodeURIComponent(sellerConfigParent))}`;\n    if (getFastrrCookie('LoggedInShopifyOnce')) {\n      url += '&LoggedInShopifyOnce=true';\n    }\n    // trailing & matches Sammvaad marketing.js when accountIconClicked\n    if (accountMode) {\n      url += '&accountIconClicked=true';\n    }\n    url += '&';\n    return url;\n  }\n\n  function hideShiprocketLoginModal() {\n    const container = document.getElementById('shiprocket-login-container');\n    if (container && (userOpenedShiprocketLogin || isAccountAuthPage())) {\n      container.style.display = 'none';\n    } else {\n      clearShiprocketLoginContainer();\n    }\n    userOpenedShiprocketLogin = false;\n    if (!document.body.classList.contains('fastrr-checkout-open')) {\n      document.body.style.removeProperty('overflow');\n    }\n    applyFastrrLoginOpenState(false);\n  }\n\n  function showShiprocketLoginModal() {\n    const container = document.getElementById('shiprocket-login-container');\n    if (container) {\n      container.style.display = 'block';\n      document.body.style.overflow = 'hidden';\n      applyFastrrLoginOpenState(true);\n      return true;\n    }\n    return false;\n  }\n\n  function showShiprocketPairingNote(show) {\n    const note = document.querySelector('[data-shiprocket-pairing-note]');\n    if (note) note.hidden = !show;\n  }\n\n  function reloadAfterShiprocketLogin() {\n    // Stay on the current page (homepage etc). Only account pages reload the hub URL.\n    if (isAccountAuthPage()) {\n      const target = ACCOUNT_HUB_URL;\n      window.location.replace(target + (target.includes('?') ? '&' : '?') + 'sr_auth=1');\n      return;\n    }\n    const url = new URL(window.location.href);\n    url.searchParams.set('sr_auth', '1');\n    window.location.replace(url.pathname + url.search + url.hash);\n  }\n\n  async function waitForShopifyCustomerSession(timeoutMs = 8000) {\n    const start = Date.now();\n    while (Date.now() - start < timeoutMs) {\n      if (isShopifyCustomerLoggedIn()) return true;\n      if (window.ShopifyAnalytics?.meta?.page?.customerId) return true;\n      await new Promise((r) => setTimeout(r, 300));\n    }\n    return isShopifyCustomerLoggedIn();\n  }\n\n  // WebOTP autofill \u2014 same as Sammvaad shiprocketMarketing.js\n  let shiprocketOtpAbort = null;\n  function startShiprocketOtpAutofill() {\n    if (!('OTPCredential' in window)) return;\n    try {\n      shiprocketOtpAbort?.abort();\n    } catch (_) {}\n    shiprocketOtpAbort = new AbortController();\n    navigator.credentials\n      .get({ otp: { transport: ['sms'] }, signal: shiprocketOtpAbort.signal })\n      .then((otp) => {\n        document.getElementById('headless-iframe-login')?.contentWindow?.postMessage(\n          { trigger: 'otp-autofill', data: otp.code },\n          '*'\n        );\n      })\n      .catch(() => {});\n  }\n  function stopShiprocketOtpAutofill() {\n    try {\n      shiprocketOtpAbort?.abort();\n    } catch (_) {}\n    shiprocketOtpAbort = null;\n  }\n\n  function postHeadlessStorageToLoginIframe() {\n    // Exact Sammvaad handler: iframe asks parent for localStorage (OTPless / session keys)\n    document.getElementById('headless-iframe-login')?.contentWindow?.postMessage(\n      {\n        trigger: 'headless-storage',\n        data: JSON.stringify(window.localStorage),\n      },\n      '*'\n    );\n  }\n\n  function handleShiprocketLoginMessage(event) {\n    const data = event.data;\n    const trigger = data?.trigger;\n    if (!trigger) return;\n\n    // Sammvaad: headless-storage actions array OR direct storage request\n    if (trigger === 'headless-storage') {\n      if (Array.isArray(data.actions) && data.actions.length) {\n        data.actions.forEach((action) => {\n          if (action?.action === 'loadStorage') postHeadlessStorageToLoginIframe();\n        });\n      } else {\n        postHeadlessStorageToLoginIframe();\n      }\n      return;\n    }\n\n    if (trigger === 'otp-read-start') {\n      startShiprocketOtpAutofill();\n      return;\n    }\n    if (trigger === 'otp-read-stop') {\n      stopShiprocketOtpAutofill();\n      return;\n    }\n\n    if (trigger === 'open-true-caller-login') {\n      const openUrl = data?.data;\n      const payload = data?.payload;\n      if (openUrl) window.open(openUrl, '_top');\n      window.setTimeout(() => {\n        document.getElementById('headless-iframe-login')?.contentWindow?.postMessage(\n          { trigger: 'true-caller-request', payload },\n          '*'\n        );\n      }, 600);\n      return;\n    }\n\n    if (trigger === 'save-coupon-code') {\n      try {\n        localStorage.setItem('fastrrCouponCode', data?.couponCode || '');\n      } catch (_) {}\n      return;\n    }\n\n    const phone =\n      data?.phone ||\n      data?.mobile ||\n      data?.data?.phone ||\n      data?.customer?.phone ||\n      null;\n    if (phone) {\n      try {\n        localStorage.setItem('vrinda_shiprocket_phone', String(phone));\n        sessionStorage.setItem(\n          'vrinda_fastrr_auth',\n          JSON.stringify({ at: Date.now(), event: trigger, phone: String(phone) })\n        );\n      } catch (_) {}\n    }\n\n    if (trigger === 'Login-popup-close') {\n      setFastrrCookie('shiprocketLoginPopupClosed', '1', 1440);\n      hideShiprocketLoginModal();\n      return;\n    }\n\n    if (trigger === 'login-completed') {\n      markShiprocketSession();\n      hideShiprocketLoginModal();\n      syncAccountIconForSession();\n      waitForShopifyCustomerSession(8000).then(() => {\n        reloadAfterShiprocketLogin();\n      });\n      return;\n    }\n\n    if (trigger === 'shopify-logged-in') {\n      setFastrrCookie('LoggedInShopifyOnce', '1');\n      markShiprocketSession();\n      hideShiprocketLoginModal();\n      syncAccountIconForSession();\n      window.setTimeout(reloadAfterShiprocketLogin, 350);\n      return;\n    }\n\n    if (trigger === 'Shopify-login-error') {\n      // Phone OTP may have worked, but Shopify pairing failed (common on New Accounts).\n      // Do NOT mark logged-in \u2014 that caused a false \"signed in\" icon with no Fastrr user row.\n      // Do NOT redirect to /account/register (Sammvaad classic). Stay on New Accounts path.\n      setFastrrCookie('shopifyLoginError', '1', 30);\n      clearShiprocketSession();\n      hideShiprocketLoginModal();\n      syncAccountIconForSession();\n      if (isAccountAuthPage()) showShiprocketPairingNote(true);\n      return;\n    }\n  }\n\n  function mountShiprocketLoginIframe(accountMode, sellerConfig) {\n    if (document.getElementById('fastrr-main-container')) {\n      return true;\n    }\n    const existing = document.getElementById('shiprocket-login-container');\n    if (existing) existing.remove();\n\n    const url = buildShiprocketLoginUrl(accountMode, sellerConfig);\n    const container = document.createElement('div');\n    container.id = 'shiprocket-login-container';\n    container.dataset.vrindaLogin = 'true';\n    container.style.display = 'block';\n    // Same DOM as Sammvaad shiprocketMarketing.js\n    container.innerHTML =\n      `<div class=\"headless-modal\">` +\n      `<div class=\"headless-modal-content\">` +\n      `<div class=\"headless-modal-body\">` +\n      `<iframe id=\"headless-iframe-login\" src=\"${url}\" allow=\"clipboard-read; clipboard-write\" title=\"Sign in with phone\"></iframe>` +\n      `</div></div></div>`;\n    document.body.appendChild(container);\n    document.body.style.overflow = 'hidden';\n    applyFastrrLoginOpenState(true);\n    return true;\n  }\n\n  function purgeForeignFastrrLoginContainers() {\n    if (userOpenedShiprocketLogin || isAccountAuthPage()) return;\n    const container = document.getElementById('shiprocket-login-container');\n    if (container && container.dataset.vrindaLogin === 'true') return;\n    clearShiprocketLoginContainer();\n  }\n\n  /** Official shiprocketMarketing.js entry \u2014 keep a reference before we wrap it. */\n  let nativeShipRocketMarketingLogin = null;\n\n  function hijackShiprocketMarketingLogin() {\n    const current = window.shipRocketMarketingLogin;\n    if (typeof current === 'function' && !current.__vrindaWrapped) {\n      nativeShipRocketMarketingLogin = current;\n    }\n    const wrapped = function () {\n      // Storefront account login uses native New Accounts when Fastrr login is off.\n      if (store.shiprocketLoginEnabled !== true) {\n        window.location.assign(NATIVE_ACCOUNT_URL);\n        return;\n      }\n      if (isAccountAccessReady()) {\n        window.location.assign(ACCOUNT_HUB_URL);\n        return;\n      }\n      // Block automatic landing popups; only icon / explicit CTA may open login.\n      if (!userOpenedShiprocketLogin && !isAccountAuthPage()) {\n        return;\n      }\n      if (showShiprocketLoginModal()) return;\n      // Prefer Fastrr's official triggerFastrLogin(true) path (Sammvaad).\n      if (typeof nativeShipRocketMarketingLogin === 'function') {\n        nativeShipRocketMarketingLogin();\n        return;\n      }\n      launchShiprocketLogin({ fromIcon: true, skipAccessRedirect: true });\n    };\n    wrapped.__vrindaWrapped = true;\n    window.shipRocketMarketingLogin = wrapped;\n  }\n\n  async function launchShiprocketLogin(options = {}) {\n    // Account icon / storefront login: native Shopify only when Fastrr phone login is off.\n    if (store.shiprocketLoginEnabled !== true) {\n      window.location.assign(store.accountLoginUrl || NATIVE_ACCOUNT_URL);\n      return;\n    }\n    if (store.shiprocketCheckoutEnabled === false) {\n      window.location.href = ACCOUNT_HUB_URL;\n      return;\n    }\n    if (!options.skipAccessRedirect && isAccountAccessReady() && options.fromIcon) {\n      window.location.href = ACCOUNT_HUB_URL;\n      return;\n    }\n    if (!options.skipAccessRedirect && isAccountAccessReady() && !options.force && !isAccountAuthPage()) {\n      window.location.href = ACCOUNT_HUB_URL;\n      return;\n    }\n\n    userOpenedShiprocketLogin = options.fromIcon === true || isAccountAuthPage() || options.force === true;\n\n    if (showShiprocketLoginModal()) return;\n\n    await ensureShiprocketScript();\n    hijackShiprocketMarketingLogin();\n\n    // Official path first: shiprocketMarketing.js \u2192 triggerFastrLogin(true)\n    if (typeof nativeShipRocketMarketingLogin === 'function') {\n      nativeShipRocketMarketingLogin();\n      return;\n    }\n\n    // Fallback if marketing script did not expose the native opener yet\n    const sellerConfig = await fetchPickrrSellerConfigLikeSammvaad({ enablePopup: true });\n    mountShiprocketLoginIframe(true, sellerConfig);\n  }\n\n  window.launchShiprocketLogin = launchShiprocketLogin;\n\n  function initFastrrLoginPageGuard() {\n    ensureFastrrSellerConfigBranding();\n    hijackShiprocketMarketingLogin();\n    enforceAccountOnlyLoginModal();\n    window.addEventListener('message', handleShiprocketLoginMessage);\n    window.addEventListener('load', () => {\n      ensureFastrrSellerConfigBranding();\n      hijackShiprocketMarketingLogin();\n      enforceAccountOnlyLoginModal();\n    });\n    window.addEventListener('pageshow', () => {\n      ensureFastrrSellerConfigBranding();\n      hijackShiprocketMarketingLogin();\n      enforceAccountOnlyLoginModal();\n    });\n  }\n\n  function initShiprocketAccountLogin() {\n    if (store.shiprocketLoginEnabled === false) return;\n\n    syncAccountIconForSession();\n\n    // Native Shopify / leftover account URLs from header \u2192 modal (guest) or hub (session)\n    document.addEventListener('click', (e) => {\n      const link = e.target.closest('a[href*=\"customer_authentication\"], a[href*=\"account.vrindaaddons.com\"], a[href=\"/account\"], a[href=\"/account/login\"]');\n      if (!link) return;\n      if (link.closest('[data-account-main], .account-sidebar, .account-order-list, [data-customer-login-fallback]')) return;\n      if (isHeaderAccountTrigger(link)) return; // handled in initAccountLinks\n\n      // Native New Accounts only \u2014 never open Fastrr phone OTP for storefront sign-in.\n      if (store.shiprocketLoginEnabled !== true) {\n        return;\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n      if (isAccountAccessReady()) {\n        window.location.href = ACCOUNT_HUB_URL;\n        return;\n      }\n      launchShiprocketLogin({ fromIcon: true });\n    }, true);\n\n    document.querySelectorAll('[data-shiprocket-login], [data-shiprocket-reopen]').forEach((el) => {\n      el.addEventListener('click', (e) => {\n        e.preventDefault();\n        if (store.shiprocketLoginEnabled !== true) {\n          window.location.assign(store.accountLoginUrl || NATIVE_ACCOUNT_URL);\n          return;\n        }\n        // Explicit CTA on account page may re-open OTP even if session cookie exists\n        launchShiprocketLogin({ force: true });\n      });\n    });\n\n    if (!isAccountAuthPage()) {\n      const strip = () => enforceAccountOnlyLoginModal();\n      strip();\n      window.setTimeout(strip, 300);\n      window.setTimeout(strip, 1200);\n      return;\n    }\n\n    // Shopify Multipass session \u2014 Liquid already rendered the real dashboard.\n    if (isShopifyCustomerLoggedIn()) {\n      syncAccountIconForSession();\n      return;\n    }\n\n    // Phone OTP done but Multipass not yet \u2014 only relevant when Fastrr account login is enabled.\n    if (store.shiprocketLoginEnabled === true && isShiprocketSessionActive()) {\n      const guest = document.querySelector('[data-account-guest]');\n      const params = new URLSearchParams(window.location.search);\n      const justAuthed = params.get('sr_auth') === '1';\n\n      const showSetupNote = () => {\n        if (!guest) return;\n        guest.setAttribute('data-shiprocket-session', 'true');\n        const title = guest.querySelector('.customer__title, #login');\n        const sub = guest.querySelector('.account-hub__guest-sub');\n        const lead = guest.querySelector('.customer-login-fallback__lead');\n        if (title) title.textContent = 'Almost there';\n        if (sub) sub.textContent = 'Phone verified \u00B7 waiting for Shopify link';\n        if (lead) {\n          lead.textContent =\n            'Your phone works for checkout. Orders, wallet, and addresses appear here once your account is fully linked.';\n        }\n        showShiprocketPairingNote(true);\n        const phoneBtn = guest.querySelector('[data-shiprocket-login]');\n        if (phoneBtn) phoneBtn.textContent = 'Try phone login again';\n      };\n\n      if (justAuthed) {\n        waitForShopifyCustomerSession(10000).then((linked) => {\n          if (linked) {\n            window.location.replace(ACCOUNT_HUB_URL + (ACCOUNT_HUB_URL.includes('?') ? '&' : '?') + 'sr_linked=1');\n            return;\n          }\n          showSetupNote();\n        });\n      } else {\n        showSetupNote();\n      }\n      return;\n    }\n\n    // Native accounts: never auto-open Fastrr phone OTP on account pages.\n    if (store.shiprocketLoginEnabled !== true) {\n      syncAccountIconForSession();\n      return;\n    }\n\n    const openAccountModal = async () => {\n      userOpenedShiprocketLogin = true;\n      await launchShiprocketLogin({ fromIcon: true, force: true, skipAccessRedirect: true });\n    };\n\n    const guestHub = document.querySelector('[data-account-guest][data-auto-shiprocket-login]');\n    if (guestHub) {\n      if (document.readyState === 'complete') {\n        window.setTimeout(openAccountModal, 400);\n      } else {\n        window.addEventListener('load', () => window.setTimeout(openAccountModal, 400), { once: true });\n      }\n    }\n\n    const loginObserver = new MutationObserver(() => {\n      const container = document.getElementById('shiprocket-login-container');\n      const open = !!container && container.style.display !== 'none';\n      applyFastrrLoginOpenState(open);\n    });\n    loginObserver.observe(document.body, { childList: true });\n  }\n\n  function normalizeShiprocketCheckoutLabels() {\n    document.querySelectorAll('.sr-headless-checkout, button.sr-headless-checkout').forEach((btn) => {\n      // Keep Buy now label + UPI + chevron + Powered by Shiprocket lockup.\n      btn.querySelectorAll('.sr-checkout-visible2').forEach((el) => {\n        if ((el.textContent || '').trim() !== 'Buy now') el.textContent = 'Buy now';\n      });\n      btn.querySelectorAll(\n        'img[src*=\"boost_button/upi_options\"], img[src*=\"boost_button/right_arrow\"], img.sr-checkout-visible1, .sr-powered-by, img[src*=\"powered_by\"]'\n      ).forEach((el) => {\n        el.removeAttribute('hidden');\n        el.removeAttribute('aria-hidden');\n        el.style.display = '';\n        el.style.visibility = 'visible';\n        el.style.opacity = '1';\n      });\n      // Guarantee the \">\" chevron stays mounted.\n      let arrow = btn.querySelector('img[src*=\"right_arrow\"], img.sr-checkout-visible1');\n      if (!arrow) {\n        const row = btn.querySelector('.sr-d-flex.full-width.flex-center') || btn;\n        arrow = document.createElement('img');\n        arrow.src = 'https://fastrr-boost-ui.pickrr.com/assets/images/boost_button/right_arrow.svg';\n        arrow.alt = '';\n        arrow.className = 'sr-pl-15 sr-checkout-visible1';\n        arrow.setAttribute('aria-hidden', 'true');\n        const upi = row.querySelector('img[src*=\"upi_options\"]');\n        if (upi && upi.nextSibling) row.insertBefore(arrow, upi.nextSibling);\n        else row.appendChild(arrow);\n      }\n    });\n  }\n\n  function markHeadlessCheckoutReady() {\n    document.querySelectorAll('.checkout-actions--headless').forEach((wrap) => {\n      const ready = !!wrap.querySelector('.sr-headless-checkout, button.sr-headless-checkout');\n      wrap.classList.toggle('checkout-actions--headless-ready', ready);\n      const fallback = wrap.querySelector('.checkout-btn--fallback');\n      if (fallback) {\n        fallback.setAttribute('aria-hidden', ready ? 'true' : 'false');\n        if (ready) fallback.setAttribute('tabindex', '-1');\n        else fallback.removeAttribute('tabindex');\n      }\n    });\n    normalizeShiprocketCheckoutLabels();\n  }\n\n  function initShiprocketHeadlessMounts() {\n    if (store.shiprocketHeadlessCheckout === false) return;\n\n    const syncHeadless = () => {\n      markHeadlessCheckoutReady();\n    };\n\n    syncHeadless();\n    const observer = new MutationObserver(syncHeadless);\n    observer.observe(document.documentElement, { childList: true, subtree: true });\n\n    document.addEventListener('cart:updated', syncHeadless);\n    document.addEventListener('cart:refresh', syncHeadless);\n    // If Fastrr never injects a button, keep the theme Checkout CTA visible.\n    setTimeout(syncHeadless, 2500);\n  }\n\n  function bindShiprocketCheckoutButtons() {\n    if (store.shiprocketCheckoutEnabled === false) return;\n    if (document.documentElement.dataset.srCheckoutDelegated === 'true') return;\n    document.documentElement.dataset.srCheckoutDelegated = 'true';\n    document.addEventListener('click', async (e) => {\n      if (e.target.closest('.sr-headless-checkout, .shiprocket-headless button, [data-shiprocket-headless]')) return;\n      const btn = e.target.closest('[data-shiprocket-checkout], .shiprocket-checkout.checkout-btn--fallback');\n      if (!btn || btn.disabled) return;\n      const wrap = btn.closest('.checkout-actions--headless');\n      if (wrap && wrap.classList.contains('checkout-actions--headless-ready') && btn.classList.contains('checkout-btn--fallback')) {\n        return;\n      }\n      e.preventDefault();\n      e.stopPropagation();\n      startCheckoutObserver();\n      await launchShiprocketCheckout();\n    }, true);\n  }\n\n  function initShiprocketIntegration() {\n    if (window.checkoutBuyer && !window.checkoutBuyer.endsWith('/')) {\n      window.checkoutBuyer += '/';\n    }\n    bindShiprocketCheckoutButtons();\n    initShiprocketHeadlessMounts();\n    window.addEventListener('load', bindShiprocketCheckoutButtons);\n\n    const priorCheckoutCallback = window.srCustomCheckoutCallBackFn;\n    window.srCustomCheckoutCallBackFn = function (payload) {\n      const eventName = String(payload?.eventName || payload?.event || payload?.type || '').toLowerCase();\n      if (eventName === 'login' || eventName === 'we_phone') {\n        document.dispatchEvent(new CustomEvent('fastrr:customer-auth', { detail: payload }));\n        try {\n          sessionStorage.setItem('vrinda_fastrr_auth', JSON.stringify({\n            at: Date.now(),\n            event: eventName,\n            phone: payload?.data?.phone || payload?.phone || null,\n          }));\n        } catch (_) {}\n      }\n      if (shouldResetFastrrFromCallback(payload)) {\n        resetFastrrCheckoutUi();\n      }\n      if (typeof priorCheckoutCallback === 'function') priorCheckoutCallback(payload);\n    };\n\n    window.addEventListener('popstate', () => {\n      if (document.body.classList.contains('fastrr-checkout-open')) resetFastrrCheckoutUi();\n    });\n    window.addEventListener('pageshow', () => {\n      if (document.body.classList.contains('fastrr-checkout-open') && !isFastrrCheckoutUiActive()) {\n        resetFastrrCheckoutUi();\n      }\n    });\n    document.addEventListener('visibilitychange', () => {\n      if (document.visibilityState === 'visible' && document.body.classList.contains('fastrr-checkout-open') && !isFastrrCheckoutUiActive()) {\n        resetFastrrCheckoutUi();\n      }\n    });\n    window.addEventListener('message', (event) => {\n      if (!document.body.classList.contains('fastrr-checkout-open')) return;\n      let payload = event.data;\n      if (typeof payload === 'string') {\n        try { payload = JSON.parse(payload); } catch (_) { payload = { event: payload }; }\n      }\n      if (shouldResetFastrrFromCallback(payload)) resetFastrrCheckoutUi();\n    });\n    document.addEventListener('keydown', (event) => {\n      if (event.key === 'Escape' && document.body.classList.contains('fastrr-checkout-open') && !isFastrrCheckoutUiActive()) {\n        resetFastrrCheckoutUi();\n      }\n    });\n    document.addEventListener('fastrr:checkout-close', () => {\n      hideFastrrCheckoutNodes();\n    });\n\n    document.addEventListener('submit', async (e) => {\n      const form = e.target;\n      if (!form || form.tagName !== 'FORM') return;\n      const submitter = e.submitter;\n      if (!submitter || submitter.name !== 'checkout') return;\n      const action = (form.getAttribute('action') || '').toLowerCase();\n      if (action && !action.includes('/cart')) return;\n      const isIndia = await detectIndiaVisitor();\n      if (!shouldUseShiprocketCheckout(isIndia)) return;\n      e.preventDefault();\n      e.stopPropagation();\n      startCheckoutObserver();\n      await launchShiprocketCheckout();\n    }, true);\n  }\n\n  async function initMarketDetection() {\n    const isIndia = await detectIndiaVisitor();\n    if (isIndia) {\n      applyIndiaCheckoutLabels(true);\n      bindShiprocketCheckoutButtons();\n      markHeadlessCheckoutReady();\n    }\n  }\n\n  try { initLocalization(); } catch (e) { /* skip */ }\n  try { initShiprocketIntegration(); } catch (e) { /* skip */ }\n  try { initFastrrLoginPageGuard(); } catch (e) { /* skip */ }\n  try { initShiprocketAccountLogin(); } catch (e) { /* skip */ }\n  try { initMarketDetection(); } catch (e) { /* skip */ }\n\n  /* \u2500\u2500 Mobile menu \u2500\u2500 */\n  const mobileMenu = document.getElementById('mobile-menu');\n  if (mobileMenu) {\n    const openBtn = document.querySelector('[data-mobile-menu-open]');\n    function setMenuOpen(open) {\n      mobileMenu.classList.toggle('open', open);\n      mobileMenu.setAttribute('aria-hidden', open ? 'false' : 'true');\n      if (openBtn) openBtn.setAttribute('aria-expanded', open ? 'true' : 'false');\n      document.body.style.overflow = open ? 'hidden' : '';\n    }\n    openBtn?.addEventListener('click', () => setMenuOpen(true));\n    mobileMenu.querySelectorAll('[data-mobile-menu-close]').forEach((el) => {\n      el.addEventListener('click', () => setMenuOpen(false));\n    });\n    mobileMenu.querySelectorAll('.mobile-menu-nav a').forEach((link) => {\n      link.addEventListener('click', () => setMenuOpen(false));\n    });\n    document.addEventListener('keydown', (e) => {\n      if (e.key === 'Escape' && mobileMenu.classList.contains('open')) setMenuOpen(false);\n    });\n  }\n\n  /* \u2500\u2500 Product tabs \u2500\u2500 */\n  document.querySelectorAll('[data-product-tabs]').forEach((wrap) => {\n    const tabs = wrap.querySelectorAll('.product-tab');\n    const panels = wrap.querySelectorAll('.product-tab-panel');\n    tabs.forEach((tab) => {\n      tab.addEventListener('click', () => {\n        const id = tab.dataset.tab;\n        tabs.forEach((t) => { t.classList.remove('active'); t.setAttribute('aria-selected', 'false'); });\n        panels.forEach((p) => {\n          const active = p.dataset.panel === id;\n          p.classList.toggle('active', active);\n          p.hidden = !active;\n        });\n        tab.classList.add('active');\n        tab.setAttribute('aria-selected', 'true');\n      });\n    });\n  });\n\n  document.addEventListener('click', (e) => {\n    const btn = e.target.closest('[data-product-thumb]');\n    if (!btn) return;\n    document.querySelectorAll('.product-thumb').forEach((b) => b.classList.remove('active'));\n    btn.classList.add('active');\n    const img = document.getElementById('product-main-image');\n    if (img) {\n      const url = btn.dataset.productThumb;\n      if (!url) return;\n      const absolute = url.startsWith('//') ? 'https:' + url : url;\n      const baseUrl = absolute.replace(/&width=\\d+/, '');\n      const widths = [352, 832, 1200, 1400];\n      const srcset = widths.map(function (w) { return baseUrl + '&width=' + w + ' ' + w + 'w'; }).join(', ');\n      img.style.opacity = '0';\n      img.srcset = srcset;\n      img.src = absolute;\n      img.onload = function () { img.style.opacity = '1'; };\n    }\n  });\n\n  const mainGallery = document.querySelector('.product-gallery-main--pdp');\n  if (mainGallery) {\n    if (matchMedia('(hover: hover) and (pointer: fine)').matches) {\n      mainGallery.style.setProperty('--zoom-x', '50%');\n      mainGallery.style.setProperty('--zoom-y', '50%');\n      mainGallery.addEventListener('mousemove', (e) => {\n        const rect = mainGallery.getBoundingClientRect();\n        mainGallery.style.setProperty('--zoom-x', ((e.clientX - rect.left) / rect.width) * 100 + '%');\n        mainGallery.style.setProperty('--zoom-y', ((e.clientY - rect.top) / rect.height) * 100 + '%');\n      });\n    } else {\n      mainGallery.addEventListener('click', () => {\n        mainGallery.classList.toggle('zoomed');\n      });\n    }\n  }\n  const variantSelect = document.getElementById('product-variant-select');\n  if (variantSelect) {\n    variantSelect.addEventListener('change', () => {\n      const opt = variantSelect.options[variantSelect.selectedIndex];\n      const priceEl = document.getElementById('product-price');\n      const stickyCurrent = document.getElementById('product-sticky-current');\n      const addBtn = document.getElementById('product-add-btn');\n      const buyBtn = document.getElementById('product-buy-btn');\n      const stickyBtn = document.getElementById('product-buy-btn-sticky');\n      const compareEl = document.getElementById('product-compare');\n      const saveBadge = document.getElementById('product-save-badge');\n      const stickyCompare = document.getElementById('product-sticky-compare');\n      const stickySave = document.getElementById('product-sticky-save');\n      if (priceEl && opt.dataset.price) priceEl.textContent = opt.dataset.price;\n      if (stickyCurrent && opt.dataset.price) stickyCurrent.textContent = opt.dataset.price;\n      const discount = parseInt(opt.dataset.discount || '0', 10);\n      if (compareEl) {\n        compareEl.textContent = opt.dataset.compare || '';\n        compareEl.hidden = discount <= 0;\n      }\n      if (saveBadge) {\n        saveBadge.textContent = discount > 0 ? '(' + discount + '% OFF)' : '';\n        saveBadge.hidden = discount <= 0;\n      }\n      if (stickyCompare) {\n        stickyCompare.textContent = opt.dataset.compare || '';\n        stickyCompare.hidden = discount <= 0;\n      }\n      if (stickySave) {\n        stickySave.textContent = discount > 0 ? '(' + discount + '% OFF)' : '';\n        stickySave.hidden = discount <= 0;\n      }\n      const available = opt.dataset.available === 'true';\n      if (addBtn) {\n        addBtn.disabled = !available;\n        addBtn.textContent = available ? 'Add to cart' : 'Sold out';\n      }\n      if (buyBtn) buyBtn.disabled = !available;\n      if (stickyBtn) stickyBtn.disabled = !available;\n    });\n  }\n\n  const qtyInput = document.getElementById('product-quantity');\n  const qtyRow = document.querySelector('.product-qty-row');\n  if (qtyInput && qtyRow) {\n    qtyRow.querySelector('[data-qty-minus]')?.addEventListener('click', () => {\n      qtyInput.value = Math.max(1, parseInt(qtyInput.value, 10) - 1 || 1);\n    });\n    qtyRow.querySelector('[data-qty-plus]')?.addEventListener('click', () => {\n      qtyInput.value = Math.max(1, parseInt(qtyInput.value, 10) + 1 || 2);\n    });\n  }\n\n  const stickyBar = document.getElementById('product-sticky-bar');\n  if (stickyBar) {\n    const gallery = document.querySelector('.product-gallery-main--pdp');\n    if (gallery) {\n      const toggleSticky = () => {\n        const rect = gallery.getBoundingClientRect();\n        stickyBar.hidden = rect.bottom > 1;\n      };\n      toggleSticky();\n      window.addEventListener('scroll', toggleSticky, { passive: true });\n      window.addEventListener('resize', toggleSticky, { passive: true });\n    }\n  }\n\n  function bindBuyNowButtons() {\n    if (document.documentElement.dataset.vrindaBuyNowDelegated === 'true') return;\n    document.documentElement.dataset.vrindaBuyNowDelegated = 'true';\n    document.addEventListener('click', async (e) => {\n      const btn = e.target.closest('[data-buy-now], [data-shiprocket-buy-now]');\n      if (!btn || btn.disabled) return;\n      e.preventDefault();\n      e.stopPropagation();\n      const labelNode = btn.querySelector('.sr-buy-cta__label')\n        || btn.querySelector('.product-buy-btn__label--long')\n        || btn.querySelector('.product-buy-btn__label')\n        || btn;\n      const label = labelNode.textContent;\n      btn.disabled = true;\n      btn.setAttribute('aria-busy', 'true');\n      if (labelNode !== btn) {\n        labelNode.textContent = 'Processing\u2026';\n      } else {\n        btn.textContent = 'Processing\u2026';\n      }\n      try {\n        Object.defineProperty(e, 'currentTarget', { configurable: true, value: btn });\n        await launchShiprocketBuyNow(e);\n      } catch {\n        showToast('Could not proceed', 'Please try again');\n      } finally {\n        btn.disabled = false;\n        btn.removeAttribute('aria-busy');\n        const buyLabel = btn.querySelector('.sr-buy-cta__label');\n        if (buyLabel) buyLabel.textContent = 'Buy now';\n        else if (labelNode !== btn) labelNode.textContent = label;\n        else btn.textContent = label;\n      }\n    }, true);\n  }\n\n  bindBuyNowButtons();\n\n  document.querySelectorAll('[data-product-share]').forEach((btn) => {\n    btn.addEventListener('click', async () => {\n      const url = btn.dataset.shareUrl || window.location.href;\n      const title = btn.dataset.shareTitle || document.title;\n      const text = title + ' \u2014 VrindaAddons';\n      if (navigator.share) {\n        try {\n          await navigator.share({ title, text, url });\n          return;\n        } catch (err) {\n          if (err && err.name === 'AbortError') return;\n        }\n      }\n      try {\n        if (navigator.clipboard && window.isSecureContext) {\n          await navigator.clipboard.writeText(url);\n          showToast('Link copied', 'Paste anywhere to share this product');\n          return;\n        }\n      } catch {\n        /* fall through */\n      }\n      window.open(\n        'https://wa.me/?text=' + encodeURIComponent(text + '\\n' + url),\n        '_blank',\n        'noopener,noreferrer'\n      );\n    });\n  });\n\n  document.querySelectorAll('.collection-sort-select').forEach((select) => {\n    select.addEventListener('change', () => select.form.submit());\n  });\n\n  function updateShippingProgress(cartTotal) {\n    const threshold = (store.freeShippingThreshold || 999) * 100;\n    const remaining = Math.max(0, threshold - cartTotal);\n    const progress = Math.min(100, Math.round((cartTotal / threshold) * 100));\n    document.querySelectorAll('[data-shipping-progress]').forEach((el) => {\n      const msg = el.querySelector('.shipping-progress-msg');\n      const fill = el.querySelector('.shipping-progress-fill');\n      if (msg) {\n        msg.textContent = cartTotal >= threshold\n          ? 'You unlocked free shipping'\n          : 'Add ' + formatMoney(remaining) + ' more for free shipping';\n        msg.classList.toggle('shipping-progress-msg--success', cartTotal >= threshold);\n      }\n      if (fill) fill.style.setProperty('--progress', String(progress));\n    });\n  }\n\n  function updateCartCount(count) {\n    document.querySelectorAll('[data-cart-count]').forEach((el) => {\n      el.textContent = String(count);\n      el.classList.toggle('is-visible', count > 0);\n      if (count > 0) el.removeAttribute('hidden');\n      else el.setAttribute('hidden', '');\n    });\n    const desc = document.querySelector('[data-cart-desc]');\n    if (desc) {\n      desc.textContent = count === 0\n        ? 'Your bag is empty'\n        : count + ' item' + (count !== 1 ? 's' : '') + ' in your bag';\n    }\n  }\n\n  function dispatchCartUpdate(cart) {\n    document.dispatchEvent(new CustomEvent('cart:updated', {\n      bubbles: true,\n      detail: { cart, itemCount: cart.item_count },\n    }));\n  }\n\n  /* Official Ajax Cart API helpers (Shopify docs + Dawn).\n     Proven path: POST cart/add.js with { items: [{ id, quantity, properties?, selling_plan? }] }\n     then GET cart.js. Qty/remove via POST cart/change.js with { id: line_key, quantity }.\n     Fuaark also hits these endpoints; we do NOT copy their flat /cart/add quirks or Shopflo UI. */\n  function cartRoot() {\n    const root = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/';\n    return root.endsWith('/') ? root : (root + '/');\n  }\n\n  function cartUrl(path) {\n    return cartRoot() + String(path || '').replace(/^\\//, '');\n  }\n\n  function cartErrorMessage(data, fallback) {\n    if (!data) return fallback || 'Cart update failed';\n    if (typeof data.description === 'string' && data.description) return data.description;\n    if (typeof data.message === 'string' && data.message) return data.message;\n    if (typeof data.errors === 'string' && data.errors) return data.errors;\n    if (Array.isArray(data.errors) && data.errors.length) return data.errors.filter(Boolean).join(', ');\n    if (data.errors && typeof data.errors === 'object') {\n      const parts = Object.values(data.errors).flat().filter(Boolean);\n      if (parts.length) return parts.join(', ');\n    }\n    return fallback || 'Cart update failed';\n  }\n\n  function isCartApiError(data, res) {\n    if (res && !res.ok) return true;\n    if (!data || typeof data !== 'object') return false;\n    if (typeof data.status === 'number' && data.status >= 400) return true;\n    if (typeof data.status === 'string' && data.status && data.status !== 'success') return true;\n    if (typeof data.errors === 'string' && data.errors) return true;\n    if (Array.isArray(data.errors) && data.errors.length) return true;\n    if (data.errors && typeof data.errors === 'object' && Object.keys(data.errors).length) return true;\n    return false;\n  }\n\n  /** Full cart.js / change.js payload \u2014 NOT add.js (add returns { items } without item_count). */\n  function isFullCart(cart) {\n    return !!(cart && typeof cart.item_count === 'number' && Array.isArray(cart.items));\n  }\n\n  function parseVariantId(raw) {\n    const id = Number(raw);\n    if (!Number.isFinite(id) || id <= 0) throw new Error('Missing variant');\n    return id;\n  }\n\n  function parseSellingPlan(raw) {\n    if (raw == null || raw === '') return null;\n    const n = Number(raw);\n    return Number.isFinite(n) && n > 0 ? n : String(raw);\n  }\n\n  function formDataToCartAddPayload(formData) {\n    const id = parseVariantId(formData.get('id'));\n    const quantity = Math.max(1, parseInt(String(formData.get('quantity') || '1'), 10) || 1);\n    const item = { id, quantity };\n    const properties = {};\n    formData.forEach((value, key) => {\n      const match = String(key).match(/^properties\\[(.*)\\]$/);\n      if (match && value !== '') properties[match[1]] = value;\n    });\n    if (Object.keys(properties).length) item.properties = properties;\n    const sellingPlan = parseSellingPlan(formData.get('selling_plan'));\n    if (sellingPlan != null) item.selling_plan = sellingPlan;\n    // Official Ajax Cart shape (shopify.dev): { items: [{ id, quantity, ... }] }\n    return { items: [item] };\n  }\n\n  function normalizeCartAddPayload(payload) {\n    if (!payload) throw new Error('Missing cart payload');\n    if (Array.isArray(payload.items) && payload.items.length) {\n      return {\n        items: payload.items.map((entry) => {\n          const item = {\n            id: parseVariantId(entry.id),\n            quantity: Math.max(1, parseInt(String(entry.quantity || 1), 10) || 1),\n          };\n          if (entry.properties && typeof entry.properties === 'object') item.properties = entry.properties;\n          const sellingPlan = parseSellingPlan(entry.selling_plan);\n          if (sellingPlan != null) item.selling_plan = sellingPlan;\n          return item;\n        }),\n      };\n    }\n    const item = {\n      id: parseVariantId(payload.id),\n      quantity: Math.max(1, parseInt(String(payload.quantity || 1), 10) || 1),\n    };\n    if (payload.properties && typeof payload.properties === 'object') item.properties = payload.properties;\n    const sellingPlan = parseSellingPlan(payload.selling_plan);\n    if (sellingPlan != null) item.selling_plan = sellingPlan;\n    return { items: [item] };\n  }\n\n  let cartMutationQueue = Promise.resolve();\n  function enqueueCartMutation(task) {\n    const run = cartMutationQueue.then(() => task());\n    cartMutationQueue = run.catch(() => {});\n    return run;\n  }\n\n  async function fetchCartJson() {\n    const res = await fetch(cartUrl('cart.js'), {\n      headers: { Accept: 'application/json' },\n      credentials: 'same-origin',\n    });\n    if (!res.ok) throw new Error('Cart fetch failed');\n    const cart = await res.json();\n    if (!isFullCart(cart)) throw new Error('Cart fetch failed');\n    return cart;\n  }\n\n  async function shopifyCartAdd(payload) {\n    const body = normalizeCartAddPayload(payload);\n    const res = await fetch(cartUrl('cart/add.js'), {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'X-Requested-With': 'XMLHttpRequest',\n      },\n      credentials: 'same-origin',\n      body: JSON.stringify(body),\n    });\n    const data = await res.json().catch(() => ({}));\n    if (isCartApiError(data, res)) {\n      const err = new Error(cartErrorMessage(data, 'Add failed'));\n      err.cartPayload = data;\n      err.status = res.status;\n      throw err;\n    }\n    return data;\n  }\n\n  async function shopifyCartChange(payload) {\n    // Official: id = line item key (preferred) or variant_id; quantity 0 removes.\n    // Do NOT coerce line keys with Number() \u2014 keys are \"variantId:hash\" strings.\n    if (payload == null || payload.id == null || payload.id === '') {\n      throw new Error('Missing cart line');\n    }\n    const qtyParsed = parseInt(String(payload.quantity), 10);\n    const body = {\n      id: payload.id,\n      quantity: Number.isFinite(qtyParsed) ? Math.max(0, qtyParsed) : 0,\n    };\n    if (payload.properties && typeof payload.properties === 'object') body.properties = payload.properties;\n    if (Object.prototype.hasOwnProperty.call(payload, 'selling_plan')) {\n      body.selling_plan = payload.selling_plan == null ? null : parseSellingPlan(payload.selling_plan);\n    }\n    const res = await fetch(cartUrl('cart/change.js'), {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'X-Requested-With': 'XMLHttpRequest',\n      },\n      credentials: 'same-origin',\n      body: JSON.stringify(body),\n    });\n    const data = await res.json().catch(() => ({}));\n    if (isCartApiError(data, res)) {\n      const err = new Error(cartErrorMessage(data, 'Cart update failed'));\n      err.cartPayload = data;\n      err.status = res.status;\n      throw err;\n    }\n    return data;\n  }\n\n  function withTimeout(promise, ms, fallback) {\n    let timer;\n    return Promise.race([\n      Promise.resolve(promise).finally(() => clearTimeout(timer)),\n      new Promise((resolve) => {\n        timer = setTimeout(() => resolve(fallback), ms);\n      }),\n    ]);\n  }\n\n  function useEssentialCartDrawer() {\n    return store.useEssentialCartDrawer === true;\n  }\n\n  function useVrindaCommerceCart() {\n    return !useEssentialCartDrawer() && store.useVrindaCommerceCart === true;\n  }\n\n  function useShiprocketSmartCart() {\n    return !useEssentialCartDrawer() && !useVrindaCommerceCart() && store.useShiprocketSmartCart === true;\n  }\n\n  function useExternalCartDrawer() {\n    return useEssentialCartDrawer() || useVrindaCommerceCart() || useShiprocketSmartCart();\n  }\n\n  function essentialCartReady() {\n    // Essential Cart Drawer ships as rapi-cart extension assets / #rapi-cart-drawer-app.\n    return !!document.querySelector(\n      [\n        '#rapi-cart-drawer-app',\n        '.rapi-cart-drawer',\n        'script[src*=\"rapi-cart\"]',\n        'link[href*=\"rapi-cart\"]',\n        'script[src*=\"essential-cart-drawer\"]',\n        'script[src*=\"essential-cart\"]',\n        '[id*=\"essential-cart\"]',\n        '[class*=\"essential-cart\"]',\n        '[data-essential-cart]',\n        '[data-rapi-cart]'\n      ].join(', ')\n    );\n  }\n\n  function markEssentialCartActive() {\n    if (!useEssentialCartDrawer() || !essentialCartReady()) return;\n    document.body.classList.add('cart-provider-essential-cart');\n    document.body.classList.add('essential-cart-drawer-active');\n    // Close native drawer if it somehow opened before Essential stood up.\n    const overlay = document.getElementById('cart-drawer-overlay');\n    const drawer = document.getElementById('cart-drawer');\n    if (overlay) {\n      overlay.classList.remove('open');\n      overlay.setAttribute('aria-hidden', 'true');\n    }\n    if (drawer) drawer.classList.remove('open');\n    document.body.classList.remove('cart-drawer-open');\n  }\n\n  function resetExternalCartState() {\n    if (!useEssentialCartDrawer()) document.body.classList.remove('essential-cart-drawer-active');\n    if (!useVrindaCommerceCart()) document.body.classList.remove('vrinda-commerce-cart-active');\n    if (!useShiprocketSmartCart()) document.body.classList.remove('shiprocket-smart-cart-active');\n  }\n\n  function disableInactiveAppCartMarkup() {\n    if (!useVrindaCommerceCart()) {\n      document.querySelectorAll('[data-app=\"vrinda-commerce-cart\"], .vcc-overlay, .vcc-drawer, .vcc-sticky-pill').forEach((node) => {\n        node.remove();\n      });\n      document.querySelectorAll('script[data-vrinda-cart-reload=\"true\"]').forEach((node) => node.remove());\n      document.body.classList.remove('vcc-checkout-pending');\n    }\n  }\n\n  function vrindaCommerceCartReady() {\n    return !!(\n      document.querySelector('[data-app=\"vrinda-commerce-cart\"]') &&\n      window.VrindaCommerceCart &&\n      typeof window.VrindaCommerceCart.open === 'function'\n    );\n  }\n\n  function openVrindaCommerceCart() {\n    resetStaleVrindaCartUi();\n    if (!vrindaCommerceCartReady()) return false;\n    try {\n      pendingVrindaCartOpen = false;\n      window.VrindaCommerceCart.open();\n      return true;\n    } catch (_) {\n      return false;\n    }\n  }\n\n  function resetStaleVrindaCartUi() {\n    if (isFastrrCheckoutUiActive()) return;\n    if (!document.body.classList.contains('fastrr-checkout-open') && !document.body.classList.contains('vcc-checkout-pending')) return;\n    resetFastrrCheckoutUi();\n  }\n\n  function queueVrindaCommerceCartOpen() {\n    pendingVrindaCartOpen = true;\n    waitForVrindaCommerceCartReady(7000).then((ready) => {\n      if (ready) openVrindaCommerceCart();\n    });\n  }\n\n  function getVrindaCommerceCartScriptSrc() {\n    return (\n      document.querySelector('script[src*=\"vrinda-commerce-cart\"][src*=\"vrinda-cart.js\"]')?.src ||\n      document.querySelector('script[src*=\"vrinda-cart.js\"]')?.src ||\n      ''\n    );\n  }\n\n  function ensureVrindaCommerceCartScript() {\n    if (vrindaCommerceCartReady()) return Promise.resolve(true);\n\n    const src = getVrindaCommerceCartScriptSrc();\n    if (!src) return Promise.resolve(false);\n\n    const existingReload = document.querySelector('script[data-vrinda-cart-reload=\"true\"]');\n    if (existingReload) {\n      return new Promise((resolve) => {\n        existingReload.addEventListener('load', () => resolve(vrindaCommerceCartReady()), { once: true });\n        existingReload.addEventListener('error', () => resolve(vrindaCommerceCartReady()), { once: true });\n        setTimeout(() => resolve(vrindaCommerceCartReady()), 2500);\n      });\n    }\n\n    return new Promise((resolve) => {\n      const script = document.createElement('script');\n      script.src = src;\n      script.defer = true;\n      script.async = true;\n      script.dataset.vrindaCartReload = 'true';\n      script.onload = () => resolve(vrindaCommerceCartReady());\n      script.onerror = () => resolve(vrindaCommerceCartReady());\n      document.body.appendChild(script);\n      setTimeout(() => resolve(vrindaCommerceCartReady()), 2500);\n    });\n  }\n\n  async function waitForVrindaCommerceCartReady(timeoutMs = 5000) {\n    if (vrindaCommerceCartReady()) return true;\n    return new Promise((resolve) => {\n      let settled = false;\n      const cleanup = () => {\n        clearInterval(timer);\n        clearTimeout(timeout);\n        document.removeEventListener('vrinda-commerce-cart:ready', onReady);\n      };\n      const finish = (value) => {\n        if (settled) return;\n        settled = true;\n        cleanup();\n        resolve(value);\n      };\n      const onReady = () => {\n        if (vrindaCommerceCartReady()) finish(true);\n      };\n      setTimeout(() => {\n        if (!vrindaCommerceCartReady()) ensureVrindaCommerceCartScript().then((ok) => {\n          if (ok) finish(true);\n        });\n      }, 800);\n      const timer = setInterval(() => {\n        if (vrindaCommerceCartReady()) {\n          finish(true);\n          return;\n        }\n      }, 120);\n      const timeout = setTimeout(() => finish(vrindaCommerceCartReady()), timeoutMs);\n      document.addEventListener('vrinda-commerce-cart:ready', onReady, { once: true });\n    });\n  }\n\n  function shiprocketSmartCartReady() {\n    return !!(\n      document.querySelector('[data-app=\"shiprocket-smart-cart\"]') &&\n      typeof window.slideShiprocketSmartCartInFrame === 'function'\n    );\n  }\n\n  function openShiprocketSmartCart() {\n    if (!shiprocketSmartCartReady()) return false;\n    try {\n      window.slideShiprocketSmartCartInFrame();\n      return true;\n    } catch (_) {\n      return false;\n    }\n  }\n\n  async function syncHeaderCartCount() {\n    try {\n      const cart = await fetchCartJson();\n      updateCartCount(cart.item_count);\n      const displaySubtotal = cartDisplaySubtotal(cart);\n      updateShippingProgress(displaySubtotal);\n      dispatchCartUpdate(cart);\n      return cart;\n    } catch (_) {\n      return null;\n    }\n  }\n\n  function markVrindaCommerceCartActive() {\n    if (!vrindaCommerceCartReady()) return;\n    resetStaleVrindaCartUi();\n    document.body.classList.add('vrinda-commerce-cart-active');\n    if (pendingVrindaCartOpen) openVrindaCommerceCart();\n  }\n\n  function markShiprocketSmartCartActive() {\n    if (!shiprocketSmartCartReady()) return;\n    document.body.classList.add('shiprocket-smart-cart-active');\n  }\n\n  async function openPreferredCart(openCartFn) {\n    if (useEssentialCartDrawer()) {\n      // Official pattern: app embed owns the cart UI. Theme only stands down.\n      if (essentialCartReady()) {\n        markEssentialCartActive();\n        return;\n      }\n      for (let i = 0; i < 10 && !essentialCartReady(); i += 1) {\n        await new Promise((r) => setTimeout(r, 200));\n      }\n      if (essentialCartReady()) {\n        markEssentialCartActive();\n        return;\n      }\n      // Embed not live yet \u2014 fall back to native drawer so cart never dead-ends.\n    }\n    if (useVrindaCommerceCart()) {\n      if (openVrindaCommerceCart()) return;\n      const ready = await waitForVrindaCommerceCartReady(2500);\n      if (ready && openVrindaCommerceCart()) return;\n      // Embed not active yet \u2014 fall back to native drawer so cart never dead-ends.\n    }\n    if (useShiprocketSmartCart() && openShiprocketSmartCart()) return;\n    if (typeof openCartFn === 'function') {\n      openCartFn();\n      return;\n    }\n    window.location.href = store.cartUrl || cartUrl('cart');\n  }\n\n  function initAppCartRouting(openCartFn) {\n    disableInactiveAppCartMarkup();\n    if (!useExternalCartDrawer()) return;\n\n    document.querySelectorAll('[data-cart-open]').forEach((el) => {\n      el.addEventListener('click', (e) => {\n        if (!useExternalCartDrawer()) return;\n        e.preventDefault();\n        openPreferredCart(openCartFn);\n      }, true);\n    });\n\n    const markWhenReady = () => {\n      if (useEssentialCartDrawer() && essentialCartReady()) {\n        markEssentialCartActive();\n        syncHeaderCartCount();\n        return true;\n      }\n      if (useVrindaCommerceCart() && vrindaCommerceCartReady()) {\n        markVrindaCommerceCartActive();\n        syncHeaderCartCount();\n        return true;\n      }\n      if (useShiprocketSmartCart() && shiprocketSmartCartReady()) {\n        markShiprocketSmartCartActive();\n        syncHeaderCartCount();\n        return true;\n      }\n      return false;\n    };\n\n    if (!markWhenReady()) {\n      let attempts = 0;\n      const timer = setInterval(() => {\n        attempts += 1;\n        if (markWhenReady() || attempts >= 40) clearInterval(timer);\n      }, 250);\n    }\n\n    resetStaleVrindaCartUi();\n\n    document.addEventListener('visibilitychange', () => {\n      if (document.visibilityState === 'visible') {\n        resetStaleVrindaCartUi();\n        syncHeaderCartCount();\n      }\n    });\n    setInterval(() => {\n      if (document.visibilityState === 'visible' && (vrindaCommerceCartReady() || shiprocketSmartCartReady())) {\n        resetStaleVrindaCartUi();\n        syncHeaderCartCount();\n      }\n    }, 5000);\n\n    window.VrindaCart = Object.assign(window.VrindaCart || {}, {\n      open: () => openPreferredCart(openCartFn),\n      openVrindaCommerceCart,\n      openSmartCart: openShiprocketSmartCart,\n      refresh: syncHeaderCartCount,\n    });\n  }\n\n  function initShiprocketSmartCartRouting(openCartFn) {\n    initAppCartRouting(openCartFn);\n  }\n\n  /* \u2500\u2500 Cart: native theme drawer \u2500\u2500 */\n  const drawer = document.getElementById('cart-drawer');\n  const overlay = document.getElementById('cart-drawer-overlay');\n  if (drawer && overlay) {\n    function ensureNativeDrawerVisible() {\n      resetExternalCartState();\n      drawer.style.removeProperty('display');\n      drawer.style.removeProperty('visibility');\n      drawer.style.removeProperty('pointer-events');\n      overlay.style.removeProperty('display');\n      overlay.style.removeProperty('visibility');\n      overlay.style.removeProperty('pointer-events');\n      drawer.classList.remove('vcc-hidden');\n      overlay.classList.remove('vcc-hidden');\n      drawer.removeAttribute('hidden');\n      overlay.removeAttribute('hidden');\n      drawer.setAttribute('aria-hidden', 'false');\n      overlay.setAttribute('aria-hidden', 'false');\n    }\n\n    let cartFocusReturn = null;\n    let cartFocusTrapHandler = null;\n\n    function announceCart(message) {\n      const live = document.getElementById('CartDrawer-LiveRegion');\n      if (!live || !message) return;\n      live.textContent = '';\n      requestAnimationFrame(() => { live.textContent = message; });\n    }\n\n    function getFocusableInDrawer() {\n      return [...drawer.querySelectorAll(\n        'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n      )].filter((el) => el.offsetParent !== null || el === document.activeElement);\n    }\n\n    function enableCartFocusTrap() {\n      disableCartFocusTrap();\n      cartFocusTrapHandler = (e) => {\n        if (e.key !== 'Tab' || !drawer.classList.contains('open')) return;\n        const focusable = getFocusableInDrawer();\n        if (!focusable.length) return;\n        const first = focusable[0];\n        const last = focusable[focusable.length - 1];\n        if (e.shiftKey && document.activeElement === first) {\n          e.preventDefault();\n          last.focus();\n        } else if (!e.shiftKey && document.activeElement === last) {\n          e.preventDefault();\n          first.focus();\n        }\n      };\n      document.addEventListener('keydown', cartFocusTrapHandler, true);\n    }\n\n    function disableCartFocusTrap() {\n      if (!cartFocusTrapHandler) return;\n      document.removeEventListener('keydown', cartFocusTrapHandler, true);\n      cartFocusTrapHandler = null;\n    }\n\n    function openCart(options) {\n      const opts = options && typeof options === 'object' ? options : {};\n      const shouldRefresh = opts.refresh !== false;\n      ensureNativeDrawerVisible();\n      cartFocusReturn = document.activeElement;\n      drawer.classList.add('open');\n      overlay.classList.add('open');\n      drawer.setAttribute('aria-hidden', 'false');\n      overlay.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('cart-drawer-open');\n      document.body.style.overflow = 'hidden';\n      enableCartFocusTrap();\n      if (shouldRefresh) {\n        refreshCart().then((cart) => {\n          announceCart(cart && cart.item_count\n            ? 'Cart updated. ' + cart.item_count + ' item' + (cart.item_count === 1 ? '' : 's') + ' in cart.'\n            : 'Your cart is empty.');\n        }).catch(() => {});\n      }\n      setTimeout(() => {\n        const closeBtn = drawer.querySelector('[data-cart-close]');\n        (closeBtn || drawer).focus?.();\n      }, 50);\n      setTimeout(markHeadlessCheckoutReady, 120);\n      setTimeout(markHeadlessCheckoutReady, 700);\n    }\n    function closeCart() {\n      drawer.classList.remove('open');\n      overlay.classList.remove('open');\n      document.body.classList.remove('cart-drawer-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      overlay.setAttribute('aria-hidden', 'true');\n      disableCartFocusTrap();\n      if (!document.body.classList.contains('fastrr-checkout-open')) {\n        document.body.style.overflow = '';\n      }\n      if (cartFocusReturn && typeof cartFocusReturn.focus === 'function') {\n        cartFocusReturn.focus();\n      }\n      cartFocusReturn = null;\n    }\n    document.querySelectorAll('[data-cart-open]').forEach((el) => {\n      if (el.dataset.vrindaCartOpenBound === '1') return;\n      el.dataset.vrindaCartOpenBound = '1';\n      el.addEventListener('click', (e) => {\n        if (useExternalCartDrawer()) return;\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        openCart();\n      }, true);\n    });\n    document.querySelectorAll('[data-cart-close]').forEach((el) => el.addEventListener('click', closeCart));\n    overlay.addEventListener('click', closeCart);\n    document.addEventListener('keydown', (e) => {\n      if (e.key !== 'Escape') return;\n      if (!drawer.classList.contains('open')) return;\n      closeCart();\n    });\n    resetExternalCartState();\n    disableInactiveAppCartMarkup();\n\n    function updateCartCountDrawer(count) {\n      updateCartCount(count);\n      const n = Number(count) || 0;\n      const title = document.getElementById('CartDrawer-Title');\n      if (title) {\n        title.innerHTML = n > 0\n          ? 'Your cart <span data-cart-title-count>(' + n + ')</span>'\n          : 'Your cart';\n      }\n      const promo = document.querySelector('[data-cart-promo]');\n      const incentives = document.querySelector('[data-cart-incentives]');\n      if (promo) promo.hidden = n === 0;\n      if (incentives) incentives.hidden = n === 0;\n    }\n\n    function normalizeImageUrl(url, width) {\n      if (!url || typeof url !== 'string') return '';\n      let src = url.trim();\n      if (!src || src === '[object Object]') return '';\n      if (src.startsWith('//')) src = 'https:' + src;\n      const w = width || 160;\n      if (/cdn\\.shopify\\.com/i.test(src) && !/[?&]width=\\d+/i.test(src)) {\n        src += (src.includes('?') ? '&' : '?') + 'width=' + w;\n      }\n      return src;\n    }\n\n    function resolveMediaUrl(value, width) {\n      if (!value) return '';\n      if (typeof value === 'string') return normalizeImageUrl(value, width);\n      if (typeof value === 'object') {\n        const nested = value.preview_image || value.previewImage || null;\n        const src = value.url || value.src || (nested && (nested.url || nested.src)) || '';\n        return normalizeImageUrl(src, width);\n      }\n      return '';\n    }\n\n    function cartItemImage(item) {\n      if (!item) return '';\n      return (\n        resolveMediaUrl(item.image, 160) ||\n        resolveMediaUrl(item.featured_image, 160) ||\n        resolveMediaUrl(item.image_url, 160) ||\n        ''\n      );\n    }\n\n    const productImageCache = new Map();\n\n    async function fetchProductImageByHandle(handle) {\n      if (!handle) return '';\n      if (productImageCache.has(handle)) return productImageCache.get(handle);\n      try {\n        const res = await fetch(cartUrl('products/' + encodeURIComponent(handle) + '.js'), {\n          headers: { Accept: 'application/json' },\n          credentials: 'same-origin',\n        });\n        if (!res.ok) {\n          productImageCache.set(handle, '');\n          return '';\n        }\n        const product = await res.json();\n        const src =\n          resolveMediaUrl(product.featured_image, 160) ||\n          resolveMediaUrl(product.images && product.images[0], 160) ||\n          resolveMediaUrl(product.media && product.media[0], 160) ||\n          '';\n        productImageCache.set(handle, src);\n        return src;\n      } catch (_) {\n        productImageCache.set(handle, '');\n        return '';\n      }\n    }\n\n    function productHandleFromCartItem(item) {\n      if (!item) return '';\n      if (item.handle) return item.handle;\n      const path = String(item.url || '').split('?')[0];\n      const marker = '/products/';\n      const idx = path.indexOf(marker);\n      if (idx === -1) return '';\n      return decodeURIComponent(path.slice(idx + marker.length).split('/')[0] || '');\n    }\n\n    async function enrichCartItemImages(cart) {\n      if (!cart || !Array.isArray(cart.items)) return cart;\n      await Promise.all(cart.items.map(async (item) => {\n        if (cartItemImage(item)) return;\n        const handle = productHandleFromCartItem(item);\n        const src = await fetchProductImageByHandle(handle);\n        if (src) item.image = src;\n      }));\n      return cart;\n    }\n\n    function escapeHtml(value) {\n      return String(value == null ? '' : value)\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&#39;');\n    }\n\n    function centsFromProduct(product, source) {\n      if (!product) return 0;\n      const variant = product.variants && product.variants[0];\n      const raw = variant && variant.price != null ? variant.price : product.price;\n      if (raw == null || raw === '') return 0;\n      if (source === 'recommendations') return Math.round(Number(raw)) || 0;\n      return Math.round(parseFloat(raw) * 100) || 0;\n    }\n\n    function firstAvailableVariant(product) {\n      if (!product || !Array.isArray(product.variants)) return null;\n      return product.variants.find((v) => v && v.available !== false) || product.variants[0] || null;\n    }\n\n    function productImageUrl(product) {\n      if (!product) return '';\n      return (\n        resolveMediaUrl(product.featured_image, 160) ||\n        resolveMediaUrl(product.images && product.images[0], 160) ||\n        resolveMediaUrl(product.media && product.media[0], 160) ||\n        ''\n      );\n    }\n\n    async function fetchRecommendationIntent(productId, intent, limit) {\n      const base = (store.routes && store.routes.productRecommendations)\n        || (cartRoot() + 'recommendations/products');\n      const url = base + '.json?product_id=' + encodeURIComponent(productId)\n        + '&limit=' + encodeURIComponent(limit)\n        + '&intent=' + encodeURIComponent(intent);\n      const res = await withTimeout(fetch(url, {\n        headers: { Accept: 'application/json' },\n        credentials: 'same-origin',\n      }), 2800, null);\n      if (!res || !res.ok) return [];\n      const data = await res.json().catch(() => ({}));\n      return Array.isArray(data.products) ? data.products.map((p) => Object.assign(p, { __source: 'recommendations' })) : [];\n    }\n\n    async function fetchCollectionProducts(handle, limit) {\n      if (!handle) return [];\n      try {\n        const res = await withTimeout(fetch(\n          cartUrl('collections/' + encodeURIComponent(handle) + '/products.json?limit=' + encodeURIComponent(limit + 4)),\n          { headers: { Accept: 'application/json' }, credentials: 'same-origin' }\n        ), 2800, null);\n        if (!res || !res.ok) return [];\n        const data = await res.json().catch(() => ({}));\n        return Array.isArray(data.products) ? data.products.map((p) => Object.assign(p, { __source: 'collection' })) : [];\n      } catch (_) {\n        return [];\n      }\n    }\n\n    async function fetchCatalogProducts(limit) {\n      try {\n        const res = await withTimeout(fetch(\n          cartUrl('products.json?limit=' + encodeURIComponent(limit + 6)),\n          { headers: { Accept: 'application/json' }, credentials: 'same-origin' }\n        ), 2800, null);\n        if (!res || !res.ok) return [];\n        const data = await res.json().catch(() => ({}));\n        return Array.isArray(data.products) ? data.products.map((p) => Object.assign(p, { __source: 'collection' })) : [];\n      } catch (_) {\n        return [];\n      }\n    }\n\n    async function fetchCartUpsells(cart) {\n      if (store.cartUpsellEnabled === false) return [];\n      const limit = Math.max(1, Math.min(4, parseInt(store.cartUpsellLimit, 10) || 3));\n      const inCart = new Set((cart.items || []).map((item) => String(item.product_id)));\n      const seedId = cart.items && cart.items[0] ? cart.items[0].product_id : null;\n      let candidates = [];\n\n      if (seedId) {\n        try {\n          candidates = await fetchRecommendationIntent(seedId, 'complementary', limit + 2);\n        } catch (_) {}\n        if (!candidates.length) {\n          try {\n            candidates = await fetchRecommendationIntent(seedId, 'related', limit + 2);\n          } catch (_) {}\n        }\n      }\n\n      if (candidates.length < limit) {\n        const fallback = await fetchCollectionProducts(store.cartUpsellCollection, limit + 2);\n        candidates = candidates.concat(fallback);\n      }\n\n      // Live catalog fallback when Search & Discovery / collection are empty\n      if (candidates.length < limit) {\n        const catalog = await fetchCatalogProducts(limit + 2);\n        candidates = candidates.concat(catalog);\n      }\n\n      const seen = new Set();\n      const upsells = [];\n      for (const product of candidates) {\n        if (!product || !product.id) continue;\n        const id = String(product.id);\n        if (inCart.has(id) || seen.has(id)) continue;\n        if (product.available === false) continue;\n        const variant = firstAvailableVariant(product);\n        if (!variant || variant.available === false) continue;\n        seen.add(id);\n        upsells.push({\n          id: product.id,\n          title: product.title,\n          image: productImageUrl(product),\n          variantId: variant.id,\n          priceCents: centsFromProduct(product, product.__source || 'collection'),\n          url: product.url || ('/products/' + (product.handle || '')),\n        });\n        if (upsells.length >= limit) break;\n      }\n      return upsells;\n    }\n\n    function cartDisplaySubtotal(cart) {\n      // Vrinda Privilege: gift is 100% off via BXGY (final_line_price 0) \u2014 must use final totals, not original (which adds gift \u20B9600)\n      // Also handles paid Under \u20B9999 that became FREE via Fastrr/Shopify (no _vrinda_privilege but discounted to 0)\n      var hasPrivilegeGift = Array.isArray(cart.items) && cart.items.some(function(it){\n        if (it.properties && it.properties._vrinda_privilege) return true;\n        if (it.final_line_price === 0 && it.original_line_price > 0 && it.price >= 69900 && it.price <= 99900) return true;\n        if (it.discount_allocations && it.discount_allocations.length && it.final_line_price === 0) return true;\n        return false;\n      });\n      if (hasPrivilegeGift) return cart.total_price || 0;\n      // Prepaid % applies in Shiprocket checkout only \u2014 show bag before cart-level auto discounts.\n      if (typeof cart.original_total_price === 'number') return cart.original_total_price;\n      if (Array.isArray(cart.items)) {\n        return cart.items.reduce((sum, item) => sum + (item.original_line_price || item.final_line_price || 0), 0);\n      }\n      return cart.total_price || 0;\n    }\n\n    function setCartFooterVisible(visible) {\n      const footer = document.querySelector('[data-cart-footer]');\n      if (!footer) return;\n      // Empty cart must not show estimated total / Shiprocket Buy now (Dawn-safe).\n      footer.hidden = !visible;\n      footer.setAttribute('aria-hidden', visible ? 'false' : 'true');\n      if (visible) footer.removeAttribute('hidden');\n      else footer.setAttribute('hidden', '');\n    }\n\n    async function addVariantToCart(variantId, options) {\n      const opts = options && typeof options === 'object' ? options : {};\n      const openDrawer = opts.openDrawer !== false;\n      try {\n        setCartBusy(true);\n        await enqueueCartMutation(async () => {\n          await shopifyCartAdd({ id: Number(variantId), quantity: 1 });\n          await refreshCart(null, { refreshUpsells: true });\n        });\n        if (openDrawer && !drawer.classList.contains('open')) {\n          openCart({ refresh: false });\n          const body = document.getElementById('cart-drawer-items');\n          if (body) body.scrollTop = 0;\n        }\n        return true;\n      } catch (err) {\n        showToast('Could not add item', (err && err.message) || 'Please try again');\n        return false;\n      } finally {\n        setCartBusy(false);\n      }\n    }\n\n    function setCartBusy(busy) {\n      if (!drawer) return;\n      drawer.classList.toggle('cart-drawer--busy', !!busy);\n      // Keep qty \u00B1 enabled so rapid clicks enqueue; queue + fresh cart.js serialize correctly.\n      // Only block remove/upsell during an in-flight mutation to avoid overlapping UX.\n      drawer.querySelectorAll('[data-remove], [data-reco-add]').forEach((el) => {\n        el.disabled = !!busy;\n      });\n    }\n\n    async function postCartAddForm(formData) {\n      return enqueueCartMutation(() => shopifyCartAdd(formDataToCartAddPayload(formData)));\n    }\n\n    async function postCartAddJson(payload) {\n      return enqueueCartMutation(() => shopifyCartAdd(payload));\n    }\n\n    async function postCartChange(payload) {\n      return enqueueCartMutation(() => shopifyCartChange(payload));\n    }\n\n    // Discount codes + order notes stay in Shiprocket checkout \u2014 not duplicated in the drawer.\n\n    function syncCartSummary(cart) {\n      const subtotalEl = document.getElementById('cart-drawer-subtotal');\n      if (subtotalEl) subtotalEl.textContent = formatMoney(cartDisplaySubtotal(cart));\n    }\n\n    function renderUpsellSection(upsells, heading, placeholderSrc) {\n      if (!upsells.length) return '';\n      const upsellHeading = escapeHtml(heading || 'You might also like');\n      return `\n        <section class=\"cart-reco\" aria-label=\"${upsellHeading}\">\n          <h3 class=\"cart-reco-title\">${upsellHeading}</h3>\n          <div class=\"cart-reco-list\" data-cart-reco-scroller>\n            ${upsells.map((product) => {\n              const recoImg = product.image || placeholderSrc;\n              return `\n              <div class=\"cart-reco-card\">\n                <a class=\"cart-line-image cart-reco-image\" href=\"${escapeHtml(product.url)}\">${recoImg ? `<img src=\"${escapeHtml(recoImg)}\" alt=\"${escapeHtml(product.title)}\" width=\"160\" height=\"160\" loading=\"lazy\" decoding=\"async\">` : '<span class=\"cart-line-image-fallback\" aria-hidden=\"true\"></span>'}</a>\n                <div class=\"cart-reco-body\">\n                  <a class=\"cart-line-title\" href=\"${escapeHtml(product.url)}\">${escapeHtml(product.title)}</a>\n                  <p class=\"cart-line-price\">${formatMoney(product.priceCents)}</p>\n                  <button type=\"button\" class=\"cart-reco-btn\" data-reco-add data-variant-id=\"${escapeHtml(product.variantId)}\">+ Add</button>\n                </div>\n              </div>`;\n            }).join('')}\n          </div>\n        </section>`;\n    }\n\n    function bindCartBodyActions(root) {\n      if (!root || root.dataset.vrindaCartDelegated === '1') return;\n      root.dataset.vrindaCartDelegated = '1';\n      // Event delegation so Liquid SSR lines work before/without JS re-render.\n      root.addEventListener('click', (e) => {\n        const closeEl = e.target.closest('[data-cart-close]');\n        if (closeEl) {\n          e.preventDefault();\n          closeCart();\n          return;\n        }\n        const minus = e.target.closest('[data-qty-minus]');\n        if (minus) {\n          e.preventDefault();\n          changeQty(minus.dataset.key, -1);\n          return;\n        }\n        const plus = e.target.closest('[data-qty-plus]');\n        if (plus) {\n          e.preventDefault();\n          changeQty(plus.dataset.key, 1);\n          return;\n        }\n        const remove = e.target.closest('[data-remove]');\n        if (remove) {\n          e.preventDefault();\n          removeLine(remove.dataset.key);\n          return;\n        }\n        const reco = e.target.closest('[data-reco-add]');\n        if (reco) {\n          e.preventDefault();\n          addVariantToCart(reco.dataset.variantId);\n        }\n      });\n    }\n\n    function renderCartLineHtml(item, placeholderSrc) {\n      const cmpUnit = (window.__vaCompareAt && window.__vaCompareAt[item.variant_id]) || 0;\n      const cmpLine = cmpUnit * item.quantity;\n      const originalLine = item.original_line_price || item.line_price || item.final_line_price;\n      const finalLine = item.final_line_price;\n      let priceHtml = formatMoney(finalLine);\n      if (cmpLine > finalLine) {\n        priceHtml = '<span class=\"cart-line-price-now\">' + formatMoney(finalLine) + '</span> <s class=\"cart-line-price-was\">' + formatMoney(cmpLine) + '</s>';\n      } else if (originalLine > finalLine) {\n        priceHtml = '<span class=\"cart-line-price-now\">' + formatMoney(finalLine) + '</span> <s class=\"cart-line-price-was\">' + formatMoney(originalLine) + '</s>';\n      }\n      const imageSrc = cartItemImage(item) || placeholderSrc;\n      const imageHtml = imageSrc\n        ? '<img src=\"' + escapeHtml(imageSrc) + '\" alt=\"' + escapeHtml(item.product_title || item.title) + '\" width=\"88\" height=\"88\" loading=\"lazy\" decoding=\"async\">'\n        : '<span class=\"cart-line-image-fallback\" aria-hidden=\"true\"></span>';\n      const variantHtml = item.variant_title && item.variant_title !== 'Default Title'\n        ? '<p class=\"cart-line-variant\">' + escapeHtml(item.variant_title) + '</p>'\n        : '';\n      const props = item.properties && typeof item.properties === 'object' ? item.properties : null;\n      const propsHtml = props\n        ? Object.keys(props).filter((k) => k && props[k] != null && String(props[k]) !== '' && k.charAt(0) !== '_')\n          .map((k) => '<p class=\"cart-line-property\"><span>' + escapeHtml(k) + ':</span> ' + escapeHtml(props[k]) + '</p>')\n          .join('')\n        : '';\n      return `\n        <div class=\"cart-line cart-line--drawer\" data-key=\"${escapeHtml(item.key)}\" data-variant-id=\"${escapeHtml(item.variant_id)}\"${item.properties && item.properties._vrinda_privilege ? ' data-gift-line=\"true\"' : ''}>\n          <a class=\"cart-line-image\" href=\"${escapeHtml(item.url || '#')}\">${imageHtml}</a>\n          <div class=\"cart-line-body\">\n            <a class=\"cart-line-title\" href=\"${escapeHtml(item.url || '#')}\">${escapeHtml(item.product_title)}</a>\n            ${variantHtml}\n            ${propsHtml}\n            <p class=\"cart-line-price\">${priceHtml}</p>\n            <div class=\"cart-line-controls\">\n              <div class=\"cart-line-qty cart-line-qty--drawer\">\n                <button type=\"button\" class=\"cart-qty-btn cart-qty-btn--muted\" data-qty-minus data-key=\"${escapeHtml(item.key)}\" aria-label=\"Decrease quantity\">${iconSvg('minus', 12)}</button>\n                <span class=\"cart-line-qty-value\" aria-live=\"polite\">${item.quantity}</span>\n                <button type=\"button\" class=\"cart-qty-btn cart-qty-btn--solid\" data-qty-plus data-key=\"${escapeHtml(item.key)}\" aria-label=\"Increase quantity\">${iconSvg('plus', 12)}</button>\n              </div>\n              <button type=\"button\" class=\"cart-remove-btn\" data-remove data-key=\"${escapeHtml(item.key)}\" aria-label=\"Remove\">${iconSvg('remove', 14)}</button>\n            </div>\n          </div>\n        </div>`;\n    }\n\n    let cartRefreshToken = 0;\n    let lastCartLineSignature = '';\n\n    function cartLineSignature(cart) {\n      return (cart && Array.isArray(cart.items) ? cart.items : [])\n        .map((item) => String(item.key))\n        .sort()\n        .join('|');\n    }\n\n    function mountCartUpsells(body, cart, heading, placeholderSrc, token) {\n      // Fetch first, then swap atomically \u2014 never leave a hole where qty/remove can't preserve.\n      withTimeout(fetchCartUpsells(cart), 4500, []).then((upsells) => {\n        if (token !== cartRefreshToken || !body.isConnected) return;\n        if (!upsells.length) {\n          body.querySelector('.cart-reco')?.remove();\n          return;\n        }\n        const wrap = document.createElement('div');\n        wrap.innerHTML = renderUpsellSection(upsells, heading, placeholderSrc);\n        const section = wrap.firstElementChild;\n        if (!section) return;\n        const existing = body.querySelector('.cart-reco');\n        if (existing) existing.replaceWith(section);\n        else body.appendChild(section);\n      }).catch(() => {});\n    }\n\n    function ensureCartLinesStack(body) {\n      let stack = body.querySelector('.cart-lines-stack');\n      if (stack) return stack;\n      stack = document.createElement('div');\n      stack.className = 'cart-lines-stack';\n      const reco = body.querySelector('.cart-reco');\n      const empty = body.querySelector('.cart-empty');\n      if (empty) empty.remove();\n      if (reco) body.insertBefore(stack, reco);\n      else body.appendChild(stack);\n      return stack;\n    }\n\n    /**\n     * @param {object} [prefetchedCart]\n     * @param {{ refreshUpsells?: boolean }} [options]\n     *   refreshUpsells true  \u2192 reload recommendations (add product)\n     *   refreshUpsells false \u2192 never touch upsell DOM (qty +/- / remove)\n     *   default/'auto'       \u2192 reload only when line-item keys change\n     */\n    async function refreshCart(prefetchedCart, options) {\n      const opts = options && typeof options === 'object' ? options : {};\n      const token = ++cartRefreshToken;\n      const cart = isFullCart(prefetchedCart) ? prefetchedCart : await fetchCartJson();\n      if (token !== cartRefreshToken) return cart;\n\n      const displaySubtotal = cartDisplaySubtotal(cart);\n      updateCartCountDrawer(cart.item_count);\n      updateShippingProgress(displaySubtotal);\n      setCartFooterVisible(cart.item_count > 0);\n      syncCartSummary(cart);\n      markHeadlessCheckoutReady();\n      dispatchCartUpdate(cart);\n      const body = document.getElementById('cart-drawer-items');\n      if (!body) return cart;\n      bindCartBodyActions(body);\n\n      const placeholderSrc = normalizeImageUrl(store.cartImagePlaceholder || '', 160);\n      const upsellHeading = store.cartUpsellHeading || 'You might also like';\n      const emptyHref = escapeHtml(document.body.dataset.collectionDropUrl || cartUrl('collections/shop-the-drop'));\n      const nextSig = cartLineSignature(cart);\n      const lineSetChanged = nextSig !== lastCartLineSignature;\n      lastCartLineSignature = nextSig;\n\n      const forceUpsells = opts.refreshUpsells === true;\n      const keepUpsells = opts.refreshUpsells === false;\n      const existingReco = body.querySelector('.cart-reco');\n\n      if (!cart.items || cart.items.length === 0) {\n        // Empty cart: empty shell only \u2014 no \"You might also like\" (Shopify recommendations belong with line items).\n        body.querySelector('.cart-lines-stack')?.remove();\n        body.querySelector('.cart-reco')?.remove();\n        let emptyEl = body.querySelector('.cart-empty');\n        if (!emptyEl) {\n          emptyEl = document.createElement('div');\n          emptyEl.className = 'cart-empty cart-empty--commerce';\n          emptyEl.innerHTML = `\n            <p class=\"font-display cart-empty-title\">Your cart is empty</p>\n            <a href=\"${emptyHref}\" class=\"btn btn-outline cart-empty-actions\" data-cart-close>Continue shopping</a>`;\n          body.appendChild(emptyEl);\n        }\n        return cart;\n      }\n\n      // Surgical line update \u2014 do NOT wipe .cart-reco (prevents upsell reload flash on qty/remove).\n      body.querySelector('.cart-empty')?.remove();\n      const stack = ensureCartLinesStack(body);\n      stack.innerHTML = cart.items.map((item) => renderCartLineHtml(item, placeholderSrc)).join('');\n      setTimeout(markHeadlessCheckoutReady, 120);\n\n      if (keepUpsells) {\n        // Qty/remove: leave recommendations exactly as they are.\n        if (!existingReco && !body.querySelector('.cart-reco')) {\n          mountCartUpsells(body, cart, upsellHeading, placeholderSrc, token);\n        }\n      } else if (forceUpsells || lineSetChanged || !body.querySelector('.cart-reco')) {\n        mountCartUpsells(body, cart, upsellHeading, placeholderSrc, token);\n      }\n\n      enrichCartItemImages(cart).then((enriched) => {\n        if (token !== cartRefreshToken || !body.isConnected || !enriched || !enriched.items) return;\n        enriched.items.forEach((item) => {\n          const src = cartItemImage(item);\n          if (!src) return;\n          const line = Array.from(body.querySelectorAll('.cart-line')).find((el) => el.dataset.key === item.key);\n          const imageWrap = line && line.querySelector('.cart-line-image');\n          if (!imageWrap || imageWrap.querySelector('img')) return;\n          imageWrap.innerHTML = '<img src=\"' + escapeHtml(src) + '\" alt=\"' + escapeHtml(item.product_title || item.title) + '\" width=\"88\" height=\"88\" loading=\"lazy\" decoding=\"async\">';\n        });\n      }).catch(() => {});\n\n      return cart;\n    }\n\n    const pendingQtyDelta = new Map();\n\n    async function changeQty(key, delta) {\n      if (!key || !delta) return;\n      // Coalesce rapid +/- into one official change.js call (avoids lost clicks across re-render).\n      pendingQtyDelta.set(key, (pendingQtyDelta.get(key) || 0) + delta);\n      try {\n        setCartBusy(true);\n        await enqueueCartMutation(async () => {\n          const pending = pendingQtyDelta.get(key) || 0;\n          if (!pending) return;\n          pendingQtyDelta.set(key, 0);\n          const cart = await fetchCartJson();\n          const item = cart.items.find((i) => i.key === key);\n          if (!item) {\n            await refreshCart(cart, { refreshUpsells: false });\n            return;\n          }\n          const nextQty = Math.max(0, item.quantity + pending);\n          // Official change.js: id = line item key (recommended over variant id)\n          const updated = await shopifyCartChange({ id: key, quantity: nextQty });\n          // If more clicks landed during the request, loop once more in the same queue turn.\n          const again = pendingQtyDelta.get(key) || 0;\n          if (again) {\n            pendingQtyDelta.set(key, 0);\n            const live = isFullCart(updated) ? updated : await fetchCartJson();\n            const line = (live.items || []).find((i) => i.key === key);\n            if (line) {\n              const updated2 = await shopifyCartChange({ id: key, quantity: Math.max(0, line.quantity + again) });\n              await refreshCart(isFullCart(updated2) ? updated2 : null, { refreshUpsells: false });\n              return;\n            }\n          }\n          await refreshCart(isFullCart(updated) ? updated : null, { refreshUpsells: false });\n        });\n      } catch (err) {\n        pendingQtyDelta.delete(key);\n        showToast('Could not update cart', (err && err.message) || 'Please try again');\n        try { await refreshCart(null, { refreshUpsells: false }); } catch (__) {}\n      } finally {\n        setCartBusy(false);\n      }\n    }\n    async function removeLine(key) {\n      if (!key) return;\n      try {\n        setCartBusy(true);\n        await enqueueCartMutation(async () => {\n          const updated = await shopifyCartChange({ id: key, quantity: 0 });\n          // Keep upsells mounted \u2014 only lines/totals change.\n          await refreshCart(isFullCart(updated) ? updated : null, { refreshUpsells: false });\n        });\n      } catch (err) {\n        showToast('Could not remove item', (err && err.message) || 'Please try again');\n        try { await refreshCart(null, { refreshUpsells: false }); } catch (__) {}\n      } finally {\n        setCartBusy(false);\n      }\n    }\n\n    function shouldDeferToExternalCartApp() {\n      return (\n        (useEssentialCartDrawer() && essentialCartReady()) ||\n        (useVrindaCommerceCart() && vrindaCommerceCartReady()) ||\n        (useShiprocketSmartCart() && shiprocketSmartCartReady())\n      );\n    }\n\n    // Capture-phase delegated ATC: works for SSR + dynamically injected product forms.\n    // stopImmediatePropagation prevents leftover Essential embed listeners from fighting the theme.\n    if (document.documentElement.dataset.vrindaCartSubmitDelegated !== '1') {\n      document.documentElement.dataset.vrindaCartSubmitDelegated = '1';\n      document.addEventListener('submit', async (e) => {\n        const form = e.target && e.target.closest\n          ? e.target.closest('form[data-add-to-cart], form[action*=\"/cart/add\"]')\n          : null;\n        if (!form || form !== e.target) return;\n        if (shouldDeferToExternalCartApp()) return;\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        const submitBtn = form.querySelector('[type=\"submit\"]');\n        const defaultLabel = submitBtn?.textContent?.trim() || 'Add to cart';\n        if (submitBtn) {\n          submitBtn.disabled = true;\n          submitBtn.setAttribute('aria-busy', 'true');\n          submitBtn.setAttribute('aria-disabled', 'true');\n          submitBtn.textContent = 'Adding\u2026';\n        }\n        try {\n          let cartAfterAdd = null;\n          await enqueueCartMutation(async () => {\n            const fd = new FormData(form);\n            if (!fd.get('id')) throw new Error('Missing variant');\n            // add.js returns line items only \u2014 always follow with cart.js (proven Shopify flow).\n            await shopifyCartAdd(formDataToCartAddPayload(fd));\n            cartAfterAdd = await refreshCart(null, { refreshUpsells: true });\n          });\n          if (useEssentialCartDrawer()) {\n            await syncHeaderCartCount();\n            markEssentialCartActive();\n          } else if (useVrindaCommerceCart()) {\n            await syncHeaderCartCount();\n            if (!openVrindaCommerceCart()) queueVrindaCommerceCartOpen();\n          } else if (useShiprocketSmartCart()) {\n            await syncHeaderCartCount();\n            if (!openShiprocketSmartCart()) openCart({ refresh: false });\n          } else {\n            openCart({ refresh: false });\n            announceCart(cartAfterAdd && cartAfterAdd.item_count\n              ? 'Cart updated. ' + cartAfterAdd.item_count + ' item' + (cartAfterAdd.item_count === 1 ? '' : 's') + ' in cart.'\n              : 'Added to cart.');\n            const body = document.getElementById('cart-drawer-items');\n            if (body) body.scrollTop = 0;\n          }\n        } catch (err) {\n          const msg = (err && err.message) ? err.message : 'Please try again';\n          showToast('Could not add item', msg);\n        } finally {\n          if (submitBtn) {\n            submitBtn.disabled = false;\n            submitBtn.removeAttribute('aria-busy');\n            submitBtn.removeAttribute('aria-disabled');\n            submitBtn.textContent = defaultLabel;\n          }\n        }\n      }, true);\n    }\n    const bodyEl = document.getElementById('cart-drawer-items');\n    if (bodyEl) bindCartBodyActions(bodyEl);\n    fetchCartJson().then((cart) => {\n      updateCartCountDrawer(cart.item_count);\n      const displaySubtotal = cartDisplaySubtotal(cart);\n      updateShippingProgress(displaySubtotal);\n      // Keep SSR lines if count matches; still refresh to sync upsells / money format.\n      refreshCart(cart);\n    }).catch(() => {});\n    resetExternalCartState();\n    disableInactiveAppCartMarkup();\n    window.VrindaCart = {\n      open: openCart,\n      close: closeCart,\n      refresh: refreshCart,\n      add: addVariantToCart,\n    };\n    initShiprocketSmartCartRouting(openCart);\n  }\n\n  /* \u2500\u2500 Build Your Look studio \u2500\u2500 */\n  const studio = document.querySelector('[data-build-look]');\n  if (studio) {\n    const modelBtns = studio.querySelectorAll('[data-model]');\n    const modelImg = studio.querySelector('[data-studio-model-img]');\n    const jewelBtns = studio.querySelectorAll('[data-jewel]');\n    const jewelImg = studio.querySelector('[data-studio-jewel-img]');\n    const jewelName = studio.querySelector('[data-studio-jewel-name]');\n    const modelSrcs = [\n      studio.querySelector('[data-model=\"0\"] img')?.src,\n      studio.querySelector('[data-model=\"1\"] img')?.src,\n      studio.querySelector('[data-model=\"2\"] img')?.src,\n    ];\n    modelBtns.forEach((btn) => {\n      btn.addEventListener('click', () => {\n        modelBtns.forEach((b) => b.classList.remove('active'));\n        btn.classList.add('active');\n        const idx = parseInt(btn.dataset.model, 10);\n        if (modelImg && modelSrcs[idx]) modelImg.src = modelSrcs[idx];\n      });\n    });\n    jewelBtns.forEach((btn) => {\n      btn.addEventListener('click', () => {\n        jewelBtns.forEach((b) => b.classList.remove('active'));\n        btn.classList.add('active');\n        if (jewelImg) {\n          jewelImg.style.opacity = '0';\n          jewelImg.style.transform = 'scale(0.6)';\n          setTimeout(() => {\n            jewelImg.src = btn.dataset.img;\n            jewelImg.style.opacity = '1';\n            jewelImg.style.transform = 'scale(1)';\n          }, 150);\n        }\n        if (jewelName) jewelName.textContent = btn.dataset.name;\n      });\n    });\n  }\n\n  /* \u2500\u2500 Drop countdown (next Friday 8 PM IST) \u2500\u2500 */\n  function nextFriday8pmIST() {\n    const now = new Date();\n    const ist = new Date(now.toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }));\n    const day = ist.getDay();\n    let daysUntilFriday = (5 - day + 7) % 7;\n    if (daysUntilFriday === 0 && (ist.getHours() > 20 || (ist.getHours() === 20 && ist.getMinutes() >= 0))) daysUntilFriday = 7;\n    const target = new Date(ist);\n    target.setDate(ist.getDate() + daysUntilFriday);\n    target.setHours(20, 0, 0, 0);\n    return target;\n  }\n  /* Drop countdown: dormant unless [data-drop-countdown] exists on the page.\n     Keep off homepage for quiet luxury \u2014 no urgency timer by default. */\n  const countdown = document.querySelector('[data-drop-countdown]');\n  if (countdown) {\n    function tick() {\n      const target = nextFriday8pmIST();\n      const now = new Date(new Date().toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }));\n      let diff = Math.max(0, target - now);\n      const days = Math.floor(diff / 86400000); diff %= 86400000;\n      const hours = Math.floor(diff / 3600000); diff %= 3600000;\n      const mins = Math.floor(diff / 60000); diff %= 60000;\n      const secs = Math.floor(diff / 1000);\n      const pad = (n) => String(n).padStart(2, '0');\n      const d = countdown.querySelector('[data-days]');\n      const h = countdown.querySelector('[data-hours]');\n      const m = countdown.querySelector('[data-mins]');\n      const s = countdown.querySelector('[data-secs]');\n      if (d) d.textContent = pad(days);\n      if (h) h.textContent = pad(hours);\n      if (m) m.textContent = pad(mins);\n      if (s) s.textContent = pad(secs);\n    }\n    tick();\n    setInterval(tick, 1000);\n  }\n\n  document.querySelectorAll('[data-newsletter-scroll]').forEach((btn) => {\n    btn.addEventListener('click', () => {\n      document.getElementById('newsletter')?.scrollIntoView({ behavior: 'smooth' });\n    });\n  });\n\n  /* \u2500\u2500 Product carousel (featured collection) \u2500\u2500 */\n  document.querySelectorAll('[data-product-carousel]').forEach((root) => {\n    const viewport = root.querySelector('[data-product-carousel-viewport]');\n    const prev = root.querySelector('[data-product-carousel-prev]');\n    const next = root.querySelector('[data-product-carousel-next]');\n    if (!viewport) return;\n\n    function updateButtons() {\n      const maxScroll = viewport.scrollWidth - viewport.clientWidth;\n      const atStart = viewport.scrollLeft <= 4;\n      const atEnd = maxScroll <= 4 || viewport.scrollLeft >= maxScroll - 4;\n      if (prev) prev.disabled = atStart;\n      if (next) next.disabled = atEnd;\n    }\n\n    function scrollStep(direction) {\n      const card = viewport.querySelector('.product-card');\n      const styles = card ? getComputedStyle(viewport.querySelector('.product-carousel-track')) : null;\n      const gap = styles ? parseFloat(styles.gap) || 16 : 16;\n      const amount = (card?.offsetWidth || 240) + gap;\n      viewport.scrollBy({ left: direction * amount, behavior: 'smooth' });\n    }\n\n    prev?.addEventListener('click', () => scrollStep(-1));\n    next?.addEventListener('click', () => scrollStep(1));\n    viewport.addEventListener('scroll', updateButtons, { passive: true });\n    window.addEventListener('resize', updateButtons, { passive: true });\n    if ('ResizeObserver' in window) {\n      new ResizeObserver(updateButtons).observe(viewport);\n    }\n    updateButtons();\n  });\n\n  /* \u2500\u2500 Hero carousel \u2500\u2500 */\n  const heroCarousel = document.querySelector('[data-hero-carousel]');\n  if (heroCarousel) {\n    const slides = heroCarousel.querySelectorAll('[data-hero-slide]');\n    const dots = heroCarousel.querySelectorAll('[data-hero-dot]');\n    if (slides.length > 1) {\n      let current = 0;\n      let timer = null;\n      const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n      function goTo(index) {\n        current = (index + slides.length) % slides.length;\n        slides.forEach((slide, i) => {\n          const active = i === current;\n          slide.classList.toggle('is-active', active);\n          slide.setAttribute('aria-hidden', active ? 'false' : 'true');\n        });\n        dots.forEach((dot, i) => dot.classList.toggle('is-active', i === current));\n      }\n\n      function startAutoplay() {\n        if (reducedMotion) return;\n        stopAutoplay();\n        timer = setInterval(() => goTo(current + 1), 5000);\n      }\n      function stopAutoplay() {\n        if (timer) clearInterval(timer);\n        timer = null;\n      }\n\n      dots.forEach((dot) => {\n        dot.addEventListener('click', () => {\n          goTo(parseInt(dot.dataset.heroDot, 10));\n          startAutoplay();\n        });\n      });\n      heroCarousel.addEventListener('mouseenter', stopAutoplay);\n      heroCarousel.addEventListener('mouseleave', startAutoplay);\n      startAutoplay();\n    }\n  }\n\n\n  function showToast(title, desc) {\n    let toast = document.getElementById('vrinda-toast');\n    if (!toast) {\n      toast = document.createElement('div');\n      toast.id = 'vrinda-toast';\n      toast.className = 'vrinda-toast';\n      toast.setAttribute('role', 'status');\n      toast.setAttribute('aria-live', 'polite');\n      toast.setAttribute('aria-atomic', 'true');\n      document.body.appendChild(toast);\n    }\n    const safeTitle = String(title == null ? '' : title)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;');\n    const safeDesc = String(desc == null ? '' : desc)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;');\n    toast.innerHTML = '<strong>' + safeTitle + '</strong>'\n      + (safeDesc\n        ? '<br><span class=\"vrinda-toast__desc\">' + safeDesc + '</span>'\n        : '');\n    toast.classList.add('show');\n    clearTimeout(showToast._timer);\n    showToast._timer = setTimeout(() => toast.classList.remove('show'), 3200);\n  }\n  window.VrindaToast = showToast;\n\n  /* \u2500\u2500 Try-on dialog (Mirror Mode) \u2500\u2500 */\n  const tryOnOverlay = document.getElementById('try-on-overlay');\n  if (tryOnOverlay) {\n    const video = document.getElementById('try-on-video');\n    const stage = document.getElementById('try-on-stage');\n    const overlaysEl = document.getElementById('try-on-overlays');\n    const loadingEl = document.getElementById('try-on-loading');\n    const errorEl = document.getElementById('try-on-error');\n    const toolbar = document.getElementById('try-on-toolbar');\n    const snapshotWrap = document.getElementById('try-on-snapshot-wrap');\n    const snapshotImg = document.getElementById('try-on-snapshot');\n    const saveBtn = document.getElementById('try-on-save');\n    let stream = null;\n    let facingMode = 'user';\n    let overlays = [];\n    let activeId = null;\n    let drag = null;\n    let lastSnapshot = null;\n\n    function openTryOn(pieceId) {\n      tryOnOverlay.classList.add('open');\n      document.body.style.overflow = 'hidden';\n      overlays = [];\n      activeId = null;\n      renderOverlays();\n      startCamera();\n      if (pieceId) {\n        const btn = document.querySelector('[data-piece-id=\"' + pieceId + '\"]');\n        if (btn) addPiece(btn);\n      } else {\n        const first = document.querySelector('.try-on-piece-btn');\n        if (first) addPiece(first);\n      }\n    }\n    function closeTryOn() {\n      tryOnOverlay.classList.remove('open');\n      document.body.style.overflow = '';\n      stopCamera();\n      overlays = [];\n      activeId = null;\n      renderOverlays();\n      if (snapshotWrap) snapshotWrap.hidden = true;\n      if (saveBtn) saveBtn.hidden = true;\n      lastSnapshot = null;\n    }\n    async function startCamera() {\n      if (loadingEl) loadingEl.hidden = false;\n      if (errorEl) errorEl.hidden = true;\n      try {\n        stopCamera();\n        stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode, width: { ideal: 1280 }, height: { ideal: 720 } }, audio: false });\n        if (video) {\n          video.srcObject = stream;\n          video.classList.toggle('mirror', facingMode === 'user');\n          await video.play().catch(() => {});\n        }\n        if (loadingEl) loadingEl.hidden = true;\n      } catch (e) {\n        if (loadingEl) loadingEl.hidden = true;\n        if (errorEl) {\n          errorEl.hidden = false;\n          errorEl.innerHTML = '<div><p class=\"try-on-error-icon\">' + iconSvg('camera', 24) + '</p><p>' + (e.message || 'Camera access denied') + '</p><p class=\"try-on-error-hint\">Allow camera in browser settings and reload.</p></div>';\n        }\n      }\n    }\n    function stopCamera() {\n      stream?.getTracks().forEach((t) => t.stop());\n      stream = null;\n      if (video) video.srcObject = null;\n    }\n    function addPiece(btn) {\n      const w = stage?.clientWidth || 400;\n      const h = stage?.clientHeight || 600;\n      const id = btn.dataset.pieceId + '-' + Date.now();\n      overlays.push({ id, name: btn.dataset.pieceName, img: btn.dataset.pieceImg, x: w / 2, y: h / 2, scale: 1, rotation: 0 });\n      activeId = id;\n      renderOverlays();\n    }\n    function renderOverlays() {\n      if (!overlaysEl) return;\n      overlaysEl.innerHTML = overlays.map((o) =>\n        '<div class=\"try-on-overlay-item' + (o.id === activeId ? ' active' : '') + '\" data-id=\"' + o.id + '\" style=\"left:' + o.x + 'px;top:' + o.y + 'px;width:' + (140 * o.scale) + 'px;height:' + (140 * o.scale) + 'px;transform:translate(-50%,-50%) rotate(' + o.rotation + 'deg)\">' +\n        '<img src=\"' + o.img + '\" alt=\"' + o.name + '\"></div>'\n      ).join('');\n      overlaysEl.querySelectorAll('.try-on-overlay-item').forEach((el) => {\n        el.addEventListener('pointerdown', (e) => {\n          e.stopPropagation();\n          activeId = el.dataset.id;\n          const o = overlays.find((x) => x.id === activeId);\n          if (!o) return;\n          drag = { id: activeId, sx: e.clientX, sy: e.clientY, ox: o.x, oy: o.y };\n          el.setPointerCapture(e.pointerId);\n          renderOverlays();\n        });\n      });\n      if (toolbar) toolbar.hidden = !activeId;\n    }\n    stage?.addEventListener('pointermove', (e) => {\n      if (!drag) return;\n      overlays = overlays.map((o) => o.id === drag.id ? { ...o, x: drag.ox + (e.clientX - drag.sx), y: drag.oy + (e.clientY - drag.sy) } : o);\n      renderOverlays();\n    });\n    stage?.addEventListener('pointerup', () => { drag = null; });\n    stage?.addEventListener('click', () => { activeId = null; renderOverlays(); });\n    function updateActive(patch) {\n      overlays = overlays.map((o) => o.id === activeId ? { ...o, ...patch } : o);\n      renderOverlays();\n    }\n    document.querySelector('[data-try-on-zoom-out]')?.addEventListener('click', () => {\n      const o = overlays.find((x) => x.id === activeId);\n      if (o) updateActive({ scale: Math.max(0.3, o.scale - 0.1) });\n    });\n    document.querySelector('[data-try-on-zoom-in]')?.addEventListener('click', () => {\n      const o = overlays.find((x) => x.id === activeId);\n      if (o) updateActive({ scale: Math.min(3, o.scale + 0.1) });\n    });\n    document.querySelector('[data-try-on-rotate]')?.addEventListener('click', () => {\n      const o = overlays.find((x) => x.id === activeId);\n      if (o) updateActive({ rotation: o.rotation + 15 });\n    });\n    document.querySelector('[data-try-on-remove]')?.addEventListener('click', () => {\n      overlays = overlays.filter((o) => o.id !== activeId);\n      activeId = null;\n      renderOverlays();\n    });\n    document.querySelector('[data-try-on-flip]')?.addEventListener('click', () => {\n      facingMode = facingMode === 'user' ? 'environment' : 'user';\n      startCamera();\n    });\n    document.querySelector('[data-try-on-capture]')?.addEventListener('click', async () => {\n      if (!video || !stage) return;\n      const sw = stage.clientWidth, sh = stage.clientHeight;\n      const canvas = document.createElement('canvas');\n      canvas.width = sw; canvas.height = sh;\n      const ctx = canvas.getContext('2d');\n      ctx.save();\n      if (facingMode === 'user') { ctx.translate(sw, 0); ctx.scale(-1, 1); }\n      const vw = video.videoWidth, vh = video.videoHeight;\n      if (vw && vh) {\n        const scale = Math.max(sw / vw, sh / vh);\n        ctx.drawImage(video, (sw - vw * scale) / 2, (sh - vh * scale) / 2, vw * scale, vh * scale);\n      }\n      ctx.restore();\n      await Promise.all(overlays.map((o) => new Promise((res) => {\n        const img = new Image();\n        img.onload = () => res({ o, img });\n        img.onerror = () => res({ o, img });\n        img.src = o.img;\n      }))).then((items) => {\n        items.forEach(({ o, img }) => {\n          const size = 140 * o.scale;\n          ctx.save();\n          ctx.translate(o.x, o.y);\n          ctx.rotate((o.rotation * Math.PI) / 180);\n          ctx.drawImage(img, -size / 2, -size / 2, size, size);\n          ctx.restore();\n        });\n        lastSnapshot = canvas.toDataURL('image/jpeg', 0.9);\n        if (snapshotImg) snapshotImg.src = lastSnapshot;\n        if (snapshotWrap) snapshotWrap.hidden = false;\n        if (saveBtn) saveBtn.hidden = false;\n      });\n    });\n    saveBtn?.addEventListener('click', () => {\n      if (!lastSnapshot) return;\n      const a = document.createElement('a');\n      a.href = lastSnapshot;\n      a.download = 'vrindaaddons-tryon-' + Date.now() + '.jpg';\n      a.click();\n    });\n    document.querySelectorAll('[data-try-on-open]').forEach((btn) => btn.addEventListener('click', () => openTryOn('jhumka')));\n    document.querySelectorAll('.try-on-piece-btn').forEach((btn) => btn.addEventListener('click', () => addPiece(btn)));\n    document.querySelectorAll('[data-try-on-close]').forEach((btn) => btn.addEventListener('click', closeTryOn));\n    tryOnOverlay.addEventListener('click', (e) => { if (e.target === tryOnOverlay) closeTryOn(); });\n  }\n\n  /* \u2500\u2500 First-party shoppable reels (Quinn replacement) \u2500\u2500 */\n  function initVrindaReels() {\n    const sections = document.querySelectorAll('[data-vrinda-reels]');\n    if (!sections.length) return;\n\n    function escapeReelHtml(value) {\n      return String(value == null ? '' : value)\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&#39;');\n    }\n\n    function formatReelCaption(raw) {\n      const text = String(raw || '')\n        .replace(/\\r/g, '')\n        .split('\\n')\n        .map((line) => line.trim())\n        .filter(Boolean)\n        .filter((line) => !/^#\\S+$/.test(line) && !/^\\.+$/.test(line))\n        .join(' ');\n      return text.replace(/\\s+/g, ' ').trim().slice(0, 160);\n    }\n\n    function safeProductHref(url) {\n      const raw = String(url || '').trim();\n      if (!raw || raw === '#') return '';\n      try {\n        if (raw.startsWith('/')) {\n          // Same-origin product/collection paths only (Shopify storefront).\n          if (/^\\/(products|collections|pages)\\//i.test(raw)) return raw.split('#')[0];\n          return '';\n        }\n        const parsed = new URL(raw, window.location.origin);\n        if (parsed.origin !== window.location.origin) return '';\n        if (!/^\\/(products|collections|pages)\\//i.test(parsed.pathname)) return '';\n        return parsed.pathname + parsed.search;\n      } catch (_) {\n        return '';\n      }\n    }\n\n    async function addReelVariant(variantId, button, productTitle) {\n      const id = Number(variantId);\n      if (!Number.isFinite(id) || id <= 0) return;\n      if (button) {\n        button.disabled = true;\n        button.classList.add('is-busy');\n      }\n      const label = productTitle\n        ? String(productTitle).trim().slice(0, 80)\n        : 'Product added from shoppable video';\n      try {\n        // Official Shopify Ajax Cart API \u2014 add.js then cart.js.\n        // Do NOT open the cart drawer from reels; keep shopping in the player.\n        await enqueueCartMutation(async () => {\n          await shopifyCartAdd({ id, quantity: 1 });\n          const cart = await fetchCartJson();\n          updateCartCount(cart.item_count);\n          dispatchCartUpdate(cart);\n          // Quietly sync drawer DOM in background (no open).\n          if (window.VrindaCart && typeof window.VrindaCart.refresh === 'function') {\n            try {\n              await window.VrindaCart.refresh(cart, { refreshUpsells: false });\n            } catch (_) {\n              /* ignore background refresh errors */\n            }\n          }\n        });\n        showToast('Added to cart', label);\n      } catch (err) {\n        showToast('Could not add item', (err && err.message) || 'Please try again');\n      } finally {\n        if (button) {\n          button.disabled = false;\n          button.classList.remove('is-busy');\n        }\n      }\n    }\n\n    sections.forEach((section) => {\n      const cards = [...section.querySelectorAll('[data-reel-card]')];\n      if (!cards.length) return;\n\n      const viewport = section.querySelector('[data-reels-viewport]');\n      const railPrev = section.querySelector('[data-reels-rail-prev]');\n      const railNext = section.querySelector('[data-reels-rail-next]');\n      const player = section.querySelector('[data-reels-player]');\n      const stageVideo = section.querySelector('[data-reel-stage-video]');\n      const stageCaption = section.querySelector('[data-reel-stage-caption]');\n      const stageProducts = section.querySelector('[data-reel-stage-products]');\n      const shopSheet = section.querySelector('[data-reel-shop]');\n      const shopMedia = section.querySelector('[data-reel-shop-media]');\n      const shopTitle = section.querySelector('[data-reel-shop-title]');\n      const shopPrice = section.querySelector('[data-reel-shop-price]');\n      const shopAdd = section.querySelector('[data-reel-shop-add]');\n      const shopMore = section.querySelector('[data-reel-shop-more]');\n      const muteBtn = section.querySelector('[data-reel-mute]');\n      const muteLabel = section.querySelector('[data-mute-label]');\n      const prevBtn = section.querySelector('[data-reel-prev]');\n      const nextBtn = section.querySelector('[data-reel-next]');\n      if (!player || !stageVideo) return;\n\n      let activeIndex = -1;\n      let focusReturn = null;\n      let muted = true;\n      let activeShopProduct = null;\n\n      function closeShopSheet() {\n        if (!shopSheet) return;\n        shopSheet.hidden = true;\n        shopSheet.setAttribute('aria-hidden', 'true');\n        activeShopProduct = null;\n      }\n\n      function openShopSheet(product) {\n        if (!shopSheet || !product) return;\n        activeShopProduct = product;\n        const href = safeProductHref(product.url);\n        const available = product.available !== false && product.variantId;\n        if (shopTitle) shopTitle.textContent = product.title || 'Product';\n        if (shopPrice) shopPrice.textContent = product.price || '';\n        if (shopMedia) {\n          if (product.image) {\n            shopMedia.innerHTML = `<img src=\"${escapeReelHtml(product.image)}\" alt=\"\" width=\"360\" height=\"480\" loading=\"lazy\" decoding=\"async\">`;\n          } else {\n            shopMedia.innerHTML = '';\n          }\n        }\n        if (shopAdd) {\n          shopAdd.dataset.variantId = String(product.variantId || '');\n          shopAdd.dataset.productTitle = product.title || '';\n          shopAdd.disabled = !available;\n          shopAdd.textContent = available ? 'Add to cart' : 'Sold out';\n        }\n        if (shopMore) {\n          if (href) {\n            shopMore.href = href;\n            shopMore.hidden = false;\n          } else {\n            shopMore.href = '#';\n            shopMore.hidden = true;\n          }\n        }\n        shopSheet.hidden = false;\n        shopSheet.setAttribute('aria-hidden', 'false');\n        section.querySelector('[data-reel-shop-close]')?.focus?.();\n      }\n\n      function syncRailNav() {\n        if (!viewport || (!railPrev && !railNext)) return;\n        const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth - 4);\n        if (railPrev) railPrev.disabled = viewport.scrollLeft <= 4;\n        if (railNext) railNext.disabled = viewport.scrollLeft >= max;\n      }\n\n      function scrollRail(direction) {\n        if (!viewport) return;\n        const amount = Math.max(220, Math.round(viewport.clientWidth * 0.8));\n        viewport.scrollBy({ left: direction * amount, behavior: 'smooth' });\n      }\n\n      if (viewport) {\n        viewport.addEventListener('scroll', syncRailNav, { passive: true });\n        window.addEventListener('resize', syncRailNav);\n        syncRailNav();\n      }\n      railPrev?.addEventListener('click', () => scrollRail(-1));\n      railNext?.addEventListener('click', () => scrollRail(1));\n\n      function parseProducts(card) {\n        const script = card.querySelector('[data-reel-products]');\n        if (!script) return [];\n        try {\n          const data = JSON.parse(script.textContent || '[]');\n          return Array.isArray(data) ? data.filter((p) => p && (p.variantId || p.title)) : [];\n        } catch (_) {\n          return [];\n        }\n      }\n\n      function ensurePreviewSource(video) {\n        if (!video) return;\n        const source = video.querySelector('source[data-src]');\n        if (source && !source.getAttribute('src')) {\n          source.setAttribute('src', source.getAttribute('data-src'));\n          video.load();\n        }\n      }\n\n      const previewObserver = ('IntersectionObserver' in window)\n        ? new IntersectionObserver((entries) => {\n          entries.forEach((entry) => {\n            const card = entry.target.closest('[data-reel-card]');\n            const video = entry.target;\n            if (!card || !video) return;\n            if (entry.isIntersecting && entry.intersectionRatio >= 0.55) {\n              ensurePreviewSource(video);\n              video.muted = true;\n              const playPromise = video.play();\n              if (playPromise && typeof playPromise.catch === 'function') playPromise.catch(() => {});\n              card.classList.add('is-playing');\n            } else {\n              video.pause();\n              card.classList.remove('is-playing');\n            }\n          });\n        }, { threshold: [0, 0.55, 1], rootMargin: '0px' })\n        : null;\n\n      cards.forEach((card) => {\n        const preview = card.querySelector('[data-reel-preview]');\n        if (preview && previewObserver) previewObserver.observe(preview);\n        card.querySelector('[data-reel-open]')?.addEventListener('click', () => {\n          openAt(Number(card.dataset.reelIndex) || 0);\n        });\n      });\n\n      function renderProducts(products) {\n        if (!stageProducts) return;\n        if (!products.length) {\n          stageProducts.innerHTML = '';\n          stageProducts.hidden = true;\n          stageProducts._reelProducts = [];\n          return;\n        }\n        stageProducts.hidden = false;\n        stageProducts._reelProducts = products;\n        stageProducts.innerHTML = products.map((product, idx) => {\n          const available = product.available !== false && product.variantId;\n          const img = product.image\n            ? `<img class=\"vrinda-reels-product__image\" src=\"${escapeReelHtml(product.image)}\" alt=\"\" width=\"54\" height=\"54\" loading=\"lazy\" decoding=\"async\">`\n            : '<span class=\"vrinda-reels-product__image vrinda-reels-product__image--empty\" aria-hidden=\"true\"></span>';\n          return `\n            <div class=\"vrinda-reels-player__product\" data-product-index=\"${idx}\" data-product-title=\"${escapeReelHtml(product.title || '')}\">\n              <button type=\"button\" class=\"vrinda-reels-product__info\" data-reel-product-open data-product-index=\"${idx}\" aria-label=\"Shop ${escapeReelHtml(product.title || 'product')}\">\n                ${img}\n                <div class=\"vrinda-reels-product__meta\">\n                  <span class=\"vrinda-reels-product__title\">${escapeReelHtml(product.title || 'Product')}</span>\n                  <p class=\"vrinda-reels-product__price\">${escapeReelHtml(product.price || '')}</p>\n                </div>\n              </button>\n              <button\n                type=\"button\"\n                class=\"vrinda-reels-product__add\"\n                data-reel-add\n                data-variant-id=\"${escapeReelHtml(String(product.variantId || ''))}\"\n                data-product-title=\"${escapeReelHtml(product.title || '')}\"\n                ${available ? '' : 'disabled'}\n              >${available ? 'Add to cart' : 'Sold out'}</button>\n            </div>`;\n        }).join('');\n      }\n\n      function syncMuteUi() {\n        stageVideo.muted = muted;\n        if (muteLabel) muteLabel.textContent = muted ? 'Unmute' : 'Mute';\n        if (muteBtn) muteBtn.setAttribute('aria-label', muted ? 'Unmute' : 'Mute');\n      }\n\n      function loadStage(index) {\n        const card = cards[index];\n        if (!card) return;\n        activeIndex = index;\n        const src = card.dataset.videoSrc || '';\n        stageVideo.pause();\n        stageVideo.removeAttribute('src');\n        while (stageVideo.firstChild) stageVideo.removeChild(stageVideo.firstChild);\n        if (src) {\n          const source = document.createElement('source');\n          source.src = src;\n          source.type = 'video/mp4';\n          stageVideo.appendChild(source);\n        }\n        stageVideo.load();\n        syncMuteUi();\n        const playPromise = stageVideo.play();\n        if (playPromise && typeof playPromise.catch === 'function') playPromise.catch(() => {});\n        closeShopSheet();\n        // Nestasia / Quinn pattern: captions stay off the shop UI \u2014 products only.\n        if (stageCaption) {\n          stageCaption.hidden = true;\n          stageCaption.textContent = '';\n        }\n        renderProducts(parseProducts(card));\n        if (prevBtn) prevBtn.hidden = cards.length < 2;\n        if (nextBtn) nextBtn.hidden = cards.length < 2;\n      }\n\n      function openAt(index) {\n        focusReturn = document.activeElement;\n        cards.forEach((card) => {\n          const preview = card.querySelector('[data-reel-preview]');\n          if (preview) preview.pause();\n          card.classList.remove('is-playing');\n        });\n        player.hidden = false;\n        player.setAttribute('aria-hidden', 'false');\n        document.body.classList.add('vrinda-reels-open');\n        loadStage(index);\n        section.querySelector('[data-reel-close]')?.focus?.();\n      }\n\n      function closePlayer() {\n        closeShopSheet();\n        stageVideo.pause();\n        stageVideo.removeAttribute('src');\n        while (stageVideo.firstChild) stageVideo.removeChild(stageVideo.firstChild);\n        player.hidden = true;\n        player.setAttribute('aria-hidden', 'true');\n        document.body.classList.remove('vrinda-reels-open');\n        activeIndex = -1;\n        if (focusReturn && typeof focusReturn.focus === 'function') {\n          try { focusReturn.focus(); } catch (_) {}\n        }\n        focusReturn = null;\n      }\n\n      function step(delta) {\n        if (cards.length < 2 || activeIndex < 0) return;\n        const next = (activeIndex + delta + cards.length) % cards.length;\n        loadStage(next);\n      }\n\n      section.querySelectorAll('[data-reel-close]').forEach((el) => {\n        el.addEventListener('click', closePlayer);\n      });\n      prevBtn?.addEventListener('click', () => step(-1));\n      nextBtn?.addEventListener('click', () => step(1));\n      muteBtn?.addEventListener('click', () => {\n        muted = !muted;\n        syncMuteUi();\n      });\n      stageProducts?.addEventListener('click', (e) => {\n        const openInfo = e.target.closest('[data-reel-product-open]');\n        if (openInfo) {\n          e.preventDefault();\n          e.stopPropagation();\n          const idx = Number(openInfo.dataset.productIndex);\n          const list = stageProducts._reelProducts || [];\n          if (Number.isFinite(idx) && list[idx]) openShopSheet(list[idx]);\n          return;\n        }\n        const btn = e.target.closest('[data-reel-add]');\n        if (!btn) return;\n        e.preventDefault();\n        e.stopPropagation();\n        addReelVariant(\n          btn.dataset.variantId,\n          btn,\n          btn.dataset.productTitle || btn.closest('[data-product-title]')?.dataset.productTitle || '',\n        );\n      });\n\n      shopSheet?.addEventListener('click', (e) => {\n        if (e.target === shopSheet) {\n          closeShopSheet();\n          return;\n        }\n        if (e.target.closest('[data-reel-shop-close]')) {\n          e.preventDefault();\n          closeShopSheet();\n          return;\n        }\n        const addBtn = e.target.closest('[data-reel-shop-add]');\n        if (addBtn) {\n          e.preventDefault();\n          addReelVariant(\n            addBtn.dataset.variantId,\n            addBtn,\n            addBtn.dataset.productTitle || activeShopProduct?.title || '',\n          );\n        }\n      });\n\n      document.addEventListener('keydown', (e) => {\n        if (player.hidden) return;\n        if (e.key === 'Escape') {\n          if (shopSheet && !shopSheet.hidden) {\n            closeShopSheet();\n            return;\n          }\n          closePlayer();\n        }\n        if (e.key === 'ArrowLeft') step(-1);\n        if (e.key === 'ArrowRight') step(1);\n      });\n\n      let touchStartX = 0;\n      stageVideo.addEventListener('touchstart', (e) => {\n        touchStartX = e.changedTouches?.[0]?.clientX || 0;\n      }, { passive: true });\n      stageVideo.addEventListener('touchend', (e) => {\n        const x = e.changedTouches?.[0]?.clientX || 0;\n        const dx = x - touchStartX;\n        if (Math.abs(dx) < 48) return;\n        step(dx < 0 ? 1 : -1);\n      }, { passive: true });\n    });\n  }\n\n  initVrindaReels();\n})();\n\n// Scroll animations via IntersectionObserver\n(function initAOS() {\n  if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n  var els = document.querySelectorAll('[data-aos]');\n  if (!els.length) return;\n  var observer = new IntersectionObserver(function(entries) {\n    entries.forEach(function(entry) {\n      if (entry.isIntersecting) {\n        entry.target.classList.add('aos-animate');\n        observer.unobserve(entry.target);\n      }\n    });\n  }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });\n  els.forEach(function(el) { observer.observe(el); });\n})();\n\n// VrindaAddons \u2014 Shiprocket Checkout + Shopify Customer Accounts\n\n"],
  "mappings": "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",
  "names": ["drawer", "overlay", "setMenuOpen", "item", "sellingPlan", "ensureNativeDrawerVisible", "announceCart", "getFocusableInDrawer", "enableCartFocusTrap", "disableCartFocusTrap", "openCart", "closeCart", "updateCartCountDrawer", "normalizeImageUrl", "resolveMediaUrl", "cartItemImage", "productHandleFromCartItem", "escapeHtml", "centsFromProduct", "firstAvailableVariant", "productImageUrl", "cartDisplaySubtotal", "setCartFooterVisible", "setCartBusy", "syncCartSummary", "renderUpsellSection", "bindCartBodyActions", "renderCartLineHtml", "cartLineSignature", "mountCartUpsells", "ensureCartLinesStack", "shouldDeferToExternalCartApp", "tick", "goTo", "startAutoplay", "stopAutoplay", "openTryOn", "renderOverlays", "addPiece", "closeTryOn", "stopCamera", "updateActive"]
}
