{
  "version": 3,
  "sources": ["/cdn/shop/t/172/assets/bz-product.js?bzv=20260706-alt2"],
  "sourcesContent": ["/**\n * bz-product.js: behaviour for sections/bz-product.liquid. Media thumb swap, variant picker,\n * quantity handling. Scoped to the page's [data-bz-product] wrapper. Loaded with defer.\n */\n(function(){\n  // External defer script: find the product wrapper directly (was document.currentScript.closest(...)).\n  var scope = document.querySelector('[data-bz-product]') || document;\n\n  var historyBack = scope.querySelector('[data-bz-history-back]');\n  if (historyBack) {\n    historyBack.addEventListener('click', function (event) {\n      if (document.referrer && history.length > 1) {\n        event.preventDefault();\n        history.back();\n      }\n    });\n  }\n\n  // Media thumb swap\n  //\n  // This used to be a bare `main.src = bigImageUrl` on click. Because each\n  // gallery photo is a separate full-size file that had never been requested,\n  // every thumbnail click started a cold download while the previous photo sat\n  // on screen -- so the gallery looked frozen for as long as the fetch took.\n  // Now: warm the full-size photos in the background once the page is idle,\n  // warm again on hover/touch, and only paint once the new photo has decoded.\n  var main = scope.querySelector('[data-bz-media-main]');\n  var thumbs = scope.querySelectorAll('[data-bz-media-thumb]');\n  var mediaAltFallback = (main && main.getAttribute('alt')) || (scope.querySelector('h1') && scope.querySelector('h1').textContent.trim()) || document.title || 'Product photo';\n\n  // Keep one warmed Image per thumb so the browser cache (and the decoded\n  // bitmap) survives until the shopper actually clicks.\n  var warmed = {};\n  function warm(t){\n    var src = t.getAttribute('data-src');\n    if (!src || warmed[src]) return;\n    var pre = new Image();\n    pre.decoding = 'async';\n    var set = t.getAttribute('data-srcset');\n    var sz = t.getAttribute('data-sizes');\n    // Match the attributes the <img> will end up with, otherwise the browser\n    // picks a different candidate on click and the warm-up is wasted.\n    if (set) pre.srcset = set;\n    if (sz) pre.sizes = sz;\n    pre.src = src;\n    warmed[src] = pre;\n  }\n\n  // Same warm-up for a bare URL with no thumbnail behind it. Used for a variant photo that\n  // the rail does not carry -- a product whose gallery is a single photo-metafield override\n  // renders no rail at all, and without this its first size pick would sit on the old photo\n  // for the length of the download.\n  function warmUrl(src){\n    if (!src) return null;\n    if (warmed[src]) return warmed[src];\n    var pre = new Image();\n    pre.decoding = 'async';\n    if ('fetchPriority' in pre) pre.fetchPriority = 'low';\n    pre.src = src;\n    warmed[src] = pre;\n    return pre;\n  }\n\n  function swapTo(t){\n    var src = t.getAttribute('data-src');\n    if (!main || !src) return;\n    var set = t.getAttribute('data-srcset');\n    var sz = t.getAttribute('data-sizes');\n    var alt = t.getAttribute('data-alt');\n    var id = t.getAttribute('data-media-id');\n\n    // Selection feedback is applied immediately -- it must never wait on bytes.\n    for (var j = 0; j < thumbs.length; j++) thumbs[j].classList.remove('is-active');\n    t.classList.add('is-active');\n    if (id) main.setAttribute('data-bz-media-id', id);\n\n    function paint(){\n      if (set) { main.setAttribute('srcset', set); } else { main.removeAttribute('srcset'); }\n      if (sz) main.setAttribute('sizes', sz);\n      main.setAttribute('src', src);\n      if (alt) main.setAttribute('alt', alt);\n    }\n\n    warm(t);\n    var pre = warmed[src];\n    // decode() resolves once the bitmap is ready to paint, so the swap is a\n    // single clean frame instead of a blank box followed by a pop-in.\n    if (pre && typeof pre.decode === 'function') {\n      pre.decode().then(paint).catch(paint);\n    } else {\n      paint();\n    }\n  }\n\n  for (var i = 0; i < thumbs.length; i++){\n    (function(t){\n      var thumbImg = t.querySelector('img');\n      var initialAlt = t.getAttribute('data-alt') || (thumbImg && thumbImg.getAttribute('alt')) || mediaAltFallback;\n      if (initialAlt && !t.getAttribute('data-alt')) t.setAttribute('data-alt', initialAlt);\n      if (thumbImg && initialAlt && !(thumbImg.getAttribute('alt') || '').trim()) thumbImg.setAttribute('alt', initialAlt);\n      t.addEventListener('click', function(){ swapTo(t); });\n      // Hover, keyboard focus, or touch is usually enough head start for the requested photo.\n      t.addEventListener('pointerenter', function(){ warm(t); });\n      t.addEventListener('focus', function(){ warm(t); });\n      t.addEventListener('touchstart', function(){ warm(t); }, { passive: true });\n    })(thumbs[i]);\n  }\n\n  // 2026-10-25 speed: the cart attributes this page last heard about (see the Size aim write below).\n  var lastCartAttrs = null;\n  document.addEventListener('cart:update', function (event) {\n    var res = event && event.detail && event.detail.resource;\n    if (res && res.attributes && typeof res.attributes === 'object') lastCartAttrs = res.attributes;\n  });\n\n  // Shared refs across variant + qty wiring so the button label can reflect unit \u00D7 qty.\n  var qty = scope.querySelector('#bz-qty');\n  var addBtn = scope.querySelector('[data-bz-add-btn]');\n  var soldoutWishlist = scope.querySelector('[data-bz-soldout-wishlist]');\n  var addonChecks = scope.querySelectorAll('[data-bz-product-addon]');\n  var addonLinks = scope.querySelectorAll('.bz-product-pairing__link');\n  var pairingCurrentPrice = scope.querySelector('[data-bz-pairing-current-price]');\n  var pairingCurrentVariant = scope.querySelector('[data-bz-pairing-current-variant]');\n\n  // Defer to the site-wide formatter (bz-cart-add.js, loaded earlier in the head)\n  // so locale/currency stays in sync; fall back to a plain $N.NN if it's missing.\n  function formatMoney(cents){\n    if (window.bzCartAdd && typeof window.bzCartAdd.formatMoney === 'function') {\n      return window.bzCartAdd.formatMoney(cents);\n    }\n    return '$' + ((Math.round(cents || 0)) / 100).toFixed(2);\n  }\n\n  function currentQty(){\n    if (!qty) return 1;\n    var n = parseInt(qty.value, 10);\n    return isNaN(n) || n < 1 ? 1 : n;\n  }\n\n  function selectedAddonTotal(){\n    var total = 0;\n    for (var i = 0; i < addonChecks.length; i++){\n      if (!addonChecks[i].checked || addonChecks[i].disabled) continue;\n      var cents = parseInt(addonChecks[i].getAttribute('data-bz-addon-price-cents'), 10);\n      if (!isNaN(cents)) total += cents;\n    }\n    return total;\n  }\n\n  function updateAddBtnTotal(){\n    // 2026-10-03 mobile fix M-05: never write a price over the restock label.\n    if (!addBtn || addBtn.disabled || isRestock()) return;\n    var unit = parseInt(addBtn.getAttribute('data-bz-unit-cents'), 10);\n    if (isNaN(unit)) return;\n    var total = (unit * currentQty()) + selectedAddonTotal();\n    addBtn.innerHTML = (addBtn.getAttribute('data-bz-add-label') || '') + formatMoney(total);\n  }\n\n  function updateVariantMedia(v){\n    if (!v || !v.image || !main) return;\n    // Variant price/stock already changed on selection; keep the primary image\n    // in sync too so shoppers do not add the right SKU while inspecting the\n    // wrong animal/size photo.\n\n    // Prefer the matching thumbnail so the variant photo goes through the same\n    // warmed, srcset-aware, decode-before-paint path as a thumbnail click.\n    // Going straight to main.src here would also leave a stale srcset from an\n    // earlier thumb click in place, and srcset outranks src.\n    if (v.image_id != null) {\n      for (var k = 0; k < thumbs.length; k++){\n        if (thumbs[k].getAttribute('data-media-id') === String(v.image_id)) {\n          swapTo(thumbs[k]);\n          return;\n        }\n      }\n    }\n\n    // Selection feedback first -- it must never wait on bytes.\n    for (var i = 0; i < thumbs.length; i++){\n      var isActive = v.image_id != null && thumbs[i].getAttribute('data-media-id') === String(v.image_id);\n      thumbs[i].classList.toggle('is-active', isActive);\n    }\n\n    // No thumbnail carries this photo. Paint it directly, but through the same warm-then-\n    // decode path a thumbnail click gets, so the swap is one clean frame rather than a\n    // download the shopper has to sit through.\n    function paintDirect(){\n      main.removeAttribute('srcset');\n      main.removeAttribute('sizes');\n      if (main.getAttribute('src') !== v.image) main.setAttribute('src', v.image);\n      if (v.image_alt) main.setAttribute('alt', v.image_alt);\n      if (v.image_id != null) main.setAttribute('data-bz-media-id', String(v.image_id));\n    }\n\n    var pre = warmUrl(v.image);\n    if (pre && typeof pre.decode === 'function') pre.decode().then(paintDirect).catch(paintDirect);\n    else paintDirect();\n  }\n\n  function toInt(value, fallback){\n    var n = parseInt(value, 10);\n    return isNaN(n) ? fallback : n;\n  }\n\n  function scopeLabel(attr, fallback){\n    return scope.getAttribute(attr) || fallback;\n  }\n\n  function activeVariantId(){\n    var formInput = scope.querySelector('#bz-product-form input[name=\"id\"]') || scope.querySelector('input[name=\"id\"]');\n    return toInt((formInput && formInput.value) || (addBtn && addBtn.getAttribute('data-bz-variant-id')), 0);\n  }\n\n  function cartQuantityForVariant(cart, variantId){\n    variantId = toInt(variantId, 0);\n    if (!variantId || !cart || !cart.items) return 0;\n    var total = 0;\n    for (var i = 0; i < cart.items.length; i++){\n      var itemId = toInt(cart.items[i].variant_id || cart.items[i].id, 0);\n      if (itemId === variantId) total += toInt(cart.items[i].quantity, 0);\n    }\n    return total;\n  }\n\n  function setPdpStockLimit(limit){\n    if (!qty) return;\n    if (limit == null || isNaN(limit)){\n      qty.removeAttribute('data-bz-stock-limit');\n      qty.removeAttribute('data-bz-cart-qty');\n      return;\n    }\n    qty.setAttribute('data-bz-stock-limit', String(Math.max(0, toInt(limit, 0))));\n  }\n\n  function pdpStockLimit(){\n    if (!qty) return null;\n    var value = qty.getAttribute('data-bz-stock-limit');\n    if (value == null || value === '') {\n      value = addBtn ? addBtn.getAttribute('data-bz-inventory-quantity') : '';\n    }\n    return value == null || value === '' ? null : toInt(value, null);\n  }\n\n  function setQtyHint(text){\n    var qtyWrap = scope.querySelector('.bz-product-qty');\n    var label = qtyWrap ? qtyWrap.querySelector('label[for=\"bz-qty\"]') : null;\n    var hint = label ? label.querySelector('.bz-product-qty__hint') : null;\n    if (!label) return;\n    if (!text){\n      if (hint) hint.remove();\n      return;\n    }\n    if (!hint){\n      hint = document.createElement('span');\n      hint.className = 'bz-product-qty__hint';\n      label.appendChild(hint);\n    }\n    hint.textContent = ' (' + text + ')';\n  }\n\n  function setQtyDisabled(disabled){\n    var qtyWrap = scope.querySelector('.bz-product-qty');\n    var steppers = scope.querySelectorAll('[data-bz-qty-step]');\n    if (qty) qty.disabled = !!disabled;\n    for (var i = 0; i < steppers.length; i++) steppers[i].disabled = !!disabled;\n    if (qtyWrap){\n      if (disabled) qtyWrap.setAttribute('data-disabled', '');\n      else qtyWrap.removeAttribute('data-disabled');\n    }\n  }\n\n  function addButtonBusy(){\n    return !!(addBtn && addBtn.classList.contains('is-loading'));\n  }\n\n  // 2026-10-03 mobile fix M-05: a sold-out size used to hide the pinned Add to Cart button on\n  // phones and leave the working \"Request a restock\" link far down the page. At phone width\n  // (max-width 760px, where bz-product.css pins the button) the button now stays, enabled, as\n  // \"Request a restock\" with data-bz-restock=\"1\" and opens that link. Wider screens keep the\n  // hidden button with the link in its place, as before.\n  var restockMq = window.matchMedia ? window.matchMedia('(max-width: 760px)') : null;\n\n  function isRestock(){\n    return !!(addBtn && addBtn.getAttribute('data-bz-restock') === '1');\n  }\n\n  // The restock link's address, read from the page each time ('' when the link or its page is missing).\n  function restockHref(){\n    var link = scope.querySelector('[data-bz-soldout-wishlist]');\n    var href = link ? (link.getAttribute('href') || '').trim() : '';\n    return /^(\\/|https?:)/i.test(href) ? link.href : '';\n  }\n\n  // Sold-out state of the submit button.\n  function setSoldOutButton(){\n    if (!addBtn) return;\n    if (restockMq && restockMq.matches && restockHref()){\n      addBtn.setAttribute('data-bz-restock', '1');\n      addBtn.removeAttribute('aria-disabled');\n      addBtn.hidden = false;\n      addBtn.disabled = false;\n    } else {\n      addBtn.removeAttribute('data-bz-restock');\n      addBtn.hidden = true;\n      addBtn.disabled = true;\n    }\n    addBtn.innerHTML = addBtn.getAttribute('data-bz-soldout-label') || 'Sold out';\n  }\n\n  // A press on the restock button opens the restock link. If the link has gone, fall back\n  // to the old hidden button rather than leave a dead one on screen.\n  function openRestock(){\n    var href = restockHref();\n    if (href){\n      window.location.assign(href);\n      return;\n    }\n    addBtn.removeAttribute('data-bz-restock');\n    addBtn.hidden = true;\n    addBtn.disabled = true;\n  }\n\n  function applyPdpQtyLimit(cartQty){\n    if (!qty) return;\n    var variantAvailable = !addBtn || addBtn.getAttribute('data-bz-variant-available') !== '0';\n    var stockLimit = pdpStockLimit();\n    var learnedCartLimit = window.bzCartAdd && typeof window.bzCartAdd.cartLimitForVariant === 'function'\n      ? window.bzCartAdd.cartLimitForVariant(activeVariantId())\n      : null;\n    if (learnedCartLimit != null) {\n      learnedCartLimit = Math.max(0, toInt(learnedCartLimit, 0));\n      stockLimit = stockLimit == null ? learnedCartLimit : Math.min(stockLimit, learnedCartLimit);\n    }\n    cartQty = Math.max(0, toInt(cartQty, 0));\n    qty.setAttribute('data-bz-cart-qty', String(cartQty));\n\n    if (stockLimit == null){\n      qty.removeAttribute('max');\n      qty.setAttribute('min', '1');\n      setQtyHint('');\n      setQtyDisabled(!variantAvailable);\n      if (addBtn && variantAvailable && !addButtonBusy()){\n        addBtn.removeAttribute('data-bz-qty-blocked');\n        addBtn.disabled = false;\n        updateAddBtnTotal();\n      }\n      return;\n    }\n\n    stockLimit = Math.max(0, stockLimit);\n    var remaining = Math.max(0, stockLimit - cartQty);\n    var min = remaining === 0 ? 0 : 1;\n    qty.setAttribute('min', String(min));\n    qty.setAttribute('max', String(remaining));\n\n    var value = toInt(qty.value, min);\n    if (value < min) value = min;\n    if (value > remaining) value = remaining;\n    qty.value = String(value);\n\n    if (cartQty > 0){\n      setQtyHint(\n        remaining > 0\n          ? scopeLabel('data-bz-max-label', 'Max') + ' ' + remaining + ' - ' + cartQty + ' ' + scopeLabel('data-bz-in-cart-label', 'in cart')\n          : scopeLabel('data-bz-max-reached-label', 'Max reached') + ' - ' + cartQty + ' ' + scopeLabel('data-bz-in-cart-label', 'in cart')\n      );\n    } else if (stockLimit > 0){\n      setQtyHint(scopeLabel('data-bz-max-lower-label', 'max') + ' ' + stockLimit + ' ' + scopeLabel('data-bz-in-stock-label', 'in stock'));\n    } else {\n      setQtyHint('');\n    }\n\n    var blocked = variantAvailable && remaining <= 0;\n    setQtyDisabled(!variantAvailable || blocked);\n    if (!addBtn) return;\n\n    if (blocked){\n      addBtn.setAttribute('data-bz-qty-blocked', '1');\n      if (!addButtonBusy()){\n        addBtn.disabled = true;\n        addBtn.innerHTML = scopeLabel('data-bz-max-reached-label', 'Max reached');\n      }\n    } else {\n      addBtn.removeAttribute('data-bz-qty-blocked');\n      if (variantAvailable && !addButtonBusy()){\n        addBtn.disabled = false;\n        updateAddBtnTotal();\n      }\n    }\n  }\n\n  function updatePdpQtyFromCart(cart){\n    applyPdpQtyLimit(cartQuantityForVariant(cart, activeVariantId()));\n  }\n\n  function refreshPdpQtyFromLiveCart(){\n    if (!qty || !activeVariantId()) return Promise.resolve();\n    return fetch('/cart.js', { headers: { Accept: 'application/json' } })\n      .then(function(response){ return response.ok ? response.json() : null; })\n      .then(function(cart){ if (cart) updatePdpQtyFromCart(cart); })\n      .catch(function(){ /* keep server-rendered quantity state */ });\n  }\n\n  // Variant picker: rotate the option radios, swap the hidden id, the price, and the submit label.\n  (function(){\n    var json = scope.querySelector('[data-bz-variant-json]');\n    if (!json) return;\n    var variants;\n    try { variants = JSON.parse(json.textContent); } catch (e) { return; }\n    if (!variants || !variants.length) return;\n    if (window.bzInventoryGuard && typeof window.bzInventoryGuard.registerVariant === 'function') {\n      for (var rv = 0; rv < variants.length; rv++) {\n        var vLimit = variants[rv].tracked && variants[rv].inv_policy !== 'continue' ? variants[rv].inv_qty : null;\n        window.bzInventoryGuard.registerVariant(\n          variants[rv].id,\n          variants[rv].handle || scope.getAttribute('data-bz-product-handle') || '',\n          vLimit\n        );\n      }\n    }\n\n    // Any variant photo the thumbnail rail does not carry gets warmed once the page is\n    // idle, so the direct-paint branch above has something decoded to hand over. Cheap:\n    // on a normal product every variant photo IS a thumbnail, so this warms nothing.\n    (function(){\n      var thumbIds = {};\n      for (var t = 0; t < thumbs.length; t++) thumbIds[thumbs[t].getAttribute('data-media-id')] = true;\n      var orphans = [];\n      for (var i = 0; i < variants.length; i++){\n        var vi = variants[i];\n        if (vi.image && !thumbIds[String(vi.image_id)]) orphans.push(vi.image);\n      }\n      if (!orphans.length) return;\n      var idle = window.requestIdleCallback || function (fn) { return setTimeout(fn, 600); };\n      idle(function(){ for (var k = 0; k < orphans.length; k++) warmUrl(orphans[k]); });\n    })();\n\n    // Scope to the product form so we don't grab the matched-buddy quick-add button,\n    // which also carries data-bz-variant-id and sits above the form in the DOM.\n    var productForm = scope.querySelector('#bz-product-form');\n    var idInput = productForm ? productForm.querySelector('input[name=\"id\"]') : null;\n    var priceMain = scope.querySelector('.bz-product-price__main');\n    var priceWrap = scope.querySelector('.bz-product-price');\n    var priceFrom = scope.querySelector('.bz-product-price__from');\n    var priceSelection = scope.querySelector('[data-bz-price-selection]');\n    var priceLive = scope.querySelector('[data-bz-price-live]');\n    var stockEl = scope.querySelector('.bz-product-stock');\n    var stockTextEl = stockEl ? stockEl.querySelector('.bz-product-stock__text') : null;\n    var stockMeter = scope.querySelector('[data-bz-stock-meter]');\n    var stockMeterText = stockMeter ? stockMeter.querySelector('[data-bz-stock-meter-text]') : null;\n    var stockMeterFill = stockMeter ? stockMeter.querySelector('[data-bz-stock-meter-fill]') : null;\n    var qtyWrap = scope.querySelector('.bz-product-qty');\n    var qtyHint = qtyWrap ? qtyWrap.querySelector('.bz-product-qty__hint') : null;\n    var qtyLabel = qtyWrap ? qtyWrap.querySelector('label[for=\"bz-qty\"]') : null;\n    var qtySteppers = scope.querySelectorAll('[data-bz-qty-step]');\n    var optionFieldsets = scope.querySelectorAll('.bz-product-options fieldset');\n\n    function computeStock(v){\n      if (!v.available) return { state: 'out', qty: 0 };\n      if (!v.tracked) return { state: 'in', qty: 0 };\n      var q = v.inv_qty || 0;\n      if (q > 5) return { state: 'in', qty: q };\n      if (q > 0) return { state: 'low', qty: q };\n      if (v.inv_policy === 'continue') return { state: 'backorder', qty: 0 };\n      return { state: 'out', qty: 0 };\n    }\n    function stockLabel(s){\n      switch (s.state){\n        case 'in':        return stockEl.getAttribute('data-stock-in-label') || 'In stock - ships from Big Z HQ';\n        case 'low':       return (stockEl.getAttribute('data-stock-low-prefix') || 'Only') + ' ' + s.qty + ' ' + (stockEl.getAttribute('data-stock-low-suffix') || 'left');\n        case 'backorder': return stockEl.getAttribute('data-stock-backorder-label') || 'Backorder open, Big Z restocks soon';\n        case 'out':       return stockEl.getAttribute('data-stock-out-label') || 'Sold out - request a restock';\n        default:          return stockEl.getAttribute('data-stock-available-label') || 'Available';\n      }\n    }\n    function updateStockMeter(v, s){\n      if (!stockMeter) return;\n      var show = !!(v && v.available && v.tracked && v.inv_policy !== 'continue' && s && s.qty > 0);\n      stockMeter.hidden = !show;\n      if (!show) return;\n      stockMeter.setAttribute('data-state', s.state || 'in');\n      if (stockMeterText) stockMeterText.textContent = s.qty + (s.qty === 1 ? ' available right now' : ' available right now');\n      if (stockMeterFill) {\n        var pct = Math.round((s.qty / 12) * 100);\n        if (pct > 100) pct = 100;\n        if (pct < 8) pct = 8;\n        stockMeterFill.style.setProperty('--bz-stock-meter', pct + '%');\n      }\n    }\n    function updateStockAndQty(v){\n      var s = computeStock(v);\n      if (stockEl) stockEl.setAttribute('data-state', s.state);\n      if (stockTextEl) stockTextEl.textContent = stockLabel(s);\n      updateStockMeter(v, s);\n\n      if (!qty) return;\n      var hardCapped = v.tracked && v.inv_policy !== 'continue';\n      var maxQ = hardCapped ? Math.max(0, v.inv_qty || 0) : null;\n      if (addBtn) addBtn.setAttribute('data-bz-variant-available', v.available ? '1' : '0');\n      setPdpStockLimit(maxQ);\n      applyPdpQtyLimit(0);\n      refreshPdpQtyFromLiveCart();\n    }\n\n    function currentOptions(){\n      var picked = [];\n      for (var i = 0; i < optionFieldsets.length; i++){\n        var sel = optionFieldsets[i].querySelector('input[data-bz-option]:checked');\n        picked.push(sel ? sel.value : null);\n      }\n      return picked;\n    }\n\n    function matchVariant(opts){\n      for (var i = 0; i < variants.length; i++){\n        var v = variants[i], ok = true;\n        for (var j = 0; j < opts.length; j++){\n          if (String(v.options[j]) !== String(opts[j])){ ok = false; break; }\n        }\n        if (ok) return v;\n      }\n      return null;\n    }\n\n    function updateCompareAt(v){\n      if (!priceWrap) return;\n      var s = priceWrap.querySelector('s');\n      if (v.compare_at){\n        if (!s){\n          s = document.createElement('s');\n          s.className = 'bz-product-price__compare';\n          priceWrap.insertBefore(s, priceWrap.firstChild);\n        }\n        s.textContent = v.compare_at;\n      } else if (s){\n        s.parentNode.removeChild(s);\n      }\n    }\n\n    function confirmVariantPrice(v, variantChanged){\n      var selectedLabel = v.options && v.options.length ? v.options.join(' / ') : '';\n      if (priceSelection) priceSelection.textContent = selectedLabel + ' selected';\n      if (!variantChanged) return;\n\n      if (priceWrap){\n        // 2026-10-04 speed: restart the flash on the next frames instead of reading offsetWidth.\n        // That read forced a full page layout inside the size click (28 ms of a 96 ms click on a\n        // fast desktop, several times that on a phone). Two frames: one paints the class off,\n        // the next puts it back, so the animation still replays on every pick.\n        priceWrap.classList.remove('is-confirmed');\n        clearTimeout(priceWrap._bzPriceConfirmTimer);\n        var bzPriceTick = (priceWrap._bzPriceTick || 0) + 1;\n        priceWrap._bzPriceTick = bzPriceTick;\n        requestAnimationFrame(function(){\n          requestAnimationFrame(function(){\n            if (priceWrap._bzPriceTick !== bzPriceTick) return;\n            priceWrap.classList.add('is-confirmed');\n            priceWrap._bzPriceConfirmTimer = setTimeout(function(){\n              priceWrap.classList.remove('is-confirmed');\n            }, 900);\n          });\n        });\n      }\n\n      if (priceLive){\n        priceLive.textContent = '';\n        requestAnimationFrame(function(){\n          priceLive.textContent = (selectedLabel ? selectedLabel + ' selected. ' : '') + 'Price ' + v.price + '.';\n        });\n      }\n    }\n\n    function apply(){\n      var v = matchVariant(currentOptions());\n      if (!v) return;\n      var variantChanged = !idInput || String(idInput.value) !== String(v.id);\n      if (idInput) idInput.value = v.id;\n      if (priceMain) priceMain.textContent = v.price;\n      if (pairingCurrentPrice) pairingCurrentPrice.textContent = v.price;\n      if (pairingCurrentVariant && v.options) pairingCurrentVariant.textContent = v.options.join(' / ');\n      updateCompareAt(v);\n      if (priceFrom) priceFrom.style.display = 'none';\n      confirmVariantPrice(v, variantChanged);\n      updateVariantMedia(v);\n      updateStockAndQty(v);\n      if (addBtn){\n        addBtn.setAttribute('data-bz-variant-id', v.id);\n        addBtn.setAttribute('data-bz-product-handle', v.handle || scope.getAttribute('data-bz-product-handle') || '');\n        addBtn.setAttribute('data-bz-variant-available', v.available ? '1' : '0');\n        if (v.tracked && v.inv_policy !== 'continue') addBtn.setAttribute('data-bz-inventory-quantity', v.inv_qty || 0);\n        else addBtn.removeAttribute('data-bz-inventory-quantity');\n        if (v.available){\n          // 2026-10-03 mobile fix M-05: an in-stock size takes the button back from restock.\n          addBtn.removeAttribute('data-bz-restock');\n          addBtn.hidden = false;\n          if (soldoutWishlist) soldoutWishlist.hidden = true;\n          if (addBtn.getAttribute('data-bz-qty-blocked') === '1'){\n            addBtn.disabled = true;\n            addBtn.innerHTML = scopeLabel('data-bz-max-reached-label', 'Max reached');\n          } else if (typeof v.price_cents === 'number'){\n            addBtn.disabled = false;\n            addBtn.setAttribute('data-bz-unit-cents', v.price_cents);\n            updateAddBtnTotal();\n          } else {\n            addBtn.disabled = false;\n            addBtn.innerHTML = (addBtn.getAttribute('data-bz-add-label') || '') + v.price;\n          }\n        } else {\n          if (soldoutWishlist) soldoutWishlist.hidden = false;\n          // 2026-10-03 mobile fix M-05: hidden and disabled on wider screens as before; on\n          // phones the working \"Request a restock\" button (setSoldOutButton above).\n          setSoldOutButton();\n        }\n      }\n      try {\n        var url = new URL(window.location.href);\n        url.searchParams.set('variant', v.id);\n        window.history.replaceState({}, '', url);\n      } catch (e) {}\n    }\n\n    var radios = scope.querySelectorAll('input[data-bz-option]');\n    for (var i = 0; i < radios.length; i++){\n      radios[i].addEventListener('change', apply);\n    }\n  })();\n\n  // Qty steppers\n  function qtyMax(){\n    if (!qty) return null;\n    var m = parseInt(qty.getAttribute('max'), 10);\n    return isNaN(m) ? null : m;\n  }\n  function clampQty(v){\n    if (v < 1) v = 1;\n    var m = qtyMax();\n    if (m != null && v > m) v = m;\n    return v;\n  }\n  function qtyCapMessage(limit){\n    if (limit == null || isNaN(limit)) return 'Quantity updated.';\n    if (limit <= 0) return 'Sold out - quantity updated.';\n    return 'Only ' + limit + ' available - quantity updated.';\n  }\n  function showQtyCapFeedback(limit){\n    if (!qty) return;\n    var message = qtyCapMessage(limit);\n    if (window.bzInventoryGuard) {\n      if (typeof window.bzInventoryGuard.showInlineError === 'function') {\n        window.bzInventoryGuard.showInlineError(qty, message);\n      }\n      if (typeof window.bzInventoryGuard.showToast === 'function') {\n        window.bzInventoryGuard.showToast(message);\n      }\n    }\n    qty.classList.add('is-capped');\n    var row = qty.closest && qty.closest('.bz-product-qty__row');\n    if (row) row.classList.add('is-capped');\n    clearTimeout(qty._bzCapTimer);\n    qty._bzCapTimer = setTimeout(function(){\n      qty.classList.remove('is-capped');\n      if (row) row.classList.remove('is-capped');\n    }, 900);\n  }\n  var steppers = scope.querySelectorAll('[data-bz-qty-step]');\n  for (var k = 0; k < steppers.length; k++){\n    (function(btn){\n      btn.addEventListener('click', function(){\n        if (!qty || qty.disabled || btn.disabled) return;\n        var step = parseInt(btn.getAttribute('data-bz-qty-step'), 10) || 1;\n        var requested = (parseInt(qty.value, 10) || 1) + step;\n        var clamped = clampQty(requested);\n        if (clamped !== requested && step > 0) showQtyCapFeedback(qtyMax());\n        qty.value = clamped;\n        updateAddBtnTotal();\n      });\n    })(steppers[k]);\n  }\n  if (qty){\n    qty.addEventListener('input', updateAddBtnTotal);\n    qty.addEventListener('change', function(){\n      var requested = parseInt(qty.value, 10) || 1;\n      var clamped = clampQty(requested);\n      if (clamped !== requested) showQtyCapFeedback(qtyMax());\n      qty.value = clamped;\n      updateAddBtnTotal();\n    });\n    document.addEventListener('cart:update', function(event){\n      var cart = event && event.detail ? event.detail.resource : null;\n      if (cart && cart.items) updatePdpQtyFromCart(cart);\n      else refreshPdpQtyFromLiveCart();\n    });\n    refreshPdpQtyFromLiveCart();\n  }\n\n  // AJAX add \u2014 intercept the product form so submitting doesn't redirect to /cart.\n  // Keeps the customer on the PDP, flashes confirmation on the button, and opens\n  // the cart drawer if the theme has one mounted.\n  for (var ac = 0; ac < addonChecks.length; ac++){\n    addonChecks[ac].addEventListener('change', updateAddBtnTotal);\n  }\n  for (var al = 0; al < addonLinks.length; al++){\n    addonLinks[al].addEventListener('click', function(e){ e.stopPropagation(); });\n  }\n\n  var form = scope.querySelector('#bz-product-form');\n\n  // 2026-10-03 mobile fix M-05: while the button is the restock button, a press opens the\n  // restock link and nothing may add to cart. Both guards run in the capture phase on the\n  // document, ahead of every add-to-cart handler: the click (tap, Enter or Space on the\n  // button, Enter in a form field) and any submit that still gets through (requestSubmit).\n  if (addBtn){\n    document.addEventListener('click', function(e){\n      if (!isRestock() || !addBtn.contains(e.target)) return;\n      e.preventDefault();\n      e.stopImmediatePropagation();\n      openRestock();\n    }, true);\n    document.addEventListener('submit', function(e){\n      if (!isRestock() || !addBtn.form || e.target !== addBtn.form) return;\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }, true);\n  }\n\n  // 2026-10-03 mobile fix M-05: a page that opens on a sold-out size (?variant=, or a sold-out\n  // listing) gets the phone restock button too, and crossing 760px swaps the two states.\n  if (addBtn && restockMq){\n    if (restockMq.matches && addBtn.getAttribute('data-bz-variant-available') === '0') setSoldOutButton();\n    var onRestockMq = function(){\n      if (addBtn.getAttribute('data-bz-variant-available') === '0' && !addButtonBusy()) setSoldOutButton();\n    };\n    if (restockMq.addEventListener) restockMq.addEventListener('change', onRestockMq);\n    else if (restockMq.addListener) restockMq.addListener(onRestockMq);\n  }\n\n  if (form){\n    form.addEventListener('submit', function(e){\n      if (!window.bzCartAdd || typeof window.bzCartAdd.addItems !== 'function') return;\n      e.preventDefault();\n      // 2026-10-03 mobile fix M-05: the restock button never adds (the capture guard stops it first).\n      if (!addBtn || addBtn.disabled || isRestock()) return;\n\n      var fd = new FormData(form);\n      var id = parseInt(fd.get('id'), 10);\n      if (!id) return;\n      var quantity = parseInt(fd.get('quantity'), 10);\n      if (!quantity || quantity < 1) {\n        applyPdpQtyLimit(toInt(qty && qty.getAttribute('data-bz-cart-qty'), 0));\n        return;\n      }\n      var properties = {};\n      fd.forEach(function(value, key){\n        var m = key.match(/^properties\\[(.+)\\]$/);\n        if (m && value) properties[m[1]] = value;\n      });\n\n      // Mixed-size preferences (Size aim / Size note) are hoisted off the line\n      // item and onto cart attributes, keyed by product handle. Shopify keys\n      // cart lines by (variant_id, properties, selling_plan), so leaving these\n      // on the line meant every distinct aim/note combo spawned a new row for\n      // the same variant. Big Z still sees the preference on the cart page +\n      // in the admin order via cart attributes.\n      var productHandle = (scope.getAttribute && scope.getAttribute('data-bz-product-handle')) || '';\n      var productTitle = (scope.getAttribute && scope.getAttribute('data-bz-product-title')) || productHandle;\n      var hasSizePreferenceControls = !!form.querySelector('[name=\"properties[Size aim]\"], [name=\"properties[Size note]\"]');\n      var sizeAim = properties['Size aim'] || '';\n      var sizeNote = properties['Size note'] || '';\n      delete properties['Size aim'];\n      delete properties['Size note'];\n\n      var attrPayload = null;\n      // 2026-10-25 speed: only write Size aim / Size note when there is something to set or clear.\n      // This write used to run before every add (and the add waited for it), even when the shopper\n      // never touched either field.\n      var sizePrefKey = 'bz-sizepref:' + productHandle;\n      var hadSizePref = false;\n      try { hadSizePref = sessionStorage.getItem(sizePrefKey) === '1'; } catch (_e) {}\n      if (lastCartAttrs && (lastCartAttrs['Size aim - ' + productTitle] || lastCartAttrs['Size note - ' + productTitle])) hadSizePref = true;\n      if (hasSizePreferenceControls && productHandle && (sizeAim || sizeNote || hadSizePref)){\n        try {\n          if (sizeAim || sizeNote) sessionStorage.setItem(sizePrefKey, '1');\n          else sessionStorage.removeItem(sizePrefKey);\n        } catch (_e) {}\n        attrPayload = { attributes: {} };\n        // Empty string clears a previously-set attribute, so we always write\n        // both keys: that way picking \"No preference\" after picking \"Smaller\n        // end\" actually wipes the old value instead of leaving it stale.\n        attrPayload.attributes['Size aim - ' + productTitle] = sizeAim;\n        attrPayload.attributes['Size note - ' + productTitle] = sizeNote;\n      }\n\n      var item = {\n        id: id,\n        quantity: quantity,\n        properties: properties,\n        handle: productHandle\n      };\n      var items = [item];\n      for (var ai = 0; ai < addonChecks.length; ai++){\n        var addon = addonChecks[ai];\n        if (!addon.checked || addon.disabled) continue;\n        var addonId = parseInt(addon.getAttribute('data-bz-addon-variant-id'), 10);\n        if (!addonId) continue;\n        items.push({\n          id: addonId,\n          quantity: 1,\n          handle: addon.getAttribute('data-bz-addon-handle') || '',\n          properties: { '_Paired with': productTitle }\n        });\n      }\n\n      var prevHTML = addBtn.innerHTML;\n      addBtn.disabled = true;\n      addBtn.classList.add('is-loading');\n      addBtn.innerHTML = 'Adding\u2026';\n\n      var precondition = attrPayload\n        ? fetch('/cart/update.js', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify(attrPayload)\n          }).catch(function(){ /* tolerate; still do the add */ })\n        : Promise.resolve();\n\n      precondition.then(function(){\n        // 2026-10-25 speed: \"Added to cart\" as soon as Shopify accepts it; the cart sync follows.\n        return window.bzCartAdd.addItems(items, {\n          onAccepted: function(){\n            addBtn.innerHTML = 'Added to cart';\n            addBtn.classList.add('is-flashed');\n          }\n        });\n      })\n        .then(function(result){\n          if (result && result.cart) updatePdpQtyFromCart(result.cart);\n          addBtn.innerHTML = result && result.warning ? result.warning : 'Added to cart';\n          addBtn.classList.add('is-flashed');\n          setTimeout(function(){\n            addBtn.innerHTML = prevHTML;\n            addBtn.classList.remove('is-flashed');\n            addBtn.classList.remove('is-loading');\n            addBtn.disabled = false;\n            if (result && result.cart) updatePdpQtyFromCart(result.cart);\n            else refreshPdpQtyFromLiveCart();\n            if (addBtn.getAttribute('data-bz-qty-blocked') !== '1') updateAddBtnTotal();\n            // 2026-10-03 mobile fix M-05: a sold-out size picked mid-add keeps its sold-out button.\n            if (addBtn.getAttribute('data-bz-variant-available') === '0') setSoldOutButton();\n          }, 1800);\n        })\n        .catch(function(err){\n          addBtn.innerHTML = '\u26A0 ' + ((err && err.message) || 'Try again');\n          setTimeout(function(){\n            addBtn.innerHTML = prevHTML;\n            addBtn.classList.remove('is-loading');\n            addBtn.disabled = false;\n            refreshPdpQtyFromLiveCart();\n            if (addBtn.getAttribute('data-bz-qty-blocked') !== '1') updateAddBtnTotal();\n            // 2026-10-03 mobile fix M-05: a sold-out size picked mid-add keeps its sold-out button.\n            if (addBtn.getAttribute('data-bz-variant-available') === '0') setSoldOutButton();\n          }, 2200);\n        });\n    });\n  }\n})();\n"],
  "mappings": "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",
  "names": ["i", "k", "steppers"]
}
