{
  "version": 3,
  "sources": ["/cdn/shop/t/104/assets/humbler-offers.js?cb=20444"],
  "sourcesContent": ["/*\n * Humbler offer engine: pure cart pricing in integer cents.\n * Offers, priced to the cent as the store's SupaEasy discount functions price them (scripts/supaeasy/two-for-99.js,\n * three-chains-99.js, free-gift-115.js, pendant-stack-95.js; see solve()): \"Pendant stack $95\" (a set the stack\n * builder made, its _bundle_id \"stack-\u2026\", of one stack pendant and two chains; its lines leave the other offers), \"Buy any 2 for $99\" with one $29 3rd\n * per set (every set the shopper built, a line's `bundle` = its _bundle_id, is a $99 set; the saving split set by set),\n * \"3 chains for $99\" ($33 a chain from 3, when that is the cheaper way), the free gift at $115 of spend after all three, the $18 Mystery add-on\n * (outside the deal) and free-shipping progress (docs/REBUILD-PLAN.md \u00A74, \u00A76). Which pieces the bag suggests as the 3rd:\n * the listed variants, or any 2-for-$99 piece when third.any is on. A Checkout+ protection line (cfg.protection) is\n * priced as it is and kept out of every offer, the gift spend and the free-shipping basis.\n * No DOM, network or storage access. Browser global `HumblerOffers`; CommonJS `module.exports`.\n * Shared by the preview cart adapter, builder quotes and tests/offers.test.mjs.\n */\n(function (root, factory) {\n  const api = factory();\n  if (typeof module === 'object' && module && module.exports) module.exports = api;\n  else if (root) root.HumblerOffers = api;\n})(typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : this, function () {\n  'use strict';\n\n  const EXCLUDED = /navidium|shipping protection|package protection|order protection|\\broute\\b/i;\n  const LABEL_ORDER = ['stack', 'chains', 'pair', 'third', 'gift'];\n\n  // Live humbler.com values (scripts/data/live-offers.json, captured 2026-10-15). The 2-for-$99 pieces are the live\n  // builder's 64 handles plus the 16 pendants live listed only in its product-page picker (pdp_modal_extra_handles):\n  // the store's discount counts the whole Pendants collection (read in Shopify admin on 2026-10-18).\n  const DEFAULTS = {\n    pair: {\n      price: 9900,\n      label: 'Buy any 2 for $99',\n      handles: `death-smile-memento-mori-coin-pendant, death-smile-memento-mori-coin-pendant-black,\n        paradise-flip-gold, hard-work-gods-work-double-sided-pendant-gold, hell-flip-silver,\n        hard-work-gods-work-double-sided-pendant-silver, memento-mori-double-sided-pendant-gold,\n        warrior-veni-vidi-vici-double-sided-pendant-gold, memento-mori-double-sided-pendant-silver,\n        st-michael-double-sided-pendant, warrior-veni-vidi-vici-double-sided-pendant-silver,\n        st-michael-double-sided-pendant-copy, veni-vidi-vici-coin-pendant-gold,\n        spartan-skull-veni-vidi-vici-coin-pendant-black-silver, essential-cross-pendant-copy,\n        essential-cross-gold-pendant, trident-conquer-from-within-double-sided-pendant-gold,\n        lions-prayer-double-sided-pendant-gold, trident-conquer-from-within-double-sided-pendant-silver,\n        memento-mori-dagger-coin-silver, lions-prayer-double-sided-pendant-silver, memento-mori-dagger-coin,\n        hard-work-gods-work-coin-pendant, wings-of-victory-gold, cuban-link-chain-gold-3mm,\n        cuban-link-chain-silver-3mm, figaro-chain-gold-3mm, figaro-chain-silver-3mm, 3mm-cuban-link-chain-copy,\n        3mm-cuban-link-chain-copy-1, wheat-chain-gold-3mm, wheat-chain-silver-3mm, cuban-link-chain-gold-8mm,\n        cuban-link-chain-silver-8mm, cuban-8mm-set-gold, cuban-8mm-set-silver, cuban-stack-set-silver,\n        cuban-stack-set-gold, wreath-of-faith-ring, eyes-of-david-ring-gold-1, eyes-of-david-ring-gold,\n        memento-mori-ring-gold, memento-mori-ring-silver, mystery-pendant-or-chain, veni-vidi-vici-link-bracelet,\n        veni-vidi-vici-bracelet-silver, the-path-to-paradise-bracelet-gold, the-path-to-paradise-bracelet-silver,\n        memento-mori-bracelet-gold, memento-mori-bracelet-silver, spartan-greek-style-chain-link-bracelet,\n        cuban-bracelet-gold-8mm, cuban-bracelet-silver-8mm, rope-bracelet-gold-5mm, rope-bracelet-silver-5mm,\n        wheat-bracelet-gold-5mm, wheat-bracelet-silver-5mm, figaro-bracelet-gold-5mm, figaro-bracelet-silver-5mm,\n        cuban-bracelet-gold-4mm, cuban-bracelet-gold-2mm, cuban-bracelet-silver-2mm,\n        hard-work-gods-work-coin-pendant-copy, hard-work-gods-work-bracelet-copy-1,\n        daggered-rose-gendant-gold, david-vs-goliath-double-sided-pendant, icarus-double-sided-pendant-gold,\n        icarus-double-sided-pendant-silver, jesus-piece, jesus-piece-gold-pendant-copy,\n        marcus-aurelius-memento-mori-coin-pendant, memento-mori-coin-gold, memento-mori-coin-gold-copy,\n        perseus-vs-medusa-coin-pendant, rose-dagger-gold-copy, spartans-dagger-pendant-gold, spartans-dagger-pendant-silver,\n        spartans-shield-pendant-gold, spartans-shield-pendant-silver, wings-of-victory-silver`\n    },\n    // 3 chains for $99: from `count` chains, every chain at price / count ($33, unitPrice).\n    chains: {\n      price: 9900,\n      count: 3,\n      label: '3 Chains for $99',\n      handles: `cuban-link-chain-gold-3mm, cuban-link-chain-silver-3mm, figaro-chain-gold-3mm,\n        figaro-chain-silver-3mm, 3mm-cuban-link-chain-copy, 3mm-cuban-link-chain-copy-1, wheat-chain-gold-3mm,\n        wheat-chain-silver-3mm, cuban-link-chain-gold-8mm, cuban-link-chain-silver-8mm`\n    },\n    third: {\n      price: 2900,\n      variants: `death-smile-memento-mori-coin-pendant:44486675071130, paradise-flip-gold:41691403813018,\n        hard-work-gods-work-double-sided-pendant-gold:44022423650458,\n        memento-mori-double-sided-pendant-gold:43439936635034,\n        warrior-veni-vidi-vici-double-sided-pendant-gold:43339221172378,\n        st-michael-double-sided-pendant:45520051339418, veni-vidi-vici-coin-pendant-gold:45206879338650,\n        essential-cross-pendant-copy:45520389767322,\n        trident-conquer-from-within-double-sided-pendant-gold:44120026939546,\n        lions-prayer-double-sided-pendant-gold:44120010391706, memento-mori-dagger-coin-silver:45327016919194,\n        hard-work-gods-work-coin-pendant:45520056844442`,\n      // Any 2-for-$99 piece can be the third (theme setting humbler_third_piece_any); the list above stays the bag's picks.\n      any: false\n    },\n    // Pendant stack $95 (scripts/supaeasy/pendant-stack-95.js): a set the shopper built of one of these pendants and two\n    // chains (k pendants with 2k chains, nothing else) costs k \u00D7 price; the label is the store discount's title. The\n    // page config turns it off (no handles) until the store's function is live (theme setting humbler_stack_enabled).\n    stack: {\n      price: 9500,\n      label: 'Pendant stack $95',\n      handles: `crusades-coin-gold, crusades-coin-silver, deus-vult-double-sided-pendant-copy,\n        hard-work-gods-work-double-sided-pendant-gold, hard-work-gods-work-double-sided-pendant-silver,\n        warrior-veni-vidi-vici-double-sided-pendant-gold, warrior-veni-vidi-vici-double-sided-pendant-silver,\n        memento-mori-double-sided-pendant-gold, memento-mori-double-sided-pendant-silver,\n        deus-vult-gold-double-sided-pendant, deus-vult-silver-double-sided-pendant, deus-vult-micro-pendant-gold,\n        deus-vult-micro-tag-silver, death-smile-memento-mori-coin-pendant, death-smile-memento-mori-coin-pendant-black,\n        veni-vidi-vici-coin-pendant-gold, spartan-skull-veni-vidi-vici-coin-pendant-black-silver,\n        templar-skull-pendant-gold, templar-skull-pendant, christus-gold-double-sided-pendant,\n        ave-christus-rex-silver-double-sided-pendant, essential-cross-gold-pendant, essential-cross-pendant-copy`\n    },\n    gift: { handle: 'rose-cross-pendant-gold', variantId: '45385371811994', threshold: 11500 },\n    mystery: { handle: 'mystery-pendant-or-chain', variantId: '44853400567962', price: 1800 },\n    shipping: { threshold: 10000 },\n    // Checkout+ (Humbler's own hidden product): off until the theme settings name one; live has none.\n    protection: { handle: '', variantId: '', price: 0 }\n  };\n\n  // ---------- small helpers ----------\n  const isObj = value => value !== null && typeof value === 'object' && !Array.isArray(value);\n  const given = (...values) => values.find(value => value !== undefined && value !== null);\n  const sum = values => values.reduce((total, value) => total + value, 0);\n  const sumPrices = units => units.reduce((total, unit) => total + unit.price, 0);\n  const cents = (value, fallback) => {\n    if (value === undefined || value === null || value === '') return fallback;\n    const number = Number(value);\n    return Number.isFinite(number) && number >= 0 ? Math.round(number) : fallback;\n  };\n  const text = (value, fallback) => (typeof value === 'string' && value.trim() ? value.trim() : fallback);\n  const variantKey = value => String(value === undefined || value === null ? '' : value).trim().replace(/^gid:\\/\\/shopify\\/ProductVariant\\//i, '');\n  const listItems = value => (Array.isArray(value) ? value : String(value).split(/[\\n\\r,]+/));\n\n  // Comma/newline string or array -> unique parsed items. Missing (null/undefined) -> fallback.\n  function parseList(value, fallback, read) {\n    const out = new Map();\n    for (const item of listItems(value === undefined || value === null ? fallback : value)) {\n      const parsed = read(item);\n      if (parsed) out.set(typeof parsed === 'string' ? parsed : `${parsed.handle}:${parsed.variantId}`, parsed);\n    }\n    return [...out.values()];\n  }\n  const readHandle = item => String(item === undefined || item === null ? '' : item).trim();\n  // \"handle:variantId\" string or { handle, variantId } object -> { handle, variantId } (gid prefix stripped).\n  function readVariant(item) {\n    let handle = '';\n    let id = '';\n    if (isObj(item)) {\n      handle = String(item.handle || '');\n      id = given(item.variantId, item.variant_id, item.id);\n    } else {\n      const raw = readHandle(item);\n      const colon = raw.indexOf(':');\n      if (colon > 0) { handle = raw.slice(0, colon); id = raw.slice(colon + 1); }\n    }\n    handle = handle.trim();\n    id = variantKey(id);\n    return handle && id ? { handle, variantId: id } : null;\n  }\n\n  // ---------- config ----------\n  // Accepts theme settings (humbler_* keys), an already-normalized config (idempotent) or nothing.\n  function normalizeConfig(input) {\n    const source = isObj(input) ? input : {};\n    const part = name => (isObj(source[name]) ? source[name] : {});\n    const [pair, chains, third, gift, mystery, shipping, protection, stack] = ['pair', 'chains', 'third', 'gift', 'mystery', 'shipping', 'protection', 'stack'].map(part);\n    const D = DEFAULTS;\n    const count = Number(given(chains.count, source.humbler_chain_count));\n    const chainCount = Number.isInteger(count) && count >= 2 ? count : D.chains.count;\n    const chainPrice = cents(given(chains.price, source.humbler_chain_price), D.chains.price);\n    return {\n      pair: {\n        price: cents(given(pair.price, source.humbler_pair_price), D.pair.price),\n        label: text(given(pair.label, source.humbler_pair_label), D.pair.label),\n        handles: parseList(given(pair.handles, source.humbler_pair_handles), D.pair.handles, readHandle)\n      },\n      chains: {\n        price: chainPrice,\n        count: chainCount,\n        // A chain's price in the deal: given (an amount converted on its own, as the store converts $33), else the set\n        // price over the count.\n        unitPrice: cents(chains.unitPrice, Math.round(chainPrice / chainCount)),\n        label: text(given(chains.label, source.humbler_chain_label), D.chains.label),\n        handles: parseList(given(chains.handles, source.humbler_chain_handles), D.chains.handles, readHandle)\n      },\n      stack: {\n        price: cents(given(stack.price, source.humbler_stack_price), D.stack.price),\n        label: text(given(stack.label, source.humbler_stack_label), D.stack.label),\n        handles: parseList(given(stack.handles, source.humbler_stack_handles), D.stack.handles, readHandle)\n      },\n      third: {\n        price: cents(given(third.price, source.humbler_third_piece_price), D.third.price),\n        variants: parseList(given(third.variants, source.humbler_third_piece_variants), D.third.variants, readVariant),\n        any: [true, 'true'].includes(given(third.any, source.humbler_third_piece_any, D.third.any))\n      },\n      gift: {\n        handle: text(given(gift.handle, source.humbler_gift_handle), D.gift.handle),\n        variantId: variantKey(given(gift.variantId, source.humbler_gift_variant_id)) || D.gift.variantId,\n        threshold: cents(given(gift.threshold, source.humbler_gift_threshold), D.gift.threshold)\n      },\n      mystery: {\n        handle: text(given(mystery.handle, source.humbler_mystery_handle), D.mystery.handle),\n        variantId: variantKey(given(mystery.variantId, source.humbler_mystery_variant_id)) || D.mystery.variantId,\n        price: cents(given(mystery.price, source.humbler_mystery_price), D.mystery.price)\n      },\n      shipping: {\n        threshold: cents(given(shipping.threshold, source.humbler_free_shipping_threshold), D.shipping.threshold)\n      },\n      protection: {\n        handle: text(given(protection.handle, source.humbler_protection_handle), D.protection.handle),\n        variantId: variantKey(given(protection.variantId, source.humbler_protection_variant_id)),\n        price: cents(given(protection.price, source.humbler_protection_price), D.protection.price)\n      }\n    };\n  }\n\n  // ---------- lines and units ----------\n  // bundle: the set the shopper built the line in (its _bundle_id), product: its product id. Both only decide how the\n  // 2-for-$99 saving is split between lines (as the store's function splits it), never a total.\n  function readLine(raw, index) {\n    const line = isObj(raw) ? raw : {};\n    const quantity = Math.floor(Number(given(line.quantity, 1)));\n    const label = [line.title, line.productType, line.vendor].filter(Boolean).join(' ');\n    return {\n      index,\n      key: line.key === undefined || line.key === null ? `line-${index + 1}` : String(line.key),\n      handle: String(line.handle || '').trim(),\n      variantId: variantKey(given(line.variantId, line.variant_id)),\n      kind: line.kind === 'third' || line.kind === 'gift' ? line.kind : 'product',\n      price: Math.max(0, Math.round(Number(line.price) || 0)),\n      quantity: Number.isFinite(quantity) && quantity > 0 ? quantity : 0,\n      bundle: line.bundle === undefined || line.bundle === null ? '' : String(line.bundle),\n      number: Number(String(given(line.productId, line.product_id, '')).replace(/\\D/g, '')) || 0,\n      excluded: line.giftCard === true || EXCLUDED.test(label) // never counts toward gift spend\n    };\n  }\n\n  function unitsOf(line, ctx) {\n    const units = [];\n    for (let unit = 0; unit < line.quantity; unit += 1) {\n      units.push({\n        id: `${line.index}:${unit}`, line: line.index, key: line.key, unit, price: line.price, bundle: line.bundle, number: line.number,\n        pair: ctx.pairs.has(line.handle), chain: ctx.chains.has(line.handle), stackPendant: ctx.stacks.has(line.handle), mystery: line.handle === ctx.cfg.mystery.handle\n      });\n    }\n    return units;\n  }\n\n  // ---------- the store's discounts ----------\n  // The SupaEasy functions, step for step (scripts/supaeasy/two-for-99.js plan(), three-chains-99.js; owner, 2026-10-18).\n  // \"Buy any 2 for $99\": any two eligible pieces (the 2-for-$99 handles but the Mystery piece) can be a $99 set, and each\n  // set takes ONE 3rd at min(price, $29); a second set takes its own 3rd; every other piece keeps its own price. The cart\n  // gets the cheapest arrangement: s sets from the priciest 2s pieces, the next s pieces as their 3rds, every s tried\n  // (equal costs: fewer sets). All $65 pieces: 2 \u2192 $99, 3 \u2192 $128, 4 \u2192 $193, 5 \u2192 $227, 6 \u2192 $256.\n  // \"3 chains for $99\": with `count` or more chains, every chain costs min(price, $33), used only when the chains at $33 +\n  // the other pieces by the 2-for-$99 rule cost no more than every piece by that rule; then the chains leave that pool\n  // (3 chains \u2192 $99, 4 \u2192 $132; 3 chains + a $94 set: $183 by the 2-for-$99 rule, so no chain deal).\n  // Units: { price, order, bundle, number, pair, chain, mystery }; a unit at no price takes part in nothing, as in the\n  // functions. Order: priciest first; equal prices by product, then cart order (two-for-99.js byPrice).\n  const byPrice = (x, y) => y.price - x.price || x.number - y.number || x.order - y.order;\n  // Every set the shopper built (the pieces of one _bundle_id, 2 or 3 of them, the two priciest $99 or more together)\n  // is a $99 set, its own 3rd min(price, $29) (owner, 2026-10-19: each built set is $99 and its 3rd exactly +$29). The\n  // other pieces (`a`, priciest first) take the cheapest way: `sets` extra sets from the top, the next ones the 3rds\n  // (of the extra sets and of the built sets with no 3rd), `end` of them in the deal (two-for-99.js plan()).\n  // sizes: how many eligible pieces each _bundle_id has in the cart; a set is a built set only while all of them are in\n  // the pool (the chain deal can take a built set's chain; then its other pieces are loose).\n  function plan(pool, cfg, sizes) {\n    const built = new Map();\n    for (const unit of pool) if (unit.bundle) built.set(unit.bundle, [...(built.get(unit.bundle) || []), unit]);\n    const fixed = [];\n    const inSet = new Set();\n    let fixedTotal = 0;\n    let open = 0;\n    for (const list of built.values()) {\n      if (list.length < 2 || list.length > 3 || list.length !== sizes.get(list[0].bundle)) continue;\n      const set = list.slice().sort(byPrice);\n      if (set[0].price + set[1].price < cfg.pair.price) continue;\n      fixed.push(set);\n      set.forEach(unit => inSet.add(unit));\n      fixedTotal += cfg.pair.price + (set[2] ? Math.min(set[2].price, cfg.third.price) : 0);\n      if (!set[2]) open += 1;\n    }\n    const a = pool.filter(unit => !inSet.has(unit)).sort(byPrice);\n    const n = a.length;\n    const full = [0];\n    const capped = [0];\n    for (let i = 0; i < n; i += 1) {\n      full.push(full[i] + a[i].price);\n      capped.push(capped[i] + Math.min(a[i].price, cfg.third.price));\n    }\n    let best = null;\n    for (let sets = 0; 2 * sets <= n; sets += 1) {\n      const end = Math.min(n, 3 * sets + open);\n      const total = fixedTotal + sets * cfg.pair.price + (capped[end] - capped[2 * sets]) + (full[n] - full[end]);\n      if (!best || total < best.total) best = { a, full, fixed, total, sets, end };\n    }\n    best.regular = sum(fixed.map(sumPrices)) + full[n];\n    return best;\n  }\n\n  // `amount` shared over `units` in proportion to price (floor), the odd cents to the priciest first (two-for-99.js share).\n  function share(units, amount) {\n    const total = sumPrices(units);\n    const cuts = units.map(unit => Math.floor((amount * unit.price) / total));\n    let left = amount - sum(cuts);\n    for (let i = 0; left > 0 && i < units.length; i += 1) {\n      if (cuts[i] < units[i].price) { cuts[i] += 1; left -= 1; }\n    }\n    return cuts;\n  }\n\n  // Pendant stacks (pendant-stack-95.js): every set the stack builder made (a _bundle_id that starts with \"stack-\"; a set\n  // from the 2-for-$99 builder or the bag has a plain id) of k stack pendants and 2k chains, nothing else, costs k \u00D7 the\n  // stack price; the saving is shared over its lines by their totals (floor, the odd cents\n  // to the priciest line first, equal totals in cart order), a line's share over its units (the odd cent to the first).\n  // Returns the stack groups and the units in them (those join no other offer, as in the other three functions).\n  function stacks(units, cfg) {\n    const byBundle = new Map();\n    for (const unit of units) if (unit.bundle.indexOf('stack-') === 0) byBundle.set(unit.bundle, [...(byBundle.get(unit.bundle) || []), unit]);\n    const groups = [];\n    const inStack = new Set();\n    for (const list of byBundle.values()) {\n      const pendants = list.filter(unit => unit.stackPendant).length;\n      const chains = list.filter(unit => !unit.stackPendant && unit.chain).length;\n      if (!(pendants > 0) || chains !== 2 * pendants || pendants + chains !== list.length) continue;\n      list.forEach(unit => inStack.add(unit));\n      const regular = sumPrices(list);\n      const saving = regular - pendants * cfg.stack.price;\n      if (saving <= 0) continue;\n      const lines = [];\n      for (const unit of list) {\n        const line = lines.find(entry => entry.index === unit.line) || lines[lines.push({ index: unit.line, units: [], total: 0 }) - 1];\n        line.units.push(unit);\n        line.total += unit.price;\n      }\n      lines.sort((x, y) => y.total - x.total || x.index - y.index);\n      const cuts = lines.map(line => Math.floor((saving * line.total) / regular));\n      let left = saving - sum(cuts);\n      for (let i = 0; left > 0 && i < lines.length; i += 1) if (cuts[i] < lines[i].total) { cuts[i] += 1; left -= 1; }\n      const groupUnits = [];\n      const unitCuts = [];\n      lines.forEach((line, i) => {\n        const each = Math.floor(cuts[i] / line.units.length);\n        let odd = cuts[i] - each * line.units.length;\n        for (const unit of line.units) { groupUnits.push(unit); unitCuts.push(each + (odd > 0 ? 1 : 0)); odd -= 1; }\n      });\n      groups.push({ id: `stack-${groups.length + 1}`, offer: 'stack', units: groupUnits, cuts: unitCuts, sets: pendants, bundle: list[0].bundle });\n    }\n    return { groups, inStack };\n  }\n\n  // The offers on a cart's units: { groups: [{ id, offer, units, cuts, roles?, sets? }], total } (total: every unit's\n  // final price). The 2-for-$99 deal is one group per set (its two pieces and the 3rd shown with it), or one pooled group.\n  function solve(all, cfg) {\n    const stacked = stacks(all, cfg);\n    const units = all.filter(unit => !stacked.inStack.has(unit));\n    const pool = units.filter(unit => unit.pair && !unit.mystery && unit.price > 0);\n    const chainUnits = units.filter(unit => unit.chain && unit.price > 0);\n    const sizes = new Map();\n    for (const unit of pool) if (unit.bundle) sizes.set(unit.bundle, (sizes.get(unit.bundle) || 0) + 1);\n    let chosen = plan(pool, cfg, sizes);\n    // The chain deal on every chain when that costs no more than every piece by the 2-for-$99 rule, or on the chains\n    // outside the sets the shopper built (3 or more) when that is cheaper still: those sets keep their chains\n    // (two-for-99.js, three-chains-99.js).\n    let dealChains = null;\n    const atDeal = list => sum(list.map(unit => Math.min(unit.price, cfg.chains.unitPrice)));\n    const outside = list => sumPrices(list.filter(unit => !pool.includes(unit)));\n    if (chainUnits.length >= cfg.chains.count) {\n      // Every piece by the 2-for-$99 rule (a chain outside its list at its own price).\n      let best = chosen.total + outside(chainUnits);\n      const rest = plan(pool.filter(unit => !unit.chain), cfg, sizes);\n      if (atDeal(chainUnits) + rest.total <= best) { chosen = rest; dealChains = chainUnits; best = atDeal(chainUnits) + rest.total; }\n      const loose = chainUnits.filter(unit => !unit.bundle);\n      if (loose.length >= cfg.chains.count && loose.length < chainUnits.length) {\n        const kept = plan(pool.filter(unit => !unit.chain || unit.bundle), cfg, sizes);\n        const total = atDeal(loose) + kept.total + outside(chainUnits.filter(unit => unit.bundle));\n        if (total < best) { chosen = kept; dealChains = loose; }\n      }\n    }\n    const chainDeal = !!dealChains;\n    const groups = stacked.groups.slice();\n    if (chainDeal) {\n      const cuts = dealChains.map(unit => Math.max(0, unit.price - cfg.chains.unitPrice));\n      if (sum(cuts) > 0) groups.push({ id: 'chains-1', offer: 'chains', units: dealChains, cuts });\n    }\n    // The saving split set by set, as the store's function splits it (what Shopify shows on each line): a set's two\n    // pieces together cost $99 (a built set's own two; the extra sets pair the priciest other piece with the cheapest),\n    // each 3rd min(price, $29). One group per set (a built set even at exactly $99: it has a 3rd slot); a built set's\n    // own 3rd is shown with it, the other 3rds with the built sets that have none first, then with the extra sets in\n    // order. Only when an extra pair would cost less than $99 together is the extra sets' saving spread over their\n    // pieces and the other 3rds in proportion to price (one pooled group; the built sets then show no other 3rd).\n    const P = cfg.pair.price;\n    if (chosen.fixed.length || chosen.regular > chosen.total) {\n      const { a, full, sets: extra, end } = chosen;\n      const thirdCut = unit => unit.price - Math.min(unit.price, cfg.third.price);\n      const thirds = a.slice(2 * extra, end);\n      const loosePairs = Array.from({ length: extra }, (_, i) => [a[i], a[2 * extra - 1 - i]]);\n      const even = loosePairs.every(pair => pair[0].price + pair[1].price >= P);\n      const setGroup = (set, bundle) => {\n        const cuts = share(set.slice(0, 2), set[0].price + set[1].price - P);\n        return { offer: 'pair', units: set.slice(0, 2), cuts, roles: ['pair', 'pair'], sets: 1, setSavings: sum(cuts), thirdSavings: 0, pooled: false, bundle };\n      };\n      const addThird = (group, unit) => {\n        group.units.push(unit);\n        group.cuts.push(thirdCut(unit));\n        group.roles.push('third');\n        group.thirdSavings += thirdCut(unit);\n      };\n      const builtGroups = chosen.fixed.map(set => {\n        const group = setGroup(set, set[0].bundle);\n        if (set[2]) addThird(group, set[2]);\n        return group;\n      });\n      const extraGroups = [];\n      if (even) {\n        extraGroups.push(...loosePairs.map(pair => setGroup(pair, '')));\n        const rest = thirds.slice();\n        for (const group of [...builtGroups, ...extraGroups]) if (group.units.length === 2 && rest.length) addThird(group, rest.shift());\n      } else {\n        const deal = a.slice(0, end);\n        const setSavings = full[2 * extra] - extra * P;\n        const saving = full[end] - extra * P - sum(thirds.map(unit => Math.min(unit.price, cfg.third.price)));\n        extraGroups.push({ offer: 'pair', units: deal, cuts: share(deal, saving), roles: deal.map((_, i) => (i < 2 * extra ? 'pair' : 'third')), sets: extra, setSavings, thirdSavings: saving - setSavings, pooled: true, bundle: '' });\n      }\n      [...builtGroups, ...extraGroups].forEach((group, index) => groups.push({ id: `pair-${index + 1}`, ...group }));\n    }\n    const total = sumPrices(all) - sum(groups.flatMap(group => group.cuts));\n    return { groups, total, pool: chainDeal ? pool.filter(unit => !dealChains.includes(unit)) : pool, chainUnits, chainDeal };\n  }\n\n  // Per-unit final prices and offer tags for every line, from the groups' cuts.\n  function settle(lines, groups) {\n    const finals = lines.map(line => new Array(line.quantity).fill(line.price));\n    const tags = lines.map(() => []);\n    for (const group of groups) {\n      group.units.forEach((unit, i) => {\n        finals[unit.line][unit.unit] -= group.cuts[i];\n        tags[unit.line].push({ offer: group.offer, groupId: group.id, amount: group.cuts[i], role: group.roles ? group.roles[i] : 'piece' });\n      });\n    }\n    return { finals, tags };\n  }\n\n  // A Checkout+ protection line: the configured variant (or handle). Never merchandise: no offer, spend or shipping basis.\n  const isProtection = (line, cfg) => !!((cfg.protection.variantId && line.variantId === cfg.protection.variantId) || (cfg.protection.handle && line.handle === cfg.protection.handle));\n  // Rule 6: gift spend = final price of paid merchandise (no gift lines, gift cards or protection).\n  const countsForGift = (line, cfg) => line.kind !== 'gift' && line.handle !== cfg.gift.handle && !line.excluded && !isProtection(line, cfg) && line.quantity > 0;\n  const spendOf = (lines, finals, cfg) => sum(lines.filter(line => countsForGift(line, cfg)).map(line => sum(finals[line.index])));\n\n  // ---------- pricing ----------\n  function run(lines, cfg, options, probeMystery) {\n    const ctx = { cfg, pairs: new Set(cfg.pair.handles), chains: new Set(cfg.chains.handles), stacks: new Set(cfg.stack.handles) };\n    const threshold = cfg.gift.threshold;\n    const thirdPrice = cfg.third.price;\n    // Merchandise only: the gift is priced below, a Checkout+ line keeps its own price and joins no offer.\n    const paidLines = lines.filter(line => line.kind !== 'gift' && !isProtection(line, cfg));\n    const units = paidLines.flatMap(line => unitsOf(line, ctx)).map((unit, order) => ({ ...unit, order }));\n    const final = solve(units, cfg);\n    const { finals, tags } = settle(lines, final.groups);\n    // The 2-for-$99 deal: one group per set, or one pooled group (solve()).\n    const dealGroups = final.groups.filter(group => group.offer === 'pair');\n    const deal = dealGroups.length ? dealGroups : null;\n    const dealUnits = sum(dealGroups.map(group => group.units.length));\n    const dealSets = sum(dealGroups.map(group => group.sets));\n    // The \"Add a 3rd for $29\" offer is a set's open 3rd slot (fewer 3rds than sets): each set can take its own. What a\n    // 3rd adds there, worked out with a piece at the 3rd-piece price: min(price, $29) for the slot (a pricier piece adds\n    // the same; a cheaper one, or a set with a piece under $29, less). The bag and the builder check each pick's own rise.\n    const open = !!deal && dealUnits < 3 * dealSets;\n    const probe = { id: 'third-probe', line: -1, key: '\\u0000third-probe', unit: 0, price: thirdPrice, bundle: '', number: 0, order: units.length, pair: true, chain: false, mystery: false };\n    const thirdRise = open ? solve(units.concat(probe), cfg).total - final.total : 0;\n    // A piece added as a set's 3rd (kind 'third') is marked as such in a set of 3 (a set's group with its 3rd, or the\n    // pooled deal of exactly 3 pieces): the set of 3 the bag names so. The newest such piece in each.\n    const thirdUnits = dealGroups.filter(group => group.units.length === 3)\n      .map(group => group.units.filter(unit => lines[unit.line].kind === 'third').sort((a, b) => a.line - b.line)[0] || null).filter(Boolean);\n    for (const unit of thirdUnits) tags[unit.line].push({ offer: 'third', groupId: 'third', amount: 0, role: 'third' });\n    const thirdUnit = thirdUnits[0] || null;\n\n    // Gift: one free unit while the cart qualifies, otherwise regular price (and should be removed). As free-gift-115.js:\n    // the line marked as the gift first, else a gift piece the shopper bought.\n    const spend = spendOf(paidLines, finals, cfg);\n    const qualifies = paidLines.some(line => countsForGift(line, cfg)) && spend >= threshold;\n    const giftLines = lines.filter(line => line.kind === 'gift' && line.quantity > 0);\n    const ownedLines = paidLines.filter(line => line.handle === cfg.gift.handle && line.quantity > 0 && line.price > 0);\n    const owned = ownedLines.length > 0;\n    let giftValue = 0;\n    if (qualifies && (giftLines.length || owned)) {\n      const line = giftLines[0] || ownedLines[0];\n      giftValue = finals[line.index][0];\n      finals[line.index][0] = 0;\n      tags[line.index].push({ offer: 'gift', groupId: 'gift', amount: giftValue });\n    }\n\n    const outLines = lines.map(line => {\n      const regularTotal = line.price * line.quantity;\n      const finalTotal = sum(finals[line.index]);\n      // One entry per group the line is in: its saving there, its units there and how many of them are a set's 3rd.\n      const offers = [];\n      for (const tag of tags[line.index]) {\n        const third = tag.role === 'third' && tag.groupId !== 'third' ? 1 : 0;\n        const hit = offers.find(offer => offer.groupId === tag.groupId);\n        if (hit) { hit.amount += tag.amount; hit.units += 1; hit.thirds += third; }\n        else offers.push({ offer: tag.offer, groupId: tag.groupId, amount: tag.amount, units: 1, thirds: third });\n      }\n      return {\n        key: line.key, handle: line.handle, variantId: line.variantId, kind: line.kind, quantity: line.quantity,\n        unitPrice: line.price, unitFinals: finals[line.index].slice(), regularTotal, finalTotal,\n        discount: regularTotal - finalTotal, offers, labels: LABEL_ORDER.filter(name => offers.some(offer => offer.offer === name))\n      };\n    });\n    const total = sum(outLines.map(line => line.finalTotal));\n    const protectionLines = lines.filter(line => isProtection(line, cfg) && line.quantity > 0);\n    const protectionTotal = sum(protectionLines.map(line => outLines[line.index].finalTotal));\n    // The bag judges free shipping on the merchandise only. Shopify's own $100 rate does count the Checkout+ line\n    // (tested 2026-10-17: $99 + $2.99 turned Standard $7.95 into $0), so the store needs its own fix for that edge.\n    const shippingBasis = total - protectionTotal;\n    const subtotal = sum(outLines.map(line => line.regularTotal)) - giftValue;\n    const discount = subtotal - total;\n\n    // The 2-for-$99 pieces outside a chain deal (one alone: \"add 1 more\"), and chains without the chain deal.\n    const pieces = final.pool.length;\n    const pendingChains = final.chainDeal ? 0 : final.chainUnits.length;\n    const k = cfg.chains.count;\n    const handlesInCart = new Set(paidLines.filter(line => line.quantity > 0).map(line => line.handle));\n    // The bag's third-piece picks: the listed variants first, then (third.any) every other 2-for-$99 piece, whose\n    // variant the bag picks (variantId ''); never one already in the bag, the Mystery piece or the gift.\n    const listed = cfg.third.variants.filter(item => !handlesInCart.has(item.handle)).map(item => ({ handle: item.handle, variantId: item.variantId }));\n    const choices = cfg.third.any\n      ? listed.concat(cfg.pair.handles.filter(handle => !handlesInCart.has(handle) && handle !== cfg.mystery.handle && handle !== cfg.gift.handle &&\n        !cfg.third.variants.some(item => item.handle === handle)).map(handle => ({ handle, variantId: '' })))\n      : listed;\n\n    // Mystery unlock is simulated, as everything is priced by the same rules (the Mystery piece never joins the deal).\n    const mysteryInCart = handlesInCart.has(cfg.mystery.handle);\n    const mysteryPrice = cents(options.mysteryPrice, cfg.mystery.price);\n    let unlocksGift = false;\n    if (probeMystery && !mysteryInCart && spend < threshold && spend + mysteryPrice >= threshold) {\n      const probe = readLine({ key: '\\u0000mystery-probe', handle: cfg.mystery.handle, variantId: cfg.mystery.variantId, price: mysteryPrice, quantity: 1 }, lines.length);\n      unlocksGift = run(lines.concat(probe), cfg, options, false).gift.qualifies;\n    }\n\n    const declined = options.giftDeclined === true;\n    return {\n      lines: outLines,\n      groups: final.groups.map(group => {\n        const regular = sumPrices(group.units);\n        const price = regular - sum(group.cuts);\n        // A 2-for-$99 group: a set (its two pieces, role 'pair', and the 3rd shown with it, role 'third'), or the pooled\n        // deal (pooled: one saving spread over every piece; sets: how many sets it holds).\n        return {\n          id: group.id, offer: group.offer, units: group.units.map((unit, i) => ({ key: unit.key, unit: unit.unit, role: group.roles ? group.roles[i] : 'piece' })), regular, price, savings: regular - price,\n          ...(group.offer === 'pair' ? { sets: group.sets, setSavings: group.setSavings, thirdSavings: group.thirdSavings, pooled: group.pooled, bundle: group.bundle } : {}),\n          ...(group.offer === 'stack' ? { sets: group.sets, bundle: group.bundle } : {})\n        };\n      }),\n      // Pendant stacks in the bag (pendant-stack-95.js): how many, at what price.\n      stack: { price: cfg.stack.price, label: cfg.stack.label, sets: sum(final.groups.filter(group => group.offer === 'stack').map(group => group.sets)) },\n      subtotal, discount, total, savings: discount,\n      gift: {\n        handle: cfg.gift.handle, variantId: cfg.gift.variantId, threshold, spend,\n        remaining: Math.max(0, threshold - spend), qualifies, inCart: giftLines.length > 0, owned, declined,\n        shouldAdd: qualifies && !giftLines.length && !declined && !owned,\n        shouldRemove: giftLines.length > 0 && !qualifies,\n        value: giftValue\n      },\n      // The \"Add a 3rd for $29\" offer: available while a set has no 3rd yet (open: how many sets have none; every set can\n      // take its own); unlocksGift: a 3rd (`rise`) also takes the order to the free gift. applied: a set of 3 (thirdUnits).\n      third: {\n        price: thirdPrice, rise: thirdRise, available: open && (cfg.third.any || choices.length > 0),\n        open: open ? dealSets - (dealUnits - 2 * dealSets) : 0,\n        unlocksGift: open && (cfg.third.any || choices.length > 0) && spend < threshold && spend + thirdRise >= threshold,\n        applied: !!thirdUnit, key: thirdUnit ? thirdUnit.key : null, keys: thirdUnits.map(unit => unit.key), gap: Math.max(0, threshold - spend), choices\n      },\n      mystery: { handle: cfg.mystery.handle, variantId: cfg.mystery.variantId, price: mysteryPrice, inCart: mysteryInCart, unlocksGift },\n      pair: { pendingUnits: deal ? 0 : pieces, needsOne: pieces === 1, label: cfg.pair.label, pieces: dealUnits, sets: dealSets },\n      chains: { pendingUnits: pendingChains, needed: pendingChains ? Math.max(0, k - pendingChains) : 0 },\n      shipping: { threshold: cfg.shipping.threshold, remaining: Math.max(0, cfg.shipping.threshold - shippingBasis), qualifies: shippingBasis >= cfg.shipping.threshold },\n      protection: { inCart: protectionLines.length > 0, quantity: sum(protectionLines.map(line => line.quantity)), total: protectionTotal }\n    };\n  }\n\n  function price(lines, config, options) {\n    const cfg = normalizeConfig(config);\n    const list = Array.isArray(lines) ? lines : [];\n    return run(list.map(readLine), cfg, isObj(options) ? options : {}, true);\n  }\n\n  // ---------- set builder quote ----------\n  // The 2-for-$99 builder's running total (sections/humbler-bundle): the picked pieces as one set plus an optional\n  // $29 third piece, priced by the bag's own rules (three chains are the chain deal's $99, as at checkout).\n  // pieces: [{ handle, variantId, price }]; third: the same, or null. thirdOpen: the set alone has an open 3rd slot that\n  // can reach the free gift; third: the given third piece gets an offer price.\n  function quoteSet(pieces, third, config) {\n    const cfg = normalizeConfig(config);\n    const pieceLines = (Array.isArray(pieces) ? pieces : []).filter(isObj)\n      .map((piece, index) => readLine({ key: `piece-${index + 1}`, handle: piece.handle, variantId: piece.variantId, price: piece.price }, index));\n    const alone = run(pieceLines, cfg, {}, false);\n    const lines = isObj(third)\n      ? pieceLines.concat(readLine({ key: 'third', handle: third.handle, variantId: third.variantId, price: third.price, kind: 'third' }, pieceLines.length))\n      : pieceLines;\n    const result = isObj(third) ? run(lines, cfg, {}, false) : alone;\n    const regular = sum(result.lines.map(line => line.regularTotal));\n    const thirdLine = isObj(third) ? result.lines[result.lines.length - 1] : null;\n    return {\n      regular, price: result.total, savings: regular - result.total,\n      discounted: result.total < regular,\n      thirdOpen: alone.third.available, third: !!thirdLine && thirdLine.offers.some(offer => offer.offer === 'pair' || offer.offer === 'chains'), gift: result.gift.qualifies\n    };\n  }\n\n  return { normalizeConfig, price, quoteSet, DEFAULTS: normalizeConfig({}) };\n});\n"],
  "mappings": "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",
  "names": ["probe", "price"]
}
