{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/ardor-seg-kit-up.js?x=1792510703712"],
  "sourcesContent": ["/*! Ardor SEG Designer Kit v1 (Oct 19, 2026) - Ardor Printing, ardorprinting.com\n * Oct 20 2026: -up copy of assets/ardor-seg-kit.js with the upload fix (an upload onto a Background asks: add it as a logo\n * on top, or replace the background). Loaded by sections/ardor-seg-builder-ws-kit-up.liquid with ardor-seg-builder-up.js.\n * Copy of the LIVE assets/ardor-realestate-kit.js (unchanged; itself a copy of the banner designer kit) for the SEG display\n * designer, made by seg/core/kit.patch: Add heading / subheading / body text, Text suggestions, Quick text, Background and\n * QR code. NO Templates panel (Dayne did not pick the starter-template layouts for SEG), so no logo or photo spots either.\n * Talks to the designer only through window.ArdorSegLayers.kit and window.ArdorSegAPI (via kit.api()). Heavy parts load\n * on first use from window.ArdorKitAssets: bg (ArdorBG), data (ArdorTPLData, assets/ardor-kit-tpl-data.js, for the text\n * suggestions), tpl (ArdorTPL), qr (ArdorQR). Every item is an ordinary layer that the designer flattens into the print\n * file and paints on the 3D view and the proof. Faces: front and back; each keeps its own page size (popup backs are\n * smaller). QR details (phone, website) are kept in localStorage key ardorKitInfoSEG.\n */\n(function () {\n  'use strict';\n  if (window.ArdorSegKit) return;\n\n  var K = null, API = null, fabric = null, fc = null, booted = false, uiReady = false;\n  var ASSETS = window.ArdorKitAssets || {};\n  var loaded = {}, loading = {};\n  var st = { info: { agent: '', brokerage: '', phone: '', web: '' }, byFace: {}, tpl: null, tplFace: null, tplVar: '', tplDirty: false, suggCat: '', tplCat: '', bgCat: 'Solid', thumbs: {}, thumbKey: '', qrEdit: null, rebuilding: false };\n  var FONT_PRE = ['Anton', 'Jost', 'Bebas Neue', 'Unbounded', 'Rubik Mono One', 'Pacifico', 'Monoton', 'Satisfy', 'Bree Serif', 'Bangers', 'Quicksand', 'Permanent Marker', 'Black Ops One', 'Righteous', 'Lobster', 'Italiana'];\n\n  // ---------- helpers ----------\n  function el(tag, cls, html) { var n = document.createElement(tag); if (cls) n.className = cls; if (html != null) n.innerHTML = html; return n; }\n  function $(s, r) { return (r || document).querySelector(s); }\n  function $$(s, r) { return Array.prototype.slice.call((r || document).querySelectorAll(s)); }\n  function esc(t) { return String(t == null ? '' : t).replace(/[&<>\"]/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]; }); }\n  function clamp(v, a, b) { return Math.max(a, Math.min(b, v)); }\n  function phone() { try { return window.matchMedia('(max-width: 900px)').matches; } catch (e) { return window.innerWidth <= 900; } }\n  function toast(m, ms, act) { try { K.toast(m, ms || 4000, act); } catch (e) {} }\n  function track(k) { try { (window.dataLayer = window.dataLayer || []).push({ event: 'ardor_kit_' + k }); } catch (e) {} }\n  function lsGet(k) { try { return JSON.parse(window.localStorage.getItem(k) || 'null'); } catch (e) { return null; } }\n  function lsSet(k, v) { try { window.localStorage.setItem(k, JSON.stringify(v)); } catch (e) {} }\n  function failed(e) { try { console.warn('[ardor kit]', e); } catch (x) {} toast('That tool could not load. Please refresh the page and try again.', 6000); }\n\n  // ---------- real estate (Oct 19 2026): pieces, faces, template details ----------\n  var INFO_KEY = 'ardorKitInfoSEG';\n  var FACES = ['front', 'back', 'rider-front', 'rider-back'];\n  // the piece of the face being edited (the face id decides; the designer's piece() while it has no face id)\n  function pieceOf() {\n    var f = ''; try { f = String((K && K.face()) || ''); } catch (e) {}\n    if (/^rider/.test(f)) return 'rider';\n    if (f === 'front' || f === 'back') return 'sign';\n    try { if (K && K.piece) { var p = K.piece(); if (p) return p === 'rider' ? 'rider' : 'sign'; } } catch (e) {}\n    try { var b = K.banner(); if (b && b.Wi / b.Hi >= 3.2) return 'rider'; } catch (e) {}\n    return 'sign';\n  }\n  // false while the designer is between pieces (its piece() already switched, the layers face not yet, or the reverse)\n  function settled() {\n    var f = '', p = ''; try { f = String(K.face() || ''); p = K.piece ? String(K.piece() || '') : ''; } catch (e) { return false; }\n    return !p || !f || (p === 'rider') === /^rider/.test(f);\n  }\n  function isRiderTpl(it) { return !!(it && it.tags && it.tags.indexOf('rider') >= 0); }\n  function forPiece(it) { return isRiderTpl(it) === (pieceOf() === 'rider'); }\n  // what ArdorTPL substitutes: {business} = agent name, {tagline} = brokerage, {phone}, {web}\n  function tinfo() { var i = st.info || {}; return { business: i.agent || 'AGENT NAME', tagline: i.brokerage || 'YOUR BROKERAGE', phone: i.phone || '', web: i.web || '' }; }\n  // the area templates are laid out in: the safe area, minus a band along an edge where holes must stay clear\n  // (API.guides().keep, e.g. the two hanging holes of a post sign), so template text never runs through a hole\n  function r2(v) { return Math.round(v * 100) / 100; }\n  function pageOfFace(f) { try { var pg = API && API.pageOf ? API.pageOf(f) : null; if (pg && pg.Wi > 0 && pg.Hi > 0) return pg; } catch (e) {} return null; }\n  // the safe rect of any face (the builder's safeBox(face)); 0.5 in inside the page without it\n  function safeFor(face, pg) {\n    try { if (API && API.safeBox) { var s = API.safeBox(face); if (s && s.w > 0 && s.h > 0) return { x: s.x, y: s.y, w: s.w, h: s.h }; } } catch (e) {}\n    return { x: 0.5, y: 0.5, w: Math.max(1, pg.Wi - 1), h: Math.max(1, pg.Hi - 1) };\n  }\n  // keep-clear boxes around hanging holes of any face: from the sign data (window.ArdorSegSpecs) for the current\n  // sign key and rider size, mirrored on a back face; else API.guides() for the face on screen\n  function keepFor(face, pg) {\n    var out = [];\n    try {\n      var S = window.ArdorSegSpecs, key = API && API.signKey ? API.signKey() : null, e = S && S.keys && key ? S.keys[key] : null;\n      if (e) {\n        var src = /^rider/.test(face) ? ((e.riders || {})[r2(pg.Wi) + 'x' + r2(pg.Hi)] || {}).keep : (e.front || e.sign || {}).keep;\n        (src || []).forEach(function (k) {\n          var r = (k && (k.r || k.rect)) || k; if (!r || r.length !== 4) return;\n          out.push(/back$/.test(face) ? [pg.Wi - r[0] - r[2], r[1], r[2], r[3]] : [r[0], r[1], r[2], r[3]]);\n        });\n        return out;\n      }\n    } catch (x) {}\n    try { if (face === curFace() && API && API.guides) { var g = API.guides(); ((g && g.keep) || []).forEach(function (k) { k = (k && (k.r || k.rect)) || k; if (k && k.length === 4) out.push(k); }); } } catch (x) {}\n    return out;\n  }\n  // the area templates are laid out in: the safe area, minus a band along an edge where holes must stay clear\n  // (e.g. the two hanging holes of a post sign), so template text never runs through a hole\n  function tplSafe(z, face) {\n    face = face || curFace();\n    var s = { x: z.safe.x, y: z.safe.y, w: z.safe.w, h: z.safe.h };\n    keepFor(face, { Wi: z.Wi, Hi: z.Hi }).forEach(function (k) {\n      var x0 = k[0], y0 = k[1], x1 = k[0] + k[2], y1 = k[1] + k[3], d;\n      if (x1 <= s.x || x0 >= s.x + s.w || y1 <= s.y || y0 >= s.y + s.h) return;\n      if (y1 <= z.Hi * 0.3) { d = y1 - s.y; s.y += d; s.h -= d; }\n      else if (y0 >= z.Hi * 0.7) { s.h = y0 - s.y; }\n      else if (x1 <= z.Wi * 0.3) { d = x1 - s.x; s.x += d; s.w -= d; }\n      else if (x0 >= z.Wi * 0.7) { s.w = x0 - s.x; }\n    });\n    return s.w >= z.safe.w * 0.6 && s.h >= z.safe.h * 0.6 ? s : z.safe;\n  }\n  // what a template was laid out for: page size + layout area. Kept on the face's background layer (ablBg.fit and\n  // ablBg.tpl; ablBg is saved with undo / redo), so a face whose page or area changed is re-arranged, on screen or not\n  function areaKey(W, H, a) { return r2(W) + 'x' + r2(H) + '|' + [a.x, a.y, a.w, a.h].map(r2).join(','); }\n  function fitSpec(spec, id, key) { var o = {}, k; spec = spec || { t: 'solid', c: '#FFFFFF' }; for (k in spec) { if (Object.prototype.hasOwnProperty.call(spec, k)) o[k] = spec[k]; } o.fit = key; o.tpl = id; return o; }\n  function keepFit(spec, prev) { if (!prev || !prev.fit || !spec) return spec; return fitSpec(spec, prev.tpl, prev.fit); }\n\n  function load(name) {\n    var glob = { bg: 'ArdorBG', data: 'ArdorTPLData', tpl: 'ArdorTPL', qr: 'ArdorQR' }[name];\n    if (glob && window[glob]) return Promise.resolve(window[glob]);\n    if (loading[name]) return loading[name];\n    loading[name] = new Promise(function (res, rej) {\n      var src = ASSETS[name];\n      if (!src) { rej(new Error('no asset url for ' + name)); return; }\n      var s = document.createElement('script'); s.src = src; s.async = true;\n      s.onload = function () { loaded[name] = true; if (window[glob]) res(window[glob]); else rej(new Error(name)); };\n      s.onerror = function () { loading[name] = null; rej(new Error('load ' + name)); };\n      document.head.appendChild(s);\n    });\n    return loading[name];\n  }\n  function loadTpl() { return load('data').then(function () { return load('tpl'); }); }\n\n  function cfgSize() { var b = K.banner(); return { b: b, Wi: b.Wi, Hi: b.Hi, safe: API && API.safeBox ? safeFor(curFace(), b) : K.safeArea(b.c, b.Wi, b.Hi) }; }\n  function canvas() { fc = K.canvas(); return fc; }\n  function curFace() { return K.face(); }\n  function objs() { return canvas() ? fc.getObjects() : []; }\n  function bgObj() { var o = objs().filter(function (x) { return x.ablKind === 'bg'; }); return o[0] || null; }\n  function faceArt(f) { try { return API.getArt(f || curFace()); } catch (e) { return null; } }\n  function fontsReady(list) {\n    return K.loadFonts().then(function () { return Promise.all(list.map(function (f) { return K.fontReady(f); })); });\n  }\n\n  // ---------- custom Fabric classes ----------\n  function registerClasses() {\n    if (fabric.ArdorBg) return;\n    fabric.ArdorBg = fabric.util.createClass(fabric.Object, {\n      type: 'ardorBg',\n      initialize: function (o) {\n        o = o || {};\n        this.callSuper('initialize', o);\n        this.set({ originX: 'left', originY: 'top', strokeWidth: 0, stroke: null, selectable: false, evented: false, hasControls: false, hasBorders: false, objectCaching: false, ablKind: 'bg' });\n        this.ablBg = o.ablBg || { t: 'solid', c: '#FFFFFF' };\n      },\n      _render: function (ctx) {\n        var w = this.width, h = this.height;\n        if (window.ArdorBG) { try { window.ArdorBG.draw(ctx, -w / 2, -h / 2, w, h, this.ablBg); return; } catch (e) {} }\n        ctx.fillStyle = (this.ablBg && this.ablBg.c) || '#FFFFFF'; ctx.fillRect(-w / 2, -h / 2, w, h);\n      }\n    });\n    fabric.ArdorBg.fromObject = function (o, cb) { var x = new fabric.ArdorBg(o); if (cb) cb(x); return x; };\n  }\n\n  // ---------- boot ----------\n  function boot() {\n    if (booted) return;\n    var L = window.ArdorSegLayers;\n    if (!L || !L.kit) return;\n    K = L.kit; API = K.api(); booted = true;\n    if (K.ui() && K.ui().drawer) buildUi();\n    else document.addEventListener('ardor:layers-kit-ui', function () { buildUi(); });\n    setInterval(watchTick, 450);\n    // re-arrange right after the designer redraws (size, product or rider picked), not only on the 450 ms watch\n    try { if (API.root && API.root.addEventListener) API.root.addEventListener('ardor:seg-view', function () { clearTimeout(st.fitT); st.fitT = setTimeout(fitAll, 30); }); } catch (e) {}\n    // load Fabric + the background module early but idle, so undo / restore of backgrounds always works\n    var idle = window.requestIdleCallback || function (fn) { return setTimeout(fn, 2500); };\n    idle(function () { withFabric().catch(function () {}); });\n  }\n  function withFabric() {\n    return K.ready().then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      return load('bg');\n    });\n  }\n  var hooked = false;\n  function hookCanvas() {\n    if (hooked || !fc) return; hooked = true;\n    var sb = fc.sendBackwards, stb = fc.sendToBack;\n    fc.sendBackwards = function (o) { var r = sb.apply(fc, arguments); bgBottom(); return r; };\n    fc.sendToBack = function (o) { var r = stb.apply(fc, arguments); if (o && o.ablKind !== 'bg') bgBottom(); return r; };\n    fc.on('object:added', function () { bgBottom(); if (!st.rebuilding) qtRefreshSoon(); });\n    fc.on('object:removed', function () { if (!st.rebuilding) qtRefreshSoon(); });\n    fc.on('object:modified', function (e) { if (!st.rebuilding && e && e.target && e.target.ablTpl) st.tplDirty = true; });\n    fc.on('text:changed', function (e) { if (e && e.target && e.target.ablTpl) st.tplDirty = true; qtRefreshSoon(true); });\n    fc.on('selection:created', selSync); fc.on('selection:updated', selSync); fc.on('selection:cleared', selSync);\n    fc.on('after:render', drawGuides);\n  }\n  // with a full background layer the designer's own guides (safe line, hems, grommets) sit under it: draw them on top\n  // real estate: hidden zones (frame lip, clips), holes and the dashed safe line of the current piece, from API.guides()\n  function drawGuides() {\n    if (!fc || !bgObj()) return;\n    var z; try { z = cfgSize(); } catch (e) { return; }\n    var g = null; try { g = API.guides ? API.guides() : null; } catch (e) { g = null; }\n    var Wi = z.Wi, Hi = z.Hi, v = fc.viewportTransform, rs = fc.getRetinaScaling ? fc.getRetinaScaling() : 1, ctx = fc.getContext();\n    if (!ctx || !v || !(Wi > 0) || !(Hi > 0)) return;\n    var lw = Math.max(Wi, Hi) / 600, s = (g && g.safe) || z.safe;\n    ctx.save();\n    ctx.setTransform(v[0] * rs, 0, 0, v[3] * rs, v[4] * rs, v[5] * rs);\n    ctx.beginPath(); ctx.rect(0, 0, Wi, Hi); ctx.clip();\n    ctx.fillStyle = 'rgba(12,13,13,0.30)';\n    ((g && g.hidden) || []).forEach(function (r) { r = (r && r.rect) || r; if (r && r.length === 4) ctx.fillRect(r[0], r[1], r[2], r[3]); });\n    if (s && s.w > 0 && s.h > 0) {\n      ctx.setLineDash([lw * 6, lw * 4]); ctx.lineWidth = lw * 1.5; ctx.strokeStyle = 'rgba(255,255,255,0.75)';\n      ctx.strokeRect(s.x, s.y, s.w, s.h);\n      ctx.lineDashOffset = lw * 5; ctx.strokeStyle = 'rgba(189,37,44,0.95)';\n      ctx.strokeRect(s.x, s.y, s.w, s.h);\n      ctx.setLineDash([]);\n    }\n    ((g && g.holes) || []).forEach(function (h) {\n      if (!h || h.length < 2) return;\n      var r = Math.max(0.1, (h[2] || 0.25) / 2);\n      ctx.beginPath(); ctx.arc(h[0], h[1], r + 0.12, 0, Math.PI * 2); ctx.fillStyle = '#B9BCBF'; ctx.fill();\n      ctx.beginPath(); ctx.arc(h[0], h[1], r, 0, Math.PI * 2); ctx.fillStyle = '#FFFFFF'; ctx.fill();\n    });\n    ctx.restore();\n  }\n  function bgBottom() { var b = bgObj(); if (b && fc.getObjects().indexOf(b) > 0) { fc.moveTo(b, 0); fc.requestRenderAll(); } }\n\n  // ---------- UI ----------\n  var IC = {\n    tpl: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/></svg>',\n    bg: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"m3 16 5-5 4 4 3-3 6 6\"/><circle cx=\"16\" cy=\"9\" r=\"1.6\"/></svg>',\n    qr: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><path d=\"M14 14h3v3h-3zM20 14v.01M14 20h.01M17 20h4v-3\"/></svg>',\n    x: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" width=\"20\" height=\"20\"><path d=\"M6 6l12 12M18 6 6 18\"/></svg>'\n  };\n  var ui = {};\n  function railBtn(name, icon, label) {\n    var b = el('button', 'abx-tool abl-tool adk-tool', '<span class=\"abl-tool-ic\" aria-hidden=\"true\">' + icon + '</span><span>' + label + '</span>');\n    b.type = 'button'; b.setAttribute('data-abl-tool', name); b.setAttribute('aria-expanded', 'false');\n    return b;\n  }\n  function panel(name, title, body) {\n    var p = el('div', 'abl-drawer__panel adk-panel', '<div class=\"abl-drawer__head\"><h2>' + title + '</h2><button type=\"button\" class=\"abl-x\" data-adk-close aria-label=\"Close\">' + IC.x + '</button></div><div class=\"abl-drawer__body adk-body\">' + body + '</div>');\n    p.setAttribute('data-abl-panel', name); p.hidden = true;\n    $('[data-adk-close]', p).addEventListener('click', function () { K.closeDrawer(); });\n    ui.drawer.appendChild(p);\n    return p;\n  }\n  function buildUi() {\n    if (uiReady) return;\n    var u = K.ui(); if (!u || !u.drawer) return;\n    uiReady = true; ui.drawer = u.drawer;\n    var rail = document.querySelector('.abx-rail');\n    var textBtn = rail && $('[data-abl-tool=\"text\"]', rail), clipBtn = rail && $('[data-abl-tool=\"clipart\"]', rail);\n    ui.tTpl = railBtn('templates', IC.tpl, 'Templates');\n    ui.tBg = railBtn('background', IC.bg, 'Background');\n    ui.tQr = railBtn('qr', IC.qr, 'QR code');\n    if (rail && textBtn) {\n      // (no Templates tool in the SEG designer)\n      var after = clipBtn ? clipBtn.nextSibling : textBtn.nextSibling;\n      rail.insertBefore(ui.tBg, after); rail.insertBefore(ui.tQr, ui.tBg.nextSibling);\n    } else {\n      var host = (textBtn && textBtn.parentNode) || document.querySelector('.abl-minirail');\n      if (host) { host.appendChild(ui.tBg); host.appendChild(ui.tQr); }\n    }\n    // the print-template download button keeps working; its label now says what it is\n    $$('.abx-rail .abx-tool').forEach(function (b) { var s = b.querySelector('span:last-child'); if (s && /^\\s*Template\\s*$/.test(s.textContent) && !b.classList.contains('adk-tool')) { s.textContent = 'Print template'; b.title = 'Download a print-ready template for this size (for your own designer)'; } });\n    [ui.tBg, ui.tQr].forEach(function (b) {\n      b.addEventListener('click', function () {\n        var n = b.getAttribute('data-abl-tool');\n        setTimeout(function () { if (n === 'templates') openTemplates(); if (n === 'background') openBackground(); if (n === 'qr') openQr(); }, 0);\n      });\n    });\n    buildTextExtras();\n    /* no Templates panel in the SEG designer */\n    buildBgPanel();\n    buildQrPanel();\n    buildPropsExtras();\n    var saved = lsGet(INFO_KEY); if (saved) st.info = { agent: saved.agent || '', brokerage: saved.brokerage || '', phone: saved.phone || '', web: saved.web || '' };\n    syncInfoFields();\n  }\n\n  // ---------- Text: presets, suggestions, quick text ----------\n  function buildTextExtras() {\n    var tp = $('[data-abl-panel=\"text\"]', ui.drawer); if (!tp) return;\n    var body = $('.abl-drawer__body', tp);\n    var fontsWrap = el('div', 'adk-tabpane', ''); fontsWrap.setAttribute('data-adk-pane', 'fonts');\n    while (body.firstChild) fontsWrap.appendChild(body.firstChild);\n    var top = el('div', 'adk-text-top',\n      '<div class=\"adk-presets\">' +\n        '<button type=\"button\" class=\"adk-preset adk-preset--h\" data-adk-preset=\"h\"><b>Add a heading</b></button>' +\n        '<button type=\"button\" class=\"adk-preset adk-preset--s\" data-adk-preset=\"s\"><b>Add a subheading</b></button>' +\n        '<button type=\"button\" class=\"adk-preset adk-preset--b\" data-adk-preset=\"b\"><b>Add body text</b></button>' +\n      '</div>' +\n      '<div class=\"adk-tabs\" role=\"tablist\"><button type=\"button\" role=\"tab\" data-adk-tab=\"sugg\" aria-selected=\"true\">Suggestions</button><button type=\"button\" role=\"tab\" data-adk-tab=\"fonts\" aria-selected=\"false\">Fonts</button><button type=\"button\" role=\"tab\" data-adk-tab=\"quick\" aria-selected=\"false\">Quick text</button></div>');\n    body.appendChild(top);\n    var sugg = el('div', 'adk-tabpane', '<div class=\"adk-chips\" data-adk-sugg-cats></div><div class=\"adk-grid adk-grid--sugg\" data-adk-sugg><p class=\"abl-help\">Loading ideas...</p></div>');\n    sugg.setAttribute('data-adk-pane', 'sugg');\n    var quick = el('div', 'adk-tabpane', '<p class=\"abl-help\">Every line of text on this side of your display. Change the words here; the display updates as you type.</p><div class=\"adk-quick\" data-adk-quick></div>');\n    quick.setAttribute('data-adk-pane', 'quick'); quick.hidden = true; fontsWrap.hidden = true;\n    body.appendChild(sugg); body.appendChild(fontsWrap); body.appendChild(quick);\n    ui.textBody = body; ui.sugg = $('[data-adk-sugg]', sugg); ui.suggCats = $('[data-adk-sugg-cats]', sugg); ui.quick = $('[data-adk-quick]', quick);\n    $$('[data-adk-preset]', top).forEach(function (b) { b.addEventListener('click', function () { addPreset(b.getAttribute('data-adk-preset')); }); });\n    $$('[data-adk-tab]', top).forEach(function (b) {\n      b.addEventListener('click', function () { textTab(b.getAttribute('data-adk-tab')); });\n    });\n    var textRail = document.querySelector('[data-abl-tool=\"text\"]');\n    if (textRail) textRail.addEventListener('click', function () { setTimeout(function () { if (st.textTab === 'sugg' || !st.textTab) renderSuggestions(); if (st.textTab === 'quick') renderQuick(); }, 0); });\n    st.textTab = 'sugg';\n  }\n  function textTab(name) {\n    st.textTab = name;\n    $$('[data-adk-tab]', ui.textBody).forEach(function (b) { b.setAttribute('aria-selected', b.getAttribute('data-adk-tab') === name ? 'true' : 'false'); });\n    $$('[data-adk-pane]', ui.textBody).forEach(function (p) { p.hidden = p.getAttribute('data-adk-pane') !== name; });\n    if (name === 'sugg') renderSuggestions();\n    if (name === 'quick') renderQuick();\n  }\n  function addPreset(kind) {\n    var fam = kind === 'h' ? 'Anton' : 'Jost';\n    K.ready().then(function () { fabric = K.fabric(); canvas(); registerClasses(); hookCanvas(); return fontsReady([fam]); }).then(function () {\n      K.targetFace();\n      var z = cfgSize(), s = z.safe, b = bgObj(), dark = false;\n      try { dark = b && window.ArdorBG ? window.ArdorBG.isDark(b.ablBg) : false; } catch (e) {}\n      var H = Math.min(s.h * 0.30, s.w * 0.16);\n      var spec = {\n        h: { t: 'Add a heading', fs: H, y: s.y + s.h * 0.28, w: s.w * 0.92 },\n        s: { t: 'Add a subheading', fs: H * 0.46, y: s.y + s.h * 0.56, w: s.w * 0.86 },\n        b: { t: 'Add a little bit of body text', fs: H * 0.26, y: s.y + s.h * 0.78, w: s.w * 0.8 }\n      }[kind];\n      var t = K.look(new fabric.IText(kind === 'h' ? spec.t.toUpperCase() : spec.t, { fontFamily: fam, fontSize: spec.fs, fill: dark ? '#FFFFFF' : '#16161b', textAlign: 'center', originX: 'center', originY: 'center', left: z.Wi / 2, top: spec.y, paintFirst: 'stroke', strokeLineJoin: 'round', strokeWidth: 0, stroke: null, ablKind: 'text', ablStroke: 0, ablRole: kind === 'h' ? 'headline' : (kind === 's' ? 'sub' : 'detail'), charSpacing: kind === 'h' ? 20 : 0 }));\n      if (kind !== 'h' && fam === 'Jost') t.set({ fontWeight: kind === 's' ? '600' : '400' });\n      var w = t.getScaledWidth(); if (w > spec.w) t.scale(t.scaleX * spec.w / w);\n      // don't land exactly on top of another text\n      var tries = 0;\n      while (tries++ < 4 && fc.getObjects().some(function (o) { return o !== t && o.ablKind === 'text' && Math.abs(o.top - t.top) < spec.fs * 0.6 && Math.abs(o.left - t.left) < z.Wi * 0.3; })) t.set({ top: clamp(t.top + spec.fs * 1.1, s.y + spec.fs / 2, s.y + s.h - spec.fs / 2) });\n      K.fitInside(t, s);\n      K.place(t);\n      track('text_' + kind);\n    }).catch(failed);\n  }\n\n  function isDarkFace() { var b = bgObj(); try { if (b && window.ArdorBG) return window.ArdorBG.isDark(b.ablBg); } catch (e) {} return false; }\n  function renderSuggestions() {\n    if (!ui.sugg) return;\n    Promise.all([K.ready(), loadTpl(), load('bg')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      var T = window.ArdorTPL, cats = T.suggestionCategories ? T.suggestionCategories() : [];\n      if (!ui.suggCats.children.length) {\n        var all = el('button', 'adk-chip', 'All'); all.type = 'button'; all.setAttribute('data-c', ''); ui.suggCats.appendChild(all);\n        cats.forEach(function (c) { var n = typeof c === 'string' ? c : (c.name || c.id); var id = typeof c === 'string' ? c : (c.id || c.name); var b = el('button', 'adk-chip', esc(n)); b.type = 'button'; b.setAttribute('data-c', id); ui.suggCats.appendChild(b); });\n        ui.suggCats.addEventListener('click', function (e) { var b = e.target.closest('[data-c]'); if (!b) return; st.suggCat = b.getAttribute('data-c'); renderSuggestions(); });\n      }\n      $$('[data-c]', ui.suggCats).forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-c') === st.suggCat ? 'true' : 'false'); });\n      var items = T.listSuggestions(st.suggCat), dark = isDarkFace();\n      return fontsReady(FONT_PRE).then(function () {\n        ui.sugg.textContent = '';\n        items.forEach(function (it, i) {\n          var b = el('button', 'adk-card adk-card--sugg' + (dark ? ' is-dark' : '')); b.type = 'button'; b.title = it.name; b.setAttribute('aria-label', 'Add ' + it.name);\n          b.addEventListener('click', function () { addSuggestion(it); });\n          ui.sugg.appendChild(b);\n          setTimeout(function () { try { b.appendChild(suggThumb(it, dark)); } catch (e) {} }, i * 12);\n        });\n      });\n    }).catch(failed);\n  }\n  function suggThumb(it, dark) {\n    var key = 's|' + it.id + '|' + dark;\n    if (st.thumbs[key]) { var im0 = new Image(); im0.src = st.thumbs[key]; im0.alt = ''; return im0; }\n    var bw = 50, bh = 22, px = 6;\n    var objsT = window.ArdorTPL.buildSuggestion(fabric, it, { x: 1, y: 1, w: bw - 2, h: bh - 2 }, { dark: dark, info: tinfo() });\n    var cv = el('canvas'); var sc = new fabric.StaticCanvas(cv, { width: bw * px, height: bh * px, enableRetinaScaling: false, renderOnAddRemove: false });\n    sc.setViewportTransform([px, 0, 0, px, 0, 0]);\n    sc.backgroundColor = dark ? '#1d2230' : '#f4f2ec';\n    objsT.forEach(function (o) { sc.add(o); });\n    sc.renderAll();\n    var url = sc.toDataURL({ format: 'png' });\n    sc.dispose();\n    st.thumbs[key] = url;\n    var im = new Image(); im.src = url; im.alt = ''; return im;\n  }\n  function addSuggestion(it) {\n    Promise.all([K.ready(), loadTpl()]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      return fontsReady(window.ArdorTPL.fonts(it));\n    }).then(function () {\n      K.targetFace();\n      var z = cfgSize(), s = z.safe, others = fc.getObjects().filter(function (o) { return o.ablKind !== 'bg'; }).length;\n      var bw = others ? s.w * 0.62 : s.w * 0.9, bh = others ? s.h * 0.5 : s.h * 0.8;\n      if (s.w / s.h < 1) { bw = s.w * (others ? 0.8 : 0.92); bh = s.h * (others ? 0.38 : 0.6); }\n      var box = { x: z.Wi / 2 - bw / 2, y: (s.y + s.h / 2) - bh / 2, w: bw, h: bh };\n      var list = window.ArdorTPL.buildSuggestion(fabric, it, box, { dark: isDarkFace(), info: tinfo() });\n      K.setQuiet(true);\n      list.forEach(function (o) { K.look(o); o.ablTpl = null; fc.add(o); });\n      K.setQuiet(false);\n      if (list.length > 1) { var sel = new fabric.ActiveSelection(list, { canvas: fc }); K.look(sel); fc.setActiveObject(sel); }\n      else if (list[0]) fc.setActiveObject(list[0]);\n      K.changed(true); K.syncProps(); fc.requestRenderAll();\n      if (phone()) K.closeDrawer();\n      toast('Added. Drag to move it, or tap a line of text to change the words.', 4500);\n      track('suggestion');\n    }).catch(failed);\n  }\n\n  var qtT = 0;\n  function qtRefreshSoon(skipFocused) { clearTimeout(qtT); qtT = setTimeout(function () { if (st.textTab === 'quick' && ui.quick && !ui.quick.closest('[hidden]')) renderQuick(skipFocused); }, 120); }\n  function renderQuick(skipFocused) {\n    if (!ui.quick) return;\n    if (skipFocused && ui.quick.contains(document.activeElement)) return;\n    var texts = objs().filter(function (o) { return o.ablKind === 'text' || o.type === 'i-text'; });\n    ui.quick.textContent = '';\n    if (!texts.length) { ui.quick.appendChild(el('p', 'abl-help', 'No text on this side yet. Add a heading or a suggestion first.')); return; }\n    texts.forEach(function (o, i) {\n      var ta = el('textarea', 'abl-input abl-textarea adk-qt'); ta.rows = Math.min(3, String(o.text).split('\\n').length); ta.value = o.text; ta.setAttribute('aria-label', 'Text line ' + (i + 1));\n      ta.style.fontFamily = '\\'' + o.fontFamily + '\\', sans-serif';\n      ta.addEventListener('focus', function () { try { fc.setActiveObject(o); fc.requestRenderAll(); K.syncProps(); } catch (e) {} });\n      ta.addEventListener('input', function () { o.set('text', ta.value || ' '); if (o.ablStroke) o.set({ strokeWidth: o.fontSize * o.ablStroke * 0.012 }); o.setCoords(); fc.requestRenderAll(); if (o.ablTpl) st.tplDirty = true; try { API.renderArtOnly(); } catch (e) {} });\n      ta.addEventListener('change', function () { K.changed(true); K.syncProps(); });\n      ui.quick.appendChild(ta);\n    });\n  }\n\n  // ---------- Templates ----------\n  function buildTemplatesPanel() {\n    var p = panel('templates', 'Templates',\n      '<p class=\"abl-help\">Pick a design and make it yours. Every word, color and shape can be changed, moved or deleted, and the layout fits the size you choose. Sign layouts show on the sign, rider layouts on the rider.</p>' +\n      '<details class=\"adk-info\" data-adk-info-box><summary>Fill in your details <small>(optional)</small></summary>' +\n        '<label class=\"adk-field\"><span>Agent name</span><input class=\"abl-input\" data-adk-info=\"agent\" maxlength=\"60\" autocomplete=\"name\"></label>' +\n        '<label class=\"adk-field\"><span>Brokerage</span><input class=\"abl-input\" data-adk-info=\"brokerage\" maxlength=\"60\" autocomplete=\"organization\"></label>' +\n        '<label class=\"adk-field\"><span>Phone</span><input class=\"abl-input\" data-adk-info=\"phone\" maxlength=\"30\" inputmode=\"tel\" autocomplete=\"tel\"></label>' +\n        '<label class=\"adk-field\"><span>Website or listing link</span><input class=\"abl-input\" data-adk-info=\"web\" maxlength=\"80\" inputmode=\"url\" autocomplete=\"url\"></label>' +\n        '<p class=\"abl-help adk-small\">Your details show on every template below. Templates with a QR spot turn your website into a QR code.</p>' +\n        '<button type=\"button\" class=\"adk-btn\" data-adk-info-apply hidden>Update my sign with these details</button>' +\n      '</details>' +\n      '<div class=\"adk-chips\" data-adk-tpl-cats></div>' +\n      '<div class=\"adk-confirm\" data-adk-confirm hidden><p>This replaces what is on this side of your sign (you can undo).</p><div><button type=\"button\" class=\"adk-btn\" data-adk-yes>Use this template</button><button type=\"button\" class=\"adk-btn adk-btn--ghost\" data-adk-no>Cancel</button></div></div>' +\n      '<div class=\"adk-grid adk-grid--tpl\" data-adk-tpl><p class=\"abl-help\">Loading templates...</p></div>');\n    ui.tplPanel = p; ui.tpl = $('[data-adk-tpl]', p); ui.tplCats = $('[data-adk-tpl-cats]', p); ui.confirm = $('[data-adk-confirm]', p);\n    $$('[data-adk-info]', p).forEach(function (inp) {\n      inp.addEventListener('input', function () {\n        st.info[inp.getAttribute('data-adk-info')] = inp.value.replace(/^\\s+/, '');\n        lsSet(INFO_KEY, st.info);\n        clearTimeout(st.infoT); st.infoT = setTimeout(function () { st.thumbs = {}; renderTemplates(); }, 500);\n        var ab = $('[data-adk-info-apply]', p); if (ab) ab.hidden = !(st.tpl && st.tplFace === curFace());\n      });\n    });\n    $('[data-adk-info-apply]', p).addEventListener('click', function () { if (st.tpl) applyTemplate(st.tpl, { keepEdits: true, reason: 'info' }); });\n    $('[data-adk-no]', p).addEventListener('click', function () { ui.confirm.hidden = true; st.pending = null; });\n    $('[data-adk-yes]', p).addEventListener('click', function () { ui.confirm.hidden = true; if (st.pending) applyTemplate(st.pending, {}); st.pending = null; });\n  }\n  function syncInfoFields() { if (!ui.tplPanel) return; $$('[data-adk-info]', ui.tplPanel).forEach(function (inp) { inp.value = st.info[inp.getAttribute('data-adk-info')] || ''; }); }\n  function openTemplates() { renderTemplates(); }\n  function renderTemplates() {\n    if (!ui.tpl) return;\n    Promise.all([K.ready(), loadTpl(), load('bg'), load('qr')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      var T = window.ArdorTPL, cats = T.categories ? T.categories() : (window.ArdorTPLData.categories || []);\n      // real estate: only the categories that have templates for the piece being edited (sign or rider)\n      var pc = pieceOf();\n      cats = cats.filter(function (c) { return T.list(c.id || c.name).some(function (x) { return isRiderTpl(x) === (pc === 'rider'); }); });\n      if (ui.tplCatsPiece !== pc) { ui.tplCatsPiece = pc; ui.tplCats.textContent = ''; st.tplCat = ''; }\n      if (!ui.tplCats.children.length) {\n        var all = el('button', 'adk-chip', 'All'); all.type = 'button'; all.setAttribute('data-c', ''); ui.tplCats.appendChild(all);\n        cats.forEach(function (c) { var b = el('button', 'adk-chip', esc(c.name || c.id)); b.type = 'button'; b.setAttribute('data-c', c.id || c.name); ui.tplCats.appendChild(b); });\n        if (!ui.tplCats.__adkOn) { ui.tplCats.__adkOn = true; ui.tplCats.addEventListener('click', function (e) { var b = e.target.closest('[data-c]'); if (!b) return; st.tplCat = b.getAttribute('data-c'); renderTemplates(); }); }\n      }\n      $$('[data-c]', ui.tplCats).forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-c') === st.tplCat ? 'true' : 'false'); });\n      return fontsReady(FONT_PRE.concat(['Arial'])).then(function () {\n        var z = cfgSize(), key = z.Wi + 'x' + z.Hi + '|' + JSON.stringify(st.info);\n        if (st.thumbKey !== key) { st.thumbs = {}; st.thumbKey = key; }\n        var items = T.list(st.tplCat).filter(forPiece);\n        ui.tpl.textContent = '';\n        ui.tpl.classList.toggle('is-tall', z.Wi / z.Hi < 0.9);\n        ui.tpl.classList.toggle('is-xwide', z.Wi / z.Hi >= 3.2);\n        items.forEach(function (it, i) {\n          var b = el('button', 'adk-card adk-card--tpl'); b.type = 'button'; b.setAttribute('aria-label', 'Use template: ' + it.name);\n          b.innerHTML = '<span class=\"adk-card__img\"></span><span class=\"adk-card__name\">' + esc(it.name) + '</span>';\n          b.addEventListener('click', function () { chooseTemplate(it); });\n          ui.tpl.appendChild(b);\n          lazyThumb(b, function () { $('.adk-card__img', b).appendChild(tplThumb(it, z)); }, i);\n        });\n      });\n    }).catch(failed);\n  }\n  function qrPathFn(text) {\n    try { var q = window.ArdorQR.encode(text, 'M'); var p = window.ArdorQR.path(q, { quiet: 0, style: 'square', finder: 'square' }); return { d: p.d, size: p.size }; } catch (e) { return null; }\n  }\n  // Oct 18 2026 (Claude): draw template thumbnails only when their card scrolls into view (inside the drawer list),\n  // one per idle moment, instead of all of them back to back. On phones drawing every thumbnail at once froze scrolling.\n  function lazyThumb(card, draw, i) {\n    var run = function () { if (card.__adkThumb) return; card.__adkThumb = true; try { draw(); } catch (e) { try { console.warn(e); } catch (x) {} } };\n    var idle = window.requestIdleCallback ? function (f) { window.requestIdleCallback(f, { timeout: 400 }); } : function (f) { setTimeout(f, 16); };\n    if (!('IntersectionObserver' in window)) { setTimeout(run, 30 + i * 25); return; }\n    var io = new IntersectionObserver(function (ents) {\n      for (var k = 0; k < ents.length; k++) { if (ents[k].isIntersecting) { io.disconnect(); idle(run); return; } }\n    }, { root: card.closest('.abl-drawer__body, .adk-body') || null, rootMargin: '400px 0px' });\n    io.observe(card);\n  }\n  function tplThumb(it, z) {\n    var key = 't|' + it.id;\n    if (!st.thumbs[key]) {\n      var maxW = 260, maxH = 170, px = Math.min(maxW / z.Wi, maxH / z.Hi);\n      var cv = el('canvas'); var sc = new fabric.StaticCanvas(cv, { width: Math.round(z.Wi * px), height: Math.round(z.Hi * px), enableRetinaScaling: false, renderOnAddRemove: false });\n      sc.setViewportTransform([px, 0, 0, px, 0, 0]);\n      sc.add(new fabric.ArdorBg({ left: 0, top: 0, width: z.Wi, height: z.Hi, ablBg: it.bg }));\n      window.ArdorTPL.build(fabric, it, z.Wi, z.Hi, tplSafe(z), { info: tinfo(), qrPath: qrPathFn }).forEach(function (o) { sc.add(o); });\n      sc.renderAll();\n      st.thumbs[key] = sc.toDataURL({ format: 'jpeg', quality: 0.85 });\n      sc.dispose();\n    }\n    var im = new Image(); im.src = st.thumbs[key]; im.alt = ''; return im;\n  }\n  function designOnFace() { return objs().length > 0 || !!faceArt(); }\n  function chooseTemplate(it) {\n    if (designOnFace() && !(st.tpl && st.tplFace === curFace() && !st.tplDirty && !faceArt())) {\n      st.pending = it; ui.confirm.hidden = false; ui.confirm.scrollIntoView({ block: 'nearest' });\n      return;\n    }\n    applyTemplate(it, {});\n  }\n  // build the template for the current size; keepEdits: keep wording and colors the customer changed (by role and order)\n  function applyTemplate(it, opt) {\n    opt = opt || {};\n    return Promise.all([K.ready(), loadTpl(), load('bg'), load('qr')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      return fontsReady(window.ArdorTPL.fonts(it));\n    }).then(function () {\n      if (opt.face && curFace() !== opt.face) return; // a re-fit for a face that is no longer shown\n      var face = K.targetFace();\n      var z = cfgSize();\n      var old = fc.getObjects().slice();\n      var keep = opt.keepEdits ? editsByRole(old, it.id) : null;\n      var list = window.ArdorTPL.build(fabric, it, z.Wi, z.Hi, tplSafe(z), { info: tinfo(), qrPath: qrPathFn });\n      if (keep) { restoreEdits(list, keep); list = reuseImages(list, keep); }\n      st.rebuilding = true;\n      K.setQuiet(true);\n      fc.discardActiveObject();\n      if (old.length) fc.remove.apply(fc, old);\n      var bgSpec = (keep && keep.bg) || it.bg;\n      var fitKey0 = areaKey(z.Wi, z.Hi, tplSafe(z, face));\n      fc.add(new fabric.ArdorBg({ left: 0, top: 0, width: z.Wi, height: z.Hi, ablBg: fitSpec(bgSpec, it.id, fitKey0) }));\n      st.fitMem = st.fitMem || {}; st.fitMem[face] = { id: it.id, fit: fitKey0 };\n      list.forEach(function (o) { K.look(o); fc.add(o); });\n      // real estate: a re-fit (new size or new details) keeps what the customer added (text, clipart, images, artwork)\n      if (keep) (keep.extra || []).forEach(function (o) { if (o.ablKind === 'cover') fc.insertAt(o, 1); else fc.add(o); });\n      K.setQuiet(false);\n      st.rebuilding = false;\n      if (faceArt(face) && !opt.keepEdits) { try { API.setArt(face, null); } catch (e) {} }\n      st.tpl = it; st.tplFace = face; st.tplVar = window.ArdorTPL.layoutKey ? window.ArdorTPL.layoutKey(it, z.Wi, z.Hi) : window.ArdorTPL.variant(z.Wi, z.Hi); st.tplDirty = !!(keep && keep.dirty);\n      K.changed(true); K.sync(); K.syncProps(); fc.requestRenderAll();\n      var ab = $('[data-adk-info-apply]', ui.tplPanel); if (ab) ab.hidden = false;\n      if (phone()) K.closeDrawer();\n      if (opt.reason === 'size') toast('We re-arranged your template for the new size.', 5000);\n      else if (opt.reason !== 'info' && opt.reason !== 'link') toast('Template added. Tap any text to change the words, or drag things around.', 5000);\n      track(opt.reason === 'size' ? 'template_refit' : 'template');\n      qtRefreshSoon();\n    }).catch(function (e) { st.rebuilding = false; try { K.setQuiet(false); } catch (x) {} failed(e); });\n  }\n  function roleKey(o, counts) { var r = (o.ablRole || 'x') + ':' + (o.ablKind || o.type); counts[r] = (counts[r] || 0) + 1; return r + ':' + counts[r]; }\n  function editsByRole(old, id) {\n    var out = { map: {}, bg: null, dirty: st.tplDirty, img: {}, qr: null, extra: [] }, counts = {};\n    old.forEach(function (o) {\n      if (o.ablKind === 'bg') { out.bg = o.ablBg; return; }\n      if ((o.ablRole === 'photo-img' || o.ablRole === 'logo-img') && o.ablKind === 'image' && o.ablTpl === id) { out.img[o.ablRole.slice(0, -4)] = o; return; }\n      if (o.ablKind === 'qr' && !out.qr) { out.qr = o; return; }\n      if (o.ablTpl !== id) { out.extra.push(o); return; }\n      if (o.ablTpl !== id) return;\n      var k = roleKey(o, counts);\n      out.map[k] = { text: o.ablKind === 'text' ? o.text : null, fill: o.fill, stroke: o.stroke, ablStroke: o.ablStroke, font: o.fontFamily, built: o.__adkText };\n    });\n    return out;\n  }\n  function restoreEdits(list, keep) {\n    var counts = {};\n    list.forEach(function (o) {\n      var k = roleKey(o, counts), e = keep.map[k]; if (!e) return;\n      if (o.ablKind === 'text') {\n        var boxW = o.getScaledWidth();\n        // after undo / redo the remembered build wording is gone: compare with what the template builds now instead\n        var nw = function (x) { return String(x).replace(/\\s+/g, ' ').replace(/^ | $/g, ''); };\n        var changedByUser = e.text != null && (e.built != null ? e.text !== e.built : nw(e.text) !== nw(o.text));\n        if (changedByUser) o.set('text', e.text);\n        if (e.font && e.font !== o.fontFamily) o.set('fontFamily', e.font);\n        o.set({ fill: e.fill });\n        if (e.ablStroke != null) { o.set({ ablStroke: e.ablStroke, stroke: e.ablStroke ? e.stroke : null, strokeWidth: e.ablStroke ? o.fontSize * e.ablStroke * 0.012 : 0 }); }\n        if (typeof o.initDimensions === 'function') o.initDimensions();\n        var w = o.getScaledWidth(); if (w > boxW * 1.02 && boxW > 0) o.scale(o.scaleX * boxW / w);\n      } else if (e.fill && typeof e.fill === 'string' && o.ablRole !== 'qr') { o.set({ fill: e.fill }); }\n    });\n  }\n  // real estate: the box of a template spot (photo or logo): its shapes, else all of its parts\n  function spotBox(list, role) {\n    var box = null, shapes = list.filter(function (o) { return o.ablRole === role && o.ablKind !== 'text'; });\n    (shapes.length ? shapes : list.filter(function (o) { return o.ablRole === role; })).forEach(function (o) {\n      var r = o.getBoundingRect(true, true);\n      if (!box) box = { l: r.left, t: r.top, r: r.left + r.width, b: r.top + r.height };\n      else { box.l = Math.min(box.l, r.left); box.t = Math.min(box.t, r.top); box.r = Math.max(box.r, r.left + r.width); box.b = Math.max(box.b, r.top + r.height); }\n    });\n    return box;\n  }\n  function fitToBox(im, box) {\n    var bw = box.r - box.l, bh = box.b - box.t, w = im.width || 1, h = im.height || 1, s = Math.min(bw / w, bh / h);\n    im.set({ originX: 'center', originY: 'center', left: box.l + bw / 2, top: box.t + bh / 2, scaleX: s, scaleY: s, angle: 0 });\n    im.setCoords();\n  }\n  // a re-arranged template (new size): an uploaded agent photo or logo moves into the new layout's spot\n  function reuseImages(list, keep) {\n    ['photo', 'logo'].forEach(function (role) {\n      var im = keep.img && keep.img[role]; if (!im) return;\n      var box = spotBox(list, role); if (!box) return;\n      var at = -1;\n      list = list.filter(function (o, i) { if (o.ablRole === role) { if (at < 0) at = i; return false; } return true; });\n      fitToBox(im, box);\n      list.splice(Math.max(0, at), 0, im);\n    });\n    if (keep.qr) {\n      var q = keep.qr, qb = spotBox(list, 'qr');\n      if (qb) {\n        var qa = -1;\n        list = list.filter(function (o, i) { if (o.ablRole === 'qr') { if (qa < 0) qa = i; return false; } return true; });\n        var k = Math.min(qb.r - qb.l, qb.b - qb.t) / Math.max(0.01, q.width || 1);\n        q.set({ scaleX: k, scaleY: k, angle: 0, left: (qb.l + qb.r) / 2, top: (qb.t + qb.b) / 2 }); q.setCoords();\n        list.splice(Math.max(0, qa), 0, q);\n      } else keep.extra.push(q);\n    }\n    return list;\n  }\n  // ---------- real estate: keep every face's template fitted to its page (Oct 19 2026, QA) ----------\n  // A size, product or rider change re-arranges each face that holds a template right away, also the faces that are\n  // not on screen (their layers live in the layers file, kit.objectsFor(face)), keeping the customer's wording, colors,\n  // photo, logo, QR code and own layers. Runs on the 450 ms watch, after every designer redraw and on every click\n  // (capture phase, so before 3D, proof, PDF, print and Add to cart read the faces). No undo step of its own: undo\n  // brings back the last customer step and that is re-arranged again for the page it is on now.\n  var fitting = false;\n  function fontsOk(list) {\n    try { if (!document.fonts || !document.fonts.check) return true; return list.every(function (f) { return document.fonts.check('20px \"' + f + '\"'); }); } catch (e) { return true; }\n  }\n  function faceTpl(face, objsF) {\n    var bg = null, ids = {};\n    objsF.forEach(function (o) { if (o.ablKind === 'bg') { if (!bg) bg = o; } else if (o.ablTpl) ids[o.ablTpl] = 1; });\n    var m = bg && bg.ablBg && bg.ablBg.fit ? { id: bg.ablBg.tpl, fit: bg.ablBg.fit } : (st.fitMem && st.fitMem[face]);\n    return m && m.id && ids[m.id] ? m : null;\n  }\n  function fitAll() {\n    if (!booted || !K || !API || fitting || st.rebuilding || !window.ArdorTPL || !window.ArdorTPLData) return;\n    if (!canvas() || !settled()) return;\n    try { if (!fabric) fabric = K.fabric(); } catch (e) { return; }\n    if (!fabric || !fabric.ArdorBg) return;\n    var faces = []; try { faces = K.faces ? K.faces() : (API.faces ? API.faces() : ['front']); } catch (e) { return; }\n    var cf = curFace(), todo = [];\n    (faces || []).forEach(function (f) {\n      var pg = pageOfFace(f); if (!pg) return;\n      var list = f === cf ? fc.getObjects() : (K.objectsFor(f) || []);\n      var t = faceTpl(f, list); if (!t) return;\n      var area = tplSafe({ Wi: pg.Wi, Hi: pg.Hi, safe: safeFor(f, pg) }, f);\n      if (t.fit === areaKey(pg.Wi, pg.Hi, area)) return;\n      var it = window.ArdorTPL.get(t.id); if (!it) return;\n      var want = areaKey(pg.Wi, pg.Hi, area), last = st.fitLast && st.fitLast[f];\n      if (last && last.key === want && Date.now() - last.t < 3000) return; // never loop on one face\n      todo.push({ f: f, it: it, pg: pg, area: area });\n    });\n    if (!todo.length) return;\n    var fl = [];\n    todo.forEach(function (x) { window.ArdorTPL.fonts(x.it).forEach(function (n) { if (fl.indexOf(n) < 0) fl.push(n); }); });\n    if (!fontsOk(fl)) { fontsReady(fl).then(function () { setTimeout(fitAll, 0); }).catch(function () {}); return; }\n    fitting = true;\n    try {\n      // let the layers file move each piece's layers to its new page first (it keeps them where they were, scaled)\n      try { K.sync(); } catch (e) {}\n      st.fitLast = st.fitLast || {};\n      todo.forEach(function (x) { st.fitLast[x.f] = { key: areaKey(x.pg.Wi, x.pg.Hi, x.area), t: Date.now() }; rebuildFace(x.f, x.it, x.pg, x.area); });\n      K.changed(false);\n      var cpg = pageOfFace(curFace());\n      if (cpg) fc.getObjects().forEach(function (o) { o.ablBase = { W: cpg.Wi, H: cpg.Hi, l: o.left, t: o.top, sx: o.scaleX, sy: o.scaleY }; });\n      fc.requestRenderAll();\n    } catch (e) { try { console.warn('[ardor kit] re-arrange', e); } catch (x) {} }\n    st.rebuilding = false; try { K.setQuiet(false); } catch (e) {}\n    fitting = false;\n  }\n  function rebuildFace(face, it, pg, area) {\n    var isCur = face === curFace();\n    var store = isCur ? null : K.objectsFor(face);\n    if (!isCur && !store) return;\n    var old = isCur ? fc.getObjects().slice() : store.slice();\n    var keep = editsByRole(old, it.id);\n    var list = window.ArdorTPL.build(fabric, it, pg.Wi, pg.Hi, area, { info: tinfo(), qrPath: qrPathFn });\n    restoreEdits(list, keep); list = reuseImages(list, keep);\n    var key = areaKey(pg.Wi, pg.Hi, area);\n    var out = [new fabric.ArdorBg({ left: 0, top: 0, width: pg.Wi, height: pg.Hi, ablBg: fitSpec(keep.bg || it.bg, it.id, key) })];\n    list.forEach(function (o) { K.look(o); out.push(o); });\n    keep.extra.forEach(function (o) { if (o.ablKind === 'cover') out.splice(1, 0, o); else out.push(o); });\n    // every layer remembers this page as its base, so a later move of this piece's layers starts from here\n    out.forEach(function (o) { o.setCoords(); o.ablBase = { W: pg.Wi, H: pg.Hi, l: o.left, t: o.top, sx: o.scaleX, sy: o.scaleY }; });\n    st.fitMem = st.fitMem || {}; st.fitMem[face] = { id: it.id, fit: key };\n    st.byFace[face] = { tpl: it, v: window.ArdorTPL.layoutKey ? window.ArdorTPL.layoutKey(it, pg.Wi, pg.Hi) : '', dirty: !!keep.dirty };\n    if (isCur) {\n      st.rebuilding = true; K.setQuiet(true);\n      fc.discardActiveObject();\n      if (old.length) fc.remove.apply(fc, old);\n      out.forEach(function (o) { fc.add(o); });\n      K.setQuiet(false); st.rebuilding = false;\n      st.tpl = it; st.tplFace = face; st.tplVar = st.byFace[face].v; st.tplDirty = !!keep.dirty;\n      toast('We re-arranged your ' + (/^rider/.test(face) ? 'rider' : 'sign') + ' for the new size.', 5000);\n    } else {\n      store.splice.apply(store, [0, store.length].concat(out));\n      st.offFit = st.offFit || {}; st.offFit[face] = true;\n      if (st.tplFace === face) { st.tpl = it; st.tplVar = st.byFace[face].v; }\n    }\n    track('template_refit');\n  }\n\n  // remember the wording each template text was built with (to tell customer edits from tokens)\n  function markBuilt(list) { list.forEach(function (o) { if (o.ablKind === 'text') o.__adkText = o.text; }); }\n\n  // banner size changed: re-arrange the template when the layout shape changes (wide, extra wide, square, tall)\n  // real estate: each face (sign front / back, rider front / back) remembers its own template; when the size of the\n  // piece being edited changes, its template is re-arranged for the new layout shape (wide, extra wide, square, tall)\n  var lastSize = '', lastFace = '';\n  function watchSize() {\n    if (!booted || !K || !API || !uiReady) return;\n    var b; try { b = K.banner(); } catch (e) { return; }\n    if (!b || !(b.Wi > 0) || !(b.Hi > 0)) return;\n    if (!settled()) return;\n    var f = curFace() || 'front', pc = pieceOf();\n    if (f !== lastFace) {\n      if (st.tpl && st.tplFace) st.byFace[st.tplFace] = { tpl: st.tpl, v: st.tplVar, dirty: st.tplDirty };\n      var m = st.byFace[f];\n      st.tpl = m ? m.tpl : null; st.tplFace = m ? f : null; st.tplVar = m ? m.v : ''; st.tplDirty = m ? m.dirty : false;\n      var ab = ui.tplPanel && $('[data-adk-info-apply]', ui.tplPanel); if (ab) ab.hidden = !st.tpl;\n      if (lastFace && ui.tplPanel && !ui.tplPanel.hidden) { st.thumbs = {}; renderTemplates(); }\n      lastFace = f;\n      if (st.offFit && st.offFit[f]) { delete st.offFit[f]; toast('We re-arranged your ' + (/^rider/.test(f) ? 'rider' : 'sign') + ' for the new size.', 5000); }\n    }\n    var key = pc + ':' + b.Wi + 'x' + b.Hi;\n    if (key === lastSize) return;\n    var first = !lastSize; lastSize = key;\n    if (first) return;\n    st.thumbs = {};\n    if (ui.tplPanel && !ui.tplPanel.hidden) renderTemplates();\n  }\n  function watchTick() { watchSize(); fitAll(); try { artGuard(); } catch (e) {} }\n\n  // ---------- Background ----------\n  function buildBgPanel() {\n    var p = panel('background', 'Background',\n      '<p class=\"abl-help\" data-adk-bg-note>Pick a color, gradient, pattern, texture or scene for the whole display.</p>' +\n      '<div class=\"adk-chips\" data-adk-bg-cats></div>' +\n      '<div class=\"adk-bg-custom\"><label class=\"abl-color\"><input type=\"color\" value=\"#ffffff\" aria-label=\"Pick any background color\" data-adk-bg-color><span>Any color</span></label><button type=\"button\" class=\"adk-btn adk-btn--ghost\" data-adk-bg-none>No background</button></div>' +\n      '<div class=\"adk-grid adk-grid--bg\" data-adk-bg><p class=\"abl-help\">Loading...</p></div>');\n    ui.bgPanel = p; ui.bgGrid = $('[data-adk-bg]', p); ui.bgCats = $('[data-adk-bg-cats]', p); ui.bgNote = $('[data-adk-bg-note]', p);\n    $('[data-adk-bg-color]', p).addEventListener('input', function (e) { setBackground({ t: 'solid', c: e.target.value }, true); });\n    $('[data-adk-bg-color]', p).addEventListener('change', function (e) { var from = st.liveFrom; st.liveFrom = null; autoContrast({ t: 'solid', c: e.target.value }, from); K.changed(true); });\n    $('[data-adk-bg-none]', p).addEventListener('click', function () { removeBackground(); });\n  }\n  function openBackground() {\n    Promise.all([K.ready(), load('bg')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      var G = window.ArdorBG;\n      if (!ui.bgCats.children.length) {\n        G.cats.forEach(function (c) { var b = el('button', 'adk-chip', esc(c)); b.type = 'button'; b.setAttribute('data-c', c); ui.bgCats.appendChild(b); });\n        ui.bgCats.addEventListener('click', function (e) { var b = e.target.closest('[data-c]'); if (!b) return; st.bgCat = b.getAttribute('data-c'); renderBg(); });\n      }\n      renderBg();\n    }).catch(failed);\n  }\n  function renderBg() {\n    var G = window.ArdorBG, art = faceArt();\n    $$('[data-c]', ui.bgCats).forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-c') === st.bgCat ? 'true' : 'false'); });\n    ui.bgNote.innerHTML = art ? '<b>Your uploaded artwork covers the display.</b> Colors here fill any space around your artwork. To use a gradient, pattern, texture or scene, remove your artwork first (Artwork panel).' : 'Pick a color, gradient, pattern, texture or scene for the whole display. Your text and clipart stay on top.';\n    ui.bgGrid.textContent = '';\n    var z = cfgSize(), ar = clamp(z.Wi / z.Hi, 0.5, 3);\n    G.gallery.filter(function (g) { return g.cat === st.bgCat; }).forEach(function (g) {\n      var b = el('button', 'adk-card adk-card--bg'); b.type = 'button'; b.title = g.name; b.setAttribute('aria-label', 'Background: ' + g.name);\n      var dis = art && g.spec.t !== 'solid'; if (dis) b.disabled = true;\n      var w = 120, h = Math.round(w / ar);\n      try { var t = G.thumb(g.spec, w, h); t.className = 'adk-bg-thumb'; b.appendChild(t); } catch (e) {}\n      b.appendChild(el('span', 'adk-card__name', esc(g.name)));\n      b.addEventListener('click', function () { setBackground(g.spec, false); });\n      ui.bgGrid.appendChild(b);\n    });\n  }\n  function setBackground(spec, live) {\n    Promise.all([K.ready(), load('bg')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      var face = K.targetFace(), art = faceArt(face);\n      if (art) { // behind uploaded artwork only a plain color is possible\n        if (spec.t !== 'solid') { toast('Remove your uploaded artwork first to use this background.', 5000); return; }\n        art.bg = spec.c; try { API.renderArtOnly(); } catch (e) {}\n        var inp = document.querySelector('[data-abb-bg]'); if (inp) inp.value = spec.c;\n        return;\n      }\n      var z = cfgSize(), b = bgObj(), prev = b ? b.ablBg : null;\n      if (b) { b.ablBg = keepFit(spec, b.ablBg); b.set({ dirty: true }); fc.requestRenderAll(); if (!live) K.changed(true); else { try { API.renderArtOnly(); } catch (e) {} } }\n      else {\n        st.rebuilding = true; K.setQuiet(true);\n        b = new fabric.ArdorBg({ left: 0, top: 0, width: z.Wi, height: z.Hi, ablBg: spec });\n        fc.add(b); fc.moveTo(b, 0);\n        K.setQuiet(false); st.rebuilding = false;\n        K.changed(!live);\n      }\n      if (!live) autoContrast(spec, prev); else if (!st.liveFrom) st.liveFrom = prev || { t: 'solid', c: '#FFFFFF' };\n      if (!live && st.liveFrom) { st.liveFrom = null; }\n      K.sync(); fc.requestRenderAll();\n      if (!live) track('background');\n    }).catch(failed);\n  }\n  // after a background change, flip plain black or white text that would disappear (only text sitting right on the background)\n  function lum(hex) { var m = /^#?([0-9a-f]{6})$/i.exec(String(hex || '').trim()); if (!m) return 0.5; var n = parseInt(m[1], 16); return (0.299 * (n >> 16 & 255) + 0.587 * (n >> 8 & 255) + 0.114 * (n & 255)) / 255; }\n  function overShape(t, list) {\n    var i = list.indexOf(t), c = t.getCenterPoint();\n    for (var j = i - 1; j >= 0; j--) { var o = list[j]; if (o.ablKind === 'bg') continue; var r = o.getBoundingRect(true, true); if (c.x >= r.left && c.x <= r.left + r.width && c.y >= r.top && c.y <= r.top + r.height) return true; }\n    return false;\n  }\n  function autoContrast(spec, prevSpec) {\n    var G = window.ArdorBG; if (!G) return;\n    var dark = false, was = false; try { dark = G.isDark(spec); was = prevSpec ? G.isDark(prevSpec) : false; } catch (e) { return; }\n    if (dark === was) return;\n    var list = objs(), changedAny = false;\n    list.forEach(function (o) {\n      if (o.ablKind !== 'text' || typeof o.fill !== 'string' || overShape(o, list)) return;\n      var L = lum(o.fill);\n      if (dark && L < 0.22) { o.set('fill', '#FFFFFF'); changedAny = true; }\n      if (!dark && L > 0.85) { o.set('fill', '#16161B'); changedAny = true; }\n    });\n    if (changedAny) fc.requestRenderAll();\n  }\n  function removeBackground() {\n    var art = faceArt();\n    if (art) { art.bg = '#FFFFFF'; try { API.renderArtOnly(); } catch (e) {} return; }\n    var b = bgObj(); if (!b) return;\n    fc.remove(b); K.changed(true); fc.requestRenderAll();\n  }\n\n  // ---------- QR code ----------\n  var QR_TYPES = [\n    ['url', 'Website', [['url', 'Website address', 'url', 'yourwebsite.com']]],\n    ['tel', 'Phone call', [['tel', 'Phone number', 'tel', '(555) 555-5555']]],\n    ['sms', 'Text message', [['sms', 'Phone number', 'tel', '(555) 555-5555'], ['body', 'Message (optional)', 'text', '']]],\n    ['email', 'Email', [['to', 'Email address', 'email', 'you@yourbusiness.com'], ['subject', 'Subject (optional)', 'text', '']]],\n    ['wifi', 'Wi-Fi', [['ssid', 'Network name', 'text', ''], ['pass', 'Password', 'text', ''], ['enc', 'Security', 'select:WPA=WPA / WPA2,WEP=WEP,nopass=No password', 'WPA']]],\n    ['vcard', 'Contact card', [['name', 'Name', 'text', ''], ['org', 'Business', 'text', ''], ['phone', 'Phone', 'tel', ''], ['email', 'Email', 'email', ''], ['url', 'Website', 'url', '']]],\n    ['text', 'Plain text', [['text', 'Text', 'textarea', '']]]\n  ];\n  function buildQrPanel() {\n    var opts = QR_TYPES.map(function (t) { return '<option value=\"' + t[0] + '\">' + t[1] + '</option>'; }).join('');\n    var p = panel('qr', 'QR code',\n      '<p class=\"abl-help\">Make a QR code people can scan from your display. It prints sharp at any size.</p>' +\n      '<label class=\"adk-field\"><span>What should it open?</span><select class=\"abl-input\" data-adk-qr-type>' + opts + '</select></label>' +\n      '<div data-adk-qr-fields></div>' +\n      '<div class=\"adk-two\"><label class=\"adk-field\"><span>Style</span><select class=\"abl-input\" data-adk-qr-style><option value=\"square\">Square</option><option value=\"rounded\">Rounded</option></select></label>' +\n      '<label class=\"adk-field\"><span>Corners</span><select class=\"abl-input\" data-adk-qr-finder><option value=\"square\">Square</option><option value=\"rounded\">Rounded</option></select></label></div>' +\n      '<div class=\"adk-two\"><label class=\"adk-field\"><span>Code color</span><span class=\"abl-color\"><input type=\"color\" value=\"#000000\" data-adk-qr-fg aria-label=\"QR code color\"></span></label>' +\n      '<label class=\"adk-field\"><span>Behind the code</span><span class=\"abl-color\"><input type=\"color\" value=\"#ffffff\" data-adk-qr-bg aria-label=\"QR code background color\"></span></label></div>' +\n      '<p class=\"adk-warn\" data-adk-qr-warn hidden></p>' +\n      '<div class=\"adk-qr-preview\" data-adk-qr-preview></div>' +\n      '<button type=\"button\" class=\"adk-btn adk-btn--wide\" data-adk-qr-add>Add QR code to my display</button>' +\n      '<p class=\"abl-help adk-small\" data-adk-qr-size></p>' +\n      '<p class=\"abl-help adk-small\">Tip: test it with your phone camera on the proof before you order. Make the code about 1 in wide for every 10 in of scanning distance (about 12 in wide for people 10 ft away).</p>');\n    ui.qrPanel = p; ui.qrType = $('[data-adk-qr-type]', p); ui.qrFields = $('[data-adk-qr-fields]', p);\n    ui.qrPrev = $('[data-adk-qr-preview]', p); ui.qrWarn = $('[data-adk-qr-warn]', p); ui.qrAdd = $('[data-adk-qr-add]', p); ui.qrSize = $('[data-adk-qr-size]', p);\n    ui.qrType.addEventListener('change', function () { qrFields(); qrPreview(); });\n    ['[data-adk-qr-style]', '[data-adk-qr-finder]', '[data-adk-qr-fg]', '[data-adk-qr-bg]'].forEach(function (s) { $(s, p).addEventListener('input', qrPreview); });\n    ui.qrAdd.addEventListener('click', addQr);\n    qrFields();\n  }\n  function qrFields(vals) {\n    var t = QR_TYPES.filter(function (x) { return x[0] === ui.qrType.value; })[0];\n    vals = vals || {};\n    ui.qrFields.textContent = '';\n    t[2].forEach(function (f) {\n      var lab = el('label', 'adk-field', '<span>' + esc(f[1]) + '</span>'), inp;\n      if (f[2] === 'textarea') { inp = el('textarea', 'abl-input abl-textarea'); inp.rows = 3; }\n      else if (f[2].indexOf('select:') === 0) {\n        inp = el('select', 'abl-input');\n        f[2].slice(7).split(',').forEach(function (o) { var kv = o.split('='), op = el('option'); op.value = kv[0]; op.textContent = kv[1]; inp.appendChild(op); });\n      } else { inp = el('input', 'abl-input'); inp.type = f[2] === 'url' ? 'text' : f[2]; if (f[2] === 'url') inp.setAttribute('inputmode', 'url'); }\n      inp.setAttribute('data-adk-qf', f[0]);\n      if (f[3] && inp.tagName !== 'SELECT') inp.placeholder = f[3];\n      var v = vals[f[0]] != null ? vals[f[0]] : (f[0] === 'url' && ui.qrType.value === 'url' ? st.info.web : (f[0] === 'tel' ? st.info.phone : (ui.qrType.value === 'vcard' ? ({ name: st.info.agent, org: st.info.brokerage, phone: st.info.phone, url: st.info.web })[f[0]] || '' : '')));\n      if (inp.tagName === 'SELECT') inp.value = vals[f[0]] || f[3]; else inp.value = v || '';\n      inp.addEventListener('input', qrPreview);\n      lab.appendChild(inp); ui.qrFields.appendChild(lab);\n    });\n  }\n  function qrValues() { var v = {}; $$('[data-adk-qf]', ui.qrFields).forEach(function (i) { v[i.getAttribute('data-adk-qf')] = i.value.replace(/^\\s+|\\s+$/g, ''); }); return v; }\n  function qrPayload(type, v) {\n    var P = window.ArdorQR.payload;\n    if (type === 'url') return v.url ? P.url(v.url) : '';\n    if (type === 'tel') return v.tel ? P.tel(v.tel.replace(/[^\\d+]/g, '')) : '';\n    if (type === 'sms') return v.sms ? P.sms(v.sms.replace(/[^\\d+]/g, ''), v.body || '') : '';\n    if (type === 'email') return v.to ? P.email(v.to, v.subject || '', '') : '';\n    if (type === 'wifi') return v.ssid ? P.wifi(v.ssid, v.pass || '', v.enc || 'WPA', false) : '';\n    if (type === 'vcard') return (v.name || v.org) ? P.vcard({ name: v.name, org: v.org, phone: v.phone, email: v.email, url: v.url }) : '';\n    return v.text ? P.text(v.text) : '';\n  }\n  function qrSettings() {\n    var p = ui.qrPanel;\n    return { type: ui.qrType.value, v: qrValues(), style: $('[data-adk-qr-style]', p).value, finder: $('[data-adk-qr-finder]', p).value, fg: $('[data-adk-qr-fg]', p).value, bg: $('[data-adk-qr-bg]', p).value };\n  }\n  function openQr() {\n    load('qr').then(function () {\n      var a = fc && fc.getActiveObject();\n      if (a && a.ablKind === 'qr' && a.ablQr) { loadQrSettings(a); }\n      else { st.qrEdit = null; ui.qrAdd.textContent = 'Add QR code to my display'; }\n      qrPreview();\n    }).catch(failed);\n  }\n  function loadQrSettings(o) {\n    var s = null; try { s = typeof o.ablQr === 'string' ? JSON.parse(o.ablQr) : o.ablQr; } catch (e) {}\n    if (!s || !s.type) return;\n    st.qrEdit = o;\n    ui.qrType.value = s.type; qrFields(s.v || {});\n    $('[data-adk-qr-style]', ui.qrPanel).value = s.style || 'square';\n    $('[data-adk-qr-finder]', ui.qrPanel).value = s.finder || 'square';\n    $('[data-adk-qr-fg]', ui.qrPanel).value = s.fg || '#000000';\n    $('[data-adk-qr-bg]', ui.qrPanel).value = s.bg || '#ffffff';\n    ui.qrAdd.textContent = 'Update this QR code';\n  }\n  function qrPreview() {\n    if (!window.ArdorQR || !ui.qrPrev) return;\n    var s = qrSettings(), data = qrPayload(s.type, s.v), Q = window.ArdorQR;\n    ui.qrWarn.hidden = true;\n    if (!data) { ui.qrPrev.innerHTML = '<p class=\"abl-help\">Fill in the details above to see your code.</p>'; ui.qrAdd.disabled = true; return; }\n    try {\n      var q = Q.encode(data, 'M');\n      ui.qrPrev.innerHTML = Q.svg(q, { fg: s.fg, bg: s.bg, px: 180, quiet: 4, style: s.style, finder: s.finder });\n      ui.qrAdd.disabled = false;\n      if (!Q.ok(s.fg, s.bg)) { ui.qrWarn.textContent = 'Phones scan best with a dark code on a light background. These colors may not scan.'; ui.qrWarn.hidden = false; }\n    } catch (e) { ui.qrPrev.innerHTML = '<p class=\"adk-warn\">That is too long for a QR code. Please shorten it.</p>'; ui.qrAdd.disabled = true; }\n    qrSizeNote();\n  }\n  function qrSizeNote() {\n    var o = st.qrEdit || (fc && fc.getActiveObject());\n    if (!ui.qrSize || !window.ArdorQR) return;\n    if (o && o.ablKind === 'qr') { var w = o.getScaledWidth(); ui.qrSize.textContent = 'On your display this code is ' + (Math.round(w * 10) / 10) + ' in wide: easy to scan from about ' + Math.round(window.ArdorQR.scanDistanceFt(w)) + ' ft away.'; }\n    else ui.qrSize.textContent = '';\n  }\n  function makeQrGroup(s, data, sizeIn) {\n    var Q = window.ArdorQR, q = Q.encode(data, 'M');\n    var p = Q.path(q, { quiet: 0, style: s.style, finder: s.finder });\n    var code = new fabric.Path(p.d, { fill: s.fg, fillRule: 'evenodd', stroke: null, strokeWidth: 0, originX: 'center', originY: 'center' });\n    var u = (sizeIn * 0.84) / Math.max(code.width || 1, code.height || 1);\n    code.set({ scaleX: u, scaleY: u, left: 0, top: 0 });\n    var r = sizeIn * 0.06;\n    var plate = new fabric.Rect({ width: sizeIn, height: sizeIn, rx: r, ry: r, fill: s.bg, originX: 'center', originY: 'center', left: 0, top: 0, strokeWidth: 0 });\n    var g = new fabric.Group([plate, code], { originX: 'center', originY: 'center', ablKind: 'qr', ablLabel: 'QR code', ablRole: 'qr', ablQr: JSON.stringify(s), lockScalingFlip: true });\n    return g;\n  }\n  function addQr() {\n    Promise.all([K.ready(), load('qr')]).then(function () {\n      fabric = K.fabric(); canvas(); registerClasses(); hookCanvas();\n      var s = qrSettings(), data = qrPayload(s.type, s.v);\n      if (!data) return;\n      K.targetFace();\n      var z = cfgSize(), sz = Math.min(z.safe.h * 0.46, z.safe.w * 0.26, 30);\n      var old = st.qrEdit && fc.getObjects().indexOf(st.qrEdit) >= 0 ? st.qrEdit : null;\n      if (old) sz = old.getScaledWidth();\n      // real estate: a template's QR spot gets the code in its place and at its size\n      var spot = null;\n      if (!old) { var phs = fc.getObjects().filter(function (o) { return o.ablRole === 'qr' && o.ablKind !== 'qr'; }); spot = phs.length ? spotBox(phs, 'qr') : null; if (spot) sz = Math.max(1, Math.min(spot.r - spot.l, spot.b - spot.t)); }\n      var g = makeQrGroup(s, data, sz);\n      K.look(g);\n      if (old) {\n        g.set({ left: old.left, top: old.top, angle: old.angle || 0 });\n        var idx = fc.getObjects().indexOf(old);\n        K.setQuiet(true); fc.remove(old); fc.insertAt(g, idx); K.setQuiet(false);\n        fc.setActiveObject(g); g.setCoords(); K.changed(true); K.syncProps();\n      } else {\n        g.set({ left: z.safe.x + z.safe.w - sz / 2 - z.safe.w * 0.04, top: z.safe.y + z.safe.h / 2 });\n        if (z.safe.w / z.safe.h < 1) g.set({ left: z.Wi / 2, top: z.safe.y + z.safe.h - sz / 2 - z.safe.h * 0.04 });\n        if (spot) g.set({ left: (spot.l + spot.r) / 2, top: (spot.t + spot.b) / 2 });\n        K.place(g);\n      }\n      st.qrEdit = g; ui.qrAdd.textContent = 'Update this QR code';\n      qrSizeNote();\n      // a template's QR spot placeholder is no longer needed\n      var ph = fc.getObjects().filter(function (o) { return o.ablRole === 'qr' && o.ablKind !== 'qr'; });\n      if (ph.length && !old) { K.setQuiet(true); fc.remove.apply(fc, ph); K.setQuiet(false); K.changed(true); }\n      track('qr_' + s.type);\n    }).catch(failed);\n  }\n\n  // ---------- properties panel extras (QR code, logo spot) ----------\n  function buildPropsExtras() {\n    var props = K.ui().props; if (!props) return;\n    var qrBox = el('div', 'adk-props-qr', '<p class=\"abl-help\" data-adk-pqr-size></p><button type=\"button\" class=\"abl-done\" data-adk-pqr-edit>Edit QR code</button>');\n    qrBox.setAttribute('data-abl-p', 'qr'); qrBox.hidden = true;\n    var logoBox = el('div', 'adk-props-logo', '<p class=\"abl-help\" data-adk-logo-note>This is a spot for your logo.</p><label class=\"adk-btn adk-btn--wide adk-file\"><span data-adk-logo-lbl>Upload logo</span><input type=\"file\" accept=\"image/png,image/jpeg,image/webp,image/svg+xml\" data-adk-logo-file hidden></label>');\n    logoBox.hidden = true;\n    var photoBox = el('div', 'adk-props-logo adk-props-photo', '<p class=\"abl-help\" data-adk-photo-note>This is a spot for the photo. We crop your photo to fill it.</p><label class=\"adk-btn adk-btn--wide adk-file\"><span data-adk-photo-lbl>Upload photo</span><input type=\"file\" accept=\"image/png,image/jpeg,image/webp\" data-adk-photo-file hidden></label>');\n    photoBox.hidden = true;\n    var head = $('.abl-props__head', props);\n    if (head && head.nextSibling) { props.insertBefore(logoBox, head.nextSibling); props.insertBefore(photoBox, logoBox.nextSibling); } else { props.appendChild(logoBox); props.appendChild(photoBox); }\n    props.appendChild(qrBox);\n    ui.pQr = qrBox; ui.pLogo = logoBox; ui.pPhoto = photoBox;\n    $('[data-adk-pqr-edit]', qrBox).addEventListener('click', function () { if (ui.tQr) ui.tQr.click(); });\n    var tt = K.ui().pTitle;\n    if (tt && window.MutationObserver) new MutationObserver(function () {\n      var o = fc && fc.getActiveObject(); if (!o) return;\n      var want = o.ablKind === 'qr' ? 'QR code' : (o.ablRole === 'logo' ? 'Logo spot' : (o.ablRole === 'photo' ? 'Photo spot' : (o.ablRole === 'photo-img' ? 'Photo' : (o.ablRole === 'logo-img' ? 'Your logo' : ''))));\n      if (want && tt.textContent !== want) tt.textContent = want;\n    }).observe(tt, { childList: true, characterData: true, subtree: true });\n    $('[data-adk-logo-file]', logoBox).addEventListener('change', function (e) { var f = e.target.files && e.target.files[0]; e.target.value = ''; if (f) addLogo(f); });\n    $('[data-adk-photo-file]', photoBox).addEventListener('change', function (e) { var f = e.target.files && e.target.files[0]; e.target.value = ''; if (f) addPhoto(f); });\n  }\n  function selSync() {\n    var o = fc && fc.getActiveObject(), u = K.ui();\n    var isLogo = !!(o && (o.ablRole === 'logo' || o.ablRole === 'logo-img')), isPhoto = !!(o && (o.ablRole === 'photo' || o.ablRole === 'photo-img'));\n    if (ui.pLogo) { ui.pLogo.hidden = !isLogo; $('[data-adk-logo-lbl]', ui.pLogo).textContent = o && o.ablRole === 'logo-img' ? 'Replace logo' : 'Upload logo'; $('[data-adk-logo-note]', ui.pLogo).textContent = o && o.ablRole === 'logo-img' ? 'Your logo.' : 'This is a spot for your logo.'; }\n    if (ui.pPhoto) { ui.pPhoto.hidden = !isPhoto; $('[data-adk-photo-lbl]', ui.pPhoto).textContent = o && o.ablRole === 'photo-img' ? 'Replace photo' : 'Upload photo'; $('[data-adk-photo-note]', ui.pPhoto).textContent = o && o.ablRole === 'photo-img' ? 'The photo. A new photo is cropped to the same spot.' : 'This is a spot for the photo. We crop your photo to fill it.'; }\n    if (o && o.ablKind === 'qr' && u && u.pTitle) {\n      u.pTitle.textContent = 'QR code';\n      var w = o.getScaledWidth(), sz = $('[data-adk-pqr-size]', ui.pQr);\n      if (sz && window.ArdorQR) sz.textContent = Math.round(w * 10) / 10 + ' in wide. Easy to scan from about ' + Math.round(window.ArdorQR.scanDistanceFt(w)) + ' ft.';\n      if (ui.qrPanel && !ui.qrPanel.hidden) { loadQrSettings(o); qrPreview(); }\n    }\n    if (o && o.ablRole === 'logo' && u && u.pTitle) u.pTitle.textContent = 'Logo spot';\n    if (o && o.ablRole === 'photo' && u && u.pTitle) u.pTitle.textContent = 'Photo spot';\n    if (o && o.ablRole === 'photo-img' && u && u.pTitle) u.pTitle.textContent = 'Photo';\n    if (o && o.ablRole === 'logo-img' && u && u.pTitle) u.pTitle.textContent = 'Your logo';\n  }\n  // put an uploaded image into the template spots of a role ('logo' or 'photo'): replaces the spot (and an image put\n  // there before), keeps its place in the stacking order (frames drawn over the spot stay on top), keeps the template id\n  function putInSpot(im, role, fallback) {\n    var all = fc.getObjects(), spots = all.filter(function (o) { return o.ablRole === role || o.ablRole === role + '-img'; });\n    var box = spotBox(spots, role) || spotBox(spots, role + '-img'), z = cfgSize(), at = -1, tplId = null;\n    spots.forEach(function (o) { var i = all.indexOf(o); if (at < 0 || i < at) at = i; if (o.ablTpl) tplId = o.ablTpl; });\n    if (!box) box = fallback(z);\n    fitToBox(im, box);\n    im.set({ ablKind: 'image', ablRole: role + '-img', ablTpl: tplId });\n    K.look(im);\n    K.setQuiet(true);\n    if (spots.length) fc.remove.apply(fc, spots);\n    if (at >= 0) fc.insertAt(im, Math.min(at, fc.getObjects().length)); else fc.add(im);\n    K.setQuiet(false);\n    fc.setActiveObject(im); im.setCoords();\n    K.changed(true); K.syncProps(); fc.requestRenderAll();\n    if (phone()) K.closeDrawer();\n    return box;\n  }\n  function readImage(file, types, msg, cb) {\n    if (!types.test(file.type) || file.size > 25 * 1024 * 1024) { toast(msg, 5000); return; }\n    var rd = new FileReader();\n    rd.onload = function () {\n      var img = new Image();\n      img.onload = function () { K.ready().then(function () { fabric = K.fabric(); canvas(); K.targetFace(); cb(img); }).catch(failed); };\n      img.onerror = function () { toast('We could not read that image. Please try a PNG or JPG.', 5000); };\n      img.src = rd.result;\n    };\n    rd.readAsDataURL(file);\n  }\n  function addLogo(file) {\n    readImage(file, /^image\\//, 'Please pick a PNG, JPG, WebP or SVG image under 25 MB.', function (img) {\n      var max = 2400, w = img.naturalWidth || 800, h = img.naturalHeight || 800, k = Math.min(1, max / Math.max(w, h));\n      var cv = el('canvas'); cv.width = Math.max(1, Math.round(w * k)); cv.height = Math.max(1, Math.round(h * k));\n      cv.getContext('2d').drawImage(img, 0, 0, cv.width, cv.height);\n      var url = cv.toDataURL(/png|svg|webp/.test(file.type) ? 'image/png' : 'image/jpeg', 0.92);\n      fabric.Image.fromURL(url, function (im) {\n        im.set({ ablLabel: 'Your logo' });\n        putInSpot(im, 'logo', function (z) { return { l: z.Wi / 2 - z.safe.w * 0.15, t: z.Hi / 2 - z.safe.h * 0.2, r: z.Wi / 2 + z.safe.w * 0.15, b: z.Hi / 2 + z.safe.h * 0.2 }; });\n        track('logo');\n      });\n    });\n  }\n  // agent photo: cropped to cover the spot's box (center crop), round spots cut to a circle (transparent corners)\n  function addPhoto(file) {\n    readImage(file, /^image\\/(png|jpeg|jpg|webp)$/i, 'Please pick a JPG, PNG or WebP photo under 25 MB.', function (img) {\n      var spots = fc.getObjects().filter(function (o) { return o.ablRole === 'photo' || o.ablRole === 'photo-img'; });\n      var z = cfgSize(), box = spotBox(spots, 'photo') || spotBox(spots, 'photo-img');\n      if (!box) { var d = Math.min(z.safe.w, z.safe.h) * 0.4; box = { l: z.safe.x + z.safe.w * 0.06, t: z.safe.y + (z.safe.h - d) / 2, r: z.safe.x + z.safe.w * 0.06 + d, b: z.safe.y + (z.safe.h + d) / 2 }; }\n      var round = spots.some(function (o) { return /round/i.test(o.ablLabel || ''); });\n      var bw = box.r - box.l, bh = box.b - box.t, ar = bw / bh;\n      var sw = img.naturalWidth || 800, sh = img.naturalHeight || 800, cw = sw, ch = sh;\n      if (sw / sh > ar) cw = sh * ar; else ch = sw / ar;\n      var outW = Math.max(64, Math.round(Math.min(1800, cw, Math.max(bw, bh) * 150)));\n      var outH = Math.max(64, Math.round(outW / ar));\n      var cv = el('canvas'); cv.width = outW; cv.height = outH;\n      var c2 = cv.getContext('2d');\n      if (round) { c2.beginPath(); c2.ellipse(outW / 2, outH / 2, outW / 2, outH / 2, 0, 0, Math.PI * 2); c2.closePath(); c2.clip(); }\n      c2.imageSmoothingQuality = 'high';\n      c2.drawImage(img, (sw - cw) / 2, (sh - ch) / 2, cw, ch, 0, 0, outW, outH);\n      var url = round ? cv.toDataURL('image/png') : cv.toDataURL('image/jpeg', 0.92);\n      fabric.Image.fromURL(url, function (im) {\n        im.set({ ablLabel: round ? 'Photo (round)' : 'Photo' });\n        putInSpot(im, 'photo', function () { return box; });\n        track('photo');\n      });\n    });\n  }\n\n  // wrap ArdorTPL.build so every built text remembers its original wording\n  function wrapBuild() {\n    var T = window.ArdorTPL; if (!T || T.__adkWrapped) return;\n    var b = T.build; T.build = function () { var r = b.apply(T, arguments); markBuilt(r); return r; }; T.__adkWrapped = true;\n  }\n  var _lt = loadTpl; loadTpl = function () { return _lt().then(function (x) { wrapBuild(); return x; }); };\n\n  // before Add to cart: warn once when sample words or empty logo / QR spots are still on the banner\n  var SAMPLE = /YOUR BUSINESS|\\(555\\) 555-5555|YOURWEBSITE\\.COM|YOUR TAGLINE HERE|MONTH DAY|YOUR ADDRESS, CITY|YOUR LOGO|YOUR QR CODE|TEAM NAME|GRADUATE NAME|ADD A HEADING|ADD A SUBHEADING|ADD A LITTLE BIT OF BODY TEXT|YOUR NAME|AGENT NAME|YOUR BROKERAGE|BROKERAGE NAME|AGENT PHOTO|123 MAIN ST|\\$000,000|0,000 SQ FT|YOUR CITY|LISTING ADDRESS/i;\n  function leftovers() {\n    if (!K || !fc) return [];\n    var out = [];\n    FACES.forEach(function (f) {\n      var list = []; try { list = K.objectsFor(f) || []; } catch (e) { list = []; }\n      list.forEach(function (o) {\n        if (o.ablKind === 'text' && SAMPLE.test(String(o.text || '').replace(/\\s+/g, ' '))) out.push(String(o.text).replace(/\\s+/g, ' ').slice(0, 40));\n        else if (o.ablRole === 'logo' && o.ablKind !== 'text' && out.indexOf('YOUR LOGO') < 0) out.push('YOUR LOGO');\n        else if (o.ablRole === 'photo' && o.ablKind !== 'text' && out.indexOf('AGENT PHOTO') < 0) out.push('AGENT PHOTO');\n      });\n    });\n    return out.filter(function (v, i, a) { return a.indexOf(v) === i; });\n  }\n  var cartOk = 0;\n  document.addEventListener('click', function (e) {\n    try { fitAll(); } catch (x) {} // every click: faces are fitted before 3D, proof, PDF, print or Add to cart read them\n    var b = e.target.closest && e.target.closest('[data-abb-add], [data-abb-add-d], [data-abb-add-m]');\n    if (!b || Date.now() - cartOk < 60000) return;\n    var left = leftovers();\n    if (!left.length) return;\n    e.preventDefault(); e.stopPropagation(); if (e.stopImmediatePropagation) e.stopImmediatePropagation();\n    toast('Your display still shows sample text: ' + left.slice(0, 4).join(', ') + (left.length > 4 ? '...' : '') + '. Change or delete it before you order.', 12000, { label: 'Order anyway', run: function () { cartOk = Date.now(); b.click(); } });\n    track('sample_text_warning');\n  }, true);\n\n  // ---------- Oct 20 2026 (upload bug, -up copy): artwork uploaded onto a face that holds a background ----------\n  // The designer paints uploaded artwork UNDER the layers, so the full-page Background layer (fabric.ArdorBg) hid a new\n  // upload completely: on screen, in 3D, on the proof and in the print file. The designer's loadFile\n  // (assets/ardor-seg-builder-up.js) now asks first (askUpload): \"Add it as a logo\" = an ordinary image layer on top,\n  // fitted into the middle half of the safe area (SEG has no template logo spots), or \"Replace\" = clearDesign takes the\n  // background (and any template layers) off that face and the file becomes its artwork; what the customer added (text,\n  // clipart, uploaded logos, QR codes) stays. artGuard (450 ms watch) never lets artwork and a background layer share a\n  // face (undo after a replace): the artwork is parked with a message and comes back when redo brings back the layers.\n  // Same fix as the real estate designer (assets/ardor-realestate-kit.js), with one change: a logo placed in the middle\n  // gets no 'logo-img' role, so \"Replace logo\" on one logo can never swallow a second uploaded logo.\n  var upAsk = null, park = {}, lastSig = {};\n  function layersOf(face) { try { return canvas() && face === curFace() ? fc.getObjects() : (K.objectsFor(face) || []); } catch (e) { return []; } }\n  function keepOnReplace(o) { return o.ablRole === 'logo-img' || o.ablRole === 'photo-img' || o.ablKind === 'qr'; }\n  function designFor(face) {\n    if (!booted || !K || !API) return null;\n    var list = layersOf(face), bg = false, tpl = 0, spot = false;\n    list.forEach(function (o) {\n      if (o.ablKind === 'bg') bg = true;\n      else if (o.ablTpl && !keepOnReplace(o)) tpl++;\n      if (o.ablRole === 'logo') spot = true;\n    });\n    if (!bg && !tpl) return null;\n    return { bg: bg, tpl: tpl > 0, spot: spot, piece: 'display' };\n  }\n  function sigOf(list) { return list.map(function (o) { return [o.type, o.ablKind || '', o.ablRole || '', Math.round((o.left || 0) * 1000), Math.round((o.top || 0) * 1000)].join(':'); }).join('|'); }\n  // take the background (or a template) off a face; why: 'ask' (the customer picked Replace) or 'ai' (an AI design)\n  function clearDesign(face, why) {\n    var d = designFor(face); if (!d) return false;\n    var isCur = !!canvas() && face === curFace(), list = layersOf(face).slice(), gone = [], kept = 0;\n    list.forEach(function (o) {\n      if (o.ablKind === 'bg' || (o.ablTpl && !keepOnReplace(o))) { gone.push(o); return; }\n      if (o.ablTpl) o.ablTpl = null;\n      kept++;\n    });\n    if (isCur) { K.setQuiet(true); fc.discardActiveObject(); if (gone.length) fc.remove.apply(fc, gone); K.setQuiet(false); }\n    else { var store = K.objectsFor(face) || []; gone.forEach(function (o) { var i = store.indexOf(o); if (i >= 0) store.splice(i, 1); }); }\n    if (st.fitMem) delete st.fitMem[face];\n    delete st.byFace[face];\n    if (st.tplFace === face) { st.tpl = null; st.tplFace = null; st.tplVar = ''; st.tplDirty = false; }\n    delete park[face]; lastSig[face] = sigOf(layersOf(face));\n    K.changed(true); if (isCur) { K.sync(); K.syncProps(); fc.requestRenderAll(); }\n    var what = d.tpl ? 'template' : 'background';\n    toast(why === 'ai' ? 'Your new design replaced the ' + what + ' on your ' + d.piece + '.' : 'We took the ' + what + ' off your ' + d.piece + '. Your artwork fills it now.' + (kept ? ' What you added yourself stays on top.' : '') + ' Undo brings the ' + what + ' back.', 6000);\n    return true;\n  }\n  function closeAsk() { if (!upAsk) return; try { upAsk.parentNode.removeChild(upAsk); } catch (e) {} document.removeEventListener('keydown', askKey, true); upAsk = null; }\n  function askKey(e) { if (e.key === 'Escape' && upAsk) { e.preventDefault(); e.stopPropagation(); closeAsk(); } }\n  // o: { file, face, preview() (the designer's PDF / AI / EPS / TIFF / PSD preview), replace() }\n  function askUpload(o) {\n    var d = designFor(o.face);\n    if (!d) { o.replace(); return; }\n    closeAsk(); delete park[o.face];\n    var what = d.tpl ? 'template' : 'background', p = d.piece, w = el('div', 'adk-ask');\n    w.innerHTML = '<div class=\"adk-ask__card\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"adk-ask-t\">' +\n      '<p class=\"adk-ask__t\" id=\"adk-ask-t\">Your ' + p + ' has a ' + what + '</p>' +\n      '<p class=\"adk-ask__p\">How do you want to use <b>' + esc(o.file.name) + '</b>?</p>' +\n      '<button type=\"button\" class=\"adk-ask__opt\" data-adk-ask=\"logo\"><b>Add it as a logo on my ' + p + '</b><span>' +\n      (d.spot ? 'It goes in the template\\'s logo spot.' : 'It goes in the middle of your ' + p + '.') + ' Drag or resize it any time.</span></button>' +\n      '<button type=\"button\" class=\"adk-ask__opt\" data-adk-ask=\"replace\"><b>Replace the ' + what + ' with my artwork</b><span>Your file fills the whole ' + p + '. ' +\n      (d.tpl ? 'The template\\'s background, text and shapes come off.' : 'The background comes off.') + ' What you added yourself stays.</span></button>' +\n      '<button type=\"button\" class=\"adk-ask__x\" data-adk-ask=\"cancel\">Cancel</button></div>';\n    w.addEventListener('click', function (e) {\n      var bt = e.target.closest ? e.target.closest('[data-adk-ask]') : null;\n      if (!bt) { if (e.target === w) closeAsk(); return; }\n      var c = bt.getAttribute('data-adk-ask'); closeAsk();\n      if (c === 'logo') uploadAsLogo(o, p);\n      else if (c === 'replace') o.replace();\n    });\n    document.body.appendChild(w); upAsk = w;\n    document.addEventListener('keydown', askKey, true);\n    var first = w.querySelector('[data-adk-ask=\"logo\"]'); if (first) { try { first.focus({ preventScroll: true }); } catch (e) {} }\n  }\n  // the uploaded file as an ordinary image layer on top: into an empty logo spot when the face has one, else fitted\n  // into the middle half of the safe area; PDF / AI / EPS / TIFF / PSD files use the designer's preview picture\n  function uploadAsLogo(o, p) {\n    var f = o.file, isSvg = /svg/i.test(f.type) || /\\.svg$/i.test(f.name), isJpg = /jpe?g/i.test(f.type) || /\\.jpe?g$/i.test(f.name);\n    var isImg = /^image\\/(png|jpeg|webp|svg\\+xml|gif)$/.test(f.type) || /\\.(png|jpe?g|webp|svg|gif)$/i.test(f.name);\n    var got = isImg ? new Promise(function (res, rej) {\n      var rd = new FileReader();\n      rd.onload = function () { var img = new Image(); img.onload = function () { res(img); }; img.onerror = rej; img.src = rd.result; };\n      rd.onerror = rej; rd.readAsDataURL(f);\n    }) : Promise.resolve(o.preview ? o.preview() : null).then(function (r) { if (r && r.ok && r.canvas) return r.canvas; throw new Error('preview'); });\n    got.then(function (img) { return K.ready().then(function () { return img; }); }).then(function (img) {\n      fabric = K.fabric(); canvas(); K.targetFace();\n      var max = 2400, w = img.naturalWidth || img.width || 800, h = img.naturalHeight || img.height || 800;\n      var s = isSvg ? max / Math.max(w, h) : Math.min(1, max / Math.max(w, h));\n      var cv = el('canvas'); cv.width = Math.max(1, Math.round(w * s)); cv.height = Math.max(1, Math.round(h * s));\n      cv.getContext('2d').drawImage(img, 0, 0, cv.width, cv.height);\n      var url = cv.toDataURL(isJpg ? 'image/jpeg' : 'image/png', 0.92);\n      fabric.Image.fromURL(url, function (im) {\n        if (!im || !im.width) { toast('We could not read that image. Please try a PNG or JPG.', 5000); return; }\n        im.set({ ablLabel: 'Your logo' });\n        if (fc.getObjects().some(function (x) { return x.ablRole === 'logo'; })) {\n          putInSpot(im, 'logo', function (z) { return { l: z.Wi / 2 - z.safe.w * 0.15, t: z.Hi / 2 - z.safe.h * 0.2, r: z.Wi / 2 + z.safe.w * 0.15, b: z.Hi / 2 + z.safe.h * 0.2 }; });\n          toast('Your logo is in the template\\'s logo spot. Drag or resize it any time.', 5000);\n        } else {\n          var z = cfgSize(), sa = z.safe;\n          fitToBox(im, { l: sa.x + sa.w * 0.25, t: sa.y + sa.h * 0.25, r: sa.x + sa.w * 0.75, b: sa.y + sa.h * 0.75 });\n          im.set({ ablKind: 'image', ablTpl: null });\n          K.look(im); K.place(im); fc.requestRenderAll();\n          if (phone()) K.closeDrawer();\n          toast('Your logo is on your ' + (p || 'display') + '. Drag or resize it any time.', 5000);\n        }\n        track('logo');\n      });\n    }).catch(function () {\n      toast(isImg ? 'We could not read that image. Please try a PNG or JPG.' : 'We could not show this file as a logo. Use a PNG, JPG or SVG, or pick Replace to use it as your whole design.', 7000);\n    });\n  }\n  function artGuard() {\n    if (!booted || !K || !API || st.rebuilding || upAsk || !canvas() || !settled()) return;\n    var faces = []; try { faces = K.faces ? K.faces() : []; } catch (e) { return; }\n    (faces || []).forEach(function (f) {\n      var a = faceArt(f), list = layersOf(f), bg = list.some(function (o) { return o.ablKind === 'bg'; }), p = 'display';\n      if (a && !bg) { lastSig[f] = sigOf(list); return; }\n      if (a && bg) {\n        var known = typeof lastSig[f] === 'string';\n        park[f] = { art: a, sig: known ? lastSig[f] : null };\n        try { API.setArt(f, null); } catch (e) {}\n        toast(known ? 'Undo brought the background back, so your uploaded artwork is off the ' + p + ' for now. Redo puts it back.' : 'Your uploaded artwork was under the background, so we took it off the ' + p + '. Upload it again to add it.', 7000);\n        return;\n      }\n      if (!a && !bg && park[f] && park[f].sig !== null && sigOf(list) === park[f].sig) {\n        var x = park[f]; delete park[f];\n        try { API.setArt(f, x.art); } catch (e) {}\n        toast('Your artwork is back on the ' + p + '.', 4000);\n      }\n    });\n  }\n\n  window.ArdorSegKit = { v: 1, applyTemplate: function (id) { return loadTpl().then(function () { return applyTemplate(window.ArdorTPL.get(id), {}); }); }, setBackground: setBackground, state: st, designFor: designFor, askUpload: askUpload, clearDesign: clearDesign };\n  if (window.ArdorSegLayers && window.ArdorSegLayers.kit) boot();\n  else document.addEventListener('ardor:layers-kit', boot);\n  var tries = 0, t = setInterval(function () { if (booted || ++tries > 80) { clearInterval(t); return; } boot(); }, 250);\n})();\n"],
  "mappings": "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",
  "names": ["t", "tries", "z"]
}
