{
  "version": 3,
  "sources": ["/cdn/shop/t/195/assets/bp-cart.js?r=20260908cur"],
  "sourcesContent": ["/* ============================================================\n   BarklyPaw GLOBAL - Buy 1 Get 1 cart logic (up to two deals per\n   order, Ram 2026-07-01). The buy-box ATC adds exactly ONE SET =\n   2 mats of one SIZE (same colour -> qty 2 of one variant; two\n   colours -> 1 of each), the second mat free via the automatic\n   per-size BOGO discount. Up to TWO SETS may exist in the cart, so\n   a customer can buy the deal twice. No quantity editing on mat\n   lines; the self-heal below collapses any drift back to two sets.\n   Per-size mat count must stay EVEN (a set is 2 mats).\n   Also: countdown timers, sticky mobile CTA, and the Pelsbarn-shaped\n   cart drawer (urgency clock, delivery ETA, upsell rail).\n\n   2026-09-02: the second-1+1-set cart upsell handler (wireUpsell /\n   observeCartUpsell / UP_COLORS, driven by snippets/bp-cart-second-set.liquid)\n   was REMOVED. That snippet has not been rendered since 2026-08-31, when Ram\n   pulled the \"20% off 4 mats\" discount out of the cart, so the code was dead.\n   The drawer's own upsell rail (Disco / Tug ball) replaces it.\n   ============================================================ */\n(function () {\n  'use strict';\n  window.BarklyPaw = window.BarklyPaw || {};\n  var BP = window.BarklyPaw;\n\n/* Localised copy is injected by layout/theme.liquid as window.BP_I18N. This file is a\n   static .js asset so it cannot use Liquid's `t` filter; T() reads the global and falls\n   back to the original English, so a missing key degrades instead of printing \"undefined\". */\nfunction T(key, fallback){\n  var d = window.BP_I18N || {};\n  return (typeof d[key] === 'string' && d[key]) ? d[key] : fallback;\n}\n  var BUNDLE_QTY = 2; /* a Buy 1 Get 1 set = 2 mats of one size */\n  var MAX_BUNDLE_SETS = 2;\n  var MAX_BUNDLE_MATS = BUNDLE_QTY * MAX_BUNDLE_SETS;\n  /* Mystery gift: every mat order carries one Nub ball, made $0 by the automatic Basic\n     discount DiscountAutomaticNode/1801323643197. It rides along with the first set, is\n     never counted as a mat, and is masked as a mystery in the cart and on /cart. */\n  var MYSTERY_VARIANT = 52904279900477;\n  var MYSTERY_PRODUCT = 10476362137917;\n  var MAT_PRODUCT = 10438284247357;\n  var MAT_HANDLE = 'barklypaw-cooling-mat-1plus1';\n  function cartHasMystery(cart){ return (cart && cart.items || []).some(function(it){ return String(it.variant_id)===String(MYSTERY_VARIANT); }); }\n\n  /* Only the cooling mat is part of the BOGO bundle arithmetic. The mystery gift\n     and any drawer upsell (Disco ball, Tug ball) are ordinary lines: they must\n     never be counted as mats, parity-trimmed or dropped by the self-heal.\n     (2026-09-02: before this, every non-gift line was treated as an XL mat.) */\n  function isMatItem(it) {\n    if (!it) return false;\n    if (String(it.product_id) === String(MAT_PRODUCT)) return true;\n    return String(it.handle || '') === MAT_HANDLE;\n  }\n  function sizeFromText(t) {\n    var m = String(t || '').match(/\\b(XS|XL|S|M|L)\\b/);\n    return m ? m[1] : null;\n  }\n  /* NOTE: the automatic BOGO discount SPLITS a set into two cart lines\n     (paid + free), so cost must be computed per VARIANT TOTAL, never\n     per line (verified live 2026-06-12). */\n  function variantTotals(cart) {\n    var byV = {};\n    (cart && cart.items || []).forEach(function (it) {\n      if (!isMatItem(it)) return; /* gift + upsells are not mats */\n      var k = String(it.variant_id);\n      if (!byV[k]) byV[k] = { qty: 0, size: sizeFromText(it.variant_title || it.title || '') };\n      byV[k].qty += (it.quantity || 0);\n    });\n    return byV;\n  }\n  /* mat variant ids in cart order - the only keys variantTotals() knows about */\n  function matOrder(cart) {\n    var order = [];\n    (cart && cart.items || []).forEach(function (it) {\n      if (!isMatItem(it)) return;\n      var k = String(it.variant_id);\n      if (order.indexOf(k) < 0) order.push(k);\n    });\n    return order;\n  }\n  function cartMatCount(cart) {\n    var byV = variantTotals(cart);\n    return Object.keys(byV).reduce(function (sum, k) {\n      return sum + (byV[k].qty || 0);\n    }, 0);\n  }\n  /* ---- money helper: \"$79\" in the US market; every other currency in its own symbol + ISO code, e.g. \"$112 AUD\",\n     \"\u20AC69.95 EUR\", \"\u00A360 GBP\", \"\u00A512,400 JPY\", \"AED 295\" (2026-09-08: local currencies live in every market;\n     Shopify.currency.active is whatever the visitor's market resolved to) ---- */\n  BP.money = function (cents) {\n    var n = (Number(cents) / 100);\n    var cur = (window.Shopify && Shopify.currency && Shopify.currency.active) || 'USD';\n    var s;\n    try {\n      s = new Intl.NumberFormat(cur === 'EUR' ? 'fr-FR' : 'en-US', { style: 'currency', currency: cur, currencyDisplay: 'narrowSymbol', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(n);\n    } catch (e) {\n      s = '$' + n.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 });\n    }\n    if (cur !== 'USD' && cur !== 'INR' && cur !== 'EUR' && s.indexOf(cur) < 0) s += ' ' + cur;\n    return s;\n  };\n\n  /* a BOGO SET = two mats of the SAME SIZE. Same color -> qty 2 of one variant;\n     two colors -> 1 of each (the per-size automatic discount frees one of the\n     pair, regardless of color). Both mats are the same size, so the set cost and\n     the discount are identical either way. */\n  function bundleItems(v1, v2) {\n    if (v2 && String(v2) !== String(v1)) {\n      return [{ id: Number(v1), quantity: 1 }, { id: Number(v2), quantity: 1 }];\n    }\n    return [{ id: Number(v1), quantity: BUNDLE_QTY }];\n  }\n  BP.bundleItems = bundleItems;\n\n  /* Kept for callers that explicitly need a one-set link; never used for recovery. */\n  var BP_ROOT = (window.Shopify && Shopify.routes && Shopify.routes.root) || '/';\n  function bundleCartUrl(v1, v2) {\n    if (v2 && String(v2) !== String(v1)) {\n      return BP_ROOT + 'cart/' + encodeURIComponent(String(v1)) + ':1,' + encodeURIComponent(String(v2)) + ':1?storefront=true';\n    }\n    return BP_ROOT + 'cart/' + encodeURIComponent(String(v1)) + ':' + BUNDLE_QTY + '?storefront=true';\n  }\n  BP.bundleCartUrl = bundleCartUrl;\n\n  /* ---- lightweight toast ---- */\n  BP.flash = function (msg) {\n    var t = document.createElement('div');\n    t.textContent = msg;\n    t.style.cssText = 'position:fixed;inset-inline:0;bottom:20px;margin:0 auto;max-width:340px;' +\n      'background:#382e2e;color:#fff;padding:13px 18px;border-radius:12px;text-align:center;' +\n      'font-weight:700;z-index:9999;box-shadow:0 10px 30px rgba(0,0,0,.3);font-family:Assistant,sans-serif';\n    document.body.appendChild(t);\n    setTimeout(function () { t.remove(); }, 3200);\n  };\n\n  /* ---- skeleton helper ----\n     Build a \"what you just added\" card from local variant data and\n     inject it into the drawer BEFORE the API confirms. The user sees\n     the exact product/size/color/price they picked instead of a blank\n     spinner. drawer.renderContents() will wipe the skeleton when the\n     real cart HTML lands (it replaces innerHTML of the section). */\n  function buildSkeletonHTML(variantId) {\n    var variantsEl = document.querySelector('[data-bp-variants]');\n    if (!variantsEl) return '';\n    var variants;\n    try { variants = JSON.parse(variantsEl.textContent || '[]'); } catch (e) { return ''; }\n    var v = null;\n    for (var i = 0; i < variants.length; i++) {\n      if (String(variants[i].id) === String(variantId)) { v = variants[i]; break; }\n    }\n    if (!v) return '';\n    /* image: prefer variant featured_image, else active hero slide, else any product image */\n    var img = '';\n    if (v.featured_image && v.featured_image.src) img = v.featured_image.src;\n    if (!img) {\n      var heroImg = document.querySelector('.bp-gal-slide.is-active img') ||\n                    document.querySelector('.bp-gal-slide img');\n      if (heroImg) img = heroImg.currentSrc || heroImg.src || '';\n    }\n    /* price for the cart = single mat (2nd is free via the BOGO discount) */\n    var priceCents = Number(v.price) || 0;\n    var priceTxt = BP.money(priceCents);\n    var variantTitle = (v.title || '').replace(' / ', ' \u00B7 ');\n    var safeImg = String(img).replace(/\"/g, '%22');\n    var safeTitle = (variantTitle + '').replace(/[<>]/g, '');\n    return '<div class=\"bp-cart-skeleton\" aria-hidden=\"true\">' +\n      '<div class=\"bp-skel-card\">' +\n        '<div class=\"bp-skel-img\">' + (safeImg ? '<img src=\"' + safeImg + '\" alt=\"\" loading=\"eager\">' : '') + '</div>' +\n        '<div class=\"bp-skel-meta\">' +\n          '<div class=\"bp-skel-title\">' + T('skel_title','BarklyPaw Cooling Mat') + '</div>' +\n          '<div class=\"bp-skel-variant\">' + safeTitle + '</div>' +\n          '<div class=\"bp-skel-bogo\">' + T('skel_bogo','2 mats \u00B7 second one free') + '</div>' +\n        '</div>' +\n        '<div class=\"bp-skel-price\">' + priceTxt + '</div>' +\n      '</div>' +\n      '<div class=\"bp-skel-loading\"><span class=\"bp-skel-dot\"></span><span class=\"bp-skel-dot\"></span><span class=\"bp-skel-dot\"></span></div>' +\n    '</div>';\n  }\n\n  /* Shared state avoids a cart GET when the server-rendered snapshot is fresh.\n     Each writer holds the same lock until its returned sections are confirmed. */\n  function cartSections() {\n    var ids = ['cart-drawer', 'cart-icon-bubble'];\n    ['main-cart-items', 'main-cart-footer'].forEach(function (id) {\n      var el = document.getElementById(id);\n      if (el && el.dataset.id && ids.indexOf(el.dataset.id) < 0) ids.push(el.dataset.id);\n    });\n    return ids.join(',');\n  }\n  function postCart(path, body) {\n    return fetch(BP_ROOT + path, {\n      method: 'POST', credentials: 'same-origin',\n      headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n      body: JSON.stringify(Object.assign({ sections: cartSections(), sections_url: window.location.pathname }, body))\n    }).then(function (r) {\n      BP.cartState.invalidate();\n      return r.json().then(function (res) {\n        if (!r.ok || !res || (res.status && Number(res.status) >= 400)) {\n          throw new Error((res && res.description) || 'Could not update your cart.');\n        }\n        return res;\n      });\n    });\n  }\n  function renderCart(res) {\n    var replacements = [];\n    ['main-cart-items', 'main-cart-footer'].forEach(function (id) {\n      var el = document.getElementById(id);\n      if (!el || !el.dataset.id) return;\n      var sid = el.dataset.id, html = res.sections && res.sections[sid];\n      var current = document.getElementById('shopify-section-' + sid);\n      var doc = html && new DOMParser().parseFromString(html, 'text/html');\n      var next = doc && doc.getElementById('shopify-section-' + sid);\n      if (!current || !next) throw new Error('Please reload your cart to confirm the total.');\n      replacements.push({ current: current, next: next });\n    });\n    var drawer = document.querySelector('cart-drawer');\n    if (drawer) {\n      if (typeof window.bpRenderCart === 'function') window.bpRenderCart(res);\n      else if (res.sections && res.sections['cart-drawer'] && typeof drawer.renderContents === 'function') drawer.renderContents(res);\n      else throw new Error('Please reload your cart to confirm the total.');\n    } else {\n      var bubble = document.getElementById('cart-icon-bubble');\n      if (bubble) {\n        var bubbleHTML = res.sections && res.sections['cart-icon-bubble'];\n        var bubbleDoc = bubbleHTML && new DOMParser().parseFromString(bubbleHTML, 'text/html');\n        var nextBubble = bubbleDoc && bubbleDoc.querySelector('.shopify-section');\n        if (!nextBubble) throw new Error('Please reload your cart to confirm the total.');\n        bubble.innerHTML = nextBubble.innerHTML;\n      }\n    }\n    replacements.forEach(function (part) { part.current.innerHTML = part.next.innerHTML; });\n    paintCartTimer();\n    paintDeliveryEta();\n    if (!drawer && !replacements.length) window.location.href = BP_ROOT + 'cart';\n  }\n  function recoverCart(err) {\n    BP.cartState.invalidate();\n    return BP.cartState.recover().then(function () {\n      if (!document.getElementById('main-cart-items')) return;\n      // The drawer recovery is shared; the full cart needs its own sections too.\n      return fetch(BP_ROOT + 'cart?sections=' + encodeURIComponent(cartSections()), {\n        credentials: 'same-origin', headers: { 'Accept': 'text/html' }\n      }).then(function (r) {\n        if (!r.ok) throw new Error('Please reload your cart to confirm the total.');\n        return r.json();\n      }).then(function (sections) { renderCart({ sections: sections }); });\n    }).then(function () {\n      BP.flash((err && err.message) || 'Your cart was refreshed. Please check it before trying again.');\n    }).catch(function () {\n      var checkout = document.getElementById('checkout');\n      if (checkout) checkout.disabled = true;\n      BP.flash('We could not confirm the update. Please reload your cart before checkout.');\n    });\n  }\n  /* Convert corrected variant totals to existing line keys, preserving properties,\n     discounts and ordinary products. Discount-split paid/free lines have unique keys. */\n  function matLineUpdates(cart, byV) {\n    var remaining = {}, updates = {};\n    Object.keys(byV).forEach(function (k) { remaining[k] = Math.max(0, byV[k].qty || 0); });\n    var hasMats = Object.keys(remaining).some(function (k) { return remaining[k] > 0; });\n    (cart.items || []).forEach(function (it) {\n      if (isMatItem(it)) {\n        if (!it.key) throw new Error('Your cart changed. Please reopen it and try again.');\n        var k = String(it.variant_id), qty = Math.min(it.quantity || 0, remaining[k] || 0);\n        remaining[k] = Math.max(0, (remaining[k] || 0) - qty);\n        updates[it.key] = qty;\n      } else if (!hasMats && String(it.product_id) === String(MYSTERY_PRODUCT)) {\n        if (!it.key) throw new Error('Your cart changed. Please reopen it and try again.');\n        updates[it.key] = 0;\n      }\n    });\n    return updates;\n  }\n\n  /* ---- bundle add-to-cart ----\n     One add request carries both mats, the first gift and Shopify-rendered totals.\n     An uncertain response is recovered by reading the cart, never by adding again. */\n  BP.addBundle = function (variantId, btn, variantId2) {\n    if (!variantId) {\n      BP.flash(T('pick_first','Choose a color and size first'));\n      return;\n    }\n    if (!BP.cartState || !BP.cartState.begin()) return;\n    if (btn) { btn.disabled = true; btn.classList.add('bp-loading'); }\n    var drawer = document.querySelector('cart-drawer');\n    function reEnable() {\n      if (btn) { btn.disabled = false; btn.classList.remove('bp-loading'); }\n      if (drawer) {\n        drawer.classList.remove('bp-cart-busy');\n        drawer.classList.remove('bp-cart-skeleton-shown');\n        var skel = drawer.querySelector('.bp-cart-skeleton');\n        if (skel) skel.remove();\n      }\n      BP.cartState.end();\n    }\n    // Immediate feedback while Shopify confirms the real cart and discounts.\n    if (drawer && typeof drawer.open === 'function') {\n      drawer.classList.add('bp-cart-busy');\n      var inner = drawer.querySelector('.drawer__inner');\n      var skel = buildSkeletonHTML(variantId);\n      if (inner && skel) {\n        var prev = inner.querySelector('.bp-cart-skeleton');\n        if (prev) prev.remove();\n        inner.insertAdjacentHTML('afterbegin', skel);\n        drawer.classList.add('bp-cart-skeleton-shown');\n      }\n      try { drawer.open(); } catch (e) {}\n    }\n    return BP.cartState.read().then(function (cart) {\n      if (cartMatCount(cart) + BUNDLE_QTY > MAX_BUNDLE_MATS) {\n        BP.flash(T('max_sets','You can add up to two sets per order'));\n        return null;\n      }\n      var items = bundleItems(variantId, variantId2);\n      if (!cartHasMystery(cart)) items.push({ id: MYSTERY_VARIANT, quantity: 1 });\n      return postCart('cart/add.js', { items: items });\n    }).then(function (res) {\n      if (!res) return;\n      restartCartTimer();\n      renderCart(res);\n    }).catch(recoverCart).finally(reEnable);\n  };\n\n  /* ---- secondary CTAs: smooth-scroll to the buy box ----\n     Any link pointing at #bp-buy brings the visitor to the buy box so\n     they pick size/color there. It must never jump to the cart. */\n  /* secondary \"#bp-buy\" links scroll to the buy box natively: the id is on\n     the hero .bp-wrap (a real laid-out element) with scroll-margin-top in\n     CSS. No JS needed - the browser handles the scroll reliably. */\n\n  /* ---- countdown timers (any [data-bp-countdown] element) ----\n     HONEST shipping-cutoff timer (Ram, 2026-06-13, replacing the old per-visitor\n     evergreen reset). The element carries data-bp-cutoff-hour=\"14\" = the real\n     daily dispatch cutoff. The clock counts down to today's cutoff; once it\n     passes, it rolls to tomorrow's cutoff and flips the \"ships today/tomorrow\"\n     label. No fake offer-deadline, nothing resets mid-session - the urgency is a\n     genuine, verifiable shipping promise (defensible on Meta + consumer law).\n     Each element may set data-bp-timezone so every visitor sees the same business\n     deadline regardless of their device timezone. */\n  function initCountdowns() {\n    var els = document.querySelectorAll('[data-bp-countdown]');\n    if (!els.length) return;\n\n    var WDAY = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n    // \"now\" as wall-clock parts in the element's business timezone.\n    function zonedNow(timeZone) {\n      try {\n        var p = new Intl.DateTimeFormat('en-US', {\n          timeZone: timeZone || 'Asia/Jerusalem', hour12: false, weekday: 'short',\n          year: 'numeric', month: '2-digit', day: '2-digit',\n          hour: '2-digit', minute: '2-digit', second: '2-digit'\n        }).formatToParts(new Date()).reduce(function (a, x) { a[x.type] = x.value; return a; }, {});\n        var hh = +p.hour === 24 ? 0 : +p.hour;\n        return { secs: hh * 3600 + (+p.minute) * 60 + (+p.second), wd: WDAY[p.weekday], day: p.year + p.month + p.day };\n      } catch (e) {\n        var d = new Date();\n        return { secs: d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds(), wd: d.getDay(), day: 'x' };\n      }\n    }\n    function pad(n) { return (n < 10 ? '0' : '') + n; }\n    function paint(el, total) { // total = seconds remaining\n      var dd = Math.floor(total / 86400), hh = Math.floor((total % 86400) / 3600),\n          mm = Math.floor((total % 3600) / 60), ss = total % 60;\n      var D = el.querySelector('[data-d]'), H = el.querySelector('[data-h]'),\n          M = el.querySelector('[data-m]'), S = el.querySelector('[data-s]');\n      if (D) D.textContent = pad(dd);\n      var dwraps = el.querySelectorAll('[data-d-wrap]');\n      for (var i = 0; i < dwraps.length; i++) dwraps[i].toggleAttribute('hidden', dd <= 0);\n      if (H) H.textContent = pad(hh);\n      if (M) M.textContent = pad(mm);\n      if (S) S.textContent = pad(ss);\n    }\n\n    function tick() {\n      els.forEach(function (el) {\n        var t = zonedNow(el.getAttribute('data-bp-timezone') || 'Asia/Jerusalem');\n        var H = el.querySelector('[data-h]'), M = el.querySelector('[data-m]'), S = el.querySelector('[data-s]');\n        var D = el.querySelector('[data-d]');\n\n        // MODE E: evergreen per-browser urgency window (Ram, 2026-06-13).\n        // data-bp-evergreen-sec     = countdown length in seconds (2916 = 48m36s).\n        // data-bp-evergreen-hold-sec = how long it sits at 00:00 after expiring\n        //   before a fresh window starts (default 3 days = 259200).\n        // The deadline is persisted per browser in localStorage and is NOT reset on\n        // refresh - a returning visitor keeps counting down from where they were.\n        // Once it hits zero it HOLDS at 00:00 for the hold period, then starts a fresh\n        // window. Renders HH:MM:SS (hours : minutes : seconds; only the days box is\n        // hidden, so the hours box shows 00 for a sub-hour window). The offer itself\n        // is permanent - this is an urgency timer, Ram's explicit choice.\n        var evgSec = parseInt(el.getAttribute('data-bp-evergreen-sec'), 10);\n        if (!isNaN(evgSec) && evgSec > 0) {\n          var holdSec = parseInt(el.getAttribute('data-bp-evergreen-hold-sec'), 10);\n          if (isNaN(holdSec) || holdSec < 0) holdSec = 259200; // 3 days\n          var ekey = 'bpEvg:' + (el.getAttribute('data-bp-evergreen-key') || evgSec);\n          var enow = Date.now();\n          var edl;\n          try { edl = parseInt(localStorage.getItem(ekey), 10); } catch (e) { edl = NaN; }\n          if (isNaN(edl) || enow >= edl + holdSec * 1000) {\n            // first visit, or the 00:00 hold period has fully elapsed \u2192 fresh window\n            edl = enow + evgSec * 1000;\n            try { localStorage.setItem(ekey, String(edl)); } catch (e) {}\n          }\n          // else: still counting down (enow < edl), or inside the 00:00 hold\n          // (edl <= enow < edl + hold) - keep the stored deadline untouched so a\n          // refresh never restarts the clock.\n          var ediff = Math.floor((edl - enow) / 1000);\n          if (ediff < 0) ediff = 0; // hold period shows 00:00:00\n          var ehh = Math.floor(ediff / 3600);        // hours (00 for a sub-hour window)\n          var emm = Math.floor((ediff % 3600) / 60);  // minutes\n          var ess = ediff % 60;                       // seconds\n          var ehid = el.querySelectorAll('[data-d-wrap]'); // hide only days; hours box stays (00)\n          for (var ei = 0; ei < ehid.length; ei++) ehid[ei].setAttribute('hidden', '');\n          if (D) D.textContent = '00';\n          if (H) H.textContent = pad(ehh);\n          if (M) M.textContent = pad(emm);\n          if (S) S.textContent = pad(ess);\n          el.removeAttribute('hidden');\n          return;\n        }\n\n        // MODE 0: weekly recurring deadline (Ram, 2026-06-13). data-bp-weekly-day\n        // (0=Sun..5=Fri) + data-bp-weekly-hour. Counts to the next occurrence in\n        // the element's business timezone and auto-restarts each week. The offer\n        // itself is permanent - this is a weekly urgency timer, by Ram's choice.\n        var wDay = parseInt(el.getAttribute('data-bp-weekly-day'), 10);\n        var wHour = parseInt(el.getAttribute('data-bp-weekly-hour'), 10);\n        if (!isNaN(wDay) && !isNaN(wHour)) {\n          var daysUntil = (wDay - t.wd + 7) % 7;\n          var total = daysUntil * 86400 + wHour * 3600 - t.secs;\n          if (total <= 0) total += 7 * 86400;\n          el.removeAttribute('hidden');\n          paint(el, total);\n          return;\n        }\n\n        // MODE 1: real offer-expiry deadline. data-bp-deadline = epoch ms\n        // of the actual Shopify discount endsAt. Honest because the offer truly\n        // expires then; when it passes, hide the urgency (no fake reset).\n        var deadline = parseInt(el.getAttribute('data-bp-deadline'), 10);\n        if (!isNaN(deadline) && deadline > 0) {\n          var diff = Math.floor((deadline - Date.now()) / 1000);\n          if (diff <= 0) { el.setAttribute('hidden', ''); return; }\n          el.removeAttribute('hidden');\n          var dd = Math.floor(diff / 86400);\n          var hh = Math.floor((diff % 86400) / 3600);\n          var mm = Math.floor((diff % 3600) / 60);\n          var ss = diff % 60;\n          if (D) D.textContent = pad(dd);\n          var dwraps = el.querySelectorAll('[data-d-wrap]');\n          for (var i = 0; i < dwraps.length; i++) dwraps[i].toggleAttribute('hidden', dd <= 0);\n          if (H) H.textContent = pad(hh);\n          if (M) M.textContent = pad(mm);\n          if (S) S.textContent = pad(ss);\n          return;\n        }\n\n        // MODE 2: daily shipping cutoff (data-bp-cutoff-hour)\n        var cutoffH = parseInt(el.getAttribute('data-bp-cutoff-hour'), 10);\n        if (isNaN(cutoffH)) cutoffH = 14;\n        var cutoffSecs = cutoffH * 3600;\n        var beforeCutoff = t.secs < cutoffSecs;\n        var remain = beforeCutoff ? (cutoffSecs - t.secs) : (86400 - t.secs + cutoffSecs);\n        var h = Math.floor(remain / 3600);\n        var m = Math.floor((remain % 3600) / 60);\n        var s = remain % 60;\n        if (H) H.textContent = pad(h);\n        if (M) M.textContent = pad(m);\n        if (S) S.textContent = pad(s);\n        var when = el.querySelector('[data-bp-cd-when]');\n        if (when) when.textContent = beforeCutoff ? 'today' : 'tomorrow';\n      });\n    }\n    tick();\n    setInterval(tick, 1000);\n  }\n\n  /* ---- sticky mobile CTA: show only AFTER the shopper has passed the main\n     add-to-cart. This mirrors the Israeli store and avoids covering the first\n     mobile viewport while the actual purchase controls are still below it. ---- */\n  function initSticky() {\n    var bar = document.querySelector('[data-bp-sticky]');\n    var heroBtn = document.querySelector('[data-bp-hero-atc]');\n    if (!bar || !heroBtn) return;\n    document.body.classList.add('bp-has-sticky');\n    function update() {\n      var r = heroBtn.getBoundingClientRect();\n      var on = r.bottom < 0;\n      bar.classList.toggle('is-on', on);\n      bar.setAttribute('aria-hidden', on ? 'false' : 'true');\n      if (on) bar.removeAttribute('tabindex');\n      else bar.setAttribute('tabindex', '-1');\n    }\n    window.addEventListener('scroll', update, { passive: true });\n    window.addEventListener('pageshow', update);\n    window.addEventListener('resize', update, { passive: true });\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(update, { threshold: [0, 1] }).observe(heroBtn);\n    }\n    update();\n    setTimeout(update, 400);\n    setTimeout(update, 1500);\n  }\n\n  /* Removing a mat drops its variant and restores same-size pair parity. The\n     existing lines are updated atomically; the cart is never cleared and rebuilt. */\n  function initCartRemoveLock() {\n    document.addEventListener('click', function (e) {\n      var btn = e.target.closest('cart-remove-button, .cart-remove-button');\n      if (!btn) return;\n      e.preventDefault();\n      e.stopImmediatePropagation();\n      if (!BP.cartState || !BP.cartState.begin()) return;\n      var pendingDrawer = document.querySelector('cart-drawer');\n      if (pendingDrawer) pendingDrawer.classList.add('bp-cart-busy');\n      var idxEl = btn.closest('[data-index]');\n      var idx = parseInt((btn.dataset && btn.dataset.index) || (idxEl && idxEl.dataset.index), 10);\n      var row = btn.closest('.cart-item, .bp-cd-item');\n      var keyedControl = row && row.querySelector('[data-bp-key]');\n      var lineKey = btn.dataset.bpKey || (keyedControl && keyedControl.dataset.bpKey);\n      var quantityControl = row && row.querySelector('[data-quantity-variant-id]');\n      var displayedVariant = quantityControl && quantityControl.dataset.quantityVariantId;\n      BP.cartState.read().then(function (cart) {\n        var item = lineKey ? (cart.items || []).find(function (it) { return it.key === lineKey; }) : (cart.items || [])[idx - 1];\n        if (!item || !item.key || (displayedVariant && String(item.variant_id) !== displayedVariant)) throw new Error('Your cart changed. Please reopen it and try again.');\n        if (/-fountain$/.test(item.handle || '')) {\n          var updates = {}, remaining = 0, subscriptions = 0;\n          updates[item.key] = 0;\n          cart.items.forEach(function(it){ if(it.key!==item.key && /-fountain$/.test(it.handle||'')){remaining+=it.quantity;if(!/one-time|fountain only/i.test(it.variant_title||''))subscriptions+=it.quantity;} });\n          var kept = {};\n          cart.items.forEach(function(it){\n            var id=String(it.variant_id), required={ '67828211384637':remaining*2,'67828213317949':subscriptions,'67843590193469':subscriptions,'67828215251261':0 };\n            if(Object.prototype.hasOwnProperty.call(required,id)){updates[it.key]=kept[id]?0:required[id];kept[id]=true;}\n          });\n          return postCart('cart/update.js', { updates: updates });\n        }\n        if (!isMatItem(item)) return postCart('cart/change.js', { id: item.key, quantity: 0 });\n        var byV = variantTotals(cart), order = matOrder(cart), ck = String(item.variant_id);\n        if (byV[ck]) byV[ck].qty = 0;\n        var bySize = {};\n        order.forEach(function (k) { var sz = byV[k].size || 'XL'; bySize[sz] = (bySize[sz] || 0) + byV[k].qty; });\n        Object.keys(bySize).forEach(function (sz) {\n          if (bySize[sz] % BUNDLE_QTY !== 0) {\n            for (var i = 0; i < order.length; i++) {\n              var k = order[i];\n              if (byV[k].qty > 0 && (byV[k].size || 'XL') === sz) { byV[k].qty -= 1; break; }\n            }\n          }\n        });\n        return postCart('cart/update.js', { updates: matLineUpdates(cart, byV) });\n      }).then(renderCart).catch(recoverCart).finally(function () {\n        if (pendingDrawer) pendingDrawer.classList.remove('bp-cart-busy');\n        BP.cartState.end();\n      });\n    }, true);\n  }\n\n  /* ---- order-rules safety net ----\n     Self-heals carts that drift out of bounds (permalink edits, console,\n     third-party apps). Two rules:\n       1. per-SIZE mat count is EVEN (a set is 2 mats of one size) - an odd\n          mat is trimmed (\"you can only buy the bundle\");\n       2. TWO SETS PER ORDER - the cart may hold at most two sets (4 mats).\n          Extra mats are trimmed while preserving full pairs where possible.\n     Runs deferred on page load. */\n  function enforceBundleCeiling() {\n    if (!BP.cartState || BP.cartState.isBusy() || !BP.cartState.begin()) return;\n    var pendingDrawer = null, mutationStarted = false;\n    return BP.cartState.read()\n      .then(function (cart) {\n        if (!cart || !cart.items || cart.items.length === 0) return;\n        /* per-VARIANT totals (the BOGO discount splits sets into two lines) */\n        var byV = variantTotals(cart);\n        var order = matOrder(cart); // MAT variant ids, cart order\n        var changed = false;\n        function setQty(k, q) { byV[k].qty = q; changed = true; }\n        function trimNewestMatOfSize(sz) {\n          for (var i = 0; i < order.length; i++) {\n            var k = order[i];\n            if (byV[k].qty > 0 && (byV[k].size || 'XL') === sz) { setQty(k, byV[k].qty - 1); return true; }\n          }\n          return false;\n        }\n        function trimNewestSet() {\n          var sz = null;\n          for (var i = 0; i < order.length; i++) {\n            if (byV[order[i]].qty > 0) { sz = byV[order[i]].size || 'XL'; break; }\n          }\n          if (sz == null) return false;\n          var removed = 0;\n          var guard = 0;\n          while (removed < BUNDLE_QTY && guard < 200) {\n            guard++;\n            if (!trimNewestMatOfSize(sz)) break;\n            removed++;\n          }\n          return removed > 0;\n        }\n        // rule 1: per-SIZE mat count must be EVEN. A SET is two mats of the SAME\n        // SIZE (colors may differ); the per-size automatic discount frees one of\n        // each same-size pair. An odd count for a size = one unpaired full-price\n        // mat, which we trim (\"you can only buy the bundle\"). Replaces the old\n        // per-VARIANT-even rule, which wrongly deleted a legit two-COLOR pair\n        // (each color qty 1).\n        function fixParity() {\n          var bySize = {};\n          order.forEach(function (k) { var s = byV[k].size || 'XL'; bySize[s] = (bySize[s] || 0) + byV[k].qty; });\n          Object.keys(bySize).forEach(function (s) { if (bySize[s] % BUNDLE_QTY !== 0) trimNewestMatOfSize(s); });\n        }\n        fixParity();\n        // rule 2: TWO SETS PER ORDER. Mixed sizes are allowed as long as every\n        // size remains paired and the cart total stays at four mats or below.\n        var totalMats = function () {\n          var t = 0; order.forEach(function (k) { t += byV[k].qty; }); return t;\n        };\n        var guard = 0;\n        while (totalMats() > MAX_BUNDLE_MATS && guard < 200) { guard++; if (!trimNewestSet()) break; }\n        fixParity();\n        if (!changed) return;\n        var lineUpdates = matLineUpdates(cart, byV);\n        pendingDrawer = document.querySelector('cart-drawer');\n        if (pendingDrawer) pendingDrawer.classList.add('bp-cart-busy');\n        mutationStarted = true;\n        return postCart('cart/update.js', { updates: lineUpdates }).then(renderCart);\n      })\n      .catch(function (err) { if (mutationStarted) return recoverCart(err); })\n      .finally(function () {\n        if (pendingDrawer) pendingDrawer.classList.remove('bp-cart-busy');\n        BP.cartState.end();\n      });\n  }\n  BP.enforceBundleCeiling = enforceBundleCeiling;\n\n  /* ============================================================\n     CART DRAWER - urgency clock, delivery date, upsell rail\n     (Pelsbarn clone, 2026-09-02). Markup: snippets/cart-drawer.liquid.\n     Everything here is re-render safe: the drawer's innerHTML is swapped\n     wholesale by drawer.renderContents(), so nothing binds to a node -\n     the paint functions re-query the DOM and the click handler is\n     delegated on document.\n     ============================================================ */\n  var CART_TIMER_KEY = 'bp_cart_timer_end';\n  var CART_TIMER_MS = 4 * 60 * 1000; /* Pelsbarn's data-urgency-minutes=\"4\" */\n\n  function readCartDeadline() {\n    try { var v = parseInt(sessionStorage.getItem(CART_TIMER_KEY), 10); return isNaN(v) ? 0 : v; }\n    catch (e) { return 0; }\n  }\n  function writeCartDeadline(v) {\n    try { sessionStorage.setItem(CART_TIMER_KEY, String(v)); } catch (e) {}\n  }\n  /* opening the drawer starts the clock, but never shortens a running one */\n  function beginCartTimer() {\n    var end = readCartDeadline();\n    if (!end || end <= Date.now()) writeCartDeadline(Date.now() + CART_TIMER_MS);\n    paintCartTimer();\n  }\n  function restartCartTimer() {\n    writeCartDeadline(Date.now() + CART_TIMER_MS);\n    paintCartTimer();\n  }\n  BP.restartCartTimer = restartCartTimer;\n\n  function pad2(n) { return (n < 10 ? '0' : '') + n; }\n\n  function paintCartTimer() {\n    var nodes = document.querySelectorAll('[data-bp-cart-clock]');\n    if (!nodes.length) return; /* empty cart / no drawer: nothing to keep alive */\n    var end = readCartDeadline();\n    var left = end - Date.now();\n    /* OWNER RULE (Ram): on expiry we do NOT push anyone to checkout the way\n       Pelsbarn does - the clock simply starts over. */\n    if (!end || left <= 0) {\n      end = Date.now() + CART_TIMER_MS;\n      writeCartDeadline(end);\n      left = CART_TIMER_MS;\n    }\n    var s = Math.max(0, Math.ceil(left / 1000));\n    var txt = pad2(Math.floor(s / 60)) + ':' + pad2(s % 60);\n    for (var i = 0; i < nodes.length; i++) {\n      if (nodes[i].textContent !== txt) nodes[i].textContent = txt;\n    }\n  }\n\n  /* Estimated delivery = today + 8 BUSINESS days (Mon-Fri), i.e. the nearer end of the\n     published 8 to 16 business-day transit window. Computed on the America/New_York\n     wall-clock date so every visitor sees one date, and rendered the way Pelsbarn does\n     it: \"Estimated delivery: Wednesday, Sep 16\". */\n  var ETA_BUSINESS_DAYS = 8;\n  var US_WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n  var US_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n  function storeToday() {\n    var now = new Date();\n    try {\n      var p = new Intl.DateTimeFormat('en-CA', {\n        timeZone: (window.Shopify && Shopify.country === 'AU') ? 'Australia/Sydney' : 'America/New_York', year: 'numeric', month: '2-digit', day: '2-digit'\n      }).format(now).split('-');\n      return new Date(Number(p[0]), Number(p[1]) - 1, Number(p[2]));\n    } catch (e) {\n      return new Date(now.getFullYear(), now.getMonth(), now.getDate());\n    }\n  }\n  function addBusinessDays(from, days) {\n    var d = new Date(from.getFullYear(), from.getMonth(), from.getDate());\n    var added = 0, guard = 0;\n    while (added < days && guard < 400) {\n      guard++;\n      d.setDate(d.getDate() + 1);\n      var wd = d.getDay();\n      if (wd !== 0 && wd !== 6) added++; /* weekends are not business days */\n    }\n    return d;\n  }\n  function paintDeliveryEta() {\n    var nodes = document.querySelectorAll('[data-bp-eta]');\n    if (!nodes.length) return;\n    var d = addBusinessDays(storeToday(), ETA_BUSINESS_DAYS);\n    var key = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();\n    var txt = 'Estimated delivery: ' + US_WEEKDAYS[d.getDay()] + ', ' +\n      US_MONTHS[d.getMonth()] + ' ' + d.getDate();\n    for (var i = 0; i < nodes.length; i++) {\n      if (nodes[i].getAttribute('data-bp-eta') !== key) {\n        nodes[i].textContent = txt;\n        nodes[i].setAttribute('data-bp-eta', key);\n      }\n    }\n  }\n\n  /* \"Score! You saved $X \uD83C\uDF89\" bubble over the button that was just pressed */\n  function cartBubble(rect, text) {\n    try {\n      if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n      var b = document.createElement('div');\n      b.className = 'bp-cd-bubble';\n      b.textContent = text;\n      b.style.left = Math.round(rect.left + rect.width / 2) + 'px';\n      b.style.top = Math.round(rect.top - 6) + 'px';\n      document.body.appendChild(b);\n      setTimeout(function () { b.classList.add('is-out'); }, 1200);\n      setTimeout(function () { if (b.parentNode) b.parentNode.removeChild(b); }, 1700);\n    } catch (e) {}\n  }\n\n  /* Upsell rail: one click = add 1 of that variant, re-render the drawer via\n     Section Rendering, restart the clock, celebrate the saving. */\n  function initCartUpsell() {\n    document.addEventListener('click', function (e) {\n      var t = e.target;\n      if (!t || !t.closest) return;\n      var btn = t.closest('[data-bp-up-add]');\n      if (!btn) return;\n      var card = btn.closest('[data-bp-up-id]');\n      if (!card) return;\n      e.preventDefault();\n      var vid = parseInt(card.getAttribute('data-bp-up-id'), 10);\n      if (!vid) return;\n      var save = card.getAttribute('data-bp-up-save') || '';\n      var rect = btn.getBoundingClientRect();\n      btn.disabled = true;\n      btn.classList.add('is-loading');\n      var drawer = document.querySelector('cart-drawer');\n      fetch('/cart/add.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n        credentials: 'same-origin',\n        body: JSON.stringify({\n          items: [{ id: vid, quantity: 1 }],\n          sections: drawer ? 'cart-drawer,cart-icon-bubble' : 'cart-icon-bubble',\n          sections_url: window.location.pathname\n        })\n      })\n        .then(function (r) { return r.json(); })\n        .then(function (res) {\n          if (!res || (res.status && Number(res.status) >= 400)) throw new Error('add failed');\n          restartCartTimer();\n          if (drawer && typeof drawer.renderContents === 'function' && res.sections) {\n            drawer.classList.remove('is-empty');\n            drawer.renderContents(res);\n            paintCartTimer();\n            paintDeliveryEta();\n            if (save) cartBubble(rect, 'Score! You saved ' + save + ' \uD83C\uDF89');\n          } else {\n            window.location.reload();\n          }\n        })\n        .catch(function () {\n          btn.disabled = false;\n          btn.classList.remove('is-loading');\n          BP.flash(\"Couldn't add that, please try again\");\n        });\n    }, false);\n  }\n\n  /* Start the clock when the drawer opens and repaint after every re-render.\n     Patched on the prototype so it covers the header cart icon, the buy-box\n     ATC and Dawn's own quantity/remove re-renders alike. */\n  function hookCartDrawer() {\n    var C = (window.customElements && customElements.get) ? customElements.get('cart-drawer') : null;\n    if (C && C.prototype) {\n      if (typeof C.prototype.open === 'function' && !C.prototype.bpTimerHook) {\n        var openOrig = C.prototype.open;\n        C.prototype.open = function () {\n          try { beginCartTimer(); paintDeliveryEta(); } catch (e) {}\n          return openOrig.apply(this, arguments);\n        };\n        C.prototype.bpTimerHook = true;\n      }\n      if (typeof C.prototype.renderContents === 'function' && !C.prototype.bpRenderHook) {\n        var renderOrig = C.prototype.renderContents;\n        C.prototype.renderContents = function () {\n          var out = renderOrig.apply(this, arguments);\n          try { paintCartTimer(); paintDeliveryEta(); } catch (e) {}\n          return out;\n        };\n        C.prototype.bpRenderHook = true;\n      }\n    }\n    /* Dawn's quantity path swaps .drawer__inner without touching renderContents,\n       so watch the host and repaint whatever comes back. */\n    var host = document.getElementById('CartDrawer');\n    if (host && window.MutationObserver) {\n      new MutationObserver(function () {\n        paintCartTimer();\n        paintDeliveryEta();\n      }).observe(host, { childList: true, subtree: true });\n    }\n    var icon = document.getElementById('cart-icon-bubble');\n    if (icon) icon.addEventListener('click', function () { beginCartTimer(); }, true);\n  }\n\n  function initCartUrgency() {\n    hookCartDrawer();\n    paintCartTimer();\n    paintDeliveryEta();\n    setInterval(function () {\n      paintCartTimer();\n      paintDeliveryEta();\n    }, 1000);\n  }\n\n  function boot() {\n    initCountdowns();\n    initSticky();\n    initCartRemoveLock();\n    /* 2026-09-07 (Ram: simpler global cart): the urgency clock, delivery ETA and\n       upsell rail are no longer booted. Their markup left snippets/cart-drawer.liquid\n       on the same day; the functions above stay so the ATC path's\n       restartCartTimer()/paint*() calls remain harmless no-ops. */\n    /* Cart-ceiling self-heal runs OFF the critical path. It's a defensive\n       safety net for edge-cases (permalink exploit, third-party app drift),\n       not a primary code path, so we shouldn't pay its network round-trip\n       on first paint. requestIdleCallback runs it when the browser is idle;\n       fallback to a 1.5s setTimeout for browsers without rIC. */\n    var deferredCeiling = function () { enforceBundleCeiling(); };\n    if (typeof window.requestIdleCallback === 'function') {\n      window.requestIdleCallback(deferredCeiling, { timeout: 3000 });\n    } else {\n      setTimeout(deferredCeiling, 1500);\n    }\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else { boot(); }\n})();\n"],
  "mappings": "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",
  "names": ["skel", "guard"]
}
