{
  "version": 3,
  "sources": ["/cdn/shop/t/13/assets/cling-everywhere.js?nocache=1792362733178"],
  "sourcesContent": ["/*! Cling Fishing: a rainbow \"Customize\" button wherever a customizable product appears on the site.\r\n   Loaded on every page by snippets/cling-everywhere.liquid, which lists the customizable products (the products in\r\n   the \"Customizable\" collection) in window.ClingCustomizable.\r\n\r\n   For each of those products, anywhere on the page (collection grids, search results, the search dropdown,\r\n   recommendations, menus):\r\n     - links to the product open its customizer page (/products/<handle>?view=customizer)\r\n     - its product card, or its row in the search dropdown, gets a rainbow Customize button\r\n   On the product's own regular page, a Customize button is added above the add-to-cart form. Content the theme\r\n   adds later (the search dropdown as you type, \"load more\", recommendations) is handled as it appears. The cart and\r\n   the customizer's own pages are left alone.\r\n\r\n   These products are bought only through the customizer, with an approved proof: their Add to cart, Buy it now\r\n   and quick-add / Choose options buttons are hidden (on their pages, cards, sticky bars and quick views), and\r\n   anything else that tries to add one to the cart without a proof is stopped and sent to its customizer. The\r\n   customizer's own Add to cart (which carries the proof) and every other product are unaffected.\r\n\r\n   Dealers (customers buying for a B2B company, cfg.dealer): checkout needs at least cfg.dealerMin customized units in\r\n   the cart in total. While the cart has some but fewer, its checkout buttons (cart page, drawer, express checkout)\r\n   are replaced by a message saying how many more are needed; it recounts whenever the cart changes. */\r\n(function (global) {\r\n  'use strict';\r\n  const cfg = global.ClingCustomizable || {};\r\n  const handles = new Set((cfg.handles || []).map((h) => String(h).toLowerCase()));\r\n  if (!handles.size || !global.document) return;\r\n  const VIEW = cfg.view || 'customizer', LABEL = cfg.label || 'Customize';\r\n  // variant id -> product handle, for the customizable products\r\n  const VARIANTS = new Map((cfg.variants || []).map(([id, h]) => [String(id), String(h).toLowerCase()]));\r\n\r\n  /* ---------- styles: the same rainbow button as the selector page ---------- */\r\n  const css = `\r\n@property --cle-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }\r\n.cle-btn {\r\n  --cle-fill: rgb(var(--color-background, 255, 255, 255));\r\n  position: relative; z-index: 3;\r\n  display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;\r\n  height: 36px; padding: 0 10px 0 calc(10px + .2em); margin: 10px auto 2px;\r\n  border-radius: 6px; border: 2px solid transparent;\r\n  font: inherit; font-size: 15px; font-weight: 400; letter-spacing: .2em; line-height: 1; text-transform: uppercase;\r\n  text-decoration: none; color: inherit; white-space: nowrap; cursor: pointer;\r\n  background:\r\n    linear-gradient(var(--cle-fill), var(--cle-fill)) padding-box,\r\n    conic-gradient(from var(--cle-angle), #ff0000, #ff8a00, #ffe600 25%, #a8ff00, #00e000 45%, #00a0a0 52%, #0040ff 62%, #3a00ff 70%, #9b4dff 78%, #ee82ee 88%, #ff0000) border-box;\r\n  box-shadow: 0 2px 6px rgba(0, 0, 0, .18);\r\n  transition: transform .2s ease, box-shadow .2s ease;\r\n}\r\n.cle-btn:hover, .cle-btn:focus-visible, .cle-card:hover .cle-btn {\r\n  animation: cle-spin 1.6s linear infinite; transform: translateY(-1px); box-shadow: 0 5px 14px rgba(0, 0, 0, .24);\r\n}\r\n@keyframes cle-spin { to { --cle-angle: 360deg; } }\r\n.cle-btn-row { display: flex; justify-content: center; width: 100%; position: relative; z-index: 3; }\r\n.cle-btn-sm { height: 30px; font-size: 12px; padding: 0 8px 0 calc(8px + .2em); margin: 8px 0 2px; flex: none; }\r\n.cle-btn-row-sm { justify-content: center; }\r\n.cle-btn-page { width: 100%; height: 46px; font-size: 16px; margin: 0 0 12px; }\r\n.cle-btn-sticky { height: 40px; font-size: 13px; margin: 0; }\r\n[data-cle-hidden], [data-cle-gated] { display: none !important; }\r\n.cle-dealer-msg { margin: 0 0 12px; padding: 12px 14px; border: 1px solid #b42318; border-radius: 6px; background: #fff5f4;\r\n  color: #b42318; font-size: 14px; line-height: 1.45; text-align: left; }\r\n.cle-dealer-msg a { color: inherit; text-decoration: underline; }\r\n@media (prefers-reduced-motion: reduce) {\r\n  .cle-btn:hover, .cle-btn:focus-visible, .cle-card:hover .cle-btn { animation: none; transform: none; }\r\n}`;\r\n  const style = document.createElement('style');\r\n  style.setAttribute('data-cle', '');\r\n  style.textContent = css;\r\n  document.head.appendChild(style);\r\n\r\n  /* ---------- which links point at a customizable product ---------- */\r\n  const handleOf = (href) => {\r\n    try {\r\n      const u = new URL(href, location.href);\r\n      if (u.origin !== location.origin) return null;\r\n      const m = u.pathname.match(/\\/products\\/([^/?#]+)/);\r\n      return m ? decodeURIComponent(m[1]).toLowerCase() : null;\r\n    } catch (e) { return null; }\r\n  };\r\n  // the product's customizer page, keeping any language prefix and the chosen variant (its color)\r\n  const customizeUrl = (href) => {\r\n    const u = new URL(href, location.href);\r\n    const path = u.pathname.replace(/(\\/products\\/[^/?#]+).*$/, '$1');\r\n    const variant = u.searchParams.get('variant');\r\n    return path + '?view=' + VIEW + (variant ? '&variant=' + encodeURIComponent(variant) : '');\r\n  };\r\n  // places to leave alone: the customizer's own pages, our buttons, and the cart\r\n  const SKIP = '.cc, .ccp, [data-cle], cart-drawer, cart-items, cart-notification, [id*=\"cart\" i], [class*=\"cart-drawer\" i], [class*=\"mini-cart\" i]';\r\n  const inSearchDropdown = (el) => !!el.closest('predictive-search, [class*=\"predictive\" i], [id*=\"predictive\" i], [class*=\"search-drawer\" i], [class*=\"search__results\" i], [role=\"listbox\"]');\r\n\r\n  // The whole card for this product: climb from the link as far as possible while no link to a different product\r\n  // comes into view, stopping at the list or section that holds the cards. That's the product card in a grid (even\r\n  // when its picture and its title are separate links in separate parts of the card), or the row in the search\r\n  // dropdown, so each product gets exactly one button.\r\n  function cardFor(a, h) {\r\n    let el = a, top = null;\r\n    for (let i = 0; i < 12; i++) {\r\n      const p = el.parentElement;\r\n      if (!p || p.matches('main, header, footer, body, html, section, ul, ol, [role=\"listbox\"], [class*=\"shopify-section\" i]')) break;\r\n      const other = [...p.querySelectorAll('a[href*=\"/products/\"]')].some((x) => { const hx = handleOf(x.href); return hx && hx !== h; });\r\n      if (other) break;\r\n      top = p; el = p;\r\n    }\r\n    return top;\r\n  }\r\n\r\n  function addCardButton(card, url, small) {\r\n    if (card.querySelector('.cle-btn')) return;\r\n    const btn = document.createElement('a');\r\n    btn.className = 'cle-btn' + (small ? ' cle-btn-sm' : '');\r\n    btn.href = url; btn.textContent = LABEL; btn.setAttribute('data-cle', '');\r\n    btn.setAttribute('aria-label', LABEL + (card.querySelector('img[alt]') ? ' ' + card.querySelector('img[alt]').alt : ''));\r\n    card.classList.add('cle-card');\r\n    // The button goes inside the card, after its text (title, price, swatches) when it has a distinct info area.\r\n    // The card's own layout is never changed: themes often draw a result twice (a desktop and a phone version) and\r\n    // hide one with CSS, so each version gets its own button and only the visible one shows.\r\n    const wrap = document.createElement('div');\r\n    wrap.className = 'cle-btn-row' + (small ? ' cle-btn-row-sm' : ''); wrap.setAttribute('data-cle', '');\r\n    wrap.appendChild(btn);\r\n    const info = card.querySelector('[class*=\"card__info\" i], [class*=\"card__content\" i], [class*=\"product-item__info\" i], [class*=\"card-info\" i], [class*=\"product-info\" i]');\r\n    (info || card).appendChild(wrap);\r\n  }\r\n\r\n  // a Customize link for this page's product that opens the customizer in the color chosen on the page, read from\r\n  // the product form when it's tapped\r\n  function pageCustomizeLink(form, extraClass) {\r\n    const btn = document.createElement('a');\r\n    btn.className = 'cle-btn ' + extraClass; btn.setAttribute('data-cle', '');\r\n    btn.href = customizeUrl(location.href); btn.textContent = LABEL;\r\n    const update = () => {\r\n      const u = new URL(customizeUrl(location.href), location.href), v = form && form.querySelector('[name=\"id\"]');\r\n      if (v && v.value) u.searchParams.set('variant', v.value);\r\n      btn.href = u.pathname + u.search;\r\n    };\r\n    btn.addEventListener('pointerdown', update); btn.addEventListener('focus', update); btn.addEventListener('click', update);\r\n    return btn;\r\n  }\r\n\r\n  // the product's own regular page: a Customize button above the add-to-cart form\r\n  function productPage() {\r\n    const h = handleOf(location.href);\r\n    if (!h || !handles.has(h) || new URLSearchParams(location.search).get('view') === VIEW) return;\r\n    if (document.querySelector('.cle-btn-page')) return;\r\n    // the page's main add-to-cart form: not one inside a product card (recommendations, quick add) or the cart\r\n    const CARDISH = 'li, article, [role=\"option\"], [class*=\"card\" i], [class*=\"grid__item\" i], [class*=\"grid-item\" i], [class*=\"product-item\" i], [class*=\"product-block\" i], predictive-search';\r\n    const form = [...document.querySelectorAll('form[action*=\"/cart/add\"]')].find((f) =>\r\n      !f.closest(SKIP) && !f.closest(CARDISH) && f.querySelector('[type=\"submit\"], button[name=\"add\"]'));\r\n    if (!form) return;\r\n    form.parentElement.insertBefore(pageCustomizeLink(form, 'cle-btn-page'), form);\r\n  }\r\n\r\n  function scan(scope) {\r\n    (scope || document).querySelectorAll('a[href*=\"/products/\"]').forEach((a) => {\r\n      if (a.hasAttribute('data-cle-done') || a.closest(SKIP)) return;\r\n      const h = handleOf(a.href);\r\n      if (!h || !handles.has(h)) return;\r\n      a.setAttribute('data-cle-done', '');\r\n      const url = customizeUrl(a.href);\r\n      if (new URL(a.href, location.href).searchParams.get('view') !== VIEW) a.href = url;\r\n      // menus and breadcrumbs: just the link\r\n      if (a.closest('nav, [role=\"navigation\"], [class*=\"breadcrumb\" i]') && !inSearchDropdown(a)) return;\r\n      const card = cardFor(a, h);\r\n      // on the product's own page, its main area (photos, title, add-to-cart form) gets the page button instead\r\n      if (!card || (handleOf(location.href) === h && !inSearchDropdown(card) && card.querySelector('form[action*=\"/cart/add\"]') && !card.matches('li, article, product-card, [class*=\"product-card\" i], [class*=\"grid__item\" i]'))) return;\r\n      addCardButton(card, url, inSearchDropdown(card));\r\n    });\r\n  }\r\n\r\n  /* ---------- no Add to cart for these products outside the customizer ---------- */\r\n  const BUY_TEXT = /\\b(add to (cart|bag|basket)|buy (it )?now|choose options|select options|quick (add|buy|shop|view))\\b/i;\r\n  const BUY_SKIP = '.cc, .ccp, [data-cle], cart-drawer, cart-items, cart-notification, [class*=\"cart-drawer\" i], [class*=\"mini-cart\" i]';\r\n  const hide = (el) => { if (!el.hasAttribute('data-cle-hidden')) el.setAttribute('data-cle-hidden', ''); };\r\n  // the customizable product a form would add, if any (by the variant id it submits)\r\n  const formProduct = (f) => {\r\n    for (const el of f.querySelectorAll('[name=\"id\"]')) {\r\n      const vals = el.tagName === 'SELECT' ? [...el.options].map((o) => o.value) : [el.value];\r\n      for (const v of vals) if (VARIANTS.has(String(v))) return VARIANTS.get(String(v));\r\n    }\r\n    return null;\r\n  };\r\n  function hideBuying() {\r\n    if (!VARIANTS.size) return;\r\n    // add-to-cart forms for a customizable product, wherever they are: hide their buy buttons, keep the rest\r\n    // (color pickers stay, and the chosen color carries over to the customizer)\r\n    document.querySelectorAll('form[action*=\"/cart/add\"]').forEach((f) => {\r\n      if (f.closest(BUY_SKIP) || !formProduct(f)) return;\r\n      f.querySelectorAll('button, input[type=\"submit\"]').forEach((b) => {\r\n        if (b.type === 'submit' || b.name === 'add' || BUY_TEXT.test(b.textContent || b.value || '')) hide(b);\r\n      });\r\n      f.querySelectorAll('.shopify-payment-button, shopify-buy-it-now-button, [class*=\"payment-button\" i], [class*=\"dynamic-checkout\" i]').forEach(hide);\r\n      // quantity: set per color in the customizer, so the page's quantity selector goes too\r\n      // (the whole selector with its - and + buttons: its custom element if it has one, else the nearest wrapper named\r\n      // for quantity, looked for from the input's parent, since the input's own class often says \"quantity\" too)\r\n      const hideQty = (input) => hide(input.closest('quantity-selector') || input.closest('quantity-input') ||\r\n        (input.parentElement && input.parentElement.closest('[class*=\"quantity-selector\" i], [class*=\"quantity-input\" i], [class*=\"product-form__quantity\" i]')) || input);\r\n      f.querySelectorAll('input[name=\"quantity\"]').forEach(hideQty);\r\n      // things elsewhere that belong to this form (sticky add-to-cart bars, quantity selectors). getAttribute,\r\n      // because a form's .id property returns its field named \"id\" (the variant), which add-to-cart forms always have\r\n      const fid = f.getAttribute('id');\r\n      if (fid) document.querySelectorAll('[form=\"' + fid.replace(/\"/g, '') + '\"]').forEach((el) => {\r\n        if (el.matches('input[name=\"quantity\"]')) return hideQty(el);\r\n        if (!el.matches('button, input[type=\"submit\"]') || el.hasAttribute('data-cle-hidden')) return;\r\n        hide(el);\r\n        // a sticky bar's Add to cart becomes a Customize button\r\n        if (el.closest('.cle-btn-page, form') !== f && !el.parentElement.querySelector('.cle-btn-sticky')) {\r\n          el.parentElement.insertBefore(pageCustomizeLink(f, 'cle-btn-sm cle-btn-sticky'), el);\r\n        }\r\n      });\r\n    });\r\n    // their product cards and search rows: hide quick-add / Choose options buttons\r\n    document.querySelectorAll('.cle-card').forEach((card) => {\r\n      card.querySelectorAll('button, a, input[type=\"submit\"]').forEach((b) => {\r\n        if (!b.closest('[data-cle]') && BUY_TEXT.test(b.textContent || b.value || '')) hide(b);\r\n      });\r\n    });\r\n    // their own regular page: Buy it now buttons outside the form, and sticky add-to-cart bars\r\n    const h = handleOf(location.href);\r\n    if (h && handles.has(h) && new URLSearchParams(location.search).get('view') !== VIEW) {\r\n      document.querySelectorAll('.shopify-payment-button, shopify-buy-it-now-button').forEach((el) => { if (!el.closest(BUY_SKIP)) hide(el); });\r\n      document.querySelectorAll('[class*=\"sticky\" i] button, [class*=\"sticky\" i] input[type=\"submit\"], [id*=\"sticky\" i] button').forEach((b) => {\r\n        if (!b.closest(BUY_SKIP) && BUY_TEXT.test(b.textContent || b.value || '')) hide(b);\r\n      });\r\n    }\r\n  }\r\n\r\n  // Safety net: adding a customizable product without a customizer proof goes to its customizer instead.\r\n  // Checks cart requests (fetch and XMLHttpRequest, in the forms themes use) and plain form submissions.\r\n  const blockedProduct = (body) => {\r\n    if (!VARIANTS.size || body == null) return null;\r\n    const items = [];\r\n    try {\r\n      if (typeof FormData !== 'undefined' && body instanceof FormData) {\r\n        items.push({ id: body.get('id'), proof: body.get('properties[_proof_id]') });\r\n      } else if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\r\n        items.push({ id: body.get('id'), proof: body.get('properties[_proof_id]') });\r\n      } else if (typeof body === 'string') {\r\n        const t = body.trim();\r\n        if (t[0] === '{') {\r\n          const j = JSON.parse(t);\r\n          (j.items || [j]).forEach((it) => items.push({ id: it.id, proof: it.properties && it.properties._proof_id }));\r\n        } else {\r\n          const q = new URLSearchParams(t);\r\n          items.push({ id: q.get('id') || q.get('items[0][id]'), proof: q.get('properties[_proof_id]') || q.get('items[0][properties][_proof_id]') });\r\n        }\r\n      }\r\n    } catch (e) { return null; }\r\n    const hit = items.find((it) => it.id != null && VARIANTS.has(String(it.id)) && !it.proof);\r\n    return hit ? { handle: VARIANTS.get(String(hit.id)), variant: String(hit.id) } : null;\r\n  };\r\n  const sendToCustomizer = (b) => { location.href = '/products/' + b.handle + '?view=' + VIEW + '&variant=' + encodeURIComponent(b.variant); };\r\n  const isCartAdd = (url) => /\\/cart\\/add(\\.js)?(\\?|$)/.test(String(url || ''));\r\n  if (VARIANTS.size && !document.querySelector('.cc')) {\r\n    const origFetch = global.fetch;\r\n    if (origFetch) {\r\n      global.fetch = function (input, init) {\r\n        const url = typeof input === 'string' ? input : (input && input.url);\r\n        if (isCartAdd(url)) {\r\n          const b = blockedProduct(init && init.body);\r\n          if (b) { sendToCustomizer(b); return Promise.reject(new Error('This product is customized: opening its customizer.')); }\r\n        }\r\n        return origFetch.apply(this, arguments);\r\n      };\r\n    }\r\n    const XO = global.XMLHttpRequest && global.XMLHttpRequest.prototype;\r\n    if (XO) {\r\n      const open = XO.open, send = XO.send;\r\n      XO.open = function (m, url) { this.__cleUrl = url; return open.apply(this, arguments); };\r\n      XO.send = function (body) {\r\n        if (isCartAdd(this.__cleUrl)) { const b = blockedProduct(body); if (b) { sendToCustomizer(b); return; } }\r\n        return send.apply(this, arguments);\r\n      };\r\n    }\r\n    document.addEventListener('submit', (e) => {\r\n      const f = e.target;\r\n      if (!f || !f.matches || !f.matches('form[action*=\"/cart/add\"]') || f.closest(BUY_SKIP)) return;\r\n      const b = blockedProduct(new FormData(f));\r\n      if (b) { e.preventDefault(); e.stopImmediatePropagation(); sendToCustomizer(b); }\r\n    }, true);\r\n  }\r\n\r\n  /* ---------- dealers: checkout needs the minimum of customized units ---------- */\r\n  const DEALER = !!cfg.dealer, DEALER_MIN = parseInt(cfg.dealerMin, 10) || 20;\r\n  const CHECKOUT = 'button[name=\"checkout\"], input[name=\"checkout\"], a[href*=\"/checkout\"], form[action*=\"/checkout\"] [type=\"submit\"], ' +\r\n    '.additional-checkout-buttons, [data-shopify=\"dynamic-checkout-cart\"], shopify-accelerated-checkout-cart';\r\n  let customUnits = null, counting = false;\r\n  const short = () => DEALER && customUnits != null && customUnits > 0 && customUnits < DEALER_MIN;\r\n  function countCustomUnits() {\r\n    if (!DEALER || counting) return;\r\n    counting = true;\r\n    const rootUrl = (global.Shopify && global.Shopify.routes && global.Shopify.routes.root) || '/';\r\n    global.fetch(rootUrl + 'cart.js', { headers: { Accept: 'application/json' } })\r\n      .then((r) => r.json())\r\n      .then((c) => {\r\n        customUnits = (c.items || []).reduce((n, it) => n + (VARIANTS.has(String(it.variant_id)) ||\r\n          (it.properties && it.properties._proof_id && !it.properties._engraving_fee) ? it.quantity : 0), 0);\r\n      })\r\n      .catch(() => {})\r\n      .then(() => { counting = false; gateCheckout(); });\r\n  }\r\n  function gateCheckout() {\r\n    if (!DEALER || customUnits == null) return;\r\n    const isShort = short(), left = DEALER_MIN - customUnits;\r\n    document.querySelectorAll('.cle-dealer-msg').forEach((m) => m.remove());\r\n    document.querySelectorAll('[data-cle-gated]').forEach((el) => el.removeAttribute('data-cle-gated'));\r\n    if (!isShort) return;\r\n    const done = new Set();\r\n    document.querySelectorAll(CHECKOUT).forEach((el) => {\r\n      if (el.closest('.cc, .ccp, [data-cle]')) return;\r\n      el.setAttribute('data-cle-gated', '');\r\n      // one message per cart area (the cart form, a drawer), before its first checkout button\r\n      const area = el.closest('form, cart-drawer, cart-notification, [class*=\"drawer\" i]') || el.parentElement;\r\n      const box = el.parentElement;\r\n      if (!box || !area || done.has(area)) return;\r\n      done.add(area);\r\n      const msg = document.createElement('p');\r\n      msg.className = 'cle-dealer-msg'; msg.setAttribute('data-cle', ''); msg.setAttribute('role', 'status');\r\n      msg.innerHTML = 'Dealer orders with custom engraving need at least <strong>' + DEALER_MIN + '</strong> customized units in total. ' +\r\n        'Your cart has ' + customUnits + ': add ' + left + ' more to check out. ' +\r\n        '<a href=\"' + String(cfg.customizePage || '/pages/customize-claude').replace(/\"/g, '') + '\">Customize more</a>';\r\n      box.insertBefore(msg, el);\r\n    });\r\n  }\r\n  if (DEALER) {\r\n    // anything that still tries to check out while short: stopped, and the message shown\r\n    const stop = (e) => {\r\n      if (!short()) return;\r\n      e.preventDefault(); e.stopImmediatePropagation();\r\n      gateCheckout();\r\n      const m = document.querySelector('.cle-dealer-msg'); if (m) m.scrollIntoView({ block: 'center', behavior: 'smooth' });\r\n    };\r\n    document.addEventListener('click', (e) => {\r\n      const a = e.target.closest && e.target.closest('a[href*=\"/checkout\"], button[name=\"checkout\"], input[name=\"checkout\"]');\r\n      if (a && !a.closest('.cc, [data-cle]')) stop(e);\r\n    }, true);\r\n    document.addEventListener('submit', (e) => {\r\n      const f = e.target, by = e.submitter;\r\n      if ((by && by.name === 'checkout') || (f && f.getAttribute && /\\/checkout/.test(f.getAttribute('action') || ''))) stop(e);\r\n    }, true);\r\n    // recount whenever the cart changes (themes change it with fetch or XMLHttpRequest)\r\n    const isCartChange = (url) => /\\/cart\\/(add|change|update|clear)(\\.js)?(\\?|$)/.test(String(url || ''));\r\n    const f0 = global.fetch;\r\n    if (f0) global.fetch = function (input) {\r\n      const url = typeof input === 'string' ? input : (input && input.url);\r\n      const r = f0.apply(this, arguments);\r\n      if (isCartChange(url)) r.then(() => { customUnits = null; countCustomUnits(); }, () => {});\r\n      return r;\r\n    };\r\n    const XO = global.XMLHttpRequest && global.XMLHttpRequest.prototype;\r\n    if (XO) {\r\n      const open = XO.open, send = XO.send;\r\n      XO.open = function (m, url) { this.__cleUrl = url; return open.apply(this, arguments); };\r\n      XO.send = function () {\r\n        const url = this.__cleUrl || this.responseURL;\r\n        if (isCartChange(url)) this.addEventListener('loadend', () => countCustomUnits());\r\n        return send.apply(this, arguments);\r\n      };\r\n    }\r\n    countCustomUnits();\r\n  }\r\n\r\n  function run() { scan(document); productPage(); hideBuying(); gateCheckout(); }\r\n  // the theme adds content later (the search dropdown as you type, more products, recommendations)\r\n  let queued = false;\r\n  const later = () => { if (queued) return; queued = true; requestAnimationFrame(() => { queued = false; run(); }); };\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  new MutationObserver((list) => {\r\n    if (list.some((m) => [...m.addedNodes].some((n) => n.nodeType === 1 && !n.hasAttribute('data-cle')))) later();\r\n  }).observe(document.documentElement, { childList: true, subtree: true });\r\n\r\n  global.ClingEverywhere = { scan: run };\r\n})(window);\r\n"],
  "mappings": "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",
  "names": []
}
