{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/ardor-rigid-builder.js?x=1792536035951"],
  "sourcesContent": ["/* Ardor Rigid Sign Designer: material (Magnets, Coroplast, Aluminum Sandwich Board, Acrylic, PVC Board, Foam Board,\nStyrene, GatorFoam, Aluminum Sign), size (the supplier's sizes, our quick sizes, Custom Size in inches, and the big sizes\nprinted in our shop, pickup only), then the supplier's option groups for that material in their wording and order (sides,\ngrommets, holes, standoffs, round corners, H-stake, material), quantity (yard sign packs at the yard sign sizes), delivery,\nlive price, artwork on the front and back at true proportions (no bleed, 0.25 in safe line, holes / grommets / standoffs\nand round corners drawn), 3D preview, proof approval, cart (whole-dollar price ladder lines) and quote. Ardor Printing.\nNew Oct 20, 2026 (RS-CORE). Made from a copy of the LIVE assets/ardor-realestate-builder.js (unchanged; it carries the\nOct 20 upload fix) by the patch list rigid/core/builder.patch. Loaded by sections/ardor-rigid-builder-ws-kit.liquid.\nUploads over a template or Background are guarded by the kit (assets/ardor-rigid-kit.js, banner kit-v2 method): the\nfile input and drop handlers here call loadFile(file, face) without the 'ask' path, so only one dialog ever shows.\nPrice: assets/ardor-rigid-price.js (rsPrice) + assets/ardor-rigid-price-data.js; materials: assets/ardor-rigid-specs.js;\ncart ladder ids: assets/ardor-rigid-ladder.json. Works with ardor-rigid-layers-kit.js (text, clipart, templates, QR),\nardor-rigid-ai.js (AI design), ardor-rigid3d.js (3D view) and ardor-rigid-pdf.js (proof and print PDFs). */\n(function () {\n  'use strict';\n  var root = document.querySelector('[data-abb-root]');\n  if (!root || root.__abb) return;\n  root.__abb = true;\n\n  var $ = function (s, el) { return (el || root).querySelector(s); };\n  var $$ = function (s, el) { return Array.prototype.slice.call((el || root).querySelectorAll(s)); };\n  var CONF = {};\n  try { CONF = JSON.parse($('[data-abb-config]').textContent); } catch (e) { CONF = {}; }\n  if (!Array.isArray(CONF.variants)) CONF.variants = [];\n  var PHONE = CONF.phone || '(425) 629-0796';\n\n  // ---------- rigid signs and magnets: materials, sizes, options and prices ----------\n  // window.ArdorRigidSpecs (assets/ardor-rigid-specs.js) = the 9 material cards and every supplier option group of the 11\n  // supplier items in their wording and order (Acrylic = one card, its 3 supplier items picked in \"Finish\").\n  // Prices: window.ArdorRigidQuote (assets/ardor-rigid-quote.js = rigid/core/tools/rigidquote.js) over rsPrice()\n  // (assets/ardor-rigid-price.js + -price-data.js): coroplast that fits a yard sign size (either way round) is priced and\n  // sold as the cheapest yard size that holds it (the yard sign designer's pack variants and H-stake product, live prices\n  // from the section config); pickup is priced without shipping (magnets and aluminum signs: one price) on the pickup-only\n  // price product; an order never costs more than a bigger size or quantity of the same sign in the same delivery mode.\n  // The cart gets whole-dollar \"ladder\" lines of a hidden price product (the rung at or just above the total, never\n  // below), so the price shown is the price checkout charges. Custom Grommets / Custom Hole Punch: the customer\n  // marks the placement, then sends it as a quote request (no price shown).\n  var SPECS = window.ArdorRigidSpecs || { cards: [], mats: {}, yard: { sizes: [], packs: [] } };\n  var PD = window.ArdorRigidPriceData || null;\n  var PRICE = window.ArdorRigidPrice || null;\n  var MATS = SPECS.mats || {};\n  function matOk(k) { return !!(MATS[k] && PD && PD.materials && PD.materials[k]); }\n  var CARDS = (SPECS.cards || []).filter(function (cd) { return cd && cd.mats && cd.mats.some(matOk); });\n  var MAX_FILE = 25 * 1024 * 1024;\n  var PICKUP = CONF.pickup || '12531 Old Snohomish Monroe Rd., Snohomish, WA 98290';\n  var SAFE = 0.25; // inches inside the sign edge for the dashed red safe line (supplier: keep text 0.25 in from the edge)\n  var MAX_QTY = 200; // signs in one online order (coroplast 400); set by cfg() for the material shown\n  var YARD = CONF.yard || null; // the yard sign designer's pack variants and H-stake (sections/ardor-rigid-builder-ws-kit.liquid)\n  function num(v, d) { var n = parseFloat(v); return isFinite(n) ? n : d; }\n  function clamp(v, a, b) { return Math.max(a, Math.min(b, v)); }\n  function r2(n) { return Math.round(n * 100) / 100; }\n  // inches typed or linked: kept to 1/1000 in (1/8 = 0.125 exactly), rounded up, so a price is never for a smaller sign\n  function rIn(n) { return Math.ceil(n * 1000 - 1e-6) / 1000; }\n  function normMat(s) { s = String(s || '').trim().toUpperCase(); if (s === 'ACR' || s === 'ACRYLIC') s = 'AFW'; return matOk(s) ? s : ''; }\n  function cardOf(mat) { for (var i = 0; i < CARDS.length; i++) if (CARDS[i].mats.indexOf(mat) >= 0) return CARDS[i]; return CARDS[0] || { id: '', name: '', mats: [] }; }\n  function cardById(id) { for (var i = 0; i < CARDS.length; i++) if (CARDS[i].id === id) return CARDS[i]; return null; }\n  function firstMat(card) { return (card && card.mats.filter(matOk)[0]) || ''; }\n  function defaultMat() { var d = normMat(CONF.defaultMat || 'COR'); return d || firstMat(CARDS[0]); }\n  function realVals(g) { return (g.values || []).filter(function (v) { return !v.hdr; }); }\n  function valOf(g, v) { var o = null; realVals(g).forEach(function (x) { if (x.v === v) o = x; }); return o; }\n  function groupOf(m, role) { return m.groups.filter(function (g) { return g.role === role; })[0] || null; }\n  // a size from text: \"24x18\", \"24 x 18\", 24\" x 18\" (width x height)\n  function parseWH(t) { var m = /(\\d+(?:\\.\\d+)?)\\s*\"?\\s*(?:in)?\\s*[x\u00D7]\\s*(\\d+(?:\\.\\d+)?)/i.exec(String(t || '')); return m ? [+m[1], +m[2]] : null; }\n  function sizeId(w, h) { return fmt(w) + 'x' + fmt(h); }\n  // the size value of a material that is exactly w x h (a fixed size), else ''\n  function fixedFor(m, w, h) { var hit = ''; realVals(m.size).forEach(function (v) { if (!hit && !v.custom && Math.abs(v.w - w) < 1e-6 && Math.abs(v.h - h) < 1e-6) hit = v.v; }); return hit; }\n  function customVal(m) { var c = realVals(m.size).filter(function (v) { return v.custom; })[0]; return c ? c.v : ''; }\n  // ---- size limits (the same test as rsPrice): minimum 6 x 6; shipped up to the supplier's ship limit (long x short);\n  // above it, pickup only up to our in-house maximum (none for magnets and aluminum signs)\n  function sizeCheck(mat, w, h) {\n    var pm = PD && PD.materials[mat]; if (!pm) return { ok: false, msg: 'This material is not available right now.' };\n    if (!(w > 0) || !(h > 0)) return { ok: false, msg: 'Type the width and the height in inches.' };\n    if (w < pm.min.w - 1e-9 || h < pm.min.h - 1e-9) return { ok: false, small: true, msg: 'The smallest size is ' + fmt(pm.min.w) + ' x ' + fmt(pm.min.h) + ' in.' };\n    var L = Math.max(w, h), S2 = Math.min(w, h);\n    if (L <= pm.shipMax.long + 1e-9 && S2 <= pm.shipMax.short + 1e-9) return { ok: true, pickup: false };\n    var pk = (pm.pickupMax || []).filter(function (p) { return L <= p.long + 1e-9 && S2 <= p.short + 1e-9; })[0];\n    if (pk) return { ok: true, pickup: true };\n    var biggest = (pm.pickupMax || []).slice(-1)[0];\n    return { ok: false, big: true, msg: 'The largest ' + (MATS[mat] ? MATS[mat].short : 'sign') + ' we make is ' + (biggest ? fmt(biggest.short) + ' x ' + fmt(biggest.long) + ' in (pickup only)' : fmt(pm.shipMax.short) + ' x ' + fmt(pm.shipMax.long) + ' in') + '.' };\n  }\n  function limitText(mat) {\n    var pm = PD && PD.materials[mat]; if (!pm) return '';\n    var t = 'From ' + fmt(pm.min.w) + ' x ' + fmt(pm.min.h) + ' in up to ' + fmt(pm.shipMax.long) + ' x ' + fmt(pm.shipMax.short) + ' in shipped (either way)';\n    var pk = (pm.pickupMax || []).filter(function (p) { return !(p.long <= pm.shipMax.long && p.short <= pm.shipMax.short); });\n    if (pk.length) t += '; up to ' + pk.map(function (p) { return fmt(p.short) + ' x ' + fmt(p.long); }).join(' / ') + ' in printed in our shop, pickup only';\n    return t + '. Decimals are fine, to 1/8 in (for example 23.5 or 22.125).';\n  }\n  // ---- the yard sign designer's packs (coroplast at the 6 yard sign sizes): its variants (size, sides, pack) and H-stake\n  var YV = {}, YPACKS = [], YLIVE = false;\n  (YARD && YARD.variants || []).forEach(function (v) {\n    var d = parseWH(v && v.s), sd = parseInt(String((v && v.d) || ''), 10), n = parseInt(String((v && v.p) || ''), 10);\n    if (!d || !(sd === 1 || sd === 2) || !(n >= 1)) return;\n    var cents = Math.round(Number(v.c));\n    YV[sizeId(d[0], d[1]) + '|' + sd + '|' + n] = { id: v.id || null, cents: isFinite(cents) && cents > 0 ? cents : 0, available: v.a !== false };\n    if (YPACKS.indexOf(n) < 0) YPACKS.push(n);\n    YLIVE = true;\n  });\n  YPACKS.sort(function (a, b) { return a - b; });\n  var YSTAKE = YARD && YARD.stake && YARD.stake.id ? { id: YARD.stake.id, cents: Math.round(Number(YARD.stake.price)) || 0, available: YARD.stake.available !== false } : null;\n  // the quote (rules above): one instance for the page, its results cached by the order\n  var QUOTE = (function () {\n    if (!window.ArdorRigidQuote || !PRICE || !PD) return null;\n    var vs = []; Object.keys(YV).forEach(function (k) { var a = k.split('|'), d = parseWH(a[0]); if (d) vs.push({ w: d[0], h: d[1], sides: +a[1], pack: +a[2], id: YV[k].id, cents: YV[k].cents, available: YV[k].available }); });\n    try { return window.ArdorRigidQuote.create({ data: PD, rsPrice: PRICE.rsPrice, yard: YLIVE ? { sizes: (SPECS.yard && SPECS.yard.sizes) || [], variants: vs, stake: YSTAKE } : null, maxQty: { COR: (MATS.COR && MATS.COR.maxQty) || 400, 'default': 200 } }); } catch (e) { return null; }\n  })();\n  function isYardSize(w, h) { return (SPECS.yard && SPECS.yard.sizes || []).indexOf(sizeId(w, h)) >= 0; }\n  function yardFor(w, h, sides, pack) { return YV[sizeId(w, h) + '|' + sides + '|' + pack] || null; }\n  function yardPacks(w, h, sides) { return YPACKS.filter(function (n) { var v = yardFor(w, h, sides, n); return v && v.cents > 0; }); }\n  // ---- the price ladder: whole-dollar rungs $1..$1000, then each rung = floor(previous x 1.005) up to 2048 rungs (the two\n  // hidden price products custom-rigid-sign-price / custom-rigid-sign-pickup-price; variant ids in assets/ardor-rigid-ladder.json)\n  var RUNGS = (function () { var r = [], i; for (i = 1; i <= 1000; i++) r.push(i); while (r.length < 2048) r.push(Math.floor(r[r.length - 1] * 1005 / 1000)); return r; })();\n  var TOP = RUNGS[RUNGS.length - 1];\n  function rungAt(x) { var lo = 0, hi = RUNGS.length - 1; if (x > TOP) return -1; while (lo < hi) { var mid = (lo + hi) >> 1; if (RUNGS[mid] >= x - 1e-9) hi = mid; else lo = mid + 1; } return lo; }\n  // a total in dollars -> ladder lines [{i, price, qty}] (round UP only); totals above the top rung = top-rung lines + a rest\n  function ladder(total) {\n    total = r2(total); if (!(total > 0)) return [];\n    if (total <= TOP) { var i = rungAt(total); return [{ i: i, price: RUNGS[i], qty: 1 }]; }\n    var n = Math.floor(total / TOP), rest = r2(total - n * TOP), out = [{ i: RUNGS.length - 1, price: TOP, qty: n }];\n    if (rest > 0) { var j = rungAt(rest); out.push({ i: j, price: RUNGS[j], qty: 1 }); }\n    return out;\n  }\n  function ladderSum(lines) { return lines.reduce(function (t, l) { return t + l.price * l.qty; }, 0); }\n  var LADDER = null, ladderP = null;\n  function loadLadder() {\n    if (LADDER) return Promise.resolve(LADDER);\n    if (!ladderP) ladderP = fetch(CONF.ladderUrl, { credentials: 'same-origin' }).then(function (r) { if (!r.ok) throw new Error('ladder'); return r.json(); }).then(function (j) {\n      if (!j || !j.rungs || j.rungs.length !== RUNGS.length || j.rungs.some(function (p, k) { return p !== RUNGS[k]; })) throw new Error('ladder rungs');\n      LADDER = j; return j;\n    }).catch(function (e) { ladderP = null; throw e; });\n    return ladderP;\n  }\n\n  // ---- the picked value of every supplier option group, made valid (unknown value -> the supplier's default)\n  function resolveSel(m, want) {\n    var sel = {};\n    m.groups.forEach(function (g) {\n      var w = want && want[g.id] != null ? String(want[g.id]) : null;\n      var pick = w != null ? valOf(g, w) : null;\n      sel[g.id] = (pick || valOf(g, g.dflt) || realVals(g)[0]).v;\n    });\n    return sel;\n  }\n  // the hole, grommet or standoff centres of a value's preset positions (TL TR BL BR TC BC) on a w x h sign, inches\n  function holePts(hd, w, h) {\n    var i = hd.inset, out = [];\n    String(hd.pos || '').split(';').forEach(function (p) {\n      var xy = { TL: [i, i], TR: [w - i, i], BL: [i, h - i], BR: [w - i, h - i], TC: [w / 2, i], BC: [w / 2, h - i] }[p];\n      if (xy) out.push([xy[0], xy[1], hd.dia, hd.kind]);\n    });\n    return out;\n  }\n  // Custom Grommets / Custom Hole Punch: the placement the customer marks (like the supplier's dialog): top edge corner\n  // grommets (holes) with an edge margin and/or a center one; bottom edge \"Same as Top\", corners with a margin, or none,\n  // plus a center one\n  var CH = { top: 'corners', topM: 1, topC: false, bot: 'same', botM: 1, botC: false };\n  function customPts(kind, w, h) {\n    var dia = kind === 'grommet' ? 0.375 : 0.25, out = [];\n    var tm = clamp(num(CH.topM, 1), 0.25, Math.min(w, h) / 2), bm = clamp(num(CH.botM, 1), 0.25, Math.min(w, h) / 2);\n    var top = CH.top === 'corners', topC = !!CH.topC;\n    if (top) { out.push([tm, tm, dia, kind]); out.push([w - tm, tm, dia, kind]); }\n    if (topC) out.push([w / 2, top ? tm : 1, dia, kind]);\n    var botCorners = CH.bot === 'same' ? top : CH.bot === 'corners', botCenter = CH.bot === 'same' ? topC : !!CH.botC, bmm = CH.bot === 'same' ? tm : bm;\n    if (botCorners) { out.push([bmm, h - bmm, dia, kind]); out.push([w - bmm, h - bmm, dia, kind]); }\n    if (botCenter) out.push([w / 2, h - (botCorners ? bmm : 1), dia, kind]);\n    return out;\n  }\n  function customText(kind) {\n    var n = kind === 'grommet' ? 'grommets' : 'holes';\n    var t = 'Top: ' + (CH.top === 'corners' ? 'corner ' + n + ', ' + fmt(num(CH.topM, 1)) + ' in from the edges' : 'no corner ' + n) + (CH.topC ? ', plus one in the center' : '');\n    var b = CH.bot === 'same' ? 'same as top' : (CH.bot === 'corners' ? 'corner ' + n + ', ' + fmt(num(CH.botM, 1)) + ' in from the edges' : 'no corner ' + n) + (CH.bot !== 'same' && CH.botC ? ', plus one in the center' : '');\n    return t + '. Bottom: ' + b + '.';\n  }\n\n  var S = { mat: '', size: '', cw: 24, ch: 18, sel: {}, pack: 1, qty: 1, delivery: 'ship', deliveryPick: 'ship', piece: 'sign', face: 'front', back: false, backMode: 'same', rBackMode: 'same', artVer: 0 };\n  var ART = { front: null, back: null };\n  var FOCUS_CW = false; // Custom Size opened from a link: put the cursor in the width box once it shows\n  var eng = null;\n  // the first order shown: ?variant=<id> (Google Shopping: the designer product's material / size / sides), ?mat= / ?w= / ?h=\n  // (links, the AI page), else the section's default material at its supplier default size. ?preset= and the AI hand-off\n  // run after this, so they still win.\n  (function () {\n    var qs = null; try { qs = new URLSearchParams(window.location.search); } catch (e) { qs = null; }\n    var mat = defaultMat(), w = 0, h = 0, sides = 0, cust = false;\n    var vid = qs ? String(qs.get('variant') || '').trim() : '';\n    if (qs && (qs.get('preset') || qs.get('ai'))) vid = '';\n    if (/^\\d+$/.test(vid)) {\n      var v = null; (CONF.variants || []).concat(CONF.sofa ? [CONF.sofa] : []).forEach(function (x) { if (!v && x && String(x.id) === vid) v = x; });\n      var o = v ? fromVariant(v) : null;\n      if (o) { mat = o.mat; w = o.w; h = o.h; sides = o.sides; cust = !!o.custom; }\n    }\n    var qm = qs ? normMat(qs.get('mat') || '') : '';\n    if (qm) { mat = qm; w = 0; h = 0; cust = false; }\n    if (qs && qs.get('w') && qs.get('h')) { w = rIn(num(qs.get('w'), 0)); h = rIn(num(qs.get('h'), 0)); cust = false; }\n    S.mat = mat;\n    setSizeState(mat, w, h);\n    var cv0 = cust ? customVal(MATS[mat]) : '';\n    if (cv0) { S.size = cv0; S.cw = w; S.ch = h; FOCUS_CW = true; }\n    if (sides === 2) { var sg = groupOf(MATS[mat], 'sides'); if (sg && valOf(sg, '2')) S.sel[sg.id] = '2'; }\n  })();\n  // a size for a material: its fixed size value when w x h is one, else Custom Size with these inches; invalid -> default\n  function setSizeState(mat, w, h) {\n    var m = MATS[mat]; if (!m) return;\n    if (w > 0 && h > 0 && sizeCheck(mat, w, h).ok) {\n      var fx = fixedFor(m, w, h);\n      if (fx) { S.size = fx; S.cw = w; S.ch = h; return; }\n      var cv = customVal(m);\n      if (cv) { S.size = cv; S.cw = w; S.ch = h; return; }\n    }\n    S.size = m.size.dflt;\n    var d = valOf(m.size, S.size); if (d && !d.custom) { S.cw = d.w; S.ch = d.h; }\n  }\n  // the material, size and sides of a designer-product variant: SKU RS-<MAT>-<W>x<H>-<1S|2S>, else its option values\n  // (Material / Size / Sides)\n  function fromVariant(v) {\n    // SKU RS-<MAT>-<W>x<H>[-PU]-<N>S or RS-<MAT>-CUSTOM-<N>S (rigid/products/SKU-SCHEME.md); Custom Size opens at the\n    // smallest size (6 x 6), the size its variant price is for\n    var k = String(v.k || '').toUpperCase(), m = /^RS-([A-Z]{3})-(?:(CUSTOM)|(\\d+(?:\\.\\d+)?)X(\\d+(?:\\.\\d+)?)(?:-PU)?)-([12])S$/.exec(k);\n    if (m && normMat(m[1])) { var mm0 = normMat(m[1]), pm0 = PD.materials[mm0]; return { mat: mm0, w: m[2] ? pm0.min.w : +m[3], h: m[2] ? pm0.min.h : +m[4], sides: +m[5], custom: !!m[2] }; }\n    var t = [v.o1, v.o2, v.o3].map(function (x) { return String(x == null ? '' : x); }).join(' | ');\n    var mat = '';\n    Object.keys(MATS).forEach(function (key) { var mm = MATS[key], nm = (mm.finish ? 'Acrylic ' + mm.finish : mm.name).toLowerCase(); if (!mat && (t.toLowerCase().indexOf(mm.name.toLowerCase()) >= 0 || t.toLowerCase().indexOf(nm) >= 0)) mat = key; });\n    var d = parseWH(t);\n    if (!mat) return null;\n    return { mat: mat, w: d ? d[0] : 0, h: d ? d[1] : 0, sides: /2 sides|double/i.test(t) ? 2 : 1 };\n  }\n\n  // c.Wi x c.Hi = the sign (width x height, inches, no bleed). c.sel = the picked value of every supplier option group,\n  // c.opts = the same with the supplier's keys for rsPrice(). c.qty = signs (or yard sign packs when c.yard).\n  function cfg(over) {\n    var s = Object.assign({}, S, over || {});\n    var mat = normMat(s.mat) || defaultMat(), m = MATS[mat] || { size: { values: [], dflt: '' }, groups: [], sides: ['1'] }, card = cardOf(mat);\n    var sv = valOf(m.size, s.size) || valOf(m.size, m.size.dflt) || { v: '', custom: true };\n    var custom = !!sv.custom;\n    var w = custom ? rIn(num(s.cw, 24)) : sv.w, h = custom ? rIn(num(s.ch, 18)) : sv.h;\n    var sel = resolveSel(m, s.sel || {}), opts = {};\n    m.groups.forEach(function (g) { opts[g.id] = sel[g.id]; });\n    var sg = groupOf(m, 'sides'), sidesV = sg ? valOf(sg, sel[sg.id]) : null, sides = sidesV && sidesV.faces === 2 ? 2 : 1;\n    var hg = groupOf(m, 'holes'), hv = hg ? valOf(hg, sel[hg.id]) : null, hd = hv && hv.holes ? hv.holes : null;\n    var cg = groupOf(m, 'corners'), cv = cg ? valOf(cg, sel[cg.id]) : null, corner = cv ? +cv.r || 0 : 0;\n    var stg = groupOf(m, 'stake'), stv = stg ? valOf(stg, sel[stg.id]) : null, stake = !!(stv && stv.stake);\n    var mg = groupOf(m, 'material'), mv = mg ? valOf(mg, sel[mg.id]) : null;\n    var lim = sizeCheck(mat, w, h);\n    var flutes = m.flutes ? (w > 48 + 1e-9 ? 'horizontal' : 'vertical') : null;\n    // H-stakes go into vertical flutes at the bottom edge: not on our in-house pickup sheets (horizontal flutes / too big)\n    if (stake && lim.ok && lim.pickup) { stake = false; sel[stg.id] = stg.dflt; opts[stg.id] = stg.dflt; }\n    var customHoles = hd && hd.custom ? hd.custom : '';\n    var holes = customHoles ? customPts(customHoles, w, h) : (hd ? holePts(hd, w, h) : []);\n    // coroplast that fits a yard sign size is sold as the cheapest yard size that holds it (its packs)\n    var yc = QUOTE && YLIVE && mat === 'COR' && lim.ok && !lim.pickup ? QUOTE.cap('COR', w, h, sides, Math.max(1, Math.round(+s.pack) || 1)) : null;\n    var yard = !!(yc && yc.packs.length);\n    var packs = yard ? yc.packs : [1];\n    var pack = yard ? yc.pack : 1;\n    var maxSigns = m.maxQty || 200;\n    MAX_QTY = yard ? Math.max(1, Math.floor(maxSigns / pack)) : maxSigns;\n    var qty = Math.max(1, Math.min(MAX_QTY, Math.round(Number(s.qty)) || 1));\n    var thick = mv && mv.thick ? mv.thick : m.thick;\n    var c = { mat: mat, m: m, card: card, cardId: card.id, famId: card.id, fam: { id: card.id, name: card.name, short: m.short, groups: m.groups },\n      sizeVal: sv.v, custom: custom, w: w, h: h, Wi: w, Hi: h, W: w / 12, H: h / 12, key: mat + '-' + sizeId(w, h),\n      sel: sel, opts: opts, sides: sides, holeVal: hv, holeDef: hd, holes: holes, customHoles: customHoles, corner: corner,\n      stake: stake, stakeVal: stv, flutes: flutes, matVal: mv, thick: thick, core: mv && mv.core ? mv.core : '',\n      ok: lim.ok, sizeMsg: lim.msg || '', pickupOnly: !!(lim.ok && lim.pickup), yard: yard, pack: pack, packs: packs, qty: qty,\n      yardW: yard ? yc.w : 0, yardH: yard ? yc.h : 0, capped: yard && (Math.abs(yc.w - w) > 1e-9 || Math.abs(yc.h - h) > 1e-9),\n      signs: qty * pack, maxQty: MAX_QTY, maxSigns: maxSigns,\n      // delivery always follows the size: sizes printed in our shop are pickup only; else the customer's own pick\n      delivery: lim.ok && lim.pickup ? 'pickup' : (s.deliveryPick === 'pickup' ? 'pickup' : 'ship'), artVer: s.artVer };\n    c.geo = geoFor(c, false);\n    c.sign = { piece: 'sign', sides: sides, geo: c.geo, Wi: w, Hi: h };\n    c.rider = null; c.rsides = 0; c.riderSize = '';\n    c.piece = 'sign'; c.pieceSides = sides;\n    c.bm = { sign: s.backMode === 'different' ? 'different' : 'same', rider: 'same' };\n    c.backMode = c.bm.sign;\n    if (!over) S.delivery = c.delivery; // API.state.delivery = what the page shows (picker, size edits, links, AI hand-off)\n    return c;\n  }\n\n  // ---------- the sign geometry (inches from the top-left, y down) ----------\n  // No bleed (the supplier wants the artwork at the ordered size, no bleed, no crop marks): page = visible area = the sign.\n  // The dashed red safe line is 0.25 in inside the edge; holes, grommets and standoffs sit where the option puts them\n  // (hole insets the supplier does not publish are ours: 0.5 in to the centre); round corners are cut on the press.\n  var GEO = {};\n  function geoFor(c, back) {\n    var id = [c.w, c.h, c.corner, c.flutes || '', c.holes.map(function (x) { return x.join(','); }).join(';'), back ? 'b' : 'f'].join('|');\n    if (GEO[id]) return GEO[id];\n    var W = c.w, H = c.h;\n    var holes = c.holes.map(function (x) { return [back ? W - x[0] : x[0], x[1], x[2], x[3]]; });\n    var g = { W: W, H: H, bleed: 0, piece: 'sign', rider: '', placeholder: false, faces: c.sides,\n      vis: { x: 0, y: 0, w: W, h: H }, hidden: [], corner: Math.min(c.corner, W / 2, H / 2),\n      keep: holes.map(function (x) { var r = x[2] / 2 + 0.2; return { x: x[0] - r, y: x[1] - r, w: 2 * r, h: 2 * r, why: 'Hole' }; }),\n      holes: holes.map(function (x) { return [x[0], x[1], x[2]]; }), holeList: holes,\n      holeKind: holes.length ? holes[0][3] : 'hole', flutes: c.flutes, material: c.m.name || '',\n      trim: { x: 0, y: 0, w: W, h: H }, grommets: [], pockets: [] };\n    g.safeR = { x: SAFE, y: SAFE, w: Math.max(1, W - 2 * SAFE), h: Math.max(1, H - 2 * SAFE) };\n    g.safeIn = SAFE;\n    g.cut = rectPts(g.trim); g.cutPoly = false;\n    g.safe = [rectPts(g.safeR)];\n    g.face = [0, 0, W, H];\n    g.bx = 0; g.by = 0; g.bw = W; g.bh = H;\n    return (GEO[id] = g);\n  }\n  function rectPts(r) { return [[r.x, r.y], [r.x + r.w, r.y], [r.x + r.w, r.y + r.h], [r.x, r.y + r.h]]; }\n  // face ids: 'front' and 'back' (rigid signs have one piece). A '-flat' end is accepted and ignored.\n  var FACES = ['front', 'back'];\n  function pieceOf() { return 'sign'; }\n  function isBack(f) { return /back/.test(String(f || '')); }\n  function fid(piece, side) { return side === 'back' ? 'back' : 'front'; }\n  function normFace(f) { f = String(f || '').replace(/-flat$/, ''); return FACES.indexOf(f) >= 0 ? f : 'front'; }\n  function faceGeo(c, face) { return geoFor(c, isBack(face) && c.sides === 2); }\n  // the faces that get their own print file: the front, and the back when it has its own art\n  function printedFaces(c) { var out = ['front']; if (c.sides === 2 && c.bm.sign === 'different') out.push('back'); return out; }\n\n  // ---------- price ----------\n  // { ok, quote (why the order is a quote request), exact (the quote's exact total), charged (= the cart lines, what\n  // checkout charges), each, unit, lines (cart lines: yard / stake / grommet / ladder; ladder lines say which price\n  // product: shipped or pickup), mode ('ship' | 'pickup' price), ladder, basis (the bigger size / quantity it was priced\n  // as, or the yard size), q (the full quote) }\n  function price(c) {\n    var p = { ok: false, quote: '', exact: 0, charged: 0, each: 0, unit: 0, lines: [], r: null, vid: null, disc: 0, mode: 'ship', ladder: 'shipped', basis: null, yard: null, q: null };\n    if (!c.ok) { p.quote = 'size'; return p; }\n    if (c.customHoles) p.quote = 'custom-holes';\n    var q = null;\n    try { q = QUOTE ? QUOTE.quote({ mat: c.mat, w: c.w, h: c.h, opts: c.opts, qty: c.qty, pack: c.pack, delivery: c.delivery }) : null; } catch (e) { q = null; }\n    if (!q || !q.ok) { p.quote = p.quote || (q && q.reason === 'size' ? 'size' : 'price'); return p; }\n    p.q = q; p.exact = q.exact; p.charged = q.charged; p.mode = q.mode; p.ladder = q.ladder; p.basis = q.basis; p.yard = q.kind === 'yard' ? q.yard : null;\n    p.lines = q.lines.map(function (l) { return { kind: l.kind, id: l.id, rung: l.rung, qty: l.qty, price: l.price, exact: l.exact, available: l.available, pickup: l.ladder === 'pickup' }; });\n    p.vid = p.yard ? p.yard.id : null;\n    p.each = p.yard ? p.yard.cents / 100 : r2(p.charged / c.qty); p.unit = r2(p.charged / c.signs); p.ok = !p.quote;\n    return p;\n  }\n  // the price of the order with one group's value changed, or one size (0 = not possible / a quote)\n  function priceWith(c, g, v) { var want = Object.assign({}, c.sel); want[g.id] = v.v; var p = price(cfg({ sel: want })); return p.ok ? Math.round(p.charged * 100) : 0; }\n  function priceForSize(c, sv) {\n    var o = { size: sv.v }; if (!sv.custom) { o.cw = sv.w; o.ch = sv.h; }\n    else if (!c.custom && PD && PD.materials[c.mat]) { o.cw = PD.materials[c.mat].min.w; o.ch = PD.materials[c.mat].min.h; } // Custom Size: from 6 x 6\n    var p = price(cfg(o)); return p.ok ? Math.round(p.charged * 100) : 0;\n  }\n  // the lowest price of a material card: one sign of its smallest fixed size (or 6 x 6), default options, shipped\n  function fromCard(card) {\n    var lo = 0;\n    card.mats.filter(matOk).forEach(function (mat) {\n      var m = MATS[mat];\n      realVals(m.size).forEach(function (sv) {\n        if (sv.pickup) return;\n        var o = { mat: mat, size: sv.v, sel: {}, qty: 1, pack: 1, deliveryPick: 'ship' };\n        if (sv.custom) { o.cw = PD.materials[mat].min.w; o.ch = PD.materials[mat].min.h; } else { o.cw = sv.w; o.ch = sv.h; }\n        var p = price(cfg(o)); var x = p.ok ? Math.round(p.charged * 100) : 0;\n        if (x > 0 && (!lo || x < lo)) lo = x;\n      });\n    });\n    return lo;\n  }\n  var FROM = {};\n  function cardFrom(card) { if (FROM[card.id] == null) FROM[card.id] = fromCard(card); return FROM[card.id]; }\n\n  function money(n) { return '$' + n.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','); }\n  function fmt(n) { var r = Math.round(n * 1000) / 1000; return Math.abs(r - Math.round(r)) < 0.0005 ? String(Math.round(r)) : String(r); }\n\n  // ---------- labels ----------\n  function inchTxt(n) { return fmt(Math.round(n * 1000) / 1000); }\n  function sizeTxt(w, h) { return inchTxt(w) + ' x ' + inchTxt(h) + ' in'; }\n  function sizeName(c) { return sizeTxt(c.w, c.h); }\n  function tplTxt(c) { return fmt(c.Wi) + ' x ' + fmt(c.Hi) + ' in'; }\n  // the supplier wording of the value picked in a group with this role ('' = none)\n  function selLabel(c, role) { var g = groupOf(c.m, role), v = g ? valOf(g, c.sel[g.id]) : null; return v ? v.label : ''; }\n  function productLabel(c) { return c.m.finish ? 'Acrylic, ' + c.m.finish : c.m.name; }\n  function standLabel(c) { return productLabel(c); }\n  function sizeLabel(c) { return sizeName(c) + ' (width x height)' + (c.custom ? ', custom size' : ''); }\n  function pieceSizeLabel(c) { return sizeLabel(c); }\n  function sidesLabel(c) { return c.sides === 2 ? '2 Sides (front and back)' : '1 Side'; }\n  // Material row: the card, and for acrylic its supplier item; Finish/Thickness row: the material value(s) and the print\n  function matLabel(c) { return c.m.finish ? 'Clear Acrylic - ' + c.m.finish : c.m.name; }\n  function finishLabel(c) {\n    var parts = [];\n    c.m.groups.forEach(function (g) { if (g.id === 'material' || g.id === 'print' || g.id === 'lamination') { var v = valOf(g, c.sel[g.id]); if (v) parts.push(v.label); } });\n    if (c.m.finish) parts.unshift('1/4\" clear acrylic, ' + c.m.finish.toLowerCase());\n    return parts.join(', ');\n  }\n  function holesLabel(c) {\n    var g = groupOf(c.m, 'holes'); if (!g) return '';\n    var v = valOf(g, c.sel[g.id]); if (!v) return '';\n    return v.label + (c.customHoles ? ' (' + customText(c.customHoles) + ')' : '');\n  }\n  function cornersLabel(c) { var g = groupOf(c.m, 'corners'); if (!g) return ''; var v = valOf(g, c.sel[g.id]); return v ? (v.r > 0 ? v.label + ' round corners' : 'Square corners (None)') : ''; }\n  function stakeLabel(c) {\n    var g = groupOf(c.m, 'stake'); if (!g) return '';\n    if (!c.stake) return 'No';\n    return c.yard ? 'Yes, ' + c.signs + ' wire H-stake' + (c.signs === 1 ? '' : 's') + ', one per sign (10 x 30 in steel)' : 'Yes, one 10 x 30 in steel H-stake per sign';\n  }\n  // every supplier option group shown for this material, in their order and wording (written on the order as \"Options\")\n  function optLines(c) {\n    var out = [['Size', c.sizeVal && !c.custom ? (valOf(c.m.size, c.sizeVal) || {}).label || sizeName(c) : 'Custom (' + sizeName(c) + ')']];\n    c.m.groups.forEach(function (g) { var v = valOf(g, c.sel[g.id]); if (v) out.push([g.label || 'Option', v.label]); });\n    return out;\n  }\n  function optText(c) { return optLines(c).map(function (l) { return l[0] + ': ' + l[1]; }).join('; '); }\n  function qtyNoun(c, n) { return c.pack > 1 ? (n === 1 ? 'pack' : 'packs') : (n === 1 ? 'sign' : 'signs'); }\n  function qtyLabel(n, c) { c = c || cfg(); var noun = c.mat === 'MAG' ? (n === 1 ? 'magnet' : 'magnets') : qtyNoun(c, n); return n + ' ' + noun + (c.pack > 1 ? ' of ' + c.pack + ' (' + (n * c.pack) + ' signs)' : ''); }\n  function deliveryLabel(c) { return c.pickupOnly ? 'Pickup only at our Snohomish shop (printed in our shop, free pickup)' : (c.delivery === 'pickup' ? 'Pick up at our Snohomish shop (free)' : 'Free shipping anywhere in the US'); }\n  function faceName(f) { return normFace(f) === 'back' ? 'Back' : 'Front'; }\n  function frontLabel(c) { return c.sides === 2 && c.bm.sign !== 'different' ? 'Front (same art on the back)' : (c.sides === 2 ? 'Front' : 'Sign'); }\n  function proofFaceLabel(c, f) { return f === 'back' ? 'Back (as seen from the back)' : frontLabel(c); }\n\n  // ---------- option buttons ----------\n  function optBtn(opts) {\n    var b = document.createElement('button');\n    b.type = 'button';\n    b.className = 'abb-opt' + (opts.chip ? ' abb-opt--chip' : '');\n    b.setAttribute('aria-pressed', opts.on ? 'true' : 'false');\n    if (opts.data) b.setAttribute('data-' + opts.data[0], String(opts.data[1]));\n    if (opts.disabled) b.disabled = true;\n    if (opts.html) b.innerHTML = opts.html; else b.textContent = opts.label;\n    b.addEventListener('click', opts.pick);\n    return b;\n  }\n  function fill(el, nodes) {\n    if (!el) return;\n    var ae = document.activeElement, idx = -1;\n    if (ae && el.contains(ae)) idx = Array.prototype.indexOf.call(el.children, ae);\n    el.textContent = '';\n    nodes.forEach(function (n) { el.appendChild(n); });\n    if (idx >= 0 && el.children[idx]) { try { el.children[idx].focus({ preventScroll: true }); } catch (e) {} }\n  }\n  function esc(t) { return String(t).replace(/[&<>\"]/g, function (ch) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[ch]; }); }\n  function set(patch) { Object.assign(S, patch); render(); }\n  function setText(sel, t) { var el = $(sel); if (el) el.textContent = t; }\n\n  // a new size: keep the art, but fit it to the new sign (Fill for pictures, Fit for files)\n  function resetArt() {\n    FACES.forEach(function (f) { var a = ART[f]; if (a) { a.mode = a.kind === 'image' ? 'fill' : 'fit'; a.rcx = 0.5; a.rcy = 0.5; } });\n  }\n  // after a material or size change the 3D view goes back to its angled home view (the back when the back is showing)\n  function viewFor() { return S.back ? 'back' : 'home'; }\n  // after a change: a back needs a 2-sided sign\n  function fixFace() {\n    var c = cfg();\n    S.piece = 'sign';\n    if (S.face === 'back' && c.sides !== 2) { S.face = 'front'; S.back = false; }\n  }\n  function changedView() { try { document.dispatchEvent(new CustomEvent('ardor:rigid-view')); } catch (e) {} }\n  // the size changed (material, size pick, custom inches): the art is fitted again, the 2D view is reset\n  function sizeMoved(c0, c1) {\n    if (Math.abs(c0.w - c1.w) < 1e-9 && Math.abs(c0.h - c1.h) < 1e-9) return;\n    resetArt(); lay.zoom = 1; lay.cx = 0.5; lay.cy = 0.5;\n  }\n  // a new material card (Acrylic: keeps the finish picked last) at the same size when it fits, else its default size\n  function pickMat(mat) {\n    mat = normMat(mat) || firstMat(cardById(String(mat || '').toUpperCase()));\n    if (!mat) return;\n    var c = cfg(); if (mat === c.mat) return;\n    var keepW = c.w, keepH = c.h;\n    S.mat = mat;\n    var m = MATS[mat];\n    if (sizeCheck(mat, keepW, keepH).ok) setSizeState(mat, keepW, keepH); else { S.size = m.size.dflt; var d = valOf(m.size, S.size); if (d && !d.custom) { S.cw = d.w; S.ch = d.h; } }\n    S.artVer++;\n    var c2 = cfg(); sizeMoved(c, c2);\n    if (c.pickupOnly !== c2.pickupOnly && c2.pickupOnly) toast('This size is printed in our shop: pickup only at our Snohomish shop.');\n    fixFace(); render(); view3d(viewFor()); changedView();\n  }\n  function pickFamily(id) { var cd = cardById(String(id || '').toUpperCase()); if (cd) pickMat(firstMat(cd)); else pickMat(id); }\n  // a size value of the material (a fixed size, Custom Size, or a pickup-only size)\n  function pickSize(v) {\n    var c = cfg(), sv = valOf(c.m.size, v); if (!sv) return;\n    if (sv.v === c.sizeVal && !sv.custom) return;\n    var patch = { size: sv.v, artVer: S.artVer + 1 };\n    if (!sv.custom) { patch.cw = sv.w; patch.ch = sv.h; }\n    // Custom Size starts at the smallest size (6 x 6 in: the price its card and the showcase show), the width ready to type\n    else if (!c.custom && PD && PD.materials[c.mat]) { patch.cw = PD.materials[c.mat].min.w; patch.ch = PD.materials[c.mat].min.h; }\n    Object.assign(S, patch);\n    var c2 = cfg(); sizeMoved(c, c2);\n    if (c2.pickupOnly && !c.pickupOnly) toast('Printed in our shop: pickup only at our Snohomish shop.');\n    if (sv.custom) focusCustom();\n    fixFace(); render(); view3d(viewFor()); changedView();\n  }\n  // custom inches (width x height); a size that is one of the material's fixed sizes picks that size\n  function setCustom(w, h, quiet) {\n    var c = cfg(); w = rIn(num(w, c.w)); h = rIn(num(h, c.h));\n    var fx = fixedFor(c.m, w, h), cv = customVal(c.m);\n    var patch = { cw: w, ch: h, artVer: S.artVer + 1 };\n    if (fx && (!c.custom || !quiet)) patch.size = fx; else if (cv) patch.size = cv;\n    Object.assign(S, patch);\n    var c2 = cfg(); if (c2.ok) sizeMoved(c, c2);\n    if (c2.ok && c2.pickupOnly && !c.pickupOnly) toast('Printed in our shop: pickup only at our Snohomish shop.');\n    fixFace(); render(); if (c2.ok) { view3d(viewFor()); changedView(); }\n  }\n  // the cursor in the custom width box, its number selected (typing replaces it)\n  function focusCustom() { setTimeout(function () { var el = $('[data-abb-cw]'); if (el && el.offsetParent !== null) try { el.focus({ preventScroll: true }); el.select(); } catch (e) {} }, 30); }\n  function pickSign(key) { var d = parseWH(key); if (d) setCustom(d[0], d[1]); }\n  // a supplier option: keep every other pick\n  function pickOpt(gid, v) {\n    var c = cfg(); if (c.sel[gid] === v) return;\n    var sel = Object.assign({}, S.sel, c.sel); sel[gid] = v;\n    var sBefore = c.sides;\n    Object.assign(S, { sel: sel, artVer: S.artVer + 1 });\n    var c2 = cfg();\n    if (sBefore === 2 && c2.sides !== 2) S.backMode = 'same';\n    if (c2.customHoles && !c.customHoles) toast('Mark where you want them on the right, then send it to us for a quote.');\n    if (c.stakeVal !== c2.stakeVal && groupOf(c2.m, 'stake') && sel[groupOf(c2.m, 'stake').id] === '1' && !c2.stake) toast('H-stakes need vertical flutes: not on signs printed in our shop.');\n    fixFace(); render(); view3d(viewFor()); changedView();\n  }\n  // a new yard sign pack keeps about the same number of signs (3 single signs -> 1 pack of 5)\n  function pickPack(q) { q = +q; if (!q || q === S.pack) return; var c = cfg(), signs = c.qty * c.pack; S.pack = q; var mq = cfg().maxQty; set({ qty: Math.max(1, Math.min(mq, Math.ceil(signs / q))) }); }\n  function setQty(n) { var mq = cfg().maxQty; n = Math.max(1, Math.min(mq, Math.round(Number(n)) || 1)); if (n !== S.qty) set({ qty: n }); else render(); }\n  // the back of a 2-sided sign: the same art as its front, or its own\n  function pickBackMode(mode) {\n    var cur = S.backMode;\n    if (mode === cur) { if (mode === 'different' && S.face !== 'back') { S.face = 'back'; S.back = true; render(); view3d('back'); } return; }\n    var patch = { artVer: S.artVer + 1, piece: 'sign', backMode: mode };\n    if (mode === 'different') { patch.face = 'back'; patch.back = true; } else { patch.face = 'front'; patch.back = false; }\n    set(patch);\n    view3d(S.back ? 'back' : 'front');\n  }\n  // show (and edit) a face; false when this order has no such face\n  function goFace(face) {\n    var f = normFace(face), c = cfg();\n    if (isBack(f) && c.sides !== 2) return false;\n    set({ piece: 'sign', face: isBack(f) ? 'back' : 'front', back: isBack(f) });\n    view3d(viewFor());\n    return true;\n  }\n  // make the sign 2-sided where that is a choice (AI design for the back)\n  function setSides(n) { var c = cfg(), g = groupOf(c.m, 'sides'); if (!g) return n === 1; var v = realVals(g).filter(function (x) { return x.faces === n; })[0]; if (!v) return false; if (c.sel[g.id] !== v.v) pickOpt(g.id, v.v); return cfg().sides === n; }\n\n  // ---------- artwork ----------\n  // the art drawn on a face: a back with \"Same as front\" shows its piece's front art\n  function backShown(p) { var c = cfg(), sd = p === 'rider' ? c.rsides : c.sides; return sd === 2 && c.bm[p] === 'different'; }\n  function artFor(face) {\n    var p = pieceOf(face);\n    if (isBack(face) && backShown(p)) return ART[fid(p, 'back')];\n    return ART[fid(p, 'front')];\n  }\n  // v2: text, clipart and logo layers added in the designer (ardor-rigid-layers-kit.js). Same face rule as artFor.\n  function layerFace(face) { var p = pieceOf(face); return isBack(face) && backShown(p) ? fid(p, 'back') : fid(p, 'front'); }\n  function hasLayers(f) { return !!(window.ArdorRigidLayers && window.ArdorRigidLayers.has(normFace(f))); }\n  var LAYER_NOTE = 'Print file made from a flattened image of the artwork plus text and clipart added in the builder.';\n  // Oct 12, 2026 (tpl): the cart refuses any add-to-cart request over 20 MB (\"413 Request Entity Too Large\"), and the\n  // request holds the proof, the print file(s) and the customer's original upload(s). Keep the whole upload under\n  // UPLOAD_BUDGET: print files first (made smaller when needed), then the proof, then the original files while they fit.\n  // Same approach as assets/ardor-aframe-builder-v2-v2.js.\n  var UPLOAD_BUDGET = 18 * 1024 * 1024;\n  function fmtMB(n) { return (n / 1048576).toFixed(1) + ' MB'; }\n  function decodeBlob(file) {\n    if (window.createImageBitmap) return createImageBitmap(file);\n    return new Promise(function (res, rej) {\n      var u = URL.createObjectURL(file), im = new Image();\n      im.onload = function () { res(im); };\n      im.onerror = function () { URL.revokeObjectURL(u); rej(new Error('could not read the print image')); };\n      im.src = u;\n    });\n  }\n  // re-encode a JPEG/PNG smaller (fewer pixels, then lower quality) until it is at most maxBytes\n  function shrinkImage(file, maxBytes) {\n    if (!file || file.size <= maxBytes) return Promise.resolve(file);\n    return decodeBlob(file).then(function (bmp) {\n      var bw = bmp.naturalWidth || bmp.width, bh = bmp.naturalHeight || bmp.height;\n      var scale = Math.min(1, Math.sqrt(maxBytes / file.size) * 0.95), q = 0.9, tries = 0;\n      var attempt = function () {\n        var w = Math.max(1, Math.round(bw * scale)), h = Math.max(1, Math.round(bh * scale));\n        var cv = document.createElement('canvas'); cv.width = w; cv.height = h;\n        var ctx = cv.getContext('2d');\n        if (!ctx) return Promise.reject(new Error('canvas'));\n        ctx.fillStyle = '#FFFFFF'; ctx.fillRect(0, 0, w, h);\n        ctx.imageSmoothingEnabled = true; ctx.imageSmoothingQuality = 'high';\n        ctx.drawImage(bmp, 0, 0, w, h);\n        return new Promise(function (res) { cv.toBlob(res, 'image/jpeg', q); }).then(function (b) {\n          cv.width = cv.height = 1;\n          if (!b) throw new Error('could not make the print image');\n          if (b.size > maxBytes && tries < 5) { tries++; scale *= Math.sqrt(maxBytes / b.size) * 0.95; q = Math.max(0.8, q - 0.03); return attempt(); }\n          if (bmp.close) bmp.close();\n          return new File([b], String(file.name || 'Ardor Rigid Sign Print Art').replace(/\\.[A-Za-z0-9]{1,5}$/, '') + '.jpg', { type: 'image/jpeg' });\n        });\n      };\n      return attempt();\n    });\n  }\n  // the print file for one face again, as one flattened image of at most maxBytes (same path as faces with text or clipart)\n  function smallerPrint(c, face, a, maxBytes, approval) {\n    var P = window.ArdorRigidPDF, LY = window.ArdorRigidLayers, Wi = c.Wi, Hi = c.Hi;\n    if (!P || !P.buildPrint || !LY || !LY.composite) return Promise.reject(new Error('print tools not loaded'));\n    var stamp = (approval && approval.when) || stampLabel(new Date());\n    return LY.composite(face, Wi, Hi, a).then(function (r) { return shrinkImage(r.file, maxBytes - 65536); }).then(function (file) {\n      return P.buildPrint({ title: 'Ardor Rigid Sign Print File', stamp: stamp, W: Wi / 12, H: Hi / 12, holes: [], dotIn: 0.125,\n        faces: [{ art: { file: file, name: file.name, kind: 'image', bg: '#FFFFFF' }, bg: '#FFFFFF', geomFor: function () { return { x: 0, y: 0, w: Wi, h: Hi }; } }] }, false);\n    }).then(function (r) { return r && r.blob; });\n  }\n  function fitUpload(c, files, approval) {\n    var faces = printedFaces(c);\n    var size = function (b) { return b ? b.size : 0; };\n    files.skipArt = {}; files.needEmail = false;\n    var orig = function (f) { return ART[f] && ART[f].file ? ART[f].file : null; };\n    var prints = function () { return faces.reduce(function (t, f) { return t + size(files[f]); }, 0); };\n    var total = function () { return size(files.proof) + prints() + faces.reduce(function (t, f) { return t + (files.skipArt[f] ? 0 : size(orig(f))); }, 0); };\n    if (total() <= UPLOAD_BUDGET) return Promise.resolve(files);\n    // 1. each print file gets an equal share of what the proof leaves\n    var share = Math.max(1572864, Math.floor((UPLOAD_BUDGET - size(files.proof) - 262144) / faces.length));\n    var chain = Promise.resolve();\n    faces.forEach(function (f) {\n      chain = chain.then(function () {\n        var bl = files[f]; if (!bl || bl.size <= share) return null;\n        return smallerPrint(cfg({ piece: pieceOf(f) }), f, ART[f], share, approval).then(function (nb) {\n          if (nb && nb.size < bl.size) {\n            files[f] = nb;\n            files.notes.push('The ' + faceName(f).toLowerCase() + ' print file was made at a lower resolution (' + fmtMB(bl.size) + ' to ' + fmtMB(nb.size) + ') to fit the 20 MB online order upload limit.');\n          }\n        }, function () { return null; });\n      });\n    });\n    return chain.then(function () {\n      // 2. the customer's original files, while they still fit\n      var used = size(files.proof) + prints();\n      faces.forEach(function (f) {\n        var o = orig(f); if (!o) return;\n        if (used + o.size <= UPLOAD_BUDGET) { used += o.size; return; }\n        files.skipArt[f] = true;\n        if (!files[f]) files.needEmail = true;\n        files.notes.push('The customer\\'s original ' + faceName(f).toLowerCase() + ' file (' + (ART[f].name || 'artwork') + ', ' + fmtMB(o.size) + ') was not attached (over the 20 MB online order upload limit).' + (files[f] ? ' The print file has the full design.' : ' The customer was asked to email it.'));\n      });\n      // 3. last resort: a print file that could not be made small enough stays out\n      faces.slice().reverse().forEach(function (f) {\n        if (total() <= UPLOAD_BUDGET || !files[f]) return;\n        files.notes.push('The ' + faceName(f).toLowerCase() + ' print file (' + fmtMB(files[f].size) + ') was too large to attach. Make it from the original artwork.');\n        files[f] = null;\n        if (files.skipArt[f] || !orig(f)) files.needEmail = true;\n      });\n      return files;\n    });\n  }\n  // print job for one sign: with text or clipart, the face is one flattened image (artwork + layers) at the exact sign size\n  function layerJob(mkJob, a, f, Wi, Hi, notes) {\n    if (!hasLayers(f)) return Promise.resolve(mkJob(a));\n    return window.ArdorRigidLayers.composite(f, Wi, Hi, a).then(function (r) {\n      var job = mkJob({ file: r.file, name: r.file.name, kind: 'image', bg: '#FFFFFF' });\n      job.faces[0].geomFor = function () { return { x: 0, y: 0, w: Wi, h: Hi }; };\n      if (notes.indexOf(LAYER_NOTE) < 0) notes.push(LAYER_NOTE);\n      return job;\n    });\n  }\n  function layerSummary(c) {\n    var LY = window.ArdorRigidLayers; if (!LY || !LY.list) return '';\n    var keys = printedFaces(c);\n    return keys.map(function (k) {\n      var items = (LY.list(k) || []).map(function (o) { return o.kind === 'text' ? '\"' + String(o.text || '').replace(/\\s+/g, ' ').trim() + '\"' + (o.font ? ' (' + o.font + ')' : '') : (o.label || o.kind); });\n      return items.length ? (keys.length > 1 ? faceName(k) + ': ' : '') + items.join(', ') : '';\n    }).filter(Boolean).join('; ');\n  }\n\n  // art turned 90 or 270 degrees: its box is as wide as the picture is tall\n  function rot90(a) { return !!a && (a.rot === 90 || a.rot === 270); }\n  function geom(a, Wi, Hi) {\n    var ia = rot90(a) ? a.natH / a.natW : a.natW / a.natH;\n    var fillW = Math.max(Wi, Hi * ia);\n    var fitW = Math.min(Wi, Hi * ia);\n    if (a.mode === 'fill') { a.rw = fillW / Wi; a.rcx = 0.5; a.rcy = 0.5; }\n    else if (a.mode === 'fit') { a.rw = fitW / Wi; a.rcx = 0.5; a.rcy = 0.5; }\n    var w = a.rw * Wi, h = w / ia;\n    return { x: a.rcx * Wi - w / 2, y: a.rcy * Hi - h / 2, w: w, h: h, fillW: fillW, fitW: fitW, rot: a.rot || 0 };\n  }\n  // draw a picture into its placed box g (the box of the art as turned), turned g.rot degrees clockwise\n  function drawRot(ctx, img, g) {\n    if (!g.rot) { ctx.drawImage(img, g.x, g.y, g.w, g.h); return; }\n    var q = g.rot === 90 || g.rot === 270, dw = q ? g.h : g.w, dh = q ? g.w : g.h;\n    ctx.save();\n    ctx.translate(g.x + g.w / 2, g.y + g.h / 2);\n    ctx.rotate(g.rot * Math.PI / 180);\n    ctx.drawImage(img, -dw / 2, -dh / 2, dw, dh);\n    ctx.restore();\n  }\n\n  function paintFace(ctx, Wi, Hi, face) {\n    var a = artFor(face), lf = layerFace(face);\n    if (!a) { // v2: no artwork, but text or clipart: white sign with the layers\n      if (!hasLayers(lf)) return false;\n      ctx.save(); ctx.fillStyle = '#FFFFFF'; ctx.fillRect(0, 0, Wi, Hi); ctx.restore();\n      window.ArdorRigidLayers.paint(ctx, Wi, Hi, lf);\n      return true;\n    }\n    ctx.save();\n    ctx.fillStyle = a.bg || '#FFFFFF';\n    ctx.fillRect(0, 0, Wi, Hi);\n    if (a.img) {\n      var g = geomForArt(a, a.natW, a.natH, Wi, Hi);\n      drawRot(ctx, a.img, g);\n    } else {\n      ctx.fillStyle = '#F1EFEB'; ctx.fillRect(0, 0, Wi, Hi);\n      ctx.fillStyle = '#3D3A36'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n      var fs = Math.min(Hi * 0.12, Wi * 0.07);\n      ctx.font = '700 ' + fs + 'px Arial, sans-serif';\n      ctx.fillText(a.loading ? 'LOADING YOUR FILE' : 'YOUR FILE', Wi / 2, Hi * 0.44);\n      ctx.font = '400 ' + (fs * 0.5) + 'px Arial, sans-serif';\n      var nm = a.name.length > 40 ? a.name.slice(0, 37) + '...' : a.name;\n      ctx.fillText(nm, Wi / 2, Hi * 0.52);\n      if (!a.loading) ctx.fillText('Preview not available', Wi / 2, Hi * 0.58);\n    }\n    ctx.restore();\n    if (hasLayers(lf)) window.ArdorRigidLayers.paint(ctx, Wi, Hi, lf); // v2\n    return true;\n  }\n\n  // Phone photos are often stored sideways with a \"turn me\" tag. Browsers follow the tag, but a JPEG placed in a PDF\n  // as it is does not, so those photos get an upright copy for the print file. The customer's own file is still\n  // attached to the order.\n  var ROT_NOTE = 'A photo carried a camera rotation tag, so the print file uses an upright copy of it.';\n  function jpegOrientation(file) {\n    return file.slice(0, 262144).arrayBuffer().then(function (ab) {\n      var v = new DataView(ab), n = v.byteLength, p = 2;\n      if (n < 4 || v.getUint16(0) !== 0xFFD8) return 1;\n      while (p + 4 <= n) {\n        var m = v.getUint16(p);\n        if ((m & 0xFF00) !== 0xFF00) return 1;\n        if (m === 0xFFDA || m === 0xFFD9) return 1;\n        var len = v.getUint16(p + 2);\n        if (m === 0xFFE1 && p + 18 <= n && v.getUint32(p + 4) === 0x45786966) {\n          var t = p + 10, le = v.getUint16(t) === 0x4949;\n          var ifd = t + v.getUint32(t + 4, le);\n          if (ifd + 2 > n) return 1;\n          var cnt = v.getUint16(ifd, le);\n          for (var i = 0; i < cnt; i++) {\n            var e = ifd + 2 + i * 12;\n            if (e + 12 > n) return 1;\n            if (v.getUint16(e, le) === 0x0112) return v.getUint16(e + 8, le) || 1;\n          }\n          return 1;\n        }\n        p += 2 + len;\n      }\n      return 1;\n    }).catch(function () { return 1; });\n  }\n  function fixOrientation(a) {\n    if (!/jpe?g/i.test(a.file.type || '') && !/\\.jpe?g$/i.test(a.name)) return;\n    a.ready = jpegOrientation(a.file).then(function (o) {\n      if (!(o >= 2 && o <= 8) || !a.img) return null;\n      var k = Math.min(1, Math.sqrt(40e6 / (a.natW * a.natH)));\n      var cv = document.createElement('canvas'); cv.width = Math.max(1, Math.round(a.natW * k)); cv.height = Math.max(1, Math.round(a.natH * k));\n      cv.getContext('2d').drawImage(a.img, 0, 0, cv.width, cv.height);\n      return new Promise(function (res) {\n        cv.toBlob(function (b) {\n          if (b) { a.printFile = new File([b], 'Ardor Rigid Sign Print Art.jpg', { type: 'image/jpeg' }); a.rotated = o; }\n          cv.width = cv.height = 1; res(null);\n        }, 'image/jpeg', 0.95);\n      });\n    }).catch(function () {});\n  }\n\n  // A file added while a Back tab shows \"Same as front\" is art for that back, so the piece switches to \"Different back\".\n  // Returns the face id the file goes on.\n  function uploadFace(file) {\n    var c = cfg(), p = c.piece;\n    if (S.face !== 'back') return fid(p, 'front');\n    if (file && file.size <= MAX_FILE && c.pieceSides === 2 && c.bm[p] !== 'different') {\n      if (p === 'rider') S.rBackMode = 'different'; else S.backMode = 'different';\n      S.back = true; S.artVer++;\n      toast('This art goes on the back. The front keeps its own art.');\n    }\n    return fid(p, 'back');\n  }\n\n  // Oct 12 (tpl): a finished template file (made on the template page of this face, so it has the page's shape within TPL_TOL)\n  // is placed edge to edge on the whole page, bleed included, unturned\n  var TPL_TOL = 0.01;\n  function tplFit(a, face) {\n    var c = cfg({ piece: pieceOf(face) });\n    if (!a || !a.img || !(a.natW > 0) || !(a.natH > 0) || !(c.Wi > 0) || !(c.Hi > 0)) return false;\n    if (Math.abs((a.natW / a.natH) / (c.Wi / c.Hi) - 1) > TPL_TOL) return false;\n    a.mode = 'fill'; a.rot = 0; a.rcx = 0.5; a.rcy = 0.5; a.tpl = true;\n    if (!/^ardor-ai-/.test(a.name || '')) toast('Template file detected - placed edge to edge'); // AI designs are page-sized too\n    return true;\n  }\n  // Oct 20 2026 (upload bug): uploaded artwork is painted UNDER the layers (paintFace), so on a face that holds a\n  // template or a Background layer (fabric.ArdorBg, full page, opaque) a new upload was completely hidden: on screen,\n  // in 3D, on the proof and in the print file. how = 'ask' (customer uploads: file input, drop): the kit asks first\n  // (add it as a logo layer on top, or replace the template); how = 'replace': the kit takes the template off this\n  // face, then the file becomes its artwork as before; any other caller (AI designs: whole-sign pictures) replaces\n  // the template with a message. Faces without a template or background: unchanged.\n  function loadFile(file, face, how) {\n    face = normFace(face);\n    var err = $('[data-abb-error]');\n    if (!file) return;\n    var KT = window.ArdorRigidKit, over = file && file.size <= MAX_FILE && KT && KT.designFor ? KT.designFor(face) : null;\n    if (over && how === 'ask' && KT.askUpload) {\n      KT.askUpload({ file: file, face: face, preview: function () { return loadArtView().then(function (av) { return av.preview(file, { maxPx: 2400 }); }); }, replace: function () { loadFile(file, face, 'replace'); } });\n      return;\n    }\n    if (over && KT.clearDesign) KT.clearDesign(face, how === 'replace' ? 'ask' : 'ai');\n    if (file.size > MAX_FILE) { toast(file.name + ' is over 25 MB. Order with a smaller file, then email the full file to info@ardorprinting.com.'); return; }\n    var isImg = /^image\\/(png|jpeg|webp|svg\\+xml|gif)$/.test(file.type) || /\\.(png|jpe?g|webp|svg|gif)$/i.test(file.name);\n    var a = { file: file, name: file.name, kind: isImg ? 'image' : 'file', img: null, natW: 1, natH: 1, mode: isImg ? 'fill' : 'fit', rw: 1, rcx: 0.5, rcy: 0.5, bg: '#FFFFFF', rot: 0 };\n    if (!isImg) { previewFile(a, face); return; }\n    var url = URL.createObjectURL(file);\n    var img = new Image();\n    img.onload = function () {\n      a.img = img; a.natW = img.naturalWidth || img.width || 1000; a.natH = img.naturalHeight || img.height || 1500; fixOrientation(a);\n      ART[face] = a; tplFit(a, face); S.artVer++; render();\n    };\n    img.onerror = function () { a.kind = 'file'; a.mode = 'fit'; previewFile(a, face); };\n    img.src = url;\n    if (err) err.hidden = true;\n  }\n\n  // PDF, AI, EPS, TIFF and PSD files: draw a preview so customers see their art in 3D and on the proof.\n  // The art viewer file is a straight copy of the banner one, so it still sets window.ArdorBannerArtView.\n  var artViewP = null;\n  function loadArtView() {\n    if (window.ArdorBannerArtView) return Promise.resolve(window.ArdorBannerArtView).then(function (av) { av.config({ lib: CONF.pdfjsUrl, worker: CONF.pdfjsWorkerUrl }); return av; });\n    if (!artViewP) artViewP = new Promise(function (res, rej) {\n      var sc = document.createElement('script'); sc.src = CONF.artviewUrl; sc.async = true;\n      sc.onload = function () { window.ArdorBannerArtView ? res(window.ArdorBannerArtView) : rej(new Error('art view')); };\n      sc.onerror = function () { artViewP = null; rej(new Error('art view')); };\n      document.head.appendChild(sc);\n    });\n    return artViewP.then(function (av) { av.config({ lib: CONF.pdfjsUrl, worker: CONF.pdfjsWorkerUrl }); return av; });\n  }\n  function previewFile(a, face) {\n    a.loading = true; a.noPreview = false;\n    ART[face] = a; S.artVer++; render();\n    a.ready = loadArtView().then(function (av) { return av.preview(a.file, { maxPx: 2400 }); }).then(function (r) {\n      if (r && r.ok) { a.img = r.canvas; a.natW = r.natW || r.canvas.width; a.natH = r.natH || r.canvas.height; a.src = r.kind; a.vectorPdf = r.vectorPdf || null; }\n      else { a.noPreview = true; a.reason = (r && r.reason) || 'type'; }\n    }).catch(function () { a.noPreview = true; a.reason = 'error'; }).then(function () {\n      a.loading = false;\n      var fk = FACES.filter(function (k) { return ART[k] === a; })[0]; if (fk) { tplFit(a, fk); S.artVer++; render(); }\n    });\n  }\n  function noPreviewText(a) {\n    var tail = ' You can still order with this file, and we\\'ll email you a proof to approve before we print.';\n    if (a.reason === 'ai-no-pdf') return 'This AI file was saved without PDF content, so we can\\'t show it here. In Illustrator, use File > Save As, check \"Create PDF Compatible File\" and upload it again, or upload a PDF, PNG or JPG.' + tail;\n    if (a.reason === 'eps') return 'We can\\'t show this EPS file here, usually because it has live text or effects. To see it on your sign, upload it as a PDF or AI file, or outline the text and save the EPS again.' + tail;\n    if (a.reason === 'locked') return 'This PDF is password protected, so we can\\'t show it here. Upload a copy without a password to see it on your sign.' + tail;\n    if (a.reason === 'blank') return 'This file looks empty, so there\\'s nothing to show. Check that you picked the right file.' + tail;\n    return 'We can\\'t show this file here. Upload a PDF, AI, EPS, PNG or JPG to see it on your sign.' + tail;\n  }\n  function needsEmailProof() {\n    return printedFaces(cfg()).some(function (f) { var x = ART[f]; return x && x.noPreview; });\n  }\n\n  // ---------- flat sign drawing (2D editor, 3D faces and proof) ----------\n  function polyPath(ctx, p) { if (!p || !p.length) return; ctx.moveTo(p[0][0], p[0][1]); for (var i = 1; i < p.length; i++) ctx.lineTo(p[i][0], p[i][1]); ctx.closePath(); }\n  var checkerCv = null;\n  function checker(ctx, u) {\n    try {\n      if (!checkerCv) {\n        checkerCv = document.createElement('canvas'); checkerCv.width = checkerCv.height = 16;\n        var x = checkerCv.getContext('2d'); x.fillStyle = '#ECECEF'; x.fillRect(0, 0, 16, 16); x.fillStyle = '#DADADF'; x.fillRect(0, 0, 8, 8); x.fillRect(8, 8, 8, 8);\n      }\n      var pat = ctx.createPattern(checkerCv, 'repeat');\n      if (pat && pat.setTransform && window.DOMMatrix) { pat.setTransform(new DOMMatrix().scale(u * 0.75)); return pat; }\n    } catch (e) {}\n    return '#E6E6EA';\n  }\n  // a label centered in a box, at least about 9 screen pixels high, shrunk to fit the box's width\n  function zoneLabel(ctx, txt, x, y, w, h, u) {\n    if (!txt) return;\n    var turn = h > w * 2.5, L = turn ? h : w, T = turn ? w : h;\n    if (T / u < 6) return; // thinner than 6 screen pixels: no room for a label\n    ctx.save();\n    ctx.font = '700 1px Arial, sans-serif';\n    var tw = ctx.measureText(txt).width || txt.length * 0.6;\n    var fs = Math.max(Math.min(T * 0.5, (L * 0.86) / tw, 3), u * 9);\n    if (tw * fs > L * 0.98) fs = (L * 0.98) / tw;\n    if (fs / u < 6) { ctx.restore(); return; }\n    ctx.translate(x + w / 2, y + h / 2); if (turn) ctx.rotate(-Math.PI / 2);\n    ctx.font = '700 ' + fs + 'px Arial, sans-serif'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n    ctx.lineJoin = 'round'; ctx.lineWidth = fs * 0.28; ctx.strokeStyle = 'rgba(30,31,36,0.85)'; ctx.strokeText(txt, 0, 0);\n    ctx.fillStyle = 'rgba(255,255,255,0.96)'; ctx.fillText(txt, 0, 0);\n    ctx.restore();\n  }\n  // the guides on one face: the corners a round-corner cut takes off (dimmed), the holes, grommets and standoffs where the\n  // option puts them (a custom placement the customer marked: dashed), the sign edge and the dashed red safe line 0.25 in\n  // inside it. No bleed. u = inches per screen pixel (line widths).\n  function roundRectPath(ctx, x, y, w, h, r) {\n    r = Math.max(0, Math.min(r || 0, w / 2, h / 2));\n    if (!r) { ctx.rect(x, y, w, h); return; }\n    ctx.moveTo(x + r, y); ctx.lineTo(x + w - r, y); ctx.arcTo(x + w, y, x + w, y + r, r); ctx.lineTo(x + w, y + h - r);\n    ctx.arcTo(x + w, y + h, x + w - r, y + h, r); ctx.lineTo(x + r, y + h); ctx.arcTo(x, y + h, x, y + h - r, r);\n    ctx.lineTo(x, y + r); ctx.arcTo(x, y, x + r, y, r); ctx.closePath();\n  }\n  function drawGuides(ctx, c, Wi, Hi, face, u) {\n    var G = faceGeo(c, face), r = G.corner;\n    ctx.save();\n    ctx.setLineDash([]);\n    if (r > 0) {\n      ctx.beginPath(); ctx.rect(0, 0, Wi, Hi); roundRectPath(ctx, 0, 0, Wi, Hi, r);\n      ctx.globalAlpha = 0.7; ctx.fillStyle = checker(ctx, u); ctx.fill('evenodd'); ctx.globalAlpha = 1;\n    }\n    var custom = !!c.customHoles;\n    G.holeList.forEach(function (h) {\n      var kind = h[3], cx = h[0], cy = h[1];\n      if (kind === 'standoff') {\n        var rs = Math.max(h[2] / 2, u * 5);\n        var gr = ctx.createRadialGradient(cx - rs * 0.3, cy - rs * 0.3, rs * 0.1, cx, cy, rs);\n        gr.addColorStop(0, 'rgba(255,255,255,0.97)'); gr.addColorStop(0.6, 'rgba(196,199,206,0.95)'); gr.addColorStop(1, 'rgba(120,124,134,0.95)');\n        ctx.beginPath(); ctx.arc(cx, cy, rs, 0, Math.PI * 2); ctx.fillStyle = gr; ctx.fill();\n        ctx.lineWidth = Math.max(u * 1.4, rs * 0.06); ctx.strokeStyle = 'rgba(70,72,80,0.95)'; ctx.stroke();\n        ctx.beginPath(); ctx.arc(cx, cy, Math.max(rs * 0.18, u * 1.5), 0, Math.PI * 2); ctx.fillStyle = 'rgba(70,72,80,0.85)'; ctx.fill();\n        return;\n      }\n      var hr = Math.max(h[2] / 2, u * 3.5);\n      if (kind === 'grommet') {\n        var ro = Math.max(hr * 2, u * 6);\n        ctx.beginPath(); ctx.arc(cx, cy, ro, 0, Math.PI * 2); ctx.arc(cx, cy, hr, 0, Math.PI * 2, true);\n        ctx.fillStyle = custom ? 'rgba(189,37,44,0.35)' : 'rgba(176,141,62,0.95)'; ctx.fill('evenodd');\n        ctx.lineWidth = Math.max(u * 1.2, hr * 0.15); ctx.strokeStyle = custom ? 'rgba(189,37,44,0.95)' : 'rgba(92,72,28,0.95)'; ctx.stroke();\n      }\n      ctx.beginPath(); ctx.arc(cx, cy, hr, 0, Math.PI * 2);\n      ctx.fillStyle = 'rgba(255,255,255,0.95)'; ctx.fill();\n      if (custom) ctx.setLineDash([u * 3, u * 2]);\n      ctx.lineWidth = Math.max(u * 1.6, hr * 0.3); ctx.strokeStyle = custom ? 'rgba(189,37,44,0.95)' : 'rgba(70,72,80,0.95)'; ctx.stroke();\n      ctx.setLineDash([]);\n    });\n    ctx.beginPath(); roundRectPath(ctx, 0, 0, Wi, Hi, r);\n    ctx.lineWidth = u * 1.4; ctx.strokeStyle = 'rgba(12,13,13,0.9)'; ctx.stroke();\n    // the safe line follows round corners (0.25 in inside the cut: a corner radius 0.25 in smaller)\n    G.safe.forEach(function (p, i) {\n      ctx.beginPath(); if (i === 0 && r > 0) roundRectPath(ctx, G.safeR.x, G.safeR.y, G.safeR.w, G.safeR.h, Math.max(0, r - G.safeIn)); else polyPath(ctx, p);\n      ctx.setLineDash([]); ctx.lineWidth = u * 2.6; ctx.strokeStyle = 'rgba(255,255,255,0.7)'; ctx.stroke();\n      ctx.setLineDash([u * 6, u * 4]); ctx.lineWidth = u * 1.5; ctx.strokeStyle = 'rgba(189,37,44,0.95)'; ctx.stroke();\n    });\n    ctx.setLineDash([]);\n    ctx.restore();\n  }\n  // ---- the free part of the 2D frame (app layout): the sign is fitted where nothing covers it: right of an open tool\n  // drawer, above the hint line, and around the 3D thumbnail and the zoom buttons (beside or below / above them, whichever\n  // leaves the bigger sign). Returns the free box size and how far its centre sits from the frame's centre (css px).\n  function freeArea(frame, cs, Wi, Hi) {\n    var fb = frame.getBoundingClientRect(); if (!(fb.width > 0 && fb.height > 0)) return null;\n    var P = function (k) { return parseFloat(cs[k]) || 0; };\n    var c0 = { l: fb.left + P('paddingLeft'), t: fb.top + P('paddingTop'), r: fb.right - P('paddingRight'), b: fb.bottom - P('paddingBottom') };\n    var box = { l: c0.l, t: c0.t, r: c0.r, b: c0.b };\n    var vis = function (sel) {\n      var el = root.querySelector(sel) || document.querySelector(sel); if (!el || el.hidden) return null;\n      var r = el.getBoundingClientRect();\n      return r.width > 0 && r.height > 0 && r.right > fb.left && r.left < fb.right && r.bottom > fb.top && r.top < fb.bottom ? r : null;\n    };\n    var dr = vis('.abl-drawer.is-open');\n    if (dr && dr.right < fb.left + fb.width * 0.6 && dr.right + 16 > box.l) box.l = dr.right + 16;\n    var hn = vis('.abx-hint');\n    if (hn && hn.top - 8 < box.b && hn.top > box.t + 80) box.b = hn.top - 8;\n    var obs = [vis('.abx-3d.is-thumb'), vis('[data-abb-z2d]')].filter(function (o) { return o && o.left < box.r && o.right > box.l && o.top < box.b && o.bottom > box.t; });\n    var fitIn = function (b) {\n      var w = b.r - b.l, h = b.b - b.t; if (w < 40 || h < 40) return null;\n      var k = Math.min(w / Wi, h / Hi), sw = Wi * k, sh = Hi * k, cx = (b.l + b.r) / 2, cy = (b.t + b.b) / 2;\n      return { k: k, l: cx - sw / 2, r: cx + sw / 2, t: cy - sh / 2, b: cy + sh / 2 };\n    };\n    var hits = function (s, o) { return s.l < o.right + 10 && s.r > o.left - 10 && s.t < o.bottom + 10 && s.b > o.top - 10; };\n    var best = null, bestK = -1, n = obs.length, total = Math.pow(3, n);\n    for (var m = 0; m < total; m++) {\n      var b = { l: box.l, t: box.t, r: box.r, b: box.b }, mm = m;\n      for (var i = 0; i < n; i++) {\n        var ch = mm % 3, o = obs[i]; mm = Math.floor(mm / 3);\n        if (ch === 1) { if ((o.left + o.right) / 2 > (box.l + box.r) / 2) b.r = Math.min(b.r, o.left - 12); else b.l = Math.max(b.l, o.right + 12); }\n        if (ch === 2) { if ((o.top + o.bottom) / 2 > (box.t + box.b) / 2) b.b = Math.min(b.b, o.top - 12); else b.t = Math.max(b.t, o.bottom + 12); }\n      }\n      var s = fitIn(b); if (!s) continue;\n      if (obs.some(function (q) { return hits(s, q); })) continue;\n      if (s.k > bestK + 1e-9) { best = b; bestK = s.k; }\n    }\n    if (!best) best = box;\n    return { w: best.r - best.l, h: best.b - best.t, dx: (best.l + best.r) / 2 - (c0.l + c0.r) / 2, dy: (best.t + best.b) / 2 - (c0.t + c0.b) / 2 };\n  }\n  // fit the 2D sign again when a tool drawer opens or closes, or the 3D thumbnail, the hint line or the art changes\n  function watchFree() {\n    if (!window.MutationObserver) return;\n    var t1 = 0, t2 = 0; // the app layout (abb--app, .abx) is built by assets/ardor-rigid-app.js after this runs\n    var again = function () { cancelAnimationFrame(t1); clearTimeout(t2); t1 = requestAnimationFrame(drawLayout); t2 = setTimeout(drawLayout, 380); };\n    new MutationObserver(function (list) {\n      if (!root.classList.contains('abb--app')) return;\n      for (var i = 0; i < list.length; i++) {\n        var t = list[i].target, cl = t && t.classList, now = t && t.getAttribute ? t.getAttribute(list[i].attributeName) : null, old = list[i].oldValue;\n        if (!cl || now === old) continue;\n        if (cl.contains('abx')) { if (/\\babx-has-art\\b/.test(old || '') !== cl.contains('abx-has-art')) { again(); return; } continue; }\n        if (cl.contains('abl-drawer') || cl.contains('abx-hint') || cl.contains('abx-3d')) { again(); return; }\n      }\n    }).observe(root, { attributes: true, attributeFilter: ['class', 'hidden'], attributeOldValue: true, subtree: true });\n    window.addEventListener('resize', again);\n  }\n  function drawFlat(ctx, c, Wi, Hi, face, guides, u) {\n    if (!paintFace(ctx, Wi, Hi, face)) {\n      ctx.fillStyle = '#FFFFFF'; ctx.fillRect(0, 0, Wi, Hi);\n      var G = faceGeo(c, face), tall = G.bh > G.bw * 1.6;\n      ctx.save();\n      ctx.translate(G.bx + G.bw / 2, G.by + G.bh / 2);\n      if (tall) ctx.rotate(-Math.PI / 2);\n      ctx.fillStyle = '#A3A3AD'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n      ctx.font = '600 ' + Math.min(Math.min(G.bw, G.bh) * 0.16, Math.max(G.bw, G.bh) * 0.05) + 'px Arial, sans-serif';\n      if (!guides) ctx.fillText('Your artwork goes here', 0, 0); // the 2D view shows the upload card instead\n      ctx.restore();\n    }\n    if (!guides) return;\n    drawGuides(ctx, c, Wi, Hi, face, u || Math.max(Wi, Hi) / 600);\n  }\n\n  // ---------- flat layout editor: the whole template fits the stage; zoom in and pan to work on part of it ----------\n  // lay.scale = screen px per inch, lay.ox / lay.oy = where the page's top-left corner sits on the canvas (css px),\n  // lay.zoom 1 = whole page, lay.cx / lay.cy = the view's center in page fractions when zoomed in.\n  var lay = { canvas: null, scale: 1, drag: false, pan: false, hand: false, lx: 0, ly: 0, zoom: 1, cx: 0.5, cy: 0.5, ox: 0, oy: 0 };\n  var ZMAX = 8;\n  function drawLayout() {\n    var cv = lay.canvas; if (!cv) return;\n    var c = cfg();\n    var Wi = c.Wi, Hi = c.Hi;\n    var frame = cv.parentNode;\n    var cs = window.getComputedStyle(frame), isApp = root.classList.contains('abb--app');\n    var padX = (parseFloat(cs.paddingLeft) || 0) + (parseFloat(cs.paddingRight) || 0), padY = (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0);\n    var maxW = isApp ? Math.max(60, (frame.clientWidth || 400) - padX) : Math.max(160, (frame.clientWidth || 400) - 20);\n    var maxH = isApp ? Math.max(40, (frame.clientHeight || 300) - padY) : 520;\n    var fr = isApp ? freeArea(frame, cs, Wi, Hi) : null; // not under a drawer, the 3D thumbnail, the zoom buttons or the hint\n    if (fr) { maxW = Math.max(60, Math.floor(fr.w)); maxH = Math.max(40, Math.floor(fr.h)); }\n    var fit = Math.min(maxW / Wi, maxH / Hi), z = fit * lay.zoom;\n    var cssW = Math.max(1, Math.round(Math.min(Wi * z, maxW))), cssH = Math.max(1, Math.round(Math.min(Hi * z, maxH)));\n    var hx = cssW / (2 * z * Wi), hy = cssH / (2 * z * Hi);\n    lay.cx = hx >= 0.5 ? 0.5 : clamp(lay.cx, hx, 1 - hx);\n    lay.cy = hy >= 0.5 ? 0.5 : clamp(lay.cy, hy, 1 - hy);\n    lay.ox = cssW / 2 - lay.cx * Wi * z; lay.oy = cssH / 2 - lay.cy * Hi * z;\n    lay.scale = z; lay.fit = fit;\n    var dpr = Math.min(2, window.devicePixelRatio || 1);\n    var pw = Math.round(cssW * dpr), ph = Math.round(cssH * dpr);\n    cv.style.width = cssW + 'px'; cv.style.height = cssH + 'px';\n    // the canvas in the middle of the free area (flex centring + margins; the layers kit reads offsetLeft / offsetTop)\n    var mx = fr ? Math.round(fr.dx * 2) : 0, my = fr ? Math.round(fr.dy * 2) : 0;\n    cv.style.marginLeft = mx > 0 ? mx + 'px' : ''; cv.style.marginRight = mx < 0 ? -mx + 'px' : '';\n    cv.style.marginTop = my > 0 ? my + 'px' : ''; cv.style.marginBottom = my < 0 ? -my + 'px' : '';\n    if (cv.width !== pw || cv.height !== ph) { cv.width = pw; cv.height = ph; }\n    var kx = cv.width / cssW, ky = cv.height / cssH;\n    var ctx = cv.getContext('2d');\n    ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, cv.width, cv.height);\n    ctx.setTransform(z * kx, 0, 0, z * ky, lay.ox * kx, lay.oy * ky);\n    drawFlat(ctx, c, Wi, Hi, fid(c.piece, S.face), true, 1 / z);\n    syncZoomUi();\n    try { root.dispatchEvent(new CustomEvent('ardor:rigid-view')); } catch (e) {}\n  }\n  function syncZoomUi() {\n    var out = $('[data-abb-zoom2d-val]'); if (out) out.textContent = Math.round(lay.zoom * 100) + '%';\n    var zi = $('[data-abb-zoom2d-in]'), zo = $('[data-abb-zoom2d-out]'), zf = $('[data-abb-zoom2d-fit]'), hb = $('[data-abb-hand]');\n    var zoomed = lay.zoom > 1.001;\n    if (!zoomed) lay.hand = false;\n    if (zi) zi.disabled = lay.zoom >= ZMAX - 0.001;\n    if (zo) zo.disabled = !zoomed;\n    if (zf) zf.disabled = !zoomed;\n    if (hb) { hb.hidden = !zoomed; hb.setAttribute('aria-pressed', lay.hand ? 'true' : 'false'); }\n    if (lay.canvas) lay.canvas.style.cursor = lay.hand ? 'grab' : '';\n    root.classList.toggle('abb--hand', !!lay.hand);\n  }\n  // zoom to z (1 = whole page); (px, py) = the canvas point (css px) that stays put, else the view's center\n  function setZoom(z, px, py) {\n    var c = cfg(), Z = clamp(z, 1, ZMAX);\n    if (px != null && lay.scale > 0) {\n      var ux = (px - lay.ox) / lay.scale / c.Wi, uy = (py - lay.oy) / lay.scale / c.Hi, z1 = lay.fit * Z;\n      var cw = lay.canvas ? parseFloat(lay.canvas.style.width) || 0 : 0, ch = lay.canvas ? parseFloat(lay.canvas.style.height) || 0 : 0;\n      lay.cx = ux + (cw / 2 - px) / (z1 * c.Wi); lay.cy = uy + (ch / 2 - py) / (z1 * c.Hi);\n    }\n    lay.zoom = Z;\n    drawLayout();\n  }\n  function panBy(dx, dy) { var c = cfg(); lay.cx -= dx / (lay.scale * c.Wi); lay.cy -= dy / (lay.scale * c.Hi); drawLayout(); }\n  // turn the art on the face being edited 90 degrees (d = 90 right, -90 left) around its center, keeping its size\n  function rotateArt(d) {\n    var a = editingArt(); if (!a || !a.img) return;\n    var c = cfg(), g = geom(a, c.Wi, c.Hi);\n    a.rot = (((a.rot || 0) + d) % 360 + 360) % 360;\n    if (a.mode === 'custom') a.rw = g.h / c.Wi;\n    S.artVer++; render();\n  }\n\n  function editingArt() { var c = cfg(); return S.face === 'back' ? (c.pieceSides === 2 && c.backMode === 'different' ? ART[fid(c.piece, 'back')] : null) : ART[fid(c.piece, 'front')]; }\n\n  function bindLayout() {\n    lay.canvas = $('[data-abb-layout-canvas]');\n    if (!lay.canvas) return;\n    var cv = lay.canvas;\n    // drag the art to move it. Zoomed in: drag outside the art (or with the hand tool on) to move the view.\n    cv.addEventListener('pointerdown', function (e) {\n      var a = editingArt(), c = cfg(), zoomed = lay.zoom > 1.001, onArt = false;\n      if (a && a.img && !lay.hand) {\n        if (!zoomed) onArt = true;\n        else {\n          var g = geom(a, c.Wi, c.Hi), r = cv.getBoundingClientRect();\n          var ux = (e.clientX - r.left - lay.ox) / lay.scale, uy = (e.clientY - r.top - lay.oy) / lay.scale;\n          onArt = ux >= g.x && ux <= g.x + g.w && uy >= g.y && uy <= g.y + g.h;\n        }\n      }\n      if (!onArt && !zoomed) return;\n      lay.drag = onArt; lay.pan = !onArt; lay.lx = e.clientX; lay.ly = e.clientY;\n      if (lay.pan) cv.style.cursor = 'grabbing';\n      try { cv.setPointerCapture(e.pointerId); } catch (er) {}\n      e.preventDefault();\n    });\n    cv.addEventListener('pointermove', function (e) {\n      if (lay.pan) { var px = e.clientX - lay.lx, py = e.clientY - lay.ly; lay.lx = e.clientX; lay.ly = e.clientY; panBy(px, py); return; }\n      if (!lay.drag) return;\n      var a = editingArt(); if (!a) return;\n      var c = cfg();\n      var dx = (e.clientX - lay.lx) / lay.scale, dy = (e.clientY - lay.ly) / lay.scale;\n      lay.lx = e.clientX; lay.ly = e.clientY;\n      if (a.mode !== 'custom') { geom(a, c.Wi, c.Hi); a.mode = 'custom'; }\n      a.rcx += dx / c.Wi; a.rcy += dy / c.Hi;\n      a.rcx = Math.max(-0.5, Math.min(1.5, a.rcx)); a.rcy = Math.max(-0.5, Math.min(1.5, a.rcy));\n      S.artVer++; renderArtOnly();\n    });\n    var end = function () { var was = lay.pan; lay.drag = false; lay.pan = false; if (was) syncZoomUi(); };\n    cv.addEventListener('pointerup', end); cv.addEventListener('pointercancel', end);\n    // mouse wheel / trackpad over the stage: pinch or Ctrl + wheel zooms, the wheel moves the view when zoomed in\n    cv.parentNode.addEventListener('wheel', function (e) {\n      var r = cv.getBoundingClientRect(), px = e.clientX - r.left, py = e.clientY - r.top;\n      if (e.ctrlKey || e.metaKey) { e.preventDefault(); setZoom(lay.zoom * Math.pow(0.996, e.deltaY), px, py); return; }\n      if (lay.zoom <= 1.001) return;\n      e.preventDefault();\n      panBy(-(e.shiftKey ? e.deltaY : e.deltaX), -(e.shiftKey ? 0 : e.deltaY));\n    }, { passive: false });\n    var sc = $('[data-abb-scale]');\n    sc.addEventListener('input', function () {\n      var a = editingArt(); if (!a || !a.img) return;\n      var c = cfg(); var g = geom(a, c.Wi, c.Hi);\n      a.mode = 'custom'; a.rw = (parseFloat(sc.value) / 100) * g.fillW / c.Wi;\n      S.artVer++; renderArtOnly();\n    });\n    $('[data-abb-fill]').addEventListener('click', function () { var a = editingArt(); if (a) { a.mode = 'fill'; S.artVer++; render(); } });\n    $('[data-abb-fit]').addEventListener('click', function () { var a = editingArt(); if (a) { a.mode = 'fit'; S.artVer++; render(); } });\n    $('[data-abb-center]').addEventListener('click', function () { var a = editingArt(); if (a) { if (a.mode !== 'custom') { var c = cfg(); geom(a, c.Wi, c.Hi); a.mode = 'custom'; } a.rcx = 0.5; a.rcy = 0.5; S.artVer++; render(); } });\n    $('[data-abb-bg]').addEventListener('input', function (e) { var a = editingArt(); if (a) { a.bg = e.target.value; S.artVer++; renderArtOnly(); } });\n    on('[data-abb-rot-l]', 'click', function () { rotateArt(-90); });\n    on('[data-abb-rot-r]', 'click', function () { rotateArt(90); });\n    on('[data-abb-zoom2d-in]', 'click', function () { setZoom(lay.zoom * 1.5); });\n    on('[data-abb-zoom2d-out]', 'click', function () { setZoom(lay.zoom / 1.5); });\n    on('[data-abb-zoom2d-fit]', 'click', function () { lay.cx = 0.5; lay.cy = 0.5; setZoom(1); });\n    on('[data-abb-hand]', 'click', function () { lay.hand = !lay.hand; syncZoomUi(); });\n    if (typeof ResizeObserver !== 'undefined') { try { new ResizeObserver(function () { drawLayout(); }).observe(cv.parentNode); } catch (er) {} }\n  }\n\n  function renderArtOnly() {\n    drawLayout();\n    updateArtUi();\n    sync3dSoon();\n  }\n\n  // resolution check: under 40 pixels per inch prints blurry (red), under 75 looks soft up close (amber)\n  function resIssue(a, c) {\n    if (!a || !a.img || a.kind !== 'image' || /svg/i.test(a.file.type || a.name)) return null;\n    var g = geom(a, c.Wi, c.Hi), ppi = Math.round(a.natW / (rot90(a) ? g.h : g.w));\n    if (ppi < 40) return { level: 'bad', text: ' is only about ' + ppi + ' pixels per inch at this size, so it will print blurry. Use a bigger image or a PDF, or pick a smaller sign.' };\n    if (ppi < 75) return { level: 'soft', text: ' is about ' + ppi + ' pixels per inch at this size. It looks fine from a few steps away but soft up close. 100 or more is best.' };\n    return null;\n  }\n\n  function updateArtUi() {\n    fixFace();\n    var c = cfg();\n    var two = c.pieceSides === 2, backDiff = two && c.backMode === 'different';\n    var a = editingArt();\n    var tabs = $('[data-abb-art-tabs]'); if (tabs) tabs.hidden = !two && !c.rider;\n    $$('[data-abb-piece]').forEach(function (pb) { pb.hidden = !c.rider; pb.setAttribute('aria-pressed', pb.getAttribute('data-abb-piece') === c.piece ? 'true' : 'false'); });\n    $$('[data-abb-face]').forEach(function (fb) { fb.hidden = !two; fb.setAttribute('aria-pressed', fb.getAttribute('data-abb-face') === S.face ? 'true' : 'false'); });\n    var lab = c.rider ? (c.piece === 'rider' ? 'rider ' : 'sign ') : '';\n    var sameBack = S.face === 'back' && !backDiff;\n    $('[data-abb-drop]').hidden = sameBack;\n    var upl = $('[data-abb-upload-label]'); if (upl) upl.textContent = S.face === 'back' ? 'Upload art for the ' + lab + 'back' : (c.piece === 'rider' ? 'Upload rider artwork' : 'Upload artwork');\n    var nameEl = $('[data-abb-file-name]');\n    nameEl.hidden = !a; nameEl.textContent = a ? ('Selected: ' + a.name) : '';\n    var ctl = $('[data-abb-layout-controls]');\n    ctl.hidden = !(a && a.img);\n    var empty = $('[data-abb-layout-empty]');\n    var msg = '', level = '';\n    if (sameBack) { empty.hidden = false; empty.textContent = 'The ' + lab + 'back shows the same art as the ' + lab + 'front.'; }\n    else if (a && a.loading) { empty.hidden = false; empty.textContent = 'Loading a preview of your file\u2026'; }\n    else if (a && a.noPreview) { empty.hidden = true; msg = noPreviewText(a); level = 'soft'; }\n    else if (a && a.kind !== 'image') { empty.hidden = false; empty.textContent = 'This is a preview of your file. We print from your original, so the sign will look sharper than the preview.'; }\n    else if (!a) { empty.hidden = false; empty.textContent = S.face === 'back' ? 'No art for the ' + lab + 'back yet. Upload it above.' : (c.piece === 'rider' ? 'No rider artwork yet. Upload yours above.' : 'No artwork yet. Upload yours above.'); }\n    else empty.hidden = true;\n    if (lay.canvas) lay.canvas.style.touchAction = (a && a.img) ? 'none' : 'auto';\n    if (a && a.img) {\n      var g = geom(a, c.Wi, c.Hi);\n      var sc = $('[data-abb-scale]');\n      var pct = Math.round(100 * g.w / g.fillW);\n      sc.value = String(Math.max(10, Math.min(400, pct)));\n      $('[data-abb-scale-out]').textContent = pct + '%';\n      $('[data-abb-bg]').value = a.bg;\n    }\n    // image resolution on every printed face; the worst one is shown, in the footer, where it is always in view\n    var faces = printedFaces(c), worst = null;\n    faces.forEach(function (f) {\n      var r = resIssue(ART[f], cfg({ piece: pieceOf(f) }));\n      if (r && (!worst || (r.level === 'bad' && worst.r.level !== 'bad'))) worst = { f: f, r: r };\n    });\n    if (worst) { msg = (faces.length > 1 ? 'The image for the ' + faceName(worst.f).toLowerCase() : 'This image') + worst.r.text; level = worst.r.level; }\n    [$('[data-abb-warn]'), $('[data-abb-res-warn]')].forEach(function (el) {\n      if (!el) return;\n      el.hidden = !msg; el.textContent = msg;\n      if (msg && level) el.setAttribute('data-level', level); else el.removeAttribute('data-level');\n    });\n  }\n\n  // ---------- render ----------\n  // the order rows (summary, proof, cart): Material, Finish/Thickness, Size, Sides, Holes/Grommets/Standoffs, Corners, Stake,\n  // Quantity, Delivery\n  function specLines(c) {\n    var out = [['Material', matLabel(c)], ['Finish/Thickness', finishLabel(c)], ['Size', sizeLabel(c)]];\n    if (groupOf(c.m, 'sides')) out.push(['Sides', sidesLabel(c)]);\n    var hg = groupOf(c.m, 'holes'); if (hg) out.push([hg.label === 'Grommets' ? 'Grommets' : (hg.label === 'Holes Punch' ? 'Holes' : 'Holes/Standoffs'), holesLabel(c)]);\n    var cn = cornersLabel(c); if (cn) out.push(['Corners', cn]);\n    var st = stakeLabel(c); if (st) out.push(['Stake', st]);\n    out.push(['Quantity', qtyLabel(c.qty, c)], ['Delivery', deliveryLabel(c)]);\n    return out;\n  }\n  // small material icons for the material cards (24 x 40)\n  var SIL = {\n    MAG: '<path d=\"M2 14h20l-2 16H4z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><rect x=\"5\" y=\"18\" width=\"14\" height=\"8\" rx=\"1.5\" fill=\"currentColor\" opacity=\".85\"/>',\n    COR: '<rect x=\"2\" y=\"6\" width=\"20\" height=\"15\" rx=\"1\" fill=\"currentColor\" opacity=\".85\"/><path d=\"M8 21v16M16 21v16M8 29h8\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>',\n    ASB: '<rect x=\"2\" y=\"10\" width=\"20\" height=\"16\" rx=\"1.5\" fill=\"currentColor\" opacity=\".85\"/><circle cx=\"5\" cy=\"13\" r=\"1.1\" fill=\"#fff\"/><circle cx=\"19\" cy=\"13\" r=\"1.1\" fill=\"#fff\"/><circle cx=\"5\" cy=\"23\" r=\"1.1\" fill=\"#fff\"/><circle cx=\"19\" cy=\"23\" r=\"1.1\" fill=\"#fff\"/>',\n    ACR: '<rect x=\"2\" y=\"10\" width=\"20\" height=\"16\" rx=\"1\" fill=\"currentColor\" opacity=\".35\" stroke=\"currentColor\" stroke-width=\"1.4\"/><circle cx=\"5.5\" cy=\"13.5\" r=\"1.8\" fill=\"currentColor\"/><circle cx=\"18.5\" cy=\"13.5\" r=\"1.8\" fill=\"currentColor\"/><circle cx=\"5.5\" cy=\"22.5\" r=\"1.8\" fill=\"currentColor\"/><circle cx=\"18.5\" cy=\"22.5\" r=\"1.8\" fill=\"currentColor\"/>',\n    PVC: '<rect x=\"3\" y=\"8\" width=\"18\" height=\"22\" rx=\"1\" fill=\"currentColor\" opacity=\".85\"/>',\n    FOM: '<path d=\"M6 36l6-30 6 30M9 22h6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"/><rect x=\"3\" y=\"7\" width=\"18\" height=\"13\" rx=\"1\" fill=\"currentColor\" opacity=\".85\"/>',\n    STY: '<path d=\"M4 8h14a3 3 0 0 1 0 6H4z\" fill=\"currentColor\" opacity=\".55\"/><rect x=\"4\" y=\"14\" width=\"16\" height=\"18\" fill=\"currentColor\" opacity=\".85\"/>',\n    GAT: '<rect x=\"2\" y=\"9\" width=\"20\" height=\"18\" rx=\"1\" fill=\"currentColor\" opacity=\".85\"/><rect x=\"2\" y=\"27\" width=\"20\" height=\"3\" fill=\"currentColor\" opacity=\".45\"/>',\n    ALS: '<rect x=\"2\" y=\"9\" width=\"20\" height=\"18\" rx=\"4\" fill=\"currentColor\" opacity=\".85\"/><circle cx=\"12\" cy=\"12\" r=\"1.1\" fill=\"#fff\"/><circle cx=\"12\" cy=\"24\" r=\"1.1\" fill=\"#fff\"/>'\n  };\n  function famIcon(id) {\n    return '<svg class=\"abb-opt__sil\" viewBox=\"0 0 24 40\" width=\"22\" height=\"36\" aria-hidden=\"true\" focusable=\"false\">' + (SIL[id] || SIL.PVC) + '</svg>';\n  }\n  // a short help line under a supplier option group\n  function groupNote(c, g) {\n    if (g.role === 'sides') return c.sides === 2 ? 'Printed on the front and the back. Use the same art on both sides, or give the back its own.' : 'Printed on the front.';\n    if (g.role === 'holes') {\n      if (c.customHoles) return 'Mark where you want the ' + (c.customHoles === 'grommet' ? 'grommets' : 'holes') + ' below. Custom placements are priced by hand: send it to us and we reply with a quote.';\n      if (!c.holes.length) return '';\n      var k = c.holes[0][3];\n      return k === 'standoff' ? 'Chrome standoffs, 1 in across and 1 in off the wall, with screws and anchors. Holes are drilled 1.5 in from the edges.' : (k === 'grommet' ? 'Brass grommets in the corners. Keep text clear of the gold rings.' : (c.m.finish ? '3/8 in drilled holes, 1.5 in from the edges.' : '1/4 in punched holes. Keep text clear of the circles.'));\n    }\n    if (g.role === 'corners') return c.corner > 0 ? 'The corners are cut round. The dimmed corners on the layout are cut off.' : 'Square corners.';\n    if (g.role === 'stake') return c.stake ? 'A 10 x 30 in steel H-stake for each sign. Its legs slide into the flutes at the bottom edge.' : (c.pickupOnly ? 'H-stakes fit the signs we ship (vertical flutes), not the big sheets printed in our shop.' : '');\n    if (g.role === 'material') return c.thick >= 0.5 ? '1/2 in board: about twice as thick and stiff as 3/16 in.' : '';\n    if (g.role === 'finish') return c.mat === 'AFW' ? 'Printed on the back of the clear acrylic, then backed with white for the brightest colors.' : (c.mat === 'ASW' ? 'White ink only behind your art, so the rest stays clear. Uploading your own file? A PNG with a transparent background works best.' : 'No white ink: white in your art looks clear, and the colors look see-through.');\n    return '';\n  }\n  // the note line under a group: text in its own span, so a panel kept inside the note (custom size inputs, custom hole\n  // placement) is never rebuilt while the customer types in it\n  function setNote(note, text, panel) {\n    if (!note) return;\n    var sp = $('[data-abb-note-txt]', note);\n    if (!sp) { note.textContent = ''; sp = document.createElement('span'); sp.setAttribute('data-abb-note-txt', ''); note.appendChild(sp); }\n    sp.textContent = text || '';\n    Array.prototype.slice.call(note.children).forEach(function (ch) { if (ch !== sp && ch !== panel && ch.hasAttribute('data-abb-panel-keep')) ch.hidden = true; });\n    if (panel) { if (panel.parentNode !== note) note.appendChild(panel); panel.hidden = false; }\n  }\n  // a yard sign pack that costs the same as this order or less: say so, with a one-click switch (prices stay the store's own)\n  function packNudge(c, p) {\n    var qn = $('[data-abb-qty-note]'), el = $('[data-abb-pack-nudge]');\n    if (!qn || !qn.parentNode) return;\n    if (!el) { el = document.createElement('div'); el.className = 'abb-pack-nudge'; el.setAttribute('data-abb-pack-nudge', ''); el.setAttribute('role', 'status'); }\n    if (qn.nextSibling !== el) qn.parentNode.insertBefore(el, qn.nextSibling);\n    var signs = c.qty * c.pack, now = Math.round(p.charged * 100), best = 0, bestCents = 0;\n    if (c.yard && p.ok && c.packs.length > 1) c.packs.slice().sort(function (a, b) { return a - b; }).forEach(function (q) {\n      if (best || q === c.pack || q < signs) return;\n      var x = price(cfg({ pack: q, qty: 1 }));\n      var cents = x.ok ? Math.round(x.charged * 100) : 0;\n      if (cents > 0 && cents <= now) { best = q; bestCents = cents; }\n    });\n    el.textContent = '';\n    el.hidden = !best;\n    if (!best) return;\n    var what = c.pack > 1 ? c.qty + ' ' + (c.qty === 1 ? 'pack' : 'packs') + ' of ' + c.pack : c.qty + ' single ' + (c.qty === 1 ? 'sign' : 'signs'), more = best - signs;\n    var t = document.createElement('span'); t.className = 'abb-pack-nudge__txt';\n    t.textContent = 'A pack of ' + best + ' is ' + money(bestCents / 100) + (bestCents < now ? ', less than ' : ', the same as ') + what + ' (' + money(p.charged) + ')' + (more > 0 ? ', and you get ' + more + ' more ' + (more === 1 ? 'sign' : 'signs') : '') + '.';\n    var b = document.createElement('button'); b.type = 'button'; b.className = 'abb-pack-nudge__btn'; b.setAttribute('data-abb-pack-switch', String(best));\n    b.textContent = 'Switch to the ' + best + '-pack';\n    b.addEventListener('click', function () { set({ pack: best, qty: 1 }); toast('Switched to a pack of ' + best + ' signs: ' + money(bestCents / 100) + '.'); });\n    el.appendChild(t); el.appendChild(b);\n  }\n  // the custom size inputs (width x height, inches): built once, kept in the size group's note\n  var customBox = null;\n  function customPanel() {\n    if (customBox) return customBox;\n    var d = document.createElement('div'); d.className = 'abb-custom'; d.setAttribute('data-abb-custom', ''); d.setAttribute('data-abb-panel-keep', '');\n    d.innerHTML = '<div class=\"abb-custom__row\"><label class=\"abb-custom__f\"><span>Width (in)</span><input class=\"abb-input\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"6\" data-abb-cw aria-label=\"Width in inches\"></label>' +\n      '<span class=\"abb-custom__x\" aria-hidden=\"true\">x</span><label class=\"abb-custom__f\"><span>Height (in)</span><input class=\"abb-input\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"6\" data-abb-ch aria-label=\"Height in inches\"></label>' +\n      '<button type=\"button\" class=\"abb-mini abb-custom__swap\" data-abb-swap aria-label=\"Swap width and height\">Swap</button></div>' +\n      '<p class=\"abb-custom__lim\" data-abb-size-lim></p><p class=\"abb-custom__msg\" data-abb-size-msg role=\"status\" hidden></p>';\n    var wIn = d.querySelector('[data-abb-cw]'), hIn = d.querySelector('[data-abb-ch]'), tm = null;\n    var go = function (quiet) { setCustom(wIn.value, hIn.value, quiet); };\n    [wIn, hIn].forEach(function (el) {\n      el.addEventListener('input', function () { clearTimeout(tm); tm = setTimeout(function () { go(true); }, 450); });\n      el.addEventListener('change', function () { clearTimeout(tm); go(true); });\n      el.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); clearTimeout(tm); go(true); } });\n    });\n    d.querySelector('[data-abb-swap]').addEventListener('click', function () { var c = cfg(); setCustom(c.h, c.w, true); });\n    customBox = d; return d;\n  }\n  // the custom grommet / hole placement (like the supplier's dialog): built once, kept in the holes group's note\n  var chBox = null;\n  function chPanel() {\n    if (chBox) return chBox;\n    var d = document.createElement('div'); d.className = 'abb-chp'; d.setAttribute('data-abb-chpanel', ''); d.setAttribute('data-abb-panel-keep', '');\n    d.innerHTML = '<fieldset class=\"abb-chp__edge\"><legend>Top edge</legend>' +\n      '<label><input type=\"radio\" name=\"abbChTop\" value=\"corners\" data-abb-ch-top> Corner <span data-abb-ch-noun>grommets</span>, <span class=\"abb-chp__mw\">edge margin <input class=\"abb-input abb-chp__m\" type=\"number\" step=\"0.25\" min=\"0.25\" data-abb-ch-topm aria-label=\"Top edge margin in inches\"> in</span></label>' +\n      '<label><input type=\"radio\" name=\"abbChTop\" value=\"none\" data-abb-ch-top> No corner <span data-abb-ch-noun>grommets</span></label>' +\n      '<label><input type=\"checkbox\" data-abb-ch-topc> Center <span data-abb-ch-one>grommet</span></label></fieldset>' +\n      '<fieldset class=\"abb-chp__edge\"><legend>Bottom edge</legend>' +\n      '<label><input type=\"radio\" name=\"abbChBot\" value=\"same\" data-abb-ch-bot> Same as top</label>' +\n      '<label><input type=\"radio\" name=\"abbChBot\" value=\"corners\" data-abb-ch-bot> Corner <span data-abb-ch-noun>grommets</span>, <span class=\"abb-chp__mw\">edge margin <input class=\"abb-input abb-chp__m\" type=\"number\" step=\"0.25\" min=\"0.25\" data-abb-ch-botm aria-label=\"Bottom edge margin in inches\"> in</span></label>' +\n      '<label><input type=\"radio\" name=\"abbChBot\" value=\"none\" data-abb-ch-bot> No corner <span data-abb-ch-noun>grommets</span></label>' +\n      '<label><input type=\"checkbox\" data-abb-ch-botc> Center <span data-abb-ch-one>grommet</span></label></fieldset>';\n    var upd = function () {\n      var t = d.querySelector('[data-abb-ch-top]:checked'), b = d.querySelector('[data-abb-ch-bot]:checked');\n      CH.top = t ? t.value : 'corners'; CH.bot = b ? b.value : 'same';\n      CH.topM = num(d.querySelector('[data-abb-ch-topm]').value, 1); CH.botM = num(d.querySelector('[data-abb-ch-botm]').value, 1);\n      CH.topC = d.querySelector('[data-abb-ch-topc]').checked; CH.botC = d.querySelector('[data-abb-ch-botc]').checked;\n      S.artVer++; render(); changedView();\n    };\n    d.addEventListener('change', upd);\n    d.addEventListener('input', function (e) { if (e.target && e.target.type === 'number') upd(); });\n    chBox = d; return d;\n  }\n  function syncChPanel(c) {\n    var d = chPanel(), n = c.customHoles === 'grommet' ? 'grommets' : 'holes', one = c.customHoles === 'grommet' ? 'grommet' : 'hole';\n    $$('[data-abb-ch-noun]', d).forEach(function (x) { x.textContent = n; });\n    $$('[data-abb-ch-one]', d).forEach(function (x) { x.textContent = one; });\n    $$('[data-abb-ch-top]', d).forEach(function (x) { x.checked = x.value === CH.top; });\n    $$('[data-abb-ch-bot]', d).forEach(function (x) { x.checked = x.value === CH.bot; });\n    var tm = d.querySelector('[data-abb-ch-topm]'), bm = d.querySelector('[data-abb-ch-botm]');\n    if (document.activeElement !== tm) tm.value = String(CH.topM); if (document.activeElement !== bm) bm.value = String(CH.botM);\n    d.querySelector('[data-abb-ch-topc]').checked = !!CH.topC; d.querySelector('[data-abb-ch-botc]').checked = !!CH.botC;\n    d.querySelector('[data-abb-ch-botc]').disabled = CH.bot === 'same';\n  }\n  // one supplier option group (or the size list) into its slot\n  function renderGroup(slot, c, g) {\n    slot.hidden = false;\n    slot.setAttribute('data-abb-group', g.id);\n    var tEl = $('[data-abb-opt-title]', slot); if (tEl) tEl.textContent = g.label || 'Option';\n    var idx = slot.getAttribute('data-abb-optstep'), box = $('[data-abb-opt=\"' + idx + '\"]'), note = $('[data-abb-opt-note=\"' + idx + '\"]');\n    if (!box) return;\n    var isSize = g.role === 'size', vals = realVals(g), single = !isSize && vals.length < 2, nodes = [];\n    var on = isSize ? (valOf(g, c.sizeVal) || {}).v : c.sel[g.id];\n    g.values.forEach(function (v) {\n      if (v.hdr) { if (!single) { var h = document.createElement('span'); h.className = 'abb-opt-hdr'; h.textContent = v.label; nodes.push(h); } return; }\n      var cents, pick, data, sub = '', from = false;\n      if (isSize) {\n        cents = v.custom && c.custom ? (price(c).ok ? Math.round(price(c).charged * 100) : 0) : priceForSize(c, v);\n        pick = function () { pickSize(v.v); }; data = [g.id, v.v];\n        // the label already says \"(Pickup only)\"; Custom Size shows the price of its smallest size (6 x 6 in)\n        sub = v.pickup ? 'Printed in our shop' : (v.desc || '');\n        if (v.custom && !c.custom && cents > 0) from = true;\n      } else {\n        if (g.id === 'finish') { cents = priceForMat(c, v.v); pick = function () { pickMat(v.v); }; data = ['finish', v.v]; }\n        else { cents = priceWith(c, g, v); pick = function () { pickOpt(g.id, v.v); }; data = [g.id, v.v]; }\n        if (v.holes && v.holes.custom) { sub = 'Quote'; cents = -1; }\n        if (g.role === 'stake' && v.stake && c.pickupOnly) { sub = 'Not on shop-printed sheets'; cents = 0; }\n      }\n      // a size we can't make (custom inches out of range): no prices on the other rows, nothing greyed out\n      var priceTxt = cents > 0 ? (from ? 'from ' : '') + money(cents / 100) : (cents === -1 ? (isSize ? 'Type a size' : 'Request a quote') : (!c.ok ? '' : 'Call us'));\n      var html = '<span class=\"abb-opt__name\">' + esc(v.label) + '</span>' + (sub ? '<span class=\"abb-opt__sub\">' + esc(sub) + '</span>' : '') + (single ? '' : '<span class=\"abb-opt__price\">' + priceTxt + '</span>');\n      var b = optBtn({ chip: single, on: v.v === on, data: data, disabled: !single && cents === 0 && !(isSize && v.custom) && c.ok, html: html, pick: pick });\n      if (isSize && v.w) b.setAttribute('data-size', v.v);\n      if (v.pickup) b.classList.add('abb-opt--pickup');\n      nodes.push(b);\n    });\n    slot.classList.toggle('abb-step--fixed', single);\n    box.className = 'abb-opts ' + (single ? 'abb-opts--chips' : (isSize ? 'abb-opts--cards abb-opts--sizes' : 'abb-opts--two'));\n    fill(box, nodes);\n    if (isSize) {\n      var pnl = customPanel();\n      setNote(note, c.pickupOnly ? '' : (c.custom ? '' : ''), pnl);\n      pnl.querySelector('.abb-custom__row').hidden = !c.custom;\n      var wIn = $('[data-abb-cw]', pnl), hIn = $('[data-abb-ch]', pnl);\n      if (document.activeElement !== wIn) wIn.value = String(c.custom ? fmt(c.w) : fmt(c.w));\n      if (document.activeElement !== hIn) hIn.value = String(c.custom ? fmt(c.h) : fmt(c.h));\n      $('[data-abb-size-lim]', pnl).textContent = c.custom ? limitText(c.mat) : '';\n      $('[data-abb-size-lim]', pnl).hidden = !c.custom;\n      if (FOCUS_CW && c.custom) { FOCUS_CW = false; setTimeout(focusCustom, 600); }\n      var msg = $('[data-abb-size-msg]', pnl);\n      var mt = !c.ok ? c.sizeMsg + ' Need it anyway? Request a quote.' : (c.pickupOnly ? 'Pickup only at our Snohomish shop. This size is bigger than we can ship, so we print it in our shop and you pick it up (free).' : '');\n      msg.textContent = mt; msg.hidden = !mt; msg.setAttribute('data-level', !c.ok ? 'bad' : 'pickup');\n    } else if (g.role === 'holes' && c.customHoles) { syncChPanel(c); setNote(note, groupNote(c, g), chPanel()); }\n    else setNote(note, groupNote(c, g), null);\n  }\n  // acrylic: the price of the same order with another of the 3 acrylic items\n  function priceForMat(c, mat) { var p = price(cfg({ mat: mat })); return p.ok ? Math.round(p.charged * 100) : 0; }\n  function groupsShown(c) {\n    var out = [c.m.size];\n    if (c.card.mats.length > 1) out.push({ id: 'finish', label: 'Finish', role: 'finish', values: c.card.mats.filter(matOk).map(function (k) { return { v: k, label: MATS[k].finish || MATS[k].name }; }) });\n    return out.concat(c.m.groups);\n  }\n\n  function render() {\n    var c = cfg();\n    var p = price(c);\n    S.mat = c.mat; S.delivery = c.delivery;\n\n    // 1. material: one card per material with its icon and its lowest price\n    fill($('[data-abb-shapes]'), CARDS.map(function (cd) {\n      var lo = cardFrom(cd);\n      var html = famIcon(cd.id) + '<span class=\"abb-opt__name\">' + esc(cd.name).replace(/(\\S+-\\S+)/g, '<span class=\"abb-nw\">$1</span>') + '</span><span class=\"abb-opt__sub\">' + esc(cd.sub || '') + '</span><span class=\"abb-opt__price\">' + (lo > 0 ? 'from ' + money(lo / 100) : 'Call us') + '</span>';\n      return optBtn({ on: cd.id === c.cardId, html: html, data: ['mat', cd.id], pick: function () { pickFamily(cd.id); } });\n    }));\n\n    // 2. size, then the supplier's option groups for this material, in their order and wording (one slot each)\n    var slots = $$('[data-abb-optstep]'), gi = 0;\n    var shown = groupsShown(c), finishOn = null;\n    if (c.card.mats.length > 1) { finishOn = shown[1]; finishOn.dflt = c.mat; }\n    shown.forEach(function (g) {\n      var slot = slots[gi++]; if (!slot) return;\n      if (g.role === 'finish') { var cc = Object.assign({}, c, { sel: Object.assign({}, c.sel, { finish: c.mat }) }); renderGroup(slot, cc, g); }\n      else renderGroup(slot, c, g);\n    });\n    for (; gi < slots.length; gi++) { var ix = slots[gi].getAttribute('data-abb-optstep'), nt = $('[data-abb-opt-note=\"' + ix + '\"]'); slots[gi].hidden = true; slots[gi].removeAttribute('data-abb-group'); fill($('[data-abb-opt=\"' + ix + '\"]'), []); setNote(nt, '', null); }\n\n    // 3. back: the same art as the front, or a different back\n    var bWrap = $('[data-abb-sides-wrap]'); if (bWrap) bWrap.hidden = c.sides !== 2;\n    var sBox = $('[data-abb-sides]'); if (sBox) { sBox.hidden = true; fill(sBox, []); }\n    setText('[data-abb-sides-note]', c.sides === 2 ? 'Use the same art on both sides, or give the back its own.' : '');\n    var bmWrap = $('[data-abb-backmode-wrap]'); if (bmWrap) bmWrap.hidden = c.sides !== 2;\n    fill($('[data-abb-backmodes]'), c.sides === 2 ? [\n      optBtn({ chip: true, on: c.bm.sign !== 'different', data: ['backmode', 'same'], label: 'Same as front', pick: function () { pickBackMode('same'); } }),\n      optBtn({ chip: true, on: c.bm.sign === 'different', data: ['backmode', 'different'], label: 'Different back', pick: function () { pickBackMode('different'); } })\n    ] : []);\n    var rbWrap = $('[data-abb-rbackmode-wrap]'); if (rbWrap) rbWrap.hidden = true;\n\n    // 4. quantity: yard sign packs at the 6 yard sign sizes (coroplast), else 1 to 200 signs (coroplast 400)\n    var pkWrap = $('[data-abb-packs-wrap]'), many = c.yard && c.packs.length > 1;\n    if (pkWrap) pkWrap.hidden = !many;\n    fill($('[data-abb-packs]'), many ? c.packs.map(function (q) {\n      var x = price(cfg({ pack: q, qty: 1 })), each = x.ok ? x.charged : 0;\n      return optBtn({ on: q === c.pack, data: ['pack', q], disabled: !(each > 0), html: '<span class=\"abb-opt__name\">' + (q === 1 ? 'Single sign' : 'Pack of ' + q) + '</span><span class=\"abb-opt__price\">' + (each > 0 ? money(each) : 'Call us') + '</span>' + (q > 1 && each > 0 ? '<span class=\"abb-opt__sub\">' + money(each / q) + ' each</span>' : ''), pick: function () { pickPack(q); } });\n    }) : []);\n    var qIn = $('[data-abb-qty]'); if (qIn && document.activeElement !== qIn) qIn.value = String(c.qty);\n    var noun1 = c.mat === 'MAG' ? 'magnet' : 'sign', nounN = c.mat === 'MAG' ? 'magnets' : 'signs';\n    if (qIn) qIn.setAttribute('aria-label', c.pack > 1 ? 'Number of packs of ' + c.pack + ' signs' : 'Number of ' + nounN);\n    if (qIn) qIn.max = String(c.maxQty);\n    var qm = $('[data-abb-qty-minus]'), qp = $('[data-abb-qty-plus]'); if (qm) qm.disabled = c.qty <= 1; if (qp) qp.disabled = c.qty >= c.maxQty;\n    setText('[data-abb-qty-unit]', c.pack > 1 ? (c.qty === 1 ? 'pack' : 'packs') + ' of ' + c.pack : (c.qty === 1 ? noun1 : nounN));\n    var qnote = '';\n    if (!p.ok) qnote = p.quote === 'custom-holes' ? 'Custom ' + (c.customHoles === 'grommet' ? 'grommets' : 'holes') + ' are priced by hand. Send your sign to us for a quote.' : (p.quote === 'size' ? '' : 'We price this one by hand. Send it to us for a quote.');\n    else if (c.pack > 1) qnote = 'Quantity counts packs: ' + c.qty + ' ' + (c.qty === 1 ? 'pack' : 'packs') + ' of ' + c.pack + ' = ' + c.signs + ' signs, ' + money(p.each) + ' per pack. All signs in an order have the same art.';\n    else qnote = (c.qty > 1 ? c.qty + ' ' + nounN + ': ' + money(p.charged) + ' (' + money(p.charged / c.qty) + ' each). ' : money(p.charged) + ' per ' + noun1 + '. ') + 'All ' + nounN + ' in an order have the same art.';\n    // the yard sign it is sold as, and the lower price of a bigger size or quantity\n    if (p.ok && c.capped && p.yard) qnote = 'Priced as our ' + fmt(c.yardW) + ' x ' + fmt(c.yardH) + ' in yard sign; we cut yours to ' + sizeTxt(c.w, c.h) + '. ' + qnote;\n    if (p.ok && p.basis && p.basis.rule === 'bigger') {\n      var bs = Math.abs(p.basis.w - c.w) > 1e-9 || Math.abs(p.basis.h - c.h) > 1e-9, bq = p.basis.q !== c.signs, bsz = fmt(p.basis.w) + ' x ' + fmt(p.basis.h) + ' in';\n      var what = bq ? p.basis.q + ' ' + nounN + (bs ? ' at ' + bsz : '') : (c.signs === 1 ? 'a ' + bsz + ' ' + noun1 : c.signs + ' ' + nounN + ' at ' + bsz);\n      qnote = 'You pay the lower price of ' + what + ', which costs less. ' + qnote;\n    }\n    setText('[data-abb-qty-note]', qnote);\n    // one quote line under the quantity, in the material's own word (magnets / signs)\n    setText('[data-abb-quote-q]', (p.ok && c.qty >= c.maxQty ? 'More than ' + (c.yard ? c.maxSigns : c.maxQty) + ' ' + nounN : 'More ' + nounN) + ', or another size?');\n    packNudge(c, p);\n\n    // 5. delivery: free shipping or free pickup; sizes printed in our shop are pickup only\n    // both prices on the delivery choice (pickup is priced without shipping; magnets and aluminum signs: one price)\n    var pShip = c.pickupOnly ? null : (c.delivery === 'ship' ? p : price(cfg({ deliveryPick: 'ship' }))), pPick = c.delivery === 'pickup' ? p : price(cfg({ deliveryPick: 'pickup' }));\n    var dPrice = function (x) { return x && x.ok ? '<span class=\"abb-opt__price\">' + money(x.charged) + '</span>' : ''; };\n    fill($('[data-abb-delivery]'), c.pickupOnly ? [\n      optBtn({ on: true, data: ['delivery', 'pickup'], html: '<span class=\"abb-opt__name\">Pickup only at our Snohomish shop (free)</span><span class=\"abb-opt__sub\">' + esc(PICKUP) + '. This size is printed in our shop and can\\'t be shipped.</span>' + dPrice(pPick), pick: function () {} })\n    ] : [\n      optBtn({ on: c.delivery === 'ship', data: ['delivery', 'ship'], html: '<span class=\"abb-opt__name\">Ship free anywhere in the US</span><span class=\"abb-opt__sub\">Delivered to your door, free</span>' + dPrice(pShip), pick: function () { set({ delivery: 'ship', deliveryPick: 'ship' }); } }),\n      optBtn({ on: c.delivery === 'pickup', data: ['delivery', 'pickup'], html: '<span class=\"abb-opt__name\">Pick up in Snohomish</span><span class=\"abb-opt__sub\">' + esc(PICKUP) + (pPick && pPick.ok && pPick.mode === 'pickup' ? '. Lower price: no shipping cost' : '') + '</span>' + dPrice(pPick), pick: function () { set({ delivery: 'pickup', deliveryPick: 'pickup' }); } })\n    ]);\n    root.classList.toggle('abb-is-pickup', c.pickupOnly);\n\n    // number the steps that are showing\n    var n = 0;\n    $$('.abb-step').forEach(function (st) { var b = $('.abb-step__num', st); if (!b) return; if (!st.hidden) n++; b.textContent = String(n || 1); });\n\n    // price box: the total (= what checkout charges), then quantity x price; a quote when it can't be priced online\n    var tot = p.ok ? money(p.charged) : (p.quote === 'size' ? '-' : 'Quote');\n    setText('[data-abb-total]', tot); setText('[data-abb-mbar-total]', tot); setText('[data-abb-dbar-total]', tot);\n    var eachEl = $('[data-abb-each]');\n    eachEl.hidden = !p.ok || c.qty < 2;\n    eachEl.textContent = p.ok ? qtyLabel(c.qty, c) + (c.yard ? ' x ' + money(p.each) + (c.stake ? ' + H-stakes' : '') : ', ' + money(p.charged / c.qty) + ' each') : '';\n    [$('[data-abb-add]'), $('[data-abb-add-m]'), $('[data-abb-add-d]')].forEach(function (bt) { if (bt && !bt.disabled) bt.textContent = p.ok ? 'Add to cart' : 'Request a quote'; });\n    var specs = $('[data-abb-specs]');\n    if (specs) { specs.textContent = ''; specLines(c).forEach(function (l) { var li = document.createElement('li'); li.innerHTML = '<span>' + esc(l[0]) + '</span><span>' + esc(l[1]) + '</span>'; specs.appendChild(li); }); }\n    var dl = c.pickupOnly ? 'Pickup only at our Snohomish shop' : (c.delivery === 'pickup' ? 'Pickup at our Snohomish shop' : 'Free shipping anywhere in the US');\n    // no delivery line while the total is \"-\" (a size we can't make)\n    var noSize = !p.ok && p.quote === 'size';\n    setText('[data-abb-free]', noSize ? '' : dl + '. You approve your proof before checkout.');\n    $$('[data-abb-free]').forEach(function (el) { el.hidden = noSize; });\n    $$('[data-abb-dnote]').forEach(function (el) { el.textContent = c.pickupOnly ? 'Pickup only' : (c.delivery === 'pickup' ? 'Free pickup' : 'Free shipping'); });\n\n    // summary chips, the tip on the stage and the 3D tools\n    setText('[data-abb-chip-size]', sizeName(c) + ' ' + (c.m.short || 'sign'));\n    setText('[data-abb-chip-mat]', (c.sides === 2 ? 'Double sided' : 'Single sided') + (c.pickupOnly ? ', pickup only' : ''));\n    setText('[data-abb-chip-sides]', qtyLabel(c.qty, c));\n    var G = c.geo, tip = 'Keep text and logos inside the red line. No bleed needed: we print to the edge of the sign.';\n    if (G.corner > 0) tip += ' The dimmed corners are cut round.';\n    if (c.holes.length) { var hk = c.holes[0][3]; tip += hk === 'standoff' ? ' The silver circles are the standoffs.' : (hk === 'grommet' ? ' The gold rings are the grommets.' : ' Circles are the holes.'); }\n    if (c.flutes) tip += ' The flutes run ' + (c.flutes === 'vertical' ? 'up and down' : 'side to side (signs over 48 in wide)') + (c.stake ? ' (the H-stake slides into them).' : '.');\n    setText('[data-abb-tip]', tip);\n    setText('[data-abb-flip]', S.back ? 'Show front' : 'Show back');\n    root.setAttribute('data-abb-stand', c.key);\n    root.setAttribute('data-abb-mat', c.mat);\n    root.setAttribute('data-abb-piece-on', 'sign');\n\n    updateArtUi();\n    drawLayout();\n    sync3d();\n  }\n\n  var faceCv = {}, faceSent = {}, engSent = '', syncQueued = false;\n  // one face for the 3D view: the whole sign as printed (no guides)\n  function paintFaceCanvas(c, face) {\n    face = normFace(face);\n    var Wi = c.Wi, Hi = c.Hi, k = Math.min(40, 2048 / Math.max(Wi, Hi));\n    var w = Math.max(2, Math.round(Wi * k)), h = Math.max(2, Math.round(Hi * k));\n    var cv = faceCv[face] || (faceCv[face] = document.createElement('canvas'));\n    if (cv.width !== w || cv.height !== h) { cv.width = w; cv.height = h; }\n    var ctx = cv.getContext('2d');\n    ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, w, h);\n    ctx.setTransform(w / Wi, 0, 0, h / Hi, 0, 0);\n    drawFlat(ctx, c, Wi, Hi, face, false);\n    return cv;\n  }\n  function sendFace(face, cv) {\n    var key = cv ? cv.width + 'x' + cv.height + '|' + engSent : 'none|' + engSent;\n    if (faceSent[face] === key) return;\n    faceSent[face] = key;\n    eng.setFace(face, cv || null);\n  }\n  // the 3D sign (window.ArdorRigid3D, assets/ardor-rigid3d.js): material, acrylic item, size, sides, corner radius, the\n  // holes / grommets / standoffs [x, y, dia, kind] in sign inches, H-stake, board thickness (GatorFoam core colour), then the\n  // printed picture of each face (the back only on a 2-sided sign: the front art again, or its own art)\n  function sync3d() {\n    if (!eng) return;\n    var c = cfg(); if (!c.ok) return;\n    try {\n      var key = [c.mat, c.w, c.h, c.sides, c.corner, c.stake, c.thick, c.core, c.flutes, c.holes.map(function (x) { return x.join(','); }).join(';')].join('|');\n      if (key !== engSent) {\n        engSent = key;\n        eng.set({ mat: c.mat, card: c.cardId, finish: c.mat === 'GAT' ? (c.sel.material || '') : (c.m.finish ? c.mat : ''), w: c.w, h: c.h, sides: c.sides, corners: c.corner,\n          holes: c.holes.map(function (x) { return x.slice(); }), stake: c.stake, thickness: c.thick, core: c.core || '', flutes: c.flutes || null, pickupOnly: c.pickupOnly });\n      }\n      sendFace('front', paintFaceCanvas(c, 'front'));\n      sendFace('back', c.sides === 2 ? paintFaceCanvas(c, 'back') : null);\n      eng.refresh();\n    } catch (e) {}\n  }\n  // three.js, its orbit controls and assets/ardor-rigid3d.js (CONF.three, in order; about 600 KB) load after the page has\n  // painted: when the browser is idle (at most 3 s after load), or at once when the customer opens the 3D view or a proof\n  var load3dP = null;\n  function addScript(u) {\n    return new Promise(function (res, rej) { var sc = document.createElement('script'); sc.src = u; sc.async = false; sc.onload = function () { res(); }; sc.onerror = function () { rej(new Error('3d')); }; document.head.appendChild(sc); });\n  }\n  function load3d() {\n    if (!load3dP) load3dP = (CONF.three || []).reduce(function (q, u) { return q.then(function () { return window.ArdorRigid3D ? null : addScript(u); }); }, Promise.resolve())\n      .catch(function () {}).then(function () { if (!eng) startEngine(true); });\n    return load3dP;\n  }\n  function schedule3d() {\n    var go = function () { load3d(); };\n    var idle = function () { if (window.requestIdleCallback) window.requestIdleCallback(go, { timeout: 3000 }); else setTimeout(go, 1500); };\n    if (document.readyState === 'complete') idle(); else window.addEventListener('load', idle);\n    document.addEventListener('click', function (e) { var t = e.target && e.target.closest ? e.target.closest('[data-abx-mode=\"3d\"], [data-abx-hit], [data-abb-viewer]') : null; if (t) go(); }, true);\n  }\n  function ready3d(ms) { if (eng) return Promise.resolve(eng); return Promise.race([load3d().then(function () { return eng; }), new Promise(function (res) { setTimeout(function () { res(eng); }, ms || 6000); })]); }\n  function sync3dSoon() {\n    if (!eng || syncQueued) return;\n    syncQueued = true;\n    requestAnimationFrame(function () { syncQueued = false; sync3d(); });\n  }\n  function view3d(which) { if (eng) { try { eng.view(which); } catch (e) {} } }\n  function startEngine(loaded) {\n    if (!loaded && !window.ArdorRigid3D && (CONF.three || []).length) { schedule3d(); return; } // three.js loads after the page (b6)\n    var host = $('[data-abb-canvas]'), nogl = $('[data-abb-nogl]'), hint = $('[data-abb-hint]'), vw = $('[data-abb-viewer]');\n    try { eng = (window.ArdorRigid3D && host) ? window.ArdorRigid3D.create(host, { background: '#ffffff' }) : null; } catch (e) { eng = null; }\n    if (!eng) { if (nogl) nogl.hidden = false; if (hint) hint.hidden = true; return; }\n    host.addEventListener('pointerdown', function () { if (vw) vw.classList.add('is-dragging'); if (hint) hint.classList.add('is-gone'); });\n    var up = function () { if (vw) vw.classList.remove('is-dragging'); };\n    host.addEventListener('pointerup', up); host.addEventListener('pointercancel', up); host.addEventListener('pointerleave', up);\n    sync3d();\n  }\n\n  // ---------- proof sheet and print files ----------\n  // one face for the proof: its piece's whole template page with the guides\n  function proofCanvas(face, overlayOnly) {\n    var fk = normFace(face), c = cfg({ piece: pieceOf(fk) }), Wi = c.Wi, Hi = c.Hi;\n    var long = 1800, cw, ch;\n    if (Wi >= Hi) { cw = long; ch = Math.max(60, Math.round(long * Hi / Wi)); } else { ch = long; cw = Math.max(60, Math.round(long * Wi / Hi)); }\n    var cv = document.createElement('canvas'); cv.width = cw; cv.height = ch;\n    var ctx = cv.getContext('2d');\n    ctx.setTransform(cw / Wi, 0, 0, ch / Hi, 0, 0);\n    var drewArt = overlayOnly || paintFace(ctx, Wi, Hi, fk);\n    if (overlayOnly && hasLayers(layerFace(fk))) window.ArdorRigidLayers.paint(ctx, Wi, Hi, layerFace(fk));\n    if (!drewArt) {\n      ctx.fillStyle = '#F1EFEB'; ctx.fillRect(0, 0, Wi, Hi);\n      var G = faceGeo(c, fk);\n      ctx.save(); ctx.translate(G.bx + G.bw / 2, G.by + G.bh / 2); if (G.bh > G.bw * 1.6) ctx.rotate(-Math.PI / 2);\n      ctx.fillStyle = '#5E5A55'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n      ctx.font = '600 ' + Math.min(Math.min(G.bw, G.bh) * 0.16, Math.max(G.bw, G.bh) * 0.05) + 'px Arial, sans-serif';\n      ctx.fillText('Your artwork', 0, 0); ctx.restore();\n    }\n    var u = Math.max(Wi, Hi) / long; // inches per canvas pixel\n    drawGuides(ctx, c, Wi, Hi, fk, u * 2.4);\n    return cv;\n  }\n\n  function geomForArt(a, nw, nh, Wi, Hi) {\n    var r = a.rot || 0, ia = rot90(a) ? nh / nw : nw / nh, ba = Wi / Hi;\n    if (a.kind !== 'image' && !a.img) {\n      if (Math.abs(ia - ba) / ba < 0.01) return { x: 0, y: 0, w: Wi, h: Hi, rot: r };\n      var fw0 = Math.min(Wi, Hi * ia), fh0 = fw0 / ia;\n      return { x: (Wi - fw0) / 2, y: (Hi - fh0) / 2, w: fw0, h: fh0, rot: r, note: 'The uploaded PDF is a different shape than the sign template, so it was placed to fit, centered, with white around it.' };\n    }\n    var fillW = Math.max(Wi, Hi * ia), fitW = Math.min(Wi, Hi * ia);\n    var w = a.mode === 'fill' ? fillW : (a.mode === 'fit' ? fitW : a.rw * Wi);\n    var cx = a.mode === 'custom' ? a.rcx * Wi : Wi / 2, cy = a.mode === 'custom' ? a.rcy * Hi : Hi / 2, h = w / ia;\n    return { x: cx - w / 2, y: cy - h / 2, w: w, h: h, rot: r };\n  }\n\n  function loadPdfTool() {\n    if (window.ArdorRigidPDF) return Promise.resolve();\n    return new Promise(function (res, rej) {\n      var sc = document.createElement('script'); sc.src = CONF.pdfUrl; sc.async = true;\n      sc.onload = function () { window.ArdorRigidPDF ? res() : rej(new Error('pdf tool')); }; sc.onerror = function () { rej(new Error('pdf tool')); };\n      document.head.appendChild(sc);\n    });\n  }\n\n  function logoImage() {\n    var el = document.querySelector('.site-header__logo img, .header__logo img, header img');\n    var src = CONF.logoUrl || (el && (el.currentSrc || el.src));\n    if (!src) return Promise.resolve(null);\n    return fetch(src).then(function (r) { if (!r.ok) throw new Error('logo'); return r.blob(); }).then(function (bl) {\n      return new Promise(function (res) { var im = new Image(); im.onload = function () { res(im); }; im.onerror = function () { res(null); }; im.src = URL.createObjectURL(bl); });\n    }).catch(function () { return null; });\n  }\n\n  function placementText(a, c) {\n    if (!a || !a.img) return '';\n    var turn = a.rot === 90 ? ', turned 90 degrees right' : (a.rot === 270 ? ', turned 90 degrees left' : (a.rot === 180 ? ', turned upside down' : ''));\n    if (a.mode === 'fill') return (a.tpl ? 'Placed edge to edge (the file has the shape of the sign)' : 'Fill the sign (edges may crop)') + turn;\n    if (a.mode === 'fit') return 'Fit whole image' + turn + ', ' + bgText(a.bg);\n    var g = geom(a, c.Wi, c.Hi);\n    return 'Custom: art ' + fmt(g.w) + ' x ' + fmt(g.h) + ' in, top-left at ' + fmt(g.x) + ', ' + fmt(g.y) + ' in from the print page top-left' + turn + ', ' + bgText(a.bg);\n  }\n  function artName(f) { var a = ART[f]; return a ? a.name : (hasLayers(f) ? 'Text and clipart added in the designer' : ''); }\n  function artworkLabel() { return artName('front') || 'None'; }\n  function backLabel() { return S.backMode === 'different' ? (artName('back') || 'Different art') : 'Same as front'; }\n  // the proof legend: what the guides on this sign mean\n  function legendText(c) {\n    var out = '';\n    if (c.corner > 0) out += 'Dimmed corners: cut round (' + fmt(c.corner) + ' in radius). ';\n    if (c.holes.length) { var k = c.holes[0][3]; out += c.customHoles ? 'Dashed red circles: the custom ' + (k === 'grommet' ? 'grommets' : 'holes') + ' you marked (we confirm them with your quote). ' : (k === 'standoff' ? 'Silver circles: the standoffs. ' : (k === 'grommet' ? 'Gold rings: the grommets. ' : 'Circles: the holes. ')); }\n    return out + 'Black line: the edge of the sign (no bleed). Dashed red line: keep text and logos inside it.';\n  }\n  // the background colour behind fitted art, in words (no \"#FFFFFF\" on the proof)\n  function bgText(hex) {\n    var h = String(hex || '').trim().toUpperCase();\n    if (!h || h === '#FFFFFF' || h === '#FFF' || h === 'WHITE') return 'white background';\n    if (h === '#000000' || h === '#000' || h === 'BLACK') return 'black background';\n    if (h === 'TRANSPARENT' || h === 'NONE') return 'no background';\n    return 'background color ' + h;\n  }\n  function placementFor(f) { return placementText(ART[f], cfg()); }\n  function printSizeText(c) { return sizeTxt(c.w, c.h) + ' per printed side, at the ordered size (no bleed, no crop marks)' + (c.m.spotWhitePng ? '; plus a PNG with a transparent background (needed for spot white)' : ''); }\n  function proofSpecs(c) {\n    var out = specLines(c).filter(function (l) { return l[0] !== 'Delivery' && l[0] !== 'Quantity'; });\n    out.push(['Options', optText(c)]);\n    out.push(['Quantity', qtyLabel(c.qty, c)], ['Delivery', deliveryLabel(c)]);\n    out.push(['Artwork', artworkLabel()]);\n    var pl = placementFor('front'); if (pl) out.push(['Placement', pl]);\n    if (c.sides === 2) out.push(['Back', backLabel()]);\n    if (c.sides === 2 && c.bm.sign === 'different') { var pb = placementFor('back'); if (pb) out.push(['Back placement', pb]); }\n    out.push(['Print file', printSizeText(c)]);\n    var added = layerSummary(c); if (added) out.push(['Added in the designer', added]);\n    var notes = ($('[data-abb-notes]').value || '').trim(); if (notes) out.push(['Notes', notes]);\n    return out;\n  }\n\n  function proofViews(c) {\n    var out = [];\n    try { sync3d(); } catch (e) {}\n    if (!eng || typeof eng.snapshot !== 'function') return out;\n    [['home', 'From the front'], (c.sides === 2 ? ['back', 'From the back'] : ['side', 'From the side'])].forEach(function (v) {\n      try { var cv = eng.snapshot(1000, 1030, v[0]); if (cv) out.push({ canvas: cv, caption: v[1] }); } catch (e) {}\n    });\n    return out;\n  }\n  function proofSheet(P, c, mode, o) {\n    var PS = window.ArdorProofSheet;\n    if (!PS || typeof PS.build !== 'function') return P.buildProof(o);\n    o.noun = c.qty * c.pack > 1 ? (c.mat === 'MAG' ? 'magnets' : 'signs') : (c.mat === 'MAG' ? 'magnet' : 'sign'); o.preview = mode === 'preview'; o.views = proofViews(c);\n    return PS.build(o).catch(function () { return P.buildProof(o); });\n  }\n  // Spot White acrylic: the supplier also needs a PNG with a transparent background (white ink goes under every painted\n  // pixel). The art and the designer layers at 150 pixels per inch (less on very big signs, so phones can draw it), with\n  // NO background colour behind the art. A JPG has no transparency, so it stays a solid rectangle (said in the note).\n  function pngFace(c, f, ppiWant) {\n    var Wi = c.Wi, Hi = c.Hi, ios = /iP(hone|ad|od)/.test(navigator.userAgent || '') || (/Macintosh/.test(navigator.userAgent || '') && navigator.maxTouchPoints > 1);\n    var maxPx = ios ? 16.7e6 : 40e6, ppi = ppiWant || 150;\n    if (Wi * Hi * ppi * ppi > maxPx) ppi = Math.floor(Math.sqrt(maxPx / (Wi * Hi)));\n    var cw = Math.max(2, Math.round(Wi * ppi)), ch = Math.max(2, Math.round(Hi * ppi));\n    var cv = document.createElement('canvas'); cv.width = cw; cv.height = ch;\n    var ctx = cv.getContext('2d'); ctx.setTransform(cw / Wi, 0, 0, ch / Hi, 0, 0);\n    var a = artFor(f), lf = layerFace(f);\n    if (a && a.img) { var g = geomForArt(a, a.natW, a.natH, Wi, Hi); drawRot(ctx, a.img, g); }\n    if (hasLayers(lf)) window.ArdorRigidLayers.paint(ctx, Wi, Hi, lf);\n    return new Promise(function (res, rej) { cv.toBlob(function (b) { if (!b) return rej(new Error('png')); res({ blob: b, ppi: ppi, w: cw, h: ch, jpg: !!(a && a.kind === 'image' && /jpe?g/i.test((a.file && a.file.type) || a.name || '')), preview: !!(a && a.kind !== 'image') }); }, 'image/png'); });\n  }\n  function buildFiles(c, approval, proofMode) {\n    // the 3D views on the proof: wait for the 3D viewer (it loads after the page), at most 6 s\n    return loadPdfTool().then(function () { return ready3d(6000); }).then(function () {\n      var P = window.ArdorRigidPDF;\n      var faces = printedFaces(c);\n      var out = { notes: [], proof: null, png: {} };\n      faces.forEach(function (f) { out[f] = null; });\n      // the file used for vector drawing: the PDF/AI itself, or the PDF made from an EPS\n      var vectorArt = function (a) {\n        if (!a || a.kind === 'image') return null;\n        if (a.src === 'eps' && a.vectorPdf) return { file: new File([a.vectorPdf], 'artwork.pdf', { type: 'application/pdf' }), name: 'artwork.pdf' };\n        if (a.src === 'pdf' || a.src === 'ai' || (!a.src && (/\\.(pdf|ai)$/i.test(a.name) || /pdf/i.test(a.file.type || '')))) return a;\n        return null;\n      };\n      // turned PDF/AI art shows on the proof from its drawn preview (the shared proof sheet places vector art unturned)\n      var mkProofFace = function (label, f, a) {\n        var Wi = c.Wi, Hi = c.Hi;\n        var va = a && !a.rot ? vectorArt(a) : null;\n        return { label: label, canvas: proofCanvas(f, !!va), fallback: va ? proofCanvas(f, false) : null, wIn: Wi, hIn: Hi, wLabel: fmt(Wi) + ' in', hLabel: fmt(Hi) + ' in', underlay: va ? { art: va, bg: a.bg || '#FFFFFF', geomFor: function (nw, nh) { return geomForArt(a, nw, nh, Wi, Hi); } } : null };\n      };\n      var pfaces = faces.map(function (f) { return mkProofFace(proofFaceLabel(c, f), f, ART[f]); });\n      var date = (approval && approval.when) || stampLabel(new Date());\n      var many = c.qty * c.pack > 1;\n      var proofP = logoImage().then(function (logo) {\n        return proofSheet(P, c, proofMode, {\n          logo: logo, title: 'Ardor Rigid Sign Proof', panelTitle: (c.mat === 'MAG' ? (many ? 'Your magnets' : 'Your magnet') : (many ? 'Your signs' : 'Your sign')) + (c.pickupOnly ? ' (pickup only)' : ''), sideBySide: false,\n          legend: legendText(c) + ' Print page (width x height): ' + printSizeText(c) + '.',\n          approval: approval || null, date: date, faces: pfaces, specs: proofSpecs(c),\n          footer: 'Ardor Printing | 12531 Old Snohomish Monroe Rd., Snohomish, WA 98290 | (425) 629-0796 | ardorprinting.com'\n        });\n      }).catch(function () { return null; });\n      var printable = function (f) { var a = ART[f]; return a ? (a.kind === 'image' || !!vectorArt(a)) : hasLayers(layerFace(f)); };\n      var printFail = function (f, e) {\n        var m = String((e && e.message) || 'error'), a = ART[f], what = a && /\\.(pdf|ai)$/i.test(a.name || '') ? 'the uploaded ' + (/\\.ai$/i.test(a.name) ? 'AI' : 'PDF') + ' file' : 'the artwork';\n        var why = /^filters?\\b/.test(m) ? what + ' uses a PDF compression we can\\'t re-pack automatically (' + m + ')' : m === 'encrypted' ? what + ' is password protected' : m === 'not a PDF' ? what + ' is not a readable PDF' : 'it could not be made automatically (' + m + ')';\n        return 'No print file for the ' + faceName(f).toLowerCase() + ': ' + why + '. Use the original artwork file.';\n      };\n      var printP = Promise.resolve();\n      // print files: one PDF page per printed face at the ordered size (no bleed, no marks); Spot White acrylic also a PNG\n      if (proofMode === 'preview') { /* PDF button: the proof only, no print files */ }\n      else {\n        faces.forEach(function (f) { if (!printable(f)) out.notes.push(ART[f] ? 'No print file for the ' + faceName(f).toLowerCase() + ': we can\\'t make a picture of ' + (ART[f].name || 'this file') + '. Use the original artwork file.' : 'No print file for the ' + faceName(f).toLowerCase() + ': it has no design.'); });\n        if (faces.some(function (f) { return ART[f] && ART[f].src === 'eps'; })) out.notes.push('The customer uploaded an EPS. The print file was made from it by the online converter, so check it against the original EPS before printing.');\n        var keep = function (r) { r.notes.forEach(function (n) { if (out.notes.indexOf(n) < 0) out.notes.push(n); }); return r.blob; };\n        var chain = Promise.resolve();\n        faces.filter(printable).forEach(function (f) {\n          chain = chain.then(function () {\n            var Wi = c.Wi, Hi = c.Hi;\n            // the sign at its ordered size, art to the edge, no guides, no bleed. buildPrint takes feet.\n            var mkJob = function (a) {\n              if (a.rotated && out.notes.indexOf(ROT_NOTE) < 0) out.notes.push(ROT_NOTE);\n              return { title: 'Ardor Rigid Sign Print File', stamp: date, W: Wi / 12, H: Hi / 12, holes: [], dotIn: 0.125, faces: [{ art: a.kind === 'image' ? { file: a.printFile || a.file, name: a.name, kind: 'image' } : vectorArt(a), bg: a.bg || '#FFFFFF', geomFor: function (nw, nh) { return geomForArt(a, nw, nh, Wi, Hi); } }] };\n            };\n            return layerJob(mkJob, ART[f], f, Wi, Hi, out.notes).then(function (j) { return P.buildPrint(j, false); }).then(function (r) { out[f] = keep(r); });\n          }).catch(function (e) { out[f] = null; out.notes.push(printFail(f, e)); });\n          if (c.m.spotWhitePng) chain = chain.then(function () {\n            return pngFace(c, f).then(function (x) { return x.blob.size > 12 * 1024 * 1024 ? pngFace(c, f, Math.max(72, Math.floor(x.ppi * 0.7))) : x; }).then(function (x) {\n              out.png[f] = x.blob;\n              out.notes.push('Spot white PNG (' + faceName(f).toLowerCase() + '): ' + x.w + ' x ' + x.h + ' px at ' + x.ppi + ' ppi, transparent where nothing is printed' + (x.jpg ? '; the uploaded JPG has no transparency, so its whole rectangle gets white ink' : '') + (x.preview ? '; made from the preview of the uploaded file' : '') + '.');\n            }).catch(function () { out.notes.push('No spot white PNG for the ' + faceName(f).toLowerCase() + ': make it from the original artwork (transparent background).'); });\n          });\n        });\n        printP = chain;\n      }\n      return Promise.all([proofP, printP]).then(function (r) { out.proof = r[0]; out.faces = faces; return out; });\n    });\n  }\n\n  // ---------- messages, tracking, stamps ----------\n  function toast(msg) {\n    var t = $('[data-abb-toast]'); if (!t) return;\n    t.textContent = msg; t.hidden = false;\n    clearTimeout(toast._t); toast._t = setTimeout(function () { t.hidden = true; }, 5000);\n  }\n  function showErr(msg) { var e = $('[data-abb-error]'); if (!e) return; e.textContent = msg; e.hidden = !msg; }\n\n  function track(name, data) {\n    try { (window.dataLayer = window.dataLayer || []).push(Object.assign({ event: name }, data)); } catch (e) {}\n    // disabled Oct 18 2026 \u2013 duplicate of Shopify Google & YouTube / Facebook app event (add_to_cart / AddToCart). The generate_lead / Lead branch fired on the \"Go to the quote form\" link click, not on a sent lead; the lead itself is the HubSpot form submit, which GTM already sends as generate_lead + the Google Ads quote conversion. The dataLayer push above stays. Undo: remove \"// \" from the next 2 lines.\n    // try { if (window.gtag) window.gtag('event', name === 'ardor_rigid_added_to_cart' ? 'add_to_cart' : 'generate_lead', { currency: 'USD', value: data.value }); } catch (e) {}\n    // try { if (window.fbq) window.fbq('track', name === 'ardor_rigid_added_to_cart' ? 'AddToCart' : 'Lead', { currency: 'USD', value: data.value }); } catch (e) {}\n  }\n\n  function stampLabel(d) { return d.toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', timeZoneName: 'short' }); }\n  function stampFile(d) {\n    var pad = function (n) { return String(n).padStart(2, '0'); }, h = d.getHours(), ap = h >= 12 ? 'PM' : 'AM', h12 = h % 12 || 12;\n    return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) + ' ' + h12 + '-' + pad(d.getMinutes()) + ' ' + ap;\n  }\n\n  // ---------- proof approval and signature ----------\n  var approveCtl = null;\n  var sigPad = { ink: false, drawing: false, lx: 0, ly: 0, mode: 'draw' };\n  var SIG_FONT = '\"Dancing Script\", \"Segoe Script\", \"Snell Roundhand\", \"Brush Script MT\", cursive';\n  function loadSigFont() {\n    if (document.querySelector('link[data-abb-sig-font]')) return;\n    var l = document.createElement('link'); l.rel = 'stylesheet'; l.setAttribute('data-abb-sig-font', '');\n    l.href = 'https://fonts.googleapis.com/css2?family=Dancing+Script:wght@600&display=swap';\n    document.head.appendChild(l);\n  }\n  function setSigMode(mode) {\n    sigPad.mode = mode;\n    $$('[data-abb-sig-mode]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-abb-sig-mode') === mode ? 'true' : 'false'); });\n    $('[data-abb-sig-type]').hidden = mode !== 'type';\n    $('[data-abb-sig-draw]').hidden = mode !== 'draw';\n    if (mode === 'draw') sizeSig();\n    if (mode === 'type') {\n      var t = $('[data-abb-sig-text]'); if (!t.value) t.value = ($('[data-abb-ap-name]').value || '').trim();\n      $('[data-abb-sig-preview]').textContent = t.value;\n    }\n  }\n  function typedSigCanvas(text) {\n    var cv = document.createElement('canvas'); cv.width = 1000; cv.height = 260;\n    var ctx = cv.getContext('2d'); var size = 120;\n    ctx.font = '600 ' + size + 'px ' + SIG_FONT;\n    while (ctx.measureText(text).width > 940 && size > 30) { size -= 6; ctx.font = '600 ' + size + 'px ' + SIG_FONT; }\n    ctx.fillStyle = '#111111'; ctx.textBaseline = 'middle'; ctx.fillText(text, 30, 140);\n    return cv;\n  }\n  function sizeSig() {\n    var cv = $('[data-abb-sig]'); var dpr = Math.min(2, window.devicePixelRatio || 1);\n    cv.width = Math.max(200, Math.round(cv.clientWidth * dpr)); cv.height = Math.round(150 * dpr);\n    var ctx = cv.getContext('2d'); ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    ctx.lineCap = 'round'; ctx.lineJoin = 'round'; ctx.lineWidth = 2.6; ctx.strokeStyle = '#111111';\n    sigPad.ink = false;\n  }\n  function bindSig() {\n    var cv = $('[data-abb-sig]');\n    var pos = function (e) { var r = cv.getBoundingClientRect(); return [e.clientX - r.left, e.clientY - r.top]; };\n    cv.addEventListener('pointerdown', function (e) { sigPad.drawing = true; var p = pos(e); sigPad.lx = p[0]; sigPad.ly = p[1]; try { cv.setPointerCapture(e.pointerId); } catch (er) {} e.preventDefault(); });\n    cv.addEventListener('pointermove', function (e) {\n      if (!sigPad.drawing) return;\n      var p = pos(e), ctx = cv.getContext('2d');\n      ctx.beginPath(); ctx.moveTo(sigPad.lx, sigPad.ly); ctx.lineTo(p[0], p[1]); ctx.stroke();\n      sigPad.lx = p[0]; sigPad.ly = p[1]; sigPad.ink = true;\n      $('.abb-sig').classList.remove('is-missing');\n    });\n    var end = function () { sigPad.drawing = false; };\n    cv.addEventListener('pointerup', end); cv.addEventListener('pointercancel', end);\n    $('[data-abb-sig-clear]').addEventListener('click', function () { sizeSig(); });\n  }\n  function closeApproval(result) {\n    var dlg = $('[data-abb-approve]');\n    if (dlg.open && dlg.close) dlg.close(); else dlg.removeAttribute('open');\n    var ctl = approveCtl; approveCtl = null;\n    if (!ctl) return;\n    if (result) ctl.resolve(result); else ctl.reject({ cancel: true });\n  }\n  function openApproval(c) {\n    return new Promise(function (resolve, reject) {\n      approveCtl = { resolve: resolve, reject: reject };\n      var box = $('[data-abb-approve-proof]'); box.textContent = '';\n      var backDiff = c.sides === 2 && S.backMode === 'different';\n      var faces = printedFaces(c).map(function (f) { return [proofFaceLabel(c, f), f, ART[f]]; });\n      faces.forEach(function (f) {\n        var cv = proofCanvas(f[1], false);\n        var fig = document.createElement('figure'); fig.className = 'abb-approve__fig';\n        var im = new Image(); im.alt = f[0] + ' of your sign proof'; im.src = cv.toDataURL('image/jpeg', 0.86);\n        var cap = document.createElement('figcaption');\n        var isFile = f[2] && f[2].kind !== 'image';\n        cap.textContent = f[0] + ': ' + pieceSizeLabel(c, pieceOf(f[1])) + (isFile ? '. We print from your original file (' + f[2].name + ').' : '');\n        fig.appendChild(im); fig.appendChild(cap); box.appendChild(fig);\n      });\n      var ul = $('[data-abb-approve-specs]'); ul.textContent = '';\n      proofSpecs(c).forEach(function (l) { var li = document.createElement('li'); li.innerHTML = '<span>' + esc(l[0]) + '</span><span>' + esc(l[1]) + '</span>'; ul.appendChild(li); });\n      $('[data-abb-approve-error]').hidden = true;\n      $('[data-abb-ap-colors]').checked = false;\n      var dlg = $('[data-abb-approve]');\n      loadSigFont();\n      if (dlg.showModal) dlg.showModal(); else dlg.setAttribute('open', '');\n      var coarse = window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\n      setSigMode(coarse ? 'draw' : 'type');\n    });\n  }\n  function submitApproval(e) {\n    var PL = window.ArdorProofLater; if (PL && PL.on() && !(window.ArdorArtLink && window.ArdorArtLink.emailChosen(root))) { e.preventDefault(); var plr = PL.approve(root); if (plr) closeApproval(plr); return; } // DSN Oct 25 2026: one approval box now; name + typed signature in the cart, email + phone at checkout\n    e.preventDefault();\n    var err = $('[data-abb-approve-error]'), msgs = [];\n    var name = ($('[data-abb-ap-name]').value || '').trim(), email = ($('[data-abb-ap-email]').value || '').trim(), phone = ($('[data-abb-ap-phone]').value || '').trim();\n    if (name.length < 2) msgs.push('your full name');\n    if (!/^\\S+@\\S+\\.\\S+$/.test(email)) msgs.push('a valid email');\n    if ((phone.match(/\\d/g) || []).length < 7) msgs.push('a phone number');\n    var typed = ($('[data-abb-sig-text]').value || '').trim();\n    if (sigPad.mode === 'draw' && !sigPad.ink) { msgs.push('your signature'); $('.abb-sig').classList.add('is-missing'); }\n    if (sigPad.mode === 'type' && typed.length < 2) { msgs.push('your typed signature'); $('[data-abb-sig-type]').classList.add('is-missing'); }\n    if (!$('[data-abb-ap-colors]').checked) msgs.push('a check in the color box');\n    if (msgs.length) { err.textContent = 'Please add ' + (msgs.length > 1 ? msgs.slice(0, -1).join(', ') + ' and ' + msgs[msgs.length - 1] : msgs[0]) + '.'; err.hidden = false; return; }\n    var at = new Date(), when = stampLabel(at), mode = sigPad.mode;\n    var fontReady = (mode === 'type' && document.fonts && document.fonts.load) ? document.fonts.load('600 60px \"Dancing Script\"').catch(function () {}) : Promise.resolve();\n    fontReady.then(function () {\n      var copy;\n      if (mode === 'type') copy = typedSigCanvas(typed);\n      else { var src = $('[data-abb-sig]'); copy = document.createElement('canvas'); copy.width = src.width; copy.height = src.height; copy.getContext('2d').drawImage(src, 0, 0); }\n      closeApproval({ name: name, email: email, phone: phone, when: when, at: at, sig: copy, method: mode === 'type' ? 'typed' : 'drawn', statements: ['I understand printed colors may vary slightly from what I see on my screen.', 'I approve this proof for printing as shown.'] });\n    });\n  }\n\n  // ---------- cart ----------\n  // Shipped sizes and sizes printed in our shop: the total goes in as whole-dollar \"ladder\" lines of a hidden price product\n  // (custom-rigid-sign-price; sizes printed in our shop: custom-rigid-sign-pickup-price, in a pickup-only shipping\n  // profile), the rung at or just above the total, so checkout charges exactly the price shown. Line 1 (quantity 1, or n\n  // top rungs) carries every property, the signed proof and the print files; a rest line (totals above the top rung) carries\n  // the order reference. Coroplast that fits a yard sign size: line 1 = the yard sign designer's pack variant of the yard\n  // size it is sold as (quantity = packs; the real cut size in its properties), plus its H-stake line (one per sign) and\n  // grommets as a ladder line. Pickup-priced orders (no shipping in the price) go on the pickup-only price product. Extra lines go in first; if line 1 then fails they\n  // are taken out again, so the cart never holds part of an order.\n  function setupMsg() { return 'Online ordering for this sign is being set up. Call ' + PHONE + ' or request a quote.'; }\n  var mixOk = false;\n  function cartJson() { return fetch('/cart.js', { credentials: 'same-origin', headers: { Accept: 'application/json' } }).then(function (r) { return r.ok ? r.json() : null; }).catch(function () { return null; }); }\n  function addItems(items) {\n    return fetch(CONF.cartAddUrl || '/cart/add.js', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ items: items }) })\n      .then(function (r) { return r.json().catch(function () { return {}; }).then(function (j) { if (!r.ok) throw new Error((j && j.description) || 'We couldn\\'t add this to your cart. Please try again, or request a quote.'); return j; }); });\n  }\n  function removeKeys(keys) {\n    var ch = Promise.resolve();\n    keys.forEach(function (k) { ch = ch.then(function () { return fetch('/cart/change.js', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ id: k, quantity: 0 }) }).catch(function () {}); }); });\n    return ch;\n  }\n  // does this sign mix pickup-only (pickup-priced) and shipped items in the cart?\n  function mixWith(cart, c, p) {\n    p = p || price(c);\n    var items = (cart && cart.items) || [], ph = (CONF.ladder && CONF.ladder.pickupHandle) || 'custom-rigid-sign-pickup-price';\n    var hasPickup = items.some(function (it) { return it.handle === ph; }), hasShip = items.some(function (it) { return it.handle !== ph && it.requires_shipping !== false; });\n    return p.ladder === 'pickup' ? hasShip : hasPickup;\n  }\n  function ladderId(rung, pickup) {\n    var L = LADDER && (pickup ? LADDER.pickup : LADDER.shipped);\n    var id = L && L.ids ? L.ids[rung] : null;\n    if (!id || LADDER.rungs[rung] !== RUNGS[rung]) throw new Error(setupMsg());\n    return id;\n  }\n\n  function addToCart() {\n    showErr('');\n    var c = cfg(); var p = price(c);\n    if (!c.ok || !p.ok) { openQuote(); return; }\n    var faces = printedFaces(c);\n    for (var i = 0; i < faces.length; i++) {\n      var f = faces[i];\n      if (ART[f] || hasLayers(f)) continue;\n      goFace(f);\n      showErr(f === 'front' ? 'Your sign is blank: upload your artwork, pick a template or add text first.' : 'The back of your sign is blank: add a design, or choose \"Same as front\".');\n      return;\n    }\n    var btns = [$('[data-abb-add]'), $('[data-abb-add-m]'), $('[data-abb-add-d]')].filter(Boolean);\n    btns.forEach(function (b) { b.disabled = true; b.textContent = 'Adding\u2026'; });\n    var done = function () { btns.forEach(function (b) { b.disabled = false; b.textContent = 'Add to cart'; }); };\n    var approval = null, emailProof = false, ref = 'RS-' + Date.now().toString(36).toUpperCase().slice(-7);\n    var needLadder = p.lines.some(function (l) { return l.kind === 'ladder' || l.kind === 'grommet'; });\n    var waits = FACES.map(function (k) { return ART[k]; }).filter(function (x) { return x && x.ready; }).map(function (x) { return x.ready; });\n    Promise.all([Promise.all(waits), needLadder ? loadLadder() : null, cartJson()]).then(function (r) {\n      if (mixWith(r[2], c, p) && !mixOk) { mixOk = true; var e = new Error('Orders with pickup signs are picked up at our Snohomish shop. ' + (p.ladder === 'pickup' ? 'Your cart already has items we ship, so the whole order will be picked up in Snohomish.' : 'Your cart already has a pickup sign, so the whole order will be picked up in Snohomish.') + ' Tap Add to cart again to go on, or check out the other items first.'); e.mix = true; throw e; }\n      p.lines.forEach(function (l) { if (l.kind === 'yard' && (!l.id || !l.available)) throw new Error(setupMsg()); if (l.kind === 'stake' && (!l.id || !l.available)) throw new Error(setupMsg()); });\n      emailProof = needsEmailProof();\n      return emailProof ? null : openApproval(c);\n    }).then(function (ap) {\n      approval = ap;\n      btns.forEach(function (b) { b.textContent = 'Saving your proof\u2026'; });\n      return buildFiles(c, approval).then(function (files) { return fitUpload(c, files, approval); }); // stay under the cart's 20 MB upload limit\n    }).then(function (files) {\n      var main = p.lines[0], extra = [];\n      var mainId = main.kind === 'yard' ? main.id : ladderId(main.rung, main.pickup);\n      var who = c.mat === 'MAG' ? 'Magnets' : 'Rigid signs';\n      p.lines.slice(1).forEach(function (l) {\n        if (l.kind === 'stake') extra.push({ id: l.id, quantity: l.qty, properties: { 'For': 'Coroplast signs (Rigid Sign Designer)', 'Order': ref } });\n        else if (l.kind === 'grommet') extra.push({ id: ladderId(l.rung, false), quantity: l.qty, properties: { 'For': 'Coroplast signs (Rigid Sign Designer)', 'Option': holesLabel(c), 'Signs': String(c.signs), 'Price': money(l.price * l.qty) + (Math.abs(l.price * l.qty - l.exact) > 0.004 ? ' (' + money(l.exact) + ' rounded up to the dollar)' : ''), 'Order': ref } });\n        else extra.push({ id: ladderId(l.rung, l.pickup), quantity: l.qty, properties: { 'For': who + ' (Rigid Sign Designer)', 'Part of order': ref, 'Price': money(l.price * l.qty) } });\n      });\n      var fd = new FormData();\n      fd.append('id', String(mainId));\n      fd.append('quantity', String(main.qty));\n      specLines(c).forEach(function (l) { fd.append('properties[' + l[0] + ']', l[1]); });\n      fd.append('properties[Options]', optText(c));\n      if (c.pickupOnly) fd.append('properties[Pickup only]', 'Pickup only at our Snohomish shop (printed in our shop)');\n      else if (c.delivery === 'pickup') fd.append('properties[Pickup]', 'Pick up at our Snohomish shop' + (p.ladder === 'pickup' ? ' (pickup price)' : ''));\n      // a coroplast sign sold as a yard sign size: the size to cut, and its flutes\n      if (c.capped) { fd.append('properties[Cut size]', sizeTxt(c.w, c.h) + ' (width x height), flutes ' + (c.flutes === 'horizontal' ? 'side to side' : 'up and down')); if (p.yard) fd.append('properties[Priced as]', fmt(c.yardW) + ' x ' + fmt(c.yardH) + ' in yard sign'); }\n      if (p.basis && p.basis.rule === 'bigger') fd.append('properties[_Price basis]', 'Lower price of ' + fmt(p.basis.w) + ' x ' + fmt(p.basis.h) + ' in x ' + p.basis.q + ' (' + (p.mode === 'pickup' ? 'pickup' : 'shipped') + ') applied: ' + money(p.exact) + ' instead of ' + money(p.q ? p.q.base : p.exact));\n      fd.append('properties[Price]', main.kind === 'yard' ? qtyLabel(c.qty, c) + ' x ' + money(main.price) + (p.lines.length > 1 ? ' (H-stakes / grommets on their own lines)' : '') : money(p.charged) + ' for ' + qtyLabel(c.qty, c) + (Math.abs(p.charged - p.exact) > 0.004 ? ' (' + money(p.exact) + ' rounded up to the dollar)' : ''));\n      if (extra.length) fd.append('properties[Order]', ref);\n      fd.append('properties[Artwork]', artworkLabel());\n      if (c.sides === 2) fd.append('properties[Back]', backLabel());\n      var notes = ($('[data-abb-notes]').value || '').trim();\n      if (notes) fd.append('properties[Notes]', notes);\n      fd.append('properties[Designed in]', 'Ardor Rigid Sign Designer');\n      faces.forEach(function (f) { var pl = placementFor(f); if (pl) fd.append('properties[_' + faceName(f) + ' placement]', pl); });\n      var added = layerSummary(c); if (added) fd.append('properties[_Added in the designer]', added);\n      var stampDate = approval && approval.at ? approval.at : new Date();\n      var fileStamp = stampFile(stampDate), labelStamp = (approval && approval.when) || stampLabel(stampDate);\n      var ext = function (n) { var m = /\\.[A-Za-z0-9]{1,5}$/.exec(n || ''); return m ? m[0].toLowerCase() : ''; };\n      var pdfFile = function (blob, name) { return new File([blob], name + ' ' + fileStamp + '.pdf', { type: 'application/pdf' }); };\n      var MAXPDF = 25 * 1024 * 1024;\n      if (files.proof && approval) fd.append('properties[Ardor Rigid Sign Proof - ' + labelStamp + ']', pdfFile(files.proof, 'Ardor Rigid Sign Proof'));\n      else if (files.proof) fd.append('properties[_Ardor Rigid Sign Unsigned Proof - ' + labelStamp + ']', pdfFile(files.proof, 'Ardor Rigid Sign Unsigned Proof'));\n      if (!approval) fd.append('properties[Proof]', 'We\\'ll email you a proof to approve before printing');\n      if (approval) {\n        if (!approval.later) fd.append('properties[Approved by]', approval.name); // DSN: the name comes with the cart signature\n        fd.append('properties[Approved on]', approval.when);\n        if (!approval.later) fd.append('properties[_Approver email]', approval.email); // DSN: email + phone come from checkout\n        if (!approval.later) fd.append('properties[_Approver phone]', approval.phone); else { fd.append('properties[Proof approval]', approval.later); fd.append('properties[_Proof sign]', 'cart'); } // DSN\n      }\n      var tooBig = false;\n      faces.forEach(function (f) {\n        var bl = files[f]; if (!bl) return;\n        if (bl.size <= MAXPDF) fd.append('properties[_Ardor Rigid Sign Print File ' + faceName(f) + ' - ' + labelStamp + ']', pdfFile(bl, 'Ardor Rigid Sign Print File ' + faceName(f) + ' ' + sizeId(c.w, c.h)));\n        else tooBig = true;\n        var pg = files.png && files.png[f];\n        if (pg && pg.size <= MAXPDF) fd.append('properties[_Ardor Rigid Sign Spot White PNG ' + faceName(f) + ' - ' + labelStamp + ']', new File([pg], 'Ardor Rigid Sign Spot White ' + faceName(f) + ' ' + sizeId(c.w, c.h) + ' ' + fileStamp + '.png', { type: 'image/png' }));\n      });\n      if (tooBig) files.notes.push('A print file was over 25 MB, so it was not attached. Use the original artwork file.');\n      var g = c.geo;\n      var pnote = [matLabel(c) + ' (' + finishLabel(c) + '): ' + sizeTxt(c.w, c.h) + ' (width x height), ' + (c.sides === 2 ? '2 sides' : '1 side') + ', no bleed.'];\n      if (g.holeList.length) pnote.push((c.customHoles ? 'Custom ' : '') + (g.holeKind === 'standoff' ? 'Standoffs' : g.holeKind === 'grommet' ? 'Grommets' : 'Holes') + ' (centres from the top-left, inches): ' + g.holeList.map(function (h) { return fmt(h[0]) + ', ' + fmt(h[1]); }).join('; ') + '.');\n      if (g.corner > 0) pnote.push('Round corners ' + fmt(g.corner) + ' in radius.');\n      if (c.flutes) pnote.push('Flutes ' + c.flutes + (c.stake ? ', H-stake' : '') + '.');\n      pnote.push('Options: ' + optText(c) + '. Quantity: ' + qtyLabel(c.qty, c) + '. Delivery: ' + (c.pickupOnly ? 'PICKUP ONLY in Snohomish (printed in our shop)' : (c.delivery === 'pickup' ? 'pickup in Snohomish' + (p.ladder === 'pickup' ? ' (pickup price, pickup-only line)' : '') : 'ship to the customer (blind ship)')) + '.' + (c.capped ? ' Cut to ' + sizeTxt(c.w, c.h) + (p.yard ? ' (ordered as a ' + fmt(c.yardW) + ' x ' + fmt(c.yardH) + ' yard sign).' : '.') : ''));\n      if (c.sides === 2) pnote.push(c.bm.sign === 'different' ? 'Different art on the back: use the Front file for the front and the Back file for the back (the back as seen from behind).' : 'Same art on both sides: use the Front file for both sides.');\n      if (faces.some(function (f) { return files[f]; })) pnote.push('Each print file is the sign at its ordered size, art to the edge, no guides, no bleed, no crop marks, 100% scale.');\n      files.notes.forEach(function (n) { pnote.push(n); });\n      fd.append('properties[_Print file note]', pnote.join(' '));\n      var skipArt = files.skipArt || {};\n      faces.forEach(function (f) {\n        var a = ART[f]; if (!a || skipArt[f]) return;\n        fd.append('properties[Ardor Rigid Sign Artwork ' + faceName(f) + ' - ' + labelStamp + ']', a.file, 'Ardor Rigid Sign Artwork ' + faceName(f) + ' ' + fileStamp + ext(a.name));\n      });\n      if (files.needEmail) fd.append('properties[Artwork file]', 'Too large to upload with the order. Please email it to info@ardorprinting.com.');\n      fd.append('properties[_spec]', JSON.stringify({ v: mainId, mat: c.mat, w: c.w, h: c.h, size: c.sizeVal, o: c.opts, s: c.sides, b: c.sides === 2 ? c.bm.sign : '', n: c.qty, pack: c.pack, signs: c.signs, yard: c.yard, cap: p.yard ? [c.yardW, c.yardH] : null, pickup: c.pickupOnly, del: c.delivery, mode: p.mode, ladder: p.ladder, basis: p.basis, exact: p.exact, total: p.charged, lines: p.lines.map(function (l) { return [l.kind, l.rung != null ? RUNGS[l.rung] : l.price, l.qty]; }), holes: g.holeList, corner: g.corner, ref: extra.length ? ref : '' }));\n      var sendMain = function () {\n        return new Promise(function (resolve, reject) {\n          var xhr = new XMLHttpRequest();\n          xhr.open('POST', CONF.cartAddUrl || '/cart/add.js');\n          xhr.setRequestHeader('Accept', 'application/json');\n          xhr.upload.onprogress = function (e) { if (e.lengthComputable && e.total > 200000) { var pct = Math.round(100 * e.loaded / e.total); btns.forEach(function (b) { b.textContent = pct < 100 ? 'Uploading\u2026 ' + pct + '%' : 'Adding\u2026'; }); } };\n          xhr.onload = function () {\n            if (xhr.status >= 200 && xhr.status < 300) return resolve();\n            var msg = 'We couldn\\'t add this to your cart. Please try again, or request a quote.';\n            try { var j = JSON.parse(xhr.responseText); if (j && j.description && xhr.status !== 404) msg = j.description; } catch (e) {}\n            if (xhr.status === 404 || xhr.status === 422) msg = setupMsg();\n            reject(new Error(msg));\n          };\n          xhr.onerror = function () { reject(new Error('Network error. Please check your connection and try again.')); };\n          xhr.send(fd);\n        });\n      };\n      return (extra.length ? addItems(extra) : Promise.resolve({ items: [] })).then(function (res) {\n        var keys = ((res && res.items) || []).map(function (it) { return it.key; }).filter(Boolean);\n        return sendMain().catch(function (e) { return removeKeys(keys).then(function () { throw e; }); });\n      });\n    }).then(function () {\n      track('ardor_rigid_added_to_cart', { value: p.charged, mat: c.mat, w: c.w, h: c.h, sides: c.sides, quantity: c.qty, pack: c.pack, pickup: c.pickupOnly || p.ladder === 'pickup', yard: c.yard });\n      toast(emailProof ? 'Added to your cart. We\\'ll email you a proof to approve before we print.' : 'Added to your cart. Your signed proof is saved with your order.');\n      window.location.href = CONF.cartUrl || '/cart';\n    }).catch(function (err) {\n      if (err && err.cancel) { done(); return; }\n      showErr(err && err.message ? err.message : 'Something went wrong. Please try again.'); done();\n    });\n  }\n\n  // ---------- quote (HubSpot form) ----------\n  function summaryText() {\n    var c = cfg(); var p = price(c);\n    var lines = specLines(c).map(function (l) { return l[0] + ': ' + l[1]; });\n    lines.push('Options: ' + optText(c));\n    if (!c.ok) lines.push('Size wanted: ' + sizeTxt(c.w, c.h) + ' (width x height). ' + c.sizeMsg);\n    if (c.customHoles) lines.push('Custom ' + (c.customHoles === 'grommet' ? 'grommet' : 'hole') + ' placement: ' + customText(c.customHoles) + ' Centres from the top-left (inches): ' + c.holes.map(function (h) { return fmt(h[0]) + ', ' + fmt(h[1]); }).join('; ') + '.');\n    printedFaces(c).forEach(function (f) { var a = ART[f]; if (a) lines.push(faceName(f) + ' artwork: ' + a.name + ' (I will send the file)'); });\n    if (c.sides === 2) lines.push('Back: ' + backLabel().toLowerCase());\n    var notes = ($('[data-abb-notes]').value || '').trim(); if (notes) lines.push('Notes: ' + notes);\n    if (c.capped) lines.push('Cut size: ' + sizeTxt(c.w, c.h) + (p.yard ? ' (priced as a ' + fmt(c.yardW) + ' x ' + fmt(c.yardH) + ' in yard sign)' : ''));\n    if (p.ok) lines.push('Online price shown: ' + money(p.charged) + ' (' + qtyLabel(c.qty, c) + (c.delivery === 'pickup' ? ', pickup' : '') + ')');\n    return lines.join('\\n');\n  }\n\n  function openQuote(want) {\n    var dlg = $('[data-abb-quote-dialog]');\n    $('[data-abb-quote-summary]').textContent = summaryText() + (typeof want === 'number' && want > MAX_QTY ? '\\n' + (cfg().pack > 1 ? 'Packs wanted: ' : (cfg().mat === 'MAG' ? 'Magnets' : 'Signs') + ' wanted: ') + want : '');\n    $('[data-abb-quote-ok]').hidden = true;\n    if (dlg.showModal) dlg.showModal(); else dlg.setAttribute('open', '');\n  }\n\n  function copyQuote() {\n    var txt = 'Rigid signs from the Ardor Rigid Sign Designer\\n' + summaryText();\n    var ok = function () { $('[data-abb-quote-ok]').hidden = false; };\n    var fallback = function () {\n      var ta = document.createElement('textarea'); ta.value = txt; ta.setAttribute('readonly', ''); ta.style.position = 'fixed'; ta.style.opacity = '0';\n      var host = $('[data-abb-quote-dialog]') || document.body;\n      host.appendChild(ta); ta.select();\n      try { document.execCommand('copy'); ok(); } catch (e) {}\n      host.removeChild(ta);\n    };\n    if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(txt).then(ok, fallback); else fallback();\n  }\n\n  // ---------- wiring ----------\n  function on(sel, ev, fn) { var el = $(sel); if (el) el.addEventListener(ev, fn); }\n  function bind() {\n    // \"Need more than 100, another size or a custom shape? Request a quote\"\n    on('[data-abb-quote-link]', 'click', openQuote);\n    var fileIn = $('[data-abb-file]');\n    fileIn.addEventListener('change', function () { var f = fileIn.files && fileIn.files[0]; loadFile(f, uploadFace(f)); fileIn.value = ''; });\n    var drop = $('[data-abb-drop]');\n    ['dragenter', 'dragover'].forEach(function (ev) { drop.addEventListener(ev, function (e) { e.preventDefault(); drop.classList.add('is-over'); }); });\n    ['dragleave', 'drop'].forEach(function (ev) { drop.addEventListener(ev, function (e) { e.preventDefault(); drop.classList.remove('is-over'); }); });\n    drop.addEventListener('drop', function (e) { var f = e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files[0]; loadFile(f, uploadFace(f)); });\n      $$('[data-abb-face]').forEach(function (b) {\n        b.addEventListener('click', function () {\n          S.face = b.getAttribute('data-abb-face') === 'back' ? 'back' : 'front'; S.back = S.face === 'back';\n          render(); view3d(S.back ? 'back' : 'front');\n        });\n      });\n      // Sign / Rider: the piece being designed (the rider only when the order has one)\n      $$('[data-abb-piece]').forEach(function (b) {\n        b.addEventListener('click', function () {\n          var pz = b.getAttribute('data-abb-piece') === 'rider' ? 'rider' : 'sign';\n          if (pz === S.piece) return;\n          goFace(fid(pz, 'front'));\n        });\n      });\n    on('[data-abb-flip]', 'click', function () { S.back = !S.back; render(); view3d(S.back ? 'back' : 'front'); });\n    on('[data-abb-zoom-in]', 'click', function () { if (eng) { try { eng.zoom(1); } catch (e) {} } });\n    on('[data-abb-zoom-out]', 'click', function () { if (eng) { try { eng.zoom(-1); } catch (e) {} } });\n    on('[data-abb-reset]', 'click', function () { S.back = false; render(); view3d('home'); });\n    on('[data-abb-add]', 'click', addToCart);\n    on('[data-abb-add-m]', 'click', addToCart);\n    on('[data-abb-add-d]', 'click', addToCart);\n    on('[data-abb-quote]', 'click', openQuote);\n    on('[data-abb-quote-close]', 'click', function () { var d = $('[data-abb-quote-dialog]'); if (d.close) d.close(); else d.removeAttribute('open'); });\n    on('[data-abb-quote-copy]', 'click', copyQuote);\n    on('[data-abb-quote-go]', 'click', function () { track('ardor_rigid_quote_request', { value: price(cfg()).charged }); });\n    bindLayout();\n    bindStand();\n    bindSig();\n    $$('[data-abb-sig-mode]').forEach(function (b) { b.addEventListener('click', function () { setSigMode(b.getAttribute('data-abb-sig-mode')); }); });\n    on('[data-abb-sig-text]', 'input', function (e) { $('[data-abb-sig-preview]').textContent = e.target.value; $('[data-abb-sig-type]').classList.remove('is-missing'); });\n    on('[data-abb-approve-form]', 'submit', submitApproval);\n    on('[data-abb-approve-form]', 'input', function () { $('[data-abb-approve-error]').hidden = true; });\n    on('[data-abb-sig]', 'pointerdown', function () { $('[data-abb-approve-error]').hidden = true; });\n    on('[data-abb-approve-close]', 'click', function () { closeApproval(null); });\n    on('[data-abb-approve-back]', 'click', function () { closeApproval(null); });\n    on('[data-abb-approve]', 'cancel', function (e) { e.preventDefault(); closeApproval(null); });\n  }\n\n  // quantity box, the \"more than 100\" quote link and the PDF proof button on the tool rail\n  function bindStand() {\n    var q = $('[data-abb-qty]');\n    if (q) {\n      q.addEventListener('input', function () { var v = parseInt(q.value, 10), mx = cfg().maxQty; if (v >= 1) setQty(Math.min(mx, v)); if (v > mx) { q.value = String(mx); openQuote(v); } });\n      q.addEventListener('change', function () { setQty(q.value); });\n      q.addEventListener('blur', function () { render(); });\n    }\n    on('[data-abb-qty-minus]', 'click', function () { setQty(cfg().qty - 1); });\n    on('[data-abb-qty-plus]', 'click', function () { setQty(cfg().qty + 1); });\n  }\n  // the shared proof sheet (assets/ardor-proofsheet.js) puts its PDF button on the rail for the builders it knows;\n  // the rigid sign designer adds the same button itself and opens the same preview window\n  function mountPdf(tries) {\n    var PS = window.ArdorProofSheet, B = window.ArdorRigidBuilder, rail = $('.abx-rail');\n    if (!PS || typeof PS.preview !== 'function' || !rail || !B || !B.proof) { if ((tries || 0) < 40) setTimeout(function () { mountPdf((tries || 0) + 1); }, 250); return; }\n    if (B.proof._btn || $('[data-abb-pdf]', rail)) return;\n    var btn = document.createElement('button');\n    btn.type = 'button'; btn.className = 'abx-tool'; btn.setAttribute('data-abb-pdf', ''); btn.title = 'Download a PDF proof preview';\n    btn.innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 4v11m0 0 4.5-4.5M12 15l-4.5-4.5M4 19.5h16\"/></svg><span>PDF</span>';\n    var qb = $('[data-abx-quote]', rail);\n    if (qb && qb.nextSibling) rail.insertBefore(btn, qb.nextSibling); else rail.appendChild(btn);\n    btn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); PS.preview(B.proof); });\n    B.proof._btn = btn;\n  }\n\n  // keep the sticky 3D viewer just below the site's stuck menu bar\n  var lastTop = 0;\n  function headerOffset() {\n    var hd = document.getElementById('SiteHeader') || document.querySelector('.site-header, header[role=\"banner\"]');\n    if (!hd) return;\n    var pos = getComputedStyle(hd).position;\n    if (pos !== 'fixed' && pos !== 'sticky') return;\n    var r = hd.getBoundingClientRect();\n    if (r.height <= 0 || r.top < -1 || r.top > 1 || r.height > window.innerHeight * 0.4) return;\n    var top = Math.round(r.bottom + 16);\n    if (top !== lastTop) { lastTop = top; root.style.setProperty('--abb-top', top + 'px'); }\n  }\n  function watchHeader() {\n    var queued = false;\n    var run = function () { queued = false; headerOffset(); };\n    var queue = function () { if (!queued) { queued = true; requestAnimationFrame(run); } };\n    window.addEventListener('scroll', queue, { passive: true });\n    window.addEventListener('resize', queue);\n    headerOffset();\n  }\n\n  function init() {\n    watchHeader();\n    bind();\n    render();\n    startEngine();\n    watchFree();\n    window.ArdorRigidBuilder = {\n      state: S, specs: SPECS, priceData: PD, cards: function () { return CARDS; }, cfg: cfg, price: price, render: render, ladder: ladder, rungs: RUNGS, loadLadder: loadLadder,\n      sizeCheck: sizeCheck, quote: QUOTE, geo: faceGeo, viewer: function () { return eng; }, yard: function () { return { live: YLIVE, packs: YPACKS.slice(), stake: YSTAKE, variants: YV }; },\n      proofCanvas: proofCanvas, files: function (approval) { return buildFiles(cfg(), approval || null); }, printedFaces: function () { return printedFaces(cfg()); },\n      pickMat: pickMat, pickFamily: pickFamily, pickSize: pickSize, setCustom: setCustom, pickOpt: pickOpt, pickPack: pickPack, setQty: setQty, setSides: setSides, pickBackMode: pickBackMode, goFace: goFace, setZoom: setZoom,\n      customHoles: CH, mixWith: mixWith, faceCanvas: function (face) { return paintFaceCanvas(cfg(), face); }, pngFace: function (face, ppi) { return pngFace(cfg(), normFace(face), ppi); },\n      // names for the template download (assets/ardor-rigid-tpl.js)\n      tplInfo: function () { var c = cfg(); return { key: c.key, mat: c.mat, product: productLabel(c), size: sizeLabel(c), sizeName: sizeName(c), sides: c.sides, sidesText: sidesLabel(c), rider: '', riderSides: 0, riderSize: '', Wi: c.Wi, Hi: c.Hi, holes: c.geo.holeList, corner: c.geo.corner }; },\n      layout: function () { return { zoom: lay.zoom, scale: lay.scale, ox: lay.ox, oy: lay.oy, cx: lay.cx, cy: lay.cy }; }\n    };\n    // used by ardor-rigid-layers-kit.js, ardor-rigid-ai.js and ardor-rigid-kit.js. Sizes are inches of the sign (c.Wi x\n    // c.Hi, no bleed); face ids 'front' and 'back'.\n    var safeOf = function () { var g = cfg().geo, r = g.safeR; return { x: r.x, y: r.y, w: Math.max(1, r.w), h: Math.max(1, r.h) }; };\n    var infoOf = function (mat, w, h) {\n      var k = normMat(mat); if (!k) return null;\n      var pm = PD.materials[k], m = MATS[k];\n      return { key: k, mat: k, name: productLabel({ m: m }), card: cardOf(k).id, faces: m.sides.indexOf('2') >= 0 ? 2 : 1, sides: m.sides.slice(), min: pm.min, shipMax: pm.shipMax, pickupMax: pm.pickupMax,\n        size: w && h ? sizeCheck(k, +w, +h) : null };\n    };\n    window.ArdorRigidAPI = {\n      cfg: cfg, conf: CONF, state: S, root: root, safe: SAFE, loadFile: loadFile, set: set, render: render, paintFace: paintFace, toast: toast,\n      getArt: function (face) { return ART[normFace(face)] || null; },\n      setArt: function (face, a) { ART[normFace(face)] = a || null; S.artVer++; render(); },\n      renderArtOnly: function () { S.artVer++; renderArtOnly(); },\n      layoutCanvas: function () { return lay.canvas; },\n      layoutScale: function () { return lay.scale; },\n      piece: function () { return 'sign'; },\n      face: function () { return S.face === 'back' ? 'back' : 'front'; },\n      faces: function () { var c = cfg(), out = ['front']; if (c.sides === 2) out.push('back'); return out; },\n      printedFaces: function () { return printedFaces(cfg()); },\n      // the face that can be edited now (null = a back showing \"Same as front\"); showFace = the face the layout shows\n      editFace: function () { var c = cfg(); if (S.face === 'back') return c.sides === 2 && c.backMode === 'different' ? 'back' : null; return 'front'; },\n      showFace: function () { var c = cfg(); return S.face === 'back' && c.sides === 2 && c.backMode === 'different' ? 'back' : 'front'; },\n      pageOf: function () { var c = cfg(); return { Wi: c.Wi, Hi: c.Hi, piece: 'sign' }; },\n      artGeom: function (f, Wi, Hi) { var a = typeof f === 'string' ? artFor(f) : f, c = cfg(); return a && a.natW > 0 ? geomForArt(a, a.natW, a.natH, Wi || c.Wi, Hi || c.Hi) : null; },\n      // where the page sits on the 2D layout canvas (zoom and pan): z = css px per inch, ox / oy = page corner in css px\n      layoutView: function () { return { z: lay.scale, ox: lay.ox, oy: lay.oy }; },\n      // the whole sign (AI designs are fitted inside it) and the safe rect (new text, logos and templates go there)\n      faceBox: function () { var c = cfg(); return { x: 0, y: 0, w: c.Wi, h: c.Hi }; },\n      pageBox: function () { var c = cfg(); return { x: 0, y: 0, w: c.Wi, h: c.Hi }; },\n      safeBox: safeOf,\n      // the guides of a face (the kit redraws them over a Background layer and keeps templates clear of the holes):\n      // safe rect, holes [cx, cy, dia, kind] ('hole' | 'grommet' | 'standoff'), keep-clear boxes, corner radius\n      guides: function (face) {\n        var c = cfg(), g = faceGeo(c, face ? normFace(face) : (S.face === 'back' ? 'back' : 'front'));\n        return { visible: [0, 0, g.W, g.H], hidden: [], holes: g.holeList.map(function (h) { return h.slice(); }), keep: g.keep.map(function (z) { return [z.x, z.y, z.w, z.h]; }), corner: g.corner, safe: safeOf() };\n      },\n      goFace: goFace, pickSign: pickSign, pickFamily: pickFamily, pickOpt: pickOpt, pickBackMode: pickBackMode,\n      pickMat: pickMat, pickSize: pickSize, setSides: setSides, setQty: setQty,\n      // the AI hand-off and links: a material and a size (inches, width x height); false when the size is not possible\n      setSize: function (w, h) { w = rIn(num(w, 0)); h = rIn(num(h, 0)); if (!(w > 0 && h > 0) || !sizeCheck(cfg().mat, w, h).ok) return false; setCustom(w, h); var c = cfg(); return Math.abs(c.w - w) < 1e-6 && Math.abs(c.h - h) < 1e-6; },\n      mat: function () { return cfg().mat; }, matInfo: infoOf, mats: function () { return Object.keys(MATS).filter(matOk); },\n      signKey: function () { return cfg().key; }, signInfo: function (k) { var c = cfg(); return infoOf(k || c.mat, c.w, c.h); }, maxQty: function () { return cfg().maxQty; },\n      signName: function () { var c = cfg(); return productLabel(c) + ', ' + sizeName(c); },\n      signs: function () { return Object.keys(MATS).filter(matOk); },\n      setRider: function () { return false; },\n      price: function () { return price(cfg()); },\n      // the stand designer's names, for code written against it\n      standKey: function () { return cfg().key; }, standInfo: function (k) { return infoOf(k); }, pickStand: pickSign,\n      standName: function () { var c = cfg(); return productLabel(c) + ', ' + sizeName(c); },\n      stands: function () { return Object.keys(MATS).filter(matOk); }\n    };\n    window.ArdorRigidBuilder.proof = { noun: 'signs', file: 'Ardor Rigid Sign Proof Preview', stamp: stampFile, make: function () { // the PDF button (assets/ardor-proofsheet.js)\n      var c = cfg(), waits = FACES.map(function (k) { return ART[k]; }).filter(function (x) { return x && x.ready; }).map(function (x) { return x.ready; });\n      return Promise.all(waits).then(function () { return buildFiles(c, null, 'preview'); }).then(function (f) { return f && f.proof; });\n    } };\ntry { document.dispatchEvent(new CustomEvent('ardor:rigid-api')); } catch (e) {}\n    mountPdf(0);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n"],
  "mappings": "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",
  "names": ["o", "b", "s", "on", "f"]
}
