{
  "version": 3,
  "sources": ["/cdn/shop/t/37/assets/mh-hub.js?x=17189"],
  "sourcesContent": ["/* My Homepeel \u00B7 living hub v2 (front end). Webby, 24 Oct 2026 (Brisbane).\n   my-homepeel template only. Reads #mh-data (sections/my-homepeel.liquid). quiz-results never loads this file.\n   Example mode (\"Kathy\") fills every personal spot with realistic example data and a small source label,\n   so Jodie can see where real Shopify / quiz / coach-import data will land. Real customers never see labels.\n   Rules: owned products only in routines; one reorder offer (10% off at 60%+ used); no nudge language;\n   no AI people; coach notes + photo stay OFF for real customers until Jodie's privacy yes. */\n(function () {\n  'use strict';\n  var root = document.getElementById('MyHomepeel'), dataEl = document.getElementById('mh-data'), app = document.getElementById('mh-app');\n  if (!root || !dataEl || !app) return;\n  var D; try { D = JSON.parse(dataEl.textContent); } catch (e) { app.innerHTML = '<p class=\"hb-body\" style=\"padding:40px 22px\">Sorry, your page didn\\'t load. Please refresh.</p>'; return; }\n\n  /* Gates for real customers (example mode always shows the design). Flip only after Jodie's privacy yes. */\n  var COACH_NOTES_ON = false, COACH_PHOTO_ON = false;\n  /* One-field sign-in (flow v3): true = Shopify sends the code as soon as she taps \"Open your page\" (login_hint_mode=submit),\n     so she lands on \"Enter code\" with no Shop / email choice. false = Shopify's sign-in opens with her email filled in. */\n  var HINT_SUBMIT = false; /* 27 Oct 2026 (Jodie yes 8:46am): prefill only; she taps Continue once, so re-taps no longer send a fresh code that cancels the last one. */\n  /* Real Shopify code discounts behind the shelf offer card (\"Reorder \u00B7 10% off\"). Jodie 24 Oct 5:43pm: 10% off ONLY the\n     product she's reordering, so each shelf product has its own code limited to that product (customers with 1+ order,\n     no end date, combines with nothing). MYHOMEPEEL10 = fallback, limited to these 8 shelf products. */\n  var REORDER_CODE = 'MYHOMEPEEL10';\n  var REORDER_CODES = { 'enzyme-gel-cleanser': 'MYHOMEPEEL10-ENZYME', 'exfoliating-crystals': 'MYHOMEPEEL10-CRYSTALS', 'pure-hyaluronic-acid-serum': 'MYHOMEPEEL10-HA', 'peptide-cream': 'MYHOMEPEEL10-PEPTIDE', 'better-than-retinol': 'MYHOMEPEEL10-BTR', 'lactic-radiance-night-cream': 'MYHOMEPEEL10-LACTIC', 'instant-glow-peel': 'MYHOMEPEEL10-GLOWPEEL', 'whipped-tallow-castor-butter': 'MYHOMEPEEL10-TALLOW' };\n\n  /* ---- \"Because you told us\" strip + tip map (Webby 24 Oct 2026, coach strip v1) ----\n     Coach metafield NAMES live in sections/my-homepeel.liquid (COACH KEY MAP). This block only decides which words\n     a customer may see. Pills come ONLY from these fixed labels; anything else (free text, notes, photos) is dropped.\n     TOLD_COACH_ON_LIVE: coach-sourced pills on the published theme. false until Jodie's privacy yes (quiz pills still show). */\n  var TOLD_COACH_ON_LIVE = true;\n  var TOLD_SKIN = [[/combination|combo/i, 'Combination skin'], [/sensitive/i, 'Sensitive skin'], [/oily/i, 'Oily skin'], [/dry/i, 'Dry skin'], [/normal/i, 'Normal skin']];\n  /* Values seen in the real Globo export (24 Oct, counts only): Melasma, Hyperpigmentation, Pigmentation, Sun damage, Ageing,\n     Fine lines, Tone and Texture, Texture, Lifeless, Dark Circles, Dry and dehydrated, Rosacea, Acne and Congestion,\n     Acne and Pimples, Congestion (small bumps), Eczema, Capillaries, Broken Spider Veins. Label null = flag only, no pill. */\n  var TOLD_CONCERN = [[/eczema|dermatitis|psoriasis/i, null, 'sensitive'], [/capillar|spider vein|broken vein/i, null, 'sensitive'],\n    [/pigment|melasma|dark spot|sun spot/i, 'Pigmentation', 'pigment'], [/sun damage/i, 'Sun damage', 'pigment'], [/fine line|wrinkle/i, 'Fine lines', 'lines'],\n    [/ageing|aging|firm|sag/i, 'Ageing', 'lines'], [/tone|texture/i, 'Tone and texture', 'dull'], [/lifeless|dull|tired|glow/i, 'Dullness', 'dull'], [/dark circle/i, 'Dark circles', 'eyes'],\n    [/dehydrat|dry/i, 'Dryness', 'dry'], [/redness|rosacea/i, 'Redness', 'sensitive'], [/acne|breakout|blemish|pimple|congest/i, 'Congestion', 'breakouts'], [/pore/i, 'Pores', 'dull']];\n  var TOLD_FLAG = { peel: 'Peel history noted', treat: 'Past treatments noted' };\n  /* Tip + \"Start tonight\", keyed off what she told us (first match wins). No match = the generic tip as before. */\n  var TIP_ORDER = ['pigmentPeel', 'pigment', 'peel', 'sensitive', 'breakouts', 'lines', 'dry', 'dull'];\n  var TIPS = {\n    pigmentPeel: { t: 'You know your way around a peel, so here\\'s the secret: pigment fades with patience, not pressure. Gentle and steady wins.', s: 'Skip the scrub tonight and let your serum sink in' },\n    pigment: { t: 'Pigment fades with patience, not pressure. Steady nights, no scrubbing, let your routine do the slow work.', s: 'Skip the scrub tonight and let your serum sink in' },\n    peel: { t: 'You\\'ve had peels before, so you know the drill. At home we keep it soft and well spaced, never harder.', s: 'Tonight, keep it calm: cleanse, hydrate, done' },\n    sensitive: { t: 'Sensitive skin loves a short list. One active at a time, and give each one a fortnight before you judge it.', s: 'Anything new goes on your jawline first, just a little' },\n    breakouts: { t: 'Congested skin wants calm, not a battle. Gentle cleanse, light layers, and hands off in between.', s: 'Fresh pillowcase tonight. It honestly helps' },\n    lines: { t: 'Lines soften with consistency, not more steps. The same calm routine, most nights, does the heavy lifting.', s: 'Press your serum in tonight, no rubbing' },\n    dry: { t: 'Dry skin drinks best while it\\'s still damp. Serum straight after cleansing, then seal it in.', s: 'Serum on damp skin tonight, within a minute of rinsing' },\n    dull: { t: 'Glow is a habit, not a one-off. A little gentle exfoliation, often, beats a lot, once.', s: 'A slow, full-minute cleanse tonight is your glow step' }\n  };\n\n  var S = D.settings || {}, H = D.hub || {};\n  var LASTS = +S.lastsDays || 90, DAY = 864e5;\n  var EXAMPLE = !!D.example;\n  /* LIVE guard (24 Oct, journey test): on the published theme, source labels and capture mode never switch on,\n     so a guest from the email never sees dashed labels and ?mhcap / &mhname do nothing. Preview themes keep both. */\n  var ONMAIN = !!(window.Shopify && Shopify.theme && Shopify.theme.role === 'main');\n  var FROMEMAIL = /[?&](utm_source=klaviyo|mh=)/i.test(location.search); /* email clicks see the customer view, even on preview */\n  var MAP = EXAMPLE && !ONMAIN && !FROMEMAIL && !/[?&]mhmap=0/.test(location.search);   /* source labels on (example only, preview only) */\n  if (MAP) root.classList.add('hb-map');\n  /* capture-only demo (?mhcap=1, example mode only): no name, no numbers, no dates. For the email hero GIF. */\n  var CAP = EXAMPLE && !ONMAIN && /[?&]mhcap=1(&|$)/.test(location.search);\n  if (CAP) root.classList.add('hb-cap');\n  /* &mhname=Sarah (capture mode only): a display name for the email hero. Letters, space, ' and - only. */\n  var CAPNAME = CAP ? ((/[?&]mhname=([^&#]*)/.exec(location.search) || [])[1] || '') : '';\n  try { CAPNAME = decodeURIComponent(CAPNAME.replace(/\\+/g, ' ')).trim(); } catch (e) { CAPNAME = ''; }\n  if (!/^[A-Za-z][A-Za-z' -]{0,19}$/.test(CAPNAME)) CAPNAME = '';\n\n  function esc(s) { return String(s == null ? '' : s).replace(/[&<>\"']/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]; }); }\n  function day(iso) { return new Date(String(iso).slice(0, 10) + 'T09:00:00'); }\n  var TODAY = day(D.today || new Date().toISOString());\n  function ago(n) { return new Date(TODAY.getTime() - n * DAY).toISOString().slice(0, 10); }\n  function daysSince(iso) { return Math.max(0, Math.round((TODAY - day(iso)) / DAY)); }\n  function fmtD(iso) { return day(iso).toLocaleDateString('en-AU', { day: 'numeric', month: 'short', year: 'numeric' }); }\n  function fmtM(iso) { return day(iso).toLocaleDateString('en-AU', { month: 'long', year: 'numeric' }); }\n  function store(k, v) { try { if (v === undefined) return JSON.parse(localStorage.getItem('mh_' + k) || 'null'); localStorage.setItem('mh_' + k, JSON.stringify(v)); } catch (e) { return null; } }\n  function csv(s) { return String(s || '').split(',').map(function (x) { return x.trim(); }).filter(Boolean); }\n  function arr(v) { return Array.isArray(v) ? v : v ? csv(v) : []; }\n  function sentc(t) { t = String(t || ''); return t.charAt(0).toUpperCase() + t.slice(1); }\n  function lower(t) { t = String(t || ''); return t.charAt(0).toLowerCase() + t.slice(1); }\n  function listJoin(a) { return a.length < 2 ? (a[0] || '') : a.slice(0, -1).join(', ') + ' and ' + a[a.length - 1]; }\n  function toast(t) { var e = document.getElementById('mh-toast'); if (!e) return; e.textContent = t; e.classList.add('is-on'); clearTimeout(e._t); e._t = setTimeout(function () { e.classList.remove('is-on'); }, 2800); }\n  /* tiny mono source label = where real data lands (example only) */\n  function src(t) { return MAP ? '<span class=\"hb-src\">' + esc(t) + '</span>' : ''; }\n  function slotCls() { return MAP ? ' hb-slot' : ''; }\n\n  /* one soft colour per product (pastel of the Homepeel swatch sheet, colours/colours.json) */\n  var SW = { 'better-than-retinol': '#76FFD3', 'lactic-radiance-night-cream': '#FF91D3', 'whipped-tallow-castor-butter': '#F4E4CB', 'peptide-cream': '#638DFF', 'vitamin-b-serum': '#FFE987', 'instant-glow-peel': '#F2A790', 'pure-hyaluronic-acid-serum': '#62A7C2', 'enzyme-gel-cleanser': '#9CFE00', 'exfoliating-crystals': '#23B189', 'replenishing-milky-cleanser': '#02E36A', 'vitamin-c-serum': '#E28400', 'collagen-serum': '#B96DFC', 'pigmentation-serum': '#FC2DC5', 'peptide-micro-infusion-serum': '#2EEBFB', 'longevity-elixir': '#B4D26F', 'velvet-eye-cream': '#B2A2FD', 'illuminating-pink-clay-mask': '#FE4F6D' };\n  function soft(k, amt) {\n    var h = SW[k] || '#C9BCF5', a = amt == null ? 0.55 : amt;\n    var r = parseInt(h.substr(1, 2), 16), g = parseInt(h.substr(3, 2), 16), b = parseInt(h.substr(5, 2), 16);\n    return 'rgb(' + Math.round(r + (255 - r) * a) + ',' + Math.round(g + (255 - g) * a) + ',' + Math.round(b + (255 - b) * a) + ')';\n  }\n\n  /* ---------- catalog ---------- */\n  var STEPCOPY = {\"enzyme-gel-cleanser\": \"One pump into damp skin. Enzymes gently dissolve dead skin cells while you cleanse.\", \"pure-hyaluronic-acid-serum\": \"One pump to hydrate and plump the skin. Morning or night.\", \"better-than-retinol\": \"One pump, pressed gently into your skin to stimulate cell renewal. Always the last step.\", \"lactic-radiance-night-cream\": \"A thin layer over face and neck. Wake up to smoother skin.\", \"exfoliating-crystals\": \"Add to your gel cleanser to turn it into a skin polish. Gently polishes away dead skin cells.\", \"instant-glow-peel\": \"Instant skin refresh, no downtime.\", \"replenishing-milky-cleanser\": \"Two pumps on a wet or dry face, massage in circles, then rinse. Leaves skin soft, not tight.\", \"peptide-cream\": \"A pea-sized amount over face and neck. Locks in your serums so they can work properly.\", \"whipped-tallow-castor-butter\": \"A small amount over face and neck when skin feels tight. Leaves skin soft, cushioned and more resilient.\"};\n  var CAT = {}, ORDER = [], SKU = {}, KIT = {};\n  (D.catalog || []).forEach(function (c) {\n    if (STEPCOPY[c.key]) c.line = STEPCOPY[c.key];\n    CAT[c.key] = c; ORDER.push(c.key);\n    (c.skus || []).concat(csv(c.alias)).forEach(function (s) { if (s) SKU[s.toUpperCase()] = c.key; });\n  });\n  (D.kits || []).forEach(function (k) { csv(k.skus).forEach(function (s) { KIT[s.toUpperCase()] = (k.parts || []).filter(function (h) { return CAT[h]; }); }); });\n\n  /* ---------- who she is ---------- */\n  var C = D.customer || {}, Q = D.quiz || {}, CO = (H.coach || {});\n  if (EXAMPLE) {\n    /* \"Kathy\" is an example customer. Nothing here is real. */\n    C = { firstName: 'Kathy', ordersCount: 3 };\n    Q = { completedAt: ago(336), goals: ['Softer lines and a fresher look', 'Deep hydration and smoother, softer skin'], skinType: 'Dry', concerns: ['Fine lines', 'Dullness'], recommended: ['whipped-tallow-castor-butter'] };\n    CO = { submittedAt: ago(318), skinType: 'Dry, a little sensitive', concerns: ['Fine lines around the eyes', 'Skin that looks tired by the afternoon'], treatments: 'a salon peel', reactions: 'None noted', productsBefore: 'a supermarket moisturiser and a vitamin C serum', summary: 'Wants a routine simple enough to keep up with on long work days.', hasPhoto: true, treatmentsNoted: true, peelNoted: true };\n    D.orders = [\n      { d: ago(20), x: false, i: [{ s: '', h: 'peptide-cream', t: 'Peptide Infusion Cream', q: 1 }, { s: 'HPIGPK', h: 'instant-glow-peel', t: 'Instant GLOW Peel', q: 1 }] },\n      { d: ago(64), x: false, i: [{ s: 'HPDYTIWSP', h: 'pure-essentials-kit', t: 'Pure Essentials Kit', q: 1 }] },\n      { d: ago(330), x: false, i: [{ s: 'HPDYTIWSP', h: 'pure-essentials-kit', t: 'Pure Essentials Kit', q: 1 }, { s: 'HPIGPK', h: 'instant-glow-peel', t: 'Instant GLOW Peel', q: 1 }] }\n    ];\n    D.usageStart = { 'better-than-retinol': ago(35), 'lactic-radiance-night-cream': ago(48), 'exfoliating-crystals': ago(25) };\n  }\n  /* Test view (Jodie 24 Oct 5:29pm, preview themes only): ?mhtest=1 for a SIGNED-IN customer keeps her real name but\n     always fills the shelf and ritual with example products, so she can test her own page. Inert on the published theme\n     (ONMAIN), for guests and in the editor/Kathy example. Never writes anything to Shopify. */\n  var TEST = !EXAMPLE && !ONMAIN && !!D.customer && /[?&]mhtest=1(&|$)/.test(location.search);\n  if (TEST) {\n    D.orders = [\n      { d: ago(70), x: false, i: [{ s: '', h: 'enzyme-gel-cleanser', t: 'Enzyme Gel Cleanser', q: 1 }, { s: '', h: 'pure-hyaluronic-acid-serum', t: 'Pure Hyaluronic', q: 1 }] },\n      { d: ago(40), x: false, i: [{ s: '', h: 'better-than-retinol', t: 'Better Than Retinol', q: 1 }] },\n      { d: ago(25), x: false, i: [{ s: '', h: 'exfoliating-crystals', t: 'Exfoliating Crystals', q: 1 }] }\n    ];\n    D.usageStart = {};\n    /* Coach strip test (24 Oct): example coach + quiz answers so the strip and tip can be screenshotted.\n       &mhcoach=pigment (default) | sensitive | dry | quiz (quiz answers only) | none (no answers: strip hidden, generic tip). */\n    var MHC = ((/[?&]mhcoach=([a-z]+)/.exec(location.search) || [])[1] || 'pigment');\n    var EXC = {\n      pigment: { co: { submittedAt: ago(120), skinType: 'Combination', concerns: ['Pigmentation', 'Fine lines', 'Sun damage'], treatmentsNoted: true, peelNoted: true, reactionsNoted: false, hasPhoto: true, photoUrl: 'data:image/svg+xml,' + encodeURIComponent('<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 600 750\"><defs><linearGradient id=\"g\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\"><stop offset=\"0\" stop-color=\"#F6F3FE\"/><stop offset=\"1\" stop-color=\"#E5E5E5\"/></linearGradient></defs><rect width=\"600\" height=\"750\" fill=\"url(#g)\"/><rect x=\"190\" y=\"250\" width=\"220\" height=\"220\" rx=\"36\" fill=\"none\" stroke=\"#C9BCF5\" stroke-width=\"2\"/><text x=\"300\" y=\"150\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"26\" letter-spacing=\"4\" fill=\"#6A58B5\">EXAMPLE PHOTO</text></svg>') }, q: { skinType: 'Combination', concerns: ['Pigmentation'], goals: ['An even, brighter skin tone'] } },\n      sensitive: { co: { submittedAt: ago(90), skinType: 'Sensitive', concerns: ['Redness', 'Dry and dehydrated'], treatmentsNoted: false, peelNoted: false, reactionsNoted: true }, q: {} },\n      dry: { co: { submittedAt: ago(60), skinType: 'Dry', concerns: ['Dry and dehydrated', 'Lifeless'], treatmentsNoted: true, peelNoted: false }, q: {} },\n      quiz: { co: {}, q: { skinType: 'Normal', concerns: ['Fine lines', 'Dullness'], goals: ['Softer lines and a fresher look'], salonHistory: ['Laser'] } },\n      none: { co: {}, q: {} }\n    }[MHC] || null;\n    if (EXC) { CO = EXC.co; Q = EXC.q; }\n  }\n  var NAME = CAP ? CAPNAME : (C.firstName || '').trim();\n  var coachOK = EXAMPLE || (COACH_NOTES_ON && !!(CO.submittedAt || CO.skinType || arr(CO.concerns).length));\n  var photoOK = EXAMPLE || (COACH_PHOTO_ON && CO.hasPhoto);\n  /* Private coach photo. Jodie 24 Oct 6:22pm: OFF by default; it only shows if the customer turns it on herself.\n     Real view: needs a private photoUrl AND photoShow=true (her own choice, saved on her account; no write path yet).\n     Test view (?mhtest=1): a quiet opt-in switch with an example photo, nothing saved anywhere. Never on the signed-out card, never shared. */\n  var PHOTO_TEST_ROW = TEST && !!CO.photoUrl;\n  var PHOTO = (!EXAMPLE && !CAP && (TEST || ((!ONMAIN || COACH_PHOTO_ON) && CO.photoShow === true)) && CO.photoUrl && /^(https:\\/\\/|\\/\\/[a-z0-9.-]+\\/|data:image\\/svg)/i.test(CO.photoUrl)) ? CO.photoUrl : '';\n\n  /* \"Because you told us\": up to 3 soft pills. Coach answers first, quiz as fall-back. Fixed labels only (see TOLD_*). */\n  var NOPE = /^\\s*(no|none|never|not|nil|n\\/a|nope|nothing)\\b/i;\n  function pick(list, v) { var t = String(v || ''); if (!t || t.length > 60) return null; for (var i = 0; i < list.length; i++) if (list[i][0].test(t)) return list[i]; return null; }\n  var TOLD = [], FL = {};\n  (function () {\n    var useCo = EXAMPLE || TEST || !ONMAIN || TOLD_COACH_ON_LIVE, co = useCo ? CO : {};\n    var types = csv(co.skinType).length ? csv(co.skinType) : csv(Q.skinType), sks = types.map(function (t) { return pick(TOLD_SKIN, t); }).filter(Boolean);\n    sks.forEach(function (m) { if (m[1] === 'Sensitive skin') FL.sensitive = 1; if (m[1] === 'Dry skin') FL.dry = 1; });\n    var sk = sks.filter(function (m) { return m[1] !== 'Normal skin'; })[0] || sks[0];\n    if (sk) TOLD.push(sk[1]);\n    var cs = [], seen = {};\n    arr(co.concerns).concat(arr(Q.concerns)).forEach(function (c) { var m = pick(TOLD_CONCERN, c); if (m && m[1] === 'Dryness' && sk && sk[1] === 'Dry skin') { FL.dry = 1; return; } if (m) FL[m[2]] = 1; if (m && m[1] && !seen[m[1]]) { seen[m[1]] = 1; cs.push(m); } });\n    if (!NOPE.test(Q.pigmentation || '') && /yes|melasma|pigment|spot/i.test(Q.pigmentation || '')) FL.pigment = 1;\n    if (!NOPE.test(Q.reactivity || '') && /sensitiv|red|sting|burn|itch|flush|easily/i.test(Q.reactivity || '') && !/rarely|hardly/i.test(Q.reactivity || '')) FL.sensitive = 1;\n    if (co.reactionsNoted) FL.sensitive = 1;\n    var salon = arr(Q.salonHistory).filter(function (x) { return !NOPE.test(x) && !/never|none/i.test(x); });\n    if (co.peelNoted || salon.some(function (x) { return /peel/i.test(x); })) FL.peel = 1;\n    else if (co.treatmentsNoted || salon.length) FL.treat = 1;\n    var flag = FL.peel ? TOLD_FLAG.peel : FL.treat ? TOLD_FLAG.treat : '';\n    TOLD = TOLD.concat(cs.slice(0, 2).map(function (m) { return m[1]; })); /* 24 Oct 7:38pm Jodie: two concerns, no treatment flag pill */\n    if (!TOLD.length) arr(Q.goals).filter(function (g) { return String(g).length <= 48; }).slice(0, 2).forEach(function (g) { TOLD.push(sentc(g)); });\n    TOLD = TOLD.slice(0, 3);\n  })();\n  var TIPKEY = (function () { var f = FL.pigment && FL.peel ? 'pigmentPeel' : null; if (f) return f; for (var i = 1; i < TIP_ORDER.length; i++) if (FL[TIP_ORDER[i]]) return TIP_ORDER[i]; return null; })();\n\n  var OWNED = {}, ORDERS = (D.orders || []).filter(function (o) { return !o.x; }).sort(function (a, b) { return a.d < b.d ? 1 : -1; });\n  ORDERS.forEach(function (o) {\n    (o.i || []).forEach(function (li) {\n      var sku = (li.s || '').toUpperCase(), h = (li.h || '').replace(/-vip$/, '');\n      var keys = KIT[sku] ? KIT[sku] : SKU[sku] ? [SKU[sku]] : CAT[h] ? [h] : [];\n      keys.forEach(function (k) { if (!OWNED[k]) OWNED[k] = { d: o.d }; });\n    });\n  });\n  if (CAP) delete OWNED['lactic-radiance-night-cream']; /* Lactic on hold: never in the email capture */\n  var ov = D.usageStart || {};\n  Object.keys(OWNED).forEach(function (k) { if (ov[k] && ov[k] > OWNED[k].d) OWNED[k].d = ov[k]; });\n  var FIRST = ORDERS.length ? ORDERS[ORDERS.length - 1].d : null;\n  var WEEK = FIRST ? Math.floor(daysSince(FIRST) / 7) + 1 : null;\n  /* capture mode: varied example fill so the shelf looks lived-in (shown as rings/bars only, never digits) */\n  var CAPU = { 'enzyme-gel-cleanser': 78, 'pure-hyaluronic-acid-serum': 66, 'better-than-retinol': 52, 'exfoliating-crystals': 44, 'peptide-cream': 30, 'instant-glow-peel': 18 };\n  function usage(k) { var d = daysSince(OWNED[k].d), pct = CAP && CAPU[k] != null ? CAPU[k] : Math.min(100, Math.round(d / LASTS * 100)); return { pct: pct, day: d, note: pct >= 100 ? 'Probably finished' : pct >= 85 ? 'Nearly finished' : pct >= 60 ? 'Running low' : pct >= 40 ? 'About halfway' : 'Plenty left' }; }\n  var SHELF = Object.keys(OWNED).filter(function (k) { return daysSince(OWNED[k].d) <= 365; })\n    .sort(function (a, b) { return ORDER.indexOf(a) - ORDER.indexOf(b); });\n\n  /* routine: owned steps only */\n  var own = function (k) { return !!OWNED[k] && CAT[k] && CAT[k].role === 'step'; };\n  var STEPS = ORDER.filter(own).map(function (k) { return CAT[k]; });\n  var has = function (w) { return STEPS.filter(function (s) { return s.when === w; })[0]; };\n  var A = has('pm'), B = has('lrc'), P = has('peel');\n  var DOW = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n  var plan = A && B ? ['A', 'B', 'A', 'B', 'A', 'A', 'G'] : A ? ['A', 'A', 'A', 'A', 'A', 'A', 'G'] : B ? ['G', 'B', 'G', 'G', 'B', 'G', 'G'] : ['G', 'G', 'G', 'G', 'G', 'G', 'G'];\n  /* 25 Oct 2026 Jodie: Instant Glow Peel once every TWO weeks (Green Herb Skin Peel 3 to 4 times a year, not in this plan).\n     Peel night = every second Saturday, counted from the week she got her peel (her own fortnight). */\n  var PEELWK = P ? (function () { var mon = function (d) { var x = new Date(d.getTime()); x.setDate(x.getDate() - (x.getDay() + 6) % 7); return x; }; var o = OWNED[P.key] && OWNED[P.key].d ? day(OWNED[P.key].d) : TODAY; return Math.round((mon(TODAY) - mon(o)) / (7 * DAY)) % 2 === 0; })() : false;\n  if (P && PEELWK) plan[5] = 'P';\n  var tIdx = (TODAY.getDay() + 6) % 7, tCode = plan[tIdx];\n  var nightStep = tCode === 'A' ? A : tCode === 'B' ? B : tCode === 'P' ? P : null;\n  var CLEANSE = /cleanser/;\n  var baseNight = STEPS.filter(function (s) { return s.when === 'both'; });\n  var TONIGHT = (function () {\n    var cl = baseNight.filter(function (s) { return CLEANSE.test(s.key); }), rest = baseNight.filter(function (s) { return !CLEANSE.test(s.key); });\n    if (tCode === 'P' && P) return cl.concat([P], rest);\n    return cl.concat(rest, nightStep ? [nightStep] : []);\n  })();\n  var MORNING = STEPS.filter(function (s) { return s.when === 'both' || s.when === 'am'; });\n  var NIGHTNAME = { P: 'Peel night', A: 'Renew night', B: 'Overnight treatment', G: 'Gentle night' };\n  function chip(k) { var u = (H.chips || {})[k]; return u ? '<img src=\"' + esc(u) + '\" alt=\"\" loading=\"lazy\">' : ''; }\n  function pimg(c, w) { if (!c || !c.image) return ''; var u = String(c.image).replace(/width=\\d+/, 'width=' + (w || 600)); return '<img src=\"' + esc(u) + '\" alt=\"' + esc(c.name) + '\" loading=\"lazy\">'; }\n\n  var ic = {\n    sun: '<svg class=\"hb-ic\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M12 2.5v2.5M12 19v2.5M2.5 12H5M19 12h2.5M5.3 5.3l1.8 1.8M16.9 16.9l1.8 1.8M5.3 18.7l1.8-1.8M16.9 7.1l1.8-1.8\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"/></svg>',\n    moon: '<svg class=\"hb-ic\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M19.5 14.5A8 8 0 0 1 9.5 4.5a8 8 0 1 0 10 10z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>',\n    arrow: '<svg class=\"hb-ic\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12h13M13 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>',\n    bag: '<svg class=\"hb-ic\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 8h14l-1 12H6zM9 8V6a3 3 0 0 1 6 0v2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>',\n    face: '<svg viewBox=\"0 0 120 150\" aria-hidden=\"true\"><ellipse cx=\"60\" cy=\"68\" rx=\"34\" ry=\"44\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"/><path d=\"M26 150c4-22 18-34 34-34s30 12 34 34\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"/></svg>',\n    lock: '<svg class=\"hb-ic\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M8 11V8a4 4 0 0 1 8 0v3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>'\n  };\n\n  /* ---------- 1. welcome ---------- */\n  function sHello() {\n    var HT = (EXAMPLE && !CAP) ? 'h2' : 'h1'; /* under the welcome card the example name is not the page heading */\n    /* capture mode (email GIF) keeps its original pills so a re-capture matches the approved GIF */\n    var told = CAP ? [sentc(CO.skinType + ' skin')].concat(arr(CO.concerns).slice(0, 2).map(sentc)) : TOLD;\n    var stats = FIRST ? [\n      [String(WEEK), WEEK === 1 ? 'week with Homepeel' : 'weeks with Homepeel'],\n      [String(ORDERS.length), ORDERS.length === 1 ? 'box delivered' : 'boxes delivered'],\n      [String(SHELF.length), SHELF.length === 1 ? 'product on your shelf' : 'products on your shelf']\n    ] : [];\n    var dateLine = TODAY.toLocaleDateString('en-AU', { weekday: 'long', day: 'numeric', month: 'long' });\n    return '<section class=\"hb-hello\" id=\"hb-hello\"><div class=\"hb-hello__tx\">' +\n      (CAP ? '' : '<div class=\"hb-k\">' + esc(dateLine) + '</div>') +\n      (CAP && !NAME ? '<' + HT + ' class=\"hb-h1\"><span class=\"hb-nm mh-name\">Welcome</span><span class=\"hb-h1__t\">home</span></' + HT + '>' :\n      '<' + HT + ' class=\"hb-h1\"><span class=\"hb-nm mh-name' + slotCls() + '\">' + (NAME ? 'Hi ' + esc(NAME) : 'Hi there') + src('From your account') + '</span><span class=\"hb-h1__t\">welcome home</span></' + HT + '>') + /* Jodie 27 Oct 5:35pm: always opens with \"Hi [name]\" */\n      '<p class=\"hb-lede\">This page is yours' + (CAP && !NAME ? '' : ', ' + (NAME ? esc(NAME) : 'lovely')) + '. Everything here comes from what you\\'ve shared with us and what\\'s in your bathroom right now. We\\'re so glad you\\'re part of Homepeel.</p>' +\n      (told.length ? '<div class=\"hb-told' + (CAP ? '' : ' hb-told--v1') + slotCls() + '\">' + src('From your coach answers + quiz') + '<div class=\"hb-k' + (CAP ? ' hb-dot' : '') + '\">Because you told us</div><ul>' + told.map(function (t) { return '<li>' + esc(t) + '</li>'; }).join('') + '</ul>' + (CAP ? '' : '<p class=\"hb-small hb-told__s\">Your tips lean on this. Anything changed? Just tell your coach.</p>') + '</div>' : '') +\n      (stats.length && !CAP ? '<div class=\"hb-stats' + slotCls() + '\">' + src('From your orders') + stats.map(function (s) { return '<div><b>' + esc(s[0]) + '</b><span>' + esc(s[1]) + '</span></div>'; }).join('') + '</div>' : '') +\n      '</div><figure class=\"hb-hello__im\"><img src=\"' + esc(H.heroImage) + '\" alt=\"\" loading=\"eager\"><figcaption class=\"hb-k\">Your ritual, at your own basin</figcaption></figure></section>';\n  }\n\n  /* ---------- 1b. Your Black Friday amount (Webby 27 Oct 2026, Jodie 12:13pm) ----------\n     D.bf26 = {on, v} from the section (signed-in customers only, and only when the section's bf26_on is ticked).\n     v = my_homepeel.bf26, written each night by mh_amount_sync.py (same spend rules as tag_customers.py). No v = zero state.\n     Monochrome only. No codes, never \"unlimited\", never the cold-ad gift. No full stops on the card.\n     Preview themes only: ?mhbfnow=2026-11-28 pretends it's that date (to check each phase). */\n  var BF = D.bf26 || null;\n  /* Dates come from the section's one set of Liquid variables (D.bf26w, epoch seconds); these are only a fallback */\n  var BFW = (D.bf26w && D.bf26w.length === 4) ? D.bf26w : [1793140200, 1795615199, 1795701600, 1796047199];\n  var BF_EARN_START = BFW[0] * 1000, BF_EARN_END = BFW[1] * 1000, BF_LIVE_START = BFW[2] * 1000, BF_LIVE_END = BFW[3] * 1000;\n  function bfNow() { return Date.now(); } /* LIVE build: no date-override URL params */\n  function money(n) { n = +n || 0; return '$' + (Math.round(n * 100) % 100 ? n.toFixed(2) : String(Math.round(n))); }\n  function sBf() {\n    /* \"Your Homepeel Credits\" (Webby 27 Oct 2026; Jodie 3:20pm personal codes, 3:24pm live amount, Friday final rules 3:27pm).\n       Amount = LIVE from Liquid (B.l: this customer's orders in the earn window, same rules as bf15_spend.py), freezes after the earn end.\n       Fallback = my_homepeel.bf26 (nightly sync) only when the Liquid sum is missing, incomplete, or stale (refund not yet priced by the sync).\n       Code = my_homepeel.bf26_code.code (made once she first earns $15). Button = /discount/CODE?redirect=%2Fcheckout, weekend only (encoded on purpose: Discount Ninja rewrites any href containing \"/checkout\" into its own click handler, which strips codes; Shopify decodes it to the same 302 /checkout).\n       No minimum-order line, nothing about the 15% (undecided). Never \"free\". No full stops on the card. Hidden after the weekend. */\n    var P = bfPreview();\n    if (!P && (EXAMPLE || CAP || !BF || !BF.on)) return '';\n    var B = P || BF;\n    var now = bfNow(); if (now > BF_LIVE_END) return '';\n    var v = B.v || {}, c = B.c && B.c.code ? B.c : null, L = B.l || null, cents = null;\n    if (v.test) v = {}; if (c && (c.test || !/^BF-[A-Z0-9]{4,}$/.test(String(c.code)))) c = null; /* LIVE build: test values and non-real codes never show */\n    if (L && !L.inc && !L.stale && typeof L.s === 'number') { /* stale = a refunded order the sync hasn't priced yet -> metafield amount (same as the code) */\n      cents = L.s;\n    }\n    var spend = cents !== null ? cents / 100 : Math.max(0, +v.spend || 0);\n    var amt = cents !== null ? 15 * Math.floor(spend / 100) : Math.max(0, Math.floor(+v.amount || 0));\n    var toNext = Math.round((100 - (spend % 100)) * 100) / 100;\n    var phase = now < BF_EARN_START ? 'pre' : now <= BF_EARN_END ? 'earn' : now < BF_LIVE_START ? 'ready' : 'live';\n    var earning = phase === 'pre' || phase === 'earn';\n    if (!earning && !amt) return '';\n    var A = money(amt), used = !!((c && (c.used || c.usedAt)) || v.used), test = !!((c && c.test) || v.test), body = '', sub = '';\n    var WK = bfRange(BF_LIVE_START, BF_LIVE_END), EE = bfDay(BF_EARN_END);\n    var codeBox = function (k, note) {\n      return '<div class=\"hb-cr__code\"><div class=\"hb-cr__row\"><span class=\"hb-cr__kc\">Your code</span><b class=\"hb-cr__c\">' + esc(k) + '</b>' +\n        '<button type=\"button\" class=\"hb-cr__copy\" data-hb-copy=\"' + esc(k) + '\" aria-label=\"Copy your code ' + esc(k) + '\">Copy</button></div>' +\n        (note ? '<p class=\"hb-cr__note\">' + esc(note) + '</p>' : '') + '</div>';\n    };\n    var bar = function (first) {\n      return earning && spend > 0 && toNext > 0 && toNext <= 100 ? '<div class=\"hb-bf__bar\" role=\"img\" aria-label=\"' + esc(money(100 - toNext)) + ' of the next $100\"><i style=\"width:' + Math.max(3, Math.min(100, 100 - toNext)).toFixed(1) + '%\"></i></div>' +\n        '<p class=\"hb-bf__next\">' + esc(money(toNext)) + (first ? ' more adds your first $15' : ' more adds another $15') + '</p>' : '';\n    };\n    var shop = '<a class=\"hb-btn hb-btn--o hb-bf__btn\" href=\"' + esc(S.shopUrl || '/collections/all') + '\">Shop Homepeel ' + ic.arrow + '</a>';\n    if (!amt) {\n      sub = 'Spend $100 to earn your first $15';\n      body = bar(true) + '<ul class=\"hb-bf__list\"><li>' + (phase === 'pre' ? 'Every order from Wed 28 Oct to ' + EE + ' counts' : 'Every order until ' + EE + ' counts') + '</li></ul>' + shop;\n    } else if (used) {\n      sub = 'Your ' + A + ' is used';\n      var ud = c && c.usedAt && Date.parse(c.usedAt) ? ' ' + bfDay(Date.parse(c.usedAt)) : '';\n      body = (c ? '<div class=\"hb-cr__code is-used\"><div class=\"hb-cr__row\"><span class=\"hb-cr__kc\">Your code</span><s class=\"hb-cr__c\">' + esc(c.code) + '</s>' +\n        '<span class=\"hb-cr__tag\">Used' + esc(ud) + '</span></div></div>' : '') +\n        '<ul class=\"hb-bf__list\"><li>Thank you for shopping Homepeel</li></ul>';\n    } else if (phase === 'live') {\n      sub = c ? 'Ready whenever you need them' : 'Your code is on its way';\n      body = c ? codeBox(c.code, '') +\n        '<a class=\"hb-btn hb-bf__btn hb-cr__use\" href=\"/discount/' + encodeURIComponent(c.code) + '?redirect=%2Fcheckout\">Use my ' + esc(A) + ' ' + ic.arrow + '</a>' +\n        '<p class=\"hb-cr__or\">Or enter your code at checkout</p>' : '';\n    } else if (phase === 'ready') {\n      sub = 'Use it from Friday';\n      body = c ? codeBox(c.code, 'Use from Black Friday onwards, whenever you need them') : '<ul class=\"hb-bf__list\"><li>Use from Black Friday onwards, whenever you need them</li></ul>';\n    } else {\n      sub = 'Earned so far';\n      body = bar(false) + (c ? codeBox(c.code, 'Use from Black Friday onwards, whenever you need them') : '<ul class=\"hb-bf__list\"><li>Use from Black Friday onwards, whenever you need them</li></ul>') +\n        '<ul class=\"hb-bf__list hb-cr__l2\"><li>Every order until ' + EE + ' counts</li></ul>' + shop;\n    }\n    return '<section class=\"hb-sec hb-bf hb-cr\" id=\"bf-amount\" aria-labelledby=\"hb-bf-h\"' + (P ? ' data-hb-cr-preview=\"' + esc(P.state) + '\"' : '') + '><div class=\"hb-bf__in\">' +\n      '<div class=\"hb-bf__top\"><span class=\"hb-k\">Black Friday</span>' + '' + '</div>' +\n      '<h2 class=\"hb-h2 hb-bf__h\" id=\"hb-bf-h\">Your Homepeel Credits</h2>' +\n      (amt ? '<p class=\"hb-cr__amt\">' + esc(A) + '</p>' : '') +\n      '<p class=\"hb-cr__sub\">' + esc(sub) + '</p>' + body +\n      '</div></section>';\n  }\n  function bfDay(ms) { try { return new Date(ms).toLocaleDateString('en-AU', { timeZone: 'Australia/Brisbane', weekday: 'short', day: 'numeric', month: 'short' }).replace(/,/g, ''); } catch (e) { return ''; } }\n  function bfRange(a, b) { var x = bfDay(a), y = bfDay(b); return x.split(' ').slice(-1)[0] === y.split(' ').slice(-1)[0] ? x.split(' ').slice(0, 2).join(' ') + ' to ' + y : x + ' to ' + y; }\n  function bfPreview() { return null; } /* LIVE build: the preview-state URL params do nothing */\n\n  /* ---------- 2. tonight's ritual (owned only) ---------- */\n  function deeper(c) {\n    var out = []; String(c.deeper || '').split(/\\r?\\n/).forEach(function (l) { l = l.trim(); if (!l || l.indexOf('## ') === 0) return; out.push(l.split('||')[0].trim()); });\n    return out.slice(0, 4);\n  }\n  function stepRow(c, i, key) {\n    var d = deeper(c);\n    return '<li class=\"hb-step\"><span class=\"hb-step__n\">' + (CAP ? '' : String(i + 1).padStart(2, '0')) + '</span>' +\n      '<span class=\"hb-circ\" style=\"--c:' + soft(c.key) + '\">' + chip(c.key) + '</span>' +\n      '<div class=\"hb-step__tx\"><div class=\"hb-k\">' + esc(c.title || '') + '</div><div class=\"hb-h3\">' + esc(c.name) + '</div><p class=\"hb-body\">' + esc(c.line || '') + '</p>' +\n      (d.length ? '<details class=\"hb-how\"><summary>How to use it</summary><ol>' + d.map(function (x) { return '<li>' + esc(x) + '</li>'; }).join('') + '</ol></details>' : '') +\n      '</div></li>';\n  }\n  function sTonight() {\n    if (!STEPS.length) return '<section class=\"hb-sec\" id=\"hb-tonight\"><div class=\"hb-k hb-dot\">Tonight</div><h2 class=\"hb-h2\">Your ritual appears here after your first box</h2><p class=\"hb-body\">Only the products you own, in the order you use them.</p><a class=\"hb-btn hb-btn--o\" href=\"' + esc(S.quizUrl) + '\">Take the skin quiz ' + ic.arrow + '</a></section>';\n    var clipC = (nightStep && nightStep.video) ? nightStep : TONIGHT.filter(function (s) { return s.video; })[0];\n    var tName = NIGHTNAME[tCode] || 'Tonight';\n    var done = (store('done') || {})[D.today];\n    return '<section class=\"hb-sec hb-ritual\" id=\"hb-tonight\">' +\n      '<div class=\"hb-ritual__media\">' + (clipC ? '<video muted playsinline autoplay loop preload=\"metadata\" poster=\"' + esc(clipC.poster || '') + '\" src=\"' + esc(clipC.video) + '\"></video>' : '') +\n      '<div class=\"hb-ritual__cap\"><span class=\"hb-k\">' + ic.moon + ' Tonight' + (CAP ? '' : ' \u00B7 ' + esc(DOW[tIdx])) + '</span><span class=\"hb-ritual__t\">' + esc(tName) + '</span></div></div>' +\n      '<div class=\"hb-ritual__tx' + slotCls() + '\">' + src('From your orders \u00B7 owned products only') +\n      '<div class=\"hb-k hb-dot\">Tonight\\'s ritual</div><h2 class=\"hb-h2\">' + (tCode === 'P' ? (CAP ? 'Peel night, just for you' : 'Peel night, ten calm minutes just for you') : tCode === 'G' ? 'A gentle night, cleanse, hydrate, rest' : 'Three steps, then sleep') + '</h2>' +\n      '<ol class=\"hb-steps\">' + TONIGHT.map(function (c, i) { return stepRow(c, i, 'pm'); }).join('') + '</ol>' +\n      '<button type=\"button\" class=\"hb-btn' + (done ? ' is-done' : '') + '\" data-hb-done>' + (done ? 'Done for tonight. Sleep well.' : 'I\\'ve done tonight\\'s ritual') + '</button>' +\n      '<div class=\"hb-morning\"><div class=\"hb-k\">' + ic.sun + ' Tomorrow morning</div><div class=\"hb-mrow\">' + MORNING.map(function (c) { return '<span class=\"hb-mi\"><span class=\"hb-circ hb-circ--s\" style=\"--c:' + soft(c.key) + '\">' + chip(c.key) + '</span><span>' + esc(c.name) + '</span></span>'; }).join('') + '</div></div>' +\n      '</div></section>';\n  }\n\n  /* ---------- 3. week ---------- */\n  function sWeek() {\n    if (!STEPS.length) return '';\n    var lbl = { A: 'Renew', B: 'Night', P: 'Peel', G: 'Gentle' }; /* 'Overnight' wrapped mid-word on phones */\n    return '<section class=\"hb-sec hb-weeksec\"><div class=\"hb-weekhead\"><div class=\"hb-k hb-dot\">Your week</div><span class=\"hb-small\">' + (CAP || !P ? 'One active a night.' : PEELWK ? (tIdx === 6 ? 'Peel night was last night. The next one is in two weeks.' : 'Peel night is this Saturday, then every two weeks. One active a night.') : (tIdx === 6 ? 'Your next peel night is this coming Saturday. One active a night.' : 'No peel this week. Your next peel night is the Saturday after this one.')) + '</span></div>' +\n      '<div class=\"hb-week' + slotCls() + '\">' + src('From your orders') + plan.map(function (c, i) {\n        return '<div class=\"' + (i === tIdx ? 'is-on ' : '') + (c === 'P' ? 'is-peel' : '') + '\">' + (CAP ? '' : '<span class=\"hb-k\">' + DOW[i] + '</span>') + '<b>' + esc(lbl[c] || '') + '</b></div>';\n      }).join('') + '</div></section>';\n  }\n\n  /* ---------- 4. the living shelf ---------- */\n  function sShelf() {\n    if (!SHELF.length) return '';\n    var U = SHELF.map(function (k) { return { k: k, u: usage(k) }; }).sort(function (a, b) { return b.u.pct - a.u.pct; }); /* running low first */\n    var low = U.filter(function (x) { return x.u.pct >= 60 && CAT[x.k].available && CAT[x.k].variantId; }).sort(function (a, b) { return b.u.pct - a.u.pct; })[0];\n    var cards = U.map(function (x) {\n      var c = CAT[x.k], glow = x.u.pct >= 60;\n      return '<article class=\"hb-pc' + (glow ? ' is-low' : '') + '\" style=\"--c:' + soft(x.k) + ';--cd:' + soft(x.k, 0.15) + ';--p:' + x.u.pct + '\">' +\n        '<div class=\"hb-pc__im\">' + pimg(c, 600) + '<span class=\"hb-ring\"><span class=\"hb-circ\">' + chip(x.k) + '</span></span>' + (glow ? '<span class=\"hb-pc__flag\">Running low</span>' : '') + '</div>' +\n        '<div class=\"hb-pc__tx\"><div class=\"hb-h3\">' + esc(c.name) + '</div>' + (CAP ? '<div class=\"hb-pc__m\"><span>' + esc(x.u.note) + '</span></div><div class=\"hb-bar\"><i style=\"width:' + x.u.pct + '%\"></i></div>' : '<div class=\"hb-pc__m\"><span>' + x.u.pct + '% used</span><span>' + esc(x.u.note) + '</span></div>' +\n        '<div class=\"hb-bar\"><i style=\"width:' + x.u.pct + '%\"></i></div><div class=\"hb-small\">Opened ' + esc(fmtD(OWNED[x.k].d)) + '</div>') + '</div></article>';\n    }).join('');\n    var offer = low ? '<div class=\"hb-offer' + slotCls() + '\">' + src('From your orders \u00B7 shows at 60%+ used') +\n      '<div class=\"hb-offer__in\"><div class=\"hb-k\">Just for you</div><div class=\"hb-offer__h\">Your ' + esc(CAT[low.k].name) + ' is ' + low.u.pct + '% used</div>' +\n      '<p class=\"hb-body\">Top up before you run out, with 10% off. One tap, no code to remember.</p>' +\n      '<button type=\"button\" class=\"hb-btn hb-btn--w\" data-hb-add=\"' + esc(CAT[low.k].variantId) + '\" data-hb-code=\"' + esc(REORDER_CODES[low.k] || REORDER_CODE) + '\">' + ic.bag + ' Reorder \u00B7 10% off</button>' +\n      '<p class=\"hb-small\">10% off is applied at checkout.</p></div>' +\n      '<div class=\"hb-offer__im\">' + pimg(CAT[low.k], 600) + '</div></div>' : '';\n    return '<section class=\"hb-sec\" id=\"hb-shelf\"><div class=\"hb-k hb-dot\">Your shelf</div><h2 class=\"hb-h2\">What\\'s in your bathroom, and how far through you are</h2>' +\n      '<div class=\"hb-shelf' + slotCls() + '\">' + src('From your orders \u00B7 usage is an estimate') + cards + '</div>' +\n      (CAP ? '' : '<p class=\"hb-small hb-note\">Each product lasts about three months with daily use. The ring fills as you go.</p>') + offer + '</section>';\n  }\n\n  /* ---------- 5. a note from your coach ---------- */\n  function sCoach() {\n    if (!coachOK) {\n      /* real customers before import / privacy yes: a calm invitation, no data */\n      return '<section class=\"hb-sec hb-letter\" id=\"hb-coach\"><div class=\"hb-letter__in\"><div class=\"hb-k hb-dot\">Your coach</div><h2 class=\"hb-h2\">Tell us about your skin, and we\\'ll write back to you</h2>' +\n        '<p class=\"hb-body\">A real Homepeel coach reads every answer. It shapes this page around you.</p><a class=\"hb-btn hb-btn--o\" href=\"' + esc(H.coachUrl) + '\">Meet your skincare coach ' + ic.arrow + '</a></div></section>';\n    }\n    var conc = arr(CO.concerns), nights = [P && 'the Instant GLOW Peel every second Saturday', B && B.name + ' twice a week', A && A.name + ' on the other nights'].filter(Boolean);\n    var p1 = 'You told us your skin is ' + lower(CO.skinType || Q.skinType || 'unique to you') + (conc.length ? ', and that ' + listJoin(conc.slice(0, 2).map(lower)) + ' ' + (conc.length > 1 ? 'are' : 'is') + ' what you notice most.' : '.');\n    var p2 = CO.treatments ? 'You\\'ve had ' + esc(CO.treatments) + ' before, so you know that fresh feeling. We\\'ve kept yours gentle and spaced out, so your skin can settle in between.' : '';\n    var p3 = CAP ? 'Right now your nights are kept simple and gentle, with your peel night set aside just for you.' : nights.length ? 'Right now your nights lean on ' + listJoin(nights) + '. Keep the pressure light and give it twelve weeks before you judge.' : '';\n    var p4 = CO.summary ? 'And because you said you want it simple: one step at a time is plenty. That\\'s the whole idea.' : '';\n    var kept = [['Skin type', CO.skinType], ['What you notice most', listJoin(conc.map(lower)).replace(/^./, function (c) { return c.toUpperCase(); })], ['Treatments before', CO.treatments ? sentc(CO.treatments) : ''], ['Reactions', CO.reactions], ['Used before Homepeel', CO.productsBefore ? sentc(CO.productsBefore) : '']].filter(function (r) { return r[1]; });\n    return '<section class=\"hb-sec hb-letter\" id=\"hb-coach\">' +\n      '<figure class=\"hb-letter__im\"><img src=\"' + esc(H.noteImage) + '\" alt=\"\" loading=\"lazy\"></figure>' +\n      '<div class=\"hb-letter__in' + slotCls() + '\">' + src('From your coach answers (Globo import)') +\n      '<div class=\"hb-k hb-dot\">A note from your coach</div>' +\n      '<div class=\"hb-letter__dear mh-name\">' + 'Dear ' + esc(NAME || 'you') + ',' + '</div>' +\n      '<p class=\"hb-body\">' + esc(p1) + '</p>' + (p2 ? '<p class=\"hb-body\">' + p2 + '</p>' : '') + (p3 ? '<p class=\"hb-body\">' + esc(p3) + '</p>' : '') + (p4 ? '<p class=\"hb-body\">' + esc(p4) + '</p>' : '') +\n      '<div class=\"hb-letter__sig\"><span class=\"mh-name\">Jodie</span><span class=\"hb-small\">and your Homepeel coach</span></div>' +\n      (kept.length ? '<details class=\"hb-kept\"><summary><span class=\"hb-k\">What you told us' + (CO.submittedAt && !CAP ? ' \u00B7 ' + esc(fmtM(CO.submittedAt)) : '') + '</span></summary><dl>' + kept.map(function (r) { return '<div><dt class=\"hb-k\">' + esc(r[0]) + '</dt><dd>' + esc(r[1]) + '</dd></div>'; }).join('') + '</dl><p class=\"hb-small\">Only you and your coach can see this. Ask us to change or delete it any time.</p></details>' : '') +\n      '</div></section>';\n  }\n\n  /* ---------- 6. your skin story (timeline) ---------- */\n  function sStory() {\n    var ev = [];\n    if (Q.completedAt) ev.push({ d: Q.completedAt, k: 'Quiz', t: 'You took the skin quiz', s: arr(Q.goals)[0] ? 'You said: ' + lower(arr(Q.goals)[0]) + '.' : '', src: 'From your quiz' });\n    if (coachOK && CO.submittedAt) ev.push({ d: CO.submittedAt, k: 'Coach', t: 'You told your coach about your skin', s: CO.hasPhoto ? 'With a photo, kept private.' : '', src: 'From your coach answers' });\n    ORDERS.slice().reverse().forEach(function (o, i) {\n      var names = (o.i || []).map(function (li) { return li.t; }).filter(Boolean);\n      ev.push({ d: o.d, k: 'Box ' + (i + 1), t: i === 0 ? 'Your first box arrived' : 'Box ' + (i + 1) + ' arrived', s: listJoin(names), src: 'From your orders' });\n    });\n    ev.sort(function (a, b) { return a.d < b.d ? -1 : 1; });\n    if (!ev.length) return '';\n    var nextWk = WEEK ? (WEEK < 12 ? 12 : WEEK < 26 ? 26 : WEEK < 52 ? 52 : (Math.floor(WEEK / 52) + 1) * 52) : null;\n    var nextTxt = nextWk === 12 ? 'Twelve weeks. The moment most women notice the difference.' : nextWk === 26 ? 'Six months of your ritual.' : nextWk === 52 ? 'One whole year of looking after your skin.' : nextWk ? (nextWk / 52) + ' years with Homepeel.' : '';\n    return '<section class=\"hb-sec\" id=\"hb-story\"><div class=\"hb-k hb-dot\">Your skin story</div><h2 class=\"hb-h2\">From your first box to tonight</h2>' +\n      '<ol class=\"hb-tl' + slotCls() + '\">' + src('From your orders + quiz + coach answers') +\n      ev.map(function (e) { return '<li><span class=\"hb-tl__d hb-k\">' + esc(fmtM(e.d)) + '</span><span class=\"hb-tl__dot\"></span><div class=\"hb-tl__t\">' + esc(e.t) + '</div>' + (e.s ? '<div class=\"hb-small\">' + esc(e.s) + '</div>' : '') + '</li>'; }).join('') +\n      (WEEK ? '<li class=\"is-now\"><span class=\"hb-tl__d hb-k\">Today</span><span class=\"hb-tl__dot\"></span><div class=\"hb-tl__t\">Week ' + WEEK + '</div><div class=\"hb-small\">' + SHELF.length + ' products on your shelf.</div></li>' : '') +\n      (nextWk ? '<li class=\"is-next\"><span class=\"hb-tl__d hb-k\">Week ' + nextWk + '</span><span class=\"hb-tl__dot\"></span><div class=\"hb-tl__t\">Coming up</div><div class=\"hb-small\">' + esc(nextTxt) + '</div></li>' : '') +\n      '</ol></section>';\n  }\n\n  /* ---------- 7. then & now (private photos + check-in) ---------- */\n  function sThenNow() {\n    var feel = store('feel');\n    var opts = ['Softer', 'About the same', 'Not sure yet'];\n    var slotA = PHOTO\n      ? '<figure class=\"hb-ph hb-ph--mine\" data-hb-photo' + (PHOTO_TEST_ROW ? ' hidden' : '') + '><img src=\"' + esc(PHOTO) + '\" alt=\"Your photo from your coach consult\" loading=\"lazy\" referrerpolicy=\"no-referrer\"><figcaption><span class=\"hb-k\">' + ic.lock + ' Private, only you see it</span>' + (CO.submittedAt && !TEST ? '<span class=\"hb-small\">From your coach consult, ' + esc(fmtM(CO.submittedAt)) + '</span>' : TEST ? '<span class=\"hb-small\">Example photo, test view only</span>' : '') + '</figcaption></figure>'\n      : (!EXAMPLE && !CAP) ? '' : photoOK\n      ? '<figure class=\"hb-ph hb-ph--slot\">' + ic.face + '<figcaption><span class=\"hb-k\">Your first photo</span><span class=\"hb-small\">From your coach consult' + (CO.submittedAt ? ', ' + esc(fmtM(CO.submittedAt)) : '') + '</span></figcaption>' + (MAP ? '<span class=\"hb-src hb-src--in\">Your photo \u00B7 coach upload</span>' : '') + '</figure>'\n      : '<figure class=\"hb-ph hb-ph--slot\">' + ic.face + '<figcaption><span class=\"hb-k\">Your first photo</span><span class=\"hb-small\">If you sent one to your coach, it lives here.</span></figcaption></figure>';\n    var slotB = '<figure class=\"hb-ph hb-ph--slot hb-ph--add\">' + ic.face + '<figcaption><span class=\"hb-k\">Week ' + (WEEK || 12) + '</span><span class=\"hb-small\">Add one when you\\'re ready. Same light, same spot.</span></figcaption>' + (MAP ? '<span class=\"hb-src hb-src--in\">Your photo \u00B7 later</span>' : '') + '</figure>';\n    return '<section class=\"hb-sec hb-then\" id=\"hb-then\"><div class=\"hb-then__head\"><div class=\"hb-k hb-dot\">Then and now</div><h2 class=\"hb-h2\">Your skin, side by side</h2>' +\n      '<p class=\"hb-body\">' + ic.lock + ' Private. Only you and your coach can see these. Never shared, never used in ads.</p></div>' +\n      (PHOTO_TEST_ROW ? '<div class=\"hb-optin\"><div class=\"hb-optin__tx\"><span class=\"hb-optin__l\" id=\"hb-optin-l\">Show my skin coach photo here</span><span class=\"hb-small\">' + ic.lock + ' Private, only you see it. Off unless you turn it on</span></div>' +\n        '<button type=\"button\" class=\"hb-switch\" role=\"switch\" aria-checked=\"false\" aria-labelledby=\"hb-optin-l\" data-hb-optin><span></span></button></div>' : '') +\n      '<div class=\"hb-then__pair\">' + slotA + slotB + '</div>' +\n      '<div class=\"hb-feel' + slotCls() + '\">' + src('Saved on your device') + '<div class=\"hb-k\">How is your skin feeling this week?</div><div class=\"hb-feel__o\">' +\n      opts.map(function (o) { return '<button type=\"button\" class=\"hb-chip' + (feel === o ? ' is-on' : '') + '\" data-hb-feel=\"' + esc(o) + '\">' + esc(o) + '</button>'; }).join('') + '</div>' +\n      '<p class=\"hb-small\" data-hb-feelmsg>' + (feel ? feelMsg(feel) : 'One tap. It helps your coach if you write in.') + '</p></div></section>';\n  }\n  function feelMsg(f) { return f === 'Softer' ? 'Lovely. That\\'s your ritual working. Keep going.' : f === 'About the same' ? 'That\\'s normal before week twelve. Stay with it, gently.' : 'That\\'s okay. Ask your coach below and we\\'ll help.'; }\n\n  /* ---------- 8. tip + ask + share ---------- */\n  function sTip() {\n    var line = P ? 'Less is more on peel night. One active, then moisturise and sleep. Your skin does the rest.' : nightStep ? 'Tonight it\\'s ' + nightStep.name + ', then leave it. Skin likes a quiet finish.' : 'Cleanse, hydrate and stop. That\\'s a complete night.';\n    var TP = (!CAP && TIPKEY) ? TIPS[TIPKEY] : null, start = '';\n    if (TP) { line = TP.t; start = (tCode === 'P' && P) ? 'It\\'s peel night: one active, then moisturise and sleep' : TP.s; }\n    return '<section class=\"hb-sec hb-tip' + slotCls() + '\">' + src(TP ? 'Chosen from what you told us' : 'Chosen from what you own') + '<div class=\"hb-k\">Jodie\\'s tip for you</div><blockquote><p>' + esc(line) + '</p><cite class=\"hb-k\">' + (CAP ? 'Jodie \u00B7 founder' : 'Jodie \u00B7 founder, 20 years+') + '</cite></blockquote>' +\n      (start ? '<div class=\"hb-start\"><span class=\"hb-k\">' + ic.moon + ' Start tonight</span><span class=\"hb-start__t\">' + esc(start) + '</span></div>' : '') + '</section>';\n  }\n  function sAsk() {\n    return '<section class=\"hb-sec hb-ask\" id=\"hb-ask\"><div class=\"hb-ask__tx\"><div class=\"hb-k hb-dot\">Ask your coach</div><h2 class=\"hb-h2\">Not sure about something? Just ask</h2>' +\n      '<p class=\"hb-body\">A real person writes back, usually within a day. We\\'ll include your routine so you don\\'t have to explain it again.</p></div>' +\n      '<div class=\"hb-ask__f\"><div id=\"mh-askslot\"></div><p class=\"hb-small\">We reply by email.' + (S.coachEmail ? ' Or write to <a class=\"hb-link\" href=\"mailto:' + esc(S.coachEmail) + '\">' + esc(S.coachEmail) + '</a>.' : '') + '</p></div></section>';\n  }\n  function sShare() {\n    return '<section class=\"hb-sec hb-share\"><div><div class=\"hb-k\">Know someone who\\'s confused about skincare?</div><p class=\"hb-body\">Send them the two-minute skin quiz. They\\'ll get their own routine, in order.</p></div>' +\n      '<button type=\"button\" class=\"hb-btn hb-btn--o\" data-hb-share>Copy the quiz link</button><p class=\"hb-small\" data-hb-sharemsg hidden></p></section>';\n  }\n\n  function render() {\n    /* Signed-out landing v2 (Jodie 24 Oct ~4:10pm): guests (incl. email clicks, utm_source=klaviyo / ?mh) never open on\n       someone else's name. Clean welcome card first, then \"A peek at a member page\" and the Kathy example below.\n       Signed-in customers (EXAMPLE false) get their own hub with no card. Capture mode (?mhcap, preview only) is unchanged. */\n    var GUEST = EXAMPLE && !CAP;\n    var BFLINK = location.hash === '#bf-amount';\n    var openUrl = S.loginUrl || '/customer_authentication/login?return_to=%2Fpages%2Fmy-homepeel';\n    /* Email prefill (24 Oct ~4:30pm): the section's early script saved her email (from the email link's mh value) in this tab only.\n       Shopify's sign-in accepts login_hint (prefills) and login_hint_mode=submit (sends the code straight away). */\n    var HINT = ''; try { HINT = GUEST ? (sessionStorage.getItem('mh_hint') || '') : ''; if (!GUEST) sessionStorage.removeItem('mh_hint'); } catch (e) {}\n    /* Flow v3 (Jodie 24 Oct 5:05pm): ONE field. She types her email here, taps Open your page, and Shopify goes straight to\n       \"Enter code\" (login_hint + login_hint_mode=submit). That skips Shopify's two-choice screen (Continue with Shop / or Email).\n       A known email (from the email link) just sits in the field; no \"Send my code to j...@ / Not you?\" second option. */\n    var card = GUEST ? '<section class=\"hb-wel\" aria-labelledby=\"hb-wel-h\"><div class=\"hb-wel__in\">' +\n      '<div class=\"hb-k\">My Homepeel</div>' +\n      '<h1 class=\"hb-wel__h\" id=\"hb-wel-h\"><span class=\"hb-wel__nm mh-name\">Welcome home</span></h1>' +\n      (BFLINK ? '<p class=\"hb-wel__p\">Your Homepeel Credits are waiting on your page</p>' : '<p class=\"hb-wel__p\">Hey you. Your routine, your refills, your Homepeel.</p>') +\n      '<form class=\"hb-wel__f\" data-hb-open action=\"' + esc(openUrl) + '\" method=\"get\" novalidate>' +\n        '<label class=\"hb-wel__l\" for=\"hb-wel-email\">Pop in the email you place your orders with.</label>' +\n        '<input class=\"hb-wel__in-e\" id=\"hb-wel-email\" name=\"login_hint\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" autocapitalize=\"off\" spellcheck=\"false\" placeholder=\"you@email.com\" value=\"' + esc(HINT) + '\" required>' +\n        '<p class=\"hb-wel__err\" data-hb-err hidden>Please check your email.</p>' +\n        '<button type=\"submit\" class=\"hb-btn hb-wel__btn\">Open your page</button>' +\n      '</form>' +\n      '<p class=\"hb-small hb-wel__s\">We\\u2019ll email you a quick code.</p>' +\n      '<p class=\"hb-small hb-wel__s hb-wel__help\">Code not working? Use the newest code, in this same window, within 15 minutes. Check Junk too.</p>' +\n      '</div></section>' : '';\n    /* Flow v6 (Jodie 24 Oct 5:24pm): signed-out visitors get the welcome card and NOTHING under it (no Kathy peek).\n       Kathy's example data stays in this file: theme editor (no card) and ?mhcap GIF capture still render the example hub. */\n    if (GUEST) { app.innerHTML = (bfPreview() ? '<div class=\"hb\">' + sBf() + '</div>' : '') + card; return; }\n    app.innerHTML = card + '<div class=\"hb' + (GUEST ? ' hb--peek' : '') + '\">' +\n      (GUEST ? '' : '<div class=\"hb-top\"><span class=\"hb-k\">My Homepeel</span>' + (TEST ? '<span class=\"hb-test\">Test view \\u00b7 example products + answers</span>' : '') + '</div>') +\n      sHello() + sTonight() + sWeek() + sShelf() + sBf() + sCoach() /* Jodie 27 Oct 5:35pm: Credits much further down, greeting first */ + sStory() + sThenNow() + sTip() + sAsk() + sShare() +\n      (MAP ? '<p class=\"hb-foot hb-small\">\"Kathy\" is an example customer. Every lilac-dashed spot shows where her real details land.</p>' : (GUEST ? '<p class=\"hb-foot hb-small\">\"Kathy\" is an example member. <a class=\"hb-link\" href=\"#hb-wel-email\" data-hb-tofield>Open your page</a> to see yours.</p>' : '')) +\n      '</div>';\n    var slot = document.getElementById('mh-askslot'), form = document.getElementById('mh-askform');\n    if (slot && form) {\n      form.hidden = false; slot.appendChild(form);\n      var f = form.querySelector('form');\n      if (f && !f.querySelector('[name=\"contact[Routine]\"]')) { var i = document.createElement('input'); i.type = 'hidden'; i.name = 'contact[Routine]'; i.value = SHELF.map(function (k) { return CAT[k].name; }).join(', '); f.appendChild(i); }\n    }\n    var v = app.querySelector('.hb-ritual video'); if (v) { v.muted = true; var p = v.play(); if (p && p.catch) p.catch(function () {}); }\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); } }); }, { rootMargin: '0px 0px -10% 0px' });\n      app.querySelectorAll('.hb-sec,.hb-hello').forEach(function (el) { io.observe(el); });\n    } else app.querySelectorAll('.hb-sec,.hb-hello').forEach(function (el) { el.classList.add('is-in'); });\n  }\n\n  /* Flow v3: one field -> Shopify \"Enter code\" directly. Empty or odd email -> a quiet line, never a second screen. */\n  root.addEventListener('submit', function (e) {\n    var f = e.target; if (!f || !f.hasAttribute || !f.hasAttribute('data-hb-open')) return;\n    e.preventDefault();\n    var inp = f.querySelector('input[type=email]'), err = f.querySelector('[data-hb-err]'), v = (inp.value || '').trim();\n    if (!/^[^\\s@<>\"']+@[^\\s@<>\"']+\\.[a-z]{2,}$/i.test(v) || v.length > 254) { if (err) err.hidden = false; inp.setAttribute('aria-invalid', 'true'); inp.focus(); return; }\n    if (err) err.hidden = true; inp.removeAttribute('aria-invalid');\n    try { sessionStorage.removeItem('mh_hint'); } catch (x) {}\n    var b = f.querySelector('button'); if (b) { b.disabled = true; b.textContent = HINT_SUBMIT ? 'Sending your code\\u2026' : 'Opening\\u2026'; }\n    /* Test view: on a preview theme, keep the theme + ?mhtest=1 through sign-in so she lands back on her test page. */\n    var act = f.getAttribute('action');\n    /* Black Friday email link (?bf=1 or #bf-amount): come back to the amount block after sign-in. */\n    if (location.hash === '#bf-amount') act = '/customer_authentication/login?return_to=' + encodeURIComponent('/pages/my-homepeel#bf-amount');\n    if (!ONMAIN && /[?&]mhtest=1(&|$)/.test(location.search) && window.Shopify && Shopify.theme && Shopify.theme.id) act = '/customer_authentication/login?return_to=' + encodeURIComponent('/pages/my-homepeel?preview_theme_id=' + Shopify.theme.id + '&mhtest=1');\n    location.href = act + '&login_hint=' + encodeURIComponent(v) + (HINT_SUBMIT ? '&login_hint_mode=submit' : '');\n  });\n  window.addEventListener('pageshow', function (e) { if (e.persisted) { var b = app.querySelector('.hb-wel__btn'); if (b) { b.disabled = false; b.textContent = 'Open your page'; } } });\n\n  root.addEventListener('click', function (e) {\n    var cp = e.target.closest ? e.target.closest('[data-hb-copy]') : null;\n    if (cp) { var k = cp.getAttribute('data-hb-copy'), done = function () { cp.textContent = 'Copied'; cp.classList.add('is-on'); setTimeout(function () { cp.textContent = 'Copy'; cp.classList.remove('is-on'); }, 2200); };\n      if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(k).then(done, function () { window.prompt('Your code', k); }); else window.prompt('Your code', k); return; }\n    var tf = e.target.closest ? e.target.closest('[data-hb-tofield]') : null;\n    if (tf) { var fe = document.getElementById('hb-wel-email'); if (fe) { e.preventDefault(); fe.scrollIntoView({ block: 'center', behavior: 'smooth' }); setTimeout(function () { fe.focus(); }, 350); } return; }\n    var sw = e.target.closest ? e.target.closest('[data-hb-optin]') : null;\n    if (sw) { /* test view only: flips the example on this screen, saves nothing */\n      var on = sw.getAttribute('aria-checked') !== 'true'; sw.setAttribute('aria-checked', on ? 'true' : 'false');\n      var ph = app.querySelector('[data-hb-photo]'); if (ph) ph.hidden = !on; return; }\n    var t = e.target.closest ? e.target.closest('[data-hb-done],[data-hb-add],[data-hb-feel],[data-hb-share]') : null; if (!t) return;\n    if (t.hasAttribute('data-hb-done')) { var dn = store('done') || {}; dn[D.today] = 1; store('done', dn); t.classList.add('is-done'); t.textContent = 'Done for tonight. Sleep well' + (NAME ? ', ' + NAME : '') + '.'; }\n    else if (t.hasAttribute('data-hb-feel')) { var f = t.getAttribute('data-hb-feel'); store('feel', f); app.querySelectorAll('[data-hb-feel]').forEach(function (b) { b.classList.toggle('is-on', b === t); }); var m = app.querySelector('[data-hb-feelmsg]'); if (m) m.textContent = feelMsg(f); }\n    else if (t.hasAttribute('data-hb-share')) {\n      var url = (location.origin || '') + (S.quizUrl || '/pages/build-my-skin-routine-skincare-quiz'), msg = app.querySelector('[data-hb-sharemsg]');\n      var ok = function () { if (msg) { msg.hidden = false; msg.textContent = 'Link copied.'; } };\n      if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(url).then(ok, function () { window.prompt('Copy this link:', url); ok(); }); else { window.prompt('Copy this link:', url); ok(); }\n    }\n    else if (t.hasAttribute('data-hb-add')) {\n      if (EXAMPLE) { toast('Example page: nothing is added.'); return; }\n      t.disabled = true;\n      fetch(S.cartAddUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: [{ id: +t.getAttribute('data-hb-add'), quantity: 1 }] }) })\n        .then(function (r) {\n          if (!r.ok) throw 0;\n          /* Reorder offer (Jodie yes 24 Oct 5:39pm): put the real 10% code on her cart so there's no code to remember.\n             Per-product code from data-hb-code (see REORDER_CODES), so only the reordered product gets 10%. */\n          if (!t.closest('.hb-offer')) return r;\n          return fetch((S.cartAddUrl || '/cart/add.js').replace(/add\\.js$/, 'update.js'), { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ discount: t.getAttribute('data-hb-code') || REORDER_CODE }) }).catch(function () {});\n        })\n        .then(function () { toast('Added to your bag.'); document.dispatchEvent(new CustomEvent('cart:refresh')); })\n        .catch(function () { toast('Sorry, that didn\\'t add. Please try again.'); })\n        .then(function () { t.disabled = false; });\n    }\n  });\n  render();\n  /* Black Friday email link: make sure she lands on the amount block (mid-page since 27 Oct; this also covers a lost #hash). */\n  if (location.hash === '#bf-amount') { var bfe = document.getElementById('bf-amount'); if (bfe) { bfe.classList.add('is-in'); /* 27 Oct: the block now sits mid-page, so jump (not smooth) and repeat once images have loaded, or the jump falls short */ var bfGo = function () { bfe.scrollIntoView({ block: 'start', behavior: 'instant' }); }; setTimeout(bfGo, 60); setTimeout(bfGo, 900); if (document.readyState !== 'complete') window.addEventListener('load', function () { setTimeout(bfGo, 50); }, { once: true }); } }\n})();\n"],
  "mappings": "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",
  "names": ["P", "B", "A"]
}
