{
  "version": 3,
  "sources": ["/cdn/shop/t/42/assets/cm-product.js?x=1794340535991"],
  "sourcesContent": ["/* CrowdMerch product page (sections/cm-main-product.liquid), ported from the prototype's\n * vProduct / vStubby: colours, quantity, branding suite (positions, methods, logos, size\n * and up/down), the branded price ex GST from DecorationJSON, Order now (a new cart),\n * Quick quote, Order sample, live stock, price breaks and the similar products sort.\n * Display prices only: the SaaS checkout price endpoint is authoritative.\n */\n(function () {\n  'use strict';\n  function start() {\n    var CM = window.CM, root = document.querySelector('[data-cm-pdp]'), dataEl = document.querySelector('script[data-cm-product]');\n    if (!CM || !root || !dataEl) return;\n    var P;\n    try { P = JSON.parse(dataEl.textContent); } catch (e) { return; }\n    var esc = CM.esc, money = CM.money;\n    var dj = CM.parseDJ(P.dj);\n    var POS = CM.buildPositions(dj, P.positions, P.printarea, P.hero);\n    // Production times (Dex): the same method once per time (\"Same Day Print Per Col/Pos\", \"12 Days Print Per Col/Pos\")\n    // is one method here; the chosen time picks its line (decsOf).\n    var SPEED_RE = /^(same day|24 hrs\\.?|\\d+ days)\\s+/i;\n    if (P.options && P.options.speed) POS.forEach(function (p) {\n      var out = [], byKey = {};\n      p.methods.forEach(function (m) {\n        var k = /^other:/.test(m.key) ? 'other:' + m.key.slice(6).replace(SPEED_RE, '') : m.key;\n        if (byKey[k]) { byKey[k].decs = byKey[k].decs.concat(m.decs.filter(function (d) { return byKey[k].decs.indexOf(d) < 0; })); return; }\n        byKey[k] = Object.assign({}, m, { key: k, name: String(m.name || '').replace(SPEED_RE, ''), decs: m.decs.slice() });\n        out.push(byKey[k]);\n      });\n      out.forEach(function (m) { // every time's copy of an unclassified method, also when only the default line was offered\n        if (!/^other:/.test(m.key)) return;\n        dj.decs.forEach(function (d) { if (!d.method && 'other:' + d.name.replace(SPEED_RE, '') === m.key && m.decs.indexOf(d) < 0) m.decs.push(d); });\n      });\n      p.methods = out;\n    });\n    // Normal DTF before oversize DTF, so a garment opens on normal DTF (Scott, 11 Nov 2026).\n    POS.forEach(function (p) {\n      var i = p.methods.findIndex(function (m) { return m.key === 'dtf'; }), j = p.methods.findIndex(function (m) { return m.key === 'dtf_oversize'; });\n      if (i > j && j >= 0) { var d = p.methods.splice(i, 1)[0]; p.methods.splice(j, 0, d); }\n    });\n    var params = new URLSearchParams(location.search);\n    var editId = params.get('editcart');\n    var editCart = editId ? CM.carts.get(editId) : null;\n    if (editCart && (editCart.status !== 'open' || String(editCart.product.appaid) !== String(P.appaid))) editCart = null;\n\n    // ---- State -------------------------------------------------------------------\n    /* Two minimums (Scott, 2 Nov 2026): the production MOQ is the first break in the\n       DecorationJSON; the display MOQ (custom.collectiondisplayqty) is the quantity the page\n       opens on. Quantity buttons are every break in the DecorationJSON from the production MOQ,\n       the display MOQ, and up to three larger round quantities. */\n    var displayMoq = P.moq;\n    (function () {\n      var qs = {};\n      if (dj) {\n        (dj.undec || []).forEach(function (b) { qs[b.qty] = 1; });\n        dj.decs.forEach(function (d) { d.breaks.forEach(function (b) { qs[b.qty] = 1; }); });\n      }\n      var firsts = dj ? [dj.undec[0] ? dj.undec[0].qty : 1].concat([Math.min.apply(null, dj.decs.map(function (d) { return d.breaks[0].qty; }).concat([Infinity]))]) : [displayMoq];\n      var prod = Math.max.apply(null, firsts.filter(isFinite)) || displayMoq;\n      P.moq = Math.max(1, Math.min(prod, displayMoq));\n      var list = Object.keys(qs).map(Number).filter(function (n) { return n >= P.moq; });\n      if (!list.length) list = String(P.chips || '').split(',').map(function (x) { return parseInt(x, 10); }).filter(function (n) { return n >= P.moq; });\n      // Buttons are tidy steps, not the supplier's own breaks (Scott, 8 Nov 2026: an umbrella showed 1, 20, 1000, 2500,\n      // 5000, 10000): the minimum, the opening quantity, then 25 / 50 / 100 / 250 / 500 / 1000 / 2500 above it, six or\n      // seven in all. Prices still come from the real breaks; the exact-number box covers anything else.\n      var steps = [10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000].filter(function (n) { return n > P.moq; });\n      list = [P.moq, displayMoq].concat(steps).filter(function (n, i, a) { return n >= P.moq && a.indexOf(n) === i; }).sort(function (a, b) { return a - b; });\n      P.chipList = list.slice(0, list.length > 7 && list[0] < 10 ? 7 : 6);\n    })();\n    var chips = P.chipList;\n    var firstV = P.variants.find(function (v) { return v.id === P.selected; }) || P.variants[0] || { colour: '', id: null };\n    var S = {\n      qty: Math.max(P.moq, parseInt(params.get('qty'), 10) || displayMoq),\n      colour: firstV.colour, photo: 0, adj: null, live: false, notice: {}, colOverride: {},\n      stockOn: false, stockAll: false, skus: false, stock: null, logos: [], logoData: {}, info: {}, facts: {}, pos: {}\n    };\n    var saved = editCart ? null : CM.store.get('brand:' + P.appaid, null);\n    POS.forEach(function (p, i) {\n      var m = p.methods[0].key, src = null;\n      if (editCart) src = (editCart.branding.positions || []).find(function (x) { return x.key === p.key; });\n      else if (saved && saved[p.key]) src = saved[p.key];\n      S.pos[p.key] = src ? { on: !!(src.on !== false), m: p.methods.some(function (x) { return x.key === src.m; }) ? src.m : p.methods.some(function (x) { return x.key === src.method; }) ? src.method : m, logo: src.logoId || src.logo || null, s: +src.s || 1, y: +src.y || 0, r: +src.r || 0, land: !!src.land }\n        : { on: i === 0, m: m, logo: null, s: 1, y: 0, r: 0, land: false };\n      if (src && src.colOverride) S.colOverride[p.key] = src.colOverride;\n    });\n    if (!params.get('variant') && P.variants.length > 1) { var lead = colours()[0]; if (lead) S.colour = lead.name; } // until one is picked, prices and stock use the first colour in our order\n    if (editCart) { S.colour = editCart.colour || S.colour; S.qty = editCart.pqty || S.qty; S.colourPicked = true; }\n    if (!sel().length && POS[0]) S.pos[POS[0].key].on = true;\n\n    // Specials (Scott, 8 Nov 2026; SaaS docs/bundles.md): ?bundle=KEY goes straight to the checkout with the\n    // bundle's quantity and its one full colour position; colours, sizes and the logo are chosen there.\n    var bundleKey = editCart ? null : params.get('bundle');\n    if (bundleKey) {\n      document.body.insertAdjacentHTML('beforeend', '<div class=\"cm cm-bundlewait\" role=\"status\"><p>Setting up your bundle\u2026</p></div>');\n      CM.api('crowdmerch/bundles/' + encodeURIComponent(bundleKey)).then(function (r) {\n        var b = r.ok && r.data && r.data.bundle, wait = document.querySelector('.cm-bundlewait');\n        if (!b || String(b.product_id) !== String(P.appaid)) { if (wait) wait.remove(); return; }\n        var hasDec = function (m) { return m.decs.some(function (d) { return String(d.id) === String(b.decID); }); };\n        var fits = POS.filter(function (p) { return p.methods.some(hasDec); });\n        var want = String(b.position || '').toLowerCase();\n        var pos = fits.find(function (p) { return String(p.name).toLowerCase() === want; }) || fits.find(function (p) { return String(p.name).toLowerCase().indexOf(want) >= 0; }) || fits[0] || POS[0];\n        if (!pos) { if (wait) wait.remove(); return; }\n        POS.forEach(function (p) { if (S.pos[p.key]) S.pos[p.key].on = false; });\n        var m = pos.methods.find(hasDec) || pos.methods[0];\n        S.pos[pos.key].on = true; S.pos[pos.key].m = m.key;\n        S.qty = b.qty;\n        var branding = { positions: snapshot().map(function (x) { return Object.assign(x, { decID: b.decID }); }), options: null };\n        var cart = CM.carts.newOrder(cartData(branding));\n        cart.bundle = { key: b.key, qty: b.qty, name: b.name, total: b.total, label: b.label || 'full colour print' };\n        CM.carts.put(cart); CM.carts.setCurrent(cart.id);\n        location.replace(CM.pageUrl('cart', { cart: cart.id }));\n      });\n    }\n\n    // \"Mix colours and sizes\u2026\" only for what this product really has more than one of\n    // (colour variants, sizes from the product details, or the colours and sizes in live stock).\n    function mixNote() {\n      var cols = P.variants.length, sizes = String(P.sizes || '').split(/[,\\/]|\\s+-\\s+/).map(function (x) { return x.trim(); }).filter(Boolean).length;\n      if (S.stock && S.stock.ok && P.variants.length > 1) { var g = CM.stockGrid(S.stock.rows); cols = Math.max(cols, g.colours.length); sizes = Math.max(sizes, g.sizes.filter(function (z) { return z !== 'One size'; }).length); }\n      var what = cols > 1 && sizes > 1 ? 'colours and sizes' : cols > 1 ? 'colours' : sizes > 1 ? 'sizes' : '';\n      return what ? ' <span class=\"mixnote\">Mix ' + what + ' without affecting total price.</span>' : '';\n    }\n    function variant() { return P.variants.find(function (v) { return v.colour === S.colour; }) || P.variants[0] || {}; }\n    function colours() {\n      return CM.sortColours(P.variants.map(function (v) {\n        var sw = P.swatches[v.colour];\n        var hex = (sw && /^#|^rgb/i.test(sw)) ? sw : (v.imgHex || CM.colourHex(v.colour, sw, v.fams));\n        return { name: v.colour, hex: hex, fam: (v.fams || []).length ? CM.normFam(v.fams[0]) : CM.famOf(v.colour, hex), v: v };\n      }));\n    }\n    function sel() { return POS.filter(function (p) { return S.pos[p.key] && S.pos[p.key].on; }).map(function (p) { return p.key; }); }\n    function posOf(k) { return POS.find(function (p) { return p.key === k; }) || POS[0]; }\n    function methodOf(k) { var p = posOf(k); return p.methods.find(function (m) { return m.key === S.pos[k].m; }) || p.methods[0]; }\n    function mmOf(k) { var m = methodOf(k), p = posOf(k); return m.max_mm || p.max_mm || null; }\n    // A garment print area can be turned landscape (Scott, 6 Nov 2026: an A3 DTF print is portrait or landscape at the\n    // same price): the shown and drawn area swaps, the price still comes from mmOf.\n    function canLand(k) { var mm = mmOf(k); return !!(GARMENT && mm && mm[0] && mm[1] && mm[0] !== mm[1]); }\n    function mmShown(k) { var mm = mmOf(k); return mm && canLand(k) && S.pos[k] && S.pos[k].land ? [mm[1], mm[0]] : mm; }\n    // Garments: the logo is drawn to scale against the body width in the photo at size L (CM.garmentSize).\n    // A pale garment on a white background can't be measured, so one reading from the darker colours stands for all\n    // of them (the supplier shoots every colour the same way); a colour's own reading is used when there is one.\n    var GARMENT = CM.garmentSize(P), SPAN = {}, REF = null, refTried = false;\n    function spanReady() { refreshPreviews(); }\n    function spanFor(url) {\n      if (!GARMENT || !url) return null;\n      if (!refTried) {\n        refTried = true;\n        P.variants.filter(function (v) { return v.img && !v.hero; }).slice(0, 6).reduce(function (chain, v) {\n          return chain.then(function (got) { return got || CM.garmentSpan(v.img); });\n        }, Promise.resolve(null)).then(function (sp) { if (sp) { REF = sp; spanReady(); } });\n      }\n      if (SPAN[url] === undefined) { SPAN[url] = null; CM.garmentSpan(url).then(function (sp) { SPAN[url] = sp; if (sp) spanReady(); }); }\n      return SPAN[url] || REF;\n    }\n    function mockNote() {\n      var sp = GARMENT && spanFor(viewImage('front'));\n      if (!sp) return '';\n      return '<p class=\"mocknote muted\">Mockup to scale for size ' + esc(GARMENT.size) + ', ' + GARMENT.cm + ' cm wide across the chest' + (GARMENT.chart ? ' (supplier size chart)' : '') + '.</p>';\n    }\n    function areaOf(k) {\n      var p = posOf(k); if (!p.area) return null;\n      var l = p.area[0], t = p.area[1], w = p.area[2], mm = mmShown(k), base = p.max_mm;\n      var sp = mm && mm[0] && spanFor(viewImage(p.view));\n      if (sp) {\n        var gw = (mm[0] / (GARMENT.cm * 10)) * (sp[1] - sp[0]) * 100, cx = l + w / 2;\n        gw = Math.min(gw, 96);\n        return [cx - gw / 2, t, gw];\n      }\n      var ww = mm && base && base[0] ? w * mm[0] / base[0] : w;\n      ww = Math.min(ww, 96);\n      return [l + (w - ww) / 2, t, ww];\n    }\n    function infoFor(k) {\n      var id = S.pos[k].logo, i = (id && S.info[id]) || S.info._cm || { solid: true, colours: 1, palette: ['#1A1B18'] };\n      var o = S.colOverride[k];\n      return o ? Object.assign({}, i, { colours: o, override: true }) : i;\n    }\n    // The logo's size on the product (the area scaled by the shopper's resize), for size-tiered lines.\n    // No mockup: no size to choose (Scott, 9 Nov 2026), so priced and checked at the area's maximum.\n    function sizeOf(k) { return canMock(k) ? (+S.pos[k].s || 1) : 1; }\n    function logoMm(k) { var mm = mmOf(k), s = sizeOf(k); return mm && mm[0] ? [Math.round(mm[0] * s), mm[1] ? Math.round(mm[1] * s) : null] : null; }\n    function posPrice(k) {\n      var m = methodOf(k), info = CM.methodInfo(m.key);\n      return CM.priceMethod(decsOf(m), m.key, info.solid ? infoFor(k).colours : null, S.qty, logoMm(k)) || { unit: 0, setup: 0, review: true };\n    }\n    function brandPrice(q) {\n      var unit = 0, setup = 0;\n      sel().forEach(function (k) {\n        var m = methodOf(k), info = CM.methodInfo(m.key), pp = CM.priceMethod(decsOf(m), m.key, info.solid ? infoFor(k).colours : null, q, logoMm(k));\n        if (pp) { unit += pp.unit; setup += pp.setup; }\n      });\n      return { unit: unit, setup: setup, count: sel().length };\n    }\n    // \"including full colour DTF to front\", \"including 2 colour screen print to front and embroidery to left sleeve\".\n    // A supplier branding template exists (custom.hasbrandingtemplate): said near the mockup and quote buttons, never linked.\n    function templateNote(where) {\n      if (!P.hasTemplate) return '';\n      return '<p class=\"tplnote muted\">' + (where === 'quote'\n        ? 'We\\'ll email the branding template with your quote or invoice.'\n        : 'Branding template available: it shows every branding position and its maximum size. We\\'ll email it with your quote or invoice.') + '</p>';\n    }\n    function brandingWords() {\n      var groups = [], byPhrase = {};\n      sel().forEach(function (k) {\n        var key = S.pos[k].m, info = CM.methodInfo(key), pp = posPrice(k);\n        var phrase = key === 'dtf' ? 'full colour DTF' : key === 'dtf_oversize' ? 'full colour oversize DTF'\n          : info.name.replace(/^[A-Z][a-z]/, function (c) { return c.toLowerCase(); });\n        if (info.solid && pp && pp.colours && key !== 'embroidery') phrase = pp.colours + ' colour ' + phrase;\n        if (!byPhrase[phrase]) { byPhrase[phrase] = []; groups.push(phrase); }\n        byPhrase[phrase].push(String(posOf(k).name || 'front').toLowerCase());\n      });\n      var and = function (a) { return a.length > 1 ? a.slice(0, -1).join(', ') + ' and ' + a[a.length - 1] : a[0]; };\n      return groups.length ? 'including ' + and(groups.map(function (g) { return g + ' to ' + and(byPhrase[g]); })) : 'unbranded';\n    }\n    function anyReview() { return sel().some(function (k) { return posPrice(k).review; }); }\n    function saveBrand() {\n      if (editCart) return;\n      var o = {};\n      POS.forEach(function (p) { var a = S.pos[p.key]; o[p.key] = { on: a.on, m: a.m, logo: a.logo, s: a.s, y: a.y, r: a.r || 0, land: !!a.land, colOverride: S.colOverride[p.key] || null }; });\n      CM.store.set('brand:' + P.appaid, o);\n    }\n\n    // ---- Logos ------------------------------------------------------------------------\n    var CMLOGO = CM.cfg.logo;\n    function loadLogos() {\n      return CM.logos.all().then(function (list) {\n        list = list.filter(function (x) { return x.kind !== 'data'; }); // personalisation lists aren't logos\n        S.logos = list.map(function (x) { S.logoData[x.id] = x.data; return x.id; });\n        var u = CM.userLogo.id();\n        // A logo the shopper tried elsewhere goes on the first position by default.\n        if (!editCart && !saved && u && S.logoData[u]) sel().forEach(function (k) { if (!S.pos[k].logo) S.pos[k].logo = u; });\n        POS.forEach(function (p) { var id = S.pos[p.key].logo; if (id && !S.logoData[id]) S.pos[p.key].logo = null; });\n        return Promise.all([CM.analyzeLogo(CMLOGO).then(function (i) { S.info._cm = i; })].concat(S.logos.map(function (id) {\n          return Promise.all([CM.analyzeLogo(S.logoData[id]).then(function (i) { S.info[id] = i; }), CM.logos.facts(id).then(function (f) { S.facts[id] = f; })]);\n        })));\n      });\n    }\n    // ---- Artwork check (never blocks; flags print ready or not) ---------------------------\n    function preflightFor(k) {\n      var a = S.pos[k], mm = mmOf(k);\n      if (!a.logo || !S.facts[a.logo]) return null;\n      return CM.preflight(S.facts[a.logo], a.m, mm ? Math.round(mm[0] * sizeOf(k)) : null);\n    }\n    // Not shown on the page for now (Scott, 4 Nov 2026): the check goes into the quote and order emails once\n    // we've been in touch with the client. It still travels with the order (snapshot().preflight).\n    var SHOW_PREFLIGHT = false;\n    function preflightHtml(k) {\n      var pf = SHOW_PREFLIGHT && preflightFor(k);\n      if (!pf) return '';\n      return '<div class=\"preflight ' + (pf.ready ? 'ok' : 'help') + '\" role=\"status\"><p class=\"pfhead\">' + (pf.ready ? '\u2713 Print ready' : 'Not print-ready yet') + '</p>' +\n        '<ul>' + pf.items.map(function (i) { return '<li class=\"' + (i.ok ? (i.warn ? 'warn' : 'ok') : 'no') + '\">' + esc(i.text) + '</li>'; }).join('') + '</ul>' +\n        (pf.ready ? '' : '<p class=\"pftip\">' + esc(pf.tip) + ' You can still order with this file: our team will help make it print-ready. <label for=\"pf-' + k + '\" class=\"mini-btn\">Upload another file</label></p>') + '</div>';\n    }\n    // A shaded or photo logo on a solid-colour method (embroidery, screen, pad\u2026): warn, never switch the method (Scott, 3 Nov 2026).\n    function enforceSolid() {\n      sel().forEach(function (k) {\n        var a = S.pos[k], info = CM.methodInfo(a.m), li = infoFor(k);\n        if (info.solid && a.logo && !li.solid) {\n          S.notice[k] = info.name + ' needs a logo made of solid colours. Yours has shading or photo detail, so our team will check it with you and may need a solid-colour version before production.';\n        } else if (S.notice[k] && /needs a logo made of solid colours/.test(S.notice[k])) {\n          delete S.notice[k];\n        }\n      });\n    }\n\n    // ---- Pictures ------------------------------------------------------------------------\n    function lumOfColour() { var c = colours().find(function (x) { return x.name === S.colour; }); return c ? CM.lum(c.hex) : 1; }\n    function overlay(area, src, own, dy, warp, k, hp) {\n      var l = area[0], t = area[1] + (+dy || 0), w = area[2], dark = lumOfColour() <= 0.6;\n      var style = 'left:' + l + '%;top:' + t + '%;width:' + w + '%;' + (hp ? 'height:' + hp + '%;object-fit:contain;object-position:center top;' : '') + (own ? '' : (dark ? 'filter:invert(1)' : ''));\n      if (warp) return '<img class=\"logo-ov' + (own ? '' : ' cm-mark') + '\" data-cm-warp=\"1\" data-src=\"' + esc(src) + '\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\" style=\"' + style + '\"' + (k ? ' data-pos=\"' + k + '\"' : '') + '>';\n      return '<img class=\"logo-ov' + (own ? '' : ' cm-mark') + '\" src=\"' + esc(src) + '\" alt=\"\" style=\"' + style + '\"' + (k ? ' data-pos=\"' + k + '\"' : '') + '>';\n    }\n    // Which colour photos can carry a mockup (Scott, 5 Nov 2026): SaaS checks each for example branding\n    // (custom.mockupphotos, per colour and side): \"ok\", \"skip\", or the box of a small sample logo to paint over\n    // first. A photo not listed isn't checked yet: no mockup on it. A colour photo that is also the hero counts\n    // once it is cleared. A product published before the check has no list: as before, never on the hero.\n    var MP = P.mockupphotos || null;\n    function photoState(view) {\n      var cv = variant();\n      if (!MP) return cv.hero ? null : 'ok';\n      var c = MP[cv.colour];\n      return (c && c[view]) || null;\n    }\n    function patchOf(view) { var st = photoState(view); return Array.isArray(st) && st.length === 4 ? st : null; }\n    function viewImage(view) {\n      // Mockups only on colour photos (Scott, 2 Nov 2026): the chosen colour's front and back,\n      // else the first colour in our order. Never on a style photo; no colour photo, no mockup.\n      var cv = variant(), st = photoState(view);\n      if (!cv || !cv.img || !st || st === 'skip') return null;\n      if (view === 'front') return cv.img;\n      if (view === 'back' && cv.alt && cv.alt[0]) return cv.alt[0];\n      return null;\n    }\n    function photoImg(view, cls) {\n      var patch = patchOf(view), src = viewImage(view);\n      return patch ? '<img class=\"' + cls + '\" src=\"' + esc(src) + '\" data-src=\"' + esc(src) + '\" data-cm-clean=\"' + esc(JSON.stringify(patch)) + '\" style=\"visibility:hidden\" alt=\"\">'\n        : '<img class=\"' + cls + '\" src=\"' + esc(src) + '\" alt=\"\" loading=\"lazy\">';\n    }\n    // A mockup only where it can be believed (Scott, 4 Nov 2026): a position read from the supplier's template\n    // or set by staff, or a garment (its size chart in cm, else a typical width), and in each case a colour photo of\n    // that side. Anything else gets a guide card: the logo by itself, with the position and its largest size.\n    function canMock(k) {\n      if (!CM.mockAllowed(P)) return false; // only the subcategories being tested (CM.MOCK_SUBCATS)\n      var p = posOf(k);\n      if (!p.area || !viewImage(p.view)) return false;\n      // No chart: a typical width for the garment type, size L (Scott, 7 Nov 2026), noted under the mockup.\n      return p.source === 'template' || p.source === 'staff' || !!GARMENT;\n    }\n    function overlayFor(k) {\n      var a = S.pos[k], ar = areaOf(k), src = a.logo ? S.logoData[a.logo] : CMLOGO, sc = +a.s || 1, p = posOf(k);\n      src = CM.rotateLogo(src, a.r, refreshPreviews); // turned 90\u00B0 at a time, inside the same area\n      if (p.quad && src) return quadOverlay(p, src, !!a.logo, sc, a.y, mmOf(k));\n      if (!ar || !src) return '';\n      var ww = ar[2] * sc, ms = mmShown(k);\n      // Turned or landscape: the logo is kept inside the area's height too (photos are square, so % match).\n      var hp = (a.r % 180 || a.land) && ms && ms[0] && ms[1] ? ww * ms[1] / ms[0] : null;\n      return overlay([ar[0] + (ar[2] - ww) / 2, ar[1], ww], src, !!a.logo, a.y, /wrap/i.test(posOf(k).name), k, hp);\n    }\n    // A print area with corners on the photo: the logo follows its angle, perspective and curve (CM.renderQuads).\n    function quadOverlay(p, src, own, s, y, mm) {\n      var light = lumOfColour() > 0.6, aspect = mm && mm[0] && mm[1] ? mm[0] / mm[1] : CM.quadAspect(p.quad);\n      var style = 'left:0;top:0;transform-origin:0 0;' + (light ? 'mix-blend-mode:multiply;' : '') + (!own && !light ? 'filter:invert(1);' : '');\n      return '<img class=\"logo-ov quad' + (own ? '' : ' cm-mark') + '\" data-cm-quad=\"' + esc(JSON.stringify(p.quad)) + '\" data-src=\"' + esc(src) + '\" data-aspect=\"' + aspect.toFixed(3) +\n        '\" data-s=\"' + s + '\" data-y=\"' + (+y || 0) + '\" data-surface=\"' + esc(p.surface || 'flat') + '\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\" style=\"' + style + '\" data-pos=\"' + p.key + '\">';\n    }\n    function mockTile(view, keys) {\n      return '<span class=\"photo mini\">' + photoImg(view, 'ph') + keys.map(overlayFor).join('') + '</span>';\n    }\n    function guideTile(keys) {\n      var ids = [];\n      keys.forEach(function (k) { var id = S.pos[k].logo && S.logoData[S.pos[k].logo] ? S.pos[k].logo : '_cm'; if (ids.indexOf(id) < 0) ids.push(id); });\n      var max = keys.length === 1 ? mmOf(keys[0]) : null;\n      return '<span class=\"photo mini guide\"><span class=\"glogos\">' + ids.slice(0, 2).map(function (id) {\n        return '<img src=\"' + esc(id === '_cm' ? CMLOGO : S.logoData[id]) + '\" alt=\"' + (id === '_cm' ? '' : 'Your artwork') + '\">';\n      }).join('') + '</span><span class=\"gcap\"><b>' + esc(keys.map(function (k) { return posOf(k).name; }).join(', ')) + '</b>' +\n        (max ? '<span>Up to ' + max.join(' \u00D7 ') + ' mm</span>' : '') + '</span></span>';\n    }\n    // One position by itself, next to its row (desktop).\n    // When one chosen position has a mockup and another can't (no colour photo of its side), the other says so\n    // instead of showing a guide card (Scott, 5 Nov 2026).\n    var NO_IMAGE = 'No image available for this position, but we will include on your artwork proof prior to production.';\n    var MOCK_NOTE = 'Displayed branding mockups are approximate only, we provide a full factory proof for approval prior to production.'; // Scott, 6 Nov 2026\n    function anyMock() { return sel().some(canMock); }\n    function posPreview(k) {\n      if (canMock(k)) return mockTile(posOf(k).view, [k]);\n      return anyMock() ? '<span class=\"photo mini noimg-note\"><span>' + esc(NO_IMAGE) + '</span></span>' : guideTile([k]);\n    }\n    // Every chosen position together, as one or two pictures (the phone's bottom bar).\n    function suitePreview() {\n      var on = sel(), tiles = [];\n      ['front', 'back'].forEach(function (view) {\n        var ks = on.filter(function (k) { return posOf(k).view === view && canMock(k); });\n        if (ks.length) tiles.push(mockTile(view, ks));\n      });\n      var mocked = tiles.length, guide = on.filter(function (k) { return !canMock(k); });\n      if (guide.length && !mocked) tiles.push(guideTile(guide)); // with a mockup, the others carry the note instead\n      if (!tiles.length) return '<div class=\"suiteprev empty\"></div>';\n      return '<div class=\"suiteprev\">' + tiles.join('') + (mocked ? mockNote() : '') + '</div>';\n    }\n    function gallerySet() {\n      var v = variant(), set = [];\n      if (S.colourPicked && v && v.img && !v.hero) {\n        set.push({ src: v.img, thumb: v.thumb });\n        (v.alt || []).forEach(function (u) { set.push({ src: u, thumb: u }); });\n        // Then the style photos, main photo first, so it is never lost once a colour is picked (Scott, 8 Nov 2026).\n        P.style.forEach(function (m) { if (!set.some(function (x) { return x.src === m.src; })) set.push(m); });\n      } else {\n        set = P.style.slice();\n        if (!set.length && v && v.img) set.push({ src: v.img, thumb: v.thumb, hero: v.hero });\n      }\n      return set;\n    }\n    function renderGallery() {\n      var g = root.querySelector('[data-cm-gallery]'); if (!g) return;\n      var set = gallerySet(), cur = set[S.photo] || set[0], main = g.querySelector('[data-cm-zoom]');\n      if (main) {\n        main.innerHTML = (cur ? '<img class=\"ph\" src=\"' + esc(cur.src) + '\" alt=\"' + esc(P.title + (S.colour ? ', ' + S.colour : '')) + '\">' : '<span class=\"noimg\">No photo yet</span>') +\n          '<span class=\"cap\">' + esc(S.colourPicked ? (S.colour || '') : 'Style') + (set.length ? ' \u00B7 photo ' + (S.photo + 1) + ' of ' + set.length : '') + '</span>';\n      }\n      var th = g.querySelector('[data-cm-thumbs]');\n      if (th) {\n        th.innerHTML = set.length > 1 ? set.slice(0, 8).map(function (m, i) {\n          return '<button type=\"button\" class=\"photo\" data-cm-photo=\"' + i + '\" aria-label=\"Photo ' + (i + 1) + '\" aria-pressed=\"' + (i === S.photo) + '\"><img class=\"ph\" src=\"' + esc(m.thumb || m.src) + '\" alt=\"\" loading=\"lazy\"></button>';\n        }).join('') : '';\n      }\n      warpAll(g);\n    }\n    function warpAll(el) { CM.cleanPhotos(el); el.querySelectorAll('img[data-cm-warp]').forEach(CM.warpLogo); CM.renderQuads(el); }\n\n    // ---- Branding suite -------------------------------------------------------------------\n    function brandingSuite() {\n      if (!POS.length) {\n        return '<section class=\"suite\" aria-labelledby=\"brandh\"><h2 id=\"brandh\" class=\"q\" style=\"font-size:17px;margin:0\">Branding</h2>' +\n          '<p class=\"muted\" style=\"margin:0;font-size:14px\">' + (dj && !dj.decs.length ? 'This product is only available unbranded.' : 'Branding for this product is quoted by our team. Use Quick quote and tell us what you need.') + '</p>' +\n          (optRows() ? '<ul class=\"posrows\">' + optRows() + '</ul>' + optNotes() : '') + '</section>';\n      }\n      var rows = POS.map(function (p) {\n        var a = S.pos[p.key], pp = a.on ? posPrice(p.key) : null, mm = mmShown(p.key), info = CM.methodInfo(a.m), li = infoFor(p.key);\n        var price = !a.on ? '' : (pp.unit ? '+' + money(pp.unit) + ' each ex GST' : 'Print included') + (pp.setup ? ' \u00B7 ' + money(pp.setup) + ' setup' : '');\n        var body = '';\n        if (a.on) {\n          // No colour photo to mock up on: no artwork picture and no size or position sliders here.\n          var m = methodOf(p.key), others = S.logos.filter(function (id) { return id !== a.logo; }), mock = canMock(p.key);\n          // Laid out as: decoration choice across the top; the logo (upload, change, pick, checks) on the left;\n          // size and placement on the right (Scott, 7 Nov 2026). One column on phones.\n          var logoSrc = a.logo ? S.logoData[a.logo] : CMLOGO;\n          var logoCol = '<div class=\"poscol posart\"><h4 class=\"poslbl\">Logo</h4>' +\n            '<div class=\"poslogo\"><input type=\"file\" id=\"pf-' + p.key + '\" accept=\"' + CM.ARTWORK_ACCEPT + '\" data-cm-poslogo=\"' + p.key + '\" hidden>' +\n              '<span class=\"logothumb' + (a.logo ? '' : ' ours') + '\">' + (logoSrc ? '<img src=\"' + esc(logoSrc) + '\" alt=\"' + (a.logo ? 'Your logo' : 'Our logo') + '\">' : '') + '</span>' +\n              '<span class=\"logoacts\"><span class=\"' + (a.logo ? '' : 'muted') + '\">' + (a.logo ? 'Your logo' : 'Shown with our logo') + '</span><span class=\"row\" style=\"gap:6px\">' +\n              (a.logo ? '<label for=\"pf-' + p.key + '\" class=\"mini-btn\">Change</label><button type=\"button\" class=\"mini-btn\" data-cm-posclear=\"' + p.key + '\">Remove</button>'\n                : '<label for=\"pf-' + p.key + '\" class=\"mini-btn dark\">Upload logo</label>') + '</span></span></div>' +\n            (others.length ? '<span class=\"libpick\"><span class=\"muted\">' + (a.logo ? 'Or use' : 'Or use your') + '</span>' + others.map(function (id) {\n              return '<button type=\"button\" class=\"libthumb\" data-cm-pospick=\"' + p.key + '|' + esc(id) + '\" aria-label=\"Use logo ' + (S.logos.indexOf(id) + 1) + ' here\"><img src=\"' + esc(S.logoData[id]) + '\" alt=\"\"></button>';\n            }).join('') + '</span>' : '') +\n            (!a.logo ? '<p class=\"muted pfhint\">' + esc(CM.VECTOR_METHODS.indexOf(CM.mkey(a.m)) > -1 ? 'Best: vector artwork in solid colours (AI, EPS, SVG or vector PDF).' : 'Best: a 300 dpi CMYK PDF, or a PNG on a transparent background.') + '</p>' : '') +\n            (S.notice[p.key] ? '<div class=\"note warnnote\" role=\"status\">' + esc(S.notice[p.key]) + ' <label for=\"pf-' + p.key + '\" class=\"mini-btn\" style=\"margin-top:6px\">Upload a solid-colour version</label></div>' : '') +\n            (info.solid ? '<p class=\"colourline\"><span>' + CM.plural(li.colours, 'colour') + '</span>' + (li.palette || []).map(function (c) { return '<span class=\"cdot\" style=\"background:' + esc(c) + '\"></span>'; }).join('') +\n              '<span class=\"muted\">' + (li.override ? 'set by you' : 'found in ' + (a.logo ? 'this logo' : 'our logo')) + '</span>' +\n              '<span class=\"colstep\"><button type=\"button\" data-cm-colstep=\"' + p.key + '\" data-d=\"-1\" aria-label=\"One colour fewer\">\u2212</button><button type=\"button\" data-cm-colstep=\"' + p.key + '\" data-d=\"1\" aria-label=\"One colour more\">+</button></span></p>' +\n              (pp.over ? '<p class=\"review\">More than ' + (info.max || 4) + ' colours is priced by our team.</p>' : '') : '') +\n            preflightHtml(p.key) + '</div>';\n          // Size and placement only with a mockup (Scott, 9 Nov 2026): on a guide card \"up to 30 \u00D7 80 mm\" is a maximum,\n          // not a width to pick, so the whole section goes and the area is priced at its maximum.\n          var placeCol = mock ? '<div class=\"poscol posplace\"><h4 class=\"poslbl\">Size and placement</h4>' +\n            (mock ? '<label class=\"sizer\" for=\"sz-' + p.key + '\"><span class=\"slbl\">Size</span><input id=\"sz-' + p.key + '\" type=\"range\" min=\"0.3\" max=\"1\" step=\"0.05\" value=\"' + a.s + '\" data-cm-size=\"' + p.key + '\"><span class=\"mmw\" data-cm-mmw=\"' + p.key + '\">' + (mm ? Math.round(mm[0] * a.s) + ' mm wide' : Math.round(a.s * 100) + '%') + '</span></label>' : '') +\n            (mock ? '<label class=\"sizer\" for=\"y-' + p.key + '\"><span class=\"slbl\">Up / down</span><input id=\"y-' + p.key + '\" type=\"range\" min=\"-12\" max=\"30\" step=\"1\" value=\"' + a.y + '\" data-cm-y=\"' + p.key + '\"><span class=\"mmw\"></span></label>' : '') +\n            '<span class=\"row\" style=\"gap:6px\">' +\n            (mock ? '<button type=\"button\" class=\"mini-btn\" data-cm-rot=\"' + p.key + '\" aria-label=\"Rotate the logo 90 degrees\">Rotate \u21BB' + (a.r ? ' ' + a.r + '\u00B0' : '') + '</button>' : '') +\n            (canLand(p.key) && mock ? '<button type=\"button\" class=\"mini-btn\" data-cm-land=\"' + p.key + '\" aria-pressed=\"' + !!a.land + '\">' + (a.land ? 'Make portrait' : 'Make landscape') + '</button>' : '') + '</span></div>' : '';\n          body = '<div class=\"posflex\"><div class=\"posbody\">' +\n            '<div class=\"row\" role=\"radiogroup\" aria-label=\"' + esc(p.name) + ' decoration\">' + p.methods.map(function (mm2) {\n              var ownNames = p.methods.some(function (x) { return x.key.indexOf('~') > 0; }); // several of one method: their own names\n              var on = mm2.key === a.m;\n              return '<button type=\"button\" class=\"chip small\" role=\"radio\" data-cm-posm=\"' + p.key + '\" data-m=\"' + esc(mm2.key) + '\" aria-checked=\"' + on + '\" aria-pressed=\"' + on + '\">' + esc(/^other:/.test(mm2.key) || ownNames ? mm2.name : CM.methodInfo(mm2.key).name) + '</button>';\n            }).join('') + '</div>' +\n            '<p class=\"muted\" style=\"margin:0;font-size:13px\">' + esc((info.note || '') + (m.max_mm ? ' Up to ' + m.max_mm.join(' \u00D7 ') + ' mm.' : '')) + '</p>' +\n            (!mock && anyMock() ? '<p class=\"muted posnote\">' + esc(NO_IMAGE) + '</p>' : '') +\n            '<div class=\"poscols\">' + logoCol + placeCol + '</div>' +\n            '</div><div class=\"posprev\" data-cm-posprev=\"' + p.key + '\" aria-hidden=\"true\">' + posPreview(p.key) + '</div></div>';\n        }\n        return '<li class=\"posrow' + (a.on ? ' on' : '') + '\" data-row=\"' + p.key + '\">' +\n          '<button type=\"button\" class=\"poshead\" data-cm-posrow=\"' + p.key + '\" aria-pressed=\"' + a.on + '\"><span class=\"tick\" aria-hidden=\"true\">' + (a.on ? '\u2713' : '') + '</span><span class=\"pn\"><b>' + esc(p.name) + '</b><span>' + (p.view === 'back' ? 'Back \u00B7 ' : '') + (mm ? 'up to ' + mm.join(' \u00D7 ') + ' mm' : esc(CM.methodInfo(a.m).name)) + '</span></span><span class=\"pp\">' + price + '</span></button>' + body + '</li>';\n      }).join('');\n      // No template link (Scott, 3 Nov 2026: a bot could collect them): only that one comes with the quote or invoice email.\n      var tmpl = anyMock() ? '<p class=\"mocknote muted\">' + esc(MOCK_NOTE) + '</p>' : '';\n      return '<section class=\"suite' + (S.live ? ' live' : '') + '\" aria-labelledby=\"brandh\">' +\n        '<div class=\"suitetop\"><div style=\"flex:1 1 200px\"><h2 id=\"brandh\" class=\"q\" style=\"font-size:17px;margin:0\">Branding</h2>' + tmpl + '</div>' + suitePreview() + '</div>' +\n        '<ul class=\"posrows\">' + rows + optRows() + '</ul>' + optNotes() +\n        templateNote() +\n        '</section>';\n    }\n\n\n    // ---- Price calculation: after Branding and Options, so every chosen option is in it (Scott, 3 Nov 2026).\n    function calcSection() {\n      var q = S.qty, bp = brandPrice(q), undec = CM.unbrandedAt(dj, q) || 0, op = optPrice(q), base = dj ? dj.undecSetup : 0;\n      var rows = '<p class=\"suitetotal\"><span>Unbranded</span><b>' + money(undec) + ' each' + (base ? ' \u00B7 ' + money(base) + ' setup' : '') + '</b></p>' +\n        sel().map(function (k) {\n          var pp = posPrice(k), info = CM.methodInfo(S.pos[k].m);\n          return '<p class=\"suitetotal\"><span>' + esc(posOf(k).name) + ' \u00B7 ' + esc(info.name) + (pp.colours ? ' \u00B7 ' + CM.plural(pp.colours, 'colour') : '') + '</span><b><span class=\"nw\">' + (pp.unit ? '+' + money(pp.unit) + ' each' : 'included') + '</span>' + (pp.setup ? ' <span class=\"nw\">' + money(pp.setup) + ' setup</span>' : '') + '</b></p>';\n        }).join('') +\n        optChosen().filter(function (c) { return !c.o.fixed; }).map(function (c) {\n          var nm = c.g.pick === 'count' ? c.g.label + ' \u00B7 ' + CM.plural(c.n, c.g.unit_label || 'line') : c.o.name + (c.o.count && c.n > 1 ? ' \u00D7 ' + c.n : '');\n          return '<p class=\"suitetotal\"><span>' + esc(nm) + '</span><b>' + optCost(c) + '</b></p>';\n        }).join('');\n      var parts = [CM.plural(bp.count, 'position')], nOpt = optChosen().filter(function (c) { return !c.o.included || c.o.breaks; }).length;\n      if (nOpt) parts.push(CM.plural(nOpt, 'option'));\n      var setup = bp.setup + base + op.once, exTotal = Math.round(((undec + bp.unit + op.unit) * q + setup) * 100) / 100;\n      return '<section class=\"suite calc\" aria-label=\"Price calculation\">' + rows +\n        '<p class=\"suitetotal strong\"><span>Total each<small>' + parts.join(', ') + '</small></span><b><span class=\"nw\">' + money(undec + bp.unit + op.unit) + ' each</span>' + (setup ? ' <span class=\"nw\">+ ' + money(setup) + ' setup</span>' : '') + '</b></p>' +\n        // The order's totals, ex GST then inc GST, and no other GST wording here (Scott, 11 Nov 2026).\n        '<p class=\"suitetotal strong\"><span>Total ex GST<small>for ' + q + '</small></span><b>' + money(exTotal) + '</b></p>' +\n        '<p class=\"suitetotal\"><span>Total inc GST</span><b>' + money(Math.round(exTotal * 110) / 100) + '</b></p>' +\n        (anyReview() ? '<p class=\"review\">Price is subject to our team reviewing your artwork.</p>' : '') +\n        leadLine() +\n        '</section>';\n    }\n    // Estimated delivery for the branding chosen (custom.leadtimes; the checkout gives the exact date for the address).\n    function leadLine() {\n      if (!P.leadtimes) return '';\n      var ids = sel().map(function (k) { var m = methodOf(k), pp = posPrice(k); return pp.decID || (decsOf(m)[0] && decsOf(m)[0].id); });\n      var e = CM.leadEstimate(P.leadtimes, ids, { speed: SPEED ? speedOpt().days : null });\n      if (!e) return '';\n      var extra = [];\n      if (e.rush) extra.push('includes the pre-Christmas rush');\n      if (e.transit) extra.push('ships from ' + (e.from === 'NZ' ? 'New Zealand' : 'overseas'));\n      return '<p class=\"suitetotal leadline\"><span>Estimated delivery<small>about ' + CM.plural(e.days, 'working day') + ' with this branding' + (extra.length ? ', ' + extra.join(', ') : '') + '. Exact date at checkout.</small></span><b>' + esc(CM.fmtD(e.date)) + '</b></p>';\n    }\n\n    // ---- Colours ------------------------------------------------------------------------\n    var DIMS = (function () { var t = root.querySelector('[data-cm-dimstpl]'); return t ? t.innerHTML.trim() : ''; })();\n    function vColours() {\n      var list = colours();\n      if (list.length <= 1) {\n        var only = list[0];\n        if (!only || /custom print/i.test(only.name)) return '';\n        return '<div><p class=\"q\">Colour <span style=\"font-weight:600\">' + esc(only.name) + '</span></p><div class=\"row\"><span class=\"sw\" style=\"background:' + esc(CM.colourFill(only.name, only.hex)) + ';display:inline-block;width:36px;height:36px\" aria-hidden=\"true\"></span></div></div>';\n      }\n      var many = list.length > 10, cur = list.find(function (c) { return c.name === S.colour; }) || list[0];\n      var shown = [];\n      if (many) {\n        // Black, white, red and navy first when the product has them, then one of each family.\n        CM.LEAD_COLOURS.forEach(function (n) { var c = list.find(function (x) { return x.name.toLowerCase() === n; }); if (c) shown.push(c); });\n        var fams = [];\n        list.forEach(function (c) { if (fams.indexOf(c.fam) < 0) fams.push(c.fam); });\n        fams.forEach(function (f) { if (shown.some(function (x) { return x.fam === f; })) return; var c = list.find(function (x) { return x.fam === f; }); if (c && shown.length < 9) shown.push(c); });\n        list.forEach(function (c) { if (shown.length < 9 && shown.indexOf(c) < 0) shown.push(c); });\n        if (S.colourPicked && shown.indexOf(cur) < 0) shown = [cur].concat(shown.slice(0, 8));\n      } else shown = list;\n      return '<div><p class=\"q\">Colour <span style=\"font-weight:400\"' + (S.colourPicked ? '>' + esc(cur.name) : ' class=\"muted\">choose one') + '</span></p>' +\n        '<div class=\"row\" style=\"align-items:center\">' + shown.map(function (c) {\n          return '<button type=\"button\" class=\"sw\" style=\"background:' + esc(CM.colourFill(c.name, c.hex)) + '\" data-cm-colour=\"' + esc(c.name) + '\" aria-pressed=\"' + (S.colourPicked && c.name === S.colour) + '\" aria-label=\"' + esc(c.name) + '\" title=\"' + esc(c.name) + '\"></button>';\n        }).join('') +\n        (many ? '<button type=\"button\" class=\"allcols\" data-cm-colsheet aria-haspopup=\"dialog\">All ' + list.length + ' colours</button>' : '<button type=\"button\" class=\"quiet\" data-cm-colsheet aria-haspopup=\"dialog\" style=\"font-size:14px\">Colour details</button>') + '</div></div>';\n    }\n    function openColSheet() {\n      var list = colours(), fams = [];\n      list.forEach(function (c) { if (fams.indexOf(c.fam) < 0) fams.push(c.fam); });\n      var s = CM.sheet('<div class=\"sheettop\"><div class=\"sheethead\"><h2 id=\"colh\" style=\"font-size:20px;font-weight:800;flex:1\">' + list.length + ' colours</h2><button type=\"button\" class=\"x\" data-cm-close aria-label=\"Close\">\u00D7</button></div>' +\n        (list.length > 10 ? '<input type=\"search\" id=\"colq\" class=\"colq\" placeholder=\"Find a colour, e.g. marle or blue\" aria-label=\"Find a colour\" autocomplete=\"off\" enterkeyhint=\"done\">' +\n          '<div class=\"row famrow\" role=\"group\" aria-label=\"Colour family\"><button type=\"button\" class=\"soft\" data-fam=\"\" aria-pressed=\"true\">All</button>' + fams.map(function (f) {\n            return '<button type=\"button\" class=\"soft\" data-fam=\"' + esc(f) + '\" aria-pressed=\"false\">' + esc(f) + '&nbsp;<span class=\"muted\" style=\"font-weight:400\">' + list.filter(function (c) { return c.fam === f; }).length + '</span></button>';\n          }).join('') + '</div>' : '') + '</div>' +\n        '<ul class=\"collist\" id=\"collist\">' + list.map(function (c) {\n          return '<li data-name=\"' + esc((c.name + ' ' + c.fam).toLowerCase()) + '\" data-family=\"' + esc(c.fam) + '\"><button type=\"button\" data-pickcol=\"' + esc(c.name) + '\" aria-pressed=\"' + (S.colourPicked && c.name === S.colour) + '\"><span class=\"sw big\" style=\"background:' + esc(CM.colourFill(c.name, c.hex)) + '\"></span><span class=\"cn\"><b>' + esc(c.name) + '</b>' + (c.fam !== 'Other' ? '<span class=\"muted\">' + esc(c.fam) + '</span>' : '') + '</span>' + (S.colourPicked && c.name === S.colour ? '<span class=\"tick\" aria-hidden=\"true\">\u2713</span>' : '') + '</button></li>';\n        }).join('') + '</ul><p id=\"colnone\" class=\"muted\" hidden>No colours match. Ask us: we can often source other colours.</p>',\n        { labelledby: 'colh', focus: matchMedia('(pointer:fine)').matches ? '#colq' : '.x' });\n      var fam = '';\n      function filter() {\n        var q = ((s.el.querySelector('#colq') || {}).value || '').toLowerCase().trim(), n = 0;\n        s.el.querySelectorAll('#collist li').forEach(function (li) { var ok = (!fam || li.getAttribute('data-family') === fam) && (!q || li.getAttribute('data-name').indexOf(q) > -1); li.hidden = !ok; if (ok) n++; });\n        s.el.querySelector('#colnone').hidden = n > 0;\n      }\n      s.el.addEventListener('input', function (e) { if (e.target.id === 'colq') filter(); });\n      s.el.addEventListener('keydown', function (e) { if (e.target.id === 'colq' && e.key === 'Enter') { e.preventDefault(); e.target.blur(); } });\n      s.el.addEventListener('touchstart', function (e) { if (e.target.closest('#collist')) { var q = s.el.querySelector('#colq'); if (q && document.activeElement === q) q.blur(); } }, { passive: true });\n      s.el.addEventListener('click', function (e) {\n        var f = e.target.closest('[data-fam]');\n        if (f) { fam = f.getAttribute('data-fam'); s.el.querySelectorAll('[data-fam]').forEach(function (b) { b.setAttribute('aria-pressed', String(b === f)); }); filter(); return; }\n        var pk = e.target.closest('[data-pickcol]');\n        if (pk) { pickColour(pk.getAttribute('data-pickcol')); s.close(); }\n      });\n    }\n    function pickColour(c) {\n      S.colour = c; S.colourPicked = true; S.photo = 0;\n      var v = variant();\n      try { if (v.id) history.replaceState(null, '', location.pathname + '?variant=' + v.id + location.hash); } catch (e) { /* ignore */ }\n      render(); renderGallery();\n    }\n\n    // ---- Stock ------------------------------------------------------------------------\n    function vStock() {\n      var body = root.querySelector('[data-cm-stockbody]'), lvl = root.querySelector('[data-cm-stocklvl]');\n      if (!body) return;\n      if (!S.stockOn) return;\n      if (!S.stock) { body.innerHTML = '<p class=\"loading\" role=\"status\">Checking stock with the supplier\u2026</p>'; return; }\n      if (!S.stock.ok) {\n        body.innerHTML = '<p class=\"muted\" style=\"margin:0;font-size:14px\">' + esc(P.nostock || S.stock.message || 'Stock check is unavailable right now.') + '</p>';\n        lvl.innerHTML = '';\n        return;\n      }\n      // No colour variants (Scott, 2 Nov 2026): the supplier's stock lines as a plain list.\n      // Some suppliers put the quantity where a size would be (e.g. Trends), so a numeric\n      // \"size\" with no quantity is read as the quantity.\n      if (P.variants.length <= 1) {\n        var items = S.stock.rows.map(function (r) {\n          var numSize = r.size != null && /^\\d+$/.test(String(r.size).trim());\n          var q = r.qty != null ? r.qty : (numSize ? +r.size : null);\n          var label = [r.colour, numSize ? '' : r.size].filter(function (x) { return x && String(x).trim(); }).join(' \u00B7 ') || 'Stock';\n          return { label: label, qty: q, sku: r.sku };\n        });\n        var sum = items.reduce(function (t, i) { return t + (i.qty || 0); }, 0);\n        lvl.innerHTML = '<span class=\"lvl ' + (sum >= S.qty * 3 ? 'ok' : sum >= S.qty ? 'warn' : 'bad') + '\">' + (sum >= S.qty ? 'In stock' : 'Low stock') + '</span>';\n        body.innerHTML = '<p class=\"muted\" style=\"margin:0 0 12px;font-size:14px\">Live stock levels updated in real-time.</p>' +\n          '<ul class=\"stocklist\">' + items.map(function (i) {\n            return '<li><span>' + esc(i.label) + '</span><b class=\"' + (!i.qty ? 'zero' : i.qty < 100 ? 'low' : '') + '\">' + (i.qty ? CM.fmtQ(i.qty) : '\u2013') + '</b></li>';\n          }).join('') + '<li class=\"tot\"><span>Total</span><b>' + CM.fmtQ(sum) + '</b></li></ul>';\n        return;\n      }\n      var g = CM.stockGrid(S.stock.rows), match = function (c) { return String(c).toLowerCase() === String(S.colour).toLowerCase(); };\n      var mine = g.colours.find(match), want = S.qty, total = mine ? g.total(mine) : 0;\n      var state = !mine ? null : total >= want * 3 ? ['ok', 'Plenty in stock'] : total >= want ? ['warn', 'In stock, check sizes'] : ['bad', 'Low stock'];\n      lvl.innerHTML = state ? '<span class=\"lvl ' + state[0] + '\">' + esc(S.colour) + ': ' + state[1] + '</span>' : '';\n      var rows = S.stockAll || !mine ? g.colours : [mine];\n      var hexOf = function (c) { var x = colours().find(function (y) { return y.name.toLowerCase() === String(c).toLowerCase(); }); return x ? x.hex : CM.colourHex(c); };\n      body.innerHTML = '<p class=\"muted\" style=\"margin:0 0 12px;font-size:14px\">Live stock levels updated in real-time.</p>' +\n        '<div class=\"row\" style=\"align-items:center;margin-bottom:12px\"><div class=\"row\" role=\"group\" aria-label=\"Show stock for\">' +\n        (mine ? '<button type=\"button\" class=\"soft\" data-cm-stockall=\"\" aria-pressed=\"' + !S.stockAll + '\">' + esc(S.colour) + '</button>' : '') +\n        '<button type=\"button\" class=\"soft\" data-cm-stockall=\"1\" aria-pressed=\"' + (!!S.stockAll || !mine) + '\">All ' + g.colours.length + ' colours</button></div>' +\n        (P.ourcode ? '<label class=\"check\" style=\"margin-left:auto;min-height:44px\"><input type=\"checkbox\" data-cm-skus ' + (S.skus ? 'checked' : '') + '> Codes</label>' : '') + '</div>' +\n        '<div class=\"stockscroll\" tabindex=\"0\" role=\"region\" aria-label=\"Stock by colour and size\"><table class=\"stocktable\"><thead><tr><th scope=\"col\">Colour</th>' + g.sizes.map(function (z) { return '<th scope=\"col\">' + esc(z) + '</th>'; }).join('') + '<th scope=\"col\">Total</th></tr></thead><tbody>' +\n        rows.map(function (c) {\n          return '<tr class=\"' + (match(c) ? 'on' : '') + '\"><th scope=\"row\"><span class=\"dot\" style=\"background:' + esc(CM.colourFill(c, hexOf(c))) + '\"></span>' + esc(c) + '</th>' + g.sizes.map(function (z) {\n            var has = g.has(c, z), q = g.qty(c, z);\n            return '<td class=\"' + (!has || q === 0 ? 'zero' : q < 100 ? 'low' : '') + '\">' + (!has || q === 0 ? '\u2013' : CM.fmtQ(q)) + (S.skus && has ? '<span class=\"sku\">' + esc(CM.ourSku(P.ourcode, c, g.sizes.length > 1 || z !== 'One size' ? z : '')) + '</span>' : '') + '</td>';\n          }).join('') + '<td><b>' + CM.fmtQ(g.total(c)) + '</b></td></tr>';\n        }).join('') + '</tbody></table></div>' +\n        '<p class=\"muted\" style=\"margin:12px 0 0;font-size:13px\">\u2013 out of stock \u00B7 <span class=\"lowkey\">under 100</span> \u00B7 ' + (g.sizes.length * g.colours.length) + ' colour and size options</p>';\n    }\n\n    // ---- Price breaks --------------------------------------------------------------------\n    function vBreaks() {\n      var el = root.querySelector('[data-cm-breaks]'); if (!el) return;\n      if (!dj || !dj.undec.length) { el.innerHTML = '<p class=\"muted\" style=\"margin:0\">Ask us for a quote.</p>'; return; }\n      // One break per quantity button, priced with the branding chosen (Scott: same as the buttons).\n      el.innerHTML = chips.map(function (q, i) {\n        var on = S.qty >= q && S.qty < (chips[i + 1] || Infinity);\n        return '<div class=\"' + (on ? 'on' : '') + '\"><span style=\"font-size:12px\">' + q + '+</span><b>' + money((CM.unbrandedAt(dj, q) || 0) + brandPrice(q).unit + optPrice(q).unit) + '</b></div>';\n      }).join('');\n    }\n\n\n    // ---- Product options that aren't branding (custom.options, docs/product-options.md in the SaaS) ----\n    /* Groups: one (radio, a default included), many (toggles; included parts shown ticked, fixed ones\n       can't be removed), count (a stepper, e.g. personalisation lines per item). An option can have its\n       own count (extra 5,000 stitches \u00D7 n). Prices are the SaaS's sell breaks per unit, setup once, and\n       per order / per artwork lines; nothing is worked out here beyond adding them up. */\n    var OPT = (P.options && P.options.groups) || [];\n    S.opt = (editCart && editCart.branding && editCart.branding.options && editCart.branding.options.sel) || {};\n    OPT.forEach(function (g) {\n      if (S.opt[g.key] != null) return;\n      if (g.pick === 'one') { var d = g.options.find(function (o) { return o.included; }); S.opt[g.key] = d ? d.id : null; }\n      else if (g.pick === 'count') S.opt[g.key] = 0;\n      else { var m = {}; g.options.forEach(function (o) { if (o.included) m[o.id] = 1; }); S.opt[g.key] = m; }\n    });\n    // A logo for printed packaging and a personalisation list, per option group (Scott, 10 Nov 2026).\n    var savedOpt = (editCart && editCart.branding && editCart.branding.options) || {};\n    S.optLogo = savedOpt.logos || {};\n    S.optData = savedOpt.data || {};\n\n    /* Production time (Dex): Promodata repeats each branding method once per production time. The\n       customer picks one; each position is priced from that time's line, and a time is offered only\n       within the supplier's min/max quantity for the chosen methods (custom.options.speed). */\n    var SPEED = (P.options && P.options.speed && (P.options.speed.options || []).length > 1) ? P.options.speed : null;\n    if (SPEED) {\n      var sv = editCart && editCart.branding && editCart.branding.options && editCart.branding.options.speed;\n      var first = dj && dj.decs[0] && SPEED.options.find(function (o) { return o.ids.indexOf(dj.decs[0].id) >= 0; });\n      S.speed = (sv && SPEED.options.some(function (o) { return o.key === sv.key; }) ? sv.key : null) || (first && first.key) || SPEED.default;\n    }\n    function speedOpt(key) { return SPEED && (SPEED.options.find(function (o) { return o.key === (key || S.speed); }) || SPEED.options[SPEED.options.length - 1]); }\n    var SPEED_IDS = {};\n    if (SPEED) SPEED.options.forEach(function (o) { o.ids.forEach(function (id) { SPEED_IDS[id] = o.key; }); });\n    function decsOf(m, key) { // the method's lines at the chosen production time (lines outside any time always count)\n      if (!SPEED) return m.decs;\n      var o = speedOpt(key);\n      return m.decs.filter(function (d) { return !SPEED_IDS[d.id] || o.ids.indexOf(d.id) >= 0; });\n    }\n    function speedFits(key, q) { // every chosen position has a line at this time, within its quantity range\n      var o = speedOpt(key);\n      return sel().every(function (k) {\n        var ds = decsOf(methodOf(k), key);\n        if (!ds.length) return false;\n        return ds.some(function (d) { var r = (o.ranges || {})[d.id]; return !r || (q >= r[0] && q <= r[1]); });\n      });\n    }\n    function speedMax(key) { // the largest quantity this time allows for the chosen positions\n      var o = speedOpt(key), max = Infinity;\n      sel().forEach(function (k) { decsOf(methodOf(k), key).forEach(function (d) { var r = (o.ranges || {})[d.id]; if (r) max = Math.min(max, r[1]); }); });\n      return max;\n    }\n    function speedSuite() {\n      if (!SPEED || !POS.length) return '';\n      var cur = speedOpt(), fits = speedFits(cur.key, S.qty);\n      return '<section class=\"suite optsuite\" aria-labelledby=\"spdh\"><h2 id=\"spdh\" class=\"q\" style=\"font-size:17px;margin:0 0 4px\">' + esc(SPEED.label || 'Production time') + '</h2>' +\n        (SPEED.note ? '<p class=\"muted optnote\">' + esc(SPEED.note) + '</p>' : '') +\n        '<div class=\"optchips\" role=\"radiogroup\" aria-label=\"' + esc(SPEED.label || 'Production time') + '\">' + SPEED.options.map(function (o) {\n          var on = o.key === cur.key, ok = speedFits(o.key, S.qty), mx = speedMax(o.key);\n          return '<span class=\"optchip' + (on ? ' on' : '') + '\"><button type=\"button\" role=\"radio\" aria-checked=\"' + on + '\" data-cm-speed=\"' + esc(o.key) + '\"' + (ok || on ? '' : ' disabled') + '>' +\n            '<span class=\"tick\" aria-hidden=\"true\"></span><span class=\"lbl\"><span class=\"on\">' + esc(o.name) + '</span>' +\n            '<span class=\"oc\">' + (ok ? (isFinite(mx) ? 'up to ' + mx.toLocaleString() : 'available') : (isFinite(mx) && S.qty > mx ? 'up to ' + mx.toLocaleString() + ' only' : 'not for this branding')) + '</span></span></button></span>';\n        }).join('') + '</div>' +\n        (fits ? (cur.note ? '<p class=\"muted optnote\">' + esc(cur.note) + '</p>' : '') : '<p class=\"optnote\" role=\"alert\"><b>' + esc(cur.name) + ' isn\\'t available for ' + S.qty + ' units with this branding.</b> Choose a longer production time.</p>') +\n        '</section>';\n    }\n    function speedBlocked() { return !!SPEED && POS.length && !speedFits(S.speed, S.qty); }\n    function optVisible(g) {\n      if (!g.with_method) return true;\n      return sel().some(function (k) { return g.with_method.indexOf(CM.mkey(S.pos[k].m)) >= 0; });\n    }\n    function optPicked(id) { // is this option chosen (ignoring visibility)?\n      return OPT.some(function (g) { var v = S.opt[g.key]; return g.pick === 'one' ? v === id : g.pick === 'count' ? false : !!(v || {})[id]; });\n    }\n    function optShown(o) { // an option can need a method (extra colour: screen or pad) or a packaging choice first (print the sleeve)\n      if (o.with_method && !sel().some(function (k) { return o.with_method.indexOf(CM.mkey(S.pos[k].m)) >= 0; })) return false;\n      if (o.needs && !o.needs.some(optPicked)) return false;\n      if (o.speed && SPEED && o.speed !== S.speed) return false; // a line priced for another production time\n      return true;\n    }\n    function optChosen() { // [{g, o, n}]: chosen options with their count\n      var out = [];\n      OPT.forEach(function (g) {\n        if (!optVisible(g)) return;\n        var v = S.opt[g.key];\n        if (g.pick === 'one') { var o = g.options.find(function (x) { return x.id === v; }); if (o && optShown(o)) out.push({ g: g, o: o, n: 1 }); }\n        else if (g.pick === 'count') { if (v > 0) g.options.filter(optShown).slice(0, 1).forEach(function (o) { out.push({ g: g, o: o, n: v }); }); }\n        else g.options.forEach(function (o) { var n = (v || {})[o.id]; if (n && optShown(o)) out.push({ g: g, o: o, n: n }); });\n      });\n      return out;\n    }\n    function optUnitOf(c, q) {\n      var b = c.o.breaks ? CM.priceAt(CM.parseBreaks(c.o.breaks), q) : 0;\n      if (!b || c.o.per) return 0;\n      var n = c.n;\n      if (c.o.per_stitches) { // metallic thread: per 1,000 stitches of the whole design\n        var extra = optChosen().filter(function (x) { return x.g.key === c.g.key && x.o.count && !x.o.per_stitches; }).reduce(function (a, x) { return a + x.n; }, 0);\n        n = ((c.g.base_stitches || 10000) + extra * 5000) / c.o.per_stitches;\n      }\n      return b * n;\n    }\n    function optOnceOf(c, q) {\n      var once = (c.o.setup || 0) * (c.o.per === 'order' ? c.n : 1);\n      if (c.o.per) once += c.o.breaks ? (CM.priceAt(CM.parseBreaks(c.o.breaks), q) || 0) * (c.o.per === 'order' ? c.n : 1) : 0;\n      if (c.o.per === 'artwork') once *= Math.max(1, sel().length);\n      return once;\n    }\n    function optPrice(q) {\n      var unit = 0, once = 0;\n      optChosen().forEach(function (c) { if (c.o.included && !c.o.breaks) return; unit += optUnitOf(c, q); once += optOnceOf(c, q); });\n      return { unit: unit, once: once };\n    }\n    function optWords() { // \"J hook clip, ID holder and pre-production sample\"\n      var w = optChosen().filter(function (c) { return !(c.o.included && c.o.fixed); }).map(function (c) {\n        var nm = /^[A-Z][a-z]/.test(c.o.name) ? c.o.name.charAt(0).toLowerCase() + c.o.name.slice(1) : c.o.name;\n        return c.g.pick === 'count' ? CM.plural(c.n, (c.g.unit_label || 'line')) + ' of personalisation' : (c.o.count ? nm + ' \u00D7 ' + c.n : nm);\n      });\n      return w;\n    }\n    function optCost(c) {\n      var u = optUnitOf(c, S.qty), once = optOnceOf(c, S.qty), parts = [];\n      if (u) parts.push('+' + money(u) + ' each');\n      if (once) parts.push(money(once) + (c.o.per === 'artwork' ? ' per artwork' : c.o.per === 'order' ? ' per order' : ' setup'));\n      return parts.length ? parts.join(' \u00B7 ') : (c.o.included ? 'included' : 'no charge');\n    }\n    // Every option is a box under Branding, like the positions (Scott, 9 and 10 Nov 2026): printed packaging takes\n    // a logo like any printed position, personalisation takes the client's list, and nothing sits below in Options.\n    function isPackPrint(g) { return g.key === 'packprint' || /print.*packag|packag.*print/i.test(g.label || ''); }\n    function optGroups() { return OPT.filter(function (g) { return optVisible(g) && g.options.some(optShown); }); }\n    function groupOn(g) { return optChosen().some(function (c) { return c.g.key === g.key && !(c.o.included && !c.o.breaks); }); }\n    // Named for what is printed: \"Full colour sleeve on the box\" \u2192 Box; \"Label on the pouch\" \u2192 Pouch.\n    function packNoun(g) {\n      var nouns = g.options.filter(optShown).map(function (o) { var m = String(o.name).match(/\\bthe\\s+([a-z ]+?)(?:\\s*\\(|$)/i); return m ? m[1].trim().split(' ').pop().toLowerCase() : ''; });\n      var n = nouns[0];\n      return n && nouns.every(function (x) { return x === n; }) ? n.charAt(0).toUpperCase() + n.slice(1) : 'Packaging';\n    }\n    function optRows() {\n      // Groups that need another method (personalisation needs digital print) stay listed, greyed, saying which\n      // method to choose, so they don't vanish when screen print is picked (Scott, 10 Nov 2026).\n      var waiting = OPT.filter(function (g) { return !optVisible(g) && g.options.length; });\n      return optGroups().map(function (g) {\n        var on = groupOn(g), pack = isPackPrint(g), count = g.pick === 'count';\n        var title = pack ? packNoun(g) : g.label, sub = pack ? 'Packaging \u00B7 add any' : count ? 'Variable data \u00B7 different on each item' : g.pick === 'one' ? (g.optional ? 'Optional, choose one' : 'Choose one') : 'Add any';\n        var canTick = count || g.pick === 'many' || (g.pick === 'one' && g.optional);\n        var head = '<span class=\"tick\" aria-hidden=\"true\">' + (on ? '\u2713' : '') + '</span><span class=\"pn\"><b>' + esc(title) + '</b><span>' + esc(sub) + '</span></span>';\n        return '<li class=\"posrow optrow' + (on ? ' on' : '') + '\" data-optrow=\"' + esc(g.key) + '\">' +\n          (canTick ? '<button type=\"button\" class=\"poshead\" data-cm-opthead=\"' + esc(g.key) + '\" aria-pressed=\"' + on + '\">' + head + '</button>' : '<div class=\"poshead\">' + head + '</div>') +\n          '<div class=\"posflex\"><div class=\"posbody\">' + optGroupHtml(g, true) + (pack && on ? optLogoHtml(g) : '') + (count && on ? optDataHtml(g) : '') + '</div></div></li>';\n      }).join('') + waiting.map(function (g) {\n        // Only the methods this product offers (Scott's cup: digital print, not the whole list the option allows).\n        var offered = {}; POS.forEach(function (p) { p.methods.forEach(function (m) { offered[CM.mkey(m.key)] = m; }); });\n        var names = (g.with_method || []).filter(function (k) { return offered[k]; }).map(function (k) { return CM.methodInfo(k).name; }).filter(Boolean);\n        if (!names.length) return '';\n        return '<li class=\"posrow optrow waiting\"><div class=\"poshead\"><span class=\"tick\" aria-hidden=\"true\"></span><span class=\"pn\"><b>' + esc(isPackPrint(g) ? packNoun(g) : g.label) + '</b><span>' +\n          esc('Available with ' + (names.length ? names.join(' or ').toLowerCase() : 'another print method') + ': choose it above') + '</span></span></div></li>';\n      }).join('');\n    }\n    // Ticking a box's heading: on picks its first chargeable choice (or one line of personalisation); off clears it.\n    function optHead(g) {\n      var on = groupOn(g), shown = g.options.filter(optShown), first = shown.find(function (o) { return !o.included; }) || shown[0];\n      if (g.pick === 'count') S.opt[g.key] = on ? 0 : 1;\n      else if (g.pick === 'many') { var m = {}; g.options.forEach(function (o) { if (o.included && o.fixed) m[o.id] = 1; }); if (!on && first) m[first.id] = 1; S.opt[g.key] = m; }\n      else if (g.pick === 'one') { var d = g.options.find(function (o) { return o.included; }); S.opt[g.key] = on ? (d ? d.id : null) : (first ? first.id : null); }\n    }\n    function optNotes() { return (P.options && (P.options.notes || []).length) ? '<p class=\"muted optnote\">' + P.options.notes.map(esc).join(' ') + '</p>' : ''; }\n    function optLogoHtml(g) {\n      var id = S.optLogo[g.key] && S.logoData[S.optLogo[g.key]] ? S.optLogo[g.key] : null, k = 'ol-' + g.key.replace(/[^A-Za-z0-9_-]/g, '');\n      var others = S.logos.filter(function (x) { return x !== id; });\n      return '<div class=\"poscol posart\"><h4 class=\"poslbl\">Logo</h4>' +\n        '<div class=\"poslogo\"><input type=\"file\" id=\"' + k + '\" accept=\"' + CM.ARTWORK_ACCEPT + '\" data-cm-optlogo=\"' + esc(g.key) + '\" hidden>' +\n          '<span class=\"logothumb' + (id ? '' : ' ours') + '\">' + (id ? '<img src=\"' + esc(S.logoData[id]) + '\" alt=\"Your logo\">' : '') + '</span>' +\n          '<span class=\"logoacts\"><span class=\"' + (id ? '' : 'muted') + '\">' + (id ? 'Your logo' : 'No logo yet') + '</span><span class=\"row\" style=\"gap:6px\">' +\n          (id ? '<label for=\"' + k + '\" class=\"mini-btn\">Change</label><button type=\"button\" class=\"mini-btn\" data-cm-optlogoclear=\"' + esc(g.key) + '\">Remove</button>'\n            : '<label for=\"' + k + '\" class=\"mini-btn dark\">Upload logo</label>') + '</span></span></div>' +\n        (others.length ? '<span class=\"libpick\"><span class=\"muted\">' + (id ? 'Or use' : 'Or use your') + '</span>' + others.map(function (x) {\n          return '<button type=\"button\" class=\"libthumb\" data-cm-optlogopick=\"' + esc(g.key) + '|' + esc(x) + '\" aria-label=\"Use logo ' + (S.logos.indexOf(x) + 1) + ' here\"><img src=\"' + esc(S.logoData[x]) + '\" alt=\"\"></button>';\n        }).join('') + '</span>' : '') +\n        (!id ? '<p class=\"muted pfhint\">Best: a 300 dpi CMYK PDF, or vector artwork (AI, EPS, SVG). You can also send it later.</p>' : '') + '</div>';\n    }\n    function optDataHtml(g) {\n      var d = S.optData[g.key], k = 'od-' + g.key.replace(/[^A-Za-z0-9_-]/g, '');\n      return '<div class=\"poscol posart\"><h4 class=\"poslbl\">Your list</h4>' +\n        '<div class=\"poslogo\"><input type=\"file\" id=\"' + k + '\" accept=\"' + CM.DATA_ACCEPT + '\" data-cm-optdata=\"' + esc(g.key) + '\" hidden>' +\n          '<span class=\"logothumb datafile\" aria-hidden=\"true\">' + (d ? esc((String(d.name).match(/\\.([a-z0-9]+)$/i) || [0, 'file'])[1].toUpperCase()) : '+') + '</span>' +\n          '<span class=\"logoacts\"><span class=\"' + (d ? '' : 'muted') + '\">' + (d ? esc(d.name) : 'Optional') + '</span><span class=\"row\" style=\"gap:6px\">' +\n          (d ? '<label for=\"' + k + '\" class=\"mini-btn\">Change</label><button type=\"button\" class=\"mini-btn\" data-cm-optdataclear=\"' + esc(g.key) + '\">Remove</button>'\n            : '<label for=\"' + k + '\" class=\"mini-btn dark\">Upload list</label>') + '</span></span></div>' +\n        '<p class=\"muted pfhint\">One name per row, in a CSV or Excel file. You can also send it later with your artwork.</p></div>';\n    }\n    // The packaging logos and personalisation lists for chosen boxes, as files to send: [{id, name, opt}].\n    function optFiles() {\n      var out = [];\n      optGroups().forEach(function (g) {\n        if (!groupOn(g)) return;\n        var lid = S.optLogo[g.key], d = S.optData[g.key];\n        if (isPackPrint(g) && lid && S.logoData[lid]) out.push({ id: lid, name: packNoun(g) + ' logo' + '.' + ((CM.logos.extOf && CM.logos.extOf(lid)) || 'png'), opt: true });\n        if (g.pick === 'count' && d && d.id) out.push({ id: d.id, name: 'Personalisation list - ' + d.name, opt: true });\n      });\n      return out;\n    }\n    function optGroupHtml(g, bare) {\n          var v = S.opt[g.key], body;\n          if (g.pick === 'count') {\n            var o = g.options.filter(optShown)[0], c = { g: g, o: o, n: Math.max(1, v) };\n            body = '<div class=\"optcount\"><button type=\"button\" class=\"stepbtn\" data-cm-optn=\"' + esc(g.key) + '|-1\" aria-label=\"Fewer\" ' + (v ? '' : 'disabled') + '>\u2212</button><b aria-live=\"polite\">' + (v ? CM.plural(v, g.unit_label || 'line') : 'None') + '</b><button type=\"button\" class=\"stepbtn\" data-cm-optn=\"' + esc(g.key) + '|1\" aria-label=\"More\" ' + (v >= (g.max || 3) ? 'disabled' : '') + '>+</button>' +\n              '<span class=\"muted\">' + (o.breaks ? '+' + money(optUnitOf({ g: g, o: o, n: 1 }, S.qty)) + ' each per ' + esc(g.unit_label || 'line') : '') + '</span></div>';\n          } else {\n            body = '<div class=\"optchips\" role=\"' + (g.pick === 'one' ? 'radiogroup' : 'group') + '\" aria-label=\"' + esc(g.label) + '\">' + g.options.filter(optShown).map(function (o) {\n              var on = g.pick === 'one' ? v === o.id : !!(v || {})[o.id], n = (v || {})[o.id] || 1;\n              var lock = o.fixed && o.included;\n              return '<span class=\"optchip' + (on ? ' on' : '') + (lock ? ' fixed' : '') + '\">' +\n                '<button type=\"button\" ' + (g.pick === 'one' ? 'role=\"radio\" aria-checked=\"' + on + '\"' : 'aria-pressed=\"' + on + '\"') + ' data-cm-opt=\"' + esc(g.key) + '|' + esc(o.id) + '\"' + (lock ? ' disabled title=\"Comes as standard\"' : '') + '>' +\n                '<span class=\"tick\" aria-hidden=\"true\">' + (g.pick === 'one' ? '' : on ? '\u2713' : '+') + '</span><span class=\"lbl\"><span class=\"on\">' + esc(o.name) + '</span>' +\n                '<span class=\"oc\">' + optCost({ g: g, o: o, n: on ? n : 1 }) + '</span></span></button>' +\n                (on && o.count ? '<span class=\"optn\"><button type=\"button\" class=\"stepbtn\" data-cm-optc=\"' + esc(g.key) + '|' + esc(o.id) + '|-1\" aria-label=\"Fewer\"' + (n <= 1 ? ' disabled' : '') + '>\u2212</button><b>' + n + '</b><button type=\"button\" class=\"stepbtn\" data-cm-optc=\"' + esc(g.key) + '|' + esc(o.id) + '|1\" aria-label=\"More\"' + (n >= (o.count.max || 9) ? ' disabled' : '') + '>+</button><span class=\"muted\">' + esc(o.count.label || '') + '</span></span>' : '') +\n                '</span>';\n            }).join('') + '</div>';\n          }\n          var hint = g.pick === 'one' ? (g.optional ? 'Optional, choose one' : 'Choose one') : g.pick === 'count' ? '' : 'Add any';\n          return '<div class=\"optgroup\">' + (bare ? '' : '<p class=\"optlabel\"><b>' + esc(g.label) + '</b>' + (hint ? ' <span class=\"muted\">' + hint + '</span>' : '') + '</p>') +\n            (g.note ? '<p class=\"muted optnote\">' + esc(g.note) + '</p>' : '') + body + '</div>';\n    }\n    function optSnapshot() {\n      return { sel: S.opt, logos: S.optLogo, data: S.optData, speed: SPEED ? { key: speedOpt().key, name: speedOpt().name, days: speedOpt().days } : null, chosen: optChosen().map(function (c) { return { group: c.g.label, id: c.o.id, name: c.o.name, n: c.n, included: !!c.o.included }; }) };\n    }\n\n    // ---- Main render ---------------------------------------------------------------------\n    var INFO = root.querySelector('[data-cm-info]');\n    function render() {\n      var dyn = root.querySelector('[data-cm-dyn]'); if (!dyn) return;\n      var q = S.qty, bp = brandPrice(q), undec = CM.unbrandedAt(dj, q);\n      var priceHtml;\n      if (undec == null) {\n        priceHtml = '<p style=\"margin:0\">' + (P.displayPrice ? '<span class=\"big\">' + money(P.displayPrice) + '</span> <span class=\"muted\">each ex GST, branded, for ' + P.moq + '</span>' : '<span class=\"muted\">Ask us for a price.</span>') + '</p>';\n      } else {\n        var op = optPrice(q), unit = undec + bp.unit + op.unit, setup = bp.setup + (dj ? dj.undecSetup : 0) + op.once, tot = unit * q + setup;\n        // Three lines: price each, the branding it includes, the order total. Each line keeps its phrases whole (no stray one-word lines).\n        var bw = brandingWords(), ow = optWords();\n        if (SPEED && bw !== 'unbranded') ow.unshift(speedOpt().name.replace(/^[A-Z]/, function (c) { return c.toLowerCase(); }) + ' production');\n        if (ow.length) bw += (bw === 'unbranded' ? ', with ' : ', with ') + (ow.length > 1 ? ow.slice(0, -1).join(', ') + ' and ' + ow[ow.length - 1] : ow[0]);\n        // The price each includes the setups spread over the quantity, as on the result cards (Scott, 8 Nov 2026).\n        var each = CM.round2(tot / Math.max(1, q));\n        priceHtml = '<div class=\"pricehead\" aria-live=\"polite\"><p class=\"pheach\"><span class=\"big\">' + money(each) + '</span> <span class=\"muted\">each ex GST' + (setup ? ', setup included' : '') + '</span></p>' +\n          '<p class=\"phbrand\">' + esc(bw.charAt(0).toUpperCase() + bw.slice(1)) + '</p>' +\n          '<p class=\"phtotal muted\"><span class=\"nw\">' + money(tot) + ' ex GST for ' + q + '</span>' + (setup ? ' <span class=\"nw\">incl. ' + money(setup) + ' setup</span>' : '') + ' <span class=\"nw\">(' + money(tot * 1.1) + ' inc GST)</span>' + (anyReview() ? ' <span class=\"nw\">\u00B7 subject to artwork review</span>' : '') + '</p></div>';\n      }\n      var sampleHtml = '';\n      if (P.samples && CM.cfg.samples) {\n        var sp = dj && dj.undec.length ? CM.unbrandedAt(dj, dj.undec[0].qty) : null;\n        sampleHtml = '<p class=\"samplelink\"><span>Not sure yet?</span> <button type=\"button\" class=\"quiet\" data-cm-sample>Order sample</button> <span class=\"muted\">' + (sp != null ? 'about ' + money(sp) + ' ex GST + freight' : 'unbranded, + freight') + '</span></p>';\n      }\n      var open = CM.carts.open().filter(function (c) { return c.kind === 'order'; });\n      var canOrder = POS.length && undec != null && !speedBlocked();\n      dyn.innerHTML = priceHtml +\n        '<div><p class=\"q\"><label for=\"pq\">Quantity</label></p><div class=\"row\" style=\"align-items:center\" role=\"group\" aria-label=\"Quantity\">' +\n        chips.map(function (n) { return '<button type=\"button\" class=\"chip\" data-cm-qty=\"' + n + '\" aria-pressed=\"' + (S.qty === n) + '\">' + n + '</button>'; }).join('') +\n        '<span class=\"qtyin\"><input id=\"pq\" type=\"number\" inputmode=\"numeric\" min=\"' + P.moq + '\" step=\"1\" value=\"' + S.qty + '\" data-cm-exact aria-label=\"Exact quantity\" enterkeyhint=\"done\"><span class=\"muted\">units</span></span></div>' +\n        '<p class=\"muted\" style=\"margin:6px 0 0;font-size:13px\">Pick a quantity or type the exact number' + (P.moq > 1 ? ' (minimum ' + P.moq + ')' : '') + '.' + mixNote() + '</p>' + sampleHtml + '</div>' +\n        '<div class=\"pdp-deskcols\">' + vColours() + '</div>' + DIMS + (INFO ? '<div data-cm-infoslot></div>' : '') + brandingSuite() + speedSuite() + (POS.length ? calcSection() : '') +\n        '<div class=\"actions sticky' + (S.live ? ' live' : '') + '\"><div class=\"dockprev\" aria-hidden=\"true\">' + suitePreview() + '</div>' +\n        (canOrder ? '<button type=\"button\" class=\"pill dark\" data-cm-buy>' + (editCart ? 'Update cart ' + editCart.id : 'Order now') + '</button>' : '') +\n        '<button type=\"button\" class=\"pill line\" data-cm-quote>' + quoteLabel() + '</button></div>' +\n        // Phones: the buttons sit here, just above Bob; the bottom bar keeps only the mockup (Scott, 3 Nov 2026).\n        '<div class=\"actions phoneact\">' + (canOrder ? '<button type=\"button\" class=\"pill dark\" data-cm-buy>' + (editCart ? 'Update cart ' + editCart.id : 'Order now') + '</button>' : '') +\n        '<button type=\"button\" class=\"pill line\" data-cm-quote>' + quoteLabel() + '</button></div>' + templateNote('quote') +\n        // Bob without a speech bubble, beside what each button does (Scott, 11 Nov 2026).\n        (editCart ? '' : CM.pal('rod', '', 64).replace('class=\"pal\"', 'class=\"pal pdpnudge\"').replace(/<\\/div>$/, '<ul class=\"pdpexplain\">' +\n          (canOrder ? '<li><b>Order now</b> Enter your size mix, deadline and delivery details.</li>' : '') +\n          '<li><b>' + esc(quoteLabel()) + '</b> We email the price' + (sel().some(canMock) ? ' and a mock-up image with your branding.' : ' to you.') + '</li></ul></div>')) +\n        (editCart ? '<p class=\"note\" style=\"margin:0\">Changing the branding for Cart ' + editCart.id + '. Tap Update cart to save it, or <a href=\"' + esc(CM.pageUrl('cart', { cart: editCart.id })) + '\" style=\"font-weight:800\">cancel</a>.</p>'\n          : open.length ? '<p class=\"note\" style=\"margin:0\">You have ' + (open.length === 1 ? 'an order' : open.length + ' orders') + ' in progress (<a href=\"' + esc(CM.pageUrl('cart')) + '\" style=\"font-weight:800\">' + open.map(CM.carts.label).map(esc).join(', ') + '</a>). Order now adds another cart so you don\\'t lose anything.</p>' : '') +\n        (P.lead ? '<p class=\"muted\" style=\"margin:0;font-size:14px\">' + esc(P.lead) + '</p>' : '');\n      // Description and specifications sit between the colours and the branding (moved, so More and the open state survive re-renders).\n      var slot = dyn.querySelector('[data-cm-infoslot]'); if (slot) slot.replaceWith(INFO);\n      // Lead time for the branding chosen (Scott, 11 Nov 2026): order check, stock and branding in working days\n      // (custom.leadtimes), updated as branding changes; transit and delivery are in Estimated delivery.\n      var ld = dyn.querySelector('[data-cm-leaddays]');\n      if (ld && P.leadtimes) {\n        var lids = sel().map(function (k) { var m = methodOf(k), pp = posPrice(k); return pp.decID || (decsOf(m)[0] && decsOf(m)[0].id); });\n        var le = CM.leadEstimate(P.leadtimes, lids, { speed: SPEED ? speedOpt().days : null });\n        if (le) { var lw = le.days - (le.transit || 0) - (+P.leadtimes.freight || 0); if (lw > 0) ld.textContent = CM.plural(lw, 'working day'); }\n      }\n      // Phones: the same colour picker under the photos (Scott, 11 Nov 2026); CSS shows one or the other.\n      var pc = root.querySelector('[data-cm-phonecols]'); if (pc) pc.innerHTML = vColours();\n      var pa = root.querySelector('[data-cm-printarea]');\n      if (pa && POS[0] && mmOf(POS[0].key)) { pa.hidden = false; pa.querySelector('b').textContent = mmOf(POS[0].key).join(' \u00D7 ') + ' mm'; }\n      vBreaks(); vStock();\n      renderSide();\n      warpAll(root);\n      watchDock(); positionSide();\n    }\n    function refreshPreviews() {\n      root.querySelectorAll('.suiteprev').forEach(function (sp) { var t = document.createElement('div'); t.innerHTML = suitePreview(); sp.replaceWith(t.firstElementChild); });\n      root.querySelectorAll('[data-cm-posprev]').forEach(function (el) { el.innerHTML = posPreview(el.getAttribute('data-cm-posprev')); });\n      renderSide();\n      warpAll(root); positionSide();\n    }\n\n    // Desktop: each chosen position's mockup sits in the left column as a large picture, level with its row,\n    // not inside the branding box (Scott, 7 Nov 2026). Phones keep the picture in the row and the bottom bar.\n    function renderSide() {\n      var sp = root.querySelector('.sidepreview'); if (!sp) return;\n      sp.innerHTML = sel().map(function (k) {\n        return '<div class=\"sidepos\" data-side=\"' + k + '\"><span class=\"sidecap\">' + esc(posOf(k).name) + '</span>' + posPreview(k) + '</div>';\n      }).join('');\n    }\n    function positionSide() {\n      var pdp = root.querySelector('.pdp'); if (!pdp) return;\n      var g = pdp.querySelector('.gallery'), c = pdp.querySelector('.choose'), sp = pdp.querySelector('.sidepreview');\n      var two = Math.abs(g.getBoundingClientRect().top - c.getBoundingClientRect().top) < 4;\n      pdp.classList.toggle('twocol', two);\n      if (!two || !sp) return;\n      var gt = g.getBoundingClientRect().top, natural = Array.prototype.filter.call(g.children, function (x) { return x !== sp; }).reduce(function (m, x) { return Math.max(m, x.getBoundingClientRect().bottom - gt); }, 0);\n      var next = natural + 24, resized = false;\n      Array.prototype.forEach.call(sp.querySelectorAll('.sidepos'), function (el) {\n        var row = pdp.querySelector('.posrow[data-row=\"' + el.getAttribute('data-side') + '\"]'); if (!row) return;\n        // No taller than its branding box (Scott, 7 Nov 2026): the picture is square, so its side is the\n        // box height less the caption, within the column width and 440px.\n        var cap = el.querySelector('.sidecap'), ph = el.querySelector('.photo.mini');\n        var side = Math.max(120, Math.min(440, sp.clientWidth || g.clientWidth, row.getBoundingClientRect().height - (cap ? cap.offsetHeight + 6 : 0)));\n        if (ph && Math.abs((parseFloat(ph.style.width) || 0) - side) > 1) { ph.style.width = side + 'px'; if (cap) cap.style.width = side + 'px'; resized = true; }\n        var top = Math.max(next, row.getBoundingClientRect().top - gt);\n        el.style.top = top + 'px'; next = top + el.offsetHeight + 16;\n      });\n      if (resized) CM.renderQuads(sp); // logos on angled print areas are sized in px\n    }\n    window.addEventListener('resize', positionSide);\n    // Phones: while branding is edited, the pictures move to the bottom bar.\n    var dockObs = null;\n    function watchDock() {\n      if (dockObs) { dockObs.disconnect(); dockObs = null; }\n      var bar = root.querySelector('.actions.sticky.live'), suite = root.querySelector('.suite'), top = suite && suite.querySelector('.suitetop .suiteprev');\n      if (!bar || !suite || !top || !('IntersectionObserver' in window)) return;\n      var vis = { suite: false, top: false };\n      dockObs = new IntersectionObserver(function (es) {\n        es.forEach(function (en) { vis[en.target === suite ? 'suite' : 'top'] = en.isIntersecting; });\n        bar.classList.toggle('showdock', vis.suite && !vis.top);\n      }, { rootMargin: '0px 0px -120px 0px' });\n      dockObs.observe(suite); dockObs.observe(top);\n    }\n    function goLive() {\n      if (S.live) return;\n      S.live = true;\n      var a = root.querySelector('.actions.sticky'), s = root.querySelector('.suite');\n      if (a) a.classList.add('live'); if (s) s.classList.add('live');\n      watchDock();\n    }\n\n    // ---- Order now, Quick quote, samples ------------------------------------------------------\n    function snapshot() {\n      return sel().map(function (k) {\n        var p = posOf(k), a = S.pos[k], m = methodOf(k), info = CM.methodInfo(a.m), pp = posPrice(k), mm = mmOf(k);\n        var mock = canMock(k); // a guide-only position has no picture to draw on at checkout either\n        return { key: k, name: p.name, view: p.view, image: mock ? viewImage(p.view) : null, clean: mock ? patchOf(p.view) : null, area: mock ? areaOf(k) : null, quad: mock ? p.quad : null, surface: p.surface || null, guide: !mock, max_mm: mm, method: CM.mkey(a.m), m: a.m, methodName: m.name || info.name,\n          decID: pp.decID || (decsOf(m)[0] && decsOf(m)[0].id), colours: info.solid ? infoFor(k).colours : null, colOverride: S.colOverride[k] || null,\n          width_mm: mm && mock ? Math.round(mm[0] * a.s) : null, logoId: a.logo || null, s: sizeOf(k), y: a.y, r: a.r || 0, land: canLand(k) && !!a.land, shown_mm: mmShown(k), warp: /wrap/i.test(p.name), on: true,\n          preflight: (function () { var pf = preflightFor(k); return pf ? (pf.ready ? 'ready' : 'help') : null; })(), preflightNotes: (preflightFor(k) || {}).notes || [] };\n      });\n    }\n    // A new cart for this product and its branding (Order now, and kept with a quote so its PDF's\n    // \"complete the online checkout\" link can rebuild it: Scott, 7 Nov 2026).\n    function cartData(branding) {\n      var v = variant(), lines = {}; lines[P.appaid] = {}; lines[P.appaid][S.colour || 'Standard'] = {};\n      return {\n        product: { id: P.id, appaid: P.appaid, handle: P.handle, title: P.title, url: P.url, image: (v.thumb || (P.style[0] && P.style[0].thumb) || null),\n          ourcode: P.ourcode, supcode: P.supcode, colours: colours().map(function (c) { return { name: c.name, hex: c.hex, variant: c.v.id }; }), related: P.related || null, dj: P.dj },\n        colour: S.colour, pqty: S.qty, branding: branding || { positions: snapshot(), options: (OPT.length || SPEED) ? optSnapshot() : null }, lines: lines, rel: [], extras: optFiles()\n      };\n    }\n    // With an instant mockup the quote comes with it (Scott, 9 Nov 2026): one button says so, no separate red one.\n    function quoteLabel() { return sel().some(canMock) ? 'Quick quote and branding mockup' : 'Quick quote'; }\n    function orderNow() {\n      var v = variant(), branding = { positions: snapshot(), options: (OPT.length || SPEED) ? optSnapshot() : null };\n      CM.qty.set(S.qty);\n      if (editCart) {\n        var c = CM.carts.get(editCart.id);\n        if (c && c.status === 'open') { c.branding = branding; c.extras = (c.extras || []).filter(function (x) { return !x.opt; }).concat(optFiles()); CM.carts.put(c); location.href = CM.pageUrl('cart', { cart: c.id }); return; }\n      }\n      var cart = CM.carts.newOrder(cartData(branding));\n      CM.carts.setCurrent(cart.id);\n      location.href = CM.pageUrl('cart', { cart: cart.id });\n    }\n    // The mockups as pictures for the quote PDF: each side with a mockup, drawn off screen at 600 px and\n    // captured once its photo is cleaned and its logos placed (Scott, 7 Nov 2026).\n    function mockupFiles() {\n      var on = sel(), views = ['front', 'back'].map(function (view) { return [view, on.filter(function (k) { return posOf(k).view === view && canMock(k); })]; })\n        .filter(function (x) { return x[1].length; });\n      if (!views.length) return Promise.resolve([]);\n      var holder = document.createElement('div');\n      holder.setAttribute('aria-hidden', 'true');\n      holder.style.cssText = 'position:fixed;left:-10000px;top:0;width:600px;pointer-events:none';\n      holder.innerHTML = views.map(function (x) { return mockTile(x[0], x[1]).replace('class=\"photo mini\"', 'class=\"photo mini\" style=\"display:block;position:relative;width:600px;height:600px;max-width:none\"'); }).join('');\n      root.appendChild(holder);\n      warpAll(holder);\n      var settled = function () {\n        return !holder.querySelector('img[data-cm-quad]') && Array.prototype.every.call(holder.querySelectorAll('img'), function (im) { return im.complete && getComputedStyle(im).visibility !== 'hidden'; });\n      };\n      return new Promise(function (res) {\n        var t0 = Date.now();\n        (function wait() { if (settled() || Date.now() - t0 > 4000) res(); else setTimeout(wait, 120); })();\n      }).then(function () {\n        return Promise.all(Array.prototype.map.call(holder.querySelectorAll('.photo.mini'), function (tile, i) { return CM.tileToFile(tile, 'mockup-' + views[i][0] + '.jpg', 800); }));\n      }).then(function (files) { holder.remove(); return files.filter(Boolean); }, function () { holder.remove(); return []; });\n    }\n    function similarShown() {\n      return Array.prototype.map.call(root.querySelectorAll('[data-cm-simgrid] [data-cm-card]'), function (c) { return c.getAttribute('data-handle'); })\n        .filter(function (h) { return /^\\d+$/.test(h || ''); }).slice(0, 4);\n    }\n    function quickQuote() {\n      var v = variant(), pos = snapshot();\n      CM.quickQuote({ title: P.title, image: v.thumb || (P.style[0] && P.style[0].thumb), product: P.appaid, variantId: v.id, quantity: S.qty, colour: S.colour,\n        decID: pos[0] && pos[0].decID, positions: pos, review: anyReview(), mockups: mockupFiles, similar: similarShown(),\n        options: OPT.length ? optSnapshot().chosen : null, cartState: cartData(), files: optFiles(),\n        summary: (S.colour ? S.colour + ' \u00B7 ' : '') + S.qty + ' units' + (pos.length ? ' \u00B7 ' + pos.map(function (p) { return p.name + ' (' + p.methodName + ')'; }).join(', ') : '') + (SPEED ? ' \u00B7 ' + speedOpt().name + ' production' : '') + (optWords().length ? ' \u00B7 ' + optWords().join(', ') : '') });\n    }\n    function sampleSheet() {\n      var list = colours(), col = S.colour, sc = CM.carts.samples();\n      var price = dj && dj.undec.length ? CM.unbrandedAt(dj, dj.undec[0].qty) : null;\n      var v = variant();\n      var s = CM.sheet('<div class=\"sheethead\"><h2 id=\"smh\" style=\"font-size:20px;font-weight:800;flex:1\">Order sample</h2><button type=\"button\" class=\"x\" data-cm-close aria-label=\"Close\">\u00D7</button></div>' +\n        '<div class=\"smhead\">' + (v.thumb ? '<span class=\"photo mini\" style=\"width:72px;height:72px\"><img class=\"ph\" src=\"' + esc(v.thumb) + '\" alt=\"\"></span>' : '') + '<div><b>' + esc(P.title) + '</b><span class=\"muted\">' + esc(P.ourcode || '') + '</span></div></div>' +\n        '<div data-sm-body><p class=\"note\" style=\"margin:0\">Samples may be unprinted or taken from another client\\'s print overrun. The factory decides, and it can vary.</p>' +\n        (list.length > 1 ? '<label class=\"field\" for=\"smcol\">Colour <select id=\"smcol\">' + list.map(function (c) { return '<option' + (c.name === col ? ' selected' : '') + '>' + esc(c.name) + '</option>'; }).join('') + '</select></label>' : (col ? '<p class=\"muted\" style=\"margin:0\">Colour: ' + esc(col) + '</p>' : '')) +\n        '<p class=\"smprice\">' + (price != null ? '<b>' + money(price) + '</b> ' : '') + '<span class=\"muted\">ex GST, the unbranded price at the minimum order' + (P.moq > 1 ? ' of ' + P.moq : '') + '. Freight is added per factory. Your samples cart shows the exact price.</span></p>' +\n        '<p class=\"smwhere\">' + (sc ? '<b>Goes into your samples cart (Samples ' + sc.id + ')</b> with your ' + CM.plural(sc.items.filter(function (l) { return !l.removed; }).length, 'other sample') + '. One invoice for the lot.' : '<b>Starts your samples cart.</b> Any other samples you order go in the same cart, on one invoice.') + '</p>' +\n        '<button type=\"button\" class=\"pill red\" data-sm-add>Add to samples cart</button></div>', { labelledby: 'smh' });\n      var toast = '';\n      s.el.addEventListener('click', function (e) {\n        if (!e.target.closest('[data-sm-add]')) return;\n        var c = (s.el.querySelector('#smcol') || {}).value || col || '';\n        var vv = P.variants.find(function (x) { return x.colour === c; }) || v;\n        var r = CM.carts.addSample({ product: P.appaid, colour: c, name: P.title, url: P.url, image: vv.thumb || null, code: P.ourcode, hex: CM.colourHex(c, P.swatches[c], vv.fams) });\n        toast = 'Added ' + P.title + (c ? ' (' + c + ')' : '') + ' to your samples cart (Samples ' + r.cart.id + ').';\n        s.el.querySelector('[data-sm-body]').innerHTML = '<div class=\"okbox\" role=\"status\"><b>Added to your samples cart (Samples ' + r.cart.id + ')</b><span>' + (r.existing ? 'It joins your other samples. ' : '') + CM.plural(r.n, 'sample') + ' in the cart now, all on one invoice.</span>' +\n          '<div class=\"row\" style=\"gap:10px\"><a class=\"pill dark\" href=\"' + esc(CM.pageUrl('cart', { cart: r.cart.id })) + '\" style=\"min-height:44px\">Go to samples cart</a><button type=\"button\" class=\"pill line\" data-cm-close style=\"min-height:44px\">Keep browsing</button></div></div>';\n        var b = s.el.querySelector('.okbox a'); if (b) b.focus();\n      });\n      var obs = new MutationObserver(function () { if (!s.el.isConnected) { obs.disconnect(); if (toast) CM.toast(toast, CM.pageUrl('cart'), 'View cart'); render(); } });\n      obs.observe(document.body, { childList: true });\n    }\n\n    // ---- Events ------------------------------------------------------------------------\n    root.addEventListener('click', function (e) {\n      var t = e.target;\n      var cp = t.closest('[data-cm-copy]');\n      if (cp) { try { navigator.clipboard.writeText(cp.getAttribute('data-cm-copy')); } catch (x) { /* ignore */ } cp.textContent = 'Copied'; setTimeout(function () { cp.textContent = 'Copy'; }, 1500); return; }\n      var q = t.closest('[data-cm-qty]');\n      if (q) { S.qty = +q.getAttribute('data-cm-qty'); CM.qty.set(S.qty); render(); return; }\n      var col = t.closest('[data-cm-colour]');\n      if (col) { pickColour(col.getAttribute('data-cm-colour')); return; }\n      if (t.closest('[data-cm-colsheet]')) { openColSheet(); return; }\n      var ph = t.closest('[data-cm-photo]');\n      if (ph) { S.photo = +ph.getAttribute('data-cm-photo'); renderGallery(); return; }\n      if (t.closest('[data-cm-zoom]')) {\n        var set = gallerySet(), cur = set[S.photo] || set[0];\n        if (cur) CM.sheet('<div class=\"sheethead\"><h2 id=\"zh\" style=\"font-size:18px;font-weight:800;flex:1\">' + esc(P.title) + '</h2><button type=\"button\" class=\"x\" data-cm-close aria-label=\"Close\">\u00D7</button></div><div class=\"photo\" style=\"aspect-ratio:1/1;width:100%\"><img class=\"ph\" src=\"' + esc(cur.src) + '\" alt=\"' + esc(P.title) + '\"></div>', { labelledby: 'zh' });\n        return;\n      }\n      var sb = t.closest('[data-cm-speed]');\n      if (sb && !sb.disabled) { S.speed = sb.getAttribute('data-cm-speed'); render(); return; }\n      var ob = t.closest('[data-cm-opt]');\n      if (ob && !ob.disabled) {\n        var oa = ob.getAttribute('data-cm-opt').split('|'), og = OPT.find(function (g) { return g.key === oa[0]; }), oo = og && og.options.find(function (o) { return o.id === oa[1]; });\n        if (og && oo) {\n          if (og.pick === 'one') S.opt[og.key] = (og.optional && S.opt[og.key] === oo.id) ? null : oo.id;\n          else { var mm = S.opt[og.key] = S.opt[og.key] || {}; if (mm[oo.id]) delete mm[oo.id]; else { mm[oo.id] = 1; (oo.excludes || []).forEach(function (x) { delete mm[x]; }); } }\n          render();\n        }\n        return;\n      }\n      var ocl = t.closest('[data-cm-optlogoclear]');\n      if (ocl) { delete S.optLogo[ocl.getAttribute('data-cm-optlogoclear')]; render(); return; }\n      var opk = t.closest('[data-cm-optlogopick]');\n      if (opk) { var ob = opk.getAttribute('data-cm-optlogopick').split('|'); S.optLogo[ob[0]] = ob[1]; render(); return; }\n      var odc = t.closest('[data-cm-optdataclear]');\n      if (odc) { delete S.optData[odc.getAttribute('data-cm-optdataclear')]; render(); return; }\n      var oh = t.closest('[data-cm-opthead]');\n      if (oh) { var hg = OPT.find(function (g) { return g.key === oh.getAttribute('data-cm-opthead'); }); if (hg) { optHead(hg); render(); } return; }\n      var on2 = t.closest('[data-cm-optn]');\n      if (on2 && !on2.disabled) { var na = on2.getAttribute('data-cm-optn').split('|'), ng = OPT.find(function (g) { return g.key === na[0]; }); if (ng) { S.opt[ng.key] = Math.max(0, Math.min(ng.max || 3, (S.opt[ng.key] || 0) + (+na[1]))); render(); } return; }\n      var oc = t.closest('[data-cm-optc]');\n      if (oc && !oc.disabled) { var ca = oc.getAttribute('data-cm-optc').split('|'), cm = S.opt[ca[0]] || {}, cg = OPT.find(function (g) { return g.key === ca[0]; }), co = cg && cg.options.find(function (o) { return o.id === ca[1]; }); if (co && cm[co.id]) { cm[co.id] = Math.max(1, Math.min((co.count && co.count.max) || 9, cm[co.id] + (+ca[2]))); render(); } return; }\n      var ro = t.closest('[data-cm-rot]');\n      if (ro) { var kr = ro.getAttribute('data-cm-rot'); goLive(); S.adj = kr; S.pos[kr].r = ((S.pos[kr].r || 0) + 90) % 360; saveBrand(); render(); return; }\n      var la = t.closest('[data-cm-land]');\n      if (la) { var kl = la.getAttribute('data-cm-land'); goLive(); S.adj = kl; S.pos[kl].land = !S.pos[kl].land; saveBrand(); render(); return; }\n      var pr = t.closest('[data-cm-posrow]');\n      if (pr) {\n        var k = pr.getAttribute('data-cm-posrow'), a = S.pos[k];\n        if (a.on && sel().length === 1) return;\n        goLive(); a.on = !a.on;\n        if (a.on) { S.adj = k; a.s = 1; if (!a.logo) { var u = CM.userLogo.id(); a.logo = (u && S.logoData[u]) ? u : (S.logos[0] || null); } }\n        enforceSolid(); saveBrand(); render(); return;\n      }\n      var pm = t.closest('[data-cm-posm]');\n      if (pm) { var k2 = pm.getAttribute('data-cm-posm'); goLive(); S.adj = k2; S.pos[k2].m = pm.getAttribute('data-m'); S.pos[k2].s = 1; delete S.notice[k2]; enforceSolid(); saveBrand(); render(); return; }\n      var cs = t.closest('[data-cm-colstep]');\n      if (cs) { var k3 = cs.getAttribute('data-cm-colstep'); goLive(); S.colOverride[k3] = Math.max(1, Math.min(12, infoFor(k3).colours + (+cs.getAttribute('data-d')))); saveBrand(); render(); return; }\n      var pc = t.closest('[data-cm-posclear]');\n      if (pc) { var k4 = pc.getAttribute('data-cm-posclear'); S.pos[k4].logo = null; delete S.notice[k4]; delete S.colOverride[k4]; saveBrand(); render(); return; }\n      var pk = t.closest('[data-cm-pospick]');\n      if (pk) { var bits = pk.getAttribute('data-cm-pospick').split('|'); S.pos[bits[0]].logo = bits[1]; S.adj = bits[0]; delete S.notice[bits[0]]; delete S.colOverride[bits[0]]; enforceSolid(); saveBrand(); render(); return; }\n      if (t.closest('[data-cm-buy]')) { orderNow(); return; }\n      if (t.closest('[data-cm-quote]')) { quickQuote(); return; }\n      if (t.closest('[data-cm-sample]')) { sampleSheet(); return; }\n      if (t.closest('[data-cm-checkstock]')) {\n        S.stockOn = true; vStock();\n        CM.stock(P.appaid).then(function (r) { S.stock = r; vStock(); });\n        return;\n      }\n      var sa = t.closest('[data-cm-stockall]');\n      if (sa) { S.stockAll = !!sa.getAttribute('data-cm-stockall'); vStock(); return; }\n      var ss = t.closest('[data-cm-simsort]');\n      if (ss) { sortSimilar(ss.getAttribute('data-cm-simsort')); }\n    });\n    root.addEventListener('change', function (e) {\n      var t = e.target;\n      if (t.hasAttribute('data-cm-exact')) { S.qty = Math.max(P.moq, Math.round(+t.value || 0)); CM.qty.set(S.qty); render(); var i = root.querySelector('#pq'); if (i) i.focus(); return; }\n      if (t.hasAttribute('data-cm-skus')) { S.skus = t.checked; vStock(); return; }\n      // A new logo size can move a size-tiered line to another tier: price again once the slider is let go.\n      if (t.hasAttribute('data-cm-size')) { var sk = t.getAttribute('data-cm-size'); render(); var si = root.querySelector('#sz-' + sk); if (si) si.focus(); return; }\n      var ol = t.getAttribute('data-cm-optlogo');\n      if (ol && t.files && t.files[0]) {\n        var of = t.files[0];\n        CM.readLogoFile(of).then(function (data) {\n          return CM.logos.put(data, of.name).then(function (id) { S.logos.push(id); S.logoData[id] = data; S.optLogo[ol] = id; render(); });\n        }, function (err) { alert(err.message); });\n        return;\n      }\n      var od = t.getAttribute('data-cm-optdata');\n      if (od && t.files && t.files[0]) {\n        var df = t.files[0];\n        CM.logos.putFile(df).then(function (id) { S.optData[od] = { id: id, name: df.name }; render(); }, function (err) { alert(err.message); });\n        return;\n      }\n      var pl = t.getAttribute('data-cm-poslogo');\n      if (pl && t.files && t.files[0]) {\n        goLive();\n        CM.readLogoFile(t.files[0]).then(function (data) {\n          return CM.logos.put(data, t.files[0].name).then(function (id) {\n            var first = !S.logos.length;\n            S.logos.push(id); S.logoData[id] = data; S.pos[pl].logo = id; S.adj = pl;\n            if (first) { sel().forEach(function (k) { if (!S.pos[k].logo) S.pos[k].logo = id; }); if (!CM.userLogo.id()) CM.userLogo.set(id); }\n            delete S.notice[pl]; delete S.colOverride[pl];\n            return Promise.all([CM.analyzeLogo(data).then(function (i) { S.info[id] = i; }), CM.logos.facts(id).then(function (f) { S.facts[id] = f; })]).then(function () { enforceSolid(); saveBrand(); render(); });\n          });\n        }, function (err) { alert(err.message); });\n      }\n    });\n    root.addEventListener('input', function (e) {\n      var t = e.target, k = t.getAttribute('data-cm-size') || t.getAttribute('data-cm-y');\n      if (!k) return;\n      goLive();\n      if (t.hasAttribute('data-cm-size')) {\n        S.pos[k].s = +t.value;\n        var mw = root.querySelector('[data-cm-mmw=\"' + k + '\"]'), mm = mmShown(k);\n        if (mw) mw.textContent = mm ? Math.round(mm[0] * S.pos[k].s) + ' mm wide' : Math.round(S.pos[k].s * 100) + '%';\n      } else S.pos[k].y = +t.value;\n      if (S.adj !== k) { S.adj = k; positionSide(); }\n      refreshPreviews(); saveBrand();\n    });\n    root.addEventListener('keydown', function (e) {\n      if (e.target.hasAttribute && e.target.hasAttribute('data-cm-exact') && e.key === 'Enter') { e.preventDefault(); e.target.blur(); }\n    });\n    document.addEventListener('cm:userlogo', function () { loadLogos().then(render); });\n\n    // Similar products: closest (metafield order), cheaper at this quantity, lower minimum.\n    function sortSimilar(k) {\n      var grid = root.querySelector('[data-cm-simgrid]'); if (!grid) return;\n      root.querySelectorAll('[data-cm-simsort]').forEach(function (b) { b.setAttribute('aria-pressed', String(b.getAttribute('data-cm-simsort') === k)); });\n      var cards = Array.prototype.slice.call(grid.querySelectorAll('[data-cm-card]'));\n      cards.forEach(function (c, i) { if (c._i == null) c._i = i; });\n      var price = function (c) { var d = c._dj || CM.parseDJ(c.getAttribute('data-dj')); return d ? CM.cardPrice(d, Math.max(S.qty, +c.getAttribute('data-moq') || 1)) || 1e9 : 1e9; };\n      cards.sort(function (a, b) { return k === 'cheaper' ? price(a) - price(b) : k === 'moq' ? (+a.getAttribute('data-moq') || 1) - (+b.getAttribute('data-moq') || 1) : a._i - b._i; });\n      cards.forEach(function (c) { grid.appendChild(c); });\n    }\n\n    // ---- Start ---------------------------------------------------------------------\n    S.colourPicked = !!S.colourPicked || !!params.get('variant');\n    // Description: show More only when the text runs past five lines.\n    (function () {\n      var p = root.querySelector('#cm-intro'), b = root.querySelector('[data-cm-more]');\n      if (!p || !b) return;\n      if (p.scrollHeight > p.clientHeight + 2) b.hidden = false;\n      b.addEventListener('click', function () {\n        var open = p.classList.toggle('clamp') === false;\n        b.textContent = open ? 'Less' : 'More';\n        b.setAttribute('aria-expanded', String(open));\n      });\n    })();\n    render(); renderGallery();\n    // Swatches from each colour's own photo, a few at a time; redraw once they're in.\n    (function () {\n      // Only colour photos: a style photo (e.g. the only picture of a single-colour product) says nothing about the colour.\n      var todo = P.variants.filter(function (v) { return v.thumb && v.img && !v.hero && !(P.swatches[v.colour] && /^#|^rgb/i.test(P.swatches[v.colour])); });\n      var i = 0, busy = 0, timer = null;\n      var redraw = function () { clearTimeout(timer); timer = setTimeout(function () { if (!document.querySelector('.sheetwrap')) render(); }, 150); };\n      var next = function () {\n        while (busy < 6 && i < todo.length) {\n          var v = todo[i++]; busy++;\n          CM.imageHex(v.thumb).then(function (vv) { return function (hex) { busy--; if (hex) { vv.imgHex = hex; redraw(); } next(); }; }(v));\n        }\n      };\n      next();\n    })();\n    var sim = root.querySelector('[data-cm-simgrid]');\n    if (sim) CM.cards(sim, S.qty);\n    loadLogos().then(function () { enforceSolid(); render(); renderGallery(); });\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start); else start();\n})();\n"],
  "mappings": "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",
  "names": ["m", "o", "first", "i"]
}
