{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/suvorya.js?x=1790969802713"],
  "sourcesContent": ["/* Suvorya \u2014 theme behaviour: header scroll state, banner rotator,\n   nav overflow, dropdowns, product rails, card image cycling. */\n(function () {\n  'use strict';\n  var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  /* --- money: format cents using the shop's own money format ------------- */\n  // Mirrors Shopify's formatMoney so JS-updated prices match the server-\n  // rendered ones exactly (e.g. \"Rs. 549.00\"), instead of a hard-coded symbol.\n  function formatMoney(cents, format) {\n    format = format || window.svMoneyFormat || 'Rs. {{amount}}';\n    function withDelimiters(number, precision, thousands, decimal) {\n      thousands = thousands || ',';\n      decimal = decimal || '.';\n      if (isNaN(number) || number == null) return '0';\n      var fixed = (number / 100).toFixed(precision);\n      var parts = fixed.split('.');\n      var whole = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n      return parts[1] ? whole + decimal + parts[1] : whole;\n    }\n    var placeholder = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n    var m = format.match(placeholder);\n    var value;\n    switch (m ? m[1] : 'amount') {\n      case 'amount_no_decimals': value = withDelimiters(cents, 0); break;\n      case 'amount_with_comma_separator': value = withDelimiters(cents, 2, '.', ','); break;\n      case 'amount_no_decimals_with_comma_separator': value = withDelimiters(cents, 0, '.', ','); break;\n      case 'amount_with_apostrophe_separator': value = withDelimiters(cents, 2, \"'\", '.'); break;\n      default: value = withDelimiters(cents, 2);\n    }\n    return format.replace(placeholder, value);\n  }\n\n  /* --- fixed chrome heights -> CSS vars ---------------------------------- */\n  function measureChrome() {\n    var banner = document.querySelector('[data-sv-banner]');\n    var header = document.querySelector('[data-sv-header]');\n    var root = document.documentElement;\n    root.style.setProperty('--banner-h', banner ? Math.ceil(banner.offsetHeight) + 'px' : '0px');\n    if (header) root.style.setProperty('--header-h', Math.ceil(header.offsetHeight) + 'px');\n  }\n\n  /* --- header scroll state ---------------------------------------------- */\n  function initHeader() {\n    var header = document.querySelector('[data-sv-header]');\n    if (!header) return;\n    var transparent = header.hasAttribute('data-sv-transparent');\n    function apply() {\n      var on = !transparent || window.scrollY > 80;\n      header.classList.toggle('is-scrolled', on);\n    }\n    apply();\n    window.addEventListener('scroll', apply, { passive: true });\n\n    if ('ResizeObserver' in window) {\n      new ResizeObserver(measureChrome).observe(header);\n    }\n    initNavOverflow(header);\n    initDropdowns(header);\n  }\n\n  /* --- nav overflow into \"More\" ----------------------------------------- */\n  function initNavOverflow(header) {\n    var row = header.querySelector('[data-sv-row]');\n    var nav = header.querySelector('[data-sv-nav]');\n    var icons = header.querySelector('[data-sv-icons]');\n    var measure = header.querySelector('[data-sv-measure]');\n    var moreItem = header.querySelector('[data-sv-more]');\n    if (!row || !nav || !icons || !measure || !moreItem) return;\n\n    var items = Array.prototype.slice.call(nav.querySelectorAll('[data-sv-nav-item]'));\n    var overflowList = moreItem.querySelector('[data-sv-more-list]');\n    var ghosts = Array.prototype.slice.call(measure.querySelectorAll('[data-ghost]'));\n    var moreGhost = measure.querySelector('[data-ghost-more]');\n\n    function recompute() {\n      var gap = parseFloat(getComputedStyle(measure).gap) || 24;\n      var available = row.clientWidth - icons.offsetWidth - gap;\n      var moreWidth = (moreGhost ? moreGhost.offsetWidth : 40) + gap;\n      var total = 0, count = 0;\n      for (var i = 0; i < ghosts.length; i++) {\n        var w = ghosts[i].offsetWidth + (i > 0 ? gap : 0);\n        var reserve = (ghosts.length - 1 - i) > 0 ? moreWidth : 0;\n        if (total + w + reserve > available) break;\n        total += w; count++;\n      }\n      items.forEach(function (el, i) { el.hidden = i >= count; });\n      Array.prototype.slice.call(overflowList.children).forEach(function (el, i) {\n        el.hidden = i < count;\n      });\n      moreItem.hidden = count >= items.length;\n    }\n\n    recompute();\n    if ('ResizeObserver' in window) new ResizeObserver(recompute).observe(row);\n    window.addEventListener('resize', recompute);\n  }\n\n  /* --- dropdown panels -------------------------------------------------- */\n  function initDropdowns(scope) {\n    var wraps = Array.prototype.slice.call(scope.querySelectorAll('[data-sv-dropdown]'));\n    wraps.forEach(function (wrap) {\n      var trigger = wrap.querySelector('[data-sv-dropdown-trigger]');\n      if (!trigger) return;\n      trigger.addEventListener('click', function (e) {\n        e.preventDefault();\n        var open = wrap.classList.contains('is-open');\n        wraps.forEach(function (w) { w.classList.remove('is-open'); });\n        wrap.classList.toggle('is-open', !open);\n        trigger.setAttribute('aria-expanded', String(!open));\n      });\n    });\n    document.addEventListener('click', function (e) {\n      wraps.forEach(function (w) {\n        if (!w.contains(e.target)) {\n          w.classList.remove('is-open');\n          var t = w.querySelector('[data-sv-dropdown-trigger]');\n          if (t) t.setAttribute('aria-expanded', 'false');\n        }\n      });\n    });\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape') wraps.forEach(function (w) { w.classList.remove('is-open'); });\n    });\n  }\n\n  /* --- mobile nav drawer -------------------------------------------------- */\n  function initMobileMenu() {\n    var toggle = document.querySelector('[data-sv-menu-toggle]');\n    var nav = document.querySelector('[data-sv-mobile-nav]');\n    if (!toggle || !nav) return;\n    var closeBtn = nav.querySelector('[data-sv-mobile-close]');\n    var scrim = nav.querySelector('[data-sv-mobile-scrim]');\n\n    function open() {\n      nav.classList.add('is-open');\n      toggle.setAttribute('aria-expanded', 'true');\n      document.body.style.overflow = 'hidden';\n    }\n    function close() {\n      nav.classList.remove('is-open');\n      toggle.setAttribute('aria-expanded', 'false');\n      document.body.style.overflow = '';\n    }\n\n    toggle.addEventListener('click', function () {\n      if (nav.classList.contains('is-open')) close(); else open();\n    });\n    if (closeBtn) closeBtn.addEventListener('click', close);\n    if (scrim) scrim.addEventListener('click', close);\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape') close();\n    });\n    window.addEventListener('resize', function () {\n      if (window.innerWidth > 749) close();\n    });\n\n    Array.prototype.slice.call(nav.querySelectorAll('[data-sv-mobile-trigger]')).forEach(function (trigger) {\n      var sub = trigger.parentElement.querySelector('[data-sv-mobile-sub]');\n      if (!sub) return;\n      trigger.addEventListener('click', function () {\n        var isOpen = trigger.getAttribute('aria-expanded') === 'true';\n        trigger.setAttribute('aria-expanded', String(!isOpen));\n        sub.style.maxHeight = isOpen ? '' : sub.scrollHeight + 'px';\n      });\n    });\n  }\n\n  /* --- announcement bar rotator ----------------------------------------- */\n  var SV_BANNER_DISMISS_KEY = 'sv-banner-dismissed';\n\n  function initBanner() {\n    var banner = document.querySelector('[data-sv-banner]');\n    if (!banner) return;\n\n    try {\n      if (sessionStorage.getItem(SV_BANNER_DISMISS_KEY) === '1') {\n        banner.remove();\n        measureChrome();\n        return;\n      }\n    } catch (e) { /* storage unavailable \u2014 banner just stays visible */ }\n\n    var closeBtn = banner.querySelector('[data-sv-banner-close]');\n    if (closeBtn) {\n      closeBtn.addEventListener('click', function () {\n        banner.remove();\n        measureChrome();\n        try { sessionStorage.setItem(SV_BANNER_DISMISS_KEY, '1'); } catch (e) {}\n      });\n    }\n\n    var msgs = Array.prototype.slice.call(banner.querySelectorAll('[data-sv-msg]'));\n    var confetti = banner.querySelector('[data-sv-confetti]');\n    if (!msgs.length) return;\n    var i = 0;\n    var interval = parseInt(banner.getAttribute('data-interval'), 10) || 5500;\n    var timer;\n\n    function paint() {\n      msgs.forEach(function (m, n) {\n        m.style.transform = 'translateY(' + ((n - i) * 100) + '%)';\n      });\n      if (confetti) {\n        confetti.classList.toggle('is-on', msgs[i].getAttribute('data-confetti') === 'true');\n      }\n    }\n    function start() {\n      if (msgs.length < 2 || timer) return;\n      timer = setInterval(function () { i = (i + 1) % msgs.length; paint(); }, interval);\n    }\n    function stop() {\n      clearInterval(timer);\n      timer = null;\n    }\n    paint();\n    start();\n\n    // Pause on hover/focus so a message isn't cut off mid-read.\n    banner.addEventListener('mouseenter', stop);\n    banner.addEventListener('mouseleave', start);\n    banner.addEventListener('focusin', stop);\n    banner.addEventListener('focusout', start);\n\n    // confetti pieces are generated here so the markup stays clean\n    if (confetti && !reduce) {\n      // pastel mix: pink, mint, sky, lavender, butter, peach, lilac (7 colours so they don't lock to a shape)\n      var colors = ['#F9B8CF', '#B8EBD6', '#A9D8F5', '#CDB8F7', '#FFF0A6', '#FFCBA8', '#E9B8F2'];\n      var shapes = [[3, 8, '0'], [5, 5, '50%'], [6, 3, '0']];\n      var frag = document.createDocumentFragment();\n      for (var n = 0; n < 52; n++) {\n        var piece = document.createElement('i');\n        var s = shapes[n % 3];\n        piece.style.left = (0.8 + n * 1.93).toFixed(1) + '%';\n        piece.style.width = s[0] + 'px';\n        piece.style.height = s[1] + 'px';\n        piece.style.background = colors[n % colors.length];\n        piece.style.setProperty('border-radius', s[2], 'important');\n        piece.style.animationDuration = (3.2 + (n % 6) * 0.5).toFixed(2) + 's';\n        piece.style.animationDelay = ((n * 0.29) % 5).toFixed(2) + 's';\n        frag.appendChild(piece);\n      }\n      confetti.appendChild(frag);\n    }\n  }\n\n  /* --- product rails ---------------------------------------------------- */\n  function initRails() {\n    Array.prototype.slice.call(document.querySelectorAll('[data-sv-rail-wrap]')).forEach(function (wrap) {\n      var rail = wrap.querySelector('[data-sv-rail]');\n      var prev = wrap.querySelector('[data-sv-prev]');\n      var next = wrap.querySelector('[data-sv-next]');\n      var thumb = wrap.querySelector('[data-sv-thumb]');\n      if (!rail) return;\n      var anim;\n\n      function measure() {\n        var max = rail.scrollWidth - rail.clientWidth;\n        var ratio = rail.scrollWidth ? Math.min(1, rail.clientWidth / rail.scrollWidth) : 1;\n        var progress = max > 0 ? rail.scrollLeft / max : 0;\n        if (thumb) {\n          thumb.style.width = (ratio * 100).toFixed(2) + '%';\n          thumb.style.left = (progress * (1 - ratio) * 100).toFixed(2) + '%';\n        }\n        if (prev) prev.classList.toggle('is-available', rail.scrollLeft > 2);\n        if (next) next.classList.toggle('is-available', rail.scrollLeft < max - 2);\n      }\n\n      function step(dir) {\n        var card = rail.firstElementChild;\n        var gap = parseFloat(getComputedStyle(rail).columnGap || getComputedStyle(rail).gap) || 20;\n        var pitch = card ? card.getBoundingClientRect().width + gap : rail.clientWidth * 0.75;\n        var steps = Math.max(1, Math.floor((rail.clientWidth * 0.8) / pitch));\n        var max = rail.scrollWidth - rail.clientWidth;\n        var from = rail.scrollLeft;\n        var target = Math.max(0, Math.min(max, Math.round((from + dir * steps * pitch) / pitch) * pitch));\n        if (reduce) { rail.scrollLeft = target; measure(); return; }\n        cancelAnimationFrame(anim);\n        var start = performance.now(), dur = 420;\n        (function tick(now) {\n          var p = Math.min(1, ((now || start) - start) / dur);\n          var e = p < 0.5 ? 2 * p * p : 1 - Math.pow(-2 * p + 2, 2) / 2;\n          rail.scrollLeft = from + (target - from) * e;\n          measure();\n          if (p < 1) anim = requestAnimationFrame(tick);\n        })(start);\n      }\n\n      if (prev) prev.addEventListener('click', function () { step(-1); });\n      if (next) next.addEventListener('click', function () { step(1); });\n      rail.addEventListener('scroll', measure, { passive: true });\n      window.addEventListener('resize', measure);\n      requestAnimationFrame(measure);\n    });\n  }\n\n  /* --- card image cycling on hover -------------------------------------- */\n  function initCardHover() {\n    Array.prototype.slice.call(document.querySelectorAll('[data-sv-slide]')).forEach(function (media) {\n      var imgs = Array.prototype.slice.call(media.querySelectorAll('img'));\n      if (imgs.length < 2) return;\n      var i = 0, timer, loaded = false;\n      function show(n) {\n        imgs.forEach(function (img, k) { img.classList.toggle('is-active', k === n); });\n      }\n      /* The 2nd/3rd photos ship without a src (see snippets/product-card.liquid); fetch them on the first hover. */\n      function loadExtras() {\n        if (loaded) return;\n        loaded = true;\n        imgs.forEach(function (img) {\n          var ds = img.getAttribute('data-srcset'), s = img.getAttribute('data-src');\n          if (ds) img.setAttribute('srcset', ds);\n          if (s) img.setAttribute('src', s);\n        });\n      }\n      var hovering = false;\n      function cycle() {\n        clearInterval(timer);\n        i = (i + 1) % imgs.length;\n        show(i);\n        timer = setInterval(function () { i = (i + 1) % imgs.length; show(i); }, 5000);\n      }\n      media.closest('.sv-card').addEventListener('mouseenter', function () {\n        if (reduce) return;\n        hovering = true;\n        var first = !loaded;\n        loadExtras();\n        // First hover: show the 2nd photo only once it has arrived, so the frame never flashes empty.\n        if (first && !imgs[1].complete) {\n          imgs[1].addEventListener('load', function () { if (hovering) cycle(); }, { once: true });\n          return;\n        }\n        cycle();\n      });\n      media.closest('.sv-card').addEventListener('mouseleave', function () {\n        hovering = false;\n        clearInterval(timer); i = 0; show(0);\n      });\n    });\n  }\n\n\n  /* --- product gallery hover zoom ---------------------------------------\n     The fashion-retail pattern (Zara, COS, Net-a-Porter): the photo stays in\n     its frame and magnifies in place, panning with a slight glide as the\n     cursor moves; a click still opens the lightbox. The 2000px original is\n     fetched on first hover so the magnified view is crisp, not upscaled.\n     Fine-pointer/hover devices only \u2014 touch keeps tap-to-open. */\n  function initHoverZoom() {\n    if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n    var shots = Array.prototype.slice.call(document.querySelectorAll('.sv-pdp__shot'));\n    shots.forEach(function (shot) {\n      var img = shot.querySelector('[data-sv-zoom]');\n      if (!img) return;\n      var tx = 50, ty = 50, cx = 50, cy = 50, raf = 0, swapped = false;\n\n      function pos(e) {\n        var r = shot.getBoundingClientRect();\n        tx = Math.max(0, Math.min(100, ((e.clientX - r.left) / r.width) * 100));\n        ty = Math.max(0, Math.min(100, ((e.clientY - r.top) / r.height) * 100));\n      }\n      function paint() {\n        cx += (tx - cx) * (reduce ? 1 : 0.16);\n        cy += (ty - cy) * (reduce ? 1 : 0.16);\n        img.style.transformOrigin = cx.toFixed(2) + '% ' + cy.toFixed(2) + '%';\n        if (shot.classList.contains('is-zooming') && (Math.abs(tx - cx) > 0.05 || Math.abs(ty - cy) > 0.05)) {\n          raf = requestAnimationFrame(paint);\n        } else {\n          raf = 0;\n        }\n      }\n      function upgrade() {\n        var full = img.getAttribute('data-full');\n        if (swapped || !full) return;\n        swapped = true;\n        var hi = new Image();\n        hi.onload = function () { img.removeAttribute('srcset'); img.src = full; };\n        hi.src = full;\n      }\n\n      shot.addEventListener('mouseenter', function (e) {\n        pos(e); cx = tx; cy = ty;\n        img.style.transformOrigin = cx.toFixed(2) + '% ' + cy.toFixed(2) + '%';\n        shot.classList.add('is-zooming');\n        upgrade();\n      });\n      shot.addEventListener('mousemove', function (e) {\n        pos(e);\n        if (!raf) raf = requestAnimationFrame(paint);\n      });\n      shot.addEventListener('mouseleave', function () {\n        shot.classList.remove('is-zooming');\n      });\n    });\n  }\n\n  /* --- variant picker --------------------------------------------------- */\n  function initVariants() {\n    var form = document.querySelector('#sv-product-form');\n    var data = document.querySelector('[data-sv-variants]');\n    if (!form || !data) return;\n    var variants;\n    try { variants = JSON.parse(data.textContent); } catch (e) { return; }\n\n    var idField = form.querySelector('[data-sv-variant-id]');\n    var atc = form.querySelector('[data-sv-atc]');\n    var atcLabel = form.querySelector('[data-sv-atc-label]');\n    var atcPrice = form.querySelector('[data-sv-atc-price]');\n    var buynow = form.querySelector('[data-sv-buynow]');\n    var buynowLabel = form.querySelector('[data-sv-buynow-label]');\n    var buynowPrice = form.querySelector('[data-sv-buynow-price]');\n    var priceEl = document.querySelector('[data-sv-price]');\n    var inputs = Array.prototype.slice.call(form.querySelectorAll('[data-sv-variant-input]'));\n    var addLabel = (atc && atc.getAttribute('data-add-label')) || 'Add To Bag';\n    var soldLabel = (atc && atc.getAttribute('data-soldout-label')) || 'Sold out';\n    var buyLabel = (buynow && buynow.getAttribute('data-buynow-label')) || 'Buy Now';\n    var buySoldLabel = (buynow && buynow.getAttribute('data-soldout-label')) || 'Sold out';\n    var optionCount = 0;\n    inputs.forEach(function (i) {\n      optionCount = Math.max(optionCount, parseInt(i.getAttribute('data-position'), 10) || 1);\n    });\n\n    // Which option position is the swatch/color one, if any \u2014 used to filter\n    // the main gallery down to just that color's photos.\n    var colorOptWrap = document.querySelector('[data-sv-color-option]');\n    var colorOptIndex = colorOptWrap ? parseInt(colorOptWrap.getAttribute('data-sv-option-index'), 10) : -1;\n    var galleryShots = Array.prototype.slice.call(document.querySelectorAll('[data-sv-shot]'));\n\n    var money = formatMoney;\n\n    // current selection as an array indexed by option position\n    function chosen() {\n      var out = new Array(optionCount);\n      inputs.forEach(function (i) {\n        if (i.checked) out[(parseInt(i.getAttribute('data-position'), 10) || 1) - 1] = i.value;\n      });\n      return out;\n    }\n\n    function find(vals) {\n      for (var n = 0; n < variants.length; n++) {\n        var ok = true;\n        for (var k = 0; k < vals.length; k++) {\n          if (vals[k] !== undefined && variants[n].options[k] !== vals[k]) { ok = false; break; }\n        }\n        if (ok) return variants[n];\n      }\n      return null;\n    }\n\n    // A Shopify variant can only ever have ONE photo tagged to it directly\n    // (Admin > Media variant assignment is one-photo-per-variant, confirmed\n    // against the API) \u2014 so a second photo for the same color can't be\n    // tagged the same way. For that second-and-onward photo, tag it instead\n    // by putting the color name in its ALT TEXT (Admin > Media > click the\n    // photo > Alt text), e.g. \"Black, worn\". The filter below honors both:\n    // a photo wins if EITHER its variant tag matches the selected color, OR\n    // (when it has no variant tag) its alt text names that color and no\n    // other color. A photo naming no color at all is treated as shared and\n    // always shown; if a color ends up with nothing visible, show\n    // everything rather than leave the gallery empty.\n    var allColorValues = [];\n    if (colorOptIndex >= 0) {\n      variants.forEach(function (variant) {\n        var val = variant.options[colorOptIndex];\n        if (val && allColorValues.indexOf(val) === -1) allColorValues.push(val);\n      });\n    }\n\n    function filterGallery(vals) {\n      if (colorOptIndex < 0 || !galleryShots.length) return;\n      var colorValue = vals[colorOptIndex];\n      var colorValueLower = (colorValue || '').toLowerCase();\n      var matchingVariantIds = variants\n        .filter(function (variant) { return variant.options[colorOptIndex] === colorValue; })\n        .map(function (variant) { return variant.id; });\n\n      var anyVisible = false;\n      galleryShots.forEach(function (shot) {\n        var raw = shot.getAttribute('data-variant-ids') || '';\n        var shotVariantIds = raw.split(',').filter(Boolean).map(Number);\n        var show;\n        if (shotVariantIds.length > 0) {\n          show = shotVariantIds.some(function (id) { return matchingVariantIds.indexOf(id) > -1; });\n        } else {\n          var img = shot.querySelector('img');\n          var alt = (img && img.alt || '').toLowerCase();\n          var mentionsSelected = alt.indexOf(colorValueLower) > -1;\n          var mentionsOtherColor = allColorValues.some(function (v) {\n            return v !== colorValue && alt.indexOf(v.toLowerCase()) > -1;\n          });\n          show = mentionsSelected || !mentionsOtherColor;\n        }\n        shot.hidden = !show;\n        if (show) anyVisible = true;\n      });\n\n      if (!anyVisible) {\n        galleryShots.forEach(function (shot) { shot.hidden = false; });\n      }\n    }\n\n    function update() {\n      var vals = chosen();\n      var v = find(vals);\n      if (!v) return;\n\n      if (idField) idField.value = v.id;\n      if (priceEl) priceEl.textContent = money(v.price);\n      if (atcPrice) atcPrice.textContent = money(v.price);\n      if (atc) atc.disabled = !v.available;\n      if (atcLabel) atcLabel.textContent = v.available ? addLabel : soldLabel;\n      if (buynowPrice) buynowPrice.textContent = money(v.price);\n      if (buynow) buynow.disabled = !v.available;\n      if (buynowLabel) buynowLabel.textContent = v.available ? buyLabel : buySoldLabel;\n\n      Array.prototype.slice.call(form.querySelectorAll('[data-sv-selected]')).forEach(function (el) {\n        var idx = parseInt(el.getAttribute('data-sv-selected'), 10);\n        el.textContent = v.options[idx] || '';\n      });\n\n      filterGallery(vals);\n\n      // strike through option values that have no available variant\n      inputs.forEach(function (i) {\n        var label = i.nextElementSibling;\n        if (!label || !label.classList.contains('sv-opt__pill')) return;\n        var trial = chosen();\n        trial[(parseInt(i.getAttribute('data-position'), 10) || 1) - 1] = i.value;\n        var tv = find(trial);\n        label.classList.toggle('is-unavailable', !tv || !tv.available);\n      });\n\n      if (window.history && history.replaceState) {\n        var u = new URL(window.location.href);\n        u.searchParams.set('variant', v.id);\n        history.replaceState({}, '', u.toString());\n      }\n    }\n\n    inputs.forEach(function (i) { i.addEventListener('change', update); });\n    update();\n  }\n\n  /* --- product gallery lightbox ----------------------------------------- */\n  function initZoom() {\n    var modal = document.querySelector('[data-sv-zoom-modal]');\n    var gallery = document.querySelector('[data-sv-gallery]');\n    if (!modal || !gallery) return;\n\n    if (!gallery.querySelector('[data-sv-zoom]')) return;\n    var img = modal.querySelector('[data-sv-zoom-img]');\n    var count = modal.querySelector('[data-sv-zoom-count]');\n    var shots = [];\n    var i = 0;\n\n    // Recomputed on every open \u2014 a color swatch selection can hide/show\n    // gallery shots, so the zoom modal must only ever step through\n    // whatever's currently visible in the main gallery, not a stale list.\n    function visibleShots() {\n      return Array.prototype.slice.call(gallery.querySelectorAll('[data-sv-zoom]')).filter(function (el) {\n        var shot = el.closest('[data-sv-shot]');\n        return !shot || !shot.hidden;\n      });\n    }\n\n    function show(n) {\n      if (!shots.length) return;\n      i = (n + shots.length) % shots.length;\n      img.src = shots[i].getAttribute('data-full') || shots[i].src;\n      img.alt = shots[i].alt || '';\n      img.classList.remove('is-zoomed');\n      img.style.transformOrigin = '50% 50%';\n      if (count) count.textContent = (i + 1) + ' / ' + shots.length;\n    }\n    function open(startEl) {\n      shots = visibleShots();\n      var n = shots.indexOf(startEl);\n      show(n < 0 ? 0 : n);\n      modal.hidden = false;\n      document.body.style.overflow = 'hidden';\n    }\n    function close() { modal.hidden = true; document.body.style.overflow = ''; img.classList.remove('is-zoomed'); }\n\n    gallery.addEventListener('click', function (e) {\n      var el = e.target.closest('[data-sv-zoom]');\n      if (!el) return;\n      var shot = el.closest('[data-sv-shot]');\n      if (shot && shot.hidden) return;\n      open(el);\n    });\n    modal.querySelector('[data-sv-zoom-close]').addEventListener('click', close);\n    modal.querySelector('[data-sv-zoom-prev]').addEventListener('click', function (e) { e.stopPropagation(); show(i - 1); });\n    modal.querySelector('[data-sv-zoom-next]').addEventListener('click', function (e) { e.stopPropagation(); show(i + 1); });\n    modal.addEventListener('click', function (e) { if (e.target === modal) close(); });\n\n    img.addEventListener('click', function (e) {\n      e.stopPropagation();\n      img.classList.toggle('is-zoomed');\n    });\n    img.addEventListener('mousemove', function (e) {\n      if (!img.classList.contains('is-zoomed')) return;\n      var r = img.getBoundingClientRect();\n      img.style.transformOrigin =\n        (((e.clientX - r.left) / r.width) * 100).toFixed(1) + '% ' +\n        (((e.clientY - r.top) / r.height) * 100).toFixed(1) + '%';\n    });\n    document.addEventListener('keydown', function (e) {\n      if (modal.hidden) return;\n      if (e.key === 'Escape') close();\n      if (e.key === 'ArrowRight') show(i + 1);\n      if (e.key === 'ArrowLeft') show(i - 1);\n    });\n  }\n\n  /* --- product recommendations ------------------------------------------ */\n  function initRecs() {\n    var el = document.querySelector('[data-sv-recs]');\n    if (!el) return;\n    var url = el.getAttribute('data-url');\n    if (!url) return;\n    fetch(url)\n      .then(function (r) { return r.text(); })\n      .then(function (html) {\n        var doc = new DOMParser().parseFromString(html, 'text/html');\n        var fresh = doc.querySelector('.sv-recs__grid');\n        var mine = el.querySelector('.sv-recs__grid');\n        if (fresh && mine && fresh.children.length) {\n          mine.innerHTML = fresh.innerHTML;\n          initCardHover();\n        }\n      })\n      .catch(function () {});\n  }\n\n  /* --- cart quantity capped to available stock -------------------------- */\n  function initCartStockLimits() {\n    Array.prototype.slice.call(document.querySelectorAll('[data-sv-max-qty]')).forEach(function (input) {\n      var max = parseInt(input.getAttribute('data-sv-max-qty'), 10);\n      var msg = input.parentElement.querySelector('[data-sv-stock-msg]');\n      if (!max || !msg) return;\n\n      function enforce() {\n        var val = parseInt(input.value, 10);\n        if (!isNaN(val) && val > max) {\n          input.value = max;\n          input.classList.add('is-capped');\n          msg.hidden = false;\n        } else {\n          input.classList.remove('is-capped');\n          msg.hidden = true;\n        }\n      }\n      input.addEventListener('input', enforce);\n      input.addEventListener('change', enforce);\n    });\n  }\n\n  /* --- cart: update quantity + subtotal live, no page reload ------------- */\n  function initCartAjaxUpdate() {\n    var subtotalEl = document.querySelector('[data-sv-cart-subtotal]');\n    var inputs = Array.prototype.slice.call(document.querySelectorAll('[data-sv-qty-input]'));\n    if (!subtotalEl || !inputs.length) return;\n\n    var money = formatMoney;\n\n    function updateQuantity(input) {\n      var key = input.getAttribute('data-sv-item-key');\n      var qty = parseInt(input.value, 10);\n      if (isNaN(qty) || qty < 0) return;\n\n      var requestId = (input._svQtyReqId = (input._svQtyReqId || 0) + 1);\n\n      fetch('/cart/change.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n        body: JSON.stringify({ id: key, quantity: qty })\n      })\n        .then(function (r) { return r.json(); })\n        .then(function (cart) {\n          // Ignore this response if a newer request for the same input has\n          // since been sent \u2014 otherwise an out-of-order response can flash\n          // a stale subtotal or, worse, remove a row that is still in the cart.\n          if (input._svQtyReqId !== requestId) return;\n\n          subtotalEl.textContent = money(cart.total_price);\n\n          var discEl = document.querySelector('[data-sv-cart-discount]');\n          var noteEl = document.querySelector('[data-sv-cart-note]');\n          if (discEl && noteEl) {\n            var saved = cart.total_discount || 0;\n            var apps = cart.cart_level_discount_applications || [];\n            var savedEl = discEl.querySelector('[data-sv-cart-saved]');\n            var titleEl = discEl.querySelector('[data-sv-cart-disc-title]');\n            if (savedEl) savedEl.textContent = money(saved);\n            if (titleEl && apps[0] && apps[0].title) titleEl.textContent = apps[0].title;\n            discEl.hidden = saved <= 0;\n            noteEl.hidden = saved > 0;\n          }\n\n          if (cart.item_count === 0) {\n            window.location.reload();\n            return;\n          }\n\n          if (qty === 0) {\n            var row = input.closest('.sv-cart-item');\n            if (row) row.remove();\n          }\n        })\n        .catch(function () {\n          // Silently ignore \u2014 the input keeps its value, and Checkout still\n          // submits it since the underlying form field is unchanged.\n        });\n    }\n\n    inputs.forEach(function (input) {\n      input.addEventListener('input', function () {\n        clearTimeout(input._svQtyTimer);\n        input._svQtyTimer = setTimeout(function () { updateQuantity(input); }, 400);\n      });\n    });\n  }\n\n  /* --- product page: live \"order within X to get it tomorrow\" countdown -\n     Counts down to a daily cutoff in IST (India has no DST, so a fixed\n     +5:30 read via Intl is safe year-round) and hides itself, or swaps to\n     an after-cutoff message, once that time passes each day. */\n  function initDeliveryCountdown() {\n    var els = Array.prototype.slice.call(document.querySelectorAll('[data-sv-countdown]'));\n    if (!els.length) return;\n\n    function istNow() {\n      var parts = new Intl.DateTimeFormat('en-US', {\n        timeZone: 'Asia/Kolkata', hour12: false,\n        year: 'numeric', month: '2-digit', day: '2-digit',\n        hour: '2-digit', minute: '2-digit', second: '2-digit'\n      }).formatToParts(new Date());\n      var p = {};\n      parts.forEach(function (part) { p[part.type] = part.value; });\n      var hour = parseInt(p.hour, 10);\n      if (hour === 24) hour = 0;\n      return new Date(parseInt(p.year, 10), parseInt(p.month, 10) - 1, parseInt(p.day, 10), hour, parseInt(p.minute, 10), parseInt(p.second, 10));\n    }\n\n    function tick(el) {\n      var textEl = el.querySelector('[data-sv-countdown-text]');\n      if (!textEl) return;\n\n      var cutoffHour = parseInt(el.getAttribute('data-cutoff-hour'), 10) || 0;\n      var cutoffMinute = parseInt(el.getAttribute('data-cutoff-minute'), 10) || 0;\n      var beforeText = el.getAttribute('data-before-text') || '';\n      var afterText = el.getAttribute('data-after-text') || '';\n\n      var now = istNow();\n      var cutoff = new Date(now.getFullYear(), now.getMonth(), now.getDate(), cutoffHour, cutoffMinute, 0);\n\n      if (now >= cutoff) {\n        if (!afterText) { el.hidden = true; return; }\n        el.hidden = false;\n        textEl.textContent = afterText;\n        return;\n      }\n\n      el.hidden = false;\n      var totalMinutes = Math.ceil((cutoff - now) / 60000);\n      var hours = Math.floor(totalMinutes / 60);\n      var minutes = totalMinutes % 60;\n      var timer = hours > 0 ? (hours + 'h ' + minutes + 'm') : (minutes + 'm');\n      textEl.textContent = beforeText.replace('{timer}', timer);\n    }\n\n    els.forEach(function (el) {\n      tick(el);\n      setInterval(function () { tick(el); }, 30000);\n    });\n  }\n\n  /* --- Buy Now: add to cart, then skip straight to checkout -------------- */\n  function initBuyNow() {\n    var btn = document.querySelector('[data-sv-buynow]');\n    var form = document.querySelector('#sv-product-form');\n    if (!btn || !form) return;\n    var idField = form.querySelector('[data-sv-variant-id]');\n    var errorEl = document.querySelector('[data-sv-buynow-error]');\n    var labelEl = btn.querySelector('[data-sv-buynow-label]');\n    var defaultLabel = labelEl ? labelEl.textContent : 'Buy Now';\n\n    btn.addEventListener('click', function () {\n      if (btn.disabled || !idField || !idField.value) return;\n      btn.disabled = true;\n      if (errorEl) { errorEl.hidden = true; errorEl.textContent = ''; }\n      if (labelEl) labelEl.textContent = 'Adding\u2026';\n\n      fetch('/cart/add.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n        body: JSON.stringify({ items: [{ id: idField.value, quantity: 1 }] })\n      })\n        .then(function (r) { return r.json().then(function (data) { return { ok: r.ok, data: data }; }); })\n        .then(function (res) {\n          if (!res.ok) throw new Error((res.data && res.data.description) || 'Could not add this item to your bag.');\n          window.location.href = '/discount/FIRST10?redirect=/checkout';\n        })\n        .catch(function (err) {\n          btn.disabled = false;\n          if (labelEl) labelEl.textContent = defaultLabel;\n          if (errorEl) { errorEl.textContent = err.message || 'Something went wrong. Please try again.'; errorEl.hidden = false; }\n        });\n    });\n  }\n\n  /* --- pincode delivery check --------------------------------------------\n     Shared by the product page and cart page (any [data-sv-pincode] block).\n     The pincode is cached in localStorage and synced to the Shopify cart as\n     a real cart attribute (attributes.pincode), so it's saved with the order\n     and visible in Admin \u2014 that part works today, no backend required.\n\n     The delivery-date estimate itself needs a live courier lookup\n     (Shiprocket/Bluedart), and their API keys can never live in this\n     client-side file. Point Theme settings -> Delivery estimate ->\n     \"Delivery estimate API endpoint\" at your own backend (a serverless\n     function or app that holds the real key and calls the courier API).\n     Contract this code expects from that endpoint:\n       GET {endpoint}?pincode=560001\n       200 JSON: {\"serviceable\":true,\"days\":4,\"message\":\"Usually delivered in 4 days\"}\n       or:       {\"serviceable\":false,\"message\":\"Not serviceable to this pincode\"}\n     Until that endpoint exists, checking a pincode still validates it,\n     caches it, and saves it to the cart \u2014 it just can't show a real date. */\n  var PINCODE_STORAGE_KEY = 'sv_pincode';\n  var PINCODE_PATTERN = /^[1-9][0-9]{5}$/; // 6-digit Indian PIN, doesn't start with 0\n\n  function getCachedPincode() {\n    try { return localStorage.getItem(PINCODE_STORAGE_KEY) || ''; } catch (e) { return ''; }\n  }\n  function setCachedPincode(value) {\n    try { localStorage.setItem(PINCODE_STORAGE_KEY, value); } catch (e) {}\n  }\n  function syncPincodeToCart(value) {\n    fetch('/cart/update.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ attributes: { pincode: value } })\n    }).catch(function () {});\n  }\n  function setPincodeResult(result, text, state) {\n    result.textContent = text;\n    result.setAttribute('data-state', state);\n  }\n  function checkDelivery(root) {\n    var input = root.querySelector('[data-sv-pincode-input]');\n    var result = root.querySelector('[data-sv-pincode-result]');\n    var btn = root.querySelector('[data-sv-pincode-check]');\n    var endpoint = (root.getAttribute('data-endpoint') || '').trim();\n    var value = (input.value || '').trim();\n\n    if (!PINCODE_PATTERN.test(value)) {\n      setPincodeResult(result, 'Enter a valid 6-digit pincode.', 'error');\n      return;\n    }\n\n    setCachedPincode(value);\n    syncPincodeToCart(value);\n\n    if (!endpoint) {\n      setPincodeResult(result, \"We'll confirm the exact delivery date at checkout.\", 'neutral');\n      return;\n    }\n\n    if (btn) btn.disabled = true;\n    setPincodeResult(result, 'Checking\u2026', 'neutral');\n\n    var url = endpoint + (endpoint.indexOf('?') > -1 ? '&' : '?') + 'pincode=' + encodeURIComponent(value);\n    fetch(url)\n      .then(function (r) { if (!r.ok) throw new Error('bad status'); return r.json(); })\n      .then(function (data) {\n        if (data && data.serviceable === false) {\n          setPincodeResult(result, data.message || \"Sorry, we don't currently deliver to this pincode.\", 'error');\n        } else if (data && data.message) {\n          setPincodeResult(result, data.message, 'success');\n        } else if (data && data.days) {\n          setPincodeResult(result, 'Usually delivered in ' + data.days + ' day' + (data.days === 1 ? '' : 's') + '.', 'success');\n        } else {\n          setPincodeResult(result, 'Delivery available to this pincode.', 'success');\n        }\n      })\n      .catch(function () {\n        setPincodeResult(result, \"Couldn't check delivery right now \u2014 you can confirm it at checkout.\", 'neutral');\n      })\n      .finally(function () {\n        if (btn) btn.disabled = false;\n      });\n  }\n  /* --- wishlist: saved products, no app needed --------------------------\n     Kept as a list of product handles in localStorage \u2014 the same pattern as\n     the remembered pincode. Works instantly for every visitor, logged in or\n     not; the one honest trade-off is it's tied to this browser, not their\n     account, so it won't follow them to a different device. */\n  var WISHLIST_STORAGE_KEY = 'sv_wishlist';\n\n  function getWishlist() {\n    try {\n      var raw = localStorage.getItem(WISHLIST_STORAGE_KEY);\n      var list = raw ? JSON.parse(raw) : [];\n      return Array.isArray(list) ? list : [];\n    } catch (e) { return []; }\n  }\n  function saveWishlist(list) {\n    try { localStorage.setItem(WISHLIST_STORAGE_KEY, JSON.stringify(list)); } catch (e) {}\n  }\n  function isWishlisted(handle) { return getWishlist().indexOf(handle) > -1; }\n  function toggleWishlist(handle) {\n    var list = getWishlist();\n    var i = list.indexOf(handle);\n    if (i > -1) { list.splice(i, 1); } else { list.push(handle); }\n    saveWishlist(list);\n    return i === -1; // true = just added\n  }\n\n  function updateWishlistButtons() {\n    var list = getWishlist();\n    Array.prototype.slice.call(document.querySelectorAll('[data-sv-wishlist-toggle]')).forEach(function (btn) {\n      var on = list.indexOf(btn.getAttribute('data-product-handle')) > -1;\n      btn.classList.toggle('is-active', on);\n      btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n    });\n    var badge = document.querySelector('[data-sv-wishlist-count]');\n    if (badge) {\n      if (list.length > 0) { badge.textContent = list.length; badge.hidden = false; }\n      else { badge.hidden = true; badge.textContent = ''; }\n    }\n  }\n\n  function initWishlistButtons() {\n    // No early-return-if-no-hearts-on-page guard here on purpose: this also\n    // updates the header's saved-count badge, which must stay correct even\n    // on pages with no product cards at all \u2014 the wishlist page itself,\n    // the cart, a plain info page. updateWishlistButtons() is a no-op loop\n    // over an empty NodeList when there truly are no heart buttons, so\n    // running it unconditionally costs nothing.\n    updateWishlistButtons();\n    document.addEventListener('click', function (e) {\n      var btn = e.target.closest && e.target.closest('[data-sv-wishlist-toggle]');\n      if (!btn) return;\n      e.preventDefault();\n      e.stopPropagation();\n      toggleWishlist(btn.getAttribute('data-product-handle'));\n      updateWishlistButtons();\n      renderWishlistPage();\n    });\n  }\n\n  /* --- wishlist page: fetch each saved handle's live data and render ---- */\n  function renderWishlistPage() {\n    var page = document.querySelector('[data-sv-wishlist-page]');\n    if (!page) return;\n    var grid = page.querySelector('[data-sv-wishlist-grid]');\n    var empty = page.querySelector('[data-sv-wishlist-empty]');\n    var handles = getWishlist();\n\n    if (handles.length === 0) {\n      if (grid) { grid.hidden = true; grid.innerHTML = ''; }\n      if (empty) empty.hidden = false;\n      return;\n    }\n    if (empty) empty.hidden = true;\n    if (!grid) return;\n    grid.hidden = false;\n    grid.setAttribute('aria-busy', 'true');\n\n    Promise.all(handles.map(function (handle) {\n      return fetch('/products/' + handle + '.js')\n        .then(function (r) { return r.ok ? r.json() : null; })\n        .catch(function () { return null; });\n    })).then(function (products) {\n      // A product that 404s was likely deleted or renamed \u2014 drop it quietly.\n      var stillValid = [];\n      var html = '';\n      products.forEach(function (p, idx) {\n        if (!p) return;\n        stillValid.push(handles[idx]);\n        var img = p.featured_image || (p.images && p.images[0]) || '';\n        var price = formatMoney(p.price);\n        var compareAt = p.compare_at_price > p.price\n          ? ' <s>' + formatMoney(p.compare_at_price) + '</s>' : '';\n        var available = p.available;\n        var firstVariantId = p.variants && p.variants[0] && p.variants[0].id;\n        html += '' +\n          '<div class=\"sv-wish__item\">' +\n            '<button type=\"button\" class=\"sv-wish__remove\" data-sv-wishlist-remove data-product-handle=\"' + handle_esc(p.handle) + '\" aria-label=\"Remove ' + attr_esc(p.title) + '\">&times;</button>' +\n            '<a class=\"sv-card\" href=\"' + attr_esc(p.url) + '\">' +\n              '<div class=\"sv-card__media\">' +\n                (img ? '<img class=\"is-active\" src=\"' + attr_esc(img) + '\" alt=\"' + attr_esc(p.title) + '\" loading=\"lazy\">' : '') +\n              '</div>' +\n              '<div class=\"sv-card__title\">' + text_esc(p.title) + '</div>' +\n              '<div class=\"sv-card__price\">' + price + compareAt + '</div>' +\n            '</a>' +\n            '<div class=\"sv-wish__actions\">' +\n              '<button type=\"button\" class=\"sv-wish__add\" data-sv-wishlist-quickadd data-variant-id=\"' + (firstVariantId || '') + '\" data-product-handle=\"' + handle_esc(p.handle) + '\"' + (available ? '' : ' disabled') + '>' +\n                (available ? 'Add To Bag' : 'Sold Out') +\n              '</button>' +\n              '<a class=\"sv-wish__view\" href=\"' + attr_esc(p.url) + '\">View</a>' +\n            '</div>' +\n          '</div>';\n      });\n      grid.innerHTML = html;\n      grid.removeAttribute('aria-busy');\n      if (stillValid.length !== handles.length) saveWishlist(stillValid);\n      if (stillValid.length === 0) {\n        grid.hidden = true;\n        if (empty) empty.hidden = false;\n      }\n    });\n\n    function handle_esc(s) { return String(s || '').replace(/[^a-z0-9-]/gi, ''); }\n    function attr_esc(s) {\n      var d = document.createElement('div');\n      d.textContent = String(s == null ? '' : s);\n      return d.innerHTML.replace(/\"/g, '&quot;');\n    }\n    function text_esc(s) {\n      var d = document.createElement('div');\n      d.textContent = String(s == null ? '' : s);\n      return d.innerHTML;\n    }\n  }\n\n  function initWishlist() {\n    initWishlistButtons();\n    renderWishlistPage();\n    document.addEventListener('click', function (e) {\n      var rm = e.target.closest && e.target.closest('[data-sv-wishlist-remove]');\n      if (rm) {\n        e.preventDefault();\n        var handle = rm.getAttribute('data-product-handle');\n        var list = getWishlist().filter(function (h) { return h !== handle; });\n        saveWishlist(list);\n        updateWishlistButtons();\n        renderWishlistPage();\n        return;\n      }\n      var add = e.target.closest && e.target.closest('[data-sv-wishlist-quickadd]');\n      if (add && !add.disabled) {\n        var variantId = add.getAttribute('data-variant-id');\n        if (!variantId) return;\n        add.disabled = true;\n        var original = add.textContent;\n        var addedHandle = add.getAttribute('data-product-handle');\n        fetch('/cart/add.js', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ id: variantId, quantity: 1 })\n        }).then(function (r) {\n          if (!r.ok) throw new Error('add failed');\n          // Move, don't copy: once it's in the bag, it shouldn't still be\n          // sitting in the wishlist waiting to be saved \"for later\".\n          if (addedHandle) {\n            var list = getWishlist().filter(function (h) { return h !== addedHandle; });\n            saveWishlist(list);\n          }\n          window.location = '/cart';\n        }).catch(function () { add.disabled = false; add.textContent = original; });\n      }\n    });\n  }\n\n  function initPincode() {\n    Array.prototype.slice.call(document.querySelectorAll('[data-sv-pincode]')).forEach(function (root) {\n      var input = root.querySelector('[data-sv-pincode-input]');\n      var btn = root.querySelector('[data-sv-pincode-check]');\n      if (!input) return;\n\n      var cached = getCachedPincode();\n      if (cached && !input.value) input.value = cached;\n\n      if (btn) btn.addEventListener('click', function () { checkDelivery(root); });\n      input.addEventListener('keydown', function (e) {\n        if (e.key === 'Enter') { e.preventDefault(); checkDelivery(root); }\n      });\n      input.addEventListener('input', function () {\n        input.value = input.value.replace(/[^0-9]/g, '').slice(0, 6);\n      });\n    });\n  }\n\n  /* --- inline search ----------------------------------------------------\n     The header search icon expands a bar over the nav row. Enter / the\n     magnifier submits to the search results page; Esc, the close button\n     or a click outside collapses it. */\n  var searchDocBound = false;\n  function initSearch() {\n    var header = document.querySelector('[data-sv-header]');\n    var form = document.querySelector('[data-sv-search]');\n    var trigger = document.querySelector('[data-sv-search-open]');\n    if (!header || !form || !trigger) return;\n    var input = form.querySelector('[data-sv-search-input]');\n    var closeBtn = form.querySelector('[data-sv-search-close]');\n\n    function isOpen() { return header.classList.contains('is-searching'); }\n\n    function open() {\n      var f = form.getBoundingClientRect();\n      var t = trigger.getBoundingClientRect();\n      form.style.setProperty('--sv-search-origin', Math.max(0, Math.min(f.width, t.left + t.width / 2 - f.left)) + 'px');\n      header.classList.add('is-searching');\n      trigger.setAttribute('aria-expanded', 'true');\n      setTimeout(function () { input.focus(); }, 60);\n    }\n    function close(returnFocus) {\n      if (!isOpen()) return;\n      header.classList.remove('is-searching');\n      trigger.setAttribute('aria-expanded', 'false');\n      input.blur();\n      if (returnFocus) trigger.focus();\n    }\n\n    trigger.addEventListener('click', function (e) {\n      e.preventDefault();\n      if (isOpen()) close(true); else open();\n    });\n    closeBtn.addEventListener('click', function () { close(true); });\n    form.addEventListener('submit', function (e) {\n      if (!input.value.trim()) { e.preventDefault(); input.focus(); }\n    });\n    form.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape') { e.stopPropagation(); close(true); }\n    });\n\n    if (!searchDocBound) {\n      searchDocBound = true;\n      document.addEventListener('click', function (e) {\n        var h = document.querySelector('[data-sv-header]');\n        if (!h || !h.classList.contains('is-searching')) return;\n        if (e.target.closest('[data-sv-search]') || e.target.closest('[data-sv-search-open]')) return;\n        h.classList.remove('is-searching');\n        var t = document.querySelector('[data-sv-search-open]');\n        if (t) t.setAttribute('aria-expanded', 'false');\n      });\n    }\n  }\n\n  /* --- about page: timeline reveal + progress line, stat count-up ------- */\n  function initTimeline() {\n    var tl = document.querySelector('[data-sv-timeline]');\n    if (!tl) return;\n    var items = Array.prototype.slice.call(tl.querySelectorAll('[data-sv-tl-item]'));\n    if (reduce || !('IntersectionObserver' in window)) { tl.style.setProperty('--p', 1); return; }\n\n    tl.classList.add('is-animated');\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (en) {\n        if (en.isIntersecting) { en.target.classList.add('is-in'); io.unobserve(en.target); }\n      });\n    }, { threshold: 0.25, rootMargin: '0px 0px -8% 0px' });\n    items.forEach(function (el) { io.observe(el); });\n\n    var ticking = false;\n    function update() {\n      ticking = false;\n      var r = tl.getBoundingClientRect();\n      var mid = window.innerHeight * 0.55;\n      var p = Math.max(0, Math.min(1, (mid - r.top) / r.height));\n      tl.style.setProperty('--p', p.toFixed(3));\n    }\n    window.addEventListener('scroll', function () {\n      if (!ticking) { ticking = true; requestAnimationFrame(update); }\n    }, { passive: true });\n    window.addEventListener('resize', update);\n    update();\n  }\n\n  function initCountUp() {\n    var els = Array.prototype.slice.call(document.querySelectorAll('[data-sv-count]'));\n    if (!els.length || reduce || !('IntersectionObserver' in window)) return;\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (en) {\n        if (!en.isIntersecting) return;\n        io.unobserve(en.target);\n        var el = en.target, text = el.textContent;\n        var m = text.match(/^([^\\d]*)([\\d,]+)(.*)$/);\n        if (!m) return;\n        var target = parseInt(m[2].replace(/,/g, ''), 10), t0 = null, dur = 1400;\n        function tick(t) {\n          if (t0 === null) t0 = t;\n          var k = Math.min(1, (t - t0) / dur), e = 1 - Math.pow(1 - k, 3);\n          el.textContent = m[1] + Math.round(target * e).toLocaleString('en-IN') + m[3];\n          if (k < 1) requestAnimationFrame(tick); else el.textContent = text;\n        }\n        requestAnimationFrame(tick);\n      });\n    }, { threshold: 0.6 });\n    els.forEach(function (el) { io.observe(el); });\n  }\n\n  /* --- \"people browsing now\": real count from the live-visitors API; the line stays\n     hidden unless at least data-min people are active, and on any error --------- */\n  function initLiveVisitors() {\n    var el = document.querySelector('[data-sv-live]');\n    if (!el || el.__svLive || !window.fetch) return;\n    el.__svLive = true;\n    var url = el.getAttribute('data-endpoint');\n    var min = parseInt(el.getAttribute('data-min'), 10) || 3;\n    var num = el.querySelector('[data-sv-live-count]');\n    var id;\n    try { id = sessionStorage.getItem('sv-live-id'); } catch (e) {}\n    if (!id) {\n      id = Math.random().toString(36).slice(2, 12) + Date.now().toString(36);\n      try { sessionStorage.setItem('sv-live-id', id); } catch (e) {}\n    }\n    function ping() {\n      if (document.visibilityState === 'hidden') return;\n      fetch(url, { method: 'POST', headers: { 'Content-Type': 'text/plain' }, body: JSON.stringify({ id: id }), keepalive: true })\n        .then(function (r) { return r.ok ? r.json() : null; })\n        .then(function (d) {\n          var n = d && parseInt(d.active, 10);\n          if (n >= min) { num.textContent = n; el.hidden = false; } else { el.hidden = true; }\n        })\n        .catch(function () { el.hidden = true; });\n    }\n    ping();\n    setInterval(ping, 30000);\n    document.addEventListener('visibilitychange', ping);\n  }\n\n  /* --- product page, phones: sticky Add To Bag bar. Shows while the real button\n     is off screen (it sits ~2 screens down), mirrors its price / sold-out state,\n     and sits above the cookie banner while that is open. ------------------------ */\n  function initStickyAtc() {\n    var bar = document.querySelector('[data-sv-sticky-atc]');\n    var main = document.querySelector('[data-sv-atc]');\n    if (!bar || !main) return;\n    var btn = bar.querySelector('[data-sv-sticky-btn]');\n    var price = bar.querySelector('[data-sv-sticky-price]');\n    var mainPrice = main.querySelector('[data-sv-atc-price]');\n    var mainLabel = main.querySelector('[data-sv-atc-label]');\n\n    function sync() {\n      if (price && mainPrice) price.textContent = mainPrice.textContent;\n      if (mainLabel) btn.textContent = mainLabel.textContent;\n      btn.disabled = main.disabled;\n    }\n    sync();\n    new MutationObserver(sync).observe(main, { attributes: true, childList: true, subtree: true, characterData: true });\n\n    /* Show the bar whenever the real button is off screen. Checked by position (not only by an\n       observer) so it stays right when images load and shift the layout. */\n    function check() {\n      var r = main.getBoundingClientRect();\n      var inView = r.bottom > 0 && r.top < window.innerHeight;\n      bar.classList.toggle('is-visible', !inView);\n      bar.setAttribute('aria-hidden', inView ? 'true' : 'false');\n      btn.tabIndex = inView ? -1 : 0;\n    }\n    var ticking = false;\n    window.addEventListener('scroll', function () {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(function () { ticking = false; check(); });\n    }, { passive: true });\n    window.addEventListener('load', check);\n    document.addEventListener('load', check, true);\n    [300, 1200, 2500, 4500].forEach(function (t) { setTimeout(check, t); });\n    if ('IntersectionObserver' in window) new IntersectionObserver(check, { threshold: 0 }).observe(main);\n\n    btn.addEventListener('click', function () { if (!main.disabled) main.click(); });\n\n    /* sit above the cookie banner while it is open */\n    function lift() {\n      var b = document.getElementById('shopify-pc__banner');\n      var h = 0;\n      if (b) { var r = b.getBoundingClientRect(); if (r.height > 0 && r.bottom > 0 && r.top < window.innerHeight) h = Math.round(window.innerHeight - r.top); }\n      bar.style.bottom = h > 0 ? h + 'px' : '';\n    }\n    lift();\n    window.addEventListener('resize', function () { check(); lift(); });\n    /* The banner is injected late and changes size when it is dismissed, so poll for it\n       (cheap: one rect read every 400 ms) instead of relying on a single check. */\n    setInterval(lift, 400);\n    window.addEventListener('scroll', lift, { passive: true });\n    check();\n  }\n\n  /* --- safety net: Judge.me has, at times, rendered its review widget\n     both into our own placeholder AND a second copy elsewhere on the\n     product page (e.g. via an app-embed block auto-inserting near the\n     buy box). Their script loads async, so this polls briefly after\n     load and removes any Judge.me widget root found outside our\n     .sv-reviews section, keeping only the one we styled and placed. */\n  function initReviewWidgetDedup() {\n    var keep = document.querySelector('.sv-reviews #judgeme_product_reviews');\n    if (!keep) return;\n\n    function pruneDuplicates() {\n      Array.prototype.slice.call(\n        document.querySelectorAll('.jdgm-widget, .jdgm-review-widget, [id^=\"judgeme_\"]')\n      ).forEach(function (el) {\n        if (el !== keep && !el.closest('.sv-reviews')) el.remove();\n      });\n    }\n\n    // \"No items found\" is a leftover from an empty result list \u2014 redundant\n    // once \"Be the first to write a review\" already says the same thing.\n    // Judge.me's widget doesn't expose a stable class for it (Vue-generated,\n    // classes can change between releases), so match on the visible text\n    // itself, scoped to our widget only.\n    function hideNoItemsFound() {\n      var walker = document.createTreeWalker(keep, NodeFilter.SHOW_TEXT);\n      var node;\n      while ((node = walker.nextNode())) {\n        if (node.nodeValue.trim() === 'No items found') {\n          var el = node.parentElement;\n          if (el) el.style.display = 'none';\n        }\n      }\n    }\n\n    var attempts = 0;\n    var timer = setInterval(function () {\n      pruneDuplicates();\n      hideNoItemsFound();\n      attempts++;\n      if (attempts > 10) clearInterval(timer);\n    }, 500);\n  }\n\n  function boot() {\n    initHeader();\n    initMobileMenu();\n    initBanner();\n    initRails();\n    initCardHover();\n    initVariants();\n    initZoom();\n    initHoverZoom();\n    initTimeline();\n    initCountUp();\n    initLiveVisitors();\n    initStickyAtc();\n    initRecs();\n    initBuyNow();\n    initDeliveryCountdown();\n    initCartStockLimits();\n    initCartAjaxUpdate();\n    initPincode();\n    initWishlist();\n    initReviewWidgetDedup();\n    initSearch();\n    measureChrome();\n    window.addEventListener('resize', measureChrome);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n\n  // Theme-editor reloads re-render sections in place\n  document.addEventListener('shopify:section:load', boot);\n})();\n"],
  "mappings": "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",
  "names": ["i", "n", "list"]
}
