{"product_id":"build-your-bundle-hex-nootropic-pouches","title":"Build Your Bundle – HEX Nootropic Pouches","description":"\u003c!-- ── Hero ── --\u003e\n\u003csection class=\"bundle-hero\"\u003e\n  \u003cp class=\"eyebrow\"\u003eMystic's Energy · HEX Nootropic Pouches\u003c\/p\u003e\n  \u003ch1\u003eBuild Your \u003cspan\u003eBundle\u003c\/span\u003e\n\u003c\/h1\u003e\n  \u003cp class=\"subtitle\"\u003eMix any flavours. The more you grab, the more you save.\u003c\/p\u003e\n  \u003cdiv class=\"trust-row\"\u003e\n    \u003cdiv class=\"trust-pill\"\u003e\n\u003cspan\u003e⚡\u003c\/span\u003e 100mg Clean Caffeine\u003c\/div\u003e\n    \u003cdiv class=\"trust-pill\"\u003e\n\u003cspan\u003e🧠\u003c\/span\u003e Nootropic Formula\u003c\/div\u003e\n    \u003cdiv class=\"trust-pill\"\u003e\n\u003cspan\u003e🚫\u003c\/span\u003e Tobacco \u0026amp; Nicotine Free\u003c\/div\u003e\n    \u003cdiv class=\"trust-pill\"\u003e\n\u003cspan\u003e↩️\u003c\/span\u003e 30-Day Guarantee\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- ── AOV Milestone Progress Bar ── --\u003e\n\u003csection class=\"aov-section\"\u003e\n  \u003cp class=\"aov-label\"\u003eYour Rewards Progress\u003c\/p\u003e\n  \u003cdiv class=\"aov-track-wrap\"\u003e\n    \u003cdiv class=\"aov-track\"\u003e\n      \u003cdiv class=\"aov-fill\" id=\"aov-fill\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"aov-markers\"\u003e\n      \u003cdiv class=\"aov-marker\" id=\"m-3\"\u003e\n        \u003cdiv class=\"aov-dot\" id=\"dot-3\"\u003e\u003cspan class=\"dot-check\"\u003e✓\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"aov-milestone-label\"\u003e\n          \u003cspan class=\"cans-num\"\u003e3\u003c\/span\u003e\n          \u003cspan class=\"reward\"\u003eSave 15%\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"aov-marker\" id=\"m-6\"\u003e\n        \u003cdiv class=\"aov-dot\" id=\"dot-6\"\u003e\u003cspan class=\"dot-check\"\u003e✓\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"aov-milestone-label\"\u003e\n          \u003cspan class=\"cans-num\"\u003e6\u003c\/span\u003e\n          \u003cspan class=\"reward\"\u003eFree Shipping + Save 20%\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"aov-marker\" id=\"m-9\"\u003e\n        \u003cdiv class=\"aov-dot\" id=\"dot-9\"\u003e\u003cspan class=\"dot-check\"\u003e✓\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"aov-milestone-label\"\u003e\n          \u003cspan class=\"cans-num\"\u003e9\u003c\/span\u003e\n          \u003cspan class=\"reward\"\u003eSave 25%\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"aov-marker\" id=\"m-15\"\u003e\n        \u003cdiv class=\"aov-dot\" id=\"dot-15\"\u003e\u003cspan class=\"dot-check\"\u003e✓\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"aov-milestone-label\"\u003e\n          \u003cspan class=\"cans-num\"\u003e15\u003c\/span\u003e\n          \u003cspan class=\"reward\"\u003eSave 35% — Best Value\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"aov-nudge\" id=\"aov-nudge\"\u003eAdd \u003cstrong\u003e3 cans\u003c\/strong\u003e to unlock bundle pricing\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003c!-- ── Main Content ── --\u003e\n\u003cdiv class=\"bundle-main\"\u003e\n\n  \u003c!-- Left: Flavour Picker --\u003e\n  \u003cdiv class=\"flavours-col\"\u003e\n    \u003cdiv class=\"flavours-header\"\u003e\n      \u003ch2\u003ePick Your Flavours\u003c\/h2\u003e\n      \u003cdiv style=\"text-align:right;\"\u003e\n        \u003cdiv class=\"qty-badge\" id=\"total-display\"\u003e0\u003c\/div\u003e\n        \u003cdiv class=\"qty-label\"\u003ecans selected\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"flavour-grid\"\u003e\n\n      \u003c!-- Phoenix Flame Mango --\u003e\n      \u003cdiv class=\"flavour-card\" id=\"card-mango\"\u003e\n        \u003cdiv class=\"check-badge\"\u003e✓\u003c\/div\u003e\n        \u003cdiv class=\"img-wrap\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0905\/5138\/6492\/files\/MYSTIC_S_Energy_Mockup_Mango_V2_02.png?v=1740038447\" alt=\"Phoenix Flame Mango\" loading=\"lazy\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"colour-bar\" style=\"background:linear-gradient(90deg,#FF6B00,#FFB800);\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"card-body\"\u003e\n          \u003cdiv class=\"flavour-name\"\u003ePhoenix Flame\u003c\/div\u003e\n          \u003cdiv class=\"flavour-sub\"\u003eMango · 100mg Caffeine\u003c\/div\u003e\n          \u003cdiv class=\"card-footer\"\u003e\n            \u003cdiv class=\"qty-ctrl\"\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('mango',-1)\" id=\"minus-mango\"\u003e−\u003c\/button\u003e\n              \u003cspan class=\"qty-num\" id=\"qty-mango\"\u003e0\u003c\/span\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('mango',1)\" id=\"plus-mango\"\u003e+\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cbutton class=\"add-btn\" onclick=\"addFlavour('mango')\" id=\"addbtn-mango\"\u003eADD\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Sapphire Storm Blueberry --\u003e\n      \u003cdiv class=\"flavour-card\" id=\"card-blueberry\"\u003e\n        \u003cdiv class=\"check-badge\"\u003e✓\u003c\/div\u003e\n        \u003cdiv class=\"img-wrap\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0905\/5138\/6492\/files\/MYSTIC_S_Energy_Mockup_Blueberry_02.png?v=1742216884\" alt=\"Sapphire Storm Blueberry\" loading=\"lazy\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"colour-bar\" style=\"background:linear-gradient(90deg,#1E3A8A,#3B82F6);\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"card-body\"\u003e\n          \u003cdiv class=\"flavour-name\"\u003eSapphire Storm\u003c\/div\u003e\n          \u003cdiv class=\"flavour-sub\"\u003eBlueberry · 100mg Caffeine\u003c\/div\u003e\n          \u003cdiv class=\"card-footer\"\u003e\n            \u003cdiv class=\"qty-ctrl\"\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('blueberry',-1)\" id=\"minus-blueberry\"\u003e−\u003c\/button\u003e\n              \u003cspan class=\"qty-num\" id=\"qty-blueberry\"\u003e0\u003c\/span\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('blueberry',1)\" id=\"plus-blueberry\"\u003e+\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cbutton class=\"add-btn\" onclick=\"addFlavour('blueberry')\" id=\"addbtn-blueberry\"\u003eADD\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Dark Surge Cola --\u003e\n      \u003cdiv class=\"flavour-card\" id=\"card-cola\"\u003e\n        \u003cdiv class=\"check-badge\"\u003e✓\u003c\/div\u003e\n        \u003cdiv class=\"img-wrap\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0905\/5138\/6492\/files\/MYSTIC_S_Energy_Mockup_Cola_02.png?v=1742216884\" alt=\"Dark Surge Cola\" loading=\"lazy\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"colour-bar\" style=\"background:linear-gradient(90deg,#1a1a1a,#4a4a4a);\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"card-body\"\u003e\n          \u003cdiv class=\"flavour-name\"\u003eDark Surge\u003c\/div\u003e\n          \u003cdiv class=\"flavour-sub\"\u003eCola · 100mg Caffeine\u003c\/div\u003e\n          \u003cdiv class=\"card-footer\"\u003e\n            \u003cdiv class=\"qty-ctrl\"\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('cola',-1)\" id=\"minus-cola\"\u003e−\u003c\/button\u003e\n              \u003cspan class=\"qty-num\" id=\"qty-cola\"\u003e0\u003c\/span\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('cola',1)\" id=\"plus-cola\"\u003e+\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cbutton class=\"add-btn\" onclick=\"addFlavour('cola')\" id=\"addbtn-cola\"\u003eADD\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Ruby Quartz Watermelon --\u003e\n      \u003cdiv class=\"flavour-card\" id=\"card-watermelon\"\u003e\n        \u003cdiv class=\"check-badge\"\u003e✓\u003c\/div\u003e\n        \u003cdiv class=\"img-wrap\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0905\/5138\/6492\/files\/MYSTIC_S_Energy_Mockup_Watermelon_02.png?v=1742216884\" alt=\"Ruby Quartz Watermelon\" loading=\"lazy\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"colour-bar\" style=\"background:linear-gradient(90deg,#BE123C,#F43F5E);\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"card-body\"\u003e\n          \u003cdiv class=\"flavour-name\"\u003eRuby Quartz\u003c\/div\u003e\n          \u003cdiv class=\"flavour-sub\"\u003eWatermelon · 100mg Caffeine\u003c\/div\u003e\n          \u003cdiv class=\"card-footer\"\u003e\n            \u003cdiv class=\"qty-ctrl\"\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('watermelon',-1)\" id=\"minus-watermelon\"\u003e−\u003c\/button\u003e\n              \u003cspan class=\"qty-num\" id=\"qty-watermelon\"\u003e0\u003c\/span\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('watermelon',1)\" id=\"plus-watermelon\"\u003e+\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cbutton class=\"add-btn\" onclick=\"addFlavour('watermelon')\" id=\"addbtn-watermelon\"\u003eADD\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Arctic Crystal Spearmint --\u003e\n      \u003cdiv class=\"flavour-card\" id=\"card-spearmint\"\u003e\n        \u003cdiv class=\"check-badge\"\u003e✓\u003c\/div\u003e\n        \u003cdiv class=\"img-wrap\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0905\/5138\/6492\/files\/MYSTIC_S_Energy_Mockup_Spearmint_02.png?v=1742216884\" alt=\"Arctic Crystal Spearmint\" loading=\"lazy\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"colour-bar\" style=\"background:linear-gradient(90deg,#0E7490,#22D3EE);\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"card-body\"\u003e\n          \u003cdiv class=\"flavour-name\"\u003eArctic Crystal\u003c\/div\u003e\n          \u003cdiv class=\"flavour-sub\"\u003eSpearmint · 100mg Caffeine\u003c\/div\u003e\n          \u003cdiv class=\"card-footer\"\u003e\n            \u003cdiv class=\"qty-ctrl\"\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('spearmint',-1)\" id=\"minus-spearmint\"\u003e−\u003c\/button\u003e\n              \u003cspan class=\"qty-num\" id=\"qty-spearmint\"\u003e0\u003c\/span\u003e\n              \u003cbutton class=\"qty-btn\" onclick=\"changeQty('spearmint',1)\" id=\"plus-spearmint\"\u003e+\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cbutton class=\"add-btn\" onclick=\"addFlavour('spearmint')\" id=\"addbtn-spearmint\"\u003eADD\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Right: Order Summary --\u003e\n  \u003cdiv class=\"summary-sidebar\"\u003e\n    \u003cdiv class=\"summary-card\"\u003e\n      \u003cdiv class=\"summary-header\"\u003e\n        \u003ch3\u003eYour Bundle\u003c\/h3\u003e\n        \u003cdiv class=\"tier-label\" id=\"summary-tier-label\"\u003eAdd cans to see your savings\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"summary-body\"\u003e\n\n        \u003cdiv id=\"empty-state\" class=\"empty-state\"\u003e\n          \u003cdiv class=\"icon\"\u003e🛒\u003c\/div\u003e\n          \u003cp\u003eStart adding flavours below.\u003cbr\u003ePricing unlocks at 3 cans.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv id=\"summary-content\" style=\"display:none;\"\u003e\n          \u003cdiv class=\"selected-flavours-list\" id=\"selected-list\"\u003e\u003c\/div\u003e\n\n          \u003cdiv class=\"summary-row\"\u003e\n            \u003cspan class=\"row-label\"\u003eSubtotal (full price)\u003c\/span\u003e\n            \u003cspan class=\"row-val original-val\" id=\"original-price\"\u003e£0.00\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"summary-row\" id=\"discount-row\" style=\"display:none;\"\u003e\n            \u003cspan class=\"row-label\"\u003eBundle Discount\u003c\/span\u003e\n            \u003cspan class=\"row-val savings-val\" id=\"discount-val\"\u003e−£0.00\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"summary-row\" id=\"shipping-row\" style=\"display:none;\"\u003e\n            \u003cspan class=\"row-label\"\u003eShipping\u003c\/span\u003e\n            \u003cspan class=\"row-val savings-val\"\u003eFREE 🎉\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"summary-row total-row\"\u003e\n            \u003cspan class=\"row-label\"\u003eTotal\u003c\/span\u003e\n            \u003cspan class=\"row-val\" id=\"total-price\"\u003e£0.00\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv style=\"text-align:center;margin-top:4px;font-size:12px;color:var(--light);\"\u003e\n            \u003cspan id=\"per-can-price\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- Unlock reward banner --\u003e\n        \u003cdiv class=\"unlock-banner\" id=\"unlock-banner\"\u003e\n          \u003cspan class=\"ub-icon\"\u003e🎁\u003c\/span\u003e\n          \u003cdiv class=\"ub-text\" id=\"unlock-text\"\u003e\n\u003cstrong\u003eFree Shipping Unlocked!\u003c\/strong\u003e\u003cbr\u003eYou've reached 6 cans.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cbutton class=\"cta-btn\" id=\"add-to-cart-btn\" disabled onclick=\"addToCart()\"\u003e\n          Add to Cart\n          \u003cspan class=\"btn-sub\" id=\"btn-sub-text\"\u003eAdd at least 3 cans to continue\u003c\/span\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"need-more\" id=\"need-more-msg\" style=\"display:none;\"\u003e\n          Add \u003cstrong id=\"cans-needed\"\u003e3\u003c\/strong\u003e more to unlock \u003cstrong id=\"next-reward-label\"\u003ebundle pricing\u003c\/strong\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"trust-icons\"\u003e\n          \u003cdiv class=\"trust-icon-item\"\u003e\n\u003cspan\u003e🔒\u003c\/span\u003e Secure Checkout\u003c\/div\u003e\n          \u003cdiv class=\"trust-icon-item\"\u003e\n\u003cspan\u003e↩️\u003c\/span\u003e 30-Day Returns\u003c\/div\u003e\n          \u003cdiv class=\"trust-icon-item\"\u003e\n\u003cspan\u003e🚚\u003c\/span\u003e Fast Dispatch\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- ── FAQ ── --\u003e\n\u003csection class=\"faq-section\"\u003e\n  \u003ch2\u003eFrequently Asked Questions\u003c\/h2\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eHow much caffeine is in each HEX pouch?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003eEach HEX pouch contains \u003cstrong\u003e100mg of clean caffeine\u003c\/strong\u003e — roughly equivalent to a strong cup of coffee — combined with nootropics (Alpha-GPC, L-Tyrosine, L-Theanine, Taurine) for sustained focus without the crash.\u003c\/div\u003e\n  \u003c\/details\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eHow do I use a HEX pouch?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003ePlace one pouch under your lower lip. Energy activates within \u003cstrong\u003e15–30 seconds\u003c\/strong\u003e and lasts 30–60 minutes. Remove when finished — completely mess-free and discreet.\u003c\/div\u003e\n  \u003c\/details\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eAre HEX pouches tobacco or nicotine free?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003eYes. HEX pouches contain \u003cstrong\u003ezero tobacco and zero nicotine\u003c\/strong\u003e. They are a clean, non-addictive alternative designed to replace the ritual without the dependency.\u003c\/div\u003e\n  \u003c\/details\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eHow long will delivery take?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003eOrders are dispatched within 1–2 business days. UK delivery typically arrives within \u003cstrong\u003e3–5 business days\u003c\/strong\u003e. You will receive a tracking link once your order ships.\u003c\/div\u003e\n  \u003c\/details\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eWhat is the return policy?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003eWe offer a \u003cstrong\u003e30-day money-back guarantee\u003c\/strong\u003e. If you are not satisfied for any reason, contact us within 30 days of receiving your order for a full refund.\u003c\/div\u003e\n  \u003c\/details\u003e\n  \u003cdetails class=\"faq-item\"\u003e\n    \u003csummary\u003eCan I mix flavours in my bundle?\u003c\/summary\u003e\n    \u003cdiv class=\"faq-body\"\u003eAbsolutely — that is the whole point! Mix and match any combination of our 5 HEX flavours. Adjust quantities using the + \/ − controls on each flavour card.\u003c\/div\u003e\n  \u003c\/details\u003e\n\u003c\/section\u003e\n\n\u003cdiv class=\"toast\" id=\"toast\"\u003e\u003c\/div\u003e\n\n\u003cscript\u003e\n  const PRICE = 9.99;\n\n  \/\/ Milestones: qty -\u003e { discount, freeShipping, label, reward }\n  const MILESTONES = [\n    { qty: 3,  discount: 0.15, freeShipping: false, label: '3 Cans · Save 15%',              reward: 'bundle pricing' },\n    { qty: 6,  discount: 0.20, freeShipping: true,  label: '6 Cans · Free Shipping + Save 20%', reward: 'free shipping' },\n    { qty: 9,  discount: 0.25, freeShipping: true,  label: '9 Cans · Save 25%',              reward: '25% off' },\n    { qty: 15, discount: 0.35, freeShipping: true,  label: '15 Cans · Save 35%',             reward: '35% off' }\n  ];\n\n  const FLAVOURS = {\n    mango:      { name: 'Phoenix Flame (Mango)',      colour: '#FF6B00', variantId: '55682572747132' },\n    blueberry:  { name: 'Sapphire Storm (Blueberry)', colour: '#3B82F6', variantId: '55682572845436' },\n    cola:       { name: 'Dark Surge (Cola)',           colour: '#1a1a1a', variantId: '55682572943740' },\n    watermelon: { name: 'Ruby Quartz (Watermelon)',   colour: '#F43F5E', variantId: '55682573042044' },\n    spearmint:  { name: 'Arctic Crystal (Spearmint)', colour: '#22D3EE', variantId: '55682573140348' }\n  };\n\n  let quantities = { mango: 0, blueberry: 0, cola: 0, watermelon: 0, spearmint: 0 };\n  let lastUnlockedMilestone = null;\n\n  function totalSelected() { return Object.values(quantities).reduce((a,b) =\u003e a+b, 0); }\n  function fmt(n) { return '£' + n.toFixed(2); }\n\n  function getCurrentMilestone(total) {\n    let current = null;\n    for (const m of MILESTONES) { if (total \u003e= m.qty) current = m; }\n    return current;\n  }\n\n  function getNextMilestone(total) {\n    for (const m of MILESTONES) { if (total \u003c m.qty) return m; }\n    return null;\n  }\n\n  function showToast(msg) {\n    const t = document.getElementById('toast');\n    t.innerHTML = msg; t.classList.add('show');\n    setTimeout(() =\u003e t.classList.remove('show'), 2800);\n  }\n\n  function addFlavour(f) {\n    quantities[f]++;\n    updateUI();\n    const btn = document.getElementById('addbtn-' + f);\n    btn.classList.add('added'); btn.textContent = 'ADDED ✓';\n    setTimeout(() =\u003e {\n      btn.textContent = quantities[f] \u003e 0 ? 'ADD MORE' : 'ADD';\n      if (quantities[f] === 0) btn.classList.remove('added');\n    }, 1000);\n  }\n\n  function changeQty(f, delta) {\n    const newVal = quantities[f] + delta;\n    if (newVal \u003c 0) return;\n    quantities[f] = newVal;\n    updateUI();\n  }\n\n  function updateUI() {\n    const total = totalSelected();\n    const current = getCurrentMilestone(total);\n    const next = getNextMilestone(total);\n\n    \/\/ ── AOV progress bar ──\n    const maxQty = 15;\n    const pct = Math.min((total \/ maxQty) * 100, 100);\n    document.getElementById('aov-fill').style.width = pct + '%';\n\n    \/\/ Update milestone dots \u0026 markers\n    for (const m of MILESTONES) {\n      const dot = document.getElementById('dot-' + m.qty);\n      const marker = document.getElementById('m-' + m.qty);\n      if (total \u003e= m.qty) {\n        dot.classList.add('reached');\n        marker.classList.add('reached');\n        marker.classList.remove('active-next');\n      } else {\n        dot.classList.remove('reached');\n        marker.classList.remove('reached');\n        if (next \u0026\u0026 next.qty === m.qty) marker.classList.add('active-next');\n        else marker.classList.remove('active-next');\n      }\n    }\n\n    \/\/ Nudge text\n    const nudge = document.getElementById('aov-nudge');\n    if (!next) {\n      nudge.innerHTML = '🏆 Maximum savings unlocked — \u003cstrong\u003eSave 35%!\u003c\/strong\u003e';\n    } else if (!current) {\n      nudge.innerHTML = `Add \u003cstrong\u003e${next.qty - total} more can${next.qty - total !== 1 ? 's' : ''}\u003c\/strong\u003e to unlock bundle pricing`;\n    } else {\n      nudge.innerHTML = `Add \u003cstrong\u003e${next.qty - total} more can${next.qty - total !== 1 ? 's' : ''}\u003c\/strong\u003e to unlock \u003cstrong\u003e${next.reward}\u003c\/strong\u003e \u003cspan class=\"unlock-badge\"\u003e+REWARD\u003c\/span\u003e`;\n    }\n\n    \/\/ ── Card states ──\n    document.getElementById('total-display').textContent = total;\n    Object.keys(quantities).forEach(f =\u003e {\n      const q = quantities[f];\n      document.getElementById('qty-' + f).textContent = q;\n      const card = document.getElementById('card-' + f);\n      const addBtn = document.getElementById('addbtn-' + f);\n      if (q \u003e 0) {\n        card.classList.add('selected');\n        addBtn.textContent = 'ADD MORE'; addBtn.classList.add('added');\n      } else {\n        card.classList.remove('selected');\n        addBtn.classList.remove('added'); addBtn.textContent = 'ADD';\n      }\n      document.getElementById('minus-' + f).disabled = q === 0;\n    });\n\n    \/\/ ── Summary sidebar ──\n    if (total === 0) {\n      document.getElementById('empty-state').style.display = 'block';\n      document.getElementById('summary-content').style.display = 'none';\n      document.getElementById('add-to-cart-btn').disabled = true;\n      document.getElementById('btn-sub-text').textContent = 'Add at least 3 cans to continue';\n      document.getElementById('need-more-msg').style.display = 'none';\n      document.getElementById('unlock-banner').classList.remove('show');\n      document.getElementById('summary-tier-label').textContent = 'Add cans to see your savings';\n      return;\n    }\n\n    \/\/ Show summary\n    document.getElementById('empty-state').style.display = 'none';\n    document.getElementById('summary-content').style.display = 'block';\n\n    const discount = current ? current.discount : 0;\n    const originalTotal = total * PRICE;\n    const discountAmt = originalTotal * discount;\n    const finalTotal = originalTotal - discountAmt;\n\n    document.getElementById('original-price').textContent = fmt(originalTotal);\n\n    if (discount \u003e 0) {\n      document.getElementById('discount-row').style.display = 'flex';\n      document.getElementById('discount-val').textContent = '−' + fmt(discountAmt);\n    } else {\n      document.getElementById('discount-row').style.display = 'none';\n    }\n\n    const freeShip = current \u0026\u0026 current.freeShipping;\n    document.getElementById('shipping-row').style.display = freeShip ? 'flex' : 'none';\n\n    document.getElementById('total-price').textContent = fmt(finalTotal);\n    document.getElementById('per-can-price').textContent = total \u003e 0 ? fmt(finalTotal \/ total) + ' per can' : '';\n    document.getElementById('summary-tier-label').textContent = current ? current.label : total + ' can' + (total !== 1 ? 's' : '') + ' · No discount yet';\n\n    \/\/ Flavour list\n    const listEl = document.getElementById('selected-list');\n    listEl.innerHTML = '';\n    Object.entries(quantities).forEach(([f, q]) =\u003e {\n      if (q \u003e 0) {\n        const row = document.createElement('div');\n        row.className = 'sel-flavour-row';\n        row.innerHTML = `\u003cspan class=\"dot\" style=\"background:${FLAVOURS[f].colour}\"\u003e\u003c\/span\u003e\u003cspan class=\"name\"\u003e${FLAVOURS[f].name}\u003c\/span\u003e\u003cspan class=\"qty-badge-sm\"\u003e×${q}\u003c\/span\u003e`;\n        listEl.appendChild(row);\n      }\n    });\n\n    \/\/ Unlock banner — show when a new milestone is just reached\n    if (current \u0026\u0026 current !== lastUnlockedMilestone) {\n      lastUnlockedMilestone = current;\n      const banner = document.getElementById('unlock-banner');\n      const bannerText = document.getElementById('unlock-text');\n      if (current.freeShipping \u0026\u0026 current.qty === 6) {\n        bannerText.innerHTML = '\u003cstrong\u003e🚚 Free Shipping Unlocked!\u003c\/strong\u003e\u003cbr\/\u003eYou\\'ve reached 6 cans.';\n      } else if (current.qty === 9) {\n        bannerText.innerHTML = '\u003cstrong\u003e🎉 25% Off Unlocked!\u003c\/strong\u003e\u003cbr\/\u003eYou\\'ve reached 9 cans.';\n      } else if (current.qty === 15) {\n        bannerText.innerHTML = '\u003cstrong\u003e🏆 35% Off Unlocked!\u003c\/strong\u003e\u003cbr\/\u003eMaximum savings reached!';\n      } else {\n        bannerText.innerHTML = '\u003cstrong\u003eBundle Pricing Unlocked!\u003c\/strong\u003e\u003cbr\/\u003eSave 15% on your order.';\n      }\n      banner.classList.add('show');\n    } else if (!current) {\n      document.getElementById('unlock-banner').classList.remove('show');\n    }\n\n    \/\/ CTA\n    if (total \u003e= 3) {\n      document.getElementById('add-to-cart-btn').disabled = false;\n      document.getElementById('btn-sub-text').textContent = fmt(finalTotal) + (current ? ' · ' + Math.round(current.discount * 100) + '% off' : '');\n      if (next) {\n        const needed = next.qty - total;\n        document.getElementById('cans-needed').textContent = needed;\n        document.getElementById('next-reward-label').textContent = next.reward;\n        document.getElementById('need-more-msg').style.display = 'block';\n      } else {\n        document.getElementById('need-more-msg').style.display = 'none';\n      }\n    } else {\n      document.getElementById('add-to-cart-btn').disabled = true;\n      const needed = 3 - total;\n      document.getElementById('btn-sub-text').textContent = `Add ${needed} more can${needed !== 1 ? 's' : ''} to continue`;\n      document.getElementById('cans-needed').textContent = needed;\n      document.getElementById('next-reward-label').textContent = 'bundle pricing';\n      document.getElementById('need-more-msg').style.display = 'block';\n    }\n  }\n\n  function addToCart() {\n    const total = totalSelected();\n    if (total \u003c 3) return;\n    const items = [];\n    Object.entries(quantities).forEach(([f, q]) =\u003e {\n      if (q \u003e 0) items.push({ id: FLAVOURS[f].variantId, quantity: q });\n    });\n    const current = getCurrentMilestone(total);\n    const discountPct = current ? Math.round(current.discount * 100) : 0;\n    fetch('\/cart\/add.js', {\n      method: 'POST', headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({ items })\n    })\n    .then(r =\u003e r.json())\n    .then(() =\u003e {\n      if (discountPct \u003e 0) return fetch('\/discount\/BUNDLE' + discountPct, { method: 'GET' });\n    })\n    .then(() =\u003e {\n      showToast('🎉 Bundle added to cart!');\n      setTimeout(() =\u003e { window.location.href = '\/cart'; }, 1200);\n    })\n    .catch(() =\u003e {\n      showToast('🎉 Bundle added to cart!');\n      setTimeout(() =\u003e { window.location.href = '\/cart'; }, 1200);\n    });\n  }\n\n  updateUI();\n\u003c\/script\u003e","brand":"Mystic's Energy","offers":[{"title":"Default Title","offer_id":57128436531580,"sku":null,"price":0.0,"currency_code":"GBP","in_stock":true}],"url":"https:\/\/mysticsenergy.com\/products\/build-your-bundle-hex-nootropic-pouches","provider":"Mystic's Energy","version":"1.0","type":"link"}