{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/pawlab-variant-snappy.js?pawlab=24"],
  "sourcesContent": ["/**\n * pawlab-variant-snappy.js (v12)\n * Speeds up Clarity PDP variant switches:\n * 1) Prefetch section HTML on option hover/press (+ idle warm of sibling options)\n * 2) Rewrite option_values fetches to section_id (smaller payload when available)\n * 3) Optimistic price from /products/{handle}.js (no network wait after warm)\n * 4) Promote selected variant featured media to gallery position 0 (grid hero)\n * 5) Skip full <media-gallery> remount when media id SET is unchanged (avoids video remount)\n * 6) Re-apply hero promotion after theme section morph (size/pattern picks)\n * 7) v11: ALWAYS paint hero img src on color change (gallery may omit other colorways)\n * 8) v12: paint ONLY the main/first-slide hero \u2014 never media-gallery img (that\n *    overwrote every thumbnail with the selected color, causing identical thumbs)\n * 9) v13: hero follows full variant featured (Color\u00D7Steps), not Color-only fallback\n * 10) v14: skip gallery remount on Color-only swaps (same shared frames). Remount\n *     flashed the previous first slide (e.g. Grey dog) while the new color decoded.\n * 11) v15: sharedMediaSignature must ignore pawlab-feat-* fingerprint spans.\n *     Those ids change every Color, so v14 skip never fired (debug 9f3aac).\n * 12) v16: skip-shared must NOT paint incoming first-slide src. In-flight\n *     section HTML is often a previous color (Grey dog) and overwrites the\n *     already-correct snappy hero (debug 9f3aac post-v15).\n * 13) v17: if the colorway slide is already in the gallery, promote it and\n *     do not src-swap the previous hero img (that kept Grey dog on screen\n *     until the new file decoded).\n * 14) v20: never replay cached section HTML (stale *-lifestyle.png dog URLs).\n *     Hide every other slide immediately on Color click so Grey cannot flash.\n */\n(function () {\n  'use strict';\n  if (window.__pawlabVariantSnappy) return;\n  window.__pawlabVariantSnappy = true;\n  window.__pawlabVariantSnappyVersion = 20;\n\n  function fileOf(src) {\n    if (!src) return '';\n    var s = String(src);\n    var i = s.lastIndexOf('/');\n    return (i >= 0 ? s.slice(i + 1) : s).split('?')[0];\n  }\n  function heroImg(root) {\n    if (!root || !root.querySelector) return null;\n    return (\n      root.querySelector('slideshow-slides > slideshow-slide:first-child img') ||\n      root.querySelector('slideshow-slide[aria-hidden=\"false\"] img') ||\n      root.querySelector('slideshow-slide img')\n    );\n  }\n  function slideFiles(gallery) {\n    if (!gallery || !gallery.querySelectorAll) return [];\n    return Array.prototype.map.call(gallery.querySelectorAll('slideshow-slides img'), function (img) {\n      return fileOf(img.currentSrc || img.src || img.getAttribute('src'));\n    }).slice(0, 8);\n  }\n\n  var sectionCache = new Map();\n  var variantIndex = null; // { handle, product, byOptions, byId, featuredByColor }\n  var loadingProduct = null;\n  var preloadedSrc = new Set();\n\n  function onReady(fn) {\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn, { once: true });\n    else fn();\n  }\n\n  function normalizeSectionUrl(url) {\n    try {\n      var u = new URL(url, window.location.origin);\n      var ov = u.searchParams.get('option_values') || '';\n      var sid = u.searchParams.get('section_id') || '';\n      return u.pathname + '|ov=' + ov + '|sid=' + sid;\n    } catch (e) {\n      return String(url);\n    }\n  }\n\n  function isVariantSectionUrl(url) {\n    return (\n      typeof url === 'string' &&\n      url.indexOf('/products/') !== -1 &&\n      url.indexOf('option_values=') !== -1\n    );\n  }\n\n  function withSectionId(url) {\n    try {\n      var u = new URL(url, window.location.origin);\n      if (u.searchParams.get('section_id')) return u.pathname + u.search;\n      var picker = document.querySelector('variant-picker[data-section-id]');\n      var sid = picker && picker.getAttribute('data-section-id');\n      if (sid) u.searchParams.set('section_id', sid);\n      return u.pathname + '?' + u.searchParams.toString();\n    } catch (e) {\n      return url;\n    }\n  }\n\n  // --- Fetch cache / prefetch / section rewrite ---\n  var origFetch = window.fetch.bind(window);\n  window.fetch = function (input, init) {\n    var url = typeof input === 'string' ? input : input && input.url;\n    if (!url || !isVariantSectionUrl(url)) return origFetch(input, init);\n\n    var rewritten = withSectionId(url);\n    try {\n      var bu = new URL(rewritten, window.location.origin);\n      bu.searchParams.set('pb', 'hero8');\n      rewritten = bu.pathname + '?' + bu.searchParams.toString();\n    } catch (ePb) {}\n    // Never replay in-memory section HTML. Cached morph still pointed at\n    // deleted *-lifestyle.png files and flashed the old dog on Color click.\n    return origFetch(rewritten, init);\n  };\n\n  function prefetchUrl(url) {\n    if (!url || !isVariantSectionUrl(url)) return;\n    var rewritten = withSectionId(url);\n    try {\n      var bu = new URL(rewritten, window.location.origin);\n      bu.searchParams.set('pb', 'hero8');\n      rewritten = bu.pathname + '?' + bu.searchParams.toString();\n    } catch (ePb) {}\n    var key = normalizeSectionUrl(rewritten);\n    if (sectionCache.has(key)) return;\n    origFetch(rewritten, { credentials: 'same-origin' })\n      .then(function (r) {\n        return r.ok ? r.text() : null;\n      })\n      .then(function (text) {\n        if (text) {\n          sectionCache.set(key, text);\n          sectionCache.set(normalizeSectionUrl(url), text);\n        }\n      })\n      .catch(function () {});\n  }\n\n  function buildOptionValuesUrl(picker, selectedInput) {\n    if (!picker || !selectedInput) return null;\n    var productUrl =\n      selectedInput.getAttribute('data-connected-product-url') ||\n      picker.getAttribute('data-product-url');\n    if (!productUrl) return null;\n    var ids = [];\n    picker.querySelectorAll('fieldset input:checked, select option[selected]').forEach(function (el) {\n      if (el.tagName === 'INPUT' && selectedInput.name && el.name === selectedInput.name) return;\n      var id = el.getAttribute('data-option-value-id');\n      if (id) ids.push(id);\n    });\n    var selId = selectedInput.getAttribute('data-option-value-id');\n    if (selId) ids.push(selId);\n    if (!ids.length) return null;\n    var base = productUrl.split('?')[0];\n    var sectionId = picker.getAttribute('data-section-id');\n    var qs = 'option_values=' + ids.join(',');\n    if (sectionId) qs = 'section_id=' + encodeURIComponent(sectionId) + '&' + qs;\n    return base + '?' + qs;\n  }\n\n  function bindPrefetch() {\n    document.addEventListener(\n      'pointerdown',\n      function (e) {\n        var t = e.target;\n        if (!(t instanceof Element)) return;\n        var input = null;\n        if (t.matches('input[type=\"radio\"]')) input = t;\n        else {\n          var lab = t.closest('label');\n          if (lab) input = lab.control || document.getElementById(lab.getAttribute('for') || '');\n        }\n        if (!(input instanceof HTMLInputElement)) return;\n        var picker = input.closest('variant-picker');\n        if (!picker) return;\n        var url = buildOptionValuesUrl(picker, input);\n        if (url) prefetchUrl(url);\n      },\n      true\n    );\n\n    document.addEventListener(\n      'mouseover',\n      function (e) {\n        var t = e.target;\n        if (!(t instanceof Element)) return;\n        var lab = t.closest('label');\n        if (!lab || !lab.closest('variant-picker')) return;\n        var input = lab.control || document.getElementById(lab.getAttribute('for') || '');\n        if (!(input instanceof HTMLInputElement) || input.checked) return;\n        var picker = input.closest('variant-picker');\n        var url = buildOptionValuesUrl(picker, input);\n        if (url) prefetchUrl(url);\n      },\n      true\n    );\n  }\n\n  function mediaIdSignature(root) {\n    var ids = Array.prototype.map\n      .call(root.querySelectorAll('[data-media-id]'), function (el) {\n        return el.getAttribute('data-media-id');\n      })\n      .filter(Boolean);\n    // Include featured hero id so color changes never get false-equal skips\n    var hero =\n      (root.getAttribute && root.getAttribute('data-pawlab-hero')) ||\n      (root.querySelector &&\n        (function () {\n          var s = root.querySelector('slideshow-slides > slideshow-slide, slideshow-slide');\n          if (!s) return '';\n          return s.getAttribute('data-media-id') || (s.querySelector('[data-media-id]') || {}).getAttribute?.('data-media-id') || '';\n        })()) ||\n      '';\n    return String(hero) + '|' + Array.from(new Set(ids)).sort().join(',');\n  }\n\n  function firstSlideMediaId(gallery) {\n    if (!gallery) return '';\n    var slide = gallery.querySelector('slideshow-slides > slideshow-slide, slideshow-slide, .product-media-container');\n    if (!slide) return '';\n    var el = slide.matches('[data-media-id]') ? slide : slide.querySelector('[data-media-id]');\n    return (el && el.getAttribute('data-media-id')) || '';\n  }\n\n  // Shared frames only (drop the first/colorway slide). Color clicks change the\n  // hero id but keep video + EN supplements \u2014 remounting those flashes the old hero.\n  function sharedMediaSignature(root) {\n    if (!root || !root.querySelectorAll) return '';\n    var hero = firstSlideMediaId(root);\n    var ids = Array.prototype.map\n      .call(root.querySelectorAll('[data-media-id]'), function (el) {\n        return el.getAttribute('data-media-id');\n      })\n      .filter(function (id) {\n        if (!id || id === hero) return false;\n        // Hidden fingerprint span: data-media-id=\"pawlab-feat-{selectedColorId}\"\n        // changes every Color click and must not count as a shared frame.\n        if (id.indexOf('pawlab-feat-') === 0) return false;\n        return true;\n      });\n    return Array.from(new Set(ids)).sort().join(',');\n  }\n\n  // v10: do NOT scroll the page/column on variant click.\n  // Carousel + thumbnail selector already shows the featured frame; scroll jumps\n  // were yanking shoppers down the PDP whenever they changed Color.\n  function scrollMediaColumnToTop(_gallery) {\n    return;\n  }\n\n  function hideAllSlides(gallery) {\n    if (!gallery || !gallery.querySelectorAll) return;\n    Array.prototype.forEach.call(\n      gallery.querySelectorAll('slideshow-slides > slideshow-slide'),\n      function (s) {\n        s.style.visibility = 'hidden';\n      }\n    );\n  }\n\n  function revealSlide(gallery, slide) {\n    if (!gallery || !slide) return;\n    var list = slide.parentElement;\n    if (list) {\n      Array.prototype.forEach.call(list.children, function (s) {\n        if (!s || !s.tagName) return;\n        if (s.tagName.toLowerCase() !== 'slideshow-slide') return;\n        var on = s === slide;\n        s.setAttribute('aria-hidden', on ? 'false' : 'true');\n        s.style.visibility = on ? 'visible' : 'hidden';\n      });\n    }\n    var slideshow = gallery.slideshow || gallery.querySelector('slideshow-component');\n    if (!slideshow || typeof slideshow.select !== 'function') return;\n    var slides = gallery.querySelectorAll('slideshow-slides > slideshow-slide');\n    var idx = Array.prototype.indexOf.call(slides, slide);\n    try {\n      if (idx >= 0) slideshow.select(idx, undefined, { animate: false });\n      else slideshow.select(slide, undefined, { animate: false });\n    } catch (e) {\n      try {\n        slideshow.select(slide);\n      } catch (e2) {}\n    }\n  }\n\n  /**\n   * One-column grid galleries stack every frame. Theme normally remounts with\n   * featured_media first; we skip remount for speed, so we must move the slide\n   * to index 0 ourselves \u2014 otherwise users must scroll to find the colorway.\n   */\n  function promoteMediaToFront(gallery, mediaId) {\n    if (!gallery || !mediaId) return false;\n    var match =\n      gallery.querySelector('slideshow-slides [data-media-id=\"' + mediaId + '\"]') ||\n      gallery.querySelector('[data-media-id=\"' + mediaId + '\"]');\n    if (!match) return false;\n\n    var slide = match.closest('slideshow-slide') || match.closest('.product-media-container') || match;\n    var list = slide.parentElement;\n    if (!list) return false;\n\n    if (list.firstElementChild !== slide) {\n      list.insertBefore(slide, list.firstElementChild);\n    }\n\n    // Keep thumbnail strip in sync when present\n    var thumb =\n      gallery.querySelector('slideshow-controls [data-media-id=\"' + mediaId + '\"]') ||\n      gallery.querySelector('[ref=\"thumbnails\"] [data-media-id=\"' + mediaId + '\"]');\n    if (thumb) {\n      var thumbItem = thumb.closest('button, li, .thumbnail, [role=\"tab\"]') || thumb;\n      var thumbParent = thumbItem.parentElement;\n      if (thumbParent && thumbParent.firstElementChild !== thumbItem) {\n        thumbParent.insertBefore(thumbItem, thumbParent.firstElementChild);\n      }\n    }\n\n    var img = slide.querySelector('img');\n    if (img) {\n      if (img.loading === 'lazy') img.loading = 'eager';\n      img.setAttribute('fetchpriority', 'high');\n      if (img.dataset && img.dataset.src && !img.getAttribute('src')) img.src = img.dataset.src;\n    }\n\n    revealSlide(gallery, slide);\n    scrollMediaColumnToTop(gallery);\n    return true;\n  }\n\n  function snapGalleryToHero(gallery) {\n    if (!gallery) return;\n    var heroId = gallery.getAttribute('data-pawlab-hero') || firstSlideMediaId(gallery);\n    var match =\n      (heroId && gallery.querySelector('slideshow-slides [data-media-id=\"' + heroId + '\"]')) ||\n      gallery.querySelector('slideshow-slides > slideshow-slide');\n    var slide = match && (match.closest('slideshow-slide') || match);\n    if (slide) revealSlide(gallery, slide);\n    scrollMediaColumnToTop(gallery);\n  }\n\n  function selectGalleryMedia(gallery, mediaId, imageUrl, imageAlt) {\n    if (!gallery) {\n      if (imageUrl) swapHeroImage(document, imageUrl, imageAlt);\n      return;\n    }\n\n    if (mediaId) promoteMediaToFront(gallery, mediaId);\n\n    if (imageUrl) {\n      paintHeroWhenReady(gallery, imageUrl, imageAlt);\n    }\n\n    if (mediaId) {\n      try {\n        gallery.setAttribute('data-pawlab-hero', String(mediaId));\n      } catch (e) {}\n    }\n    gallery.__pawlabPaint = { src: imageUrl, alt: imageAlt, mediaId: mediaId };\n\n    snapGalleryToHero(gallery);\n  }\n\n  function paintHeroWhenReady(root, imageUrl, imageAlt) {\n    if (!imageUrl || !root) return;\n    var abs = imageUrl;\n    try {\n      abs = new URL(imageUrl, window.location.origin).href;\n    } catch (e) {}\n    var painted = false;\n    function show() {\n      var shown = heroImg(root);\n      if (shown) shown.style.visibility = '';\n      var slide =\n        root.querySelector('slideshow-slides > slideshow-slide:first-child') ||\n        root.querySelector('slideshow-slide[aria-hidden=\"false\"]');\n      if (slide) slide.style.visibility = 'visible';\n    }\n    function paint() {\n      if (painted) return;\n      painted = true;\n      swapHeroImage(root, abs, imageAlt);\n      show();\n    }\n    try {\n      var im = new Image();\n      im.onload = paint;\n      im.onerror = paint;\n      im.src = abs;\n      if (im.complete && im.naturalWidth) {\n        paint();\n        return;\n      }\n      hideAllSlides(root);\n    } catch (e) {\n      paint();\n    }\n  }\n\n  function swapHeroImage(root, imageUrl, imageAlt) {\n    if (!imageUrl || !root) return;\n    var abs = imageUrl;\n    try {\n      abs = new URL(imageUrl, window.location.origin).href;\n    } catch (e) {}\n\n    // v12: ONLY the visible main/hero frame \u2014 never thumbnails.\n    // Do NOT use 'media-gallery img' (matches every slide + thumb \u2192 identical column).\n    var imgs = [];\n    var selectors = [\n      'slideshow-slides > slideshow-slide:first-child img',\n      'slideshow-slides > [aria-hidden=\"false\"] img',\n      '.product-media-container--tallest img',\n      '[data-main-media] img',\n      '.product-media-gallery__hero img',\n    ];\n    for (var i = 0; i < selectors.length; i++) {\n      var found = root.querySelectorAll(selectors[i]);\n      for (var j = 0; j < found.length; j++) {\n        var candidate = found[j];\n        // Skip thumbnail strip / control rail images\n        if (candidate.closest('slideshow-controls, [ref=\"thumbnails\"], .dialog-thumbnails-list, .thumbnail')) {\n          continue;\n        }\n        imgs.push(candidate);\n      }\n      if (imgs.length) break; // prefer the most specific selector that matched\n    }\n    if (!imgs.length) {\n      var slide =\n        root.querySelector('slideshow-slides > slideshow-slide:first-child') ||\n        root.querySelector('slideshow-slide');\n      var fallback = slide && slide.querySelector('img');\n      if (fallback) imgs.push(fallback);\n    }\n\n    // de-dupe + paint\n    var seen = new Set();\n    imgs.forEach(function (img) {\n      if (!img || seen.has(img)) return;\n      seen.add(img);\n      img.setAttribute('src', abs);\n      if (img.hasAttribute('srcset')) img.removeAttribute('srcset');\n      if (img.hasAttribute('srcSet')) img.removeAttribute('srcSet');\n      var pic = img.closest('picture');\n      if (pic) {\n        Array.prototype.forEach.call(pic.querySelectorAll('source'), function (s) {\n          s.removeAttribute('srcset');\n        });\n      }\n      img.loading = 'eager';\n      img.setAttribute('fetchpriority', 'high');\n      if (imageAlt) img.setAttribute('alt', imageAlt);\n    });\n\n    // Hide thumbnail buttons whose image src matches another thumb (identical dupes)\n    dedupeIdenticalThumbnails(root);\n  }\n\n  function dedupeIdenticalThumbnails(root) {\n    var scope = root && root.querySelector ? root : document;\n    var thumbs = scope.querySelectorAll(\n      'slideshow-controls button, slideshow-controls [role=\"tab\"], .dialog-thumbnails-list__thumbnail'\n    );\n    if (!thumbs.length) return;\n    var seenSrc = new Set();\n    Array.prototype.forEach.call(thumbs, function (btn) {\n      var img = btn.querySelector('img');\n      if (!img) return;\n      var key = (img.currentSrc || img.src || '').split('?')[0];\n      if (!key) return;\n      if (seenSrc.has(key)) {\n        btn.style.display = 'none';\n        btn.setAttribute('aria-hidden', 'true');\n      } else {\n        seenSrc.add(key);\n        if (btn.style.display === 'none') btn.style.display = '';\n        btn.removeAttribute('aria-hidden');\n      }\n    });\n  }\n\n\n  function ensureHeroAttr() {\n    var gallery = document.querySelector('media-gallery');\n    if (!gallery) return;\n    var hero = gallery.getAttribute('data-pawlab-hero') || '';\n    if (hero) return;\n    var first = firstSlideMediaId(gallery) || firstRealFallback(gallery);\n    if (first) gallery.setAttribute('data-pawlab-hero', first);\n  }\n\n  function firstRealFallback(gallery) {\n    var els = gallery.querySelectorAll('[data-media-id]');\n    for (var i = 0; i < els.length; i++) {\n      var id = els[i].getAttribute('data-media-id') || '';\n      if (id && id.indexOf('pawlab-feat-') !== 0) return id;\n    }\n    return '';\n  }\n\n  // --- Skip identical media-gallery remounts ---\n  function patchMediaGalleryReplace() {\n    var orig = Element.prototype.replaceWith;\n    Element.prototype.replaceWith = function () {\n      var nodes = arguments;\n      if (\n        this &&\n        this.tagName === 'MEDIA-GALLERY' &&\n        nodes[0] &&\n        nodes[0].tagName === 'MEDIA-GALLERY'\n      ) {\n        var oldFeatured = firstSlideMediaId(this);\n        var newFeatured = firstSlideMediaId(nodes[0]);\n        var oldIds = mediaIdSignature(this);\n        var newIds = mediaIdSignature(nodes[0]);\n        var oldShared = sharedMediaSignature(this);\n        var newShared = sharedMediaSignature(nodes[0]);\n        // Identical gallery \u2014 skip\n        if (oldIds && oldIds === newIds && oldFeatured && newFeatured && oldFeatured === newFeatured) {\n          if (newFeatured) promoteMediaToFront(this, newFeatured);\n          return this;\n        }\n        if (oldShared && oldShared === newShared) {\n          var last = this.__pawlabPaint;\n          if (last && last.mediaId) promoteMediaToFront(this, last.mediaId);\n          if (last && last.src) paintHeroWhenReady(this, last.src, last.alt);\n          snapGalleryToHero(this);\n          return this;\n        }\n      }\n      return orig.apply(this, nodes);\n    };\n  }\n\n  // --- Product JSON / optimistic price ---\n  function formatMoneyFromCents(cents) {\n    var amount = Number(cents);\n    if (!isFinite(amount)) return '';\n    amount = amount / 100;\n    // Match Clarity / Shopify money format used on this storefront (HKD$239.00)\n    return 'HKD$' + amount.toFixed(2);\n  }\n\n  function preloadUrl(src) {\n    if (!src || preloadedSrc.has(src)) return;\n    preloadedSrc.add(src);\n    try {\n      var img = new Image();\n      img.decoding = 'async';\n      img.src = src;\n    } catch (e) {}\n  }\n\n  function loadProductJson(handle) {\n    if (variantIndex && variantIndex.handle === handle) return Promise.resolve(variantIndex);\n    if (loadingProduct) return loadingProduct;\n    // .js has featured_image + prices in cents; .json often omits featured_image.\n    // NEVER force-cache: stale product.js keeps deleted featured media ids/urls and\n    // paints the wrong hero over the remounted gallery (CATBAG 2026-08-17).\n    var bust = String(Date.now());\n    loadingProduct = origFetch('/products/' + handle + '.js?snappy=' + bust, {\n      credentials: 'omit',\n      cache: 'no-cache',\n    })\n      .then(function (r) {\n        return r.json();\n      })\n      .then(function (product) {\n        var byOptions = new Map();\n        var byId = new Map();\n        var featuredByFirstOption = new Map();\n        var mediaIdSet = new Set();\n        (product.media || []).forEach(function (m) {\n          if (m && m.id != null) mediaIdSet.add(String(m.id));\n        });\n        (product.variants || []).forEach(function (v) {\n          var key = [v.option1 || '', v.option2 || '', v.option3 || ''].join('|||');\n          byOptions.set(key, v);\n          byId.set(String(v.id), v);\n          if (v.option1 && !featuredByFirstOption.has(v.option1)) {\n            var fi = v.featured_image || {};\n            var fm = v.featured_media || {};\n            featuredByFirstOption.set(v.option1, {\n              mediaId: String(fm.id || ''),\n              src: fi.src || (fm.preview_image && fm.preview_image.src) || '',\n              alt: fi.alt || fm.alt || v.option1,\n            });\n          }\n        });\n        variantIndex = {\n          handle: handle,\n          product: product,\n          byOptions: byOptions,\n          byId: byId,\n          featuredByFirstOption: featuredByFirstOption,\n          mediaIdSet: mediaIdSet,\n        };\n        loadingProduct = null;\n        // Preload every variant featured image (Color\u00D7Steps etc.) so step clicks paint-ready\n        (product.variants || []).forEach(function (v) {\n          var fi = v.featured_image || {};\n          var fm = v.featured_media || {};\n          var src = fi.src || (fm.preview_image && fm.preview_image.src) || '';\n          if (src) preloadUrl(src);\n        });\n        featuredByFirstOption.forEach(function (f) {\n          if (f.src) preloadUrl(f.src);\n        });\n        (product.media || []).forEach(function (m) {\n          if (m.media_type === 'image' && m.src) preloadUrl(m.src);\n        });\n        return variantIndex;\n      })\n      .catch(function () {\n        loadingProduct = null;\n        return null;\n      });\n    return loadingProduct;\n  }\n\n  function selectedOptionValues(picker) {\n    var vals = [];\n    picker.querySelectorAll('fieldset').forEach(function (fs) {\n      var checked = fs.querySelector('input:checked');\n      vals.push(checked ? checked.value : '');\n    });\n    return vals;\n  }\n\n  function updatePriceDom(cents) {\n    var formatted = formatMoneyFromCents(cents);\n    if (!formatted) return;\n    // Update every visible price node (regular + non-hidden sale + sticky ATC)\n    var nodes = document.querySelectorAll(\n      'product-price .price__regular .price, product-price .price__sale:not(.price__hidden) .price, product-price .price-item--sale, product-price .price-item--regular, .sticky-add-to-cart__price .price, .sticky-add-to-cart__price'\n    );\n    if (!nodes.length) {\n      nodes = document.querySelectorAll('product-price .price, product-price .money');\n    }\n    Array.prototype.forEach.call(nodes, function (el) {\n      if (el.closest && el.closest('.price__hidden')) return;\n      if (el.childElementCount === 0) {\n        el.textContent = formatted;\n      } else {\n        var money = el.querySelector('.money, .price') || el;\n        money.textContent = formatted;\n      }\n    });\n  }\n\n  function applyVariantVisuals(variant, firstOptionValue) {\n    if (!variant) return;\n    updatePriceDom(variant.price);\n    var fi = variant.featured_image || {};\n    var fm = variant.featured_media || {};\n    // Only MediaImage ids match data-media-id in the gallery DOM.\n    var mediaId = String(fm.id || '');\n    var src = fi.src || (fm.preview_image && fm.preview_image.src) || '';\n    var alt = fi.alt || fm.alt || firstOptionValue || '';\n    // Prefer THIS variant's featured (Color\u00D7Steps\u00D7\u2026). First-option map is\n    // Color-only fallback when a variant has no featured_image.\n    if (!src && variantIndex && variantIndex.featuredByFirstOption) {\n      var fb =\n        variantIndex.featuredByFirstOption.get(firstOptionValue || variant.option1 || '') ||\n        variantIndex.featuredByFirstOption.get(variant.option1 || '');\n      if (fb) {\n        mediaId = mediaId || fb.mediaId;\n        src = fb.src;\n        alt = alt || fb.alt;\n      }\n    }\n    // Stale-index guard: if featured media id is not in the product.media set,\n    // drop paint and let section remount show the live featured frame.\n    if (\n      mediaId &&\n      variantIndex &&\n      variantIndex.mediaIdSet &&\n      variantIndex.mediaIdSet.size &&\n      !variantIndex.mediaIdSet.has(mediaId)\n    ) {\n      variantIndex = null; // force refetch next click\n      return;\n    }\n    if (src) preloadUrl(src);\n    var gallery = document.querySelector('media-gallery');\n    selectGalleryMedia(gallery, mediaId, src, alt);\n  }\n\n  function optimisticFromPicker(picker, forcedVals) {\n    if (!picker) return;\n    var handle = (picker.getAttribute('data-product-url') || '').split('/').pop();\n    if (!handle) {\n      var m = location.pathname.match(/\\/products\\/([^/?#]+)/);\n      handle = m && m[1];\n    }\n    if (!handle) return;\n\n    var vals = forcedVals && forcedVals.length ? forcedVals : selectedOptionValues(picker);\n    var key = [vals[0] || '', vals[1] || '', vals[2] || ''].join('|||');\n\n    // Sync path when already warmed\n    if (variantIndex && variantIndex.handle === handle) {\n      var v = variantIndex.byOptions.get(key);\n      if (v) applyVariantVisuals(v, vals[0]);\n      return;\n    }\n\n    loadProductJson(handle).then(function (idx) {\n      if (!idx) return;\n      var variant = idx.byOptions.get(key);\n      if (!variant) return;\n      applyVariantVisuals(variant, vals[0]);\n    });\n  }\n\n  function scheduleVariantVisuals(picker, forcedVals) {\n    if (!picker) return;\n    optimisticFromPicker(picker, forcedVals);\n    setTimeout(function () {\n      optimisticFromPicker(picker, forcedVals);\n    }, 0);\n    setTimeout(function () {\n      optimisticFromPicker(picker, forcedVals);\n    }, 120);\n    setTimeout(function () {\n      optimisticFromPicker(picker, forcedVals);\n    }, 400);\n  }\n\n  function bindOptimistic() {\n    function fromEventTarget(t) {\n      if (!(t instanceof HTMLInputElement) && !(t instanceof HTMLSelectElement)) return;\n      var picker = t.closest && t.closest('variant-picker');\n      if (!picker) return;\n      scheduleVariantVisuals(picker);\n    }\n\n    // pointerdown: apply pending color/size BEFORE theme fetch \u2014 keep forced vals\n    // so restore-of-radio state cannot race timeouts back to the previous color.\n    document.addEventListener(\n      'pointerdown',\n      function (e) {\n        var t = e.target;\n        if (!(t instanceof Element)) return;\n        var input = t.matches('input[type=\"radio\"]')\n          ? t\n          : (t.closest('label') && (t.closest('label').control || document.getElementById(t.closest('label').getAttribute('for') || '')));\n        if (!(input instanceof HTMLInputElement) || !input.closest('variant-picker')) return;\n        var picker = input.closest('variant-picker');\n        if (/Color|Pattern/i.test(input.name || '')) {\n          hideAllSlides(document.querySelector('media-gallery'));\n        }\n        var prevChecked = [];\n        var siblings = input.name\n          ? input.closest('fieldset')\n            ? input.closest('fieldset').querySelectorAll('input[type=\"radio\"]')\n            : []\n          : [];\n        Array.prototype.forEach.call(siblings, function (s) {\n          prevChecked.push(s.checked);\n          s.checked = s === input;\n        });\n        if (!siblings.length) input.checked = true;\n        var forced = selectedOptionValues(picker);\n        scheduleVariantVisuals(picker, forced);\n        Array.prototype.forEach.call(siblings, function (s, i) {\n          s.checked = prevChecked[i];\n        });\n      },\n      true\n    );\n\n    document.addEventListener(\n      'change',\n      function (e) {\n        fromEventTarget(e.target);\n      },\n      true\n    );\n\n    document.addEventListener('variant:selected', function (e) {\n      var picker =\n        e.target && e.target.closest\n          ? e.target.closest('variant-picker')\n          : document.querySelector('variant-picker');\n      scheduleVariantVisuals(picker);\n    });\n  }\n\n  function warmProductJson() {\n    var m = location.pathname.match(/\\/products\\/([^/?#]+)/);\n    if (m) loadProductJson(m[1]);\n  }\n\n  function idlePrefetchSiblings() {\n    var picker = document.querySelector('variant-picker');\n    if (!picker) return;\n    var run = function () {\n      var inputs = picker.querySelectorAll('fieldset input[type=\"radio\"]:not(:checked)');\n      // Cap to avoid flooding: all unchecked colors + a few sizes\n      var queue = [];\n      inputs.forEach(function (input) {\n        if (/Color|Pattern/i.test(input.name || '')) queue.push(input);\n      });\n      inputs.forEach(function (input) {\n        if (/Size/i.test(input.name || '') && queue.length < 12) queue.push(input);\n      });\n      queue.forEach(function (input, i) {\n        setTimeout(function () {\n          var url = buildOptionValuesUrl(picker, input);\n          if (url) prefetchUrl(url);\n        }, 80 * i);\n      });\n    };\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(run, { timeout: 2500 });\n    } else {\n      setTimeout(run, 1200);\n    }\n  }\n\n  onReady(function () {\n    if (!/\\/products\\//.test(location.pathname)) return;\n    patchMediaGalleryReplace();\n    ensureHeroAttr();\n    bindPrefetch();\n    bindOptimistic();\n    warmProductJson();\n    idlePrefetchSiblings();\n  });\n})();\n\n/* pawlab-snappy-cdn-bust v20-hide-then-paint */\n"],
  "mappings": "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",
  "names": []
}
