{
  "version": 3,
  "sources": ["/cdn/shop/t/59/assets/aeoc-quiz.js?nocache=1769"],
  "sourcesContent": ["/* first-touch cold-paid capture -------------------------------------------------\n   The ATC popup's detectCold() only runs on pages carrying that section. A paid-social\n   visitor who lands on a landing page (no popup section) and then clicks through to a\n   PDP arrives with no UTMs and an internal referrer, so she was read as WARM and never\n   offered arm B. Measured 19 Oct: 6 of 42 post-gate orders misclassified. This file\n   loads on every page, so capture the flag at first touch. Only ever writes '1' --\n   never '0' -- so detectCold() can still evaluate normally later in the session. */\n(function () {\n  try {\n    if (sessionStorage.getItem('aeoc_coldpaid') === '1') return;\n    var p = new URLSearchParams(location.search);\n    var med = (p.get('utm_medium') || '').toLowerCase();\n    var src = (p.get('utm_source') || '').toLowerCase();\n    var ref = (document.referrer || '').toLowerCase();\n    var paid = med.indexOf('paid') > -1 || med === 'cpc';\n    var social = src.indexOf('facebook') > -1 || src.indexOf('instagram') > -1 ||\n                 src === 'fb' || src === 'ig';\n    var refSocial = ref.indexOf('facebook') > -1 || ref.indexOf('instagram') > -1;\n    if ((paid && social) || (paid && !src && refSocial)) {\n      sessionStorage.setItem('aeoc_coldpaid', '1');\n    }\n  } catch (e) {}\n})();\n\n/* ============================================================\n   AEOC QUIZ WIDGET \u2014 Shopify theme asset\n   Reads config from window.AEOC_QUIZ_CONFIG (set in snippet).\n   ============================================================ */\n(function () {\n  'use strict';\n\n  /* ============================================================\n     CONFIG (merge Liquid-provided values with defaults)\n     ============================================================ */\n  const INJECTED = (typeof window !== 'undefined' && window.AEOC_QUIZ_CONFIG) || {};\n  const CONFIG = {\n    klaviyoPublicSiteId: INJECTED.klaviyoPublicSiteId || 'PLACEHOLDER',\n    shopifyDomain: INJECTED.shopifyDomain || 'https://www.australianeucalyptusoil.com.au',\n    isPdp: !!INJECTED.isPdp,\n    // Landing pages (/pages/*-lp) are paid-traffic destinations running in focus mode\n    // with no header or footer. They get the SAME earned slide-up the PDPs get --\n    // never the full-screen 8s welcome modal, which would interrupt a page bought\n    // with paid clicks at the moment she is still reading the offer.\n    isLp: /^\\/pages\\/[a-z0-9-]+-lp\\/?$/i.test(location.pathname),\n    quizListId: INJECTED.quizListId || '',\n    quizLogUrl: INJECTED.quizLogUrl || '',\n    conciergeOptinUrl: INJECTED.conciergeOptinUrl || '',\n    isReturning: !!INJECTED.isReturning,\n    discountCode: 'QUIZ15',\n    discountPercent: 15,\n    discountEmail: 'QUIZ15',\n    discountEmailPercent: 15,\n    discountSms: 'QUIZ15',\n    discountSmsPercent: 15,\n    // EOFY SALE MODE \u2014 while true, the on-site quiz drops the QUIZ15/MOULDKIT25 codes (so nothing\n    // stacks on the already-discounted sale prices) and shows the sale price + sale copy instead.\n    // The Klaviyo flow emails are untouched (codes still in them) so post-sale buyers keep their reward.\n    // Set saleMode back to false when the EOFY sale ends to restore codes + normal copy.\n    saleMode: false, // DRAFT preview = post-sale (\"Get 15% off\"). IMPORTANT: set TRUE again before pushing to LIVE while the EOFY sale is still running.\n    salePercent: 20,\n    cookies: {\n      quizTaken: 'aeoc_quiz_taken',\n      welcomeDismissed: 'aeoc_welcome_modal_dismissed',\n      welcomeShown: 'aeoc_welcome_shown',\n      exitIntentShown: 'aeoc_exit_intent_shown',\n      pdpSlideupShown: 'aeoc_pdp_slideup_shown'\n    },\n    delays: {\n      welcomeModalSeconds: 8,\n      pdpSlideupDwellSeconds: 15,\n      pdpSlideupScrollPercent: 50,\n      calculatingSeconds: 3\n    },\n    copy: {\n      welcomePopup: {\n        headline: \"Get 15% off your first order\",\n        headlineReturning: \"Welcome back\",\n        headlineSale: \"Everything's 20% off right now\",\n        prompt: \"Pick what's bugging you:\",\n        micro: \"30 seconds to your match\",\n        dismiss: \"No thanks, I'll keep guessing\",\n        trust: { rating: \"4.9\", reviews: \"5,000+ reviews\", seenLabel: \"As seen on\", logoUrl: \"https://cdn.shopify.com/s/files/1/0734/6146/5401/files/7_Sunrise_Logo_2021.webp?v=1785365861\", logoAlt: \"As seen on Sunrise\" }\n      },\n      pdpSlideup: '30 seconds to be sure \u2192',\n      headerLink: \"Quiz - Get 15% Off\",\n      emailGate: {\n        headline: 'Your match is ready.',\n        subline: 'One tap away \u2014 plus 15% off your first order.',\n        emailPlaceholder: 'your@email.com',\n        cta: 'Show my match \u2192',\n        skip: 'Just show me my match',\n        micro: \"Your match + code also land in your inbox \u2014 unsubscribe any time.\"\n      },\n      calculating: [\n        'Reading your answers\u2026',\n        'Cross-checking with our products\u2026',\n        'Found it. Loading your match\u2026'\n      ]\n    }\n  };\n\n  /* ============================================================\n     QUESTION DATA \u2014 all 6 branches' routing tree\n     ============================================================ */\n  const Q1 = {\n    headline: 'Something here will sound familiar.',\n    question: 'Where do you want to start?',\n    answers: [\n      { text: 'Mould that keeps coming back', next: 'q2_mould' },\n      { text: \"What's actually in my laundry detergent\", next: 'q2_laundry' },\n      { text: 'That dishwasher smell', next: 'q2_dishwasher' },\n      { text: 'What I spray on the kitchen bench', next: 'q2_kitchen' },\n      { text: 'The fumes when I clean the shower', next: 'q2_shower' },\n      { text: 'Streaky glass & stainless', next: 'q2_glass_ss' }\n    ]\n  };\n\n  const BRANCHES = {\n    q2_mould: {\n      headline: 'Got it \u2014',\n      question: 'Tell us a bit more.',\n      answers: [\n        { text: 'Black spots in the shower \u2014 grout, tiles, silicone', set: { branch: 'mould', product_path: 'mould_solution_kit' }, next: 'q3_mould' },\n        { text: 'Dark patches on painted walls or ceilings', set: { branch: 'wall', product_path: 'wall_cleaner' }, next: 'q3_mould' },\n        { text: 'Both \u2014 bathroom and walls', set: { branch: 'mould', product_path: 'complete_mould_kit' }, next: 'q3_mould' },\n        { text: \"Honestly I haven't checked everywhere \u2014 it keeps coming back in the shower\", set: { branch: 'mould', product_path: 'complete_mould_kit' }, next: 'q3_mould' }\n      ]\n    },\n    q3_mould: {\n      headline: \"What's made you start looking for something different?\",\n      question: 'Pick the one that sounds like you.',\n      answers: [\n        { text: \"Bleach isn't working \u2014 the mould keeps coming back no matter what I use\", set: { version: 'A' }, next: 'email' },\n        { text: \"I hate the smell of bleach and I'm not convinced it's actually solving the problem\", set: { version: 'B' }, next: 'email' },\n        { text: \"I've been trying to move away from harsh chemicals at home\", set: { version: 'C' }, next: 'email' },\n        { text: 'I manage a rental or Airbnb and need something that works properly between tenants', set: { version: 'D' }, next: 'email' }\n      ]\n    },\n    q2_laundry: {\n      headline: \"Got it \u2014 the laundry.\",\n      question: \"Which sounds most like you?\",\n      answers: [\n        { text: \"No idea what's actually in mine\", set: { version: 'A' }, next: 'q3_laundry' },\n        { text: \"Someone's skin gets itchy\", set: { version: 'B' }, next: 'q3_laundry' },\n        { text: \"Clothes smell of detergent, not clean\", set: { version: 'C' }, next: 'q3_laundry' },\n        { text: \"It's the last thing I haven't switched\", set: { version: 'D' }, next: 'q3_laundry' }\n      ]\n    },\n    q3_laundry: {\n      headline: 'Powder or liquid?',\n      question: 'Which do you usually reach for?',\n      answers: [\n        { text: \"I've always used powder. Never had a problem with it.\", set: { branch: 'laundry_powder' }, next: 'q4_laundry_scent' },\n        { text: 'I prefer liquid \u2014 I just do.', set: { branch: 'laundry_liquid', scent: 'eucalyptus' }, next: 'email' }\n      ]\n    },\n    q4_laundry_scent: {\n      headline: 'Last one',\n      question: 'Which scent is yours?',\n      answers: [\n        { text: 'Eucalyptus', set: { scent: 'eucalyptus' }, next: 'email' },\n        { text: 'Lemon Myrtle', set: { scent: 'lemon_myrtle' }, next: 'email' },\n        { text: 'Lavender', set: { scent: 'lavender' }, next: 'email' },\n        { text: 'Peppermint', set: { scent: 'peppermint' }, next: 'email' },\n        { text: \"I'm not sure \u2014 show me your most popular\", set: { scent: 'eucalyptus' }, next: 'email' }\n      ]\n    },\n    q2_dishwasher: {\n      headline: \"Got it \u2014 the dishwasher.\",\n      question: \"What's the main thing for you?\",\n      answers: [\n        { text: \"Cloudy glasses, even with rinse aid\", set: { branch: 'dishwasher', version: 'A' }, next: 'q3_dishwasher_scent' },\n        { text: \"What those chemicals might leave behind\", set: { branch: 'dishwasher', version: 'B' }, next: 'q3_dishwasher_scent' },\n        { text: \"Natural powders have let me down before\", set: { branch: 'dishwasher', version: 'C' }, next: 'q3_dishwasher_scent' },\n        { text: \"My kids eat off these plates\", set: { branch: 'dishwasher', version: 'D' }, next: 'q3_dishwasher_scent' }\n      ]\n    },\n    q3_dishwasher_scent: {\n      headline: 'Last one',\n      question: 'Which scent is yours?',\n      answers: [\n        { text: 'Eucalyptus', set: { scent: 'eucalyptus' }, next: 'email' },\n        { text: 'Lemon Myrtle', set: { scent: 'lemon_myrtle' }, next: 'email' },\n        { text: 'Peppermint', set: { scent: 'peppermint' }, next: 'email' },\n        { text: 'Not sure \u2014 show me your most popular', set: { scent: 'eucalyptus' }, next: 'email' }\n      ]\n    },\n    q2_kitchen: {\n      headline: \"Got it \u2014 the kitchen.\",\n      question: \"Where does it matter most?\",\n      answers: [\n        { text: \"The bench where I prep food\", set: { branch: 'bench_spray' }, next: 'q3_bench_scent' },\n        { text: \"The dishes we wash by hand\", set: { branch: 'dishwash_liquid' }, next: 'q3_dishwash_scent' },\n        { text: \"The soap on everyone's hands\", set: { branch: 'hand_wash' }, next: 'q3_handwash_scent' }\n      ]\n    },\n    q3_bench_scent: {\n      headline: 'Last one',\n      question: 'Which scent is yours?',\n      answers: [\n        { text: 'Eucalyptus', set: { scent: 'eucalyptus' }, next: 'email' },\n        { text: 'Lemon Myrtle', set: { scent: 'lemon_myrtle' }, next: 'email' },\n        { text: 'Lavender', set: { scent: 'lavender' }, next: 'email' },\n        { text: 'Peppermint', set: { scent: 'peppermint' }, next: 'email' },\n        { text: 'Citrus Burst', set: { scent: 'citrus_burst' }, next: 'email' },\n        { text: 'Not sure \u2014 show me your most popular', set: { scent: 'eucalyptus' }, next: 'email' }\n      ]\n    },\n    q3_dishwash_scent: {\n      headline: 'Last one',\n      question: 'Scented or fragrance-free?',\n      answers: [\n        { text: 'Eucalyptus', set: { scent: 'eucalyptus' }, next: 'email' },\n        { text: 'No scent', set: { scent: 'unscented' }, next: 'email' }\n      ]\n    },\n    q3_handwash_scent: {\n      headline: 'Last one',\n      question: 'Which scent is yours?',\n      answers: [\n        { text: 'Bergamot, Geranium & Rose', set: { scent: 'bergamot' }, next: 'email' },\n        { text: 'Eucalyptus & Lemon Scented Tea Tree', set: { scent: 'eucalyptus' }, next: 'email' },\n        { text: 'Grapefruit, Orange & Lime', set: { scent: 'grapefruit' }, next: 'email' },\n        { text: 'Sensitive Skin (Unscented)', set: { scent: 'sensitive' }, next: 'email' }\n      ]\n    },\n    q2_shower: {\n      headline: \"Got it \u2014 the shower.\",\n      question: \"What bothers you most?\",\n      answers: [\n        { text: \"What I'm breathing while I clean\", set: { branch: 'shower', version: 'A' }, next: 'email' },\n        { text: \"The chemical smell hangs around for hours\", set: { branch: 'shower', version: 'B' }, next: 'email' },\n        { text: \"My kids use that shower\", set: { branch: 'shower', version: 'C' }, next: 'email' },\n        { text: \"It's the last thing I haven't switched\", set: { branch: 'shower', version: 'D' }, next: 'email' }\n      ]\n    },\n    q2_glass_ss: {\n      headline: \"Got it \u2014 the shine.\",\n      question: \"Which surfaces?\",\n      answers: [\n        { text: \"Mirrors, windows, shower screen\", set: { branch: 'glass_stainless', surface: 'glass' }, next: 'email' },\n        { text: \"Fridge, rangehood, sink\", set: { branch: 'glass_stainless', surface: 'stainless_steel' }, next: 'email' },\n        { text: \"Both \u2014 nothing shines like it should\", set: { branch: 'glass_stainless', surface: 'both' }, next: 'email' }\n      ]\n    }\n  };\n\n  /* ============================================================\n     PRODUCTS \u2014 matched outcome \u2192 display data + cart links\n     ============================================================ */\n  const PRODUCTS = {\n    mould_solution_kit: {\n      name: 'Clove & Eucalyptus Mould Spray',\n      size: '500ml \u2014 Australian made',\n      rrp: 22.00, price: 18.70, save: 3.30,\n      img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/114.jpg?v=1723643253',\n      variant: '49750937502009',\n      kit: { label: 'THE FULL MOULD RESET \u2014 25% OFF', headline: 'Sort the mould. Stock the laundry.', desc: 'Mould Spray for tile, grout and silicone. Wall Cleaner for painted walls and ceilings. Plus Eucalyptus Laundry Powder \u2014 1.5 kg, about 125 washes of the same clean.', products: 'Mould Spray 500ml + Wall Cleaner 500ml + Eucalyptus Laundry Powder 1.5kg', rrp: 74.00, price: 55.50, save: 18.50, variants: '49750937502009:1,49751074996537:1,52229701763385:1', discountCode: 'MOULDKIT25', saveText: 'Save $18.50 \u2014 25% off the bundle' }\n    },\n    wall_cleaner: {\n      name: 'All Natural Mould Remover Wall Cleaner',\n      size: '500ml \u2014 Australian made',\n      rrp: 19.00, price: 16.15, save: 2.85,\n      img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/724.png?v=1723645084',\n      variant: '49751074996537',\n      kit: { label: 'THE FULL MOULD RESET \u2014 25% OFF', headline: 'Sort the walls. Stock the laundry.', desc: 'Wall Cleaner for painted walls and ceilings. Mould Spray for tile, grout and silicone. Plus Eucalyptus Laundry Powder \u2014 1.5 kg, about 125 washes of the same clean.', products: 'Wall Cleaner 500ml + Mould Spray 500ml + Eucalyptus Laundry Powder 1.5kg', rrp: 74.00, price: 55.50, save: 18.50, variants: '49751074996537:1,49750937502009:1,52229701763385:1', discountCode: 'MOULDKIT25', saveText: 'Save $18.50 \u2014 25% off the bundle' }\n    },\n    complete_mould_kit: {\n      name: 'The Mould + Wall Kit',\n      size: 'Mould Spray + Wall Cleaner \u2014 both 500ml',\n      rrp: 41.00, price: 34.85, save: 6.15,\n      img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/114.jpg?v=1723643253',\n      variant: '49750937502009',\n      cart_variants: '49750937502009:1,49751074996537:1',\n      kit: { label: 'THE FULL MOULD RESET \u2014 25% OFF', headline: 'Add the laundry powder, unlock 25% off the lot.', desc: 'Your kit, plus Eucalyptus Laundry Powder \u2014 1.5 kg, about 125 washes of the same clean for everything you wear.', products: 'Mould Spray 500ml + Wall Cleaner 500ml + Eucalyptus Laundry Powder 1.5kg', rrp: 74.00, price: 55.50, save: 18.50, variants: '49750937502009:1,49751074996537:1,52229701763385:1', discountCode: 'MOULDKIT25', saveText: 'Save $18.50 \u2014 25% off the bundle' }\n    },\n    laundry_powder_eucalyptus: { name: 'Eucalyptus Laundry Powder', size: '1.5 kg \u2014 Australian made', rrp: 33.00, price: 28.05, save: 4.95, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/The_Australian_Eucalyptus_Oil_Company_-_The_Australian_Eucalyptus_Oil_Company_Eucalyptus_Laundry_Powder_-_Best_Laundry_Product-2_9af766bd-b4dd-4c02-8427-25262561302d.jpg?v=1776344351', variant: '52229701763385', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your dishwasher', desc: 'Same Eucalyptus. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Eucalyptus Laundry Powder 1.5kg + Eucalyptus Dishwasher Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52229701763385:1,52283942469945:1' } },\n    laundry_powder_lavender: { name: 'Lavender Laundry Powder', size: '1.5 kg \u2014 Australian made', rrp: 33.00, price: 28.05, save: 4.95, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/116_4fbbc10a-dbea-43b8-a560-26b844f5c89e.jpg?v=1776344350', variant: '52229701927225', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your dishwasher', desc: 'Top-selling Eucalyptus Dishwasher Powder. Same plant + mineral blend, same 100% money-back guarantee.', products: 'Lavender Laundry Powder 1.5kg + Eucalyptus Dishwasher Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52229701927225:1,52283942469945:1' } },\n    laundry_powder_peppermint: { name: 'Peppermint Laundry Powder', size: '1.5 kg \u2014 Australian made', rrp: 33.00, price: 28.05, save: 4.95, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/242_b30c4c84-de6f-4a8d-8ef4-02999266caef.jpg?v=1776344351', variant: '52229702091065', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your dishwasher', desc: 'Same Peppermint. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Peppermint Laundry Powder 1.5kg + Peppermint Dishwasher Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52229702091065:1,52283942797625:1' } },\n    laundry_powder_lemon_myrtle: { name: 'Lemon Myrtle Laundry Powder', size: '1.5 kg \u2014 Australian made', rrp: 33.00, price: 28.05, save: 4.95, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/LMLP1_a7fbb246-977a-4ed5-9f8a-0f56ffc040a7.jpg?v=1776344350', variant: '52229702254905', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your dishwasher', desc: 'Same Lemon Myrtle. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Lemon Myrtle Laundry Powder 1.5kg + Lemon Myrtle Dishwasher Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52229702254905:1,52283942633785:1' } },\n    laundry_liquid_eucalyptus: { name: 'Eucalyptus Laundry Liquid', size: '1 Litre \u2014 Australian made', rrp: 21.00, price: 17.85, save: 3.15, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/LL1.jpg?v=1723643395', variant: '49750943334713', kit: { label: 'LAUNDRY LIQUID + LAUNDRY POWDER COMBO', headline: 'Stock the laundry naturally', desc: 'Same eucalyptus. Same plant-based blend. Same 100% money-back guarantee.', products: 'Laundry Liquid 1L + Eucalyptus Laundry Powder 1.5kg', rrp: 54.00, price: 45.90, save: 8.10, variants: '49750943334713:1,52229701763385:1' } },\n    dishwasher_eucalyptus: { name: 'Eucalyptus Dishwasher Powder', size: '1.5 kg \u2014 Australian made', rrp: 34.00, price: 28.90, save: 5.10, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/DW1_852efcae-5313-4954-867d-34f3f1041f8c.jpg?v=1776403802', variant: '52283942469945', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your laundry', desc: 'Same Eucalyptus. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Eucalyptus Dishwasher Powder 1.5kg + Eucalyptus Laundry Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52283942469945:1,52229701763385:1' } },\n    dishwasher_lemon_myrtle: { name: 'Lemon Myrtle Dishwasher Powder', size: '1.5 kg \u2014 Australian made', rrp: 34.00, price: 28.90, save: 5.10, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/169_ce7e67cb-6d9d-4901-b535-023f19f0d12d.jpg?v=1776403801', variant: '52283942633785', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your laundry', desc: 'Same Lemon Myrtle. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Lemon Myrtle Dishwasher Powder 1.5kg + Lemon Myrtle Laundry Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52283942633785:1,52229702254905:1' } },\n    dishwasher_peppermint: { name: 'Peppermint Dishwasher Powder', size: '1.5 kg \u2014 Australian made', rrp: 34.00, price: 28.90, save: 5.10, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/PMintDW1_ffcbba29-8a28-40ba-a761-2b58a19eea7f.jpg?v=1776403802', variant: '52283942797625', kit: { label: 'DISHWASHER + LAUNDRY POWDER COMBO', headline: 'Pair it with your laundry', desc: 'Same Peppermint. Same plant + mineral blend. Same 100% money-back guarantee.', products: 'Peppermint Dishwasher Powder 1.5kg + Peppermint Laundry Powder 1.5kg', rrp: 67.00, price: 56.95, save: 10.05, variants: '52283942797625:1,52229702091065:1' } },\n    bench_spray_eucalyptus: { name: 'Eucalyptus Bench Spray', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/The_Australian_Eucalyptus_Oil_Company_-_Australian_Eucalyptus_Bench_Spray_-_Best_Natural_Cleaning_Product_2_a3c9fd8b-499a-4609-8bfe-dd57ac3ad099.jpg?v=1776254818', variant: '52146498240825', kit: { label: 'BENCH SPRAY + DISHWASH LIQUID COMBO', headline: 'Pair it with the sink', desc: 'Plant-based duo for the kitchen.', products: 'Eucalyptus Bench Spray + Eucalyptus Dishwash Liquid', rrp: 32.00, price: 27.20, save: 4.80, variants: '52146498240825:1,52600870175033:1' } },\n    bench_spray_lavender: { name: 'Lavender Bench Spray', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/LAVSC500_60a593e7-2f5f-4950-97ba-42f187912ebf.jpg?v=1776254818', variant: '52146498339129', kit: { label: 'BENCH SPRAY + DISHWASH LIQUID COMBO', headline: 'Pair it with the sink', desc: 'Plant-based duo for the kitchen.', products: 'Lavender Bench Spray + Eucalyptus Dishwash Liquid', rrp: 32.00, price: 27.20, save: 4.80, variants: '52146498339129:1,52600870175033:1' } },\n    bench_spray_peppermint: { name: 'Peppermint Bench Spray', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/PSC500_ac03b9b9-0927-440e-937a-ee1983e4378e.jpg?v=1776254817', variant: '52146498437433', kit: { label: 'BENCH SPRAY + DISHWASH LIQUID COMBO', headline: 'Pair it with the sink', desc: 'Plant-based duo for the kitchen.', products: 'Peppermint Bench Spray + Eucalyptus Dishwash Liquid', rrp: 32.00, price: 27.20, save: 4.80, variants: '52146498437433:1,52600870175033:1' } },\n    bench_spray_lemon_myrtle: { name: 'Lemon Myrtle Bench Spray', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/LMSC500_7fad47a3-9474-41f0-973c-710580c57058.jpg?v=1776254818', variant: '52146498535737', kit: { label: 'BENCH SPRAY + DISHWASH LIQUID COMBO', headline: 'Pair it with the sink', desc: 'Plant-based duo for the kitchen.', products: 'Lemon Myrtle Bench Spray + Eucalyptus Dishwash Liquid', rrp: 32.00, price: 27.20, save: 4.80, variants: '52146498535737:1,52600870175033:1' } },\n    bench_spray_citrus_burst: { name: 'Citrus Burst Bench Spray', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/480_6c68ac9c-406d-4e36-b2db-6469baa5e17a.jpg?v=1776254818', variant: '52146498634041', kit: { label: 'BENCH SPRAY + DISHWASH LIQUID COMBO', headline: 'Pair it with the sink', desc: 'Plant-based duo for the kitchen.', products: 'Citrus Burst Bench Spray + Eucalyptus Dishwash Liquid', rrp: 32.00, price: 27.20, save: 4.80, variants: '52146498634041:1,52600870175033:1' } },\n    dishwash_liquid_eucalyptus: { name: 'Eucalyptus Dishwash Liquid', size: '500 ml \u2014 Australian made', rrp: 16.00, price: 13.60, save: 2.40, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/270_9aeb1501-ee42-4111-9738-ddbde580c75d.jpg?v=1776923209', variant: '52600870175033', kit: { label: 'DISHWASH LIQUID + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Eucalyptus Dishwash Liquid + Eucalyptus Bench Spray', rrp: 32.00, price: 27.20, save: 4.80, variants: '52600870175033:1,52146498240825:1' } },\n    dishwash_liquid_unscented: { name: 'Unscented Dishwash Liquid', size: '500 ml \u2014 Australian made', rrp: 15.00, price: 12.75, save: 2.25, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/271.jpg?v=1723643825', variant: '52600870240569', kit: { label: 'DISHWASH LIQUID + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Unscented Dishwash Liquid + Eucalyptus Bench Spray', rrp: 31.00, price: 26.35, save: 4.65, variants: '52600870240569:1,52146498240825:1' } },\n    hand_wash_bergamot: { name: 'Bergamot, Geranium & Rose Pure Castile Hand Wash', size: '500 ml \u2014 Australian made', rrp: 22.00, price: 18.70, save: 3.30, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/485_5ea198bc-68bd-456a-98c9-6aae28a15f40.jpg?v=1776724638', variant: '52445516890425', kit: { label: 'HAND WASH + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Bergamot Hand Wash + Lavender Bench Spray', rrp: 38.00, price: 32.30, save: 5.70, variants: '52445516890425:1,52146498339129:1' } },\n    hand_wash_grapefruit: { name: 'Grapefruit, Orange & Lime Pure Castile Hand Wash', size: '500 ml \u2014 Australian made', rrp: 22.00, price: 18.70, save: 3.30, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/486_6621aa0a-da69-4462-abc2-cf7cca57afea.jpg?v=1776724638', variant: '52445516955961', kit: { label: 'HAND WASH + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Grapefruit Hand Wash + Citrus Burst Bench Spray', rrp: 38.00, price: 32.30, save: 5.70, variants: '52445516955961:1,52146498634041:1' } },\n    hand_wash_eucalyptus: { name: 'Eucalyptus & Lemon Tea Tree Pure Castile Hand Wash', size: '500 ml \u2014 Australian made', rrp: 22.00, price: 18.70, save: 3.30, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/487_200024f9-4316-4c00-b446-473b10a17d89.jpg?v=1776724639', variant: '52445517021497', kit: { label: 'HAND WASH + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Eucalyptus Hand Wash + Eucalyptus Bench Spray', rrp: 38.00, price: 32.30, save: 5.70, variants: '52445517021497:1,52146498240825:1' } },\n    hand_wash_sensitive: { name: 'Sensitive (Unscented) Pure Castile Hand Wash', size: '500 ml \u2014 Australian made', rrp: 21.00, price: 17.85, save: 3.15, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/Soap_6377347b-0e28-4845-be84-30e4d44ef793.jpg?v=1776724641', variant: '52445517087033', kit: { label: 'HAND WASH + BENCH SPRAY COMBO', headline: 'Pair it with the bench', desc: 'Plant-based duo for the kitchen.', products: 'Sensitive Hand Wash + Eucalyptus Bench Spray', rrp: 37.00, price: 31.45, save: 5.55, variants: '52445517087033:1,52146498240825:1' } },\n    shower: { name: 'Low Vapour Shower Cleaner', size: '500 ml \u2014 Australian made', rrp: 17.00, price: 14.45, save: 2.55, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/481.jpg?v=1723644461', variant: '49751021584697', kit: { label: 'SHOWER + MOULD SPRAY KIT', headline: 'Pair it with the mould spray', desc: 'Shower cleaner removes scum. Mould spray kills regrowth at the root.', products: 'Shower Cleaner 500ml + Mould Spray 500ml', rrp: 39.00, price: 33.15, save: 5.85, variants: '49751021584697:1,49750937502009:1' } },\n    glass_stainless_glass: { name: 'Eucalyptus Hydrosol Glass Cleaner', size: '500 ml \u2014 Australian made', rrp: 15.50, price: 13.18, save: 2.32, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/476.jpg?v=1723644432', variant: '49751020273977', kit: { label: 'GLASS + STAINLESS STEEL KIT', headline: 'Shine the whole house', desc: 'Windows, mirrors, splashbacks, appliances.', products: 'Glass Cleaner + Stainless Steel Cleaner', rrp: 30.50, price: 25.93, save: 4.57, variants: '49751020273977:1,49751020372281:1' } },\n    glass_stainless_stainless_steel: { name: 'All Natural Stainless Steel Cleaner', size: '500 ml \u2014 Australian made', rrp: 15.00, price: 12.75, save: 2.25, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/477.jpg?v=1723644436', variant: '49751020372281', kit: { label: 'GLASS + STAINLESS STEEL KIT', headline: 'Shine the whole house', desc: 'Windows, mirrors, splashbacks, appliances.', products: 'Stainless Steel Cleaner + Glass Cleaner', rrp: 30.50, price: 25.93, save: 4.57, variants: '49751020372281:1,49751020273977:1' } },\n    glass_stainless_both: { name: 'The Shine Kit \u2014 Glass + Stainless Steel', size: 'Glass Cleaner + Stainless Steel Cleaner \u2014 both 500ml', rrp: 30.50, price: 25.93, save: 4.57, img: 'https://cdn.shopify.com/s/files/1/0734/6146/5401/files/476.jpg?v=1723644432', variant: '49751020273977', cart_variants: '49751020273977:1,49751020372281:1' }\n  };\n\n  /* ============================================================\n     STATE\n     ============================================================ */\n  const state = {\n    screen: null, history: [], branch: null, product_path: null, surface: null,\n    scent: null, version: null, email: null, first_name: null, phone: null, sms_consent: false,\n    insert_burnt: false, matched_product_key: null\n  };\n\n  /* ============================================================\n     UTILITIES\n     ============================================================ */\n  function cookieGet(name) {\n    const v = ('; ' + document.cookie).split('; ' + name + '=');\n    return v.length === 2 ? v.pop().split(';').shift() : null;\n  }\n  function cookieSet(name, value, days) {\n    const expires = new Date(Date.now() + days * 864e5).toUTCString();\n    document.cookie = name + '=' + value + '; expires=' + expires + '; path=/';\n  }\n  function cookieDelete(name) {\n    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/';\n  }\n  function el(tag, attrs, children) {\n    const e = document.createElement(tag);\n    if (attrs) for (const k in attrs) {\n      if (k === 'class') e.className = attrs[k];\n      else if (k === 'onclick') e.addEventListener('click', attrs[k]);\n      else if (k === 'html') e.innerHTML = attrs[k];\n      else e.setAttribute(k, attrs[k]);\n    }\n    if (children) (Array.isArray(children) ? children : [children]).forEach(c => {\n      if (typeof c === 'string') e.appendChild(document.createTextNode(c));\n      else if (c) e.appendChild(c);\n    });\n    return e;\n  }\n  function ensureRoot() {\n    let root = document.getElementById('aeoc-quiz-root');\n    if (!root) {\n      root = document.createElement('div');\n      root.id = 'aeoc-quiz-root';\n      document.body.appendChild(root);\n    }\n    return root;\n  }\n  function mount(node) {\n    const root = ensureRoot();\n    root.innerHTML = '';\n    root.appendChild(node);\n  }\n  function clear() { const r = document.getElementById('aeoc-quiz-root'); if (r) r.innerHTML = ''; }\n  function fmtMoney(n) { return '$' + n.toFixed(2); }\n  function log(msg, data) {\n    if (typeof console !== 'undefined' && console.log) console.log('[AEOCQuiz]', msg, data || '');\n  }\n\n  /* ============================================================\n     ANALYTICS \u2014 per-step funnel tracking (GTM / GA4 dataLayer)\n     ============================================================ */\n  var quizStartVia = 'direct';\n  var quizSession = '';\n  function getQuizSession() {\n    if (!quizSession) {\n      try { quizSession = Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8); }\n      catch (e) { quizSession = 'session'; }\n    }\n    return quizSession;\n  }\n  // A prompt can be hidden by a page that suppresses the quiz (LP focus mode sets\n  // [class*=\"aeoc-quiz\"]{display:none!important}). The JS has no idea, so it used to\n  // log prompt_shown for a popup nobody could see -- 3,006 phantom impressions over\n  // 13 days, which dragged the measured start rate from ~17% down to 11.4%.\n  // Never count a prompt the customer cannot actually see.\n  // Landing pages carry their own sticky buy bar at the bottom of the viewport.\n  // The slide-up is z-index 9000 and would sit straight on top of it, swallowing taps\n  // meant for the CTA (measured on mould-wall-cleaner-lp: 55px of a 71px bar covered,\n  // hit test on \"$19.00 Get rid of my mould\" returned the quiz). Never cover a page's\n  // own call to action - find the tallest full-width bar pinned to the bottom and clear it.\n  function aeocBottomObstruction(self) {\n    var lift = 0;\n    try {\n      var nodes = document.body.querySelectorAll('*');\n      for (var i = 0; i < nodes.length; i++) {\n        var e = nodes[i];\n        if (e === self || self.contains(e) || e.contains(self)) continue;\n        var c = getComputedStyle(e);\n        if (c.position !== 'fixed' && c.position !== 'sticky') continue;\n        if (c.display === 'none' || c.visibility === 'hidden' || c.opacity === '0') continue;\n        var r = e.getBoundingClientRect();\n        if (r.height < 8 || r.width < window.innerWidth * 0.5) continue;\n        if (r.bottom >= window.innerHeight - 6 && r.top > window.innerHeight * 0.4) {\n          if (r.height > lift) lift = r.height;\n        }\n      }\n    } catch (e) {}\n    return lift;\n  }\n\n  function aeocPromptVisible(node) {\n    if (!node || !node.isConnected) return false;\n    try {\n      var cs = getComputedStyle(node);\n      if (cs.display === 'none' || cs.visibility === 'hidden') return false;\n      var r = node.getBoundingClientRect();\n      return r.width > 0 && r.height > 0;\n    } catch (e) { return true; }   // can't tell -> behave as before\n  }\n\n  function track(step, props) {\n    var data = Object.assign({ event: 'aeoc_quiz', quiz_step: step, session: getQuizSession() }, props || {});\n    try {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push(data);\n      if (typeof window.gtag === 'function') window.gtag('event', 'aeoc_quiz_' + step, props || {});\n    } catch (e) { /* never let tracking break the quiz */ }\n    if (CONFIG.quizLogUrl) {\n      try {\n        fetch(CONFIG.quizLogUrl, {\n          method: 'POST',\n          mode: 'no-cors',\n          headers: { 'Content-Type': 'text/plain;charset=utf-8' },\n          body: JSON.stringify(Object.assign({}, data, {\n            url: (typeof location !== 'undefined' ? location.pathname : ''),\n            ua: (typeof navigator !== 'undefined' ? navigator.userAgent : '')\n          }))\n        });\n      } catch (e) { /* logging must never break the quiz */ }\n    }\n    log('track:' + step, props || '');\n  }\n\n  /* ============================================================\n     KLAVIYO EVENT PUSH\n     ============================================================ */\n  function fireKlaviyoEvent() {\n    const payload = {\n      branch: state.branch,\n      scent: state.scent || null,\n      surface: state.surface || null,\n      version: state.version || null,\n      product_path: state.product_path || null,\n      matched_variant_id: PRODUCTS[state.matched_product_key]?.variant || null,\n      quiz_completed_at: new Date().toISOString()\n    };\n    const identify = { $email: state.email, $first_name: state.first_name || undefined };\n    log('Klaviyo identify:', identify);\n    log('Klaviyo track \"Completed Quiz\":', payload);\n    if (window.klaviyo && typeof window.klaviyo.push === 'function' && CONFIG.klaviyoPublicSiteId !== 'PLACEHOLDER') {\n      window.klaviyo.push(['identify', identify]);\n      window.klaviyo.push(['track', 'Completed Quiz', payload]);\n      window.klaviyo.push(['identify', { quiz_taken: true, quiz_match_branch: state.branch, quiz_match_scent: state.scent }]);\n    } else {\n      log('Klaviyo not loaded or public site ID is placeholder \u2014 event will be lost. Set window.AEOC_QUIZ_CONFIG.klaviyoPublicSiteId.');\n    }\n  }\n\n  /* Subscribe the email to the dedicated Quiz list WITH consent (Klaviyo Client API). */\n  function subscribeToQuizList(email) {\n    if (!CONFIG.quizListId || CONFIG.klaviyoPublicSiteId === 'PLACEHOLDER') {\n      log('Quiz list subscribe skipped \u2014 no quizListId or placeholder site id');\n      return;\n    }\n    var body = {\n      data: {\n        type: 'subscription',\n        attributes: {\n          custom_source: 'Product Quiz',\n          profile: { data: { type: 'profile', attributes: {\n            email: email,\n            properties: {\n              quiz_match_branch: state.branch || null,\n              quiz_match_scent: state.scent || null,\n              quiz_match_product: state.matched_product_key || null\n            }\n          } } }\n        },\n        relationships: { list: { data: { type: 'list', id: CONFIG.quizListId } } }\n      }\n    };\n    try {\n      fetch('https://a.klaviyo.com/client/subscriptions/?company_id=' + encodeURIComponent(CONFIG.klaviyoPublicSiteId), {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', revision: '2024-10-15' },\n        body: JSON.stringify(body)\n      }).then(function (r) { log('Quiz list subscribe HTTP', r.status); })\n        .catch(function (e) { log('Quiz list subscribe error', e); });\n    } catch (e) { log('Quiz list subscribe threw', e); }\n  }\n\n  /* Fire-and-forget: notify the SMS concierge of this opt-in (answers + email + optional mobile/consent).\n     Mirrors subscribeToQuizList \u2014 no-cors, try/catch, never blocks or breaks the quiz. */\n  function fireConciergeOptin() {\n    if (!CONFIG.conciergeOptinUrl) return;\n    try {\n      if (!state.matched_product_key) { try { state.matched_product_key = resolveMatchedProduct(); } catch (e) {} }\n      var payload = {\n        email: state.email || null,\n        phone: state.phone || null,\n        sms_consent: !!state.sms_consent,\n        branch: state.branch || null,\n        scent: state.scent || null,\n        surface: state.surface || null,\n        version: state.version || null,\n        product_path: state.product_path || null,\n        matched_product_key: state.matched_product_key || null,\n        matched_variant_id: (PRODUCTS[state.matched_product_key] && PRODUCTS[state.matched_product_key].variant) || null,\n        source: 'quiz',\n        ts: new Date().toISOString()\n      };\n      fetch(CONFIG.conciergeOptinUrl, {\n        method: 'POST',\n        mode: 'no-cors',\n        headers: { 'Content-Type': 'text/plain;charset=utf-8' },\n        body: JSON.stringify(payload)\n      }).catch(function () {});\n      log('Concierge opt-in fired', { phone: !!state.phone, sms: !!state.sms_consent, branch: state.branch });\n    } catch (e) { log('Concierge opt-in threw (ignored)', e); }\n  }\n\n  /* Value-first email capture: store + subscribe (consent) + fire flow event + track. */\n  function handleQuizEmail(email, onDone) {\n    state.email = email;\n    state.first_name = null;\n    cookieSet(CONFIG.cookies.quizTaken, '1', 30);\n    subscribeToQuizList(email);\n    fireKlaviyoEvent();\n    fireConciergeOptin();\n    track('email_captured', { branch: state.branch });\n    log('Quiz email captured:', email);\n    if (onDone) onDone();\n  }\n\n  /* ============================================================\n     TRIGGER SYSTEM\n     ============================================================ */\n  const triggers = {\n    showWelcome() {\n      if (CONFIG.isPdp || CONFIG.isLp) return; // product pages AND landing pages get the earned slide-up, not the 8s welcome\n      if (cookieGet(CONFIG.cookies.quizTaken) || cookieGet(CONFIG.cookies.welcomeDismissed) || cookieGet(CONFIG.cookies.welcomeShown)) return;\n      const c = CONFIG.copy.welcomePopup;\n      const overlay = el('div', { class: 'aeoc-quiz-popup-overlay', id: 'aeoc-quiz-welcome-overlay' });\n      // The popup IS Question 1: tapping a chip = started + Q1 answered in one motion.\n      const chips = el('div', { class: 'aeoc-quiz-popup__chips' }, Q1.answers.map(ans =>\n        el('button', { class: 'aeoc-quiz-popup__chip', onclick: () => { overlay.remove(); startFromChip(ans); } }, ans.text)\n      ));\n      const popup = el('div', { class: 'aeoc-quiz-popup' }, [\n        el('div', { class: 'aeoc-quiz-popup__headline' }, CONFIG.saleMode ? c.headlineSale : (CONFIG.isReturning ? c.headlineReturning : c.headline)),\n        el('div', { class: 'aeoc-quiz-popup__trust' }, [\n          el('span', { class: 'aeoc-quiz-popup__stars' }, '\\u2605 ' + c.trust.rating),\n          el('span', { class: 'aeoc-quiz-popup__reviews' }, c.trust.reviews),\n          el('span', { class: 'aeoc-quiz-popup__trust-sep' }),\n          el('span', { class: 'aeoc-quiz-popup__press' }, [\n            el('span', { class: 'aeoc-quiz-popup__press-label' }, c.trust.seenLabel),\n            el('img', { class: 'aeoc-quiz-popup__press-logo', src: c.trust.logoUrl, alt: c.trust.logoAlt, loading: 'lazy' })\n          ])\n        ]),\n        el('div', { class: 'aeoc-quiz-popup__prompt' }, c.prompt),\n        chips,\n        el('p', { class: 'aeoc-quiz-popup__micro' }, c.micro),\n        el('button', { class: 'aeoc-quiz-popup__dismiss', onclick: () => { overlay.remove(); cookieSet(CONFIG.cookies.welcomeDismissed, '1', 14); } }, c.dismiss)\n      ]);\n      overlay.appendChild(popup);\n      document.body.appendChild(overlay);\n      void overlay.offsetWidth; // commit opacity:0 first so the fade still runs, then reveal directly \u2014 rAF is paused in background tabs and would otherwise leave the overlay invisible\n      overlay.classList.add('is-visible');\n      if (!aeocPromptVisible(overlay)) {\n        overlay.remove();                       // orphan node, and do NOT burn the cookie\n        log('Welcome popup suppressed by CSS on this page - not counted');\n        return;\n      }\n      cookieSet(CONFIG.cookies.welcomeShown, '1', 1 / 24); // show once, then stay quiet for 1 hour even if ignored\n      log('Welcome popup shown');\n      track('prompt_shown', { via: 'welcome' });\n    },\n\n    showPdpSlideup() {\n      if (cookieGet(CONFIG.cookies.quizTaken) || cookieGet(CONFIG.cookies.pdpSlideupShown)) return;\n      if (document.getElementById('aeoc-quiz-pdp-slideup')) return;\n      const slideup = el('div', { class: 'aeoc-quiz-pdp-slideup', id: 'aeoc-quiz-pdp-slideup' }, [\n        el('a', { class: 'aeoc-quiz-pdp-slideup__cta', href: '#', onclick: (e) => { e.preventDefault(); slideup.remove(); quizStartVia = (CONFIG.isLp ? 'lp' : 'pdp'); start(); } }, CONFIG.copy.pdpSlideup),\n        el('button', { class: 'aeoc-quiz-pdp-slideup__close', onclick: () => { slideup.remove(); cookieSet(CONFIG.cookies.pdpSlideupShown, '1', 1); } }, '\u00D7')\n      ]);\n      document.body.appendChild(slideup);\n      var aeocLift = aeocBottomObstruction(slideup);\n      if (aeocLift) slideup.style.bottom = (aeocLift + 12) + 'px';\n      void slideup.offsetWidth;\n      slideup.classList.add('is-visible');\n      // The bar sits at translateY(120%) until .is-visible applies. On some templates\n      // that rule does not win and it parks ~70px BELOW the fold, untappable. After the\n      // 0.4s transition, if it has not settled at translateY(0), force it inline.\n      setTimeout(function () {\n        if (!slideup.isConnected) return;\n        var t = getComputedStyle(slideup).transform;\n        if (t && t !== 'none' && t.replace(/\\s/g, '') !== 'matrix(1,0,0,1,0,0)') {\n          // a transition stalled by a throttled/unfocused tab outranks an inline style,\n          // so finish it first, then pin the end state\n          var lateLift = aeocBottomObstruction(slideup);\n        if (lateLift) slideup.style.bottom = (lateLift + 12) + 'px';\n        if (slideup.getAnimations) {\n            slideup.getAnimations().forEach(function (an) { try { an.finish(); } catch (e) {} });\n          }\n          slideup.style.transform = 'translateY(0)';\n          log('slide-up failed to settle - forced to translateY(0)');\n        }\n      }, 600);\n      if (!aeocPromptVisible(slideup)) {\n        slideup.remove();\n        log('PDP slide-up suppressed by CSS on this page - not counted');\n        return;\n      }\n      log('PDP slide-up shown');\n      track('prompt_shown', { via: CONFIG.isLp ? 'lp' : 'pdp' });\n    },\n\n    initWelcome() {\n      setTimeout(() => triggers.showWelcome(), CONFIG.delays.welcomeModalSeconds * 1000);\n    },\n\n    initPdpSlideup() {\n      // Only attach scroll listener if we're on a product page\n      if (!CONFIG.isPdp && !CONFIG.isLp) return;\n      if (cookieGet(CONFIG.cookies.quizTaken) || cookieGet(CONFIG.cookies.pdpSlideupShown)) return;\n      let dwellOk = false, scrollOk = false, fired = false;\n      const onScroll = () => {\n        if (fired) return;\n        const pct = (window.scrollY + window.innerHeight) / document.body.scrollHeight * 100;\n        if (pct >= CONFIG.delays.pdpSlideupScrollPercent) { scrollOk = true; check(); }\n      };\n      const check = () => {\n        if (fired) return;\n        if (dwellOk || scrollOk) {  // fire on EITHER 15s dwell OR 50% scroll (whichever comes first)\n          fired = true;\n          window.removeEventListener('scroll', onScroll);\n          triggers.showPdpSlideup();\n        }\n      };\n      setTimeout(() => { dwellOk = true; check(); }, CONFIG.delays.pdpSlideupDwellSeconds * 1000);\n      window.addEventListener('scroll', onScroll, { passive: true });\n    },\n\n    initHeaderLink() {\n      // Try to inject into existing nav. Fallback: append to header.\n      const link = el('a', {\n        class: 'aeoc-quiz-header-link',\n        href: '#',\n        id: 'aeoc-quiz-header-link',\n        onclick: (e) => { e.preventDefault(); quizStartVia = 'header'; start(); }\n      }, CONFIG.copy.headerLink);\n      // Common selectors for theme nav, in priority order\n      const targets = [\n        '[data-aeoc-quiz-link]',                         // explicit hook if Tony adds one\n        '.header__inline-menu',                          // Shopify Dawn-style\n        '.header .header__menu',\n        '.site-header__primary',\n        'header nav',\n        '.shopify-section-header nav',\n        'header'\n      ];\n      for (const sel of targets) {\n        const target = document.querySelector(sel);\n        if (target) {\n          target.appendChild(link);\n          log('Header link injected into', sel);\n          return;\n        }\n      }\n      // Fallback: floating top-right link\n      link.style.cssText = 'position:fixed;top:16px;right:16px;z-index:8000;background:rgba(255,255,255,0.95);border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,0.1);';\n      document.body.appendChild(link);\n      log('Header link added as fallback floating element \u2014 paste data-aeoc-quiz-link onto your nav element for cleaner placement');\n    }\n  };\n\n  /* ============================================================\n     QUIZ ENGINE\n     ============================================================ */\n  function start(ev) {\n    if (ev && ev.preventDefault) ev.preventDefault();\n    log('Quiz started');\n    Object.assign(state, { screen: null, history: [], branch: null, product_path: null, surface: null, scent: null, version: null, email: null, first_name: null, phone: null, sms_consent: false, insert_burnt: false, matched_product_key: null });\n    track('started', { via: quizStartVia });\n    quizStartVia = 'direct';\n    showScreen('q1');\n  }\n\n  // Welcome-popup chip tap: counts as started AND Q1 answered, lands on Q2.\n  // History seeded as if Q1 was shown, so '\u2190 Back' from Q2 renders the full Q1 screen.\n  function startFromChip(ans) {\n    log('Quiz started via welcome chip');\n    Object.assign(state, { screen: 'q1', history: [null], branch: null, product_path: null, surface: null, scent: null, version: null, email: null, first_name: null, phone: null, sms_consent: false, insert_burnt: false, matched_product_key: null });\n    track('started', { via: 'welcome' });\n    handleAnswer(ans);\n  }\n\n  function showScreen(key, isBack) {\n    if (!isBack) state.history.push(state.screen);\n    state.screen = key;\n    if (key === 'q1') return renderQuestion('q1', Q1, 0, 4);\n    if (key === 'email') return renderEmailGate(); // skippable email step shown before the result\n    if (key === 'calculating') return renderCalculating();\n    if (key === 'result') return renderResult();\n    const data = BRANCHES[key];\n    if (!data) { console.error('No screen for', key); return; }\n    const step = key.startsWith('q4') ? 3 : key.startsWith('q3') ? 2 : 1;\n    renderQuestion(key, data, step, 4);\n  }\n\n  function renderQuestion(key, data, step, total) {\n    const quiz = el('div', { class: 'aeoc-quiz is-visible' });\n    const header = el('div', { class: 'aeoc-quiz__header' }, [\n      el('div', { class: 'aeoc-quiz__progress' }, Array.from({ length: total }, (_, i) =>\n        el('div', { class: 'aeoc-quiz__progress-dot' + (i <= step ? ' is-active' : '') })\n      )),\n      el('div', { class: 'aeoc-quiz__counter' }, 'Question ' + (step + 1) + ' of ' + total),\n      el('button', { class: 'aeoc-quiz__close', onclick: closeQuiz, 'aria-label': 'Close' }, '\u00D7')\n    ]);\n    const body = el('div', { class: 'aeoc-quiz__body' });\n    if (data.headline) body.appendChild(el('div', { class: 'aeoc-quiz__headline' }, data.headline));\n    body.appendChild(el('h2', { class: 'aeoc-quiz__question' }, data.question));\n    const answers = el('div', { class: 'aeoc-quiz__answers' });\n    data.answers.forEach(ans => {\n      answers.appendChild(el('button', { class: 'aeoc-quiz__answer', onclick: () => handleAnswer(ans) }, ans.text));\n    });\n    body.appendChild(answers);\n    if (state.history.length > 1) {\n      body.appendChild(el('button', { class: 'aeoc-quiz__back', onclick: goBack }, '\u2190 Back'));\n    }\n    quiz.appendChild(header);\n    quiz.appendChild(body);\n    quiz.appendChild(el('div', { class: 'aeoc-quiz__trust' }, '\u2605 4.9 from 5,000+ reviews   \u00B7   Australian family-made since 1895   \u00B7   100% money-back guarantee'));\n    mount(quiz);\n    window.scrollTo(0, 0);\n  }\n\n  function handleAnswer(ans) {\n    if (ans.set) Object.assign(state, ans.set);\n    track('question_answered', { question: state.screen, next: ans.next });\n    log('Answer:', ans.text, 'State:', JSON.parse(JSON.stringify(state)));\n    showScreen(ans.next);\n  }\n\n  function goBack() {\n    const target = state.history.pop();\n    if (target) showScreen(target, true); // navigate back WITHOUT re-pushing the current screen\n  }\n\n  function closeQuiz() {\n    if (confirm('Close the quiz? Your answers will not be saved.')) {\n      clear();\n      state.screen = null;\n      log('Quiz closed by user');\n    }\n  }\n\n  // Discount tier: email opt-in = 10%; adding mobile + SMS consent bumps to 15%.\n  function activeDiscount() {\n    return state.sms_consent\n      ? { code: CONFIG.discountSms, percent: CONFIG.discountSmsPercent }\n      : { code: CONFIG.discountEmail, percent: CONFIG.discountEmailPercent };\n  }\n  function discPrice(rrp) { return +(rrp * (1 - activeDiscount().percent / 100)).toFixed(2); }\n\n  function renderEmailGate() {\n    const c = CONFIG.copy.emailGate;\n    const quiz = el('div', { class: 'aeoc-quiz is-visible' });\n    const header = el('div', { class: 'aeoc-quiz__header' }, [\n      el('div', { class: 'aeoc-quiz__progress' }, Array.from({ length: 4 }, () =>\n        el('div', { class: 'aeoc-quiz__progress-dot is-active' })\n      )),\n      el('div', { class: 'aeoc-quiz__counter' }, 'Almost there'),\n      el('button', { class: 'aeoc-quiz__close', onclick: closeQuiz, 'aria-label': 'Close' }, '\u00D7')\n    ]);\n    const body = el('div', { class: 'aeoc-quiz__body' });\n    const form = el('form', { id: 'aeoc-quiz-gate-form' });\n    form.appendChild((function () {\n      // AEOC gate v2 (Octane) 6/7/26 \u2014 one field, 15% flat, strand headline, blurred peek, visible skip.\n      var strandWords = { mould: 'mould', wall: 'mould', laundry_powder: 'laundry', laundry_liquid: 'laundry', dishwasher: 'dishwasher', bench_spray: 'kitchen', dishwash_liquid: 'kitchen', hand_wash: 'hand wash', shower: 'shower', glass_stainless: 'glass & stainless' };\n      var sw = strandWords[state.branch];\n      return el('h1', { class: 'aeoc-quiz__gate-headline' }, sw ? 'Your ' + sw + ' match is ready.' : c.headline);\n    })());\n    try {\n      var peekKey = resolveMatchedProduct();\n      var peekSrc = PRODUCTS[peekKey] && PRODUCTS[peekKey].img;\n      if (peekSrc) {\n        var peek = el('div', { style: 'text-align:center;margin:4px 0 10px;' });\n        peek.appendChild(el('img', { src: peekSrc, alt: 'Your match', style: 'width:110px;height:110px;object-fit:contain;filter:blur(12px);opacity:.85;' }));\n        form.appendChild(peek);\n      }\n    } catch (ePeek) { /* peek is optional */ }\n    form.appendChild(el('p', { class: 'aeoc-quiz__gate-subline' }, CONFIG.saleMode ? 'Where should we send it? Your match \u2014 plus a code for after the sale.' : (CONFIG.isReturning ? 'Where should we send it?' : c.subline)));\n    const errBox = el('div', { class: 'aeoc-quiz__error', id: 'aeoc-quiz-gate-error' });\n    errBox.style.display = 'none';\n    form.appendChild(errBox);\n    const emailIn = el('input', { class: 'aeoc-quiz__input', type: 'email', placeholder: c.emailPlaceholder, required: 'true', id: 'aeoc-quiz-gate-email', autocomplete: 'email', inputmode: 'email', 'aria-label': 'Email address' });\n    form.appendChild(emailIn);\n    const submitBtn = el('button', { class: 'aeoc-quiz__submit', type: 'submit' }, CONFIG.saleMode ? 'Show my match \u2192' : (CONFIG.isReturning ? c.cta : 'Show my match + 15% off \u2192'));\n    form.appendChild(submitBtn);\n    form.appendChild(el('p', { class: 'aeoc-quiz__micro', style: 'font-size:14px;color:#1a1a1a;margin-top:10px' }, CONFIG.isReturning ? c.micro : 'No spam \u2014 your match + 15% code land in your inbox. Unsubscribe anytime.'));\n    \n    form.addEventListener('submit', e => {\n      e.preventDefault();\n      const email = emailIn.value.trim();\n      if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n        errBox.textContent = 'We need a valid email to send your match.';\n        errBox.style.display = 'block';\n        return;\n      }\n      handleQuizEmail(email, () => showScreen('calculating'));\n    });\n    body.appendChild(form);\n    if (state.history.length > 1) {\n      body.appendChild(el('button', { class: 'aeoc-quiz__back', onclick: goBack }, '\u2190 Back'));\n    }\n    quiz.appendChild(header);\n    quiz.appendChild(body);\n    mount(quiz);\n    window.scrollTo(0, 0);\n  }\n\n  function renderCalculating() {\n    const quiz = el('div', { class: 'aeoc-quiz is-visible' });\n    const calc = el('div', { class: 'aeoc-quiz__calc' }, [\n      el('div', { class: 'aeoc-quiz__calc-spinner' }),\n      el('p', { class: 'aeoc-quiz__calc-text', id: 'aeoc-quiz-calc-text' }, CONFIG.copy.calculating[0])\n    ]);\n    quiz.appendChild(calc);\n    mount(quiz);\n    const text = document.getElementById('aeoc-quiz-calc-text');\n    let i = 0;\n    const interval = setInterval(() => {\n      i++;\n      if (i < CONFIG.copy.calculating.length) {\n        text.style.opacity = '0';\n        setTimeout(() => { text.textContent = CONFIG.copy.calculating[i]; text.style.opacity = '1'; }, 200);\n      }\n    }, CONFIG.delays.calculatingSeconds * 1000 / CONFIG.copy.calculating.length);\n    setTimeout(() => {\n      clearInterval(interval);\n      showScreen('result'); // Klaviyo event now fires only when the visitor opts in on the result page\n    }, CONFIG.delays.calculatingSeconds * 1000);\n  }\n\n  /* Value-first email capture block (used below the CTA + in the result exit-catch). */\n  function buildEmailCapture(opts) {\n    opts = opts || {};\n    const wrap = el('div', { class: 'aeoc-quiz-result__email' + (opts.cls ? ' ' + opts.cls : '') });\n    if (opts.headline) wrap.appendChild(el('p', { class: 'aeoc-quiz-result__email-headline' }, opts.headline));\n    const form = el('form');\n    const errBox = el('div', { class: 'aeoc-quiz__error' });\n    errBox.style.display = 'none';\n    const input = el('input', { class: 'aeoc-quiz__input', type: 'email', placeholder: 'your@email.com', autocomplete: 'email', inputmode: 'email', 'aria-label': 'Email address' });\n    const btn = el('button', { class: 'aeoc-quiz-result__email-btn', type: 'submit' }, opts.cta || 'Email my match + code');\n    form.appendChild(errBox);\n    form.appendChild(input);\n    form.appendChild(btn);\n    form.appendChild(el('p', { class: 'aeoc-quiz__micro' }, 'Your match + the occasional tip \u2014 unsubscribe any time.'));\n    form.addEventListener('submit', e => {\n      e.preventDefault();\n      const email = input.value.trim();\n      if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n        errBox.textContent = 'Enter a valid email and we\u2019ll send it over.';\n        errBox.style.display = 'block';\n        return;\n      }\n      handleQuizEmail(email, () => {\n        wrap.innerHTML = '';\n        wrap.appendChild(el('p', { class: 'aeoc-quiz-result__email-done' }, CONFIG.saleMode ? \"\u2713 Sent \u2014 check your inbox. Everything's on sale right now; your code is in there for after the sale ends.\" : '\u2713 Sent \u2014 check your inbox. Your code ' + activeDiscount().code + ' is already applied at checkout.'));\n      });\n    });\n    wrap.appendChild(form);\n    return wrap;\n  }\n\n  function resolveMatchedProduct() {\n    const b = state.branch;\n    if (b === 'mould') return state.product_path;\n    if (b === 'wall') return 'wall_cleaner';\n    if (b === 'shower') return 'shower';\n    if (b === 'glass_stainless') return 'glass_stainless_' + state.surface;\n    if (b === 'laundry_powder') return 'laundry_powder_' + state.scent;\n    if (b === 'laundry_liquid') return 'laundry_liquid_eucalyptus';\n    if (b === 'dishwasher') return 'dishwasher_' + state.scent;\n    if (b === 'bench_spray') return 'bench_spray_' + state.scent;\n    if (b === 'dishwash_liquid') return 'dishwash_liquid_' + state.scent;\n    if (b === 'hand_wash') return 'hand_wash_' + state.scent;\n    return null;\n  }\n\n  function renderResult() {\n    state.matched_product_key = resolveMatchedProduct();\n    const p = PRODUCTS[state.matched_product_key];\n    if (!p) { console.error('No product for state:', state); return; }\n    cookieSet(CONFIG.cookies.quizTaken, '1', 30); // completing the quiz stops re-prompts, even without email\n    track('result_shown', { branch: state.branch, product: state.matched_product_key });\n    const primaryCart = p.cart_variants || (p.variant + ':1');\n    // Returning customers can't use QUIZ15 (new-customers-only); during EOFY saleMode NO code is applied\n    // on-site either, so it never stacks on the sale price \u2014 the codes live in the emails only.\n    const noCode = CONFIG.isReturning || CONFIG.saleMode;\n    const discountQS = noCode ? '' : ('?discount=' + activeDiscount().code);\n    const cartLink = CONFIG.shopifyDomain + '/cart/' + primaryCart + discountQS;\n    // Kits may carry their own (deeper) bundle code \u2014 e.g. MOULDKIT25 on the mould trio.\n    const kitDiscountQS = (p.kit && p.kit.discountCode && !noCode) ? ('?discount=' + p.kit.discountCode) : discountQS;\n    const kitCartLink = p.kit ? CONFIG.shopifyDomain + '/cart/' + p.kit.variants + kitDiscountQS : null;\n    const quiz = el('div', { class: 'aeoc-quiz is-visible' });\n    const header = el('div', { class: 'aeoc-quiz__header' }, [\n      el('div', { class: 'aeoc-quiz__progress' }, Array.from({ length: 4 }, () =>\n        el('div', { class: 'aeoc-quiz__progress-dot is-active' })\n      )),\n      el('div', { class: 'aeoc-quiz__counter' }, 'Your match'),\n      el('button', { class: 'aeoc-quiz__close', onclick: closeQuiz, 'aria-label': 'Close' }, '\u00D7')\n    ]);\n    const body = el('div', { class: 'aeoc-quiz__body' });\n    const result = el('div', { class: 'aeoc-quiz-result' });\n    result.appendChild(el('div', { class: 'aeoc-quiz-result__brand' }, 'YOUR MATCH'));\n    result.appendChild(el('div', { class: 'aeoc-quiz-result__title' }, [\n      el('h1', null, state.first_name ? state.first_name + \", here's your match.\" : \"Here's your match.\"),\n      el('p', null, 'Based on your answers \u2014 this is the one that fits.')\n    ]));\n    result.appendChild(el('div', { class: 'aeoc-quiz-result__stars' }, [\n      el('span', { class: 'aeoc-quiz-result__stars-row' }, '\u2605\u2605\u2605\u2605\u2605'),\n      el('span', { class: 'aeoc-quiz-result__stars-text' }, '4.9 average from 5,000+ reviews')\n    ]));\n    const hero = el('div', { class: 'aeoc-quiz-result__hero' });\n    if (p.cart_variants) {\n      const heroVariantIds = p.cart_variants.split(',').map(v => v.split(':')[0]);\n      const heroImgs = heroVariantIds.map(vid => {\n        const match = Object.values(PRODUCTS).find(prod => prod.variant === vid);\n        return match ? match.img : null;\n      }).filter(Boolean);\n      const imgStrip = el('div', { class: 'aeoc-quiz-result__hero-imgs' });\n      heroImgs.forEach((src, i) => {\n        imgStrip.appendChild(el('img', { src: src, alt: '', class: 'aeoc-quiz-result__hero-img' }));\n        if (i < heroImgs.length - 1) imgStrip.appendChild(el('span', { class: 'aeoc-quiz-result__hero-plus' }, '+'));\n      });\n      hero.appendChild(imgStrip);\n    } else {\n      hero.appendChild(el('img', { src: p.img, alt: p.name }));\n    }\n    hero.appendChild(el('h2', { class: 'aeoc-quiz-result__hero-name' }, p.name));\n    hero.appendChild(el('p', { class: 'aeoc-quiz-result__hero-size' }, p.size));\n    const heroSale = +(p.rrp * (1 - CONFIG.salePercent / 100)).toFixed(2);\n    const pricing = el('p', { class: 'aeoc-quiz-result__pricing' });\n    if (CONFIG.saleMode) {\n      pricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-rrp' }, fmtMoney(p.rrp)));\n      pricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(heroSale)));\n    } else if (CONFIG.isReturning) {\n      pricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(p.rrp)));\n    } else {\n      pricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-rrp' }, fmtMoney(p.rrp)));\n      pricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(discPrice(p.rrp))));\n    }\n    hero.appendChild(pricing);\n    if (CONFIG.saleMode) {\n      hero.appendChild(el('p', { class: 'aeoc-quiz-result__save' }, CONFIG.salePercent + '% off in the EOFY sale \u2014 your price at checkout'));\n    } else if (CONFIG.isReturning) {\n      hero.appendChild(el('p', { class: 'aeoc-quiz-result__newcust' }, \"Welcome back \u2014 here's your match.\"));\n    } else {\n      hero.appendChild(el('p', { class: 'aeoc-quiz-result__save' }, 'Save ' + fmtMoney(+(p.rrp - discPrice(p.rrp)).toFixed(2)) + ' \u2014 applied at checkout, no code to type'));\n      hero.appendChild(el('p', { class: 'aeoc-quiz-result__newcust' }, 'New-customer welcome \u2014 ' + activeDiscount().percent + '% off your first order'));\n    }\n    hero.appendChild(el('a', { class: 'aeoc-quiz-result__cta', href: cartLink, target: '_top', onclick: () => track('add_to_cart_click', { type: 'product', product: state.matched_product_key }) }, 'Add to cart \u2014 ' + fmtMoney(CONFIG.saleMode ? heroSale : (CONFIG.isReturning ? p.rrp : discPrice(p.rrp)))));\n    result.appendChild(hero);\n    if (p.kit) {\n      const kit = el('div', { class: 'aeoc-quiz-result__kit' });\n      kit.appendChild(el('div', { class: 'aeoc-quiz-result__kit-label' }, p.kit.label));\n      kit.appendChild(el('h3', { class: 'aeoc-quiz-result__kit-headline' }, p.kit.headline));\n      const kitVariantIds = p.kit.variants.split(',').map(v => v.split(':')[0]);\n      const kitImgs = p.kit.imgs || kitVariantIds.map(vid => {\n        const match = Object.values(PRODUCTS).find(prod => prod.variant === vid);\n        return match ? match.img : null;\n      }).filter(Boolean);\n      if (kitImgs.length >= 2) {\n        const imgStrip = el('div', { class: 'aeoc-quiz-result__kit-imgs' });\n        kitImgs.forEach((src, i) => {\n          imgStrip.appendChild(el('img', { src: src, alt: '', class: 'aeoc-quiz-result__kit-img' }));\n          if (i < kitImgs.length - 1) imgStrip.appendChild(el('span', { class: 'aeoc-quiz-result__kit-plus' }, '+'));\n        });\n        kit.appendChild(imgStrip);\n      }\n      kit.appendChild(el('p', { class: 'aeoc-quiz-result__kit-desc' }, p.kit.desc));\n      kit.appendChild(el('p', { class: 'aeoc-quiz-result__kit-products' }, p.kit.products));\n      const kitSale = +(p.kit.rrp * (1 - CONFIG.salePercent / 100)).toFixed(2);\n      const kitPricing = el('p', { class: 'aeoc-quiz-result__pricing' });\n      if (CONFIG.saleMode) {\n        kitPricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-rrp' }, fmtMoney(p.kit.rrp)));\n        kitPricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(kitSale)));\n      } else if (CONFIG.isReturning) {\n        kitPricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(p.kit.rrp)));\n      } else {\n        kitPricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-rrp' }, fmtMoney(p.kit.rrp)));\n        kitPricing.appendChild(el('span', { class: 'aeoc-quiz-result__pricing-sale' }, fmtMoney(p.kit.discountCode ? p.kit.price : discPrice(p.kit.rrp))));\n      }\n      kit.appendChild(kitPricing);\n      if (CONFIG.saleMode) {\n        kit.appendChild(el('p', { class: 'aeoc-quiz-result__save' }, CONFIG.salePercent + '% off in the EOFY sale \u2014 both at checkout'));\n      } else if (!CONFIG.isReturning) {\n        kit.appendChild(el('p', { class: 'aeoc-quiz-result__save' }, p.kit.discountCode ? (p.kit.saveText || ('Save ' + fmtMoney(p.kit.save) + ' on the kit')) : ('Save ' + fmtMoney(+(p.kit.rrp - discPrice(p.kit.rrp)).toFixed(2)) + ' on the kit')));\n      }\n      kit.appendChild(el('a', { class: 'aeoc-quiz-result__kit-cta', href: kitCartLink, target: '_top', onclick: () => track('add_to_cart_click', { type: 'kit', product: state.matched_product_key }) }, 'Add the kit \u2014 ' + fmtMoney(CONFIG.saleMode ? kitSale : (CONFIG.isReturning ? p.kit.rrp : (p.kit.discountCode ? p.kit.price : discPrice(p.kit.rrp))))));\n      result.appendChild(kit);\n    }\n    // Only show the result-page capture to people who SKIPPED the email step (second chance).\n    // Email-givers already captured pre-result \u2014 don't ask twice or double-fire the flow.\n    if (!state.email) {\n      result.appendChild(buildEmailCapture({\n        headline: \"Want your match + code emailed so you don't lose it?\",\n        cta: 'Email it to me'\n      }));\n    }\n    // SMS concierge upsell \u2014 post-reveal (moved off the gate 6/7/26). Hidden if consent already given.\n    if (!CONFIG.saleMode && !state.sms_consent) {\n      (function () {\n        var sms = el('div', { class: 'aeoc-quiz-result__sms', style: 'margin:18px 0;padding:16px 14px;background:#eef5ee;border:1.5px solid #2e5d3a;border-radius:10px;text-align:center;' });\n        sms.appendChild(el('p', { style: 'margin:0 0 8px;font-weight:700;font-size:15px;color:#1a1a1a;', html: 'Want it by text too? <span style=\"font-weight:500\">Your code + a real person to ask anytime.</span>' }));\n        var phoneIn2 = el('input', { class: 'aeoc-quiz__input', type: 'tel', placeholder: 'Mobile', autocomplete: 'tel', inputmode: 'tel', 'aria-label': 'Mobile number', style: 'margin:6px 0;' });\n        sms.appendChild(phoneIn2);\n        var consent2 = el('label', { style: 'display:flex;align-items:center;gap:10px;font-size:13.5px;line-height:1.4;margin:8px 0;text-align:left;color:#1a1a1a;cursor:pointer;' });\n        var box2 = el('input', { type: 'checkbox' });\n        box2.style.cssText = 'flex:none;width:20px;height:20px;accent-color:#2e5d3a;cursor:pointer;appearance:auto;';\n        consent2.appendChild(box2);\n        consent2.appendChild(el('span', { html: \"Text me my code + answers when I'm stuck \u2014 unsubscribe anytime.\" }));\n        sms.appendChild(consent2);\n        var smsMsg = el('p', { style: 'display:none;margin:8px 0 0;font-weight:600;color:#2e5d3a;' }, '');\n        var smsBtn = el('button', { type: 'button', class: 'aeoc-quiz__submit', style: 'margin-top:4px;' }, 'Text me my code');\n        smsBtn.addEventListener('click', function () {\n          var pv = (phoneIn2.value || '').trim();\n          if (!pv || !box2.checked) {\n            smsMsg.textContent = pv ? 'Tick the box so we can text you.' : 'Pop your mobile in first.';\n            smsMsg.style.color = '#a33'; smsMsg.style.display = 'block';\n            return;\n          }\n          state.phone = pv; state.sms_consent = true;\n          try { fireConciergeOptin(); } catch (eSms) {}\n          track('sms_optin_result', { branch: state.branch });\n          sms.innerHTML = '';\n          sms.appendChild(el('p', { style: 'margin:0;font-weight:700;color:#2e5d3a;' }, \"\\u2713 You're in \u2014 your code's on its way by text. Save the number, ask it anything.\"));\n        });\n        sms.appendChild(smsBtn);\n        sms.appendChild(smsMsg);\n        result.appendChild(sms);\n      })();\n    }\n    result.appendChild(el('div', { class: 'aeoc-quiz-result__guarantee' }, [\n      el('div', { class: 'aeoc-quiz-result__guarantee-label' }, '100% MONEY-BACK GUARANTEE'),\n      el('div', { class: 'aeoc-quiz-result__guarantee-text' }, \"Not completely satisfied? Send it back for a full refund or store credit \u2014 we've stood behind every product since 1895.\")\n    ]));\n    result.appendChild(el('div', { class: 'aeoc-quiz-result__trust' }, 'Australian family business since 1895 \u00B7 100% money-back guarantee \u00B7 5,000+ reviews at 4.9 stars'));\n    body.appendChild(result);\n    quiz.appendChild(header);\n    quiz.appendChild(body);\n    mount(quiz);\n    window.scrollTo(0, 0);\n    setupResultExitCatch();\n    log('Result rendered:', state.matched_product_key, 'Cart:', cartLink);\n  }\n\n  /* Desktop exit-intent catch on the result page \u2014 only if they haven't already given email. */\n  function setupResultExitCatch() {\n    let shown = false;\n    const onLeave = (e) => {\n      if (state.screen !== 'result') { document.removeEventListener('mouseleave', onLeave); return; }\n      if (shown || state.email || e.clientY > 10) return;\n      shown = true;\n      document.removeEventListener('mouseleave', onLeave);\n      const overlay = el('div', { class: 'aeoc-quiz-exit-overlay is-visible', id: 'aeoc-quiz-result-catch' });\n      const modal = el('div', { class: 'aeoc-quiz-exit-modal' }, [\n        el('h2', { class: 'aeoc-quiz-exit-modal__headline' }, \"Before you go \u2014 want your match + \" + activeDiscount().percent + \"% code emailed so it's here when you're back?\"),\n        buildEmailCapture({ cta: 'Email it to me', cls: 'is-exit' }),\n        el('button', { class: 'aeoc-quiz-exit-modal__dismiss', onclick: () => overlay.remove() }, 'No thanks')\n      ]);\n      overlay.appendChild(modal);\n      document.body.appendChild(overlay);\n      track('result_exit_catch_shown', { branch: state.branch });\n    };\n    document.addEventListener('mouseleave', onLeave);\n  }\n\n  /* ============================================================\n     INIT\n     ============================================================ */\n  function init() {\n    log('AEOC Quiz initialised', { config: CONFIG, products: Object.keys(PRODUCTS).length });\n    ensureRoot();\n    triggers.initHeaderLink();\n    if (!cookieGet(CONFIG.cookies.quizTaken) && !(window.Shopify && window.Shopify.designMode)) {\n      triggers.initWelcome();\n      triggers.initPdpSlideup();\n    }\n  }\n\n  /* ============================================================\n     EXPOSE GLOBALLY (for debugging + manual trigger)\n     ============================================================ */\n  window.AEOCQuiz = {\n    start: start,\n    triggers: triggers,\n    state: state,\n    resetCookies: function () {\n      Object.values(CONFIG.cookies).forEach(cookieDelete);\n      log('All cookies cleared');\n    },\n    config: CONFIG,\n    products: PRODUCTS,\n    branches: BRANCHES,\n    Q1: Q1\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n\n})();\n"],
  "mappings": "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",
  "names": []
}
