{
  "version": 3,
  "sources": ["/cdn/shop/t/105/assets/bf-2026.js?nocache=1793922723012"],
  "sourcesContent": ["/*\n * BF2026 engine (Claude, 2026-11-04)\n * ----------------------------------\n * Black Friday: 1 free Wigglitz (shopper picks) per $15 of QUALIFYING cart, plus\n * stacked gifts (Biggie Wigglitz / Trading Mat / Limited Edition Gold Jimothy).\n *\n * Config: snippets/bf-2026-config.liquid (window.BF2026_CONFIG)\n * Totem:  snippets/bf-2026-bar.liquid (page data + gift pictures, every page) + assets/bf-2026.css\n * Docs:   _bf2026/notes/engine-README.md\n *\n * Public API (window.BF2026), shared with the Build a Bundle pick mode:\n *   isActive()                    -> bool\n *   getState()                    -> {qualifyingUSD, earned, picked, remaining, tiersReached,\n *                                     nextTier, suggestion, ...extras}\n *   refresh()                     -> Promise<state>  (re-reads /cart.js and reconciles)\n *   addFreePick(variantId, title) -> Promise<{ok, reason?, state}>\n *   setBiggieFace(variantId)      -> Promise<{ok, reason?, state}>\n *   document event \"bf2026:update\" (detail = state) after every reconcile.\n *\n * The theme only adds/removes gift lines. The gifts are made free at checkout by\n * automatic Shopify discounts; free picks are the existing $0 character variants.\n * Nothing in here is entitlement enforcement: it is all UX.\n *\n * Lines this file owns carry _bf_pick or _bf_gift. It never changes any other line.\n *\n * 2026-11-04b review fixes: gifts only for the US market + USD (the discounts are US only);\n * ?bf_preview only on a non-live theme; \"Free\" only when Shopify really made the line $0;\n * sold out only when Shopify says so (not any 4xx); cart page +/- and Remove go by line key;\n * 10 s request timeout; budget pause retries itself; paid \"picks\" are removed; server clock.\n *\n * 2026-11-04c (Matthew: \"build from the bottom up\"): the offer is 4 steps.\n *   Step 1: Every $15, get a free Wigglitz!          Step 2: At $115, get a free Biggie Wigglitz\n *   Step 3: At $145, get a free Trading Mat          Step 4: At $195, get a free Limited Edition Gold Jimothy GIANTZ\n * Every message now reads like those steps (\"You're on Step 2! Add a GIANTZ Broc and the\n * Trading Mat is yours!\"). Free shipping is no longer a bar goal (it is not a step); the cart\n * panel keeps one small line for it. New: the Biggie picker modal (openBiggiePicker), which\n * opens by itself once per session when the Biggie lands in the cart with no face chosen.\n *\n * 2026-11-05a (engine prep, no new UI): the Step 2 gift is the \"Biggie Wigglitz Key Chain\" and\n * its default face is Ocho (config defaultFace; was the first face in the list = Winky).\n * New pure helpers for the \"gets you there\" rule (config getsYouThere + wigglitzLadder):\n *   getsYouThere(gapUSD, cartProductHandles[, wigglitzInCart])\n *     -> {type:'product', handle, title, price, variantId, phrase} | {type:'wigglitz', count, reason} | null\n *   getsYouThereCopy(result, gapUSD, tierKey), wigglitzPriceCents(n) (28-32 picks = 33 Bundle price),\n *   equivalentFree(n) (null until something is picked). State gains handles, wigglitzInCart,\n *   getsYouThere, equivalentFree; one \"bf2026:gifts-added\" event per add, even when it passes two gifts.\n *\n * 2026-11-05b (LOCKED OFFER, Matthew Nov 5 ~12:35 PM, replaces everything earlier):\n *   \"Every $10 = a bonus free Wigglitz!\" (stepUSD 10). Gifts stack: $115 Biggie Wigglitz Key Chain,\n *   $155 Trading Mat, $195 Limited Edition Gold Jimothy GIANTZ, $375 Pterodactyl (hidden: true =\n *   dropped here, never shown). \"All gifts stack! \uD83C\uDF81\". Milestone visual \"30 free at $300\".\n *   The old bottom \"Step 1 / Step 2\" bar is gone: one black & gold climbing GIFT TOTEM on every\n *   storefront page (right edge), with a tap-open panel. window.BF2026Totem:\n *     setPending(usd)  lighter fill on top of the real cart (Build a Bundle's bundle being picked); 0 clears\n *     mount(el?)       draw inside el instead of fixed to the screen edge (no el = back to fixed); true\n *     hide() / show()  page-level override\n *   It re-renders on every \"bf2026:update\" (after ANY cart add/change on any page: fetch + XHR +\n *   jQuery hooks, the header cart count, the Winky event).\n *\n * 2026-11-05c (\"Nov 5 final\", Matthew's notes 2:50-2:55 PM + the #marketing test thread):\n *   - The totem shows only once something is in the cart (cart item_count > 0), or while Build a Bundle\n *     draws a bundle in progress (setPending > 0).\n *   - Two confetti levels: every new bonus free Wigglitz (each $10) = a mini burst of small gold stars;\n *     a free gift reached = a BIG explosion (gold + black + white, ~1.5 s). One add never gets both.\n *     Only for increases during this visit (sessionStorage bf2026_tt_seen), never on page load.\n *   - Tip copy: \"You're $88 away from your first free gift: Biggie Wigglitz Key Chain!\" +\n *     \"The Volcano Playsetz gets you there faster!\" / \"Add 9 more Wigglitz to get there!\" (gap rounded UP).\n *   - The $375 Shiny Gold & Teal Pterodactyl is SHOWN (config hidden: false), never added while its\n *     variant id is null. The totem scale has a knee so $115 / $155 / $195 keep their room.\n *   - Team bugs: picks + gifts always read \"FREE\" (cart page + header summary), Remove on them looks\n *     like every other Remove, a gift the shopper removes stays out until the cart grows past that\n *     total, the last paid item out = EVERY Black Friday line out in ONE /cart/update.js request,\n *     nothing comes back until a paid item does, and a gift that keeps getting taken out at the\n *     same cart total is not re-added a third time (add/remove loop guard).\n */\n(function (window) {\n  'use strict';\n\n  var CFG = window.BF2026_CONFIG || null;\n  var doc = window.document;\n  var noop = function () {};\n  var VERSION = '2026-11-05c';\n\n  /* ------------------------------------------------------------------ storage */\n\n  function ssGet(k) { try { return window.sessionStorage.getItem(k); } catch (e) { return null; } }\n  function ssSet(k, v) { try { window.sessionStorage.setItem(k, v); } catch (e) { /* private mode */ } }\n  function ssDel(k) { try { window.sessionStorage.removeItem(k); } catch (e) { /* private mode */ } }\n\n  // sessionStorage, not localStorage: custom.js runs localStorage.clear() on every\n  // checkout click, and BAB restores anything under \"bundle \" / \"addonProduct_\".\n  var PREVIEW_KEY = (CFG && CFG.previewParam) || 'bf_preview';\n  var KEY_OOS = 'bf2026_oos';\n  var KEY_FACE = 'bf2026_face';\n  var KEY_RELOAD = 'bf2026_reload';\n  var KEY_DEBUG = 'bf2026_debug';\n  var KEY_SKEW = 'bf2026_skew';\n  var KEY_FACE_ASKED = 'bf2026_face_asked';   // the Biggie picker opened by itself this session\n  var KEY_DECLINED = 'bf2026_declined';     // Nov 5 final: {tier: qualifying cents when the shopper removed that gift}\n  var KEY_ADDS = 'bf2026_gift_adds';        // Nov 5 final: {tier: {c: qualifying cents, n: gift adds at that total}}\n  var READD_MAX = 2;                        // a gift taken out twice at the same cart total is not added a third time\n  var OOS_TTL_MS = 15 * 60 * 1000;          // a sold-out gift add is retried at most every 15 min\n  var DEBOUNCE_MS = 350;\n  var MAX_ROUNDS_PER_MIN = 8;               // hard stop against ping-pong with other cart apps\n  var FETCH_TIMEOUT_MS = 10000;             // a stalled cart request must never block the chain\n  var RETRY_429_MS = 3000;\n\n  var MUT_RE = /\\/cart\\/(add|change|update|clear)(\\.js)?(\\?|#|\\/|$)/;\n\n  // QA preview only on a theme that is NOT live (preview_theme_id, theme editor). On the\n  // live theme it would turn the engine on before the discounts start (gift lines charged)\n  // or after they end (free picks for every $15, for ever).\n  function previewAllowed() {\n    var t = window.Shopify && window.Shopify.theme;\n    return !!t && t.role !== 'main';\n  }\n\n  function readUrlFlags() {\n    var s = (window.location && window.location.search) || '';\n    var m = new RegExp('[?&]' + PREVIEW_KEY + '=([^&#]*)').exec(s);\n    if (m) {\n      if (m[1] === '1') { if (previewAllowed()) ssSet(PREVIEW_KEY, '1'); }\n      else if (m[1] === '0') ssDel(PREVIEW_KEY);\n    }\n    var d = /[?&]bf_debug=([01])/.exec(s);\n    if (d) { if (d[1] === '1') ssSet(KEY_DEBUG, '1'); else ssDel(KEY_DEBUG); }\n  }\n\n  function log() {\n    if (ssGet(KEY_DEBUG) !== '1' || !window.console) return;\n    try { console.log.apply(console, ['[BF2026]'].concat([].slice.call(arguments))); } catch (e) { /* old console */ }\n  }\n\n  /* --------------------------------------------------------------------- time */\n\n  var START = CFG ? Date.parse(CFG.startsAt) : NaN;\n  var END = CFG ? Date.parse(CFG.endsAt) : NaN;\n\n  // Server clock: a phone set ahead must not switch the engine on before the discounts\n  // start. skew = server minus device, learned from the Date header of every /cart.js.\n  var skew = parseInt(ssGet(KEY_SKEW), 10) || 0;\n  function now() { return Date.now() + skew; }\n  function noteServerDate(r) {\n    try {\n      var d = r && r.headers && r.headers.get ? r.headers.get('Date') : null;\n      var t = d ? Date.parse(d) : NaN;\n      if (!isFinite(t)) return;\n      var s = t - Date.now();\n      if (Math.abs(s) < 5000) s = 0;                 // 1 s header resolution + latency: noise\n      if (s !== skew) { skew = s; ssSet(KEY_SKEW, String(s)); log('clock skew', s); }\n    } catch (e) { /* no headers */ }\n  }\n\n  function inPreview() { return previewAllowed() && ssGet(PREVIEW_KEY) === '1'; }\n  function isActive() {\n    if (!CFG) return false;\n    if (inPreview()) return true;\n    var t = now();\n    return t >= START && t <= END;\n  }\n  function isEnded() { return !!CFG && !inPreview() && now() > END; }\n\n  /* -------------------------------------------------------------------- money */\n\n  function cents(n) { return Math.round((Number(n) || 0) * 100); }\n  function shopCurrency() { return (CFG && CFG.shopCurrency) || 'USD'; }\n  function cartCurrency(cart) {\n    return (cart && cart.currency) ||\n      (window.Shopify && window.Shopify.currency && window.Shopify.currency.active) || shopCurrency();\n  }\n  // Shopify.currency.rate = presentment per 1 unit of shop currency, so USD = local / rate.\n  function rateFor(cart) {\n    if (cartCurrency(cart) === shopCurrency()) return 1;\n    var r = parseFloat(window.Shopify && window.Shopify.currency && window.Shopify.currency.rate);\n    return r > 0 ? r : 1;\n  }\n  function toUSDc(c, rate) { return Math.round((Number(c) || 0) / (rate || 1)); }\n  function isUSD(currency) { return String(currency || '').toUpperCase() === 'USD'; }\n  // \"$15\" for USD carts. Other currencies get \"US$15\": the step is counted in US dollars.\n  function stepText(currency) {\n    var n = Number(CFG && CFG.stepUSD) || 10;\n    return (isUSD(currency) ? '$' : 'US$') + n;\n  }\n  // The offer, word for word (Matthew, Nov 5 locked): \"Every $10 = a bonus free Wigglitz!\", then the gifts.\n  function step1Line(currency) { return 'Every ' + stepText(currency) + ' = a bonus free Wigglitz!'; }\n  function stackNote() { return (CFG && CFG.allGiftsNote) || 'All gifts stack! \uD83C\uDF81'; }\n  function tierLine(t, currency) {\n    return 'At ' + (isUSD(currency) ? '$' : 'US$') + t.at + ', get a free ' + t.label;\n  }\n  // The gift discounts are limited to the US market (runbook 04b), so a gift line added for\n  // anyone else would be charged. Free picks are $0 products and work everywhere.\n  function giftsOK(cart) {\n    if (!isUSD(cartCurrency(cart))) return false;\n    var want = CFG && CFG.giftMarketId;\n    if (want == null || want === '') return true;\n    var mk = CFG && CFG.market;\n    if (mk != null && mk !== '') return String(mk) === String(want);\n    // Liquid gave no market: fall back to the shopper's country.\n    var c = window.Shopify && window.Shopify.country;\n    return !c || c === ((CFG && CFG.giftCountry) || 'US');\n  }\n  function fmtMoney(c, currency) {\n    c = Math.round(Number(c) || 0);\n    var whole = c % 100 === 0;\n    try {\n      return new Intl.NumberFormat('en-US', {\n        style: 'currency', currency: currency || 'USD',\n        minimumFractionDigits: whole ? 0 : 2, maximumFractionDigits: whole ? 0 : 2\n      }).format(c / 100);\n    } catch (e) {\n      return '$' + (c / 100).toFixed(whole ? 0 : 2);\n    }\n  }\n\n  /* ------------------------------------------------------------------- config */\n\n  function lower(s) { return String(s == null ? '' : s).toLowerCase(); }\n  var EXCL = ((CFG && CFG.excludeTitles) || []).map(lower);\n  var NEVER = ((CFG && CFG.neverSuggestTitles) || []).map(lower);\n  function hasAny(title, list) {\n    var t = lower(title);\n    for (var i = 0; i < list.length; i++) { if (list[i] && t.indexOf(list[i]) !== -1) return true; }\n    return false;\n  }\n\n  var AVAIL = {};\n  String((CFG && CFG.availability) || '').split(',').forEach(function (pair) {\n    var kv = pair.split(':');\n    if (kv.length === 2 && kv[0]) AVAIL[kv[0]] = (kv[1] === 'true');\n  });\n  var FACE_IMG = {};\n  String((CFG && CFG.biggieImages) || '').split('~').forEach(function (pair) {\n    var i = pair.indexOf('|');\n    if (i > 0) FACE_IMG[pair.slice(0, i)] = pair.slice(i + 1);\n  });\n\n  // Nov 5 v2: a tier with hidden: true (the Pterodactyl, not real yet) must not show ANYWHERE. The\n  // engine drops it, and takes it out of BF2026_CONFIG.tiers too (kept in tiersHidden), so every\n  // other script that reads the config (Build a Bundle, homepage cards) never sees it either.\n  if (CFG && CFG.tiers && CFG.tiers.length) {\n    CFG.tiersHidden = CFG.tiers.filter(function (t) { return t && t.hidden; });\n    CFG.tiers = CFG.tiers.filter(function (t) { return t && !t.hidden; });\n  }\n  var TIERS = ((CFG && CFG.tiers) || []).map(function (t, i) {\n    var variants = (t.variants && t.variants.length) ? t.variants : null;\n    var variantId = t.variantId ? Number(t.variantId) : null;\n    return {\n      key: String(t.key), min: Number(t.min), minC: cents(t.min),\n      // step number + the whole-dollar amount the shopper sees (\"At $115\"); min is 10 cents under it\n      step: Number(t.step) || (i + 2), at: Number(t.at) || Math.round(Number(t.min) || 0),\n      label: t.label || t.key, phrase: t.phrase || t.label || t.key,\n      short: t.short || t.label || t.key, tag: t.tag || '', note: t.note || '',\n      variants: variants, variantId: variantId,\n      // Biggie: the face used when the shopper has not picked one (Nov 5: Ocho)\n      defaultFace: variants && t.defaultFace ? Number(t.defaultFace) : null,\n      coming: !variants && !variantId\n    };\n  });\n  var TIER_BY_KEY = {};\n  TIERS.forEach(function (t) { TIER_BY_KEY[t.key] = t; });\n  var CLIMB = ((CFG && CFG.climb) || []).map(function (c, i) {\n    return {\n      key: c.key, title: c.title || c.label, label: c.label, phrase: c.phrase || c.label,\n      variantId: c.variantId ? Number(c.variantId) : null, url: c.url || null,\n      price: Number(c.price) || 0, priceC: cents(c.price), order: i\n    };\n  });\n\n  // Nov 5 v2: visual-only milestones on the totem (\"30 free at $300\"), not gifts.\n  var MILES = ((CFG && CFG.milestones) || []).map(function (m) {\n    return { key: String(m.key || m.at), at: Number(m.at) || 0, label: m.label || '', short: m.short || m.label || '',\n      showAfterC: cents(m.showAfterUSD != null ? m.showAfterUSD : 0) };\n  }).filter(function (m) { return m.at > 0; });\n\n  var ROOT = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/';\n  function url(path) { return ROOT.replace(/\\/?$/, '/') + String(path).replace(/^\\//, ''); }\n\n  /* ---------------------------------------------------- availability memory */\n\n  function oosMap() { try { return JSON.parse(ssGet(KEY_OOS) || '{}') || {}; } catch (e) { return {}; } }\n  function isOOS(id) {\n    var t = oosMap()[String(id)];\n    return !!t && (Date.now() - t) < OOS_TTL_MS;\n  }\n  function markOOS(id) {\n    var m = oosMap();\n    m[String(id)] = Date.now();\n    ssSet(KEY_OOS, JSON.stringify(m));\n    log('remembered sold out', id);\n  }\n  /* --------------------------- declined gifts + add/remove loop guard (Nov 5 final) */\n\n  // Mirela / Haden / Jerry (#marketing test, Nov 5): the shopper must always be able to take a gift out\n  // (and empty the cart). A gift they remove stays out until the cart grows past the total it was\n  // removed at. A gift something else keeps taking out (an app, a theme script) is added at most\n  // READD_MAX times at the same cart total, so the engine never fights it in a loop.\n  function ssJSON(k) { try { var v = JSON.parse(ssGet(k) || '{}'); return v && typeof v === 'object' ? v : {}; } catch (e) { return {}; } }\n  function isDeclined(key, qc) {\n    var d = ssJSON(KEY_DECLINED)[key];\n    return typeof d === 'number' && qc <= d;\n  }\n  function noteDeclined(key, qc) {\n    var d = ssJSON(KEY_DECLINED);\n    d[key] = Math.max(0, Math.round(Number(qc) || 0));\n    ssSet(KEY_DECLINED, JSON.stringify(d));\n    log('gift declined', key, qc);\n  }\n  // \"Add it back \u2192\" (cart panel): the shopper wants it again, so the loop guard's count starts over too.\n  function clearDeclined(key) {\n    var d = ssJSON(KEY_DECLINED), a = ssJSON(KEY_ADDS);\n    if (key in d) { delete d[key]; ssSet(KEY_DECLINED, JSON.stringify(d)); }\n    if (key in a) { delete a[key]; ssSet(KEY_ADDS, JSON.stringify(a)); }\n  }\n  function addsBlocked(key, qc) {\n    var a = ssJSON(KEY_ADDS)[key];\n    return !!a && a.c === qc && a.n >= READD_MAX;\n  }\n  function noteGiftAdd(key, qc) {\n    var m = ssJSON(KEY_ADDS);\n    var a = m[key];\n    if (!a || a.c !== qc) a = { c: qc, n: 0 };\n    a.n++;\n    m[key] = a;\n    ssSet(KEY_ADDS, JSON.stringify(m));\n    if (a.n >= READD_MAX) log('gift added ' + a.n + 'x at the same total, not again at this total', key, qc);\n  }\n  // After every cart read: a decline ends once the cart grows past it; add counts belong to one total;\n  // an emptied cart (nothing counts) starts fresh.\n  function syncGuards(qc) {\n    var d = ssJSON(KEY_DECLINED), a = ssJSON(KEY_ADDS), dc = false, ac = false;\n    Object.keys(d).forEach(function (k) { if (!(qc > 0) || qc > d[k]) { delete d[k]; dc = true; } });\n    Object.keys(a).forEach(function (k) { if (!a[k] || a[k].c !== qc) { delete a[k]; ac = true; } });\n    if (dc) ssSet(KEY_DECLINED, JSON.stringify(d));\n    if (ac) ssSet(KEY_ADDS, JSON.stringify(a));\n  }\n\n  function liquidAvailable(id) { return AVAIL[String(id)] !== false; }   // unknown -> try it\n  function usableVariant(id) { return !!id && liquidAvailable(id) && !isOOS(id); }\n\n  function biggieTier() { return TIER_BY_KEY.biggie || null; }\n  function biggieName() { var t = biggieTier(); return (t && t.label) || 'Biggie Wigglitz'; }\n  function faceList() { var t = biggieTier(); return (t && t.variants) || []; }\n  function faceById(id) {\n    var f = faceList();\n    for (var i = 0; i < f.length; i++) { if (Number(f[i].id) === Number(id)) return f[i]; }\n    return null;\n  }\n  function storedFace() {\n    var v = parseInt(ssGet(KEY_FACE), 10);\n    return faceById(v) ? v : null;\n  }\n\n  function giftCandidates(t) {\n    if (t.coming) return [];\n    if (t.variants) {\n      var list = [];\n      var sf = storedFace();\n      if (sf && usableVariant(sf)) list.push(sf);\n      // No choice yet: the default face (Ocho) first, then the others in config order.\n      var df = t.defaultFace;\n      var dfOk = !!df && t.variants.some(function (v) { return Number(v.id) === df; });\n      if (dfOk && usableVariant(df) && list.indexOf(df) === -1) list.push(df);\n      t.variants.forEach(function (v) {\n        var id = Number(v.id);\n        if (usableVariant(id) && list.indexOf(id) === -1) list.push(id);\n      });\n      return list;\n    }\n    return usableVariant(t.variantId) ? [t.variantId] : [];\n  }\n\n  /* --------------------------------------------------------- classification */\n\n  function propsOf(it) { return (it && it.properties && typeof it.properties === 'object') ? it.properties : {}; }\n  function bfKind(it) {\n    var p = propsOf(it);\n    if (p._bf_gift) return 'gift';\n    if (p._bf_pick) return 'pick';\n    // Nov 6 night (Matthew): \"Pick for me\" = N x the $0 Mystery Wigglitz fulfillment packs. They count as picked.\n    if (p._bf_auto) return 'auto';\n    return null;\n  }\n  function qualifies(it, rate) {\n    if (bfKind(it)) return false;\n    if (it.gift_card) return false;\n    if (lower(it.vendor).trim() !== lower((CFG && CFG.vendor) || 'Wigglitz')) return false;\n    if (hasAny(it.product_title || it.title, EXCL)) return false;\n    var unit = Math.max(Number(it.original_price) || 0, Number(it.price) || 0);\n    return toUSDc(unit, rate) > cents(CFG && CFG.paidMinUSD != null ? CFG.paidMinUSD : 0.5);\n  }\n\n  /* -------------------------------------------------------------- suggestions */\n\n  function pickSuggestion(gapC, inCart) {\n    var cands = CLIMB.filter(function (c) {\n      if (!c.variantId && !c.url) return false;\n      if (hasAny(c.title, NEVER) || hasAny(c.label, NEVER)) return false;\n      if (c.variantId && !usableVariant(c.variantId)) return false;\n      return true;\n    });\n    if (!cands.length) return null;\n    cands.sort(function (a, b) {\n      if (a.priceC !== b.priceC) return a.priceC - b.priceC;\n      var ia = a.variantId && inCart[String(a.variantId)] ? 1 : 0;\n      var ib = b.variantId && inCart[String(b.variantId)] ? 1 : 0;\n      if (ia !== ib) return ia - ib;                       // a GIANTZ they don't have yet first\n      return a.order - b.order;\n    });\n    var hit = null;\n    for (var i = 0; i < cands.length; i++) { if (cands[i].priceC >= gapC) { hit = cands[i]; break; } }\n    if (!hit) {\n      // Nothing covers the gap on its own: name the biggest item.\n      var top = cands[cands.length - 1].priceC;\n      for (var j = 0; j < cands.length; j++) { if (cands[j].priceC === top) { hit = cands[j]; break; } }\n    }\n    var s = { key: hit.key, label: hit.label, phrase: hit.phrase, price: hit.price };\n    if (hit.variantId) s.variantId = hit.variantId; else s.url = hit.url;\n    return s;\n  }\n\n  /* ------------------------------------------- \"gets you there\" (Nov 5) */\n\n  // Wigglitz price by pick count, in cents (config wigglitzLadder = the mockups' price-each ladder):\n  //   n < 15: n x 299 \u00B7 n < 33: 2699 + (n-15) x 180 \u00B7 n < 64: 4999 + (n-33) x 151 \u00B7 else 8699 + (n-64) x 136\n  // 28 to 32 picks snap to the 33 Bundle price (4999), so the cost per Wigglitz never goes up.\n  // A MODEL for suggestion copy only: Build a Bundle C itself sells exactly 15 / 33 / 64 (+$1.36 each past 64).\n  var LADDER_DEFAULT = {\n    retailEachCents: 299,\n    steps: [{ from: 0, base: 0, each: 299 }, { from: 15, base: 2699, each: 180 }, { from: 33, base: 4999, each: 151 }, { from: 64, base: 8699, each: 136 }],\n    snaps: [{ from: 28, to: 32, cents: 4999 }]\n  };\n  var LADDER = (function (l) {\n    if (!l || !l.steps || !l.steps.length) l = LADDER_DEFAULT;\n    var steps = l.steps.map(function (x) {\n      return { from: Math.max(0, Math.floor(Number(x.from) || 0)), base: Math.round(Number(x.base) || 0), each: Math.round(Number(x.each) || 0) };\n    }).sort(function (a, b) { return a.from - b.from; });\n    var snaps = (l.snaps || []).map(function (x) {\n      return { from: Number(x.from), to: Number(x.to), cents: Math.round(Number(x.cents) || 0) };\n    }).filter(function (x) { return x.from > 0 && x.to >= x.from && x.cents > 0; });\n    return { retail: Math.round(Number(l.retailEachCents) || 299), steps: steps, snaps: snaps };\n  })(CFG && CFG.wigglitzLadder);\n\n  function wigglitzPriceCents(n) {\n    n = Math.max(0, Math.floor(Number(n) || 0));\n    if (!n) return 0;\n    for (var i = 0; i < LADDER.snaps.length; i++) {\n      var sn = LADDER.snaps[i];\n      if (n >= sn.from && n <= sn.to) return sn.cents;\n    }\n    var st = LADDER.steps[0];\n    for (var j = 1; j < LADDER.steps.length; j++) { if (n >= LADDER.steps[j].from) st = LADDER.steps[j]; }\n    if (n < st.from) return n * LADDER.retail;\n    return st.base + (n - st.from) * st.each;\n  }\n\n  // \"You're getting the equivalent of N free Wigglitz\" next to $2.99 each, rounded down.\n  // null until something is picked (Claude's pick, Nov 5: only show it once they've added something).\n  function equivalentFree(n) {\n    n = Math.max(0, Math.floor(Number(n) || 0));\n    if (!n) return null;\n    return Math.max(0, Math.floor((n * LADDER.retail - wigglitzPriceCents(n)) / LADDER.retail));\n  }\n\n  // How many more Wigglitz (on top of `have` already picked) close the gap at the ladder price.\n  // The CHEAPEST count that closes it; if two counts cost the same, the bigger one. The ladder is\n  // not always rising (10-14 singles cost more than the 15 Bundle, 58-63 more than the 64 Bundle),\n  // so the fewest is not always the best deal: from 33 picks a $44.92 gap is 37 more ($45.16), not 30 ($45.30).\n  function wigglitzToClose(gapC, have) {\n    have = Math.max(0, Math.floor(Number(have) || 0));\n    var base = wigglitzPriceCents(have), best = null, bestC = Infinity;\n    for (var k = 1; k <= 1000; k++) {\n      var c = wigglitzPriceCents(have + k);\n      if (c - base >= gapC && c <= bestC) { best = k; bestC = c; }\n    }\n    return best;\n  }\n\n  var GYT_CFG = (CFG && CFG.getsYouThere) || {};\n  var GYT = {\n    smallC: cents(GYT_CFG.smallGapUSD != null ? GYT_CFG.smallGapUSD : 6),\n    slackC: cents(GYT_CFG.slackUSD != null ? GYT_CFG.slackUSD : 8),\n    slackPct: GYT_CFG.slackPct != null ? Number(GYT_CFG.slackPct) || 0 : 0.20,\n    cands: (GYT_CFG.candidates || []).map(function (c, i) {\n      var ids = c.variantIds || (c.variantId ? [c.variantId] : []);\n      return {\n        handle: String(c.handle || ''), title: c.title || c.handle, phrase: c.phrase || c.title || c.handle,\n        price: Number(c.price) || 0, priceC: cents(c.price),\n        variantIds: ids.map(function (x) { return Number(x); }).filter(Boolean), order: i\n      };\n    }).filter(function (c) { return c.handle && c.priceC > 0; })\n  };\n\n  // THE \"GETS YOU THERE\" RULE (Claude's pick, Nov 5; Matthew can veto):\n  //   gap = next gift step (114.90 / 144.90 / 194.90) minus the qualifying total.\n  //   gap <= $6: Wigglitz.  Else the CHEAPEST candidate whose price >= gap and price - gap <= max($8, 20% of gap).\n  //   None fits: the number of Wigglitz that closes the gap at the ladder price.\n  // Candidates: config getsYouThere.candidates, minus anything in the cart (by handle), sold out\n  // (Liquid availability or a remembered 422) or not counting toward the steps (excluded titles).\n  function getsYouThere(gapUSD, cartProductHandles, wigglitzInCart) {\n    var gapC = Math.round((Number(gapUSD) || 0) * 100);\n    if (!(gapC > 0)) return null;\n    var inCart = {};\n    (cartProductHandles || []).forEach(function (h) { if (h) inCart[lower(h)] = true; });\n    function wig(reason) {\n      var n = wigglitzToClose(gapC, wigglitzInCart);\n      return n ? { type: 'wigglitz', count: n, reason: reason } : null;\n    }\n    if (gapC <= GYT.smallC) return wig('small-gap');\n    var allowC = Math.max(GYT.slackC, gapC * GYT.slackPct);\n    var best = null;\n    for (var i = 0; i < GYT.cands.length; i++) {\n      var c = GYT.cands[i];\n      if (inCart[lower(c.handle)]) continue;\n      if (hasAny(c.title, EXCL)) continue;                       // never a gift, always counts\n      if (c.priceC < gapC || c.priceC - gapC > allowC + 1e-6) continue;\n      var vid = null;\n      for (var v = 0; v < c.variantIds.length; v++) { if (usableVariant(c.variantIds[v])) { vid = c.variantIds[v]; break; } }\n      if (c.variantIds.length && !vid) continue;                 // sold out\n      if (!best || c.priceC < best.c.priceC) best = { c: c, vid: vid };\n    }\n    if (best) {\n      return { type: 'product', handle: best.c.handle, title: best.c.title, price: best.c.price,\n        variantId: best.vid, phrase: best.c.phrase };\n    }\n    return wig('no-product-fits');\n  }\n\n  // The shopper tip for a getsYouThere result, word for word (Matthew, Nov 5 2:55 PM). Two lines:\n  //   line 1: \"You're $88 away from your first free gift: Biggie Wigglitz Key Chain!\"  (no gift yet)\n  //           \"You're $40 away from your next free gift: Trading Mat!\"                (a later gift)\n  //   line 2: \"The Volcano Playsetz gets you there faster!\"  (product, with the one-tap Add)\n  //           \"Add 9 more Wigglitz to get there!\"            (Wigglitz)\n  // The gap is rounded UP to the next whole dollar ($87.01 -> $88). first: true / false, or left out =\n  // \"is this the first gift on the ladder\".\n  function gapDollars(gapUSD) {\n    var c = Math.round((Number(gapUSD) || 0) * 100);\n    return Math.max(1, Math.ceil(c / 100));\n  }\n  function tipHead(tierKey, gapUSD, first) {\n    var t = TIER_BY_KEY[tierKey];\n    if (!t) return '';\n    if (first == null) first = !!TIERS.length && TIERS[0].key === tierKey;\n    return 'You\\'re $' + gapDollars(gapUSD) + ' away from your ' + (first ? 'first' : 'next') + ' free gift: ' + t.label + '!';\n  }\n  function tipLine2(r) {\n    if (!r) return '';\n    if (r.type === 'product') {\n      var p = String(r.phrase || r.title || '');\n      return p.charAt(0).toUpperCase() + p.slice(1) + ' gets you there faster!';\n    }\n    if (r.type === 'wigglitz' && r.count) return 'Add ' + r.count + ' more Wigglitz to get there!';\n    return '';\n  }\n  function getsYouThereLines(r, gapUSD, tierKey, first) {\n    if (!r || !TIER_BY_KEY[tierKey] || !(Math.round((Number(gapUSD) || 0) * 100) > 0)) return [];\n    var l2 = tipLine2(r);\n    return l2 ? [tipHead(tierKey, gapUSD, first), l2] : [];\n  }\n  function getsYouThereCopy(r, gapUSD, tierKey, first) { return getsYouThereLines(r, gapUSD, tierKey, first).join(' '); }\n\n  // Gift steps that just landed in the cart. ONE list per reconcile, so an add that passes two\n  // gifts (33 Bundle + Volcano: Biggie + Mat) gives one pop-up, not two. prev = keys already\n  // announced (null = first look this session: remember what is there, announce nothing).\n  function giftsAdded(prev, st) {\n    var now = ((st && st.tiers) || []).filter(function (t) { return t.reached && t.inCart; }).map(function (t) { return t.key; });\n    if (prev == null) return { keys: [], seen: now };\n    return { keys: now.filter(function (k) { return prev.indexOf(k) === -1; }), seen: now };\n  }\n\n  function shippingEligible(currency) {\n    if (currency !== 'USD') return false;\n    var c = window.Shopify && window.Shopify.country;\n    return !c || c === ((CFG && CFG.freeShippingCountry) || 'US');\n  }\n\n  // One line that reads like the steps, built from the bottom up. Returns {lead, rest}:\n  // lead = \"You\u2019re on Step N!\" (dropped in the compact bar), rest = the one next thing.\n  // Never a dollar gap; the only amounts are the step amounts themselves (\"At $115\").\n  function buildMessage(m) {\n    var step = stepText(m.currency);\n    var t = m.nextTier ? TIER_BY_KEY[m.nextTier.key] : null;\n    var lead = 'You\u2019re on Step ' + m.stepNow + '!';\n    if (m.goal === 'empty') {\n      // Nothing in the cart yet: the bar's row 1 says Step 1, this row says the next step.\n      return { lead: '', rest: t ? 'Step ' + t.step + ': ' + tierLine(t, m.currency) + '! \uD83C\uDF81' : 'Pick more, get more free \uD83C\uDF81' };\n    }\n    if (m.goal === 'tier' && t) {\n      return { lead: lead, rest: 'Add ' + m.sug.phrase + ' and ' + t.phrase + ' is yours! \uD83C\uDF89' };\n    }\n    if (m.goal === 'free') {\n      // No one item reaches the next gift yet: the next free Wigglitz (Step 1) is the goal.\n      if (m.sug) return { lead: lead, rest: 'Add ' + m.sug.phrase + ' and get ' + (m.earned > 0 ? '1 more' : 'a') + ' bonus free Wigglitz! \uD83C\uDF89' };\n      return { lead: lead, rest: t ? tierLine(t, m.currency) + '! \uD83C\uDF89' : step1Line(m.currency) };\n    }\n    if (!m.giftsOn) return { lead: '', rest: step1Line(m.currency) + ' \uD83C\uDF89' };   // outside the US: picks only\n    if (m.anySoldOut) return { lead: '', rest: 'Every ' + step + ' still adds a bonus free Wigglitz! \uD83C\uDF89' };\n    return { lead: 'You made it to Step ' + m.stepNow + '! \uD83C\uDF89', rest: 'Every ' + step + ' still adds a bonus free Wigglitz.' };\n  }\n\n  /* --------------------------------------------------------------- the state */\n\n  function emptyState() {\n    return {\n      active: isActive(), ready: false, version: VERSION,\n      qualifyingUSD: 0, qualifyingCents: 0, qualifyingCount: 0, earned: 0, picked: 0, remaining: 0,\n      tiersReached: [], nextTier: null, suggestion: null, stepNow: 1,\n      goal: 'empty', message: '', messageLead: '', messageRest: '', cartUSD: 0, cartDisplay: fmtMoney(0, shopCurrency()), itemCount: 0,\n      shipping: { eligible: false, reached: false, gapUSD: 0 }, giftsOK: false,\n      tiers: [], picks: [], badPicks: [], gifts: [], lines: [], soldOut: [], biggieFace: storedFace(),\n      handles: [], wigglitzInCart: 0, getsYouThere: null, equivalentFree: null,\n      nextGift: null, giftsHit: 0, milestones: []\n    };\n  }\n\n  function computeState(cart) {\n    cart = cart || { items: [] };\n    var rate = rateFor(cart);\n    var currency = cartCurrency(cart);\n    var giftsOn = giftsOK(cart);\n    var qc = 0, qn = 0, picked = 0, wigNow = 0;\n    var lines = [], picks = [], autos = [], badPicks = [], gifts = [], inCart = {}, handles = [];\n    var BUNDLES = ((CFG && CFG.bundleHandles) || []).map(lower);\n\n    (cart.items || []).forEach(function (it, idx) {\n      var kind = bfKind(it);\n      var p = propsOf(it);\n      var finalLine = typeof it.final_line_price === 'number' ? it.final_line_price : (Number(it.line_price) || 0);\n      var line = {\n        key: it.key, index: idx + 1, variantId: Number(it.variant_id || it.id), productId: it.product_id,\n        qty: Number(it.quantity) || 0, title: it.product_title || it.title || '', variantTitle: it.variant_title || '',\n        image: it.image || null, finalLine: finalLine, bf: kind,\n        tier: kind === 'gift' ? String(p._bf_gift) : null, qualifies: false\n      };\n      inCart[String(line.variantId)] = true;\n      var h = lower(it.handle);\n      if (h && handles.indexOf(h) === -1) handles.push(h);\n      // Wigglitz in the biggest paid bundle (one _bundle_skus entry per pick; the 64+ add-on\n      // line has none, its 64-pack line lists every pick). Feeds the ladder math only.\n      if (!kind && BUNDLES.indexOf(h) !== -1 && p._bundle_skus) {\n        wigNow = Math.max(wigNow, String(p._bundle_skus).split(',').filter(function (x) { return x.trim(); }).length);\n      }\n      if (kind === 'auto') {\n        if (finalLine > 0) { line.badPick = true; badPicks.push(line); }\n        else { picked += line.qty; autos.push(line); }\n      }\n      else if (kind === 'pick') {\n        // A free pick must be a $0 character. A priced one (UI bug, repriced product) is\n        // not counted and plan() takes it out, so it is never labeled Free and charged.\n        if (finalLine > 0) { line.badPick = true; badPicks.push(line); }\n        else { picked += line.qty; picks.push(line); }\n      }\n      else if (kind === 'gift') { gifts.push(line); }\n      else if (qualifies(it, rate)) { line.qualifies = true; qc += toUSDc(finalLine, rate); qn += line.qty; }\n      lines.push(line);\n    });\n\n    var stepC = cents((CFG && CFG.stepUSD) || 10);\n    var cushC = cents(CFG && CFG.cushion != null ? CFG.cushion : 0.10);\n    var earned = qc > 0 ? Math.floor((qc + cushC) / stepC) : 0;\n\n    var tiers = TIERS.map(function (t) {\n      var mine = gifts.filter(function (g) { return g.tier === t.key; });\n      var inCartGift = mine.length > 0;\n      var reached = giftsOn && !t.coming && qc >= t.minC;\n      var soldOut = giftsOn && !t.coming && !inCartGift && giftCandidates(t).length === 0;\n      // hit = the amount is reached (Nov 5 v2: also for a gift the engine can't add yet, e.g. the\n      // Gold Jimothy while its variant id is null). The totem and the panels show these as FREE.\n      var hit = giftsOn && qc >= t.minC;\n      return {\n        key: t.key, label: t.label, short: t.short, min: t.min, step: t.step, at: t.at, line: tierLine(t, currency),\n        coming: t.coming, reached: reached, hit: hit,\n        // Nov 5 final: the shopper took this gift out (it stays out until the cart grows past that total)\n        declined: reached && !inCartGift && isDeclined(t.key, qc),\n        inCart: inCartGift, free: inCartGift && mine[0].finalLine === 0,   // Shopify really made it $0\n        soldOut: soldOut, gapUSD: reached || t.coming || !giftsOn ? 0 : (t.minC - qc) / 100,\n        gapViewUSD: hit || !giftsOn ? 0 : (t.minC - qc) / 100\n      };\n    });\n    var tiersReached = tiers.filter(function (t) { return t.reached; }).map(function (t) { return t.key; });\n    var soldOut = tiers.filter(function (t) { return t.reached && t.soldOut; }).map(function (t) { return t.key; });\n    var anyOut = tiers.some(function (t) { return t.soldOut && !t.coming; });\n    // nextTier = the next gift the engine can ADD (skips \"coming\" gifts; Build a Bundle reads this).\n    // nextGift = the next gift the shopper SEES (Nov 5 v2: Gold Jimothy counts even before its\n    // variant exists). Messages, the totem and the \"gets you there\" tip go by nextGift.\n    var nextTier = null, nextGift = null;\n    for (var i = 0; giftsOn && i < tiers.length; i++) {\n      var ti = tiers[i];\n      if (!nextTier && !ti.reached && !ti.coming && !ti.soldOut) {\n        nextTier = { key: ti.key, min: ti.min, gapUSD: Math.round((TIERS[i].minC - qc)) / 100 };\n      }\n      if (!nextGift && !ti.hit && !ti.soldOut) {\n        nextGift = { key: ti.key, min: ti.min, at: ti.at, coming: ti.coming, gapUSD: Math.round((TIERS[i].minC - qc)) / 100 };\n      }\n    }\n    var giftsHit = tiers.filter(function (t) { return t.hit; }).length;\n\n    // What the shopper will pay right now. Automatic discounts are already in\n    // cart.total_price, so a gift that Shopify is NOT discounting shows as charged.\n    var basisC = Math.max(0, Number(cart.total_price) || 0);\n    var basisUSDc = toUSDc(basisC, rate);\n    var shipC = cents((CFG && CFG.freeShippingUSD) || 59.99);\n    var shipping = {\n      eligible: shippingEligible(currency), reached: basisUSDc >= shipC,\n      gapUSD: Math.max(0, shipC - basisUSDc) / 100\n    };\n\n    // Bottom up: the next gift step if one item gets them there, else the next free Wigglitz\n    // (Step 1). Free shipping is not a step, so it is never the goal (state.shipping keeps it).\n    var goal = 'empty', suggestion = null;\n    if (qn > 0) {\n      if (nextGift) {\n        goal = 'tier';\n        var tierGapC = Math.round(nextGift.gapUSD * 100);\n        suggestion = pickSuggestion(tierGapC, inCart);\n        // Tiny carts: nothing reaches the Biggie in one add, so never say \"is yours\" for it.\n        if (!suggestion || cents(suggestion.price) < tierGapC) goal = 'free';\n      } else {\n        goal = 'done';\n      }\n      if (goal !== 'tier') suggestion = pickSuggestion((earned + 1) * stepC - cushC - qc, inCart);\n    }\n    var stepNow = 1 + giftsHit;\n    var msg = buildMessage({\n      goal: goal, sug: suggestion, nextTier: nextGift, stepNow: stepNow, earned: earned, currency: currency, giftsOn: giftsOn,\n      anySoldOut: anyOut\n    });\n\n    var gyt = null;\n    try { gyt = nextGift ? getsYouThere(nextGift.gapUSD, handles, wigNow) : null; } catch (e) { gyt = null; }\n\n    // Visual-only milestones (\"30 free at $300\"): shown once the cart reaches showAfterUSD (194.90 = \"$195\").\n    var miles = MILES.map(function (m) {\n      return { key: m.key, at: m.at, label: m.label, short: m.short, shown: qc >= m.showAfterC, hit: qc + cushC >= cents(m.at) };\n    });\n\n    var biggieLine = gifts.filter(function (g) { return g.tier === 'biggie'; })[0];\n    var biggieFace = biggieLine ? biggieLine.variantId : (storedFace() || (biggieTier() ? giftCandidates(biggieTier())[0] || null : null));\n\n    return {\n      active: true, ready: true, version: VERSION, currency: currency, rate: rate,\n      qualifyingUSD: qc / 100, qualifyingCents: qc, qualifyingCount: qn,\n      earned: earned, picked: picked, remaining: Math.max(0, earned - picked),\n      tiersReached: tiersReached, nextTier: nextTier, suggestion: suggestion, stepNow: stepNow,\n      goal: goal, message: msg.lead ? msg.lead + ' ' + msg.rest : msg.rest, messageLead: msg.lead, messageRest: msg.rest,\n      cartUSD: basisUSDc / 100, cartDisplay: fmtMoney(basisC, currency),\n      itemCount: Number(cart.item_count) || 0,\n      shipping: shipping, giftsOK: giftsOn, tiers: tiers, picks: picks, autos: autos, badPicks: badPicks, gifts: gifts, lines: lines,\n      soldOut: soldOut, biggieFace: biggieFace || null,\n      handles: handles, wigglitzInCart: wigNow, getsYouThere: gyt, equivalentFree: equivalentFree(wigNow),\n      nextGift: nextGift, giftsHit: giftsHit, milestones: miles\n    };\n  }\n\n  /* ---------------------------------------------------------------- planning */\n\n  // Turn the cart into the list of changes that make our lines match the rules.\n  function plan(st) {\n    var changes = [], adds = [];\n    // (N) Nov 5 final (Haden): nothing left in the cart counts (the last paid item is gone): EVERY\n    // Black Friday line comes out (execOps sends them in ONE /cart/update.js request) and nothing\n    // is added until a paid item is back. The shopper can always empty the cart.\n    if (!(st.qualifyingCents > 0)) {\n      (st.lines || []).forEach(function (l) {\n        if (l.bf) changes.push({ type: 'change', key: l.key, qty: 0, why: 'no-paid' });\n      });\n      return changes;\n    }\n    // (0) a \"pick\" that costs money is not a free pick: take it out.\n    (st.badPicks || []).forEach(function (l) {\n      changes.push({ type: 'change', key: l.key, qty: 0, why: 'pick-paid' });\n    });\n    // (1) more picks than earned: remove the extras, newest first (cart.js lists newest first).\n    var over = st.picked - st.earned;\n    for (var ai = 0; ai < (st.autos || []).length && over > 0; ai++) {\n      var al = st.autos[ai], adec = Math.min(al.qty, over);\n      changes.push({ type: 'change', key: al.key, qty: al.qty - adec, why: 'auto-over' });\n      over -= adec;\n    }\n    for (var i = 0; i < st.picks.length && over > 0; i++) {\n      var pl = st.picks[i];\n      var dec = Math.min(pl.qty, over);\n      changes.push({ type: 'change', key: pl.key, qty: pl.qty - dec, why: 'pick-over' });\n      over -= dec;\n    }\n    // (2)(3) one gift line per reached tier, none for the others.\n    TIERS.forEach(function (t) {\n      var lines = st.gifts.filter(function (g) { return g.tier === t.key; });\n      // Not the US market / USD: never reached, so any gift line already there comes out.\n      var reached = !!st.giftsOK && !t.coming && st.qualifyingCents >= t.minC;\n      if (!reached) {\n        lines.forEach(function (l) { changes.push({ type: 'change', key: l.key, qty: 0, why: 'tier-lost:' + t.key }); });\n        return;\n      }\n      if (!lines.length) {\n        // Nov 5 final: the shopper removed it (until the cart grows), or something keeps taking it out.\n        if (isDeclined(t.key, st.qualifyingCents) || addsBlocked(t.key, st.qualifyingCents)) return;\n        var cands = giftCandidates(t);\n        if (cands.length) adds.push({ type: 'addGift', tier: t.key, candidates: cands, qc: st.qualifyingCents });\n        return;\n      }\n      var keep = lines[0];\n      if (t.variants) {\n        var want = storedFace();\n        for (var k = 0; k < lines.length; k++) { if (want && lines[k].variantId === want) { keep = lines[k]; break; } }\n      }\n      lines.forEach(function (l) {\n        if (l !== keep) changes.push({ type: 'change', key: l.key, qty: 0, why: 'gift-dupe:' + t.key });\n      });\n      if (keep.qty !== 1) changes.push({ type: 'change', key: keep.key, qty: 1, why: 'gift-qty:' + t.key });\n      if (t.variants) {\n        var sf = storedFace();\n        if (sf && sf !== keep.variantId && usableVariant(sf)) {\n          adds.push({ type: 'swapFace', tier: t.key, fromKey: keep.key, to: sf });\n        }\n      }\n    });\n    // Gift lines for a tier we don't know: remove. (A \"coming\" tier is never reached,\n    // so the loop above already removes its lines.)\n    st.gifts.forEach(function (g) {\n      if (!TIER_BY_KEY[g.tier]) changes.push({ type: 'change', key: g.key, qty: 0, why: 'gift-unknown' });\n    });\n    return changes.concat(adds);\n  }\n\n  // After the sale: take our lines back out (the discounts are gone, picks are $0 products).\n  function planCleanup(st) {\n    return st.picks.concat(st.autos || [], st.badPicks || [], st.gifts).map(function (l) {\n      return { type: 'change', key: l.key, qty: 0, why: 'sale-ended' };\n    });\n  }\n\n  /* ---------------------------------------------------------------- network */\n\n  var ORIG_FETCH = typeof window.fetch === 'function' ? window.fetch : null;\n  // Our own requests skip the fetch watcher and give up after 10 s, so one stalled\n  // request can never block the single-flight chain (and BAB's FREE buttons) for good.\n  function rawFetch(u, o) {\n    o = o || {};\n    if (window.AbortController && !o.signal) {\n      var ac = new window.AbortController();\n      o.signal = ac.signal;\n      setTimeout(function () { try { ac.abort(); } catch (e) { /* done already */ } }, FETCH_TIMEOUT_MS);\n    }\n    return ORIG_FETCH.call(window, u, o);\n  }\n\n  function post(path, body) {\n    return rawFetch(url(path), {\n      method: 'POST', credentials: 'same-origin',\n      headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n      body: JSON.stringify(body)\n    }).then(function (r) {\n      return r.text().then(function (t) {\n        var j = null;\n        try { j = JSON.parse(t); } catch (e) { /* not json */ }\n        return { ok: r.ok, status: r.status, json: j };\n      });\n    }, function () { return { ok: false, status: 0, json: null }; });\n  }\n\n  function getCart() {\n    return rawFetch(url('cart.js'), { credentials: 'same-origin', cache: 'no-store', headers: { 'Accept': 'application/json' } })\n      .then(function (r) { noteServerDate(r); if (!r.ok) throw new Error('cart.js ' + r.status); return r.json(); });\n  }\n\n  // Sold out ONLY when Shopify says so: a 422 whose text is about stock. A 429 rate limit,\n  // a bundle-money-guard refusal or any other 4xx is not \"sold out\" and is not remembered.\n  function soldOut(r) {\n    if (!r || r.status !== 422) return false;\n    var j = r.json || {};\n    var d = lower((j.description || '') + ' ' + (j.message || ''));\n    // Shopify's texts: \"...is already sold out.\", \"You can only add 3 ... to the cart.\",\n    // \"All 1 ... are in your cart.\", \"You can't add more ... to the cart.\"\n    return /sold.?out|out of stock|not enough|unavailable|not available|no longer available|only (add )?\\d+|all \\d+ .* in (your|the) cart|can.?t add more|cannot add more/.test(d);\n  }\n\n  var retryWanted = false;                    // a 429 asked us to come back in a moment\n\n  // Nov 5 final: every quantity change of one plan goes out in ONE /cart/update.js request (by line\n  // KEY, like custom.js does for the bundle top-ups), so emptying the cart takes every Black Friday\n  // line out at once instead of one by one. A single change, a refused batch, or a key the batch\n  // did not take: /cart/change.js one by one (the old way).\n  async function applyChanges(run) {\n    var any = false;\n    if (run.length > 1) {\n      var up = {};\n      run.forEach(function (o) { up[o.key] = o.qty; });\n      log('batch', up);\n      var rb = await post('cart/update.js', { updates: up });\n      if (rb.ok) {\n        var items = rb.json && rb.json.items;\n        if (!items) return true;\n        var left = run.filter(function (o) { return o.qty === 0 && items.some(function (it) { return it && it.key === o.key; }); });\n        if (!left.length) return true;\n        any = true;\n        run = left;\n      } else if (rb.status === 429) {\n        retryWanted = true;\n        return false;\n      } else {\n        log('batch refused, one by one', rb.status, rb.json);\n      }\n    }\n    for (var i = 0; i < run.length; i++) {\n      var rc = await post('cart/change.js', { id: run[i].key, quantity: run[i].qty });\n      if (rc.ok) any = true;\n      else { if (rc.status === 429) retryWanted = true; log('change refused', rc.status, rc.json); }\n    }\n    return any;\n  }\n\n  async function execOps(ops) {\n    var changed = false;\n    for (var i = 0; i < ops.length; i++) {\n      var op = ops[i];\n      log('op', op);\n      if (op.type === 'change') {\n        var run = [op];\n        while (i + 1 < ops.length && ops[i + 1].type === 'change') { i++; run.push(ops[i]); }\n        if (await applyChanges(run)) changed = true;\n      } else if (op.type === 'addGift') {\n        for (var c = 0; c < op.candidates.length; c++) {\n          var vid = op.candidates[c];\n          var ra = await post('cart/add.js', { items: [{ id: vid, quantity: 1, properties: { _bf_gift: op.tier, _free_gift: 'bf2026' } }] });\n          if (ra.ok) { changed = true; if (op.qc != null) noteGiftAdd(op.tier, op.qc); break; }\n          if (soldOut(ra)) { markOOS(vid); continue; }        // sold out: remember, try the next face\n          if (ra.status === 429) retryWanted = true;\n          log('gift add refused', vid, ra.status, ra.json);\n          break;                                               // busy, refused, network or 5xx: next trigger, never a loop here\n        }\n      } else if (op.type === 'swapFace') {\n        // Add the new face first so a sold-out face never costs the shopper their Biggie.\n        var rs = await post('cart/add.js', { items: [{ id: op.to, quantity: 1, properties: { _bf_gift: op.tier, _free_gift: 'bf2026' } }] });\n        if (rs.ok) {\n          changed = true;\n          await post('cart/change.js', { id: op.fromKey, quantity: 0 });\n        } else if (soldOut(rs)) {\n          markOOS(op.to);\n        } else if (rs.status === 429) {\n          retryWanted = true;\n        }\n      }\n    }\n    return changed;\n  }\n\n  /* ------------------------------------------------- single flight + guards */\n\n  var state = emptyState();\n  var chain = Promise.resolve();\n  var queued = false, queuedOpts = {}, queuedP = null;\n  var timer = null;\n  var busy = false;\n  var rounds = [];\n  var lastRun = 0;\n  var lastCart = null;\n  var pending = false;                        // budget ran out: a catch-up sync is booked\n\n  function exclusive(fn) {\n    var p = chain.then(fn);\n    chain = p.then(noop, noop);\n    return p;\n  }\n\n  function budgetOk() {\n    var t = Date.now();\n    rounds = rounds.filter(function (r) { return t - r < 60000; });\n    return rounds.length < MAX_ROUNDS_PER_MIN;\n  }\n\n  // Out of budget: never leave the cart unsynced. Book one catch-up sync for when the\n  // oldest round leaves the 1-minute window. Checkout clicks force a sync meanwhile.\n  function budgetBlocked() {\n    if (window.console) console.warn('[BF2026] many cart changes in a minute; gift sync catches up shortly');\n    if (pending) return;\n    pending = true;\n    var wait = Math.max(1000, 60000 - (Date.now() - (rounds[0] || Date.now())) + 100);\n    setTimeout(function () { pending = false; enqueue('budget'); }, wait);\n  }\n\n  function schedule(reason, delay) {\n    if (!CFG) return;\n    if (!isActive() && !isEnded()) return;\n    clearTimeout(timer);\n    timer = setTimeout(function () { timer = null; enqueue(reason); }, delay == null ? DEBOUNCE_MS : delay);\n  }\n\n  function enqueue(reason, opts) {\n    opts = opts || {};\n    if (opts.uiRefresh) queuedOpts.uiRefresh = true;\n    if (opts.force) queuedOpts.force = true;\n    if (queued) return queuedP;\n    queued = true;\n    queuedP = exclusive(function () {\n      var o = queuedOpts;\n      queued = false; queuedOpts = {};\n      return reconcile(reason, o);\n    });\n    return queuedP;\n  }\n\n  function setBusy(on) {\n    busy = on;\n    var root = doc && doc.documentElement;\n    if (root) root.classList.toggle('bf26-busy', on);\n    if (!doc) return;\n    // Never DISABLE checkout: a disabled button fires no click, so guardCheckout could not\n    // hold the tap and replay it after the sync. aria-busy only says \"one moment\".\n    [].forEach.call(doc.querySelectorAll('.cart-submit, button[name=\"checkout\"]'), function (b) {\n      if (on) b.setAttribute('aria-busy', 'true'); else b.removeAttribute('aria-busy');\n    });\n  }\n\n  async function reconcile(reason, opts) {\n    opts = opts || {};\n    lastRun = Date.now();\n    var mutated = false, cart = null, ended = false;\n    try {\n      cart = await getCart();\n      if (isEnded()) {\n        ended = true;\n        var cops = planCleanup(computeState(cart));\n        if (cops.length && (opts.force || budgetOk())) {\n          rounds.push(Date.now());\n          setBusy(true);\n          if (await execOps(cops)) { mutated = true; cart = await getCart(); }\n        } else if (cops.length) {\n          budgetBlocked();\n        }\n      } else if (isActive()) {\n        for (var pass = 0; pass < 3; pass++) {\n          var st0 = computeState(cart);\n          syncGuards(st0.qualifyingCents);\n          var ops = plan(st0);\n          if (!ops.length) break;\n          // A checkout tap may spend one round past the budget: it is the final moment to sync.\n          if (!(opts.force && pass === 0) && !budgetOk()) { budgetBlocked(); break; }\n          rounds.push(Date.now());\n          setBusy(true);\n          var changed = await execOps(ops);\n          if (!changed) break;\n          mutated = true;\n          cart = await getCart();\n        }\n      } else {\n        cart = null;                                   // not started yet: nothing to show\n      }\n    } catch (e) {\n      log('reconcile failed', reason, e);\n    }\n    if (retryWanted) { retryWanted = false; schedule('retry', RETRY_429_MS); }   // 429: try again shortly\n    try {\n      if (cart) {\n        lastCart = cart;\n        state = ended ? emptyState() : computeState(cart);\n        log('state', reason, state);\n        publish();\n        // Stay \"busy\" until the cart page has re-rendered, so a fast +/- tap can't hit a\n        // stale line number while our gift lines shift the list.\n        if (mutated || opts.uiRefresh) await refreshThemeUI(cart);\n      }\n    } catch (e2) {\n      log('publish failed', e2);\n    } finally {\n      setBusy(false);\n    }\n    return state;\n  }\n\n  /* ------------------------------------------------------------- public API */\n\n  function getState() { return state; }\n\n  function refresh() {\n    if (!isActive() && !isEnded()) return Promise.resolve(state);\n    return enqueue('api', {});\n  }\n\n  function addFreePick(variantId, title) {\n    var id = parseInt(variantId, 10);\n    if (!isActive()) return Promise.resolve({ ok: false, reason: 'inactive', state: state });\n    if (!id) return Promise.resolve({ ok: false, reason: 'bad-variant', state: state });\n    return exclusive(async function () {\n      var cart;\n      try { cart = await getCart(); } catch (e) { return { ok: false, reason: 'network', state: state }; }\n      if (!isActive()) return { ok: false, reason: 'inactive', state: state };   // server clock says no\n      var st = computeState(cart);\n      if (st.remaining <= 0) {\n        state = st; publish();\n        return { ok: false, reason: 'none-remaining', state: st };\n      }\n      setBusy(true);\n      var r = await post('cart/add.js', { items: [{ id: id, quantity: 1, properties: { _bf_pick: '1', _free_gift: 'bf2026' } }] });\n      setBusy(false);\n      if (!r.ok) {\n        var msg = (r.json && (r.json.description || r.json.message)) || '';\n        log('pick refused', id, r.status, msg);\n        // sold-out = Shopify's stock message only; busy = 429; refused = anything else (e.g. a guard).\n        var why = soldOut(r) ? 'sold-out' : (r.status === 429 ? 'busy' : (r.status ? 'refused' : 'network'));\n        if (r.status === 429) schedule('retry', RETRY_429_MS);\n        return { ok: false, reason: why, status: r.status, message: msg, state: st };\n      }\n      var added = r.json && r.json.items && r.json.items[0];\n      var addedC = added ? Number(added.final_line_price != null ? added.final_line_price : added.line_price) : 0;\n      if (addedC > 0) {\n        // Not a $0 character: the reconcile takes it straight back out (plan step 0).\n        log('pick not free', id, addedC);\n        var st3 = await reconcile('pick-paid', { uiRefresh: true });\n        return { ok: false, reason: 'not-free', state: st3 };\n      }\n      fire('bf2026:picked', { variantId: id, title: title || '' });\n      var st2 = await reconcile('pick', { uiRefresh: true });\n      return { ok: true, state: st2, variantId: id, title: title || '' };\n    });\n  }\n\n  function setBiggieFace(variantId) {\n    var id = parseInt(variantId, 10);\n    if (!faceById(id)) return Promise.resolve({ ok: false, reason: 'not-a-face', state: state });\n    if (!usableVariant(id)) return Promise.resolve({ ok: false, reason: 'sold-out', state: state });\n    ssSet(KEY_FACE, String(id));\n    if (!isActive()) return Promise.resolve({ ok: true, state: state });\n    return exclusive(function () { return reconcile('face', { uiRefresh: true }); }).then(function (st) {\n      var has = st.gifts.some(function (g) { return g.tier === 'biggie'; });\n      var missed = has && st.biggieFace !== id;\n      return { ok: !missed, reason: missed ? (isOOS(id) ? 'sold-out' : 'refused') : undefined, state: st };\n    });\n  }\n\n  // One paid item, one tap (the bar's \"Add it!\" and, since Nov 5, Build a Bundle's \"gets you there\"\n  // tip). A Shopify stock 422 is remembered as sold out (15 min) so the next suggestion skips it.\n  // before(r, gone) runs before the reconcile (the bar uses it for its \"Added!\" flash).\n  function addVariant(vid, before) {\n    return exclusive(async function () {\n      setBusy(true);\n      var r = await post('cart/add.js', { items: [{ id: vid, quantity: 1 }] });\n      setBusy(false);\n      var gone = !r.ok && soldOut(r);\n      if (gone) markOOS(vid);\n      if (before) { try { before(r, gone); } catch (e) { /* UI only */ } }\n      var st = await reconcile('suggestion', { uiRefresh: true });\n      return { ok: r.ok, soldOut: gone, status: r.status, state: st };\n    });\n  }\n  // Nov 5 (Build a Bundle tip): Promise<{ok, soldOut, status, state}> | {ok:false, reason:'inactive'|'bad-variant'}.\n  function addItem(variantId) {\n    var vid = parseInt(variantId, 10);\n    if (!vid) return Promise.resolve({ ok: false, reason: 'bad-variant', state: state });\n    if (!isActive()) return Promise.resolve({ ok: false, reason: 'inactive', state: state });\n    return addVariant(vid);\n  }\n  // Nov 5: the Biggie faces with \"can it be added right now\" (Liquid stock + the 15 min sold-out memory).\n  function faceStatus() {\n    return faceList().map(function (f) { return { id: Number(f.id), face: f.face, title: f.title, ok: usableVariant(f.id) }; });\n  }\n\n  function fire(name, detail) {\n    try { doc.dispatchEvent(new CustomEvent(name, { detail: detail })); } catch (e) { /* very old browser */ }\n  }\n\n  var api = {\n    version: VERSION,\n    config: CFG,\n    isActive: isActive,\n    getState: getState,\n    refresh: refresh,\n    addFreePick: addFreePick,\n    setBiggieFace: setBiggieFace,\n    addItem: addItem,           // Nov 5: one-tap add for the Build a Bundle tip\n    faceStatus: faceStatus,     // Nov 5: Biggie faces + stock, for the Build a Bundle pop-up\n    // Nov 5 pure helpers (\"gets you there\" rule + the Wigglitz ladder). No UI uses them yet.\n    getsYouThere: getsYouThere,\n    getsYouThereCopy: getsYouThereCopy,\n    getsYouThereLines: getsYouThereLines,   // Nov 5 final: [line 1, line 2] of the same tip\n    wigglitzPriceCents: wigglitzPriceCents,\n    equivalentFree: equivalentFree,\n    // Opens \"Pick your free Biggie Wigglitz!\" (e.g. from a landing page button). false = no UI here.\n    openBiggiePicker: function () { return (CFG && doc && ORIG_FETCH && doc.body) ? openFacePicker({}) : false; },\n    money: fmtMoney,\n    // pure helpers, exposed for QA in the console and the node self-test\n    _test: { computeState: computeState, plan: plan, pickSuggestion: pickSuggestion, planCleanup: planCleanup, soldOut: soldOut, giftsOK: giftsOK,\n      getsYouThere: getsYouThere, getsYouThereCopy: getsYouThereCopy, wigglitzPriceCents: wigglitzPriceCents,\n      equivalentFree: equivalentFree, wigglitzToClose: wigglitzToClose, giftsAdded: giftsAdded, giftCandidates: giftCandidates, tiers: TIERS,\n      getsYouThereLines: getsYouThereLines, execOps: execOps, syncGuards: syncGuards, noteDeclined: noteDeclined, clearDeclined: clearDeclined,\n      isDeclined: isDeclined, addsBlocked: addsBlocked }\n  };\n  window.BF2026 = api;\n\n  /* ------------------------------ window.BF2026Totem (Nov 5 v2, shared interface) */\n  // setPending(usd)  an in-progress amount (USD) drawn as a lighter fill on top of the real cart; 0 clears it\n  // mount(el?)       draw the totem inside el instead of fixed to the screen edge (no el: back to fixed); true\n  // hide() / show()  page-level override (the totem also steps aside by itself under other popups)\n  // The totem re-renders on every \"bf2026:update\".\n  var totemReq = { pendingC: 0, mountEl: null, hidden: false };\n  var totemImpl = { render: noop, mount: noop };\n  window.BF2026Totem = {\n    setPending: function (usd) {\n      var v = Number(usd);\n      totemReq.pendingC = isFinite(v) && v > 0 ? Math.round(v * 100) : 0;\n      totemImpl.render();\n      return true;\n    },\n    mount: function (target) {\n      totemReq.mountEl = (target && target.nodeType === 1) ? target : null;\n      totemImpl.mount();\n      return true;\n    },\n    hide: function () { totemReq.hidden = true; totemImpl.render(); return true; },\n    show: function () { totemReq.hidden = false; totemImpl.render(); return true; }\n  };\n\n  if (!CFG || !doc || !ORIG_FETCH) return;   // node self-test, or no config: API only\n\n  /* ================================================================== UI === */\n\n  function el(tag, cls, text) {\n    var e = doc.createElement(tag);\n    if (cls) e.className = cls;\n    if (text != null) e.textContent = text;\n    return e;\n  }\n  function isMobile() { return window.matchMedia ? window.matchMedia('(max-width: 767px)').matches : window.innerWidth < 768; }\n  function pageType() {\n    if (CFG.page) return CFG.page;\n    return ttData().page || '';\n  }\n  function isCartPage() { return pageType() === 'cart' || /\\/cart\\/?$/.test(window.location.pathname); }\n  function isBab() { return pageType() === 'bab' || (doc.body && doc.body.id === 'create-your-bundle'); }\n  function pickMode() { return isBab() && /[?&]bf_pick=1/.test(window.location.search); }\n  function pickUrl() { return CFG.pickUrl || (CFG.babUrl + '?bf_pick=1'); }\n  function pickLabel(n) { return 'Pick my ' + n + ' free Wigglitz \u2192'; }\n\n  var KEY_GIFTS_SEEN = 'bf2026_gifts_seen';\n  var giftsSeenMem = null;\n  function announceGifts() {\n    var st = state;\n    if (!st.active || !st.ready) return;\n    var raw = ssGet(KEY_GIFTS_SEEN);\n    if (raw == null) raw = giftsSeenMem;\n    var r = giftsAdded(raw == null ? null : raw.split(',').filter(Boolean), st);\n    giftsSeenMem = r.seen.join(',');\n    ssSet(KEY_GIFTS_SEEN, giftsSeenMem);\n    // detail.keys = every gift step that just landed (e.g. ['biggie','mat']): show ONE pop-up for all.\n    if (r.keys.length) fire('bf2026:gifts-added', { keys: r.keys, state: st });\n  }\n\n  function publish() {\n    fire('bf2026:update', state);\n    try { announceGifts(); } catch (e) { log('gifts', e); }\n    try { decorateCart(); } catch (e) { log('cart', e); }\n    try { decorateHeader(); } catch (e) { log('header', e); }\n    try { syncFacePicker(); } catch (e) { log('face picker', e); }\n  }\n\n  /* --------------------------------------------------------- the gift totem */\n\n  // Nov 5 v2 (Matthew: \"the vertical totem pole thing that shows how they get more gifts on every\n  // page ... and be dynamic\"). ONE black & gold climbing bar on every storefront page while BF is\n  // on. It replaces the old bottom \"Step 1 / Step 2\" bar (its useful bits live on: the pick count,\n  // the one-tap \"gets you there\" add, the bundle links, hiding under other popups).\n  //   Fill   = the real qualifying cart (US + USD only for gifts; elsewhere only the stars count).\n  //   Pending= BF2026Totem.setPending(usd): a lighter fill on top (Build a Bundle's bundle in progress).\n  //   Stars  = one small gold star every $10. Gifts = $115 / $155 / $195 bubbles that turn FREE.\n  //   \"30 free at $300\" marker only once the cart passes $195. The next gift glows within $20.\n  //   A short gold confetti burst out of the top of the fill on every new star or gift.\n  // Phones: fixed to the right edge (38px), the page content gets the room as right padding\n  // (#MainContent, footer), so it never sits on an Add to Cart. It leaves the header's height free\n  // at the top and stacks above any fixed bottom bar it finds (sampled, so unknown bars count too).\n\n  var flash = null;\n  var NEAR_C = 2000;                          // the next gift glows within $20\n  var TT_STAR = 'M12 1.8l2.9 6.5 7 .7-5.3 4.7 1.6 6.9L12 17l-6.2 3.6 1.6-6.9L2.1 9l7-.7z';\n  var TT_BOW = '<svg class=\"bf26-tt__bow\" viewBox=\"0 0 32 20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 10.2L10 19.2l3.3-.9L16 11.4z\"/><path d=\"M17 10.2l5 9-3.3-.9L16 11.4z\"/><path d=\"M16 9.4C12 3 4.2.4 2.4 4.6 1.2 7.8 6.2 11.6 16 9.4z\"/><path d=\"M16 9.4C20 3 27.8.4 29.6 4.6 30.8 7.8 25.8 11.6 16 9.4z\"/><ellipse class=\"k\" cx=\"16\" cy=\"9.6\" rx=\"3.1\" ry=\"2.7\"/></svg>';\n  var REDUCED = (function () { try { return window.matchMedia('(prefers-reduced-motion: reduce)').matches; } catch (e) { return false; } })();\n  var TT = {\n    root: null, track: null, fill: null, pend: null, knob: null, glow: null, burst: null, hit: null, cap: null,\n    base: null, baseN: null, live: null, stars: [], orns: {}, miles: {}, vmax: 0, sig: '', laySig: '',\n    first: true, peakStars: -1, peakGifts: -1, lastBaseC: 0, panel: null, panelPrev: null, tucked: false,\n    data: null, fontOn: false, built: false, lastHit: {}\n  };\n\n  function ttData() {\n    if (TT.data) return TT.data;\n    var d = {};\n    try { var n = doc.getElementById('bf26-tt-data'); d = (n && JSON.parse(n.textContent)) || {}; } catch (e) { d = {}; }\n    d.img = d.img || {};\n    TT.data = d;\n    return d;\n  }\n  function ttFont() {\n    if (TT.fontOn) return;\n    TT.fontOn = true;\n    if (doc.querySelector('link[href*=\"Luckiest+Guy\"]')) return;\n    var l = doc.createElement('link');\n    l.rel = 'stylesheet';\n    l.href = 'https://fonts.googleapis.com/css2?family=Luckiest+Guy&display=swap';\n    (doc.head || doc.documentElement).appendChild(l);\n  }\n  function svgStar(cls) { return '<svg class=\"' + cls + '\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"' + TT_STAR + '\"/></svg>'; }\n  function wholeUSD(c) { return '$' + Math.max(1, Math.ceil(c / 100 - 0.004)); }\n  function cap1(t) { t = String(t || ''); return t.charAt(0).toUpperCase() + t.slice(1); }\n\n  // Everything the totem and its panel draw, from the engine state + the pending amount.\n  function ttModel() {\n    var st = state;\n    var giftsOn = !!st.giftsOK;\n    var stepC = cents((CFG && CFG.stepUSD) || 10);\n    var cushC = cents(CFG && CFG.cushion != null ? CFG.cushion : 0.10);\n    var baseC = Math.max(0, Number(st.qualifyingCents) || 0);\n    var pendC = Math.max(0, totemReq.pendingC);\n    var projC = baseC + pendC;\n    var tiers = (st.tiers || []).map(function (t) {\n      var T0 = TIER_BY_KEY[t.key] || {};\n      var minC = cents(t.min);\n      var o = {\n        key: t.key, at: Number(t.at) || Math.round(Number(t.min) || 0), minC: minC,\n        name: T0.label || t.label || t.key, short: T0.short || T0.label || t.key, note: T0.note || '', tag: T0.tag || '',\n        hit: !!t.hit, inCart: !!t.inCart, coming: !!t.coming, out: !!t.soldOut && !t.inCart\n      };\n      o.pend = giftsOn && !o.hit && !o.out && projC >= minC;\n      return o;\n    });\n    var next = null;\n    for (var i = 0; giftsOn && i < tiers.length; i++) {\n      var t = tiers[i];\n      if (!t.hit && !t.pend && !t.out) { next = t; break; }\n    }\n    var miles = (st.milestones || []).map(function (m) {\n      var mc = MILES.filter(function (x) { return x.key === m.key; })[0];\n      return { key: m.key, at: m.at, label: m.label, short: m.short, shown: giftsOn && projC >= (mc ? mc.showAfterC : 0), hit: projC + cushC >= cents(m.at) };\n    });\n    // Scale: $0 at the bottom, a little above the top mark at the top.\n    var top = 0;\n    if (giftsOn) tiers.forEach(function (x) { top = Math.max(top, x.at); });\n    miles.forEach(function (m) { if (m.shown) top = Math.max(top, m.at); });\n    var projUSD = projC / 100;\n    var vmax = top > 0 ? Math.max(top * 1.095, projUSD * 1.06 + 4) : Math.max(110, projUSD * 1.15 + 10);\n    vmax = Math.ceil(vmax);\n    // Nov 5 final: the $375 Pterodactyl (and the \"30 free at $300\" marker) sit far above the first gifts.\n    // A straight scale would squeeze $115 / $155 / $195 into the bottom half, so the bar gets a knee:\n    // $0 to just past the last close gift ($215) = the bottom 70%, the rest of the scale = the top 30%.\n    // The knee never moves (a big cart fills on into the top part), so the first gifts never crowd.\n    var knee = 0;\n    if (giftsOn && top > TT_KNEE_MAX) {\n      var close = 0;\n      tiers.forEach(function (x) { if (x.at <= TT_KNEE_MAX) close = Math.max(close, x.at); });\n      var k = Math.ceil(close * 1.1);\n      if (close > 0 && k < vmax * 0.8) knee = k;\n    }\n    return {\n      st: st, giftsOn: giftsOn, baseC: baseC, pendC: pendC, projC: projC, stepC: stepC, cushC: cushC,\n      starsCart: Math.max(0, Number(st.earned) || 0),\n      starsProj: projC > 0 ? Math.floor((projC + cushC) / stepC) : 0,\n      tiers: tiers, next: next, near: !!(next && next.minC - projC <= NEAR_C), miles: miles, vmax: vmax, knee: knee,\n      giftsProj: tiers.filter(function (x) { return x.hit || x.pend; }).length,\n      giftsCart: tiers.filter(function (x) { return x.hit; }).length\n    };\n  }\n  var TT_KNEE_MAX = 260, TT_KNEE_F = 0.70;\n  // Where a dollar amount sits on the bar, 0-100 (bottom to top), knee included.\n  function ttPos(usd, m) {\n    var v = Math.max(0, Math.min(m.vmax, Number(usd) || 0));\n    if (!m.knee) return v / m.vmax * 100;\n    if (v <= m.knee) return v / m.knee * TT_KNEE_F * 100;\n    return (TT_KNEE_F + (v - m.knee) / (m.vmax - m.knee) * (1 - TT_KNEE_F)) * 100;\n  }\n  function ttPct(usd, m) { return ttPos(usd, m).toFixed(3) + '%'; }\n  function ttSpan(a, b, m) { return Math.max(0, ttPos(b, m) - ttPos(a, m)).toFixed(3) + '%'; }\n\n  function ttBuild() {\n    if (TT.built || !doc.body) return;\n    TT.built = true;\n    var r = el('div', 'bf26-tt');\n    r.id = 'bf26-tt';\n    r.setAttribute('role', 'region');\n    r.setAttribute('aria-label', 'Black Friday free gifts');\n    var hit = el('button', 'bf26-tt__hit');\n    hit.type = 'button';\n    hit.setAttribute('aria-haspopup', 'dialog');\n    hit.setAttribute('aria-expanded', 'false');\n    hit.setAttribute('aria-controls', 'bf26-ttp');\n    hit.setAttribute('data-bf26-tt-open', '1');\n    var cap = el('span', 'bf26-tt__cap');\n    cap.setAttribute('aria-hidden', 'true');\n    cap.innerHTML = '<span class=\"bf26-tt__capi\">\uD83C\uDF81</span><span class=\"bf26-tt__capt\">Free gifts</span>';\n    var tr = el('div', 'bf26-tt__track');\n    tr.setAttribute('aria-hidden', 'true');\n    tr.appendChild(el('i', 'bf26-tt__rail'));\n    TT.glow = el('i', 'bf26-tt__glow'); tr.appendChild(TT.glow);\n    TT.fill = el('i', 'bf26-tt__fill'); tr.appendChild(TT.fill);\n    TT.pend = el('i', 'bf26-tt__pend'); tr.appendChild(TT.pend);\n    TT.starBox = el('div', 'bf26-tt__stars'); tr.appendChild(TT.starBox);\n    TT.mileBox = el('div', 'bf26-tt__miles'); tr.appendChild(TT.mileBox);\n    TT.ornBox = el('div', 'bf26-tt__orns'); tr.appendChild(TT.ornBox);\n    TT.knob = el('span', 'bf26-tt__knob'); tr.appendChild(TT.knob);\n    TT.burst = el('div', 'bf26-tt__burst'); tr.appendChild(TT.burst);\n    var base = el('span', 'bf26-tt__base');\n    base.setAttribute('aria-hidden', 'true');\n    base.innerHTML = svgStar('bf26-tt__basei');\n    TT.baseN = el('b', 'bf26-tt__basen', '0');\n    base.appendChild(TT.baseN);\n    var live = el('span', 'bf26-sr');\n    live.setAttribute('aria-live', 'polite');\n    // Nov 6 (Matthew): a mini < > tab on the left edge slides the bar off to the side and pulls it back out any time.\n    var tog = el('button', 'bf26-tt__tog');\n    tog.type = 'button';\n    try { TT.userTuck = window.localStorage.getItem('bf26_tt_tuck') === '1'; } catch (e) { TT.userTuck = false; }\n    var togSet = function () {\n      r.classList.toggle('bf26-tt--usertuck', !!TT.userTuck);\n      tog.setAttribute('aria-expanded', TT.userTuck ? 'false' : 'true');\n      tog.setAttribute('aria-label', TT.userTuck ? 'Show the free gifts bar' : 'Hide the free gifts bar');\n      tog.innerHTML = '<span aria-hidden=\"true\">' + (TT.userTuck ? '&lsaquo;' : '&rsaquo;') + '</span>';\n    };\n    tog.addEventListener('click', function (e) {\n      e.preventDefault(); e.stopPropagation();\n      TT.userTuck = !TT.userTuck;\n      try { window.localStorage.setItem('bf26_tt_tuck', TT.userTuck ? '1' : '0'); } catch (e2) {}\n      togSet();\n      if (TT.userTuck && TT.panel && !TT.panel.hidden) { try { ttPanelClose(true); } catch (e3) {} }\n      try { ttLayout(); } catch (e4) {}\n    });\n    togSet();\n    r.appendChild(cap); r.appendChild(tr); r.appendChild(base); r.appendChild(hit); r.appendChild(tog); r.appendChild(live);\n    TT.root = r; TT.track = tr; TT.hit = hit; TT.cap = cap; TT.base = base; TT.live = live; TT.tog = tog;\n    (totemReq.mountEl && doc.contains(totemReq.mountEl) ? totemReq.mountEl : doc.body).appendChild(r);\n    if (totemReq.mountEl) r.classList.add('bf26-tt--inline');\n  }\n\n  function ttStars(m, stepUSD) {\n    var vmax = m.vmax;\n    var n = Math.max(0, Math.floor((vmax - 1) / stepUSD));\n    if (TT.stars.length === n && TT.vmax === vmax && TT.knee === m.knee) return;\n    TT.knee = m.knee;\n    TT.starBox.textContent = '';\n    TT.stars = [];\n    for (var k = 1; k <= n; k++) {\n      var s = el('i', 'bf26-tt__st');\n      s.style.bottom = ttPct(k * stepUSD, m);\n      s.__far = !!(m.knee && k * stepUSD > m.knee);       // above the knee: smaller stars\n      s.innerHTML = svgStar('bf26-tt__sts');\n      TT.starBox.appendChild(s);\n      TT.stars.push(s);\n    }\n  }\n  function ttOrns(m) {\n    var keys = m.giftsOn ? m.tiers.map(function (t) { return t.key; }).join(',') : '';\n    if (TT.ornKeys !== keys) {\n      TT.ornKeys = keys;\n      TT.ornBox.textContent = '';\n      TT.orns = {};\n      if (m.giftsOn) {\n        m.tiers.forEach(function (t) {\n          var o = el('span', 'bf26-tt__orn bf26-tt__orn--' + t.key);\n          o.innerHTML = TT_BOW;\n          var ball = el('span', 'bf26-tt__ball');\n          var src = ttData().img[t.key];\n          if (src) {\n            var im = el('img');\n            im.src = src; im.alt = ''; im.width = 64; im.height = 64; im.decoding = 'async'; im.loading = 'lazy';\n            ball.appendChild(im);\n          }\n          o.appendChild(ball);\n          var lab = el('span', 'bf26-tt__lab', '$' + t.at);\n          o.appendChild(lab);\n          TT.ornBox.appendChild(o);\n          TT.orns[t.key] = { o: o, lab: lab };\n        });\n      }\n    }\n    m.tiers.forEach(function (t) {\n      var x = TT.orns[t.key];\n      if (!x) return;\n      x.o.style.bottom = ttPct(t.at, m);\n      var s = t.hit ? 'ok' : t.pend ? 'pend' : t.out ? 'out' : (m.near && m.next === t) ? 'near' : '';\n      var cls = 'bf26-tt__orn bf26-tt__orn--' + t.key + (s ? ' is-' + s : '');\n      if (x.o.className !== cls) x.o.className = cls;\n      setText(x.lab, s === 'ok' || s === 'pend' ? 'FREE' : s === 'out' ? 'Sold out' : '$' + t.at);\n    });\n  }\n  function ttMiles(m) {\n    var keys = m.miles.filter(function (x) { return x.shown; }).map(function (x) { return x.key; }).join(',');\n    if (TT.mileKeys !== keys) {\n      TT.mileKeys = keys;\n      TT.mileBox.textContent = '';\n      TT.miles = {};\n      m.miles.forEach(function (x) {\n        if (!x.shown) return;\n        var w = el('span', 'bf26-tt__mile');\n        w.appendChild(el('i', 'bf26-tt__mline'));\n        var lab = el('span', 'bf26-tt__mlab');\n        var parts = String(x.label || '').split(' at ');\n        lab.appendChild(el('b', null, parts[0] || x.short));\n        if (parts[1]) lab.appendChild(el('span', null, parts[1]));\n        w.appendChild(lab);\n        TT.mileBox.appendChild(w);\n        TT.miles[x.key] = w;\n      });\n    }\n    m.miles.forEach(function (x) {\n      var w = TT.miles[x.key];\n      if (!w) return;\n      w.style.bottom = ttPct(x.at, m);\n      w.classList.toggle('is-ok', !!x.hit);\n    });\n  }\n\n  function ttLabel(m) {\n    var st = m.st, cur = st.currency || 'USD';\n    var parts = ['Free gifts. Cart ' + (st.cartDisplay || fmtMoney(0, cur)) + '.',\n      m.starsCart + ' bonus free Wigglitz earned' + (st.remaining > 0 ? ', ' + st.remaining + ' to pick' : '') + '.'];\n    if (m.giftsOn) {\n      m.tiers.forEach(function (t) {\n        parts.push(t.name + ' at $' + t.at + ': ' + (t.hit ? 'yours, free' : t.pend ? 'yours once this bundle is in your cart' : t.out ? 'all claimed right now' : wholeUSD(t.minC - m.baseC) + ' to go') + '.');\n      });\n    }\n    parts.push('Open the gift list.');\n    return parts.join(' ');\n  }\n\n  // Two confetti levels (Matthew, Nov 5 2:55 PM):\n  //   every new bonus free Wigglitz (each $10) = a MINI burst of small gold stars out of the top of the fill;\n  //   a free gift reached ($114.90 / $154.90 / $194.90 / $374.90) = a BIG explosion (more pieces, gold +\n  //   black + white, wider, ~1.5 s). One add never gets both: the big one wins.\n  // Only for increases during this visit: never on page load for amounts already reached. The last\n  // cart drawn is remembered (sessionStorage bf2026_tt_seen), so an add that reloaded the page (a\n  // product form) still celebrates on the next page, and a plain reload does not. None with reduced motion.\n  var KEY_TT_SEEN = 'bf2026_tt_seen';\n  function ttCelebrate(m, silent) {\n    var gifts = m.giftsProj, stars = m.starsProj;\n    var real = { s: m.starsCart, g: m.giftsCart };\n    var level = '';\n    if (TT.first) {\n      TT.first = false;\n      var last = null;\n      try { last = JSON.parse(ssGet(KEY_TT_SEEN) || 'null'); } catch (e) { last = null; }\n      TT.peakStars = stars; TT.peakGifts = gifts;\n      m.tiers.forEach(function (t) { TT.lastHit[t.key] = t.hit; });\n      if (last && typeof last.s === 'number') {\n        if (real.g > (Number(last.g) || 0)) level = 'big';\n        else if (real.s > last.s) level = 'mini';\n      }\n    } else {\n      // The cart went down: climbing back up celebrates again.\n      if (m.baseC < TT.lastBaseC) { TT.peakStars = Math.min(TT.peakStars, stars); TT.peakGifts = Math.min(TT.peakGifts, gifts); }\n      var newGift = gifts > TT.peakGifts, newStar = stars > TT.peakStars;\n      // A screen reader hears a gift landing (only real cart gifts, not the pending preview).\n      m.tiers.forEach(function (t) {\n        if (t.hit && !TT.lastHit[t.key] && TT.live) setText(TT.live, 'The ' + t.short + ' is yours! \uD83C\uDF89');\n        TT.lastHit[t.key] = t.hit;\n      });\n      TT.peakStars = Math.max(TT.peakStars, stars);\n      TT.peakGifts = Math.max(TT.peakGifts, gifts);\n      level = newGift ? 'big' : (newStar ? 'mini' : '');\n    }\n    TT.lastBaseC = m.baseC;\n    var seen = JSON.stringify(real);\n    if (TT.seenW !== seen) { TT.seenW = seen; ssSet(KEY_TT_SEEN, seen); }\n    if (!level || silent) return;\n    if (REDUCED || !TT.root || !TT.root.classList.contains('bf26-on')) return;\n    ttBurst(level, m);\n  }\n\n  // Mini: 7 small gold stars, a short pop (0.9 s). Big: 30 pieces (gold stars, gold / black / white\n  // bits; the dark and light ones get a gold edge so they show on the black bar and on a white page),\n  // thrown up, left and down (the right side is the screen edge), then falling, ~1.5 s.\n  var TT_MINI = [[-14, -30], [-28, -18], [-4, -40], [-34, -4], [-22, -44], [-8, -16], [-38, -30]];\n  function ttBurst(level, m) {\n    var b = TT.burst;\n    if (!b) return;\n    b.style.bottom = ttPct(m.projC / 100, m);\n    var html = '', big = level === 'big';\n    var star = function (style, cls) { return '<svg class=\"' + cls + '\" viewBox=\"0 0 24 24\" style=\"' + style + '\"><path d=\"' + TT_STAR + '\"/></svg>'; };\n    if (!big) {\n      TT_MINI.forEach(function (p, i) { html += star('--x:' + p[0] + 'px;--y:' + p[1] + 'px;--d:' + (i * 20) + 'ms', 'bf26-tt__bs'); });\n    } else {\n      var N = 30;\n      for (var i = 0; i < N; i++) {\n        // angle 80 to 250 degrees (up, up-left, left, down-left), distance 55-135 px, all fixed (no random)\n        var ang = (80 + 170 * i / (N - 1)) * Math.PI / 180;\n        var d = 55 + ((i * 37) % 81);\n        var x = Math.round(Math.cos(ang) * d), y = Math.round(-Math.sin(ang) * d);\n        var style = '--x:' + x + 'px;--y:' + y + 'px;--y2:' + (y + 46) + 'px;--r:' + ((i * 67) % 360 + 180) + 'deg;--d:' + ((i % 6) * 24) + 'ms';\n        var kind = i % 5;\n        if (kind === 0 || kind === 3) html += star(style, 'bf26-tt__bs bf26-tt__bs--big');\n        else html += '<i class=\"' + (kind === 1 ? 'is-g' : kind === 2 ? 'is-k' : 'is-w') + '\" style=\"' + style + '\"></i>';\n      }\n    }\n    b.innerHTML = html;\n    b.classList.remove('is-mini', 'is-big');\n    void b.offsetWidth;\n    b.classList.add(big ? 'is-big' : 'is-mini');\n    TT.lastBurst = level;\n    if (big) TT.root.classList.add('bf26-tt--gift');\n    clearTimeout(TT.burstT);\n    TT.burstT = setTimeout(function () { b.classList.remove('is-mini', 'is-big'); b.innerHTML = ''; if (TT.root) TT.root.classList.remove('bf26-tt--gift'); }, big ? 1750 : 1100);\n  }\n\n  function ttWanted() {\n    var st = state;\n    if (!(st.active && st.ready && isActive() && !totemReq.hidden)) return false;\n    // Nov 5 final (Matthew, 2:50 PM): it appears as soon as something is in the cart, and stays hidden\n    // while the cart is empty (Build a Bundle's bundle in progress, setPending > 0, still shows it).\n    return (Number(st.itemCount) || 0) > 0 || totemReq.pendingC > 0;\n  }\n  function ttOff() {\n    if (TT.root) TT.root.classList.remove('bf26-on');\n    var h = doc.documentElement;\n    // Nov 6 speed: toggle(name, false) never touches the attribute when nothing changes. remove() always\n    // rewrites class, which wakes the html/body class observer below (a layout loop, ~8 per second).\n    h.classList.toggle('bf26-tt-on', false);\n    h.classList.toggle('bf26-tt-fixed', false);\n    h.classList.toggle('bf26-tt-reserve', false);\n    ttPanelClose(true);\n  }\n\n  function renderTotem() {\n    if (!ttWanted()) {\n      // Hidden (empty cart): keep the confetti memory current, so the first add still celebrates.\n      if (state.active && state.ready && isActive() && !totemReq.hidden) { try { ttCelebrate(ttModel(), true); } catch (e) { log('totem', e); } }\n      ttOff();\n      return;\n    }\n    ttBuild();\n    if (!TT.root) return;\n    ttFont();\n    var m = ttModel();\n    TT.model = m;\n    var stepUSD = Number((CFG && CFG.stepUSD) || 10);\n    var sig = [m.baseC, m.pendC, m.starsCart, m.starsProj, m.giftsOn, m.vmax, m.knee, m.near ? 1 : 0, m.next ? m.next.key : '', state.remaining,\n      m.tiers.map(function (t) { return [t.hit, t.pend, t.out, t.inCart].join(''); }).join(','),\n      m.miles.map(function (x) { return [x.shown, x.hit].join(''); }).join(',')].join('|');\n    if (sig !== TT.sig) {\n      TT.sig = sig;\n      ttStars(m, stepUSD);\n      TT.vmax = m.vmax;\n      var base = Math.min(m.baseC / 100, m.vmax), proj = Math.min(m.projC / 100, m.vmax);\n      TT.fill.style.height = base > 0 ? ttPct(base, m) : '0%';\n      TT.fill.classList.toggle('is-on', base > 0);\n      TT.pend.style.bottom = ttPct(base, m);\n      TT.pend.style.height = proj > base ? ttSpan(base, proj, m) : '0%';\n      TT.pend.classList.toggle('is-on', proj > base);\n      TT.knob.style.bottom = ttPct(proj, m);\n      TT.knob.classList.toggle('is-on', proj > 0);\n      for (var k = 0; k < TT.stars.length; k++) {\n        var n = k + 1;\n        var cls = 'bf26-tt__st' + (TT.stars[k].__far ? ' bf26-tt__st--far' : '') + (n <= m.starsCart ? ' is-on' : (n <= m.starsProj ? ' is-pend' : ''));\n        if (TT.stars[k].className !== cls) TT.stars[k].className = cls;\n      }\n      if (m.near && m.next) {\n        TT.glow.style.bottom = ttPct(proj, m);\n        TT.glow.style.height = ttSpan(proj, Math.max(proj, m.next.at), m);\n        TT.glow.classList.add('is-on');\n      } else {\n        TT.glow.classList.remove('is-on');\n      }\n      ttOrns(m);\n      ttMiles(m);\n      setText(TT.baseN, String(m.starsCart));\n      TT.root.classList.toggle('bf26-tt--owed', state.remaining > 0);\n      TT.root.classList.toggle('bf26-tt--intl', !m.giftsOn);\n      TT.root.classList.toggle('bf26-tt--dense', m.vmax > 260 && !m.knee);\n      TT.hit.setAttribute('aria-label', ttLabel(m));\n    }\n    TT.root.classList.add('bf26-on');\n    doc.documentElement.classList.toggle('bf26-tt-on', true);   // toggle: no class write when already on (see ttOff)\n    ttLayout();\n    ttCelebrate(m);\n    if (TT.panel && !TT.panel.hidden) ttPanelFill();\n  }\n\n  /* ---- layout: room for the header at the top, any fixed bottom bar at the bottom ---- */\n\n  var ttFixedCache = (typeof WeakMap === 'function') ? new WeakMap() : null;\n  function ttIsOurs(n) { return !!(n && ((TT.root && TT.root.contains(n)) || (TT.panel && TT.panel.contains(n)))); }\n  // The fixed/sticky box an element belongs to (itself or an ancestor), or null.\n  function ttFixedBox(n) {\n    var depth = 0;\n    while (n && n.nodeType === 1 && n !== doc.body && n !== doc.documentElement && depth++ < 12) {\n      var c = ttFixedCache && ttFixedCache.get(n);\n      if (c === undefined) {\n        var p = window.getComputedStyle(n).position;\n        c = (p === 'fixed' || p === 'sticky') ? p : '';\n        if (ttFixedCache) ttFixedCache.set(n, c);\n      }\n      if (c) return n;\n      n = n.parentElement;\n    }\n    return null;\n  }\n  // The first thing painted at (x, y) that is not the totem (elementsFromPoint lists every layer,\n  // also the ones hidden behind the page, like the theme's fixed footer).\n  function ttTopAt(x, y) {\n    var list = doc.elementsFromPoint ? doc.elementsFromPoint(x, y) : [];\n    for (var i = 0; i < list.length; i++) { if (!ttIsOurs(list[i])) return list[i]; }\n    return null;\n  }\n  function ttSampleBottom(x, vh, maxRoom) {\n    // Walk up from the bottom edge: every fixed bar painted there (and any bar stacked on it) is room.\n    var room = 0;\n    for (var y = vh - 3; y > vh - maxRoom; y -= 7) {\n      var found = null;\n      var f = ttFixedBox(ttTopAt(x, y));\n      if (f && window.getComputedStyle(f).position === 'fixed') {\n        var r = f.getBoundingClientRect();\n        if (r.height <= vh * 0.6 && r.width >= 30) found = r;        // not a full overlay / thin thing\n      }\n      if (found) { room = Math.max(room, vh - found.top); y = Math.min(y, found.top); }\n      else if (y < vh - room - 40) break;          // floating pills (chat, back-to-top) sit a little up\n    }\n    return Math.round(room);\n  }\n  function ttHeaderRoom(vh) {\n    // The header's height at rest (so the totem never sits on the cart icon, and never jumps as\n    // the header scrolls away), or whatever is stuck to the top right now, if that is taller.\n    var room = 0;\n    var hg = doc.querySelector('.header-group') || doc.querySelector('header');\n    if (hg) {\n      var r = hg.getBoundingClientRect();\n      var rest = r.top + (window.pageYOffset || 0) + r.height;          // where it ends at the top of the page\n      if (r.height > 0 && rest < vh * 0.45) room = Math.max(room, rest);\n      if (r.height > 0 && r.top < 4 && r.bottom > room && r.height < vh * 0.45) room = r.bottom;\n    }\n    // Announcement bars / anything else stuck to the top right now.\n    var vw = window.innerWidth || doc.documentElement.clientWidth;\n    var x = vw - 6;\n    for (var y = 2; y < vh * 0.4; y += 9) {\n      var hitOne = false;\n      var f = ttFixedBox(ttTopAt(x, y));\n      if (f) {\n        var rr = f.getBoundingClientRect();\n        if (rr.height <= vh * 0.45 && rr.top <= 6 + room) { room = Math.max(room, rr.bottom); hitOne = true; }\n      }\n      if (!hitOne && y > room + 12) break;\n    }\n    return Math.round(room);\n  }\n  // Someone else's popup or drawer is open: step aside (the Winky popup, BAB drawer, mobile menu, ...).\n  function ttBlocked() {\n    if (doc.body && doc.body.classList.contains('gift-modal-open')) return true;\n    if (doc.documentElement.classList.contains('bf26-modal-open')) return true;\n    if (doc.querySelector('#create-your-bundle .cstm-bundle-content.open-popupBar, #bb-stickybar.bb-sb-open, #bb-added-choice.is-open, #bb-downsize.is-open')) return true;\n    return ttOverlayAbove();\n  }\n  // Any other big fixed layer painted above the totem (mobile menu, Klaviyo, colorbox, an app's modal).\n  function ttOverlayAbove() {\n    if (!doc.elementsFromPoint) return false;\n    var vw = window.innerWidth || doc.documentElement.clientWidth, vh = window.innerHeight || doc.documentElement.clientHeight;\n    // Look where the totem is (fixed: the right edge; mounted: its slot), else at the right edge.\n    var tr = TT.root ? TT.root.getBoundingClientRect() : null;\n    var cx = tr && tr.width > 0 ? Math.round(tr.left + tr.width / 2) : vw - 12;\n    var y1 = tr && tr.height > 0 ? Math.round(tr.top + tr.height * 0.4) : Math.round(vh * 0.5);\n    var y2 = tr && tr.height > 0 ? Math.round(tr.top + tr.height * 0.8) : Math.round(vh * 0.75);\n    var pts = [[cx, Math.max(1, Math.min(vh - 2, y1))], [cx, Math.max(1, Math.min(vh - 2, y2))]];\n    for (var k = 0; k < pts.length; k++) {\n      var list = doc.elementsFromPoint(pts[k][0], pts[k][1]);\n      for (var i = 0; i < list.length; i++) {\n        var n = list[i];\n        if (ttIsOurs(n)) break;                     // reached the totem: nothing big above it here\n        var f = ttFixedBox(n);\n        if (!f) continue;\n        var cs = window.getComputedStyle(f);\n        if (cs.position !== 'fixed') continue;\n        var r = f.getBoundingClientRect();\n        var z = parseInt(cs.zIndex, 10) || 0;\n        var dialog = f.matches && f.matches('[role=\"dialog\"], [aria-modal=\"true\"], dialog');\n        if (r.height >= vh * 0.6 && r.width >= vw * 0.5 && (z > 8990 || dialog)) return true;\n      }\n    }\n    return false;\n  }\n  // Elements the totem must never sit on (fixed mode). The page keeps room for the totem, so this\n  // is the safety net for anything that still reaches the right edge (full-bleed rows).\n  var TT_PROTECT = 'button[name=\"add\"], [type=\"submit\"][name=\"add\"], .product-form__submit, .product-form button[type=\"submit\"], form[action*=\"/cart/add\"] [type=\"submit\"], ' +\n    '.cart-submit, button[name=\"checkout\"], .additional-checkout-buttons, .shopify-payment-button, .quantity__change, a.quantity__remove, ' +\n    '[data-bf26h-add], .cstm-addtocart, .bb-desk-checkout, #bb-stickybar, .ITGQtyAdjust, .DefaultAddBtn, .gz-bar, .atb-bar, .sfb-sticky, [data-bf-bab-add], .bf-bab-tip__add';\n  function ttCovers(r) {\n    if (!TT.root || !doc.elementsFromPoint || !r) return false;\n    if (r.width <= 0 || r.height <= 0) return false;\n    var xs = [Math.round(r.left + 3), Math.round(r.left + r.width / 2)];\n    for (var y = Math.round(r.top + 6); y < r.bottom - 4; y += 16) {\n      for (var j = 0; j < xs.length; j++) {\n        // Only what is painted right under the totem counts (the first thing below it), not layers\n        // hidden further down (the theme's fixed footer sits behind the page).\n        var list = doc.elementsFromPoint(xs[j], y);\n        for (var i = 0; i < list.length; i++) {\n          var n = list[i];\n          if (ttIsOurs(n)) continue;\n          if (n.closest && n.closest(TT_PROTECT)) return true;\n          break;\n        }\n      }\n    }\n    return false;\n  }\n\n  // iPhone home indicator: env(safe-area-inset-bottom), measured once with a probe.\n  var ttSafe = null;\n  function ttSafeBottom() {\n    if (ttSafe !== null) return ttSafe;\n    ttSafe = 0;\n    try {\n      var p = el('div');\n      p.style.cssText = 'position:fixed;left:0;bottom:0;width:0;height:0;visibility:hidden;pointer-events:none;padding-bottom:env(safe-area-inset-bottom,0px)';\n      doc.body.appendChild(p);\n      ttSafe = Math.min(48, Math.round(p.offsetHeight || 0));\n      doc.body.removeChild(p);\n    } catch (e) { ttSafe = 0; }\n    return ttSafe;\n  }\n\n  var ttLayT = 0, ttLastLay = 0;\n  function ttLayout() {\n    var r = TT.root;\n    if (!r || !r.classList.contains('bf26-on')) return;\n    var h = doc.documentElement;\n    var blocked = ttBlocked();\n    r.classList.toggle('bf26-tt--blocked', blocked);\n    if (totemReq.mountEl) {\n      r.classList.add('bf26-tt--inline');\n      r.style.top = r.style.height = r.style.bottom = r.style.width = '';\n      h.classList.toggle('bf26-tt-fixed', false);\n      h.classList.toggle('bf26-tt-reserve', false);\n      r.classList.remove('bf26-tt--short', 'bf26-tt--tuck');\n      TT.tucked = false; TT.laySig = '';\n      var ih = r.offsetHeight || 0;\n      r.classList.toggle('bf26-tt--tight', ih > 0 && ih < 400);   // a short slot: smaller ornaments\n      return;\n    }\n    r.classList.remove('bf26-tt--inline');\n    // Nov 6 speed: add() rewrote <html class> on EVERY layout, the class observer queued the next layout\n    // 120 ms later, forever (93 hit-tests each, ~8 per second on an idle page). toggle(true) writes only once.\n    h.classList.toggle('bf26-tt-fixed', true);\n    if (blocked) return;\n    ttLastLay = Date.now();\n    var vw = window.innerWidth || h.clientWidth, vh = window.innerHeight || h.clientHeight;\n    var phone = vw < 768;\n    var W = phone ? 38 : (vw < 1024 ? 54 : 62);\n    var space = W + (phone ? 6 : 10);\n    if (ttFixedCache && Date.now() - (TT.cacheT || 0) > 3000) { ttFixedCache = new WeakMap(); TT.cacheT = Date.now(); }\n    var topRoom = ttHeaderRoom(vh);\n    var botRoom = Math.max(ttSampleBottom(vw - Math.round(W / 2), vh, Math.round(vh * 0.5)), ttSampleBottom(vw - 4, vh, Math.round(vh * 0.5)));\n    var gapT = phone ? 8 : 14, gapB = (phone ? 10 : 16) + ttSafeBottom();\n    var maxH = phone ? 560 : 600;\n    var topPx = topRoom + gapT, botPx = botRoom + gapB;\n    var avail = vh - topPx - botPx;\n    var hgt = Math.min(avail, maxH);\n    if (avail > maxH) {\n      // Phones: hug the bottom (thumb reach, near the cart actions). Desktop: middle of the free space.\n      if (phone) topPx = vh - botPx - hgt; else topPx = topPx + Math.round((avail - hgt) / 2);\n    }\n    var short = hgt < 230;\n    r.classList.toggle('bf26-tt--short', short);\n    var laySig = [W, topPx, hgt, short].join('|');\n    if (laySig !== TT.laySig) {\n      TT.laySig = laySig;\n      r.style.width = W + 'px';\n      r.style.top = topPx + 'px';\n      r.style.height = Math.max(0, hgt) + 'px';\n      r.style.bottom = 'auto';\n      r.classList.toggle('bf26-tt--tight', hgt < 400);\n    }\n    h.style.setProperty('--bf26-tt-space', space + 'px');\n    // Give the page the room (not on Build a Bundle: its trays are full-bleed and that page lays\n    // out its own room for the totem). Desktop only when the page reaches the right edge.\n    var siteW = Number(ttData().siteWidth) || 1650;\n    var needRoom = phone || (vw - Math.min(vw, siteW)) / 2 < space + 8;\n    h.classList.toggle('bf26-tt-reserve', !short && needRoom && !TT.userTuck);   // slid away: give the page its width back\n    // Safety net: still on top of an Add to Cart (or a quantity / checkout button)? Tuck in to a tab.\n    var tuck = !short && ttCovers({ left: vw - W, right: vw, top: topPx, bottom: topPx + hgt, width: W, height: hgt });\n    if (tuck !== TT.tucked) { TT.tucked = tuck; r.classList.toggle('bf26-tt--tuck', tuck); }\n  }\n  function ttQueueLayout() {\n    if (ttLayT) return;\n    ttLayT = setTimeout(function () { ttLayT = 0; try { ttLayout(); } catch (e) { log('totem layout', e); } }, 120);\n  }\n\n  /* ---- the panel: the ladder, what they've earned, the \"gets you there\" tip ---- */\n\n  function ttTip(m) {\n    var st = m.st;\n    if (!m.giftsOn || !(st.qualifyingCount > 0 || m.pendC > 0)) return null;\n    var nx = m.next;\n    if (!nx) {\n      var pendNow = m.tiers.filter(function (t) { return t.pend; });\n      if (pendNow.length) return { b: 'Add your bundle to your cart', s: 'and ' + (pendNow.length > 1 ? pendNow.length + ' free gifts are' : 'the ' + pendNow[pendNow.length - 1].short + ' is') + ' yours! \uD83C\uDF89' };\n      return { b: 'You got every free gift! \uD83C\uDF89', s: step1Line(st.currency).replace('=', 'still =') };\n    }\n    var gapC = nx.minC - m.projC;\n    if (gapC <= 0) return null;\n    // Nov 5 final (Matthew, 2:55 PM): \"You're $88 away from your first free gift: Biggie Wigglitz Key Chain!\"\n    // (\"next\" once a gift is theirs or on its way), then what gets them there.\n    var first = !m.tiers.some(function (t) { return t.hit || t.pend; });\n    var head = tipHead(nx.key, gapC / 100, first);\n    var r = null;\n    try { r = getsYouThere(gapC / 100, st.handles || [], st.wigglitzInCart || 0); } catch (e) { r = null; }\n    if (r && r.type === 'product' && r.variantId) {\n      return { b: head, s: tipLine2(r), add: r.variantId, label: r.title };\n    }\n    // \"Add 9 more Wigglitz to get there!\" is real on Build a Bundle (they are picking right there).\n    if (r && r.type === 'wigglitz' && isBab()) return { b: head, s: tipLine2(r) };\n    // Elsewhere: the cheapest item that covers the gap, or a bundle size link. Never a count the store can't sell.\n    var inCart = {};\n    (st.lines || []).forEach(function (l) { inCart[String(l.variantId)] = true; });\n    var sug = pickSuggestion(gapC, inCart);\n    if (sug && cents(sug.price) >= gapC) {\n      var s2 = cap1(sug.phrase) + ' gets you there faster!';\n      if (sug.variantId) return { b: head, s: s2, add: sug.variantId, label: sug.label };\n      if (sug.url && !isBab()) return { b: head, s: s2, link: sug.url, linkText: 'Build it \u2192' };\n    }\n    // A big gap (the $375 Pterodactyl): only Wigglitz close it, so say how many, with the way to pick them.\n    if (r && r.type === 'wigglitz' && r.count) return { b: head, s: tipLine2(r), link: isBab() ? null : (CFG.babUrl || '/products/build-your-bundle-c') + '?from=bf', linkText: 'Pick them \u2192' };\n    return { b: head, s: 'Every ' + stepText(st.currency) + ' also adds a bonus free Wigglitz!' };\n  }\n\n  function ttPanelBuild() {\n    if (TT.panel) return TT.panel;\n    var p = el('div', 'bf26-ttp');\n    p.id = 'bf26-ttp';\n    p.hidden = true;\n    p.setAttribute('role', 'dialog');\n    p.setAttribute('aria-modal', 'false');\n    p.setAttribute('aria-labelledby', 'bf26-ttp-t');\n    p.tabIndex = -1;\n    var x = el('button', 'bf26-ttp__x');\n    x.type = 'button';\n    x.setAttribute('aria-label', 'Close');\n    x.setAttribute('data-bf26-tt-close', '1');\n    x.innerHTML = '<span aria-hidden=\"true\">\u00D7</span>';\n    var kick = el('p', 'bf26-ttp__kick', 'Black Friday');\n    var t = el('h2', 'bf26-ttp__t');\n    t.id = 'bf26-ttp-t';\n    var earn = el('div', 'bf26-ttp__earn');\n    var pick = el('a', 'bf26-ttp__btn bf26-ttp__pick');\n    pick.hidden = true;\n    var gifts = el('ul', 'bf26-ttp__gifts');\n    gifts.setAttribute('aria-label', 'Free gifts');\n    var stack = el('p', 'bf26-ttp__stack');\n    var note = el('p', 'bf26-ttp__note');\n    var tip = el('div', 'bf26-ttp__tip');\n    tip.setAttribute('aria-live', 'polite');\n    var go = el('a', 'bf26-ttp__btn bf26-ttp__go', 'Build my bundle \u2192');\n    go.href = url(ttData().build || ((CFG.babUrl || '/products/build-your-bundle-c') + '?from=bf'));\n    [x, kick, t, earn, pick, gifts, stack, note, tip, go].forEach(function (n) { p.appendChild(n); });\n    doc.body.appendChild(p);\n    TT.panel = p;\n    TT.pp = { t: t, earn: earn, pick: pick, gifts: gifts, stack: stack, note: note, tip: tip, go: go };\n    return p;\n  }\n\n  function ttPanelFill() {\n    var p = TT.panel, q = TT.pp;\n    if (!p || !q) return;\n    var m = TT.model || ttModel();\n    var st = m.st, cur = st.currency || 'USD';\n    var now = Date.now();\n    var tip = ttTip(m);\n    var sig = JSON.stringify([m.baseC, m.pendC, st.earned, st.picked, st.remaining, m.giftsOn,\n      m.tiers.map(function (t) { return [t.hit, t.pend, t.out]; }), tip, flash && flash.until > now ? flash.text : '', st.cartDisplay]);\n    if (p.getAttribute('data-sig') === sig) return;\n    p.setAttribute('data-sig', sig);\n    setText(q.t, step1Line(cur));\n    q.earn.textContent = '';\n    var star = el('span', 'bf26-ttp__earni');\n    star.innerHTML = svgStar('bf26-ttp__earns');\n    q.earn.appendChild(star);\n    var et = el('span', 'bf26-ttp__earnt');\n    if (st.earned > 0) {\n      et.appendChild(el('b', null, st.earned + ' bonus free Wigglitz'));\n      et.appendChild(doc.createTextNode(' earned' + (st.picked > 0 ? ' \u00B7 ' + st.picked + ' picked' : '')));\n    } else {\n      et.appendChild(el('b', null, 'Your first bonus free Wigglitz'));\n      et.appendChild(doc.createTextNode(' is at ' + stepText(cur) + '.'));\n    }\n    q.earn.appendChild(et);\n    if (st.cartDisplay && st.itemCount > 0) q.earn.appendChild(el('span', 'bf26-ttp__cart', 'Cart ' + st.cartDisplay));\n    var owed = st.remaining > 0 && !pickMode();\n    q.pick.hidden = !owed;\n    if (owed) { setText(q.pick, pickLabel(st.remaining)); q.pick.href = url(pickUrl()); }\n\n    q.gifts.textContent = '';\n    q.gifts.hidden = !m.giftsOn;\n    if (m.giftsOn) {\n      m.tiers.forEach(function (t) {\n        var li = el('li', 'bf26-ttp__g' + (t.hit ? ' is-ok' : t.pend ? ' is-pend' : t.out ? ' is-out' : (m.near && m.next === t ? ' is-near' : '')));\n        var ball = el('span', 'bf26-ttp__ball');\n        var src = ttData().img[t.key];\n        if (src) { var im = el('img'); im.src = src; im.alt = ''; im.width = 44; im.height = 44; im.decoding = 'async'; ball.appendChild(im); }\n        li.appendChild(ball);\n        var nm = el('span', 'bf26-ttp__gn');\n        nm.appendChild(el('b', null, /^FREE\\b/.test(t.name) ? t.name : 'FREE ' + t.name));   // FREE before each gift, so \"At $155\" never reads as a price\n        var sub = t.note || t.tag;\n        if (sub) nm.appendChild(el('small', null, sub));\n        li.appendChild(nm);\n        var right = el('span', 'bf26-ttp__ga', t.hit ? 'FREE \u2713' : t.pend ? 'FREE' : t.out ? 'All claimed' : 'At $' + t.at);\n        li.appendChild(right);\n        q.gifts.appendChild(li);\n      });\n    }\n    setText(q.stack, m.giftsOn ? stackNote() : '');\n    q.stack.hidden = !m.giftsOn;\n    setText(q.note, m.giftsOn ? '' : 'Free gifts ship with US orders.');\n    q.note.hidden = m.giftsOn;\n\n    q.tip.textContent = '';\n    q.tip.hidden = !tip;\n    if (tip) {\n      var tx = el('span', 'bf26-ttp__tipt');\n      tx.appendChild(el('b', null, tip.b));\n      if (tip.s) tx.appendChild(el('span', null, tip.s));\n      q.tip.appendChild(tx);\n      if (tip.add) {\n        var b = el('button', 'bf26-ttp__add', flash && flash.until > now ? flash.text : 'Add');\n        b.type = 'button';\n        b.setAttribute('data-bf26-add', String(tip.add));\n        b.setAttribute('aria-label', 'Add ' + (tip.label || 'it') + ' to your cart');\n        q.tip.appendChild(b);\n      } else if (tip.link) {\n        var a = el('a', 'bf26-ttp__add', tip.linkText || 'Build it \u2192');\n        a.href = url(tip.link);\n        q.tip.appendChild(a);\n      }\n    }\n    q.go.hidden = isBab();\n    ttPanelPlace();\n  }\n\n  function ttPanelPlace() {\n    var p = TT.panel;\n    if (!p || p.hidden || !TT.root) return;\n    var vw = window.innerWidth || doc.documentElement.clientWidth, vh = window.innerHeight || doc.documentElement.clientHeight;\n    var r = TT.root.getBoundingClientRect();\n    var w = Math.min(320, Math.max(220, (r.left > 0 ? r.left : vw) - 20));\n    p.style.width = w + 'px';\n    p.style.maxHeight = Math.max(200, vh - 24) + 'px';\n    var left = Math.max(8, Math.round((r.left > 0 ? r.left : vw) - w - 8));\n    p.style.left = left + 'px';\n    p.style.right = 'auto';\n    var ph = p.offsetHeight || 300;\n    var top = Math.round(r.bottom - ph);\n    if (top < 12) top = 12;\n    if (top + ph > vh - 12) top = Math.max(12, vh - 12 - ph);\n    p.style.top = top + 'px';\n  }\n\n  function ttPanelKey(e) {\n    if (!TT.panel || TT.panel.hidden) return;\n    if (e.key === 'Escape' || e.key === 'Esc') { e.preventDefault(); ttPanelClose(); }\n  }\n  function ttPanelOutside(e) {\n    if (!TT.panel || TT.panel.hidden) return;\n    var t = e.target;\n    if (ttIsOurs(t)) return;\n    if (fm && fm.contains(t)) return;\n    ttPanelClose(true);\n  }\n  function ttPanelOpen() {\n    if (!ttWanted()) return false;\n    ttPanelBuild();\n    var p = TT.panel;\n    if (p.hidden) TT.panelPrev = doc.activeElement;\n    p.hidden = false;\n    p.removeAttribute('data-sig');\n    ttPanelFill();\n    if (TT.hit) TT.hit.setAttribute('aria-expanded', 'true');\n    if (TT.root) TT.root.classList.add('bf26-tt--open');\n    doc.addEventListener('keydown', ttPanelKey, true);\n    doc.addEventListener('pointerdown', ttPanelOutside, true);\n    focusNode(p);\n    return true;\n  }\n  function ttPanelClose(quiet) {\n    var p = TT.panel;\n    if (!p || p.hidden) return;\n    p.hidden = true;\n    if (TT.hit) TT.hit.setAttribute('aria-expanded', 'false');\n    if (TT.root) TT.root.classList.remove('bf26-tt--open');\n    doc.removeEventListener('keydown', ttPanelKey, true);\n    doc.removeEventListener('pointerdown', ttPanelOutside, true);\n    var prev = TT.panelPrev;\n    TT.panelPrev = null;\n    if (!quiet && prev && doc.contains(prev)) focusNode(prev);\n    else if (!quiet && TT.hit) focusNode(TT.hit);\n  }\n\n  // QA: what the totem's layout sees right now (console: BF2026._test.totem()).\n  api._test.totem = function () {\n    var vw = window.innerWidth, vh = window.innerHeight, W = vw < 768 ? 38 : (vw < 1024 ? 54 : 62);\n    return { vw: vw, vh: vh, header: ttHeaderRoom(vh), bottom: Math.max(ttSampleBottom(vw - Math.round(W / 2), vh, Math.round(vh * 0.5)), ttSampleBottom(vw - 4, vh, Math.round(vh * 0.5))),\n      safe: ttSafeBottom(), lay: TT.laySig, blocked: ttBlocked(), tucked: TT.tucked };\n  };\n\n  // The shared interface (Build a Bundle draws its bundle-in-progress through it).\n  totemImpl.render = function () { try { renderTotem(); } catch (e) { log('totem', e); } };\n  totemImpl.mount = function () {\n    if (!TT.root) { totemImpl.render(); return; }\n    var target = totemReq.mountEl && doc.contains(totemReq.mountEl) ? totemReq.mountEl : doc.body;\n    if (TT.root.parentNode !== target) target.appendChild(TT.root);\n    TT.laySig = '';\n    totemImpl.render();\n  };\n\n  function setText(node, text) { if (node && node.textContent !== text) node.textContent = text; }\n\n  /* ----------------------------------------------------- one-tap suggestion */\n\n  function onAddClick(btn) {\n    var vid = parseInt(btn.getAttribute('data-bf26-add'), 10);\n    if (!vid || btn.disabled) return;\n    btn.disabled = true;\n    btn.textContent = 'Adding\u2026';\n    addVariant(vid, function (r, gone) {\n      flash = { text: r.ok ? 'Added! \uD83C\uDF89' : (gone ? 'Sold out!' : 'Try again!'), until: Date.now() + 1500 };\n    }).then(function () {\n      setTimeout(function () {\n        [].forEach.call(doc.querySelectorAll('[data-bf26-add]'), function (b) { b.disabled = false; });\n        flash = null;\n        publish();\n      }, 1500);\n    }, function () { btn.disabled = false; });\n  }\n\n  /* --------------------------------------------------------- face picker */\n\n  function facePicker(selectedId, mini) {\n    var wrap = el('div', 'bf26-faces' + (mini ? ' bf26-faces--mini' : ''));\n    wrap.setAttribute('role', 'group');\n    wrap.setAttribute('aria-label', 'Pick your free ' + biggieName());\n    // Opens the big picker (44px targets, names, sold-out faces grayed).\n    var open = el('button', 'bf26-faces__open' + (mini ? ' bf26-faces__open--mini' : ''), mini ? 'Pick your Biggie \u2192' : 'Pick your free ' + biggieName() + ' \u2192');\n    open.type = 'button';\n    open.setAttribute('data-bf26-fm-open', '1');\n    open.setAttribute('aria-haspopup', 'dialog');\n    if (!mini) wrap.appendChild(open);\n    var row = el('div', 'bf26-faces__row');\n    faceList().forEach(function (f) {\n      var id = Number(f.id);\n      var b = el('button', 'bf26-face' + (id === Number(selectedId) ? ' is-on' : ''));\n      b.type = 'button';\n      b.setAttribute('data-bf26-face', String(id));\n      b.setAttribute('aria-pressed', id === Number(selectedId) ? 'true' : 'false');\n      b.title = f.face;\n      var ok = usableVariant(id) || id === Number(selectedId);\n      if (!ok) { b.disabled = true; b.title = f.face + ' (sold out)'; }\n      var img = FACE_IMG[String(id)];\n      if (img) {\n        var im = el('img');\n        im.src = img; im.alt = ''; im.loading = 'lazy'; im.width = 44; im.height = 44;\n        b.appendChild(im);\n      }\n      b.appendChild(el('span', 'bf26-face__name', f.face));\n      row.appendChild(b);\n    });\n    wrap.appendChild(row);\n    if (mini) wrap.appendChild(open);\n    wrap.setAttribute('data-bf26-sig', String(selectedId) + '|' + faceList().map(function (f) { return usableVariant(f.id) ? 1 : 0; }).join(''));\n    return wrap;\n  }\n\n  function ensureFacePicker(host, selectedId, mini) {\n    if (!host) return;\n    var cur = host.querySelector(':scope > .bf26-faces');\n    var sig = String(selectedId) + '|' + faceList().map(function (f) { return usableVariant(f.id) ? 1 : 0; }).join('');\n    if (cur && cur.getAttribute('data-bf26-sig') === sig) return;\n    var fresh = facePicker(selectedId, mini);\n    if (cur) host.replaceChild(fresh, cur); else host.appendChild(fresh);\n  }\n\n  function onFaceClick(btn) {\n    var id = parseInt(btn.getAttribute('data-bf26-face'), 10);\n    if (!id || btn.disabled || btn.classList.contains('is-on')) return;\n    var group = btn.parentNode;\n    [].forEach.call(group.querySelectorAll('.bf26-face'), function (b) { b.classList.toggle('is-on', b === btn); });\n    group.classList.add('is-busy');\n    setBiggieFace(id).then(function () { group.classList.remove('is-busy'); }, function () { group.classList.remove('is-busy'); });\n  }\n\n  /* ------------------------------------------- Biggie picker (Step 2) modal */\n\n  // \"Pick your free Biggie Wigglitz!\": 6 big face buttons. Opens by itself ONCE per session,\n  // the first time the Biggie gift line is in the cart and no face was chosen yet (it holds\n  // back while another popup is up), and any time from the cart's face picker or\n  // BF2026.openBiggiePicker(). A choice is remembered (sessionStorage bf2026_face) by\n  // setBiggieFace, so it never asks again after one.\n  var fm = null, fmPrev = null, fmNote = '', fmAskT = 0, fmAskUntil = 0, fmAskedMem = false;\n\n  function biggieState(st) {\n    var t = (st && st.tiers) || [];\n    for (var i = 0; i < t.length; i++) { if (t[i].key === 'biggie') return t[i]; }\n    return null;\n  }\n  function onScreen(n) {\n    if (!n || !n.getBoundingClientRect) return false;\n    var r = n.getBoundingClientRect();\n    var vw = window.innerWidth || doc.documentElement.clientWidth, vh = window.innerHeight || doc.documentElement.clientHeight;\n    if (r.width <= 0 || r.height <= 0 || r.bottom <= 0 || r.right <= 0 || r.top >= vh || r.left >= vw) return false;\n    var cs = window.getComputedStyle(n);\n    return cs.display !== 'none' && cs.visibility !== 'hidden' && Number(cs.opacity) > 0.05;\n  }\n  // Someone else's popup is open: the Winky gift popup, BAB's \"Bundle added\" dialog and its\n  // drawer, the theme's added-to-cart notice, colorbox, a Klaviyo form or any other dialog.\n  function otherOverlay() {\n    if (doc.body && doc.body.classList.contains('gift-modal-open')) return true;\n    if (doc.querySelector('#bb-added-choice.is-open, #bb-downsize.is-open, #bb-stickybar.bb-sb-open, #create-your-bundle .cstm-bundle-content.open-popupBar')) return true;\n    var list = doc.querySelectorAll('.added-notice, #cboxOverlay, [aria-modal=\"true\"], [role=\"dialog\"], [role=\"alertdialog\"]');\n    for (var i = 0; i < list.length; i++) {\n      if (fm && fm.contains(list[i])) continue;\n      if (onScreen(list[i])) return true;\n    }\n    return false;\n  }\n  function faceAsked() { return fmAskedMem || ssGet(KEY_FACE_ASKED) === '1'; }\n  function wantAutoFace() {\n    var st = state;\n    // Nov 5: a page with its own \"You got a free Biggie\" pop-up (Build a Bundle) owns the auto-open.\n    if (window.BF2026_FACE_UI === 'external') return false;\n    if (!st.active || !st.ready || !st.giftsOK || !faceList().length) return false;\n    if (storedFace() || faceAsked() || (fm && !fm.hidden)) return false;\n    var t = biggieState(st);\n    return !!(t && t.reached && t.inCart);\n  }\n  function maybeAskFace() {\n    if (fmAskT || !wantAutoFace()) return;\n    fmAskUntil = Date.now() + 120000;           // wait up to 2 min for other popups to close\n    var tick = function () {\n      fmAskT = 0;\n      if (!wantAutoFace()) return;\n      if (busy || queued || otherOverlay()) {\n        if (Date.now() < fmAskUntil) fmAskT = setTimeout(tick, 700);\n        return;\n      }\n      try { openFacePicker({ auto: true }); } catch (e) { log('biggie picker', e); }\n    };\n    fmAskT = setTimeout(tick, 900);             // let the cart page and header re-render first\n  }\n\n  function buildFaceModal() {\n    var m = el('div', 'bf26-modal');\n    m.id = 'bf26-face-modal';\n    m.hidden = true;\n    var scrim = el('div', 'bf26-modal__scrim');\n    scrim.setAttribute('data-bf26-fm-close', '1');\n    var box = el('div', 'bf26-modal__box');\n    box.setAttribute('role', 'dialog');\n    box.setAttribute('aria-modal', 'true');\n    box.setAttribute('aria-labelledby', 'bf26-fm-title');\n    box.setAttribute('aria-describedby', 'bf26-fm-sub');\n    box.tabIndex = -1;\n    var x = el('button', 'bf26-modal__x');\n    x.type = 'button';\n    x.setAttribute('aria-label', 'Close');\n    x.setAttribute('data-bf26-fm-close', '1');\n    var xi = el('span', null, '\u00D7');\n    xi.setAttribute('aria-hidden', 'true');\n    x.appendChild(xi);\n    var kick = el('p', 'bf26-modal__kick');\n    var h = el('h2', 'bf26-modal__title', 'Pick your free ' + biggieName() + '!');\n    h.id = 'bf26-fm-title';\n    var sub = el('p', 'bf26-modal__sub');\n    sub.id = 'bf26-fm-sub';\n    var note = el('p', 'bf26-modal__note');\n    note.setAttribute('role', 'status');\n    var grid = el('div', 'bf26-modal__grid');\n    grid.setAttribute('role', 'group');\n    grid.setAttribute('aria-label', biggieName());\n    [x, kick, h, sub, note, grid].forEach(function (n) { box.appendChild(n); });\n    m.appendChild(scrim);\n    m.appendChild(box);\n    doc.body.appendChild(m);\n    return m;\n  }\n\n  function fillFaceModal() {\n    if (!fm) return;\n    var st = state;\n    var t = biggieState(st);\n    var tier = biggieTier();\n    var sel = Number(st.biggieFace) || 0;\n    var have = !!(t && t.reached && t.inCart);\n    var avail = faceList().map(function (f) { return usableVariant(f.id) ? 1 : 0; }).join('');\n    var sig = [have ? 1 : 0, sel, avail, fmNote].join('|');\n    if (fm.getAttribute('data-sig') === sig) return;\n    fm.setAttribute('data-sig', sig);\n    var focusId = doc.activeElement && doc.activeElement.getAttribute ? doc.activeElement.getAttribute('data-bf26-mface') : null;\n    // Nov 6 (Matthew): no \"Step 2 is yours\"; say it plainly.\n    setText(fm.querySelector('.bf26-modal__kick'), have ? 'Congrats! Your cart has earned you a free Biggie Wigglitz Premium Key Chain! \uD83C\uDF89' : (tier ? tierLine(tier, st.currency) + '!' : ''));\n    setText(fm.querySelector('.bf26-modal__sub'), have ? 'Tap the one you want. You can change it in your cart.' : 'Tap the one you want. It goes in your cart when your cart reaches ' + (tier && tier.at ? (st.currency && st.currency !== 'USD' ? 'US$' : '$') + tier.at : 'the gift') + '.');\n    setText(fm.querySelector('.bf26-modal__note'), fmNote);\n    var grid = fm.querySelector('.bf26-modal__grid');\n    grid.textContent = '';\n    faceList().forEach(function (f) {\n      var id = Number(f.id);\n      var on = id === sel;\n      var ok = usableVariant(id) || on;\n      var b = el('button', 'bf26-mface' + (on ? ' is-on' : ''));\n      b.type = 'button';\n      b.setAttribute('data-bf26-mface', String(id));\n      b.setAttribute('aria-pressed', on ? 'true' : 'false');\n      var img = FACE_IMG[String(id)];\n      if (img) {\n        var im = el('img');\n        im.src = img; im.alt = ''; im.width = 88; im.height = 88; im.decoding = 'async';\n        b.appendChild(im);\n      }\n      b.appendChild(el('span', 'bf26-mface__name', f.face));\n      if (!ok) {\n        b.disabled = true;\n        b.appendChild(el('span', 'bf26-mface__out', 'Sold out'));\n      }\n      b.setAttribute('aria-label', f.face + (on ? ', in your cart' : '') + (ok ? '' : ', sold out'));\n      grid.appendChild(b);\n    });\n    if (focusId && !fm.hidden) {\n      var again = grid.querySelector('[data-bf26-mface=\"' + focusId + '\"]:not([disabled])');\n      if (again) focusNode(again);\n    }\n  }\n\n  function focusNode(n) { if (!n || !n.focus) return; try { n.focus({ preventScroll: true }); } catch (e) { n.focus(); } }\n  function fmFocusables() {\n    return fm ? [].filter.call(fm.querySelectorAll('button:not([disabled]), a[href]'), function (n) { return n.offsetWidth > 0 || n.offsetHeight > 0; }) : [];\n  }\n  function fmKeydown(e) {\n    if (!fm || fm.hidden) return;\n    if (e.key === 'Escape' || e.key === 'Esc') { e.preventDefault(); e.stopPropagation(); closeFacePicker(); return; }\n    if (e.key !== 'Tab') return;\n    var f = fmFocusables();\n    if (!f.length) { e.preventDefault(); return; }\n    var first = f[0], last = f[f.length - 1], a = doc.activeElement;\n    if (e.shiftKey && (a === first || !fm.contains(a))) { e.preventDefault(); focusNode(last); }\n    else if (!e.shiftKey && (a === last || !fm.contains(a))) { e.preventDefault(); focusNode(first); }\n  }\n  function fmFocusIn(e) {\n    if (!fm || fm.hidden || fm.contains(e.target)) return;\n    focusNode(fmFocusables()[0] || fm.querySelector('.bf26-modal__box'));\n  }\n\n  function openFacePicker(opts) {\n    opts = opts || {};\n    if (!faceList().length || !doc.body) return false;\n    if (opts.auto) { fmAskedMem = true; ssSet(KEY_FACE_ASKED, '1'); }\n    if (fmAskT) { clearTimeout(fmAskT); fmAskT = 0; }\n    fm = fm || buildFaceModal();\n    fmNote = opts.note || '';\n    var wasHidden = fm.hidden;\n    if (wasHidden) fmPrev = doc.activeElement;\n    fm.hidden = false;\n    fillFaceModal();\n    if (wasHidden) {\n      doc.documentElement.classList.add('bf26-modal-open');\n      doc.addEventListener('keydown', fmKeydown, true);\n      doc.addEventListener('focusin', fmFocusIn, true);\n    }\n    focusNode(fm.querySelector('.bf26-mface.is-on:not([disabled])') || fm.querySelector('.bf26-mface:not([disabled])') || fm.querySelector('.bf26-modal__x'));\n    log('biggie picker open', opts.auto ? 'auto' : 'asked');\n    return true;\n  }\n\n  function closeFacePicker() {\n    if (!fm || fm.hidden) return;\n    fm.hidden = true;\n    fmNote = '';\n    doc.documentElement.classList.remove('bf26-modal-open');\n    doc.removeEventListener('keydown', fmKeydown, true);\n    doc.removeEventListener('focusin', fmFocusIn, true);\n    var p = fmPrev;\n    fmPrev = null;\n    if (p && p !== doc.body && doc.contains(p)) focusNode(p);\n  }\n\n  function onModalFace(btn) {\n    var id = parseInt(btn.getAttribute('data-bf26-mface'), 10);\n    if (!id || btn.disabled) return;\n    var f = faceById(id);\n    closeFacePicker();\n    // Keeping the one already in the cart still counts as a choice (no more auto-asking).\n    if (btn.classList.contains('is-on') && storedFace() === id) return;\n    setBiggieFace(id).then(function (r) {\n      if (!r || r.ok) return;\n      var name = f ? f.face : 'That one';\n      if (r.reason === 'sold-out') openFacePicker({ note: name + ' just sold out. Pick another one!' });\n      else if (r.reason === 'refused') openFacePicker({ note: name + ' didn\u2019t switch. Please tap it again!' });\n    }, noop);\n  }\n\n  // After every state: keep an open picker current, and maybe open it by itself.\n  function syncFacePicker() {\n    if (fm && !fm.hidden) {\n      if (!state.active || !faceList().length) closeFacePicker(); else fillFaceModal();\n    }\n    maybeAskFace();\n  }\n\n  /* ----------------------------------------------------------- tag helper */\n\n  // Nov 5 final (Mirela: \"when I was adding my free wigglitz at the end, it still had a price\"):\n  // every Black Friday line reads FREE, never a price: picks are $0 characters and the gifts are made\n  // $0 by the automatic discounts (live at 10 PM; before that, in preview, the subtotal still counts\n  // a gift's price). The cells say \"Free\" (the same word main-cart's own gift script writes, so the two\n  // scripts never fight) and the CSS shows it in capitals: FREE.\n  function tagText(line) {\n    return ((line.bf === 'pick' || line.bf === 'auto') ? 'Free Wigglitz' : 'Free gift') + (line.qty > 1 ? ' \u00D7' + line.qty : '');\n  }\n  function ensureTag(afterNode, line) {\n    if (!afterNode || !afterNode.parentNode) return;\n    var sig = tagText(line);\n    var next = afterNode.nextElementSibling;\n    var tag = next && next.classList.contains('bf26-tag') ? next : null;\n    if (tag && tag.getAttribute('data-sig') === sig) return;\n    if (!tag) { tag = el('span', 'bf26-tag'); afterNode.parentNode.insertBefore(tag, afterNode.nextSibling); }\n    tag.textContent = sig;\n    tag.setAttribute('data-sig', sig);\n  }\n  function markFree(cell, free) {\n    if (free) {\n      if (cell.getAttribute('data-bf26') !== '1') {\n        cell.__bf26html = cell.innerHTML;\n        cell.textContent = 'Free';\n        cell.setAttribute('data-bf26', '1');\n      } else if (cell.textContent !== 'Free') {\n        cell.textContent = 'Free';                     // a theme re-render put a price back\n      }\n    } else if (cell.getAttribute('data-bf26') === '1') {\n      if (cell.__bf26html != null) cell.innerHTML = cell.__bf26html;   // back to the real price\n      cell.removeAttribute('data-bf26');\n    }\n  }\n\n  /* ------------------------------------------------------------ cart page */\n\n  var cartObserver = null, cartDecorT = 0;\n\n  // Nov 6 (Matthew: free items mixed in above the paid ones): main-cart prints the paid rows first, then a\n  // gold \"Your FREE Black Friday gifts\" header row (li[data-bf26-free-head], not a cart line) and every\n  // _bf_gift / _bf_pick row under it. Liquid can only count the picks, so this writes \"N of M free Wigglitz\n  // picked\" and shows pickLabel() (\"Pick my N free Wigglitz \u2192\") while picks are left. Writes only when something differs,\n  // so the tidy's and this file's cart observers never wake each other up.\n  function syncFreeHead() {\n    var st = state;\n    if (!st.active || !st.ready) return;\n    var fh = doc.querySelector('[data-section-type=\"cart\"] ul.cart-items [data-bf26-free-head]');\n    if (!fh) return;\n    ttFont();\n    setText(fh.querySelector('[data-bf26-free-count]'), st.picked + ' of ' + st.earned + ' free Wigglitz picked');\n    var more = fh.querySelector('[data-bf26-free-more]');\n    if (more) {\n      var href = url(pickUrl());\n      if (more.getAttribute('href') !== href) more.setAttribute('href', href);\n      var hide = !(st.remaining > 0);\n      if (more.hidden !== hide) more.hidden = hide;\n      if (st.remaining > 0) setText(more, pickLabel(st.remaining));   // same words as the panel button\n    }\n  }\n\n  function decorateCart() {\n    if (!isCartPage()) return;\n    var sec = doc.querySelector('[data-section-type=\"cart\"]');\n    if (!sec) return;\n    var st = state;\n    if (!st.active || !st.ready) return;\n    var byKey = {};\n    st.lines.forEach(function (l) { byKey[l.key] = l; });\n\n    if (cartObserver) cartObserver.disconnect();\n    [].forEach.call(sec.querySelectorAll('ul.cart-items li.cart-item-container[data-key]'), function (li) {\n      var key = li.getAttribute('data-key');\n      var line = byKey[key];\n      // Remove by line KEY, not by position (main-cart L197 \"?line=N\"): our gift lines go\n      // in at the top of the cart, so a stale N would remove another item.\n      [].forEach.call(li.querySelectorAll('a.quantity__remove'), function (a) {\n        var href = url('cart/change?id=' + encodeURIComponent(key) + '&quantity=0');\n        if (a.getAttribute('href') !== href) a.setAttribute('href', href);\n      });\n      var isBF = !!(line && line.bf);\n      li.classList.toggle('bf26-line', isBF);\n      li.classList.toggle('bf26-line--pick', isBF && (line.bf === 'pick' || line.bf === 'auto'));\n      li.classList.toggle('bf26-line--gift', isBF && line.bf === 'gift');\n      if (!isBF) return;\n      ensureTag(li.querySelector('.description__title'), line);\n      // Desktop shows .price, phones show .total (styles.css.liquid ~L5810): label both FREE.\n      [].forEach.call(li.querySelectorAll('.cart-item .price, .cart-item .total'), function (cell) {\n        markFree(cell, true);\n      });\n      if (line.bf === 'gift' && line.tier === 'biggie' && faceList().length) {\n        ensureFacePicker(li.querySelector('.description'), line.variantId, false);\n      }\n    });\n    syncFreeHead();\n    ensureCartPanel(sec, st);\n    var submit = sec.querySelector('.cart-submit');\n    var label = 'I\u2019m ready to check out! \uD83C\uDF89';\n    if (submit && submit.textContent !== label) submit.textContent = label;\n    observeCart(sec);\n    checkStale(sec, st);\n  }\n\n  // The theme's own refresh (theme.js refreshCartAreas) can land HTML that was rendered\n  // before our gift change. If the rows on screen are not the lines in the cart, re-render\n  // once. Rate-limited, and skipped while a sync is running or booked.\n  var staleSig = '', staleTimes = [];\n  function checkStale(sec, st) {\n    if (busy || timer || queued || !lastCart) return;\n    var have = [].map.call(sec.querySelectorAll('ul.cart-items li.cart-item-container[data-key]'), function (li) {\n      return li.getAttribute('data-key');\n    }).sort().join('|');\n    var want = st.lines.map(function (l) { return l.key; }).sort().join('|');\n    if (have === want) { staleSig = ''; return; }\n    var sig = have + '#' + want;\n    if (sig === staleSig) return;\n    var t = Date.now();\n    staleTimes = staleTimes.filter(function (x) { return t - x < 10000; });\n    if (staleTimes.length >= 3) return;\n    staleSig = sig;\n    staleTimes.push(t);\n    log('cart page out of date, re-rendering');\n    rerenderCartPage(lastCart);\n  }\n\n  function observeCart(sec) {\n    if (!window.MutationObserver) return;\n    var ul = sec.querySelector('ul.cart-items');\n    if (!ul) return;\n    cartObserver = cartObserver || new MutationObserver(function () {\n      // The gold header row comes back from every re-render with Liquid's text: fix it before the next\n      // paint (cheap, writes only on a difference), then decorate the rows as before.\n      try { syncFreeHead(); } catch (e) { log(e); }\n      clearTimeout(cartDecorT);\n      cartDecorT = setTimeout(function () { try { decorateCart(); } catch (e) { log(e); } }, 160);\n    });\n    cartObserver.observe(ul, { childList: true, subtree: true });\n  }\n\n  function ensureCartPanel(sec, st) {\n    var finish = sec.querySelector('form .cart-finish');\n    if (!finish) return;\n    var panel = doc.getElementById('bf26-cart');\n    if (!panel) {\n      // Three fixed parts. Only the one-line \"next\" message is a live region, and it is\n      // never rebuilt (just re-texted), so screen readers hear the change, not the panel.\n      panel = el('div', 'bf26-cart');\n      panel.id = 'bf26-cart';\n      panel.appendChild(el('div', 'bf26-cart__top'));\n      var nx = el('p', 'bf26-cart__next');\n      nx.setAttribute('aria-live', 'polite');\n      panel.appendChild(nx);\n      panel.appendChild(el('div', 'bf26-cart__bot'));\n      finish.parentNode.insertBefore(panel, finish);\n    }\n    var top = panel.querySelector('.bf26-cart__top'), next = panel.querySelector('.bf26-cart__next'),\n        bot = panel.querySelector('.bf26-cart__bot');\n    // Nov 5 final: the same \"gets you there\" tip as the totem panel (\"You're $88 away from your first\n    // free gift: ...\" + \"The Volcano Playsetz gets you there faster!\"), with its one-tap Add.\n    var tip = null;\n    try { tip = st.goal !== 'empty' ? ttTip(ttModel()) : null; } catch (e) { tip = null; }\n    var sig = JSON.stringify([st.earned, st.picked, st.remaining, st.message, st.tiers, st.suggestion, st.giftsOK, st.shipping, st.biggieFace, flash && flash.text, tip]);\n    if (panel.getAttribute('data-sig') === sig) return;\n    panel.setAttribute('data-sig', sig);\n    top.textContent = '';\n    bot.textContent = '';\n    setText(next, tip ? tip.b + (tip.s ? ' ' + tip.s : '') : (st.message && st.goal !== 'empty' ? st.message : ''));\n    var step = stepText(st.currency);\n\n    // The 4 steps, in order, built from the bottom up. Step 1 carries the pick count.\n    var steps = el('ol', 'bf26-steps');\n    steps.setAttribute('aria-label', 'Black Friday steps');\n    function stepItem(n, text, cls, note) {\n      var li = el('li', 'bf26-step' + (cls ? ' ' + cls : ''));\n      var done = cls === 'is-done';\n      var bub = el('span', 'bf26-step__n', done ? '\u2713' : String(n));\n      bub.setAttribute('aria-hidden', 'true');\n      li.appendChild(bub);\n      var body = el('span', 'bf26-step__t');\n      body.appendChild(el('b', null, 'Step ' + n + ': '));\n      body.appendChild(doc.createTextNode(text));\n      if (done) body.appendChild(el('span', 'bf26-sr', ' (done)'));\n      if (note) body.appendChild(note);\n      li.appendChild(body);\n      steps.appendChild(li);\n      return li;\n    }\n    var s1note = el('span', 'bf26-step__sub');\n    if (st.earned > 0) {\n      s1note.appendChild(doc.createTextNode(st.earned + ' earned \u00B7 ' + st.picked + ' picked'));\n      if (st.remaining > 0) {\n        s1note.appendChild(doc.createTextNode(' \u00B7 '));\n        var a = el('a', 'bf26-cart__picklink', 'Pick ' + st.remaining + ' more \u2192');\n        a.href = url(pickUrl());\n        s1note.appendChild(a);\n      }\n    }\n    stepItem(1, step1Line(st.currency), st.earned > 0 ? 'is-done' : (st.qualifyingCount ? 'is-next' : ''), st.earned > 0 ? s1note : null);\n    st.tiers.forEach(function (t) {\n      var cls = '', note = null;\n      // Nov 5 v2: a gift the engine can't add yet (Gold Jimothy, no variant id) still reads like the\n      // offer: done once the amount is reached, \"next\" before that. No \"Coming soon\" for shoppers.\n      if (t.coming) { if (t.hit) cls = 'is-done'; else if (st.nextGift && st.nextGift.key === t.key && st.earned > 0) cls = 'is-next'; }\n      else if (t.reached && t.inCart && t.free) cls = 'is-done';\n      else if (t.reached && t.soldOut) { cls = 'is-out'; note = el('span', 'bf26-step__sub', 'All claimed right now'); }\n      else if (t.declined) {\n        // The shopper took it out: it stays out (until the cart grows), one tap puts it back.\n        note = el('span', 'bf26-step__sub', 'You removed it. ');\n        var back = el('button', 'bf26-faces__open bf26-faces__open--inline', 'Add it back \u2192');\n        back.type = 'button';\n        back.setAttribute('data-bf26-undecline', t.key);\n        back.setAttribute('aria-label', 'Add the free ' + t.label + ' back to your cart');\n        note.appendChild(back);\n      }\n      if (t.key === 'biggie' && t.reached && t.inCart && faceList().length) {\n        note = el('span', 'bf26-step__sub');\n        var f = faceById(st.biggieFace);\n        if (f) note.appendChild(doc.createTextNode(f.face + ' \u00B7 '));\n        var ob = el('button', 'bf26-faces__open bf26-faces__open--inline', f ? 'Change it \u2192' : 'Pick which one \u2192');\n        ob.type = 'button';\n        ob.setAttribute('data-bf26-fm-open', '1');\n        ob.setAttribute('aria-haspopup', 'dialog');\n        ob.setAttribute('aria-label', 'Pick your free ' + biggieName());\n        note.appendChild(ob);\n      }\n      else if (st.nextGift && st.nextGift.key === t.key && st.earned > 0) cls = 'is-next';\n      stepItem(t.step, t.line, cls, note);\n    });\n    top.appendChild(steps);\n    if (st.tiers.length && st.giftsOK) top.appendChild(el('p', 'bf26-cart__stack', stackNote()));\n    // Gift discounts are US only: say so instead of promising gifts that would be charged.\n    if (st.tiers.length && !st.giftsOK) top.appendChild(el('p', 'bf26-cart__note', 'Free gifts ship with US orders.'));\n\n    var acts = el('div', 'bf26-cart__acts');\n    if (st.remaining > 0) {\n      var pk = el('a', 'bf26-btn bf26-btn--coral', pickLabel(st.remaining));\n      pk.href = url(pickUrl());\n      acts.appendChild(pk);\n    }\n    var sug = st.suggestion;\n    if (tip && tip.add) {\n      var tb = el('button', 'bf26-btn bf26-btn--teal', flash && flash.until > Date.now() ? flash.text : 'Add ' + (tip.label || 'it'));\n      tb.type = 'button';\n      tb.setAttribute('data-bf26-add', String(tip.add));\n      acts.appendChild(tb);\n    } else if (tip && tip.link) {\n      var tl = el('a', 'bf26-btn bf26-btn--teal', tip.linkText || 'Build it \u2192');\n      tl.href = url(tip.link);\n      acts.appendChild(tl);\n    } else if (tip) {\n      // the tip says it all (every gift is theirs)\n    } else if (sug && sug.variantId) {\n      var b = el('button', 'bf26-btn bf26-btn--teal', flash && flash.until > Date.now() ? flash.text : 'Add ' + sug.label);\n      b.type = 'button';\n      b.setAttribute('data-bf26-add', String(sug.variantId));\n      acts.appendChild(b);\n    } else if (sug && sug.url) {\n      var l = el('a', 'bf26-btn bf26-btn--teal', 'Build a ' + sug.label + ' \u2192');\n      l.href = url(sug.url);\n      acts.appendChild(l);\n    }\n    if (acts.childNodes.length) bot.appendChild(acts);\n\n    st.tiers.forEach(function (t) {\n      if (t.reached && t.soldOut) {\n        bot.appendChild(el('p', 'bf26-cart__note',\n          'Free ' + t.label + ' gifts are while supplies last, and they\u2019re all claimed right now. Every ' + step + ' still adds a bonus free Wigglitz!'));\n      }\n    });\n    // Free shipping is not a step: one small line, US only.\n    if (st.shipping && st.shipping.eligible) {\n      var shipAt = '$' + Math.round(Number(CFG.freeShippingUSD) || 59.99);\n      bot.appendChild(el('p', 'bf26-cart__ship', st.shipping.reached ? 'Free shipping \u2713' : 'Free shipping at ' + shipAt));\n    }\n  }\n\n  function rerenderCartPage(cart) {\n    var sec = doc.querySelector('[data-section-type=\"cart\"]');\n    if (!sec) return Promise.resolve();\n    var id = sec.getAttribute('data-section-id');\n    var empty = !(cart && cart.item_count);\n    if (!id || (!empty && !sec.querySelector('ul.cart-items'))) return reloadOnce();\n    return rawFetch(url('cart?sections=' + encodeURIComponent(id)), { credentials: 'same-origin', cache: 'no-store' })\n      .then(function (r) { if (!r.ok) throw new Error('sections ' + r.status); return r.json(); })\n      .then(function (data) {\n        var html = data && data[id];\n        if (!html) throw new Error('no section html');\n        var tmp = doc.createElement('div');\n        tmp.innerHTML = html;\n        if (empty || !tmp.querySelector('ul.cart-items')) {\n          // Nov 5 final (Haden: \"still some free gifts left ... clunky and stuck\"): the cart is empty now.\n          // Show the theme's own empty cart right away, never rows that are no longer in the cart.\n          var fresh = tmp.querySelector('[data-section-type=\"cart\"]');\n          if (!fresh) throw new Error('no cart section');\n          sec.innerHTML = fresh.innerHTML;\n          return;\n        }\n        ['ul.cart-items', '.subtotal-row'].forEach(function (sel) {\n          var a = sec.querySelector(sel), b = tmp.querySelector(sel);\n          if (a && b) a.innerHTML = b.innerHTML;\n        });\n        decorateCart();\n      })\n      .catch(function (e) { log('cart rerender failed', e); return reloadOnce(); });\n  }\n\n  function reloadOnce() {\n    var last = parseInt(ssGet(KEY_RELOAD), 10) || 0;\n    if (Date.now() - last < 5000) return Promise.resolve();   // never a reload loop\n    ssSet(KEY_RELOAD, String(Date.now()));\n    window.location.reload();\n    return Promise.resolve();\n  }\n\n  /* ------------------------------------------------ header cart summary */\n\n  function decorateHeader() {\n    var st = state;\n    if (!st.active || !st.ready) return;\n    [].forEach.call(doc.querySelectorAll('.header-cart .cart-summary'), function (sum) {\n      var rows = sum.querySelectorAll('.cart-summary__product');\n      if (rows.length === st.lines.length) {\n        [].forEach.call(rows, function (row, i) {\n          var line = st.lines[i];\n          if (!line || !line.bf) return;\n          row.classList.add('bf26-sumline');\n          var link = row.querySelector('.cart-summary__product-title a');\n          ensureTag(link, line);\n          var price = row.querySelector('.cart-summary__price');\n          if (price) markFree(price, true);\n          if (line.bf === 'gift' && line.tier === 'biggie' && faceList().length) {\n            ensureFacePicker(row.querySelector('.cart-summary__product__description'), line.variantId, true);\n          }\n        });\n      }\n      var foot = sum.querySelector('.cart-summary__footer');\n      if (!foot) return;\n      var box = foot.querySelector(':scope > .bf26-sum');\n      if (!box) { box = el('div', 'bf26-sum'); foot.insertBefore(box, foot.firstChild); }\n      if (st.qualifyingCount === 0) { if (box.parentNode) box.parentNode.removeChild(box); return; }\n      var sig = [st.earned, st.remaining, st.message].join('|');\n      if (box.getAttribute('data-sig') === sig) return;\n      box.setAttribute('data-sig', sig);\n      box.textContent = '';\n      box.appendChild(el('div', 'bf26-sum__r1', '\uD83C\uDF81 ' + (st.earned > 0 ? st.earned + ' free Wigglitz earned' : step1Line(st.currency))));\n      if (st.remaining > 0) {\n        var a = el('a', 'bf26-sum__pick', 'Pick ' + st.remaining + ' more \u2192');\n        a.href = url(pickUrl());\n        box.appendChild(a);\n      } else if (st.message) {\n        box.appendChild(el('div', 'bf26-sum__r2', st.message));\n      }\n    });\n  }\n\n  var headerSeq = 0;\n  function refreshHeader(cart) {\n    [].forEach.call(doc.querySelectorAll('.header-cart__count'), function (c) { c.textContent = String(cart.item_count || 0); });\n    if (isCartPage()) return Promise.resolve();          // the summary is not rendered on /cart\n    var hc = doc.querySelector('.header-cart');\n    var secEl = hc && hc.closest ? hc.closest('.shopify-section') : null;\n    var id = secEl && secEl.id ? secEl.id.replace(/^shopify-section-/, '') : '';\n    if (!id) return Promise.resolve();\n    // Nov 6: off /cart nothing waits for this any more (refreshThemeUI), so two can overlap. Only the\n    // newest one may write, so an older header (older count) never lands on top of a newer one.\n    var mySeq = ++headerSeq;\n    return rawFetch(url('search?sections=' + encodeURIComponent(id)), { credentials: 'same-origin', cache: 'no-store' })\n      .then(function (r) { if (!r.ok) throw new Error('header ' + r.status); return r.json(); })\n      .then(function (data) {\n        if (mySeq !== headerSeq) return;\n        var html = data && data[id];\n        if (!html) return;\n        var tmp = doc.createElement('div');\n        tmp.innerHTML = html;\n        var fresh = tmp.querySelector('.header-cart');\n        if (!fresh) return;\n        [].forEach.call(doc.querySelectorAll('.header-cart'), function (h) { h.innerHTML = fresh.innerHTML; });\n        decorateHeader();\n      })\n      .catch(function (e) { log('header refresh failed', e); });\n  }\n\n  function refreshThemeUI(cart) {\n    // Nov 6 speed: off /cart, the header (a 165 KB section, ~0.5 s) refreshes in the background instead of\n    // holding every FREE tap and gift add until it lands. /cart still waits for its re-render, so a fast\n    // +/- tap never hits a stale line number (reconcile stays busy until then).\n    if (!isCartPage()) { refreshHeader(cart); return Promise.resolve(); }\n    return Promise.all([refreshHeader(cart), rerenderCartPage(cart)]).then(noop, noop);\n  }\n\n  /* ---------------------------------------------------------- watchers */\n\n  function installWatchers() {\n    // fetch: gift-modal, GIANTZ / Volcano / Frosty / Spooky / Monthly Box sections, the cart sweep, apps.\n    if (!window.fetch.__bf26) {\n      var inner = window.fetch;\n      var wrapped = function (input) {\n        var p = inner.apply(window, arguments);\n        try {\n          var u = typeof input === 'string' ? input : (input && input.url) || String(input || '');\n          if (MUT_RE.test(u)) p.then(function () { schedule('fetch'); }, function () { schedule('fetch'); });\n        } catch (e) { /* never break the caller */ }\n        return p;\n      };\n      wrapped.__bf26 = true;\n      window.fetch = wrapped;\n    }\n    // Raw XHR (apps that skip jQuery). jQuery also uses XHR; the debounce merges both.\n    var XP = window.XMLHttpRequest && window.XMLHttpRequest.prototype;\n    if (XP && !XP.__bf26) {\n      var open = XP.open, send = XP.send;\n      XP.open = function (m, u) {\n        try { this.__bf26u = MUT_RE.test(String(u || '')); } catch (e) { /* ignore */ }\n        return open.apply(this, arguments);\n      };\n      XP.send = function () {\n        if (this.__bf26u) { try { this.addEventListener('loadend', function () { schedule('xhr'); }); } catch (e) { /* ignore */ } }\n        return send.apply(this, arguments);\n      };\n      XP.__bf26 = true;\n    }\n    // Cart page +/-: remember which line KEY the tapped row had (see cartChangeByKey).\n    ['pointerdown', 'mousedown', 'touchstart', 'click', 'keydown', 'input'].forEach(function (ev) {\n      doc.addEventListener(ev, snapLine, { capture: true, passive: true });\n    });\n    bindJQ();\n    doc.addEventListener('DOMContentLoaded', bindJQ);\n    doc.addEventListener('wigglitz:gift-added', function () { schedule('winky'); });\n    window.addEventListener('pageshow', function (e) { if (e.persisted) schedule('pageshow', 50); });\n    doc.addEventListener('visibilitychange', function () {\n      if (doc.visibilityState === 'visible' && Date.now() - lastRun > 20000) schedule('visible', 50);\n    });\n\n    // UI: delegated clicks for our buttons, the face picker and the checkout guard.\n    doc.addEventListener('click', function (e) {\n      var t = e.target && e.target.closest ? e.target : null;\n      if (!t) return;\n      var add = t.closest('[data-bf26-add]');\n      if (add) { e.preventDefault(); onAddClick(add); return; }\n      var face = t.closest('[data-bf26-face]');\n      if (face) { e.preventDefault(); e.stopPropagation(); onFaceClick(face); return; }\n      // Biggie picker modal: a face, the X / backdrop, or an \"open\" button.\n      var mface = t.closest('[data-bf26-mface]');\n      if (mface) { e.preventDefault(); onModalFace(mface); return; }\n      if (t.closest('[data-bf26-fm-close]')) { e.preventDefault(); closeFacePicker(); return; }\n      if (t.closest('[data-bf26-fm-open]')) { e.preventDefault(); e.stopPropagation(); openFacePicker({}); return; }\n      // Gift totem: tap = open / close its panel.\n      if (t.closest('[data-bf26-tt-open]')) { e.preventDefault(); if (TT.panel && !TT.panel.hidden) ttPanelClose(); else ttPanelOpen(); return; }\n      if (t.closest('[data-bf26-tt-close]')) { e.preventDefault(); ttPanelClose(); return; }\n      // Cart panel: put a gift the shopper removed back in.\n      var back = t.closest('[data-bf26-undecline]');\n      if (back) { e.preventDefault(); clearDeclined(back.getAttribute('data-bf26-undecline')); enqueue('undecline', { uiRefresh: true }); return; }\n    });\n    doc.addEventListener('click', guardCheckout, true);\n    doc.addEventListener('click', onCartRemove, true);\n    doc.addEventListener('mouseover', function (e) {\n      if (e.target && e.target.closest && e.target.closest('.header-cart')) { try { decorateHeader(); } catch (err) { log(err); } }\n    }, { passive: true });\n\n    // The gift totem: re-render on every engine update, keep its place while the page moves.\n    doc.addEventListener('bf2026:update', function () { totemImpl.render(); });\n    window.addEventListener('scroll', function () { ttQueueLayout(); if (TT.panel && !TT.panel.hidden) ttPanelPlace(); }, { passive: true });\n    window.addEventListener('resize', function () { TT.laySig = ''; ttSafe = null; ttQueueLayout(); if (TT.panel && !TT.panel.hidden) ttPanelPlace(); });\n    setInterval(function () { if (TT.root && TT.root.classList.contains('bf26-on') && Date.now() - ttLastLay > 500) ttLayout(); }, 700);\n    // The header settles late (logo, fonts, nav row): place the totem again when it changes size or the page finishes loading.\n    window.addEventListener('load', function () { TT.laySig = ''; ttQueueLayout(); });\n    if (window.ResizeObserver) {\n      var watchHeader = function () {\n        var hg = doc.querySelector('.header-group') || doc.querySelector('header');\n        if (hg) new window.ResizeObserver(function () { if (TT.root && TT.root.classList.contains('bf26-on')) ttQueueLayout(); }).observe(hg);\n      };\n      if (doc.readyState === 'loading') doc.addEventListener('DOMContentLoaded', watchHeader); else watchHeader();\n    }\n    // Popups open and close by a class on <html>/<body> (Winky popup, menus, drawers): step aside right away.\n    if (window.MutationObserver) {\n      var clsMo = new MutationObserver(function () { if (TT.root && TT.root.classList.contains('bf26-on')) ttQueueLayout(); });\n      clsMo.observe(doc.documentElement, { attributes: true, attributeFilter: ['class'] });\n      var watchBody = function () { if (doc.body) clsMo.observe(doc.body, { attributes: true, attributeFilter: ['class'] }); };\n      if (doc.body) watchBody(); else doc.addEventListener('DOMContentLoaded', watchBody);\n    }\n    // Carts changed by code this file can't see (a script that kept its own copy of fetch, an\n    // app's own refresh): the header cart count changes, so look at the cart again.\n    watchCartCount();\n    ['cart:updated', 'cart:refresh', 'cart:change', 'cart:changed', 'cart:added', 'theme:cart:change', 'ajaxProduct:added', 'product:added'].forEach(function (n) {\n      doc.addEventListener(n, function () { schedule('event:' + n); });\n    });\n  }\n\n  var countSeen = null, countMo = null;\n  function watchCartCount() {\n    if (!window.MutationObserver) return;\n    var read = function () {\n      var n = doc.querySelector('.header-cart__count');\n      return n ? String(n.textContent || '').trim() : null;\n    };\n    var check = function () {\n      var c = read();\n      if (c === null) return;\n      if (countSeen !== null && c !== countSeen && !busy && c !== String((lastCart && lastCart.item_count) || 0)) schedule('count');\n      countSeen = c;\n    };\n    var t = 0;\n    var start = function () {\n      if (countMo || !doc.body) return;\n      var boxes = doc.querySelectorAll('.header-cart');\n      if (!boxes.length) return;\n      countMo = new MutationObserver(function () { clearTimeout(t); t = setTimeout(check, 150); });\n      [].forEach.call(boxes, function (b) { countMo.observe(b, { childList: true, subtree: true, characterData: true }); });\n      check();\n    };\n    if (doc.body) start(); else doc.addEventListener('DOMContentLoaded', start);\n  }\n\n  function bindJQ() {\n    [window.theme && window.theme.jQuery, window.jQuery].forEach(function (jq) {\n      if (!jq || typeof jq !== 'function' || jq.__bf26) return;\n      try {\n        jq(doc).on('ajaxComplete', function (e, xhr, o) {\n          if (o && MUT_RE.test(String(o.url || ''))) schedule('jquery');\n        });\n        if (typeof jq.ajaxPrefilter === 'function') jq.ajaxPrefilter(cartChangeByKey);\n        jq.__bf26 = true;\n      } catch (err) { /* not a jQuery */ }\n    });\n  }\n\n  // theme.js reads data-line at tap time and posts /cart/change.js {line: N} 500 ms later\n  // (L6782-6796, L6925). If our gift lines moved the list in between, N is another item.\n  // snapLine remembers the row's line KEY at tap time; the prefilter swaps line=N for\n  // id=<key>, which Shopify resolves to that exact line. Used once, then forgotten.\n  var lineKeys = {};\n  function snapLine(e) {\n    var t = e.target && e.target.closest ? e.target : null;\n    var box = t && t.closest('ul.cart-items .quantity__change');\n    if (!box) return;\n    var li = box.closest('li[data-key]');\n    var inp = box.querySelector('input[data-line]');\n    if (!li || !inp) return;\n    lineKeys[inp.getAttribute('data-line')] = { key: li.getAttribute('data-key'), t: Date.now() };\n  }\n  function cartChangeByKey(o) {\n    try {\n      if (!o || typeof o.data !== 'string' || !/\\/cart\\/change/.test(String(o.url || ''))) return;\n      var m = /(?:^|&)line=(\\d+)/.exec(o.data);\n      var s = m && lineKeys[m[1]];\n      if (!s) return;\n      delete lineKeys[m[1]];\n      if (Date.now() - s.t > 15000 || !s.key) return;\n      o.data = o.data.replace(/(^|&)line=\\d+/, '$1id=' + encodeURIComponent(s.key));\n      log('cart change by key', m[1], s.key);\n    } catch (e) { /* leave the theme's request alone */ }\n  }\n\n  // Nov 5 final (Mirela: \"I am unable to clear my cart\"; Haden: \"once I removed everything there were\n  // still some free gifts left\"). Cart page Remove:\n  //   - on a free gift: the shopper said no to it. It stays out until the cart grows past this total\n  //     (noteDeclined), so it does not just come back. The link itself works as usual.\n  //   - on the LAST line that counts: that line and EVERY Black Friday line go in ONE /cart/update.js\n  //     request, then the page shows the empty cart. If that request fails, the normal link runs\n  //     (and the next page load sweeps the Black Friday lines).\n  // custom.js owns removing a 64+ bundle that has top-up lines (it reloads /cart, which sweeps).\n  function onCartRemove(e) {\n    var a = e.target && e.target.closest ? e.target.closest('ul.cart-items a.quantity__remove') : null;\n    if (!a || e.defaultPrevented || !isActive()) return;\n    var st = state;\n    if (!st.ready || !st.active) return;\n    var li = a.closest('li[data-key]');\n    if (!li) return;\n    var key = li.getAttribute('data-key');\n    var line = null;\n    (st.lines || []).forEach(function (l) { if (l.key === key) line = l; });\n    if (!line) return;\n    if (line.bf) {\n      if (line.bf === 'gift' && line.tier) noteDeclined(line.tier, st.qualifyingCents);\n      return;\n    }\n    var bfKeys = st.lines.filter(function (l) { return l.bf; }).map(function (l) { return l.key; });\n    if (!bfKeys.length) return;\n    if (st.lines.some(function (l) { return l.key !== key && l.qualifies; })) return;   // something still counts\n    if (li.classList.contains('bb-bundle-line') && doc.querySelector('ul.cart-items .bb-extras-line')) return;\n    e.preventDefault();\n    var href = a.href;\n    var up = {};\n    up[key] = 0;\n    bfKeys.forEach(function (k) { up[k] = 0; });\n    log('last paid line out: every Black Friday line goes with it', up);\n    exclusive(async function () {\n      setBusy(true);\n      var r = await post('cart/update.js', { updates: up });\n      setBusy(false);\n      return r;\n    }).then(function (r) {\n      if (!r || !r.ok) { window.location.href = href; return null; }\n      return enqueue('remove-last', { uiRefresh: true });\n    }, function () { window.location.href = href; });\n  }\n\n  // Direct-to-checkout links (GIANTZ, Volcano) and the cart button wait for a sync in flight.\n  var releasing = false;\n  function guardCheckout(e) {\n    if (releasing || !isActive()) return;\n    if (!(busy || queued || timer || pending)) return;\n    var t = e.target && e.target.closest ? e.target : null;\n    if (!t) return;\n    var a = t.closest('a[href*=\"/checkout\"]');\n    var b = t.closest('button[name=\"checkout\"], .cart-submit');\n    if (!a && !b) return;\n    e.preventDefault();\n    e.stopPropagation();\n    var go = function () {\n      releasing = true;\n      if (a) window.location.href = a.href;\n      else if (b && !b.disabled) b.click();          // still disabled = someone else's guard (gift-only cart)\n      setTimeout(function () { releasing = false; }, 400);\n    };\n    var done = false;\n    var once = function () { if (!done) { done = true; go(); } };\n    if (timer || pending) {\n      if (timer) { clearTimeout(timer); timer = null; }\n      enqueue('checkout', { force: pending });       // past the budget: one last sync anyway\n    }\n    chain.then(once, once);\n    setTimeout(once, 3000);\n  }\n\n  /* --------------------------------------------------------------- boot */\n\n  function boot() {\n    readUrlFlags();\n    installWatchers();\n    if (isActive() || isEnded()) {\n      enqueue('init');\n    } else if (START > now() && START - now() < 24 * 3600 * 1000) {\n      // Page left open across the launch: switch on at the start time with no reload.\n      setTimeout(function () { enqueue('start'); }, START - now() + 500);\n    }\n  }\n\n  boot();\n})(typeof window !== 'undefined' ? window : this);\n"],
  "mappings": "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",
  "names": ["window", "now", "soldOut", "t", "style", "i"]
}
