{
  "version": 3,
  "sources": ["/cdn/shop/t/10/assets/theme.js?cb=20260909-pincode-fix"],
  "sourcesContent": ["/* ============================================================\n   MISFIT \u2014 Theme JavaScript\n   ============================================================ */\n\n(function () {\n  'use strict';\n\n  function initCROMetrics() {\n    if (window.__misfitCRO) return window.__misfitCRO;\n\n    window.dataLayer = window.dataLayer || [];\n\n    window.__misfitCRO = {\n      version: '1.0.0',\n      counters: {},\n      events: [],\n      record: function (name, payload) {\n        var detail = {\n          name: name,\n          payload: payload || {},\n          path: window.location.pathname,\n          ts: Date.now()\n        };\n        this.counters[name] = (this.counters[name] || 0) + 1;\n        this.events.push(detail);\n        if (this.events.length > 100) this.events.shift();\n        window.dataLayer.push(Object.assign({ event: 'misfit_' + name }, detail.payload, {\n          misfit_event: name,\n          misfit_path: detail.path\n        }));\n        window.dispatchEvent(new CustomEvent('misfit:metric', { detail: detail }));\n        return detail;\n      }\n    };\n\n    document.addEventListener('click', function (e) {\n      const heroLink = e.target.closest('.hero-actions a');\n      if (heroLink) {\n        trackMetric('hero_cta_click', {\n          label: heroLink.textContent.trim(),\n          href: heroLink.getAttribute('href') || ''\n        });\n      }\n\n      const checkoutLink = e.target.closest('a[href*=\"/checkout\"]');\n      if (checkoutLink) {\n        trackMetric('checkout_click', {\n          href: checkoutLink.getAttribute('href') || '',\n          context: checkoutLink.closest('.cart-drawer') ? 'cart_drawer' : checkoutLink.closest('.cart-summary') ? 'cart_page' : 'site'\n        });\n      }\n\n      const productCardLink = e.target.closest('.prod-card a[href]');\n      if (productCardLink) {\n        trackMetric('product_card_click', {\n          href: productCardLink.getAttribute('href') || ''\n        });\n      }\n    });\n\n    return window.__misfitCRO;\n  }\n\n  function trackMetric(name, payload) {\n    try {\n      initCROMetrics().record(name, payload);\n    } catch (err) { /* noop */ }\n  }\n\n  function initTiltMotion() {\n    if (window.matchMedia('(pointer: coarse)').matches || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n    var targets = document.querySelectorAll('[data-tilt]');\n    if (!targets.length) return;\n\n    var motionScale = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--site-motion')) || 1;\n\n    targets.forEach(function (el) {\n      if (el.dataset.tiltInit) return;\n      el.dataset.tiltInit = 'true';\n      var strength = (parseFloat(el.dataset.tiltStrength || '6') || 6) * motionScale;\n      var active = false;\n      var rafId = null;\n      var lastX = 0;\n      var lastY = 0;\n\n      function applyTilt() {\n        rafId = null;\n        if (!active) return;\n        var rect = el.getBoundingClientRect();\n        var px = rect.width ? (lastX - rect.left) / rect.width : 0.5;\n        var py = rect.height ? (lastY - rect.top) / rect.height : 0.5;\n        var rotateY = (px - 0.5) * strength * 2;\n        var rotateX = (0.5 - py) * strength * 2;\n        el.style.transform = 'translateY(-8px) rotateX(' + rotateX.toFixed(2) + 'deg) rotateY(' + rotateY.toFixed(2) + 'deg)';\n      }\n\n      el.addEventListener('pointerenter', function (e) {\n        active = true;\n        lastX = e.clientX;\n        lastY = e.clientY;\n        if (!rafId) rafId = requestAnimationFrame(applyTilt);\n      });\n\n      el.addEventListener('pointermove', function (e) {\n        if (!active) return;\n        lastX = e.clientX;\n        lastY = e.clientY;\n        if (!rafId) rafId = requestAnimationFrame(applyTilt);\n      });\n\n      el.addEventListener('pointerleave', function () {\n        active = false;\n        if (rafId) cancelAnimationFrame(rafId);\n        rafId = null;\n        el.style.transform = '';\n      });\n    });\n  }\n\n  function updateShippingProgress(cart, bogoSavings) {\n    if (!cart) return;\n    bogoSavings = bogoSavings || 0;\n    const grossTotal = cart.original_total_price || cart.total_price || 0;\n    const hasNativeDiscount = (cart.total_discount > 0) || (cart.original_total_price && cart.original_total_price > cart.total_price);\n    const netTotal = hasNativeDiscount ? cart.total_price : Math.max(0, grossTotal - bogoSavings);\n    const threshold = window.__MISFIT_FREE_SHIP_THRESHOLD || 159900;\n    const isFreeShipping = netTotal >= threshold;\n    const deliveryFeePaise = isFreeShipping ? 0 : 6000;\n    const estimatedTotal = netTotal + deliveryFeePaise;\n    const remainingPaise = Math.max(threshold - netTotal, 0);\n    const percent = threshold > 0 ? Math.min(100, Math.round((netTotal / threshold) * 100)) : 100;\n    const text = isFreeShipping ? '\uD83C\uDF89 You unlocked FREE Shipping!' : 'Shop <strong>' + fmtMoney(remainingPaise) + '</strong> more for <strong>FREE Shipping!</strong>';\n\n    document.querySelectorAll('[data-shipping-progress]').forEach(function (block) {\n      const textEl = block.querySelector('[data-shipping-progress-text]');\n      const fillEl = block.querySelector('[data-shipping-progress-fill]');\n      if (textEl) textEl.innerHTML = text;\n      if (fillEl) fillEl.style.width = percent + '%';\n      block.dataset.shippingState = isFreeShipping ? 'complete' : 'active';\n    });\n\n    const drawerShippingEl = document.querySelector('[data-cart-shipping-val]');\n    if (drawerShippingEl) {\n      drawerShippingEl.innerHTML = isFreeShipping ? '<strong style=\"color:#10b981;\">FREE</strong>' : fmtMoney(deliveryFeePaise);\n    }\n    const drawerTotalEl = document.querySelector('[data-cart-total-val]');\n    if (drawerTotalEl) {\n      drawerTotalEl.textContent = fmtMoney(estimatedTotal);\n    }\n\n    const cartPageShippingEl = document.querySelector('[data-cart-page-shipping]');\n    if (cartPageShippingEl) {\n      cartPageShippingEl.innerHTML = isFreeShipping ? '<strong style=\"color:#10b981;\">FREE</strong>' : fmtMoney(deliveryFeePaise);\n    }\n    const cartPageTotalEl = document.querySelector('[data-cart-page-total]');\n    if (cartPageTotalEl) {\n      cartPageTotalEl.textContent = fmtMoney(estimatedTotal);\n    }\n  }\n\n\n  // ---- BOGO CONFETTI ----\n  function fireBogoConfetti(targetWrap) {\n    var wraps = targetWrap ? [targetWrap] : Array.from(document.querySelectorAll('#bogo-confetti-wrap, #bogo-confetti-wrap-page, .cart-bogo-confetti-wrap'));\n    wraps.forEach(function (wrap) {\n      if (!wrap) return;\n      var canvas = document.createElement('canvas');\n      canvas.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;border-radius:inherit;z-index:0;';\n      wrap.appendChild(canvas);\n      var W = wrap.offsetWidth || 320;\n      var H = wrap.offsetHeight || 90;\n      canvas.width = W;\n      canvas.height = H;\n      var ctx = canvas.getContext('2d');\n      var colors = ['#FF3E6C','#FFD700','#10b981','#FF6B00','#a855f7','#3b82f6','#f472b6','#facc15'];\n      var particles = [];\n      for (var j = 0; j < 70; j++) {\n        particles.push({\n          x: Math.random() * W,\n          y: -10 + Math.random() * H * 0.4,\n          w: 5 + Math.random() * 7,\n          h: 3 + Math.random() * 4,\n          color: colors[Math.floor(Math.random() * colors.length)],\n          vy: 1.0 + Math.random() * 2.4,\n          vx: -1.2 + Math.random() * 2.4,\n          angle: Math.random() * 360,\n          spin: -2.5 + Math.random() * 5,\n          life: 1.0\n        });\n      }\n      var raf;\n      function draw() {\n        ctx.clearRect(0, 0, W, H);\n        var alive = false;\n        particles.forEach(function (p) {\n          if (p.life <= 0) return;\n          alive = true;\n          p.y += p.vy; p.x += p.vx;\n          p.angle += p.spin; p.life -= 0.016;\n          ctx.save();\n          ctx.globalAlpha = Math.max(0, p.life);\n          ctx.translate(p.x, p.y);\n          ctx.rotate(p.angle * Math.PI / 180);\n          ctx.fillStyle = p.color;\n          ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h);\n          ctx.restore();\n        });\n        if (alive) { raf = requestAnimationFrame(draw); }\n        else { canvas.remove(); }\n      }\n      draw();\n      setTimeout(function () { cancelAnimationFrame(raf); if (canvas.parentNode) canvas.remove(); }, 4000);\n    });\n  }\n\n  // ---- HEADER: solid on all pages ----\n  function initHeader() {\n    const header = document.getElementById('site-header');\n    if (!header) return;\n    header.classList.remove('is-transparent');\n    header.classList.add('is-solid');\n  }\n\n  // ---- MOBILE MENU ----\n  function initMobileMenu() {\n    const btn = document.querySelector('.hamburger');\n    const menu = document.getElementById('mobile-menu');\n    const overlay = document.getElementById('mobile-menu-overlay');\n    const close = document.querySelector('.mobile-close');\n    const menuLinks = menu ? menu.querySelectorAll('a') : [];\n    if (!btn || !menu) return;\n\n    const open = () => {\n      menu.classList.add('is-open');\n      if (overlay) overlay.classList.add('is-open');\n      btn.setAttribute('aria-expanded', 'true');\n      document.body.style.overflow = 'hidden';\n      trackMetric('mobile_menu_open', { template: document.body.dataset.template || '' });\n    };\n    const shut = () => {\n      menu.classList.remove('is-open');\n      if (overlay) overlay.classList.remove('is-open');\n      btn.setAttribute('aria-expanded', 'false');\n      document.body.style.overflow = '';\n      trackMetric('mobile_menu_close', { template: document.body.dataset.template || '' });\n    };\n\n    btn.addEventListener('click', open);\n    if (close) close.addEventListener('click', shut);\n    if (overlay) overlay.addEventListener('click', shut);\n    menuLinks.forEach(function (link) { link.addEventListener('click', shut); });\n    document.addEventListener('keydown', function (e) { if (e.key === 'Escape') shut(); });\n  }\n\n  // ---- CART DRAWER ----\n  function initCartDrawer() {\n    const drawer = document.getElementById('cart-drawer');\n    const overlay = document.getElementById('cart-overlay');\n    const closeBtns = document.querySelectorAll('[data-cart-close]');\n    const openBtns = document.querySelectorAll('[data-cart-open]');\n    if (!drawer) return;\n\n    const openDrawer = function () {\n      drawer.classList.add('is-open');\n      overlay.classList.add('is-open');\n      document.body.style.overflow = 'hidden';\n      trackMetric('cart_drawer_open', { source: 'ui' });\n      refreshCart();\n    };\n    const closeDrawer = function () {\n      drawer.classList.remove('is-open');\n      overlay.classList.remove('is-open');\n      document.body.style.overflow = '';\n      trackMetric('cart_drawer_close', { source: 'ui' });\n    };\n\n    openBtns.forEach(function (b) { b.addEventListener('click', openDrawer); });\n    closeBtns.forEach(function (b) { b.addEventListener('click', closeDrawer); });\n    if (overlay) overlay.addEventListener('click', closeDrawer);\n    document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeDrawer(); });\n\n    // Qty / remove delegation\n    document.addEventListener('click', async function (e) {\n      var onCartPage = !!document.querySelector('.cart-page');\n\n      if (e.target.closest('[data-qty-inc]')) {\n        const btn = e.target.closest('[data-qty-inc]');\n        const key = btn.dataset.qtyInc;\n        const num = btn.closest('.item-qty') ? btn.closest('.item-qty').querySelector('.item-qty-num') : null;\n        if (key && num) {\n          btn.disabled = true;\n          await cartChange(key, parseInt(num.textContent) + 1);\n          if (onCartPage) { window.location.reload(); return; }\n          btn.disabled = false;\n        }\n      }\n      if (e.target.closest('[data-qty-dec]')) {\n        const btn = e.target.closest('[data-qty-dec]');\n        const key = btn.dataset.qtyDec;\n        const num = btn.closest('.item-qty') ? btn.closest('.item-qty').querySelector('.item-qty-num') : null;\n        if (key && num) {\n          btn.disabled = true;\n          await cartChange(key, Math.max(0, parseInt(num.textContent) - 1));\n          if (onCartPage) { window.location.reload(); return; }\n          btn.disabled = false;\n        }\n      }\n      if (e.target.closest('[data-remove]')) {\n        const btn = e.target.closest('[data-remove]');\n        const key = btn.dataset.remove;\n        if (key) {\n          btn.disabled = true;\n          await cartChange(key, 0);\n          if (onCartPage) { window.location.reload(); return; }\n          btn.disabled = false;\n        }\n      }\n    });\n\n    window.openCartDrawer = openDrawer;\n    window.closeCartDrawer = closeDrawer;\n  }\n\n  async function refreshCart() {\n    try {\n      const cart = await fetch('/cart.js').then(function (r) { return r.json(); });\n      renderCartDrawer(cart);\n    } catch (err) { /* noop */ }\n  }\n\n  function initPromoCode() {\n    document.addEventListener('submit', function (e) {\n      if (!e.target.matches('[data-promo-form]')) return;\n      e.preventDefault();\n\n      const form = e.target;\n      const input = form.querySelector('[data-promo-input]');\n      const code = input ? input.value.trim() : '';\n\n      if (!code) {\n        showToast('Enter a promo code');\n        if (input) input.focus();\n        return;\n      }\n\n      const redirect = form.dataset.promoRedirect || '/checkout';\n      trackMetric('promo_apply', {\n        code: code,\n        redirect: redirect,\n        source: form.closest('.cart-drawer') ? 'drawer' : 'cart'\n      });\n      window.location.href = '/discount/' + encodeURIComponent(code) + '?redirect=' + encodeURIComponent(redirect);\n    });\n  }\n\n  function renderCartDrawer(cart) {\n    const body = document.querySelector('.cart-drawer-body');\n    const foot = document.querySelector('.cart-drawer-foot');\n    const badges = document.querySelectorAll('.cart-badge');\n    const previousCount = window.__misfitCartCount || 0;\n\n    badges.forEach(function (b) {\n      b.textContent = cart.item_count;\n      b.style.display = cart.item_count > 0 ? 'flex' : 'none';\n    });\n\n    if (previousCount !== cart.item_count) {\n      badges.forEach(function (badge) {\n        badge.classList.remove('is-bumping');\n        void badge.offsetWidth;\n        badge.classList.add('is-bumping');\n        setTimeout(function () { badge.classList.remove('is-bumping'); }, 380);\n      });\n    }\n    window.__misfitCartCount = cart.item_count;\n\n    if (!body) return;\n\n    if (cart.item_count === 0) {\n      var routes = window.__MISFIT_ROUTES || {};\n      var shopNowUrl = routes.allProducts || '/collections/all';\n      body.innerHTML = '<div class=\"cart-empty\"><svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"><circle cx=\"9\" cy=\"21\" r=\"1\"/><circle cx=\"20\" cy=\"21\" r=\"1\"/><path d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"/></svg><p>Your bag is empty</p><a href=\"' + shopNowUrl + '\" class=\"btn btn-primary\" style=\"margin-top:16px\">Shop Now</a></div>';\n      if (foot) foot.style.display = 'none';\n      updateShippingProgress(cart);\n      return;\n    }\n    if (foot) foot.style.display = '';\n\n    var hasNativeDiscount = (cart.total_discount > 0) || (cart.original_total_price && cart.original_total_price > cart.total_price);\n    var totalSavings = 0;\n    var grossSubtotalPaise = 0;\n    var discountTitle = '';\n\n    var bogoFreeKeys = {};\n    var bogoPaidKeys = {};\n    var fallbackBogoSavings = 0;\n\n    if (hasNativeDiscount) {\n      totalSavings = cart.total_discount || (cart.original_total_price - cart.total_price);\n      grossSubtotalPaise = cart.original_total_price || cart.total_price;\n      if (cart.cart_level_discount_applications && cart.cart_level_discount_applications.length > 0) {\n        discountTitle = cart.cart_level_discount_applications[0].title;\n      } else {\n        for (var i = 0; i < cart.items.length; i++) {\n          if (cart.items[i].discounts && cart.items[i].discounts.length > 0) {\n            discountTitle = cart.items[i].discounts[0].title;\n            break;\n          }\n          if (cart.items[i].line_level_discount_allocations && cart.items[i].line_level_discount_allocations.length > 0) {\n            discountTitle = (cart.items[i].line_level_discount_allocations[0].discount_application && cart.items[i].line_level_discount_allocations[0].discount_application.title) || '';\n            break;\n          }\n        }\n      }\n      if (!discountTitle) discountTitle = 'Offer Applied';\n    } else {\n      var bogoUnits = [];\n      cart.items.forEach(function (item) {\n        var unitPaise = item.original_price || item.price;\n        if (unitPaise === 0 || unitPaise < 100) {\n          var tl = ((item.product_title || '') + ' ' + (item.handle || '')).toLowerCase();\n          unitPaise = (tl.includes('cord') || tl.includes('co-ord')) ? 159900 : 129900;\n        } else if (unitPaise > 0 && unitPaise < 10000) {\n          unitPaise = unitPaise * 100;\n        }\n        grossSubtotalPaise += unitPaise * item.quantity;\n        for (var q = 0; q < item.quantity; q++) {\n          bogoUnits.push({ key: item.key, unitPaise: unitPaise });\n        }\n      });\n      bogoUnits.sort(function (a, b) { return b.unitPaise - a.unitPaise; });\n      if (bogoUnits.length >= 2) {\n        var paidUnit = bogoUnits[0];\n        var freeUnit = bogoUnits[1];\n        bogoPaidKeys[paidUnit.key] = (bogoPaidKeys[paidUnit.key] || 0) + 1;\n        bogoFreeKeys[freeUnit.key] = (bogoFreeKeys[freeUnit.key] || 0) + 1;\n        fallbackBogoSavings = freeUnit.unitPaise;\n        totalSavings = fallbackBogoSavings;\n        discountTitle = 'Buy 1 Get 1';\n      }\n    }\n\n    const items = cart.items.map(function (item) {\n      const img = item.featured_image && item.featured_image.url ? item.featured_image.url.replace('http:', 'https:') : '';\n      const variant = (item.variant_title && item.variant_title !== 'Default Title') ? '<div class=\"cart-item-variant\">' + item.variant_title + '</div>' : '';\n\n      var origLinePaise = item.original_line_price !== undefined ? item.original_line_price : (item.original_price * item.quantity);\n      var finalLinePaise = item.final_line_price !== undefined ? item.final_line_price : (item.price * item.quantity);\n      var itemDiscount = item.total_discount || (origLinePaise > finalLinePaise ? (origLinePaise - finalLinePaise) : 0);\n\n      var bogoBadgeHtml = '';\n      var priceDisplayHtml = '';\n\n      if (hasNativeDiscount) {\n        if (itemDiscount > 0) {\n          var itemTitle = (item.discounts && item.discounts[0] && item.discounts[0].title) ||\n            (item.line_level_discount_allocations && item.line_level_discount_allocations[0] && item.line_level_discount_allocations[0].discount_application && item.line_level_discount_allocations[0].discount_application.title) ||\n            discountTitle || 'Offer';\n          bogoBadgeHtml = '<div class=\"cart-item-bogo-tag cart-item-bogo-tag--free\">' +\n            '<span class=\"bogo-tag-icon\">\uD83C\uDFF7\uFE0F</span> ' + itemTitle + ' (-' + fmtMoney(itemDiscount) + ')' +\n            '</div>';\n          priceDisplayHtml = '<span class=\"cart-item-price\">' +\n            '<s style=\"color:var(--c-400);font-size:12px;margin-right:6px;\">' + fmtMoney(origLinePaise) + '</s>' +\n            '<span style=\"color:#10b981;font-weight:600;\">' + fmtMoney(finalLinePaise) + '</span>' +\n          '</span>';\n        } else {\n          priceDisplayHtml = '<span class=\"cart-item-price\">' + fmtMoney(origLinePaise) + '</span>';\n        }\n      } else {\n        if (bogoFreeKeys[item.key]) {\n          var freeCount = bogoFreeKeys[item.key];\n          var isSingleQty = item.quantity === 1;\n          bogoBadgeHtml = '<div class=\"cart-item-bogo-tag cart-item-bogo-tag--free\">' +\n            '<span class=\"bogo-tag-icon\">\uD83C\uDF81</span> ' + (isSingleQty ? 'FREE' : freeCount + ' FREE') + ' &mdash; Saving ' + fmtMoney(fallbackBogoSavings) +\n            '</div>';\n          var discountedLinePaise = Math.max(0, origLinePaise - fallbackBogoSavings);\n          priceDisplayHtml = '<span class=\"cart-item-price\">' +\n            '<s style=\"color:var(--c-400);font-size:12px;margin-right:6px;\">' + fmtMoney(origLinePaise) + '</s>' +\n            '<span style=\"color:#10b981;font-weight:600;\">' + fmtMoney(discountedLinePaise) + '</span>' +\n          '</span>';\n        } else if (bogoPaidKeys[item.key]) {\n          bogoBadgeHtml = '<div class=\"cart-item-bogo-tag cart-item-bogo-tag--paid\">' +\n            '<span class=\"bogo-tag-icon\">\u2713</span> BOGO Active (Paid Item)' +\n            '</div>';\n          priceDisplayHtml = '<span class=\"cart-item-price\">' + fmtMoney(origLinePaise) + '</span>';\n        } else {\n          priceDisplayHtml = '<span class=\"cart-item-price\">' + fmtMoney(origLinePaise) + '</span>';\n        }\n      }\n\n      return '<div class=\"cart-item\">' +\n        '<div class=\"cart-item-img\"><a href=\"' + item.url + '\">' +\n          (img ? '<img src=\"' + img + '\" alt=\"\" loading=\"lazy\">' : '') +\n        '</a></div>' +\n        '<div class=\"cart-item-info\">' +\n          '<div class=\"cart-item-title\"><a href=\"' + item.url + '\">' + item.product_title + '</a></div>' +\n          variant +\n          bogoBadgeHtml +\n          '<div class=\"cart-item-bottom\">' +\n            priceDisplayHtml +\n            '<div class=\"item-qty\">' +\n              '<button data-qty-dec=\"' + item.key + '\">&#8722;</button>' +\n              '<span class=\"item-qty-num\">' + item.quantity + '</span>' +\n              '<button data-qty-inc=\"' + item.key + '\">&#43;</button>' +\n            '</div>' +\n          '</div>' +\n          '<button class=\"cart-item-remove\" data-remove=\"' + item.key + '\">Remove</button>' +\n        '</div>' +\n      '</div>';\n    }).join('');\n\n    var bogoBannerHtml = '';\n    if (totalSavings > 0) {\n      bogoBannerHtml =\n        '<div class=\"cart-bogo-celebration\" id=\"cart-bogo-celebration\">' +\n          '<div class=\"cart-bogo-confetti-wrap\" id=\"bogo-confetti-wrap\"></div>' +\n          '<div class=\"cart-bogo-celebration-inner\">' +\n            '<div class=\"cart-bogo-party-icon\">&#x1F389;</div>' +\n            '<div class=\"cart-bogo-celebration-text\">' +\n              '<strong>' + discountTitle + ' &mdash; Offer Applied!</strong>' +\n              '<span>Congratulations! You\\'re saving <em class=\"cart-bogo-saving-em\">' +\n                fmtMoney(totalSavings) +\n              '</em> on this order.</span>' +\n            '</div>' +\n          '</div>' +\n          '<div class=\"cart-bogo-chips\">' +\n            '<span class=\"bogo-chip\">\uD83D\uDED2 ' + cart.item_count + ' items</span>' +\n            '<span class=\"bogo-chip bogo-chip--green\">\uD83D\uDCB8 Saved ' + fmtMoney(totalSavings) + '</span>' +\n          '</div>' +\n        '</div>';\n    } else if (cart.item_count === 1) {\n      bogoBannerHtml =\n        '<div class=\"cart-bogo-nudge\">' +\n          '<span class=\"cart-bogo-nudge-icon\">\uD83D\uDC57</span>' +\n          '<div class=\"cart-bogo-nudge-text\">' +\n            '<strong>You\\'re 1 item away from a FREE product!</strong>' +\n            '<span>Add 1 more item and get the second highest absolutely free.</span>' +\n          '</div>' +\n          '<a href=\"/pages/bogo-sale\" class=\"cart-bogo-nudge-btn\">Shop BOGO</a>' +\n        '</div>';\n    }\n\n    body.innerHTML = bogoBannerHtml + '<div class=\"cart-list\">' + items + '</div>';\n\n    if (totalSavings > 0) {\n      var prevSavings = window.__misfitBogoSavings || 0;\n      if (prevSavings !== totalSavings) {\n        window.__misfitBogoSavings = totalSavings;\n        setTimeout(fireBogoConfetti, 150);\n      } else {\n        window.__misfitBogoSavings = totalSavings;\n      }\n    } else {\n      window.__misfitBogoSavings = 0;\n    }\n\n    const totalEl = document.querySelector('.cart-subtotal-val');\n    if (totalEl) totalEl.textContent = fmtMoney(grossSubtotalPaise);\n\n    const drawerBogoRow = document.querySelector('[data-cart-drawer-bogo-row]');\n    const drawerBogoVal = document.querySelector('[data-cart-drawer-bogo-val]');\n    const drawerBogoLabel = document.querySelector('[data-cart-drawer-bogo-label]');\n    if (drawerBogoRow && drawerBogoVal) {\n      if (totalSavings > 0) {\n        drawerBogoRow.style.display = 'flex';\n        if (drawerBogoLabel) drawerBogoLabel.textContent = (discountTitle || 'Offer') + ' Savings';\n        drawerBogoVal.textContent = '-' + fmtMoney(totalSavings);\n      } else {\n        drawerBogoRow.style.display = 'none';\n      }\n    }\n\n    updateShippingProgress(cart, hasNativeDiscount ? 0 : totalSavings);\n  }\n\n  async function cartChange(key, qty) {\n    try {\n      await fetch('/cart/change.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ id: key, quantity: qty })\n      });\n      await refreshCart();\n    } catch (e) { /* noop */ }\n  }\n\n  function isPreviewMode() {\n    if (typeof window.__MISFIT_IS_PREVIEW === 'boolean') return window.__MISFIT_IS_PREVIEW;\n    return /shopifypreview\\.com|myshopify\\.com/i.test(window.location.hostname);\n  }\n\n  async function addVariantToCart(variantId, quantity) {\n    return fetch('/cart/add.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ id: parseInt(variantId), quantity: quantity || 1 })\n    });\n  }\n\n  // ---- ADD TO CART (product page form) ----\n  function initAddToCart() {\n    document.addEventListener('submit', async function (e) {\n      if (!e.target.matches('[data-atc-form]')) return;\n      e.preventDefault();\n      const form = e.target;\n      const btn = form.querySelector('[data-atc-btn]');\n      const idInput = form.querySelector('input[name=\"id\"]');\n      if (!btn || !idInput) return;\n\n      const orig = btn.textContent;\n      btn.textContent = 'Adding\u2026';\n      btn.disabled = true;\n\n      try {\n        const res = await fetch('/cart/add.js', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ id: parseInt(idInput.value), quantity: 1 })\n        });\n        if (res.ok) {\n          trackMetric('add_to_cart', { variant_id: parseInt(idInput.value), quantity: 1, source: 'product_page' });\n          btn.textContent = 'Added!';\n          showToast('Added to bag');\n          await refreshCart();\n          if (window.openCartDrawer) window.openCartDrawer();\n          setTimeout(function () { btn.textContent = orig; btn.disabled = false; }, 1600);\n        } else {\n          const data = await res.json();\n          showToast(data.description || 'Cannot add item');\n          btn.textContent = orig;\n          btn.disabled = false;\n        }\n      } catch (err) {\n        btn.textContent = orig;\n        btn.disabled = false;\n      }\n    });\n  }\n\n  function initBuyNow() {\n    document.addEventListener('click', async function (e) {\n      var btn = e.target.closest('[data-buy-now-btn]');\n      if (!btn) return;\n\n      var form = btn.closest('[data-atc-form]');\n      var idInput = form ? form.querySelector('input[name=\"id\"]') : null;\n      if (!idInput) return;\n\n      var originalText = btn.textContent;\n      btn.textContent = 'Preparing\u2026';\n      btn.disabled = true;\n\n      try {\n        var res = await addVariantToCart(idInput.value, 1);\n        if (!res.ok) {\n          var data = await res.json();\n          showToast(data.description || 'Cannot start checkout');\n          btn.textContent = originalText;\n          btn.disabled = false;\n          return;\n        }\n\n        trackMetric('buy_now_click', {\n          variant_id: parseInt(idInput.value),\n          preview: isPreviewMode(),\n          source: 'product_page'\n        });\n\n        if (isPreviewMode()) {\n          showToast('Preview mode: checkout is unavailable, added to bag instead');\n          btn.textContent = 'Added!';\n          await refreshCart();\n          if (window.openCartDrawer) window.openCartDrawer();\n          setTimeout(function () {\n            btn.textContent = originalText;\n            btn.disabled = false;\n          }, 1400);\n          return;\n        }\n\n        window.location.href = (window.__MISFIT_ROUTES && window.__MISFIT_ROUTES.checkout) || '/checkout';\n      } catch (err) {\n        btn.textContent = originalText;\n        btn.disabled = false;\n      }\n    });\n  }\n\n  // ---- QUICK-ADD from collection/featured grid ----\n  function initQuickAdd() {\n    document.addEventListener('click', async function (e) {\n      const btn = e.target.closest('[data-quick-add]');\n      if (!btn) return;\n      const variantId = btn.dataset.quickAdd;\n      if (!variantId) return;\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      if (btn.disabled || btn.classList.contains('is-loading')) return;\n\n      const isSizeTag = btn.classList.contains('prod-card-size-tag');\n      const originalHtml = btn.innerHTML;\n      btn.disabled = true;\n      btn.classList.add('is-loading');\n\n      if (isSizeTag) {\n        btn.innerHTML = '<span class=\"quick-spinner\"></span>';\n      } else {\n        btn.innerHTML = '<span class=\"quick-spinner\"></span> Adding\u2026';\n      }\n\n      try {\n        const res = await fetch('/cart/add.js', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n          body: JSON.stringify({ id: parseInt(variantId), quantity: 1 })\n        });\n\n        if (res.ok) {\n          trackMetric('quick_add', { variant_id: parseInt(variantId), source: 'product_card' });\n          btn.classList.remove('is-loading');\n          btn.classList.add('is-added');\n\n          if (isSizeTag) {\n            btn.innerHTML = '\u2713';\n          } else {\n            btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" style=\"display:inline-block;vertical-align:middle;margin-right:4px;\"><polyline points=\"20 6 9 17 4 12\"/></svg> Added!';\n          }\n\n          showToast('\u2713 Added to bag');\n          await refreshCart();\n          if (window.openCartDrawer) window.openCartDrawer();\n\n          setTimeout(function () {\n            btn.classList.remove('is-added');\n            btn.innerHTML = originalHtml;\n            btn.disabled = false;\n          }, 2000);\n        } else {\n          const data = await res.json().catch(function () { return {}; });\n          btn.classList.remove('is-loading');\n          btn.innerHTML = originalHtml;\n          btn.disabled = false;\n          showToast(data.description || data.message || 'Cannot add item to bag');\n        }\n      } catch (err) {\n        btn.classList.remove('is-loading');\n        btn.innerHTML = originalHtml;\n        btn.disabled = false;\n      }\n    });\n  }\n\n  // ---- PRODUCT GALLERY ----\n  function initGallery() {\n    const gallery = document.querySelector('.product-gallery');\n    if (!gallery) return;\n    // If modern pre-rendered slides exist, switching is handled smoothly with crossfade by main-product.liquid\n    if (gallery.querySelector('.gallery-main-slide')) return;\n    const mainImg = gallery.querySelector('.gallery-main img');\n    const thumbs = gallery.querySelectorAll('.gallery-thumb');\n    thumbs.forEach(function (t) {\n      t.addEventListener('click', function () {\n        const src = t.dataset.src;\n        if (mainImg && src) {\n          mainImg.src = src;\n          if (t.dataset.srcset) mainImg.srcset = t.dataset.srcset;\n          thumbs.forEach(function (x) { x.classList.remove('is-active'); });\n          t.classList.add('is-active');\n          trackMetric('product_gallery_switch', {\n            index: Array.prototype.indexOf.call(thumbs, t) + 1,\n            source: 'product_page'\n          });\n        }\n      });\n    });\n  }\n\n  // ---- VARIANT SELECTOR ----\n  function initVariants() {\n    document.querySelectorAll('.option-btns').forEach(function (group) {\n      group.querySelectorAll('.var-btn').forEach(function (btn) {\n        btn.addEventListener('click', function () {\n          group.querySelectorAll('.var-btn').forEach(function (b) { b.classList.remove('active'); });\n          btn.classList.add('active');\n\n          const sel = btn.closest('.product-option')?.querySelector('.sel');\n          if (sel) sel.textContent = btn.textContent.trim();\n          const optionName = btn.closest('.product-option')?.dataset.optionName || 'option';\n          trackMetric('variant_select', {\n            option: optionName,\n            value: btn.dataset.value || btn.textContent.trim()\n          });\n\n          // Find matching variant from all buttons and set hidden input\n          updateVariantId();\n        });\n      });\n    });\n\n\n\n    function updateVariantId() {\n      // Collect active option values per option group\n      const activeValues = Array.from(document.querySelectorAll('.option-btns')).map(function (g) {\n        const active = g.querySelector('.var-btn.active');\n        return active ? active.dataset.value : null;\n      });\n      // Find matching variant\n      const variantsData = window.__misfitVariants;\n      if (!variantsData) return;\n      const match = variantsData.find(function (v) {\n        return activeValues.every(function (val, i) {\n          return v.options[i] === val;\n        });\n      });\n      const input = document.querySelector('input[name=\"id\"]');\n      const priceNow = document.querySelectorAll('[data-product-price-now]');\n      const priceWas = document.querySelector('.prod-price .was');\n      const addBtns = document.querySelectorAll('[data-atc-btn]');\n      if (match && input) {\n        input.value = match.id;\n        priceNow.forEach(function (node) { node.textContent = fmtMoney(match.price); });\n        if (priceWas) {\n          const prices = window.__misfitVariantPrices && window.__misfitVariantPrices[match.id];\n          if (prices && prices.compare_at_price) {\n            priceWas.textContent = prices.compare_at_price;\n            priceWas.style.display = '';\n          } else if (match.compare_at_price && match.compare_at_price > match.price) {\n            priceWas.textContent = fmtMoney(match.compare_at_price);\n            priceWas.style.display = '';\n          }\n          const priceDiscount = document.querySelector('.prod-price .discount');\n          if (priceDiscount) {\n            if (prices && prices.discount) {\n              priceDiscount.textContent = prices.discount;\n              priceDiscount.style.display = '';\n            } else if (match.compare_at_price && match.compare_at_price > match.price) {\n              const pct = Math.round((match.compare_at_price - match.price) * 100 / match.compare_at_price);\n              priceDiscount.textContent = '(' + pct + '% OFF)';\n              priceDiscount.style.display = '';\n            }\n          }\n        }\n        addBtns.forEach(function (btn) {\n          btn.disabled = !match.available;\n          btn.textContent = match.available ? 'Add to Bag' : 'Sold Out';\n        });\n        trackMetric('variant_match', {\n          variant_id: match.id,\n          available: !!match.available\n        });\n      }\n    }\n  }\n\n  // ---- ACCORDION ----\n  function initAccordion() {\n    if (window.__misfitAccordionInit) return;\n    window.__misfitAccordionInit = true;\n\n    document.addEventListener('click', function (e) {\n      var trigger = e.target.closest('.accordion-trigger');\n      if (!trigger) return;\n      \n      var body = trigger.nextElementSibling;\n      var isOpen = trigger.getAttribute('aria-expanded') === 'true';\n      trigger.setAttribute('aria-expanded', String(!isOpen));\n      if (body) body.classList.toggle('is-open', !isOpen);\n    });\n  }\n\n  // ---- DELIVERY PINCODE ESTIMATOR (SHIPROCKET) ----\n  function initDeliveryPincodeChecker() {\n    var STORAGE_KEY = 'trymisfit_user_pincode';\n\n    // Pincode calculation engine based on Indian postal regions & Shiprocket transit SLA\n    function calculateEstimate(pincode) {\n      pincode = String(pincode || '').trim();\n      var prefix2 = parseInt(pincode.substring(0, 2), 10) || 0;\n      var prefix1 = parseInt(pincode.substring(0, 1), 10) || 0;\n\n      // Estimate transit business days\n      var minDays = 3;\n      var maxDays = 5;\n\n      // Metro hubs (Delhi NCR, Mumbai, Bengaluru, Kolkata, Chennai, Hyderabad, Ahmedabad, Pune)\n      if ([11, 12, 20].indexOf(prefix2) !== -1) {\n        // Delhi NCR\n        minDays = 2; maxDays = 3;\n      } else if ([40, 41].indexOf(prefix2) !== -1) {\n        // Mumbai / Pune\n        minDays = 2; maxDays = 3;\n      } else if (prefix2 === 56 || prefix2 === 50) {\n        // Bengaluru / Hyderabad\n        minDays = 2; maxDays = 3;\n      } else if (prefix2 === 38 || prefix2 === 39) {\n        // Ahmedabad / Surat / Gujarat\n        minDays = 2; maxDays = 3;\n      } else if (prefix2 === 60 || prefix2 === 70) {\n        // Chennai / Kolkata\n        minDays = 3; maxDays = 4;\n      } else if ([18, 19, 79].indexOf(prefix2) !== -1 || pincode.indexOf('744') === 0) {\n        // Remote / North-East / J&K / Andaman\n        minDays = 5; maxDays = 8;\n      } else if (prefix1 >= 1 && prefix1 <= 8) {\n        // Rest of India\n        minDays = 3; maxDays = 5;\n      }\n\n      var now = new Date();\n      var dispatchPrep = now.getHours() >= 14 ? 2 : 1;\n      var targetDate = new Date(now);\n      targetDate.setDate(now.getDate() + dispatchPrep + minDays);\n\n      if (targetDate.getDay() === 0) {\n        targetDate.setDate(targetDate.getDate() + 1);\n      }\n\n      var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n      var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n      var dayName = dayNames[targetDate.getDay()];\n      var dateNum = targetDate.getDate();\n      var monthName = monthNames[targetDate.getMonth()];\n\n      return {\n        formattedDate: dayName + ', ' + dateNum + ' ' + monthName,\n        minDays: minDays,\n        maxDays: maxDays\n      };\n    }\n\n    function showResult(container, pincode) {\n      if (!container) return;\n      var loadingEl = container.querySelector('[data-pincode-loading]');\n      var formWrap = container.querySelector('[data-pincode-form]');\n      var resultWrap = container.querySelector('[data-pincode-result]');\n      var dateEl = container.querySelector('[data-delivery-date]');\n      var pincodeDisplay = container.querySelector('[data-pincode-display]');\n      var errorEl = container.querySelector('[data-pincode-error]');\n\n      if (loadingEl) loadingEl.style.display = 'none';\n      var estimate = calculateEstimate(pincode);\n      if (dateEl) dateEl.textContent = estimate.formattedDate;\n      if (pincodeDisplay) pincodeDisplay.textContent = pincode;\n      if (errorEl) { errorEl.style.display = 'none'; errorEl.textContent = ''; }\n      if (formWrap) formWrap.style.display = 'none';\n      if (resultWrap) resultWrap.style.display = 'block';\n\n      try {\n        localStorage.setItem(STORAGE_KEY, pincode);\n      } catch (e) {}\n    }\n\n    function showForm(container, prefill) {\n      if (!container) return;\n      var loadingEl = container.querySelector('[data-pincode-loading]');\n      var formWrap = container.querySelector('[data-pincode-form]');\n      var resultWrap = container.querySelector('[data-pincode-result]');\n      var input = container.querySelector('[data-pincode-input]');\n      var errorEl = container.querySelector('[data-pincode-error]');\n\n      if (container._pincodeTimer) clearTimeout(container._pincodeTimer);\n      if (loadingEl) loadingEl.style.display = 'none';\n      if (resultWrap) resultWrap.style.display = 'none';\n      if (errorEl) { errorEl.style.display = 'none'; errorEl.textContent = ''; }\n      if (formWrap) formWrap.style.display = 'block';\n      if (input) {\n        if (prefill) input.value = prefill;\n        setTimeout(function () {\n          input.focus();\n          if (input.select) input.select();\n        }, 50);\n      }\n    }\n\n    function validateAndSubmit(container) {\n      if (!container) return;\n      var input = container.querySelector('[data-pincode-input]');\n      var formWrap = container.querySelector('[data-pincode-form]');\n      var resultWrap = container.querySelector('[data-pincode-result]');\n      var loadingEl = container.querySelector('[data-pincode-loading]');\n      var errorEl = container.querySelector('[data-pincode-error]');\n\n      if (!input) return;\n      var val = (input.value || '').trim();\n      var isValid = /^[1-9][0-9]{5}$/.test(val);\n      if (!isValid) {\n        if (errorEl) {\n          errorEl.textContent = 'Please enter a valid 6-digit Indian PIN code';\n          errorEl.style.display = 'block';\n        }\n        return;\n      }\n\n      if (errorEl) {\n        errorEl.style.display = 'none';\n        errorEl.textContent = '';\n      }\n\n      if (formWrap) formWrap.style.display = 'none';\n      if (resultWrap) resultWrap.style.display = 'none';\n      if (loadingEl) loadingEl.style.display = 'flex';\n\n      if (container._pincodeTimer) clearTimeout(container._pincodeTimer);\n      container._pincodeTimer = setTimeout(function () {\n        if (loadingEl) loadingEl.style.display = 'none';\n        showResult(container, val);\n      }, 700);\n    }\n\n    // Auto-restore previously entered pincode for any containers currently in DOM\n    var savedPincode = '';\n    try { savedPincode = localStorage.getItem(STORAGE_KEY); } catch (e) {}\n\n    document.querySelectorAll('[data-delivery-estimator]').forEach(function (container) {\n      if (savedPincode && /^[1-9][0-9]{5}$/.test(savedPincode)) {\n        var input = container.querySelector('[data-pincode-input]');\n        if (input) input.value = savedPincode;\n        showResult(container, savedPincode);\n      }\n    });\n\n    // Attach robust event delegation on document so it works across all renders & page reloads\n    if (!window.__misfitPincodeDelegated) {\n      window.__misfitPincodeDelegated = true;\n\n      document.addEventListener('click', function (e) {\n        var checkBtn = e.target.closest('[data-pincode-check-btn]');\n        if (checkBtn) {\n          e.preventDefault();\n          var container = checkBtn.closest('[data-delivery-estimator]');\n          if (container) validateAndSubmit(container);\n          return;\n        }\n\n        var changeBtn = e.target.closest('[data-pincode-change-btn]');\n        if (changeBtn) {\n          e.preventDefault();\n          var container = changeBtn.closest('[data-delivery-estimator]');\n          if (container) {\n            var cur = '';\n            try { cur = localStorage.getItem(STORAGE_KEY) || ''; } catch (err) {}\n            showForm(container, cur);\n          }\n          return;\n        }\n      });\n\n      document.addEventListener('input', function (e) {\n        var input = e.target.closest('[data-pincode-input]');\n        if (!input) return;\n        input.value = input.value.replace(/[^0-9]/g, '').slice(0, 6);\n        var container = input.closest('[data-delivery-estimator]');\n        if (container) {\n          var errorEl = container.querySelector('[data-pincode-error]');\n          if (errorEl) errorEl.style.display = 'none';\n          if (input.value.length === 6) {\n            validateAndSubmit(container);\n          }\n        }\n      });\n\n      document.addEventListener('keydown', function (e) {\n        var input = e.target.closest('[data-pincode-input]');\n        if (!input) return;\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          var container = input.closest('[data-delivery-estimator]');\n          if (container) validateAndSubmit(container);\n        }\n      });\n    }\n  }\n\n  // ---- NEWSLETTER ----\n  function initNewsletter() {\n    document.querySelectorAll('.newsletter-form').forEach(function (form) {\n      form.addEventListener('submit', function (e) {\n        e.preventDefault();\n        showToast('Thanks for subscribing!');\n        form.reset();\n      });\n    });\n  }\n\n  // ---- TOAST ----\n  function showToast(msg) {\n    const t = document.querySelector('.site-toast');\n    if (!t) return;\n    t.textContent = msg;\n    t.classList.add('show');\n    setTimeout(function () { t.classList.remove('show'); }, 2600);\n  }\n  window.misfitToast = showToast;\n\n  // ---- FORMAT MONEY ----\n  function fmtMoney(cents) {\n    let c = Number(cents) || 0;\n    // In Shopify, amounts are in paise (e.g. 159900 = \u20B91,599.00, 6000 = \u20B960.00 delivery fee).\n    // If a whole rupee value was passed instead of paise, convert to paise:\n    if (c === 1299 || c === 1599 || c === 1499 || c === 1699 || c === 999 || c === 1399 || c === 1899) {\n      c = c * 100;\n    }\n    const val = c / 100;\n    return val.toLocaleString('en-IN', {\n      style: 'currency',\n      currency: (window.Shopify && window.Shopify.currency && window.Shopify.currency.active) || 'INR',\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    });\n  }\n\n  // ---- CART PAGE QTY ----\n  function initCartPage() {\n    document.querySelectorAll('[data-cart-qty]').forEach(function (input) {\n      let timer;\n      input.addEventListener('change', function () {\n        clearTimeout(timer);\n        timer = setTimeout(async function () {\n          try {\n            await fetch('/cart/change.js', {\n              method: 'POST',\n              headers: { 'Content-Type': 'application/json' },\n              body: JSON.stringify({ id: input.dataset.cartKey, quantity: parseInt(input.value) || 0 })\n            });\n            trackMetric('cart_quantity_change', {\n              variant_id: input.dataset.cartKey,\n              quantity: parseInt(input.value) || 0\n            });\n            window.location.reload();\n          } catch (e) { /* noop */ }\n        }, 500);\n      });\n    });\n  }\n\n  // ---- CART PAGE BOGO BANNER & CELEBRATION ----\n  function initCartPageBogo() {\n    var bannerWrap = document.getElementById('cart-page-bogo-banner');\n    if (!bannerWrap) return;\n\n    fetch('/cart.js')\n      .then(function (r) { return r.json(); })\n      .then(function (cart) {\n        var hasNativeDiscount = (cart.total_discount > 0) || (cart.original_total_price && cart.original_total_price > cart.total_price);\n        var totalSavings = 0;\n        var grossSubtotalPaise = 0;\n        var discountTitle = '';\n\n        if (hasNativeDiscount) {\n          totalSavings = cart.total_discount || (cart.original_total_price - cart.total_price);\n          grossSubtotalPaise = cart.original_total_price || cart.total_price;\n          if (cart.cart_level_discount_applications && cart.cart_level_discount_applications.length > 0) {\n            discountTitle = cart.cart_level_discount_applications[0].title;\n          } else {\n            for (var i = 0; i < cart.items.length; i++) {\n              if (cart.items[i].discounts && cart.items[i].discounts.length > 0) {\n                discountTitle = cart.items[i].discounts[0].title;\n                break;\n              }\n              if (cart.items[i].line_level_discount_allocations && cart.items[i].line_level_discount_allocations.length > 0) {\n                discountTitle = (cart.items[i].line_level_discount_allocations[0].discount_application && cart.items[i].line_level_discount_allocations[0].discount_application.title) || '';\n                break;\n              }\n            }\n          }\n          if (!discountTitle) discountTitle = 'Offer Applied';\n        } else {\n          var bogoUnits = [];\n          cart.items.forEach(function (item) {\n            var unitPaise = item.original_price || item.price;\n            if (unitPaise === 0 || unitPaise < 100) {\n              var tl = ((item.product_title || '') + ' ' + (item.handle || '')).toLowerCase();\n              unitPaise = (tl.indexOf('cord') >= 0 || tl.indexOf('co-ord') >= 0) ? 159900 : 129900;\n            } else if (unitPaise > 0 && unitPaise < 10000) {\n              unitPaise = unitPaise * 100;\n            }\n            grossSubtotalPaise += unitPaise * item.quantity;\n            for (var q = 0; q < item.quantity; q++) {\n              bogoUnits.push({ key: item.key, unitPaise: unitPaise });\n            }\n          });\n          bogoUnits.sort(function (a, b) { return b.unitPaise - a.unitPaise; });\n          if (bogoUnits.length >= 2) {\n            totalSavings = bogoUnits[1].unitPaise;\n            discountTitle = 'Buy 1 Get 1';\n          }\n        }\n\n        if (totalSavings > 0) {\n          bannerWrap.innerHTML =\n            '<div class=\"cart-bogo-celebration\" id=\"cart-bogo-celebration-page\">' +\n              '<div class=\"cart-bogo-confetti-wrap\" id=\"bogo-confetti-wrap-page\"></div>' +\n              '<div class=\"cart-bogo-celebration-inner\">' +\n                '<div class=\"cart-bogo-party-icon\">&#x1F389;</div>' +\n                '<div class=\"cart-bogo-celebration-text\">' +\n                  '<strong>' + discountTitle + ' &mdash; Offer Applied!</strong>' +\n                  '<span>Congratulations! You\\'re saving <em class=\"cart-bogo-saving-em\">' + fmtMoney(totalSavings) + '</em> on this order.</span>' +\n                '</div>' +\n              '</div>' +\n              '<div class=\"cart-bogo-chips\">' +\n                '<span class=\"bogo-chip\">\uD83D\uDED2 ' + cart.item_count + ' items</span>' +\n                '<span class=\"bogo-chip bogo-chip--green\">\uD83D\uDCB8 Saved ' + fmtMoney(totalSavings) + '</span>' +\n              '</div>' +\n            '</div>';\n          setTimeout(function () {\n            var wrap = document.getElementById('bogo-confetti-wrap-page');\n            if (wrap) fireBogoConfetti(wrap);\n          }, 200);\n\n          var cartPageBogoRow = document.querySelector('[data-cart-page-bogo-row]');\n          var cartPageBogoVal = document.querySelector('[data-cart-page-bogo-discount]');\n          var cartPageBogoLabel = document.querySelector('[data-cart-page-bogo-label]');\n          if (cartPageBogoRow && cartPageBogoVal) {\n            cartPageBogoRow.style.display = 'flex';\n            if (cartPageBogoLabel) cartPageBogoLabel.textContent = (discountTitle || 'Offer') + ' Savings';\n            cartPageBogoVal.textContent = '-' + fmtMoney(totalSavings);\n          }\n          var subtotalEl = document.querySelector('[data-cart-page-subtotal]');\n          if (subtotalEl) subtotalEl.textContent = fmtMoney(grossSubtotalPaise);\n\n          updateShippingProgress(cart, hasNativeDiscount ? 0 : totalSavings);\n        } else if (cart.item_count === 1) {\n          bannerWrap.innerHTML =\n            '<div class=\"cart-bogo-nudge\">' +\n              '<span class=\"cart-bogo-nudge-icon\">\uD83D\uDC57</span>' +\n              '<div class=\"cart-bogo-nudge-text\">' +\n                '<strong>You\\'re 1 item away from a FREE product!</strong>' +\n                '<span>Add 1 more item and get the second highest absolutely free.</span>' +\n              '</div>' +\n              '<a href=\"/pages/bogo-sale\" class=\"cart-bogo-nudge-btn\">Shop BOGO</a>' +\n            '</div>';\n          var cartPageBogoRow = document.querySelector('[data-cart-page-bogo-row]');\n          if (cartPageBogoRow) cartPageBogoRow.style.display = 'none';\n          var subtotalEl = document.querySelector('[data-cart-page-subtotal]');\n          if (subtotalEl) subtotalEl.textContent = fmtMoney(grossSubtotalPaise);\n          updateShippingProgress(cart, 0);\n        } else {\n          bannerWrap.innerHTML = '';\n          var cartPageBogoRow = document.querySelector('[data-cart-page-bogo-row]');\n          if (cartPageBogoRow) cartPageBogoRow.style.display = 'none';\n          var subtotalEl = document.querySelector('[data-cart-page-subtotal]');\n          if (subtotalEl) subtotalEl.textContent = fmtMoney(grossSubtotalPaise);\n          updateShippingProgress(cart, 0);\n        }\n      })\n      .catch(function () { /* noop */ });\n  }\n\n  function initStyleLab() {\n    var storageKey = 'misfit-style-preset';\n    var root = document.documentElement;\n    var presetMap = {\n      styleBgStart: '--site-bg-start',\n      styleBgEnd: '--site-bg-end',\n      styleAccent: '--site-accent',\n      styleAccent2: '--site-accent-2',\n      styleText: '--site-text',\n      styleOnAccent: '--site-on-accent',\n      styleSurface: '--site-surface',\n      styleBorder: '--site-border',\n      styleShadow: '--site-shadow',\n      styleRadius: '--site-radius',\n      styleMotion: '--site-motion'\n    };\n\n    function readSavedPreset() {\n      try {\n        return JSON.parse(localStorage.getItem(storageKey) || 'null');\n      } catch (err) {\n        return null;\n      }\n    }\n\n    function writePreset(preset) {\n      try {\n        localStorage.setItem(storageKey, JSON.stringify(preset));\n      } catch (err) { /* noop */ }\n    }\n\n    function clearPresetVars() {\n      Object.keys(presetMap).forEach(function (key) {\n        root.style.removeProperty(presetMap[key]);\n      });\n      delete root.dataset.stylePreset;\n      delete document.body.dataset.stylePreset;\n    }\n\n    function applyPreset(preset, persist) {\n      if (!preset || !preset.vars) return;\n\n      Object.keys(presetMap).forEach(function (key) {\n        var cssVar = presetMap[key];\n        var value = preset.vars[key];\n        if (value !== undefined && value !== null && value !== '') {\n          root.style.setProperty(cssVar, value);\n        }\n      });\n\n      root.dataset.stylePreset = preset.handle || '';\n      document.body.dataset.stylePreset = preset.handle || '';\n\n      if (persist !== false) writePreset(preset);\n    }\n\n    var savedPreset = readSavedPreset();\n    if (savedPreset && savedPreset.vars) {\n      applyPreset(savedPreset, false);\n    }\n\n    var lab = document.querySelector('[data-style-lab]');\n    if (!lab) return;\n\n    var cards = Array.prototype.slice.call(lab.querySelectorAll('[data-style-preset-card]'));\n    var activeName = lab.querySelector('[data-style-active-name]');\n    var activeNote = lab.querySelector('[data-style-active-note]');\n    var resetBtn = lab.querySelector('[data-style-reset]');\n    var randomBtn = lab.querySelector('[data-style-random]');\n    var defaultName = lab.dataset.defaultPresetName || 'Default Editorial';\n    var defaultNote = lab.dataset.defaultPresetNote || 'Current theme baseline';\n\n    function syncActiveCard(activeCard) {\n      cards.forEach(function (card) {\n        card.classList.toggle('is-active', card === activeCard);\n      });\n    }\n\n    function presetFromCard(card) {\n      return {\n        handle: card.dataset.stylePresetHandle || '',\n        name: card.dataset.stylePresetName || '',\n        note: card.dataset.stylePresetNote || '',\n        vars: {\n          styleBgStart: card.dataset.styleBgStart || '',\n          styleBgEnd: card.dataset.styleBgEnd || '',\n          styleAccent: card.dataset.styleAccent || '',\n          styleAccent2: card.dataset.styleAccent2 || '',\n          styleText: card.dataset.styleText || '',\n          styleOnAccent: card.dataset.styleOnAccent || '',\n          styleSurface: card.dataset.styleSurface || '',\n          styleBorder: card.dataset.styleBorder || '',\n          styleShadow: card.dataset.styleShadow || '',\n          styleRadius: card.dataset.styleRadius || '',\n          styleMotion: card.dataset.styleMotion || ''\n        }\n      };\n    }\n\n    function setActivePreset(card, shouldPersist) {\n      if (!card) return;\n\n      var preset = presetFromCard(card);\n      applyPreset(preset, shouldPersist !== false);\n      syncActiveCard(card);\n\n      if (activeName) activeName.textContent = preset.name || defaultName;\n      if (activeNote) activeNote.textContent = preset.note || defaultNote;\n      trackMetric('style_preset_apply', {\n        handle: preset.handle,\n        name: preset.name\n      });\n      showToast((preset.name || 'Style') + ' applied sitewide');\n    }\n\n    function resetStyle() {\n      clearPresetVars();\n      syncActiveCard(null);\n      if (activeName) activeName.textContent = defaultName;\n      if (activeNote) activeNote.textContent = defaultNote;\n      try {\n        localStorage.removeItem(storageKey);\n      } catch (err) { /* noop */ }\n      trackMetric('style_preset_reset', { handle: '' });\n      showToast('Style reset to default');\n    }\n\n    function randomStyle() {\n      if (!cards.length) return;\n      var pool = cards.slice();\n      var selected = pool[Math.floor(Math.random() * pool.length)];\n      setActivePreset(selected);\n    }\n\n    if (savedPreset && savedPreset.handle) {\n      var savedCard = cards.filter(function (card) {\n        return card.dataset.stylePresetHandle === savedPreset.handle;\n      })[0];\n      if (savedCard) {\n        syncActiveCard(savedCard);\n        if (activeName) activeName.textContent = savedPreset.name || defaultName;\n        if (activeNote) activeNote.textContent = savedPreset.note || defaultNote;\n      }\n    }\n\n    lab.addEventListener('click', function (e) {\n      var applyButton = e.target.closest('[data-style-apply]');\n      if (applyButton) {\n        var applyCard = applyButton.closest('[data-style-preset-card]');\n        if (applyCard) setActivePreset(applyCard);\n        return;\n      }\n\n      var clickedCard = e.target.closest('[data-style-preset-card]');\n      if (clickedCard && !e.target.closest('a,button')) {\n        setActivePreset(clickedCard);\n      }\n    });\n\n    if (resetBtn) resetBtn.addEventListener('click', resetStyle);\n    if (randomBtn) randomBtn.addEventListener('click', randomStyle);\n  }\n\n  // ---- INFINITE SCROLL ----\n  function initInfiniteScroll() {\n    var sentinel = document.querySelector('[data-infinite-scroll]');\n    if (!sentinel) return;\n\n    var loader = sentinel.querySelector('.infinite-scroll-loader');\n    var endNote = sentinel.querySelector('.infinite-scroll-end');\n    var grid = sentinel.closest('.container')\n      ? sentinel.closest('.container').querySelector('.prod-grid')\n      : document.querySelector('.prod-grid');\n    if (!grid) return;\n\n    var isLoading = false;\n    var nextUrl = sentinel.dataset.nextUrl;\n    if (!nextUrl) {\n      if (endNote) endNote.style.display = 'flex';\n      return;\n    }\n\n    function enhanceNewCards(cards) {\n      if (typeof window.misfitFixCollectionLinks === 'function') {\n        window.misfitFixCollectionLinks(grid);\n      }\n      if (typeof enforceProductCardScale === 'function') {\n        enforceProductCardScale();\n      }\n      if (typeof initTiltMotion === 'function') {\n        initTiltMotion();\n      }\n      if (typeof initCardImageFlip === 'function') {\n        initCardImageFlip(grid);\n      }\n      cards.forEach(function (card, i) {\n        card.classList.add('js-reveal');\n        setTimeout(function () {\n          card.classList.add('is-revealed');\n        }, i * 40);\n      });\n    }\n\n    var observer = null;\n\n    async function loadNext() {\n      if (isLoading || !nextUrl) return;\n      isLoading = true;\n\n      if (loader) loader.style.display = 'flex';\n      if (endNote) endNote.style.display = 'none';\n\n      try {\n        var res = await fetch(nextUrl);\n        if (!res.ok) throw new Error('Failed to load next page: ' + res.status);\n\n        var html = await res.text();\n        var parser = new DOMParser();\n        var doc = parser.parseFromString(html, 'text/html');\n\n        var newCards = Array.from(doc.querySelectorAll('.prod-grid .prod-card'));\n        if (newCards.length > 0) {\n          var fragment = document.createDocumentFragment();\n          newCards.forEach(function (card) {\n            fragment.appendChild(card);\n          });\n          grid.appendChild(fragment);\n          enhanceNewCards(newCards);\n        }\n\n        var newSentinel = doc.querySelector('[data-infinite-scroll]');\n        if (newSentinel && newSentinel.dataset.nextUrl) {\n          nextUrl = newSentinel.dataset.nextUrl;\n          sentinel.dataset.nextUrl = nextUrl;\n          if (loader) loader.style.display = 'none';\n        } else {\n          nextUrl = '';\n          delete sentinel.dataset.nextUrl;\n          if (loader) loader.style.display = 'none';\n          if (endNote) endNote.style.display = 'flex';\n          if (observer) observer.disconnect();\n        }\n      } catch (err) {\n        if (loader) loader.style.display = 'none';\n      } finally {\n        isLoading = false;\n      }\n    }\n\n    if ('IntersectionObserver' in window) {\n      observer = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting && nextUrl && !isLoading) {\n            loadNext();\n          }\n        });\n      }, {\n        root: null,\n        rootMargin: '500px 0px',\n        threshold: 0.01\n      });\n      observer.observe(sentinel);\n    } else {\n      var btn = document.createElement('button');\n      btn.className = 'infinite-scroll-load-btn';\n      btn.type = 'button';\n      btn.textContent = 'Load More';\n      btn.style.marginTop = '16px';\n      btn.addEventListener('click', function () {\n        loadNext().then(function () {\n          if (!nextUrl) btn.remove();\n        });\n      });\n      sentinel.appendChild(btn);\n    }\n  }\n\n  // ---- RELATED PRODUCTS INFINITE SCROLL ----\n  function initRelatedInfiniteScroll() {\n    var sentinel = document.querySelector('[data-related-infinite-scroll]');\n    if (!sentinel) return;\n\n    var section = sentinel.closest('.related-products');\n    if (!section) return;\n    var grid = section.querySelector('.prod-grid');\n    if (!grid) return;\n\n    var loader = sentinel.querySelector('.infinite-scroll-loader');\n    var endNote = sentinel.querySelector('.infinite-scroll-end');\n    var collectionUrl = sentinel.dataset.collectionUrl;\n    if (!collectionUrl) return;\n\n    var nextPage = parseInt(sentinel.dataset.nextPage, 10) || 1;\n    var maxPages = 20;\n    var isLoading = false;\n    var hasMore = true;\n\n    function getRenderedSlugs() {\n      var set = new Set();\n      grid.querySelectorAll('.prod-card a[href]').forEach(function (a) {\n        var href = (a.getAttribute('href') || '').split('?')[0];\n        var parts = href.split('/').filter(Boolean);\n        var slug = parts.pop();\n        if (slug) set.add(slug);\n      });\n      var curSlug = window.location.pathname.split('/').filter(Boolean).pop();\n      if (curSlug) set.add(curSlug);\n      return set;\n    }\n\n    function enhanceNewCards(cards) {\n      if (typeof window.misfitFixCollectionLinks === 'function') {\n        window.misfitFixCollectionLinks(grid);\n      }\n      if (typeof enforceProductCardScale === 'function') {\n        enforceProductCardScale();\n      }\n      if (typeof initTiltMotion === 'function') {\n        initTiltMotion();\n      }\n      if (typeof initCardImageFlip === 'function') {\n        initCardImageFlip(grid);\n      }\n      cards.forEach(function (card, i) {\n        card.classList.add('js-reveal');\n        setTimeout(function () {\n          card.classList.add('is-revealed');\n        }, i * 40);\n      });\n    }\n\n    var observer = null;\n\n    async function loadNextRelated() {\n      if (isLoading || !hasMore) return;\n      isLoading = true;\n\n      if (loader) loader.style.display = 'flex';\n      if (endNote) endNote.style.display = 'none';\n\n      try {\n        var sep = collectionUrl.indexOf('?') === -1 ? '?' : '&';\n        var fetchUrl = collectionUrl + sep + 'page=' + nextPage;\n        var res = await fetch(fetchUrl);\n        if (!res.ok) throw new Error('HTTP ' + res.status);\n\n        var html = await res.text();\n        var parser = new DOMParser();\n        var doc = parser.parseFromString(html, 'text/html');\n\n        var newCards = Array.from(doc.querySelectorAll('.prod-grid .prod-card'));\n        var renderedSlugs = getRenderedSlugs();\n        var toAppend = [];\n\n        newCards.forEach(function (card) {\n          var links = card.querySelectorAll('a[href]');\n          var cardSlug = '';\n          links.forEach(function (l) {\n            var href = (l.getAttribute('href') || '').split('?')[0];\n            var s = href.split('/').filter(Boolean).pop();\n            if (s) cardSlug = s;\n          });\n          if (cardSlug && renderedSlugs.has(cardSlug)) {\n            return;\n          }\n          if (cardSlug) renderedSlugs.add(cardSlug);\n          toAppend.push(card);\n        });\n\n        if (toAppend.length > 0) {\n          var fragment = document.createDocumentFragment();\n          toAppend.forEach(function (card) {\n            fragment.appendChild(card);\n          });\n          grid.appendChild(fragment);\n          enhanceNewCards(toAppend);\n        }\n\n        var colSentinel = doc.querySelector('[data-infinite-scroll]');\n        var hasNextPageInCol = colSentinel ? Boolean(colSentinel.dataset.nextUrl) : false;\n\n        if (hasNextPageInCol && nextPage < maxPages) {\n          nextPage++;\n          sentinel.dataset.nextPage = String(nextPage);\n          if (loader) loader.style.display = 'none';\n        } else {\n          hasMore = false;\n          if (loader) loader.style.display = 'none';\n          if (endNote) endNote.style.display = 'flex';\n          if (observer) observer.disconnect();\n        }\n      } catch (err) {\n        if (loader) loader.style.display = 'none';\n      } finally {\n        isLoading = false;\n      }\n    }\n\n    if ('IntersectionObserver' in window) {\n      observer = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting && hasMore && !isLoading) {\n            loadNextRelated();\n          }\n        });\n      }, {\n        root: null,\n        rootMargin: '500px 0px',\n        threshold: 0.01\n      });\n      observer.observe(sentinel);\n    } else {\n      var btn = document.createElement('button');\n      btn.className = 'infinite-scroll-load-btn';\n      btn.type = 'button';\n      btn.textContent = 'Load More';\n      btn.style.marginTop = '16px';\n      btn.addEventListener('click', function () {\n        loadNextRelated().then(function () {\n          if (!hasMore) btn.remove();\n        });\n      });\n      sentinel.appendChild(btn);\n    }\n  }\n  window.misfitInitRelatedInfiniteScroll = initRelatedInfiniteScroll;\n\n  // ---- ORGANIC PRODUCT CARD IMAGE FLIP ----\n  // Alternates cards between 1st image and 2nd image using organic, non-fixed intervals\n  function initCardImageFlip(context) {\n    var root = context || document;\n    var cards = Array.from(root.querySelectorAll('.prod-card'));\n    if (!cards.length) return;\n\n    var flipCards = cards.filter(function (card) {\n      return !card.dataset.hasFlipLoop && card.querySelector('.prod-card-img--alt');\n    });\n\n    if (!flipCards.length) return;\n\n    var flipObserver = null;\n    if ('IntersectionObserver' in window) {\n      flipObserver = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          var card = entry.target;\n          if (entry.isIntersecting) {\n            if (!card._flipIsRunning) {\n              card._flipIsRunning = true;\n              scheduleCardFlip(card, getRandomDelay(1500, 4500));\n            }\n          } else {\n            card._flipIsRunning = false;\n            if (card._flipTimer) {\n              clearTimeout(card._flipTimer);\n              card._flipTimer = null;\n            }\n          }\n        });\n      }, { rootMargin: '120px 0px 120px 0px', threshold: 0.05 });\n    }\n\n    function getRandomDelay(min, max) {\n      return Math.floor(min + Math.random() * (max - min));\n    }\n\n    function scheduleCardFlip(card, delay) {\n      if (card._flipTimer) clearTimeout(card._flipTimer);\n      card._flipTimer = setTimeout(function () {\n        runCardFlipCycle(card);\n      }, delay);\n    }\n\n    function runCardFlipCycle(card) {\n      if (!card._flipIsRunning || card._isHovered) {\n        scheduleCardFlip(card, getRandomDelay(3000, 6000));\n        return;\n      }\n\n      // Step 1: Smoothly flip to 2nd image\n      card.classList.add('is-showing-alt');\n\n      // Step 2: Keep 2nd image visible for a comfortable duration (2.4s - 3.8s)\n      var altDuration = getRandomDelay(2400, 3800);\n      card._flipTimer = setTimeout(function () {\n        if (!card._isHovered) {\n          // Step 3: Smoothly flip back to 1st image\n          card.classList.remove('is-showing-alt');\n        }\n\n        // Step 4: Organic rest duration before the next cycle (4.5s - 9.0s)\n        var restDuration = getRandomDelay(4500, 9000);\n        scheduleCardFlip(card, restDuration);\n      }, altDuration);\n    }\n\n    flipCards.forEach(function (card) {\n      card.dataset.hasFlipLoop = 'true';\n      card._flipIsRunning = false;\n      card._flipTimer = null;\n      card._isHovered = false;\n\n      card.addEventListener('mouseenter', function () {\n        card._isHovered = true;\n        if (card._flipTimer) {\n          clearTimeout(card._flipTimer);\n          card._flipTimer = null;\n        }\n      });\n\n      card.addEventListener('mouseleave', function () {\n        card._isHovered = false;\n        card.classList.remove('is-showing-alt');\n        if (card._flipIsRunning) {\n          scheduleCardFlip(card, getRandomDelay(3000, 6000));\n        }\n      });\n\n      if (flipObserver) {\n        flipObserver.observe(card);\n      } else {\n        card._flipIsRunning = true;\n        scheduleCardFlip(card, getRandomDelay(1500, 4500));\n      }\n    });\n  }\n  window.misfitInitCardImageFlip = initCardImageFlip;\n\n  // ---- DEDUPLICATE PRODUCTS ACROSS HOMEPAGE SECTIONS ----\n  function deduplicateHomepageProducts() {\n    var seenProducts = new Set();\n    var sections = document.querySelectorAll('.featured-section, [data-section-id]');\n    if (!sections.length) return;\n\n    sections.forEach(function (sec) {\n      var grid = sec.querySelector('.prod-grid');\n      if (!grid) return;\n\n      var visibleCards = Array.from(grid.querySelectorAll('.prod-card:not(.is-backup-card)'));\n      var backupCards = Array.from(grid.querySelectorAll('.prod-card.is-backup-card'));\n\n      visibleCards.forEach(function (card) {\n        var key = card.getAttribute('data-product-handle') || card.getAttribute('data-product-id');\n        if (!key) return;\n\n        if (seenProducts.has(key)) {\n          // Duplicate detected! Try to substitute with an unused unique backup card from this section\n          var replaced = false;\n          while (backupCards.length > 0) {\n            var candidate = backupCards.shift();\n            var candidateKey = candidate.getAttribute('data-product-handle') || candidate.getAttribute('data-product-id');\n            if (candidateKey && !seenProducts.has(candidateKey)) {\n              seenProducts.add(candidateKey);\n              candidate.classList.remove('is-backup-card');\n              candidate.style.display = '';\n              card.parentNode.replaceChild(candidate, card);\n              replaced = true;\n              break;\n            } else {\n              candidate.remove();\n            }\n          }\n          if (!replaced) {\n            card.remove();\n          }\n        } else {\n          seenProducts.add(key);\n        }\n      });\n\n      // Remove any remaining backup cards that weren't needed\n      backupCards.forEach(function (c) {\n        c.remove();\n      });\n    });\n  }\n  window.misfitDeduplicateHomepage = deduplicateHomepageProducts;\n\n  // ---- INIT ----\n  function runThemeInit() {\n    deduplicateHomepageProducts();\n    initCROMetrics();\n    trackMetric('page_view', {\n      template: document.body.dataset.template || '',\n      pageType: document.body.dataset.pageType || ''\n    });\n    initHeader();\n    initMobileMenu();\n    initCartDrawer();\n    initAddToCart();\n    initQuickAdd();\n    initGallery();\n    initVariants();\n    initAccordion();\n    initDeliveryPincodeChecker();\n    initNewsletter();\n    initCartPage();\n    initCartPageBogo();\n    initPromoCode();\n    initBuyNow();\n    initStyleLab();\n    initTiltMotion();\n    initInfiniteScroll();\n    initRelatedInfiniteScroll();\n    initCardImageFlip();\n    initReveal();\n    initCursor();\n    enforceProductCardScale();\n    window.addEventListener('resize', enforceProductCardScale);\n    initTestiSlider();\n    refreshCart();\n  }\n\n  window.initDeliveryPincodeChecker = initDeliveryPincodeChecker;\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', runThemeInit);\n  } else {\n    runThemeInit();\n  }\n\n  // ---- SCROLL REVEAL ----\n  function initReveal() {\n    if (!('IntersectionObserver' in window)) return;\n    var targets = [\n      '.sec-head-inner', '.prod-card', '.testi-item', '.cat-card',\n      '.lookbook-item', '.stat-item', '.split-text > *',\n      '.newsletter-label', '.newsletter-title', '.newsletter-sub',\n      '.newsletter-form', '.newsletter-fine', '.style-lab-head',\n      '.style-lab-toolbar', '.style-lab-hint', '.style-preset-card'\n    ];\n    var els = document.querySelectorAll(targets.join(','));\n    els.forEach(function (el) { el.classList.add('js-reveal'); });\n    // Stagger siblings\n    var parents = new Set();\n    els.forEach(function (el) {\n      var p = el.parentElement;\n      if (p && !parents.has(p)) {\n        parents.add(p);\n        Array.from(p.children).forEach(function (child, i) {\n          if (child.classList.contains('js-reveal') && i > 0) {\n            child.style.transitionDelay = (i * 0.08) + 's';\n          }\n        });\n      }\n    });\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (entry.isIntersecting) {\n          entry.target.classList.add('is-revealed');\n          io.unobserve(entry.target);\n        }\n      });\n    }, { threshold: 0.1, rootMargin: '0px 0px -32px 0px' });\n    document.querySelectorAll('.js-reveal').forEach(function (el) { io.observe(el); });\n  }\n\n  // ---- CUSTOM CURSOR ----\n  function initCursor() {\n    if (window.matchMedia('(pointer: coarse)').matches) return;\n    var dot = document.getElementById('cursor-dot');\n    var ring = document.getElementById('cursor-ring');\n    if (!dot || !ring) return;\n    // Make sure the desktop cursor elements remain visible even if cached CSS is stale.\n    dot.style.position = 'fixed';\n    ring.style.position = 'fixed';\n    dot.style.display = 'block';\n    ring.style.display = 'block';\n    dot.style.visibility = 'visible';\n    ring.style.visibility = 'visible';\n    dot.style.opacity = '1';\n    ring.style.opacity = '1';\n    dot.style.pointerEvents = 'none';\n    ring.style.pointerEvents = 'none';\n    document.addEventListener('mousemove', function (e) {\n      dot.style.left = e.clientX + 'px';\n      dot.style.top = e.clientY + 'px';\n      ring.style.left = e.clientX + 'px';\n      ring.style.top = e.clientY + 'px';\n      var onDark = !!e.target.closest('.hero,.split-text,.newsletter-section,.stats-section,.testi-section,.marquee-wrap,.mobile-menu,.cart-drawer-head');\n      dot.classList.toggle('on-dark', onDark);\n      ring.classList.toggle('on-dark', onDark);\n    });\n    document.addEventListener('mousedown', function () { dot.classList.add('is-clicking'); });\n    document.addEventListener('mouseup', function () { dot.classList.remove('is-clicking'); });\n    document.addEventListener('mouseover', function (e) {\n      var isHoverable = !!e.target.closest('a,button,.prod-card,.cat-card,.lookbook-item,.style-preset-card,[data-cart-open]');\n      dot.classList.toggle('is-hovering', isHoverable);\n      ring.classList.toggle('is-hovering', isHoverable);\n    });\n  }\n\n  function enforceProductCardScale() {\n    if (window.innerWidth < 961 || !window.matchMedia('(pointer: fine)').matches) return;\n    document.querySelectorAll('.collection-page .prod-card, .search-page .prod-card, .cart-page .prod-card, .product-page .prod-card, .featured-section .prod-card').forEach(function (card) {\n      card.style.width = '100%';\n      card.style.maxWidth = 'none';\n      card.style.marginInline = '0';\n      card.style.justifySelf = 'stretch';\n    });\n  }\n\n  // ---- TESTIMONIALS SLIDER ----\n  function initTestiSlider() {\n    var slider   = document.getElementById('testi-slider');\n    var track    = document.getElementById('testi-track');\n    var dotsWrap = document.getElementById('testi-dots');\n    var prevBtn  = document.getElementById('testi-prev');\n    var nextBtn  = document.getElementById('testi-next');\n    if (!slider || !track) return;\n\n    var items   = Array.from(track.querySelectorAll('.testi-item'));\n    var total   = items.length;\n    if (total < 2) return;\n\n    var current    = 0;\n    var autoTimer  = null;\n    var touchStartX = 0;\n\n    // Build indicator dots\n    items.forEach(function (_, i) {\n      var dot = document.createElement('button');\n      dot.className = 'testi-dot' + (i === 0 ? ' is-active' : '');\n      dot.setAttribute('role', 'tab');\n      dot.setAttribute('aria-label', 'Go to review ' + (i + 1));\n      dot.addEventListener('click', function () { goTo(i); resetAuto(); });\n      dotsWrap.appendChild(dot);\n    });\n\n    // Initial aria for slides\n    items.forEach(function (item, i) {\n      item.setAttribute('aria-hidden', i === 0 ? 'false' : 'true');\n    });\n\n    function goTo(n) {\n      current = ((n % total) + total) % total;\n      track.style.transform = 'translateX(-' + (current * 100) + '%)';\n      var dots = dotsWrap.querySelectorAll('.testi-dot');\n      dots.forEach(function (d, i) { d.classList.toggle('is-active', i === current); });\n      items.forEach(function (item, i) {\n        item.setAttribute('aria-hidden', i === current ? 'false' : 'true');\n      });\n    }\n\n    function next() { goTo(current + 1); }\n    function prev() { goTo(current - 1); }\n\n    function resetAuto() {\n      clearInterval(autoTimer);\n      autoTimer = setInterval(next, 3000);\n    }\n\n    // Pause on hover / focus\n    slider.addEventListener('mouseenter', function () { clearInterval(autoTimer); });\n    slider.addEventListener('mouseleave', resetAuto);\n    slider.addEventListener('focusin',    function () { clearInterval(autoTimer); });\n    slider.addEventListener('focusout',   resetAuto);\n\n    // Touch swipe\n    slider.addEventListener('touchstart', function (e) {\n      touchStartX = e.changedTouches[0].clientX;\n    }, { passive: true });\n    slider.addEventListener('touchend', function (e) {\n      var dx = e.changedTouches[0].clientX - touchStartX;\n      if (Math.abs(dx) > 44) { dx < 0 ? next() : prev(); resetAuto(); }\n    }, { passive: true });\n\n    // Keyboard support on the slider container\n    slider.addEventListener('keydown', function (e) {\n      if (e.key === 'ArrowLeft')  { prev(); resetAuto(); }\n      if (e.key === 'ArrowRight') { next(); resetAuto(); }\n    });\n\n    if (prevBtn) prevBtn.addEventListener('click', function () { prev(); resetAuto(); });\n    if (nextBtn) nextBtn.addEventListener('click', function () { next(); resetAuto(); });\n\n    resetAuto();\n  }\n\n  document.addEventListener('shopify:section:load', function () {\n    deduplicateHomepageProducts();\n  });\n\n})();\n\n"],
  "mappings": "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",
  "names": []
}
