{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/ardor-seg-layers-kit.js?x=1792510704273"],
  "sourcesContent": ["/* Ardor SEG Display Designer: Text and Clipart layers (sticker builder style) and the hooks of the full designer kit\n(assets/ardor-seg-kit.js: text presets, backgrounds, QR codes). Ardor Printing. New Oct 19, 2026 (SEG-CORE). Made from a\ncopy of the LIVE assets/ardor-realestate-layers-kit.js (unchanged) by the patch list seg/core/layers.patch: the AI tool,\nthe AI drawer, the \"Describe your idea\" links and the AI hand-off are OFF (no AI tools in the SEG designer, Dayne's\ndecision), and the back page keeps its own size: SZ.sign = the front page, SZ.back = the back page (popup backs are a\nsmaller page than the wrap), so each page's layers are kept in that page's inches. Faces: 'front' and 'back' (the rider\nfaces of the copied code stay idle). Talks to the builder only through window.ArdorSegAPI and gives it\nwindow.ArdorSegLayers = { paint, composite, has, list, sync, kit, ... }. */\n(function () {\n  'use strict';\n  if (window.ArdorSegLayers) return;\n\n  var IDEA_PAGE = ''; // set from the config (\"ideasUrl\") at start; empty = the Ideas tool is off\n  var IDEA_API = 'https://ws-idea-api.dayne-18a.workers.dev';\n  var FONT_CSS = 'https://fonts.googleapis.com/css2?family=Unbounded:wght@200..900&family=Anton&family=Bangers&family=Bebas+Neue&family=Black+Ops+One&family=Bree+Serif&family=Comic+Neue:wght@700&family=Homemade+Apple&family=Italiana&family=Lobster&family=Monoton&family=Orbitron:wght@800&family=Pacifico&family=Permanent+Marker&family=Quicksand:wght@700&family=Righteous&family=Rubik+Mono+One&family=Satisfy&family=Special+Elite&display=swap';\n  // same fonts and clipart as the sticker builder (ardor-sticker-studio.js)\n  var FONTS = [['Arial', 'Arial'], ['Unbounded', 'Unbounded'], ['Jost', 'Jost'], ['Anton', 'Anton'], ['Bebas Neue', 'Bebas Neue'], ['Black Ops One', 'Black Ops One'], ['Bangers', 'Bangers'], ['Orbitron', 'Digital'], ['Rubik Mono One', 'Rubik Mono'], ['Righteous', 'Righteous'], ['Monoton', 'Monoton'], ['Permanent Marker', 'Permanent Marker'], ['Pacifico', 'Pacifico'], ['Lobster', 'Lobster'], ['Satisfy', 'Satisfy'], ['Homemade Apple', 'Homemade Apple'], ['Special Elite', 'Special Elite'], ['Quicksand', 'Quicksand'], ['Bree Serif', 'Bree Serif'], ['Comic Neue', 'Comic Neue'], ['Italiana', 'Italiana'], ['Georgia', 'Georgia']];\n  function burst(n, r12, r2) { var d = ''; for (var i = 0; i < n * 2; i++) { var r = i % 2 ? r2 : r12, a = Math.PI * i / n - Math.PI / 2; d += (i ? 'L' : 'M') + (50 + r * Math.cos(a)).toFixed(1) + ' ' + (50 + r * Math.sin(a)).toFixed(1) + ' '; } return d + 'Z'; }\n  var CLIPART = [\n    { cat: 'Shapes', name: 'star', d: 'M50 5 61 38 96 38 68 59 79 93 50 72 21 93 32 59 4 38 39 38Z' },\n    { cat: 'Shapes', name: 'heart', d: 'M50 90C20 68 4 52 4 31 4 17 15 6 29 6c9 0 17 5 21 13 4-8 12-13 21-13 14 0 25 11 25 25 0 21-16 37-46 59Z' },\n    { cat: 'Shapes', name: 'circle', d: 'M50 4a46 46 0 1 0 .1 0Z' },\n    { cat: 'Shapes', name: 'square', d: 'M8 8h84v84H8Z' },\n    { cat: 'Shapes', name: 'triangle', d: 'M50 6 96 90H4Z' },\n    { cat: 'Shapes', name: 'hexagon', d: 'M50 4 90 27v46L50 96 10 73V27Z' },\n    { cat: 'Badges', name: 'seal', d: burst(16, 48, 40) },\n    { cat: 'Badges', name: 'burst', d: burst(12, 48, 30) },\n    { cat: 'Badges', name: 'bubble', d: 'M12 8h76a8 8 0 0 1 8 8v46a8 8 0 0 1-8 8H46L24 92V70H12a8 8 0 0 1-8-8V16a8 8 0 0 1 8-8Z' },\n    { cat: 'Badges', name: 'ribbon', d: 'M4 30h92l-12 20 12 20H4l12-20Z' },\n    { cat: 'Badges', name: 'shield', d: 'M50 4 88 18v28c0 24-16 42-38 50C28 88 12 70 12 46V18Z' },\n    { cat: 'Badges', name: 'crown', d: 'M8 80 14 26l20 24 16-32 16 32 20-24 6 54Z' },\n    { cat: 'Icons', name: 'bolt', d: 'M58 4 18 56h28l-8 40 44-56H54Z' },\n    { cat: 'Icons', name: 'flame', d: 'M50 96c-22 0-36-16-36-36 0-20 16-30 20-48 10 12 12 22 10 32 8-8 12-18 10-30 20 14 32 32 32 48 0 20-14 34-36 34Z' },\n    { cat: 'Icons', name: 'cross', d: 'M41 4h18v26h26v18H59v48H41V48H15V30h26Z' },\n    { cat: 'Icons', name: 'arrow', d: 'M4 40h56V18l36 32-36 32V60H4Z' },\n    { cat: 'Icons', name: 'mountain', d: 'M4 88 36 34l16 24 14-18 30 48Z' },\n    { cat: 'Icons', name: 'cloud', d: 'M26 80C12 80 4 70 4 60c0-12 10-20 22-18 2-16 14-26 28-26 16 0 28 12 28 26 10 0 16 8 16 18 0 12-8 20-20 20Z' },\n    { cat: 'Icons', name: 'moon', d: 'M62 6C38 12 24 32 24 54c0 24 20 42 44 42 14 0 24-6 30-14-10 4-20 4-28 2-22-6-34-26-30-46 4-16 12-26 22-32Z' },\n    { cat: 'Icons', name: 'pin', d: 'M50 96S16 58 16 36C16 17 31 4 50 4s34 13 34 32c0 22-34 60-34 60Zm0-46a12 12 0 1 0 0-24 12 12 0 0 0 0 24Z' },\n    { cat: 'Icons', name: 'leaf', d: 'M10 90C10 40 40 10 92 8c-2 52-32 82-82 82Z' },\n    { cat: 'Icons', name: 'drop', d: 'M50 4S18 44 18 64a32 32 0 0 0 64 0C82 44 50 4 50 4Z' },\n    { cat: 'Icons', name: 'music', d: 'M84 4 36 14v50a14 12 0 1 0 8 11V32l32-7v31a14 12 0 1 0 8 11Z' },\n    { cat: 'Icons', name: 'sparkle', d: 'M50 0c3 27 15 42 50 50-35 8-47 23-50 50-3-27-15-42-50-50C35 42 47 27 50 0Z' }\n  ];\n  var S2 = 'viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"';\n  var IC = {\n    clip: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 3 7 11h10z\"/><circle cx=\"7\" cy=\"17\" r=\"4\"/><rect x=\"13\" y=\"13\" width=\"8\" height=\"8\" rx=\"1\"/></svg>',\n    spark: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 1.5c.6 5 2.8 7.8 9 9.2v.6c-6.2 1.4-8.4 4.2-9 9.2h-.6c-.6-5-2.8-7.8-9-9.2v-.6c6.2-1.4 8.4-4.2 9-9.2z\"/></svg>',\n    x: '<svg ' + S2 + ' width=\"20\" height=\"20\"><path d=\"M6 6l12 12M18 6 6 18\"/></svg>',\n    flipx: '<svg ' + S2 + '><path d=\"M12 3v18M8 7l-5 5 5 5M16 7l5 5-5 5\"/></svg>',\n    flipy: '<svg ' + S2 + '><path d=\"M3 12h18M7 8l5-5 5 5M7 16l5 5 5-5\"/></svg>',\n    forward: '<svg ' + S2 + '><path d=\"M12 20V4M6 10l6-6 6 6M5 21h14\"/></svg>',\n    backward: '<svg ' + S2 + '><path d=\"M12 4v16M6 14l6 6 6-6M5 3h14\"/></svg>',\n    duplicate: '<svg ' + S2 + '><rect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M4 16V5a1 1 0 0 1 1-1h11\"/></svg>',\n    trash: '<svg ' + S2 + '><path d=\"M3 6h18M8 6V4h8v2M6 6l1 15h10l1-15\"/></svg>',\n    undo: '<svg ' + S2 + '><path d=\"M9 14 4 9l5-5\"/><path d=\"M4 9h11a5 5 0 0 1 0 10h-3\"/></svg>',\n    redo: '<svg ' + S2 + '><path d=\"m15 14 5-5-5-5\"/><path d=\"M20 9H9a5 5 0 0 0 0 10h3\"/></svg>',\n    left: '<svg ' + S2 + '><path d=\"M4 6h16M4 12h10M4 18h13\"/></svg>',\n    center: '<svg ' + S2 + '><path d=\"M4 6h16M7 12h10M5 18h14\"/></svg>',\n    right: '<svg ' + S2 + '><path d=\"M4 6h16M10 12h10M7 18h13\"/></svg>',\n    logo: '<svg ' + S2 + '><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"m7 15 3-3 2 2 3-4 2 3\"/><circle cx=\"8.5\" cy=\"9\" r=\"1.2\"/></svg>'\n  };\n  var PROPS = ['ablKind', 'ablLabel', 'ablLogo', 'ablStroke', 'selectable', 'evented', 'ablRole', 'ablTpl', 'ablQr', 'ablBg'];\n  var LOOK = { transparentCorners: false, cornerColor: '#ffffff', cornerStrokeColor: '#16161b', borderColor: '#16161b', cornerStyle: 'circle', cornerSize: 13, padding: 4, borderScaleFactor: 1.2, lockScalingFlip: true };\n\n  var API = null, fabric = null, fc = null, fabricP = null, fontsP = null, booted = false;\n  var L = { front: [], back: [], 'rider-front': [], 'rider-back': [] }, cur = 'front', SZ = { sign: { Wi: 0, Hi: 0 }, back: { Wi: 0, Hi: 0 }, rider: { Wi: 0, Hi: 0 } }, size = SZ.sign;\n  var FACE4 = ['front', 'back', 'rider-front', 'rider-back'];\n  // a face id as stored here ('-flat' dropped, unknown = 'front'), its piece, and the piece being edited\n  function nf(f) { f = String(f || '').replace(/-flat$/, ''); return FACE4.indexOf(f) >= 0 ? f : 'front'; }\n  function pieceOfF(f) { f = String(f || ''); return /^rider/.test(f) ? 'rider' : (f === 'back' ? 'back' : 'sign'); }\n  function curPiece() { return API && API.piece ? API.piece() : 'sign'; }\n  function faceTitle(f) { return { front: 'Display Front', back: 'Display Back', 'rider-front': 'Rider Front', 'rider-back': 'Rider Back' }[nf(f)]; }\n  var ui = {}, hist = { list: [], i: -1, t: 0 }, renderT = 0, quiet = false, clipColor = '#dc1f2a';\n  var ai = null;\n\n  // ---------- small 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 clamp(v, a, b) { return Math.max(a, Math.min(b, v)); }\n  function nice(n) { return String(Math.round(n * 100) / 100); }\n  function esc(t) { return String(t).replace(/[&<>\"]/g, function (ch) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[ch]; }); }\n  function phoneLayout() { try { return window.matchMedia('(max-width: 900px)').matches; } catch (e) { return window.innerWidth <= 900; } }\n  function isPhone() { try { return /Android|iPhone|iPad|iPod|Mobi/i.test(navigator.userAgent) || (navigator.maxTouchPoints > 1 && Math.min(screen.width, screen.height) < 820); } catch (e) { return false; } }\n  function wait(ms) { return new Promise(function (r) { setTimeout(r, ms); }); }\n  function waitFor(fn, ms) {\n    return new Promise(function (res, rej) {\n      var t0 = Date.now();\n      (function poll() { var v = null; try { v = fn(); } catch (e) {} if (v) return res(v); if (Date.now() - t0 > ms) return rej(new Error('timeout')); setTimeout(poll, 80); })();\n    });\n  }\n  function hex(c) {\n    if (!c || typeof c !== 'string') return '#000000';\n    if (c[0] === '#') return c.length === 4 ? '#' + c.slice(1).split('').map(function (x) { return x + x; }).join('') : c.slice(0, 7);\n    var m = c.match(/\\d+/g);\n    return m ? '#' + m.slice(0, 3).map(function (x) { return (+x).toString(16).padStart(2, '0'); }).join('') : '#000000';\n  }\n  function apiBase() { return String((API && API.conf && API.conf.ideaApi) || IDEA_API).replace(/\\/+$/, ''); }\n  function sign() { var c = API.cfg(); return { c: c, Wi: c.Wi, Hi: c.Hi }; } // the printed sign, in inches\n  // the area inside the dashed red safe line, same as the builder's drawFlat (SAFE = 0.5 in from every edge)\n  function safeArea(c, Wi, Hi) {\n    var s = (API && API.safe) || 0.5;\n    if (API && API.safeBox) { var sb = API.safeBox(); if (sb) return sb; }\n    return { x: s, y: s, w: Math.max(1, Wi - 2 * s), h: Math.max(1, Hi - 2 * s) };\n  }\n  function mkCanvas(w, h) { var c = document.createElement('canvas'); c.width = Math.max(1, Math.round(w)); c.height = Math.max(1, Math.round(h)); return c; }\n  function toBlob(cv, type, q) {\n    return new Promise(function (res) {\n      try {\n        if (cv.toBlob) { cv.toBlob(function (b) { res(b); }, type, q); return; }\n        var d = cv.toDataURL(type, q), bin = atob(d.split(',')[1]), u = new Uint8Array(bin.length);\n        for (var i = 0; i < bin.length; i++) u[i] = bin.charCodeAt(i);\n        res(new Blob([u], { type: type }));\n      } catch (e) { res(null); }\n    });\n  }\n\n  // ---------- Fabric and fonts, loaded on first use ----------\n  function assetUrl(name) {\n    var src = $$('script[src]').map(function (s) { return s.src; }).filter(function (u) { return /\\/assets\\/ardor-seg[^/]*\\.js/.test(u); })[0] || (API.conf && API.conf.pdfUrl) || '';\n    return src ? src.replace(/\\/assets\\/[^/?#]+(\\?[^#]*)?$/, '/assets/' + name) : '';\n  }\n  function loadFabric() {\n    if (window.fabric) return Promise.resolve(window.fabric);\n    if (fabricP) return fabricP;\n    fabricP = new Promise(function (res, rej) {\n      var src = (API.conf && API.conf.fabricUrl) || assetUrl('ardor-fabric.min.js');\n      if (!src) { rej(new Error('fabric url')); return; }\n      var s = document.createElement('script'); s.src = src; s.async = true;\n      s.onload = function () { if (window.fabric) res(window.fabric); else rej(new Error('fabric')); };\n      s.onerror = function () { fabricP = null; rej(new Error('fabric')); };\n      document.head.appendChild(s);\n    });\n    return fabricP;\n  }\n  function ready() { return loadFabric().then(function () { return setup(); }); }\n  function loadFonts() {\n    if (fontsP) return fontsP;\n    fontsP = new Promise(function (res) {\n      var l = $('link[data-abl-fonts]') || $('link[href*=\"fonts.googleapis.com\"][href*=\"Rubik+Mono+One\"]');\n      if (l) { res(); return; }\n      l = document.createElement('link'); l.rel = 'stylesheet'; l.href = FONT_CSS; l.setAttribute('data-abl-fonts', '');\n      l.onload = function () { res(); }; l.onerror = function () { res(); };\n      document.head.appendChild(l);\n      setTimeout(res, 4000);\n    });\n    return fontsP;\n  }\n  function fontReady(fam) {\n    return loadFonts().then(function () {\n      if (!document.fonts || !document.fonts.load || /^(Arial|Georgia)$/.test(fam)) return null;\n      return Promise.race([document.fonts.load('64px \\'' + fam + '\\''), wait(4000)]).catch(function () {});\n    }).then(function () { try { if (fabric && fabric.util.clearFabricFontCache) fabric.util.clearFabricFontCache(fam); } catch (e) {} });\n  }\n\n  // ---------- the overlay canvas ----------\n  function setup() {\n    if (fc) return fc;\n    fabric = window.fabric;\n    var lc = API.layoutCanvas();\n    if (!fabric || !lc) throw new Error('layers: no canvas');\n    ui.lc = lc; ui.frame = lc.parentNode;\n    if (window.getComputedStyle(ui.frame).position === 'static') ui.frame.style.position = 'relative';\n    if (fabric.Object.prototype.controls && fabric.Object.prototype.controls.mtr) fabric.Object.prototype.controls.mtr.offsetY = -30;\n    if (!(fabric.Object.NUM_FRACTION_DIGITS >= 8)) fabric.Object.NUM_FRACTION_DIGITS = 8; // layers are in inches: keep undo snapshots exact\n    var cv = document.createElement('canvas');\n    cv.setAttribute('aria-label', 'Text and clipart on your display');\n    ui.frame.appendChild(cv);\n    // the overlay covers the whole layout frame so handles stay reachable past the sign edge; items are clipped to the sign\n    fc = new fabric.Canvas(cv, { preserveObjectStacking: true, selection: false, uniformScaling: true, enableRetinaScaling: true, skipOffscreen: false, stopContextMenu: true, targetFindTolerance: 4, controlsAboveOverlay: true });\n    fc.clipPath = new fabric.Rect({ left: 0, top: 0, width: 1, height: 1, originX: 'left', originY: 'top', strokeWidth: 0 });\n    ui.wrap = fc.wrapperEl; ui.wrap.classList.add('abl-wrap');\n    ui.wrap.style.position = 'absolute';\n    ui.frame.appendChild(ui.objbar);\n    bindCanvas();\n    hist.list = [snapshot()]; hist.i = 0;\n    sync();\n    return fc;\n  }\n\n  function rawFor(face) { face = nf(face); return fc && face === cur ? fc.getObjects() : (L[face] || []); }\n  // the layers of a face of this order ([] for a face the order does not have: no rider, or a 1-sided piece)\n  function objectsFor(face) { face = nf(face); if (API && API.faces && API.faces().indexOf(face) < 0 && face !== cur) return []; return rawFor(face); }\n  // keep each piece's layers at the size of its page: a new size moves only that piece's layers\n  function syncSizes() {\n    ['sign', 'back'].forEach(function (pz) {\n      var pg = API.pageOf ? API.pageOf(pz === 'back' ? 'back' : 'front') : null;\n      if (!pg || pg.piece !== pz || !(pg.Wi > 0) || !(pg.Hi > 0)) return; // no rider now: its layers wait as they are\n      var ps = SZ[pz];\n      if (ps.Wi && (Math.abs(pg.Wi - ps.Wi) > 1e-9 || Math.abs(pg.Hi - ps.Hi) > 1e-9)) rescale(pz, ps.Wi, ps.Hi, pg.Wi, pg.Hi);\n      ps.Wi = pg.Wi; ps.Hi = pg.Hi;\n    });\n  }\n  function editable() { return !!(API && API.editFace()); }\n\n  // keep the overlay exactly over the layout canvas, on the right face, in the sign's inches\n  function sync() {\n    if (!fc || !ui.lc) return;\n    var b = sign(), lc = ui.lc;\n    syncSizes(); size = SZ[pieceOfF(API.editFace() || (API.showFace ? API.showFace() : 'front'))];\n    if (!(size.Wi > 0)) { size.Wi = b.Wi; size.Hi = b.Hi; }\n    var fw = ui.frame.clientWidth, fh = ui.frame.clientHeight, w = lc.offsetWidth;\n    if (fw > 0 && fh > 0 && w > 0) {\n      if (fw !== ui.w || fh !== ui.h) { fc.setDimensions({ width: fw, height: fh }); ui.w = fw; ui.h = fh; }\n      var lv = API.layoutView ? API.layoutView() : null;\n      var z = lv && lv.z > 0 ? lv.z : w / b.Wi, ox = lc.offsetLeft + (lv ? lv.ox : 0), oy = lc.offsetTop + (lv ? lv.oy : 0), v = fc.viewportTransform;\n      if (!v || Math.abs(v[0] - z) > 1e-9 || v[4] !== ox || v[5] !== oy) fc.setViewportTransform([z, 0, 0, z, ox, oy]);\n      if (fc.clipPath.width !== b.Wi || fc.clipPath.height !== b.Hi) { fc.clipPath.set({ width: b.Wi, height: b.Hi }); fc.clipPath.dirty = true; }\n    }\n    var ef = API.editFace(), show = ef || (API.showFace ? API.showFace() : 'front');\n    if (show !== cur) switchFace(show);\n    var live = !!ef;\n    fc.getObjects().forEach(function (o) { var on = live && o.ablKind !== 'cover' && o.ablKind !== 'bg'; if (o.selectable !== on) o.set({ selectable: on, evented: on }); }); // the patch under the exact logo is never picked\n    if (!live && fc.getActiveObject()) fc.discardActiveObject();\n    syncPointer();\n    fc.calcOffset();\n    fc.requestRenderAll();\n    posObjbar(); syncHist();\n  }\n  function syncPointer() { if (ui.wrap) ui.wrap.style.pointerEvents = editable() && fc.getObjects().length ? 'auto' : 'none'; }\n\n  // sign size changed (frame switch): keep every layer at the same place relative to the sign. Each layer remembers where it was\n  // at the size it was last edited at, so typing a new width and then a new height gives the same result as both at once.\n  function rebase(objs, W, H) { objs.forEach(function (o) { o.ablBase = { W: W, H: H, l: o.left, t: o.top, sx: o.scaleX, sy: o.scaleY }; }); }\n  function fitTo(objs, W1, H1) {\n    objs.forEach(function (o) {\n      if (o.ablKind === 'bg') { o.set({ left: 0, top: 0, width: W1, height: H1, scaleX: 1, scaleY: 1 }); o.setCoords(); return; }\n      var b = o.ablBase; if (!b) return;\n      var rx = W1 / b.W, ry = H1 / b.H, k = Math.min(rx, ry);\n      o.set({ left: b.l * rx, top: b.t * ry, scaleX: b.sx * k, scaleY: b.sy * k }); o.setCoords();\n    });\n  }\n  function rescale(pz, W0, H0, W1, H1) {\n    (pz === 'rider' ? ['rider-front', 'rider-back'] : [pz === 'back' ? 'back' : 'front']).forEach(function (f) {\n      var objs = rawFor(f);\n      objs.forEach(function (o) { if (!o.ablBase) rebase([o], W0, H0); });\n      fitTo(objs, W1, H1);\n    });\n    scheduleRender();\n  }\n  function switchFace(f) {\n    quiet = true;\n    L[cur] = fc.getObjects().slice();\n    fc.discardActiveObject();\n    if (L[cur].length) fc.remove.apply(fc, L[cur]);\n    L[f].forEach(function (o) { fc.add(o); });\n    cur = f;\n    quiet = false;\n    syncProps();\n  }\n\n  // ---------- what the builder calls (ArdorSegLayers) ----------\n  function has(face) { return objectsFor(face).length > 0; }\n  function renderObj(ctx, o) {\n    var oc = o.objectCaching, vis = o.visible;\n    o.objectCaching = false; o.visible = true;\n    try { o.render(ctx); } catch (e) {}\n    o.objectCaching = oc; o.visible = vis;\n    if (oc) o.dirty = true;\n  }\n  // draw one face's layers into a context already scaled to sign inches (3D texture, proof, print image)\n  function paint(ctx, Wi, Hi, face) {\n    if (!fc) return;\n    if (ui.lc && ctx.canvas === ui.lc) return; // the live overlay shows them on the 2D layout\n    var objs = objectsFor(face);\n    if (!objs.length) return;\n    ctx.save();\n    // the builder reuses its 3D face canvases, and its blank-sign text leaves textAlign 'center' on them; Fabric needs the defaults\n    ctx.textAlign = 'left'; ctx.textBaseline = 'alphabetic'; ctx.globalAlpha = 1; ctx.globalCompositeOperation = 'source-over'; if (ctx.setLineDash) ctx.setLineDash([]);\n    var ps = SZ[pieceOfF(face)]; if (ps.Wi && (Math.abs(Wi - ps.Wi) > 1e-6 || Math.abs(Hi - ps.Hi) > 1e-6)) ctx.scale(Wi / ps.Wi, Hi / ps.Hi);\n    objs.forEach(function (o) { renderObj(ctx, o); });\n    ctx.restore();\n  }\n  function list(face) {\n    return objectsFor(face).filter(function (o) { return o.ablKind !== 'cover' && o.ablKind !== 'bg'; }).map(function (o) {\n      if (o.ablKind === 'text') return { kind: 'text', text: o.text, font: o.fontFamily, color: hex(o.fill), label: 'Text' };\n      if (o.ablKind === 'image') return { kind: 'image', logo: !!o.ablLogo, label: o.ablLabel || 'Image' };\n      return { kind: 'clipart', color: hex(o.fill), label: o.ablLabel || 'Clipart' };\n    });\n  }\n  function printPpi(Wi, Hi) {\n    var cap = isPhone() ? 16e6 : 40e6;\n    return Math.max(2, Math.min(120, Math.sqrt(cap / (Wi * Hi)), 16384 / Wi, 16384 / Hi));\n  }\n  // one flattened JPEG of the face (background, artwork and layers) for the print file\n  function composite(face, Wi, Hi, art) {\n    face = nf(face);\n    if (art && !art.img) return Promise.reject(new Error('no artwork preview to flatten'));\n    var ppi = printPpi(Wi, Hi);\n    return hiResArt(art, Wi, Hi, ppi).then(function (restore) {\n      return encodeFace(face, Wi, Hi, ppi, 0).then(function (r) { restore(); return r; }, function (e) { restore(); throw e; });\n    });\n  }\n  function encodeFace(face, Wi, Hi, ppi, tries) {\n    var w = Math.max(1, Math.round(Wi * ppi)), h = Math.max(1, Math.round(Hi * ppi));\n    var cv = mkCanvas(w, h), ctx = cv.getContext('2d');\n    if (!ctx) return Promise.reject(new Error('canvas'));\n    ctx.imageSmoothingEnabled = true; ctx.imageSmoothingQuality = 'high';\n    ctx.setTransform(w / Wi, 0, 0, h / Hi, 0, 0);\n    ctx.fillStyle = '#FFFFFF'; ctx.fillRect(0, 0, Wi, Hi);\n    API.paintFace(ctx, Wi, Hi, face);\n    return toBlob(cv, 'image/jpeg', 0.92).then(function (b) {\n      cv.width = cv.height = 1;\n      if ((!b || b.size > 22 * 1024 * 1024) && tries < 3) return encodeFace(face, Wi, Hi, ppi * 0.75, tries + 1);\n      if (!b) throw new Error('could not make the print image');\n      return { file: new File([b], 'Ardor SEG Display Print Art ' + faceTitle(face) + '.jpg', { type: 'image/jpeg' }), natW: w, natH: h, ppi: ppi };\n    });\n  }\n  // PDF / AI / EPS art: draw it again from the vector file at print size, instead of the 2400 px preview\n  function hiResArt(a, Wi, Hi, ppi) {\n    var none = Promise.resolve(function () {});\n    var av = window.ArdorBannerArtView;\n    if (!a || a.kind === 'image' || !a.img || !av || !av.preview) return none;\n    var file = a.src === 'eps' && a.vectorPdf ? new File([a.vectorPdf], 'artwork.pdf', { type: 'application/pdf' }) : ((a.src === 'pdf' || a.src === 'ai') ? a.file : null);\n    var g = API.artGeom(a, Wi, Hi);\n    if (!file || !g) return none;\n    var px = Math.min(12000, Math.round(Math.max(g.w, g.h) * ppi));\n    if (px <= Math.max(a.img.width || 0, a.img.height || 0) * 1.15) return none;\n    return Promise.race([av.preview(file, { maxPx: px }), wait(30000)]).then(function (r) {\n      if (!r || !r.ok || !r.canvas) return function () {};\n      var old = a.img; a.img = r.canvas;\n      return function () { a.img = old; };\n    }).catch(function () { return function () {}; });\n  }\n\n  // ---------- adding layers ----------\n  function look(o) { o.set(LOOK); return o; }\n  function targetFace() {\n    var f = API.editFace();\n    if (!f) { API.set({ face: 'front', back: false }); f = API.editFace() || 'front'; }\n    if (ui.app && ui.app.getAttribute('data-mode') === '3d') { var m2 = $('[data-abx-mode=\"2d\"]', ui.app); if (m2) m2.click(); }\n    sync();\n    return f;\n  }\n  function fitInside(o, s) {\n    var w = o.getScaledWidth(), h = o.getScaledHeight(), k = Math.min(1, s.w / w, s.h / h);\n    if (k < 1) o.scale(o.scaleX * k);\n  }\n  function place(o) { fc.add(o); fc.setActiveObject(o); o.setCoords(); changed(true); syncProps(); if (phoneLayout()) closeDrawer(); }\n  function addText(fam) {\n    return ready().then(function () { return fontReady(fam); }).then(function () {\n      targetFace();\n      var b = sign(), s = safeArea(b.c, b.Wi, b.Hi), n = fc.getObjects().filter(function (o) { return o.ablKind === 'text'; }).length;\n      var fs = clamp(Math.min(b.Hi * 0.12, b.Wi * 0.16), 1, 240);\n      var t = look(new fabric.IText('Your text', { fontFamily: fam, fontSize: fs, fill: '#16161b', textAlign: 'center', originX: 'center', originY: 'center', left: b.Wi / 2, top: b.Hi / 2, paintFirst: 'stroke', strokeLineJoin: 'round', strokeWidth: 0, stroke: null, ablKind: 'text', ablStroke: 0 }));\n      if (n) t.set({ top: clamp(b.Hi / 2 + [0, 1.25, -1.25][n % 3] * fs, s.y + fs / 2, s.y + s.h - fs / 2) });\n      fitInside(t, s);\n      place(t);\n      track('text');\n    }).catch(failed);\n  }\n  function addClip(c) {\n    return ready().then(function () {\n      targetFace();\n      var b = sign(), s = safeArea(b.c, b.Wi, b.Hi);\n      var p = look(new fabric.Path(c.d, { fill: clipColor, fillRule: 'evenodd', stroke: null, strokeWidth: 0, originX: 'center', originY: 'center', ablKind: 'clipart', ablLabel: c.name + ' clipart' }));\n      p.scale(Math.min(s.w, s.h) * 0.45 / Math.max(p.width, p.height));\n      p.set({ left: b.Wi / 2, top: b.Hi / 2 });\n      place(p);\n      track('clipart');\n    }).catch(failed);\n  }\n  function failed() { toast('The design tools could not load. Please refresh the page and try again.', 7000); }\n  function track(kind) { try { (window.dataLayer = window.dataLayer || []).push({ event: 'ardor_seg_layer_added', layer: kind }); } catch (e) {} }\n\n  // ---------- changes, history ----------\n  function scheduleRender(now) {\n    clearTimeout(renderT);\n    renderT = setTimeout(function () { renderT = 0; try { API.renderArtOnly(); } catch (e) {} }, now ? 0 : 60);\n  }\n  function changed(record) {\n    if (quiet || !fc) return;\n    L[cur] = fc.getObjects().slice();\n    rebase(L[cur], size.Wi, size.Hi);\n    scheduleRender();\n    if (record) pushHistory();\n    syncPointer(); syncEmpty(); syncHist();\n  }\n  function ser(f) { return rawFor(f).map(function (o) { return o.toObject(PROPS); }); }\n  function snapshot() { return JSON.stringify({ SZ: { sign: [SZ.sign.Wi, SZ.sign.Hi], back: [SZ.back.Wi, SZ.back.Hi], rider: [SZ.rider.Wi, SZ.rider.Hi] }, f: ser('front'), b: ser('back'), rf: ser('rider-front'), rb: ser('rider-back') }); }\n  function pushHistory() {\n    clearTimeout(hist.t);\n    hist.t = setTimeout(function () {\n      var s = snapshot();\n      if (hist.list[hist.i] === s) return;\n      hist.list = hist.list.slice(0, hist.i + 1); hist.list.push(s);\n      if (hist.list.length > 40) hist.list.shift();\n      hist.i = hist.list.length - 1; syncHist();\n    }, 200);\n  }\n  function enliven(arr) { return new Promise(function (res) { if (!arr.length) { res([]); return; } fabric.util.enlivenObjects(arr, function (objs) { res(objs.map(look)); }); }); }\n  function restore(i) {\n    if (!fc || i < 0 || i >= hist.list.length) return;\n    hist.i = i;\n    var snap = JSON.parse(hist.list[i]);\n    Promise.all([enliven(snap.f || []), enliven(snap.b || []), enliven(snap.rf || []), enliven(snap.rb || [])]).then(function (r) {\n      quiet = true;\n      fc.discardActiveObject();\n      var now = fc.getObjects().slice(); if (now.length) fc.remove.apply(fc, now);\n      FACE4.forEach(function (f, k) {\n        var pz = pieceOfF(f), was = snap.SZ && snap.SZ[pz] ? snap.SZ[pz] : [SZ[pz].Wi, SZ[pz].Hi];\n        L[f] = r[k];\n        if (SZ[pz].Wi > 0 && SZ[pz].Hi > 0) { rebase(r[k], was[0] || SZ[pz].Wi, was[1] || SZ[pz].Hi); fitTo(r[k], SZ[pz].Wi, SZ[pz].Hi); }\n      });\n      L[cur].forEach(function (o) { fc.add(o); });\n      quiet = false;\n      FACE4.forEach(function (f) { L[f].forEach(function (o) { if (o.ablKind === 'cover' || o.ablKind === 'bg') o.set({ selectable: false, evented: false }); }); });\n      if (ai) { // undo / redo can bring the exact logo (and its patch) back or take them away\n        var af = L[nf(ai.face || 'front')] || [];\n        ai.logoObj = af.filter(function (o) { return o.ablLogo; })[0] || null;\n        ai.coverObj = af.filter(function (o) { return o.ablKind === 'cover'; })[0] || null;\n        syncLogoBtn();\n      }\n      sync(); changed(false); syncProps();\n    });\n  }\n  function undo() { clearTimeout(hist.t); restore(hist.i - 1); }\n  function redo() { restore(hist.i + 1); }\n  function syncHist() {\n    if (!ui.hist) return;\n    var show = !!fc && hist.list.length > 1 && editable() && (!ui.app || ui.app.getAttribute('data-mode') !== '3d');\n    ui.hist.hidden = !show;\n    ui.undo.disabled = hist.i <= 0; ui.redo.disabled = hist.i >= hist.list.length - 1;\n    var mode = ui.app && $('.abx-mode', ui.app);\n    if (show && mode) ui.hist.style.left = (mode.offsetLeft + mode.offsetWidth + 8) + 'px';\n  }\n  function removeActive() {\n    var o = fc && fc.getActiveObject(); if (!o) return;\n    fc.remove(o); fc.discardActiveObject(); fc.requestRenderAll();\n  }\n\n  // ---------- object bar and properties ----------\n  function kindOf(o) { return o ? (o.ablKind || (o.type === 'i-text' || o.type === 'textbox' ? 'text' : o.type === 'image' ? 'image' : 'clipart')) : ''; }\n  function posObjbar() {\n    var bar = ui.objbar; if (!bar) return;\n    var o = fc && fc.getActiveObject();\n    if (!o || fc._currentTransform || !editable() || (ui.app && ui.app.getAttribute('data-mode') === '3d')) { bar.hidden = true; return; }\n    var r = o.getBoundingRect();\n    bar.hidden = false;\n    var fw = ui.frame.clientWidth, bw = bar.offsetWidth || 300, bh = bar.offsetHeight || 46;\n    var x = r.left + r.width / 2, y = r.top - 14;\n    if (y - bh < 6) y = Math.min(ui.frame.clientHeight - 6, r.top + r.height + 14 + bh);\n    bar.style.left = clamp(x, bw / 2 + 6, Math.max(bw / 2 + 6, fw - bw / 2 - 6)) + 'px';\n    bar.style.top = y + 'px';\n  }\n  function syncProps() {\n    if (!ui.props) return;\n    var o = fc && fc.getActiveObject(), k = o && o.type !== 'activeSelection' && editable() ? kindOf(o) : '';\n    ui.props.hidden = !k;\n    posObjbar();\n    if (!k) return;\n    $$('[data-abl-p]', ui.props).forEach(function (g) { g.hidden = g.getAttribute('data-abl-p') !== k; });\n    ui.pTitle.textContent = k === 'text' ? 'Text' : (k === 'image' ? (o.ablLogo ? 'Your logo' : 'Image') : 'Clipart');\n    if (k === 'text') {\n      if (document.activeElement !== ui.pText) ui.pText.value = o.text;\n      ui.pFill.value = hex(o.fill); ui.pFillLbl.textContent = hex(o.fill).toUpperCase();\n      if (!$('option[value=\"' + String(o.fontFamily).replace(/\"/g, '') + '\"]', ui.pFont)) { var op = el('option'); op.value = o.fontFamily; op.textContent = o.fontFamily; ui.pFont.appendChild(op); }\n      ui.pFont.value = o.fontFamily;\n      $$('[data-abl-align]', ui.props).forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-abl-align') === o.textAlign ? 'true' : 'false'); });\n      ui.pStroke.value = String(o.ablStroke || 0);\n      if (o.stroke) ui.pStrokeColor.value = hex(o.stroke);\n    } else if (k === 'clipart') {\n      ui.pClip.value = hex(o.fill); ui.pClipLbl.textContent = hex(o.fill).toUpperCase();\n    }\n  }\n  function activeText() { var o = fc && fc.getActiveObject(); return o && kindOf(o) === 'text' ? o : null; }\n  function setStroke(t) { var w = t.ablStroke || 0; t.set({ strokeWidth: w ? t.fontSize * w * 0.012 : 0, stroke: w ? ui.pStrokeColor.value : null }); }\n  function objAction(act) {\n    var o = fc && fc.getActiveObject(); if (!o) return;\n    if (act === 'delete') { removeActive(); return; }\n    if (act === 'duplicate') {\n      o.clone(function (cl) {\n        var d = Math.max(0.5, size.Hi * 0.04);\n        look(cl); cl.set({ left: o.left + d, top: o.top + d, ablLogo: false });\n        fc.add(cl); fc.setActiveObject(cl); cl.setCoords(); changed(true); syncProps();\n      }, PROPS);\n      return;\n    }\n    if (act === 'flipx') o.set('flipX', !o.flipX);\n    if (act === 'flipy') o.set('flipY', !o.flipY);\n    if (act === 'forward') fc.bringForward(o);\n    if (act === 'backward') fc.sendBackwards(o);\n    o.setCoords(); fc.requestRenderAll(); changed(true);\n  }\n\n  function bindCanvas() {\n    var up = fc.upperCanvasEl;\n    // nothing under the pointer: let the customer drag the artwork below, like before\n    up.addEventListener('pointerdown', function (e) {\n      if (e.button > 0) return;\n      var t = null; try { t = fc.findTarget(e, false); } catch (er) {}\n      if (t) return;\n      e.preventDefault();\n      if (fc.getActiveObject()) { if (fc.getActiveObject().isEditing) fc.getActiveObject().exitEditing(); fc.discardActiveObject(); fc.requestRenderAll(); }\n      var lr = ui.lc.getBoundingClientRect();\n      if (e.clientX < lr.left || e.clientX > lr.right || e.clientY < lr.top || e.clientY > lr.bottom) return;\n      var ev = null;\n      try { ev = new PointerEvent('pointerdown', { bubbles: true, cancelable: true, composed: true, clientX: e.clientX, clientY: e.clientY, screenX: e.screenX, screenY: e.screenY, pointerId: e.pointerId, pointerType: e.pointerType, isPrimary: e.isPrimary, button: e.button, buttons: e.buttons, width: e.width, height: e.height, pressure: e.pressure }); } catch (er) {}\n      if (ev) ui.lc.dispatchEvent(ev);\n    }, true);\n    up.addEventListener('pointermove', function (e) {\n      var lr = ui.lc.getBoundingClientRect(), a = API.getArt(cur);\n      fc.defaultCursor = a && a.img && editable() && e.clientX >= lr.left && e.clientX <= lr.right && e.clientY >= lr.top && e.clientY <= lr.bottom ? 'move' : 'default';\n    }, true);\n    fc.on('object:added', function () { if (!quiet) changed(false); });\n    fc.on('object:removed', function (e) {\n      if (quiet) return;\n      if (ai && e.target === ai.logoObj) { ai.logoObj = null; if (ai.coverObj) { var co = ai.coverObj; ai.coverObj = null; fc.remove(co); } syncLogoBtn(); }\n      changed(true); syncProps();\n    });\n    fc.on('object:modified', function () { changed(true); posObjbar(); });\n    ['object:moving', 'object:scaling', 'object:rotating'].forEach(function (n) { fc.on(n, function () { scheduleRender(); }); });\n    fc.on('text:changed', function () { var t = activeText(); if (t && t.ablStroke) setStroke(t); syncProps(); scheduleRender(); });\n    fc.on('text:editing:exited', function () { changed(true); });\n    fc.on('selection:created', function () { syncProps(); var pb = ui.props && ui.props.parentNode; if (pb && phoneLayout() && pb.scrollTop > 0) pb.scrollTop = 0; });\n    fc.on('selection:updated', syncProps);\n    fc.on('selection:cleared', syncProps);\n    fc.on('after:render', posObjbar);\n  }\n\n  // ---------- UI: rail tools, drawers, properties, object bar ----------\n  function toolBtn(name, icon, label) {\n    var b = el('button', 'abx-tool abl-tool', icon + '<span>' + label + '</span>');\n    b.type = 'button'; b.setAttribute('data-abl-tool', name); b.setAttribute('aria-expanded', 'false');\n    return b;\n  }\n  // the AI page link: the sign, the face and the rider size after # (one page address for crawlers; the AI page reads it)\n  function ideaHref() { var c = API.cfg(), f = API.editFace() || (API.showFace ? API.showFace() : 'front'); return IDEA_PAGE + '#sign=' + encodeURIComponent(c.key || '') + '&face=' + encodeURIComponent(f) + (/^rider/.test(f) && c.riderSize ? '&rider=' + encodeURIComponent(c.riderSize) : ''); }\n  function syncIdea() { var h = ideaHref(); $$('[data-abl-idea]', ui.root).forEach(function (a) { if (a.getAttribute('href') !== h) a.setAttribute('href', h); }); }\n  function buildUi() {\n    var app = ui.app, root = ui.root;\n    ui.stage = app ? $('.abx-stage', app) : null;\n    // rail: Text, Clipart, Ideas (after the logo, if the rail has one)\n    var rail = app ? $('.abx-rail', app) : null;\n    var tools = [toolBtn('text', '<span class=\"abl-tool-ic\" aria-hidden=\"true\">T<small>T</small></span>', 'Text'), toolBtn('clipart', '<span class=\"abl-tool-ic\" aria-hidden=\"true\">' + IC.clip + '</span>', 'Clipart')];\n    // (no AI design tool in the SEG designer)\n    if (rail) {\n      var logo = $(':scope > a[class*=\"logo\"], :scope > [class*=\"rail-logo\"], :scope > [data-abx-logo]', rail);\n      var ref = logo ? logo.nextSibling : rail.firstChild;\n      tools.forEach(function (t) { rail.insertBefore(t, ref); });\n      rail.addEventListener('click', function (e) { if (e.target.closest('[data-abx-fly]')) closeDrawer(); }, true);\n    } else {\n      var mini = el('div', 'abl-minirail'); tools.forEach(function (t) { mini.appendChild(t); });\n      var layout = $('[data-abb-layout]', root); if (layout) layout.parentNode.insertBefore(mini, layout);\n    }\n    root.addEventListener('click', function (e) { var b = e.target.closest('[data-abl-tool]'); if (b) openDrawer(b.getAttribute('data-abl-tool')); });\n    // the \"Describe your design\" links open the AI drawer here (the links still go to the AI generator page without JS)\n    root.addEventListener('click', function (e) {\n      var a = e.target.closest('[data-abl-idea]');\n      if (!a || e.metaKey || e.ctrlKey || e.shiftKey || e.button > 0 || !ui.drawer) return;\n      e.preventDefault(); openDrawer('ai');\n    });\n\n    // drawers (sticker builder style)\n    var d = el('aside', 'abl-drawer' + (app ? '' : ' abl-drawer--fixed'));\n    d.setAttribute('aria-hidden', 'true'); d.setAttribute('aria-label', 'Text and clipart');\n    d.innerHTML =\n      '<div class=\"abl-drawer__panel\" data-abl-panel=\"text\">' +\n        '<div class=\"abl-drawer__head\"><h2>Add text</h2><button type=\"button\" class=\"abl-x\" data-abl-close aria-label=\"Close\">' + IC.x + '</button></div>' +\n        '<div class=\"abl-drawer__body\"><p class=\"abl-help\">Tap a font to add text to your display. Double-tap the text on your display, or use the text box in the options, to change the words.</p><div class=\"abl-fonts\" data-abl-fonts></div></div>' +\n      '</div>' +\n      '<div class=\"abl-drawer__panel\" data-abl-panel=\"clipart\" hidden>' +\n        '<div class=\"abl-drawer__head\"><h2>Clipart</h2><button type=\"button\" class=\"abl-x\" data-abl-close aria-label=\"Close\">' + IC.x + '</button></div>' +\n        '<div class=\"abl-drawer__body\"><div class=\"abl-cliptools\"><input class=\"abl-input\" type=\"search\" placeholder=\"Search clipart\" aria-label=\"Search clipart\" data-abl-clip-search>' +\n        '<label class=\"abl-color abl-color--swatch\" title=\"Clipart color\"><input type=\"color\" value=\"' + clipColor + '\" aria-label=\"Clipart color\" data-abl-clip-default></label></div>' +\n        '<div class=\"abl-clips\" data-abl-clips></div></div>' +\n      '</div>';\n    // (no AI design drawer in the SEG designer)\n    (app || root).appendChild(d);\n    ui.drawer = d;\n    var fonts = $('[data-abl-fonts]', d);\n    FONTS.forEach(function (f) {\n      var b = el('button', 'abl-font'); b.type = 'button'; b.textContent = f[1];\n      b.style.fontFamily = '\\'' + f[0] + '\\', sans-serif';\n      b.addEventListener('click', function () { addText(f[0]); });\n      fonts.appendChild(b);\n    });\n    ui.clips = $('[data-abl-clips]', d);\n    renderClips('');\n    $('[data-abl-clip-search]', d).addEventListener('input', function (e) { renderClips(e.target.value.trim().toLowerCase()); });\n    $('[data-abl-clip-default]', d).addEventListener('input', function (e) { clipColor = e.target.value; d.style.setProperty('--abl-clip', clipColor); });\n    $$('[data-abl-close]', d).forEach(function (b) { b.addEventListener('click', closeDrawer); });\n\n    // properties of the selected layer, at the top of the options panel\n    var p = el('section', 'abl-props');\n    p.hidden = true; p.setAttribute('aria-label', 'Selected text or clipart');\n    p.innerHTML =\n      '<div class=\"abl-props__head\"><h3 data-abl-title>Text</h3><button type=\"button\" class=\"abl-done\" data-abl-deselect>Done</button></div>' +\n      '<div data-abl-p=\"text\">' +\n        '<textarea class=\"abl-input abl-textarea\" rows=\"2\" aria-label=\"Text\" data-abl-text></textarea>' +\n        '<div class=\"abl-two\"><div><span class=\"abl-label\">Color</span><label class=\"abl-color\"><input type=\"color\" value=\"#16161b\" aria-label=\"Text color\" data-abl-fill><span data-abl-fill-lbl>#16161B</span></label></div>' +\n        '<div><span class=\"abl-label\">Font</span><select class=\"abl-input\" aria-label=\"Font\" data-abl-font></select></div></div>' +\n        '<div class=\"abl-two abl-two--even\"><div><span class=\"abl-label\">Align</span><div class=\"abl-align\">' +\n          '<button type=\"button\" data-abl-align=\"left\" aria-label=\"Align left\">' + IC.left + '</button>' +\n          '<button type=\"button\" data-abl-align=\"center\" aria-label=\"Align center\">' + IC.center + '</button>' +\n          '<button type=\"button\" data-abl-align=\"right\" aria-label=\"Align right\">' + IC.right + '</button></div></div>' +\n        '<div><span class=\"abl-label\">Outline</span><div class=\"abl-slider\"><input type=\"range\" min=\"0\" max=\"12\" step=\"1\" value=\"0\" aria-label=\"Outline width\" data-abl-stroke><input type=\"color\" value=\"#ffffff\" aria-label=\"Outline color\" data-abl-stroke-color></div></div></div>' +\n      '</div>' +\n      '<div data-abl-p=\"clipart\" hidden><span class=\"abl-label\">Clipart color</span><label class=\"abl-color\"><input type=\"color\" value=\"#dc1f2a\" aria-label=\"Clipart color\" data-abl-clip><span data-abl-clip-lbl>#DC1F2A</span></label></div>' +\n      '<div data-abl-p=\"image\" hidden><p class=\"abl-help\">Drag it to move it. Drag a corner to resize it. We print this file exactly as you uploaded it.</p><button type=\"button\" class=\"abl-done abl-done--danger\" data-abl-remove>Remove</button></div>';\n    var body = app ? $('[data-abx-body]', app) : null;\n    if (body) body.insertBefore(p, body.firstChild);\n    else { var ctl = $('[data-abb-layout]', root); if (ctl) ctl.appendChild(p); }\n    ui.props = p; ui.pTitle = $('[data-abl-title]', p);\n    ui.pText = $('[data-abl-text]', p); ui.pFill = $('[data-abl-fill]', p); ui.pFillLbl = $('[data-abl-fill-lbl]', p);\n    ui.pFont = $('[data-abl-font]', p); ui.pStroke = $('[data-abl-stroke]', p); ui.pStrokeColor = $('[data-abl-stroke-color]', p);\n    ui.pClip = $('[data-abl-clip]', p); ui.pClipLbl = $('[data-abl-clip-lbl]', p);\n    FONTS.forEach(function (f) { var o = el('option'); o.value = f[0]; o.textContent = f[1]; ui.pFont.appendChild(o); });\n    bindProps(p);\n\n    // object bar (flip, order, duplicate, delete)\n    var ob = el('div', 'abl-objbar');\n    ob.hidden = true; ob.setAttribute('role', 'toolbar'); ob.setAttribute('aria-label', 'Selected item');\n    ob.innerHTML =\n      '<button type=\"button\" data-abl-act=\"flipx\" title=\"Flip horizontal\" aria-label=\"Flip horizontal\">' + IC.flipx + '</button>' +\n      '<button type=\"button\" data-abl-act=\"flipy\" title=\"Flip vertical\" aria-label=\"Flip vertical\">' + IC.flipy + '</button><i></i>' +\n      '<button type=\"button\" data-abl-act=\"forward\" title=\"Bring forward\" aria-label=\"Bring forward\">' + IC.forward + '</button>' +\n      '<button type=\"button\" data-abl-act=\"backward\" title=\"Send backward\" aria-label=\"Send backward\">' + IC.backward + '</button><i></i>' +\n      '<button type=\"button\" data-abl-act=\"duplicate\" title=\"Duplicate\" aria-label=\"Duplicate\">' + IC.duplicate + '</button>' +\n      '<button type=\"button\" data-abl-act=\"delete\" title=\"Delete\" aria-label=\"Delete\">' + IC.trash + '</button>';\n    ob.addEventListener('click', function (e) { var b = e.target.closest('[data-abl-act]'); if (b) objAction(b.getAttribute('data-abl-act')); });\n    ui.objbar = ob;\n\n    // undo / redo, toast and the AI logo button live on the canvas area\n    var host = ui.stage || (API.layoutCanvas() && API.layoutCanvas().parentNode) || root;\n    ui.hist = el('div', 'abl-hist', '<button type=\"button\" class=\"abl-chip\" data-abl-undo title=\"Undo (Ctrl+Z)\" aria-label=\"Undo\">' + IC.undo + '</button><button type=\"button\" class=\"abl-chip\" data-abl-redo title=\"Redo (Ctrl+Shift+Z)\" aria-label=\"Redo\">' + IC.redo + '</button>');\n    ui.hist.hidden = true; host.appendChild(ui.hist);\n    ui.undo = $('[data-abl-undo]', ui.hist); ui.redo = $('[data-abl-redo]', ui.hist);\n    ui.undo.addEventListener('click', undo); ui.redo.addEventListener('click', redo);\n    ui.toast = el('div', 'abl-toast', '<span data-abl-toast-text></span><button type=\"button\" class=\"abl-toast__act\" data-abl-toast-act hidden></button><button type=\"button\" class=\"abl-toast__x\" aria-label=\"Dismiss\" data-abl-toast-x>' + IC.x + '</button>');\n    ui.toast.hidden = true; ui.toast.setAttribute('role', 'status'); ui.toast.setAttribute('aria-live', 'polite');\n    host.appendChild(ui.toast);\n    $('[data-abl-toast-x]', ui.toast).addEventListener('click', function () { ui.toast.hidden = true; });\n    ui.logoBtn = el('button', 'abl-logo-btn', IC.logo + '<span data-abl-logo-lbl>Use my exact logo</span>');\n    ui.logoBtn.type = 'button'; ui.logoBtn.hidden = true;\n    ui.logoBtn.addEventListener('click', useLogo);\n    var tbar = app && $('[data-abx-bar]', app); // first item of the 2D toolbar, so it never covers the canvas tools\n    // (the AI \"Use my exact logo\" button is never put on the page: no AI designs here)\n\n    // (no \"Describe your idea\" AI links in the SEG designer)\n    syncIdea();\n  }\n  function renderClips(q) {\n    var box = ui.clips; box.textContent = '';\n    var last = '';\n    CLIPART.filter(function (c) { return !q || c.name.indexOf(q) >= 0 || c.cat.toLowerCase().indexOf(q) >= 0; }).forEach(function (c) {\n      if (c.cat !== last) { box.appendChild(el('div', 'abl-clip-cat', c.cat)); last = c.cat; }\n      var b = el('button', 'abl-clip', '<svg viewBox=\"0 0 100 100\" aria-hidden=\"true\"><path d=\"' + c.d + '\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>');\n      b.type = 'button'; b.title = c.name; b.setAttribute('aria-label', 'Add ' + c.name);\n      b.addEventListener('click', function () { addClip(c); });\n      box.appendChild(b);\n    });\n    if (!box.children.length) box.appendChild(el('p', 'abl-help', 'No clipart matches that word.'));\n  }\n  function bindProps(p) {\n    var t = function () { return activeText(); };\n    ui.pText.addEventListener('input', function () { var o = t(); if (!o) return; o.set('text', ui.pText.value || ' '); if (o.ablStroke) setStroke(o); o.setCoords(); fc.requestRenderAll(); scheduleRender(); });\n    ui.pText.addEventListener('change', function () { changed(true); });\n    ui.pFill.addEventListener('input', function () { var o = t(); if (!o) return; o.set('fill', ui.pFill.value); ui.pFillLbl.textContent = ui.pFill.value.toUpperCase(); fc.requestRenderAll(); scheduleRender(); });\n    ui.pFill.addEventListener('change', function () { changed(true); });\n    ui.pFont.addEventListener('change', function () {\n      var o = t(), fam = ui.pFont.value; if (!o) return;\n      fontReady(fam).then(function () { o.set('fontFamily', fam); if (o.initDimensions) o.initDimensions(); o.setCoords(); fc.requestRenderAll(); changed(true); });\n    });\n    $$('[data-abl-align]', p).forEach(function (b) { b.addEventListener('click', function () { var o = t(); if (!o) return; o.set('textAlign', b.getAttribute('data-abl-align')); fc.requestRenderAll(); syncProps(); changed(true); }); });\n    ui.pStroke.addEventListener('input', function () { var o = t(); if (!o) return; o.ablStroke = parseInt(ui.pStroke.value, 10) || 0; setStroke(o); o.setCoords(); fc.requestRenderAll(); scheduleRender(); });\n    ui.pStroke.addEventListener('change', function () { changed(true); });\n    ui.pStrokeColor.addEventListener('input', function () { var o = t(); if (!o || !o.ablStroke) return; o.set('stroke', ui.pStrokeColor.value); fc.requestRenderAll(); scheduleRender(); });\n    ui.pStrokeColor.addEventListener('change', function () { changed(true); });\n    ui.pClip.addEventListener('input', function () { var o = fc && fc.getActiveObject(); if (!o || kindOf(o) !== 'clipart') return; o.set('fill', ui.pClip.value); ui.pClipLbl.textContent = ui.pClip.value.toUpperCase(); fc.requestRenderAll(); scheduleRender(); });\n    ui.pClip.addEventListener('change', function () { changed(true); });\n    $('[data-abl-deselect]', p).addEventListener('click', function () { if (fc) { var o = fc.getActiveObject(); if (o && o.isEditing) o.exitEditing(); fc.discardActiveObject(); fc.requestRenderAll(); } });\n    $('[data-abl-remove]', p).addEventListener('click', removeActive);\n  }\n  function openDrawer(name) {\n    var isOpen = ui.drawer.classList.contains('is-open') && ui.drawerName === name;\n    if (isOpen) { closeDrawer(); return; }\n    if (ui.app) {\n      var fly = $('[data-abx-flyout]', ui.app);\n      if (fly && !fly.hidden) { var x = $('[data-abx-fly-close]', ui.app); if (x) x.click(); }\n    }\n    ui.drawerName = name;\n    $$('[data-abl-panel]', ui.drawer).forEach(function (p) { p.hidden = p.getAttribute('data-abl-panel') !== name; });\n    ui.drawer.classList.add('is-open'); ui.drawer.setAttribute('aria-hidden', 'false');\n    $$('[data-abl-tool]', ui.root).forEach(function (b) { var on = b.getAttribute('data-abl-tool') === name; b.classList.toggle('is-on', on); b.setAttribute('aria-expanded', on ? 'true' : 'false'); });\n    if (name === 'text') loadFonts();\n    ready().catch(function () {});\n  }\n  function closeDrawer() {\n    if (!ui.drawer) return;\n    ui.drawer.classList.remove('is-open'); ui.drawer.setAttribute('aria-hidden', 'true');\n    $$('[data-abl-tool]', ui.root).forEach(function (b) { b.classList.remove('is-on'); b.setAttribute('aria-expanded', 'false'); });\n  }\n\n  // the \"drop your art\" card hides while the sign has text or clipart\n  function syncEmpty() {\n    var empty = ui.app && $('[data-abx-empty]', ui.app); if (!empty) return;\n    var pz = curPiece(), any = has(pz === 'rider' ? 'rider-front' : 'front') || has(pz === 'rider' ? 'rider-back' : 'back');\n    ui.app.classList.toggle('abl-has-layers', any);\n    if (any && !empty.hidden) { empty.hidden = true; ui.hidEmpty = true; }\n    else if (!any && ui.hidEmpty) {\n      ui.hidEmpty = false;\n      var fn = $('[data-abb-file-name]', ui.root), dz = $('[data-abb-design]', ui.root);\n      if (!(fn && !fn.hidden) && !(dz && dz.checked) && API.editFace()) empty.hidden = false;\n    }\n  }\n\n  // ---------- toast ----------\n  function toast(msg, ms, action) {\n    var t = ui.toast; if (!t) return;\n    $('[data-abl-toast-text]', t).textContent = msg;\n    var b = $('[data-abl-toast-act]', t);\n    b.hidden = !action; b.textContent = action ? action.label : ''; b.onclick = action ? function () { t.hidden = true; action.run(); } : null;\n    t.hidden = false;\n    clearTimeout(toast.t);\n    if (ms) toast.t = setTimeout(function () { t.hidden = true; }, ms);\n  }\n\n  // ---------- AI designs: ?ai=<id>&sign=<KEY>&face=<front|back|rider-front|rider-back>[&rider=<size>][&ends=smooth][&logo=<id>&lb=x0,y0,x1,y1]\n  // From the AI SEG display generator page (\"Use this design\") and from the AI design drawer in this designer\n  // (ardor-realestate-ai.js calls placeAi). An AI design is made for the visible area of one face. It is fitted inside that\n  // area, and its own edges are extended (stretched, or smooth when picked) over the rest of that piece's template page\n  // (frame lip, clips, edges). The customer can then turn, move and resize it like any artwork.\n  function parseBox(s) {\n    var a = Array.isArray(s) ? s.map(Number) : String(s || '').split(',').map(parseFloat);\n    if (a.length !== 4 || !a.every(isFinite)) return null;\n    var b = [clamp(Math.min(a[0], a[2]), 0, 1), clamp(Math.min(a[1], a[3]), 0, 1), clamp(Math.max(a[0], a[2]), 0, 1), clamp(Math.max(a[1], a[3]), 0, 1)];\n    return b[2] - b[0] > 0.005 && b[3] - b[1] > 0.005 ? b : null;\n  }\n  function cleanUrl() {\n    try {\n      var u = new URL(window.location.href);\n      ['ai', 'sign', 'stand', 'face', 'rider', 'ends', 'logo', 'lb'].forEach(function (k) { u.searchParams.delete(k); });\n      window.history.replaceState(window.history.state, '', u.pathname + u.search + u.hash);\n    } catch (e) {}\n  }\n  function fetchImage(url) {\n    return fetch(url, { mode: 'cors', credentials: 'omit' }).then(function (r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.blob(); }).then(function (b) {\n      return new Promise(function (res, rej) {\n        var u = URL.createObjectURL(b), im = new Image();\n        im.onload = function () { res({ blob: b, img: im, url: u, w: im.naturalWidth, h: im.naturalHeight }); };\n        im.onerror = function () { rej(new Error('decode')); };\n        im.src = u;\n      });\n    });\n  }\n  // the face an AI design goes on: a face this order has (a back only on a 2-sided piece, a rider face only with a rider),\n  // else that piece's front, else the sign front\n  function aiFace(want) {\n    var f = nf(String(want || '').toLowerCase()), fs = API.faces ? API.faces() : ['front'];\n    if (fs.indexOf(f) >= 0) return f;\n    if (/^rider/.test(f) && fs.indexOf('rider-front') >= 0) return 'rider-front';\n    return 'front';\n  }\n  // the AI picture fitted inside the visible area (vis, inches) of a page (W x H inches), the rest of the page filled\n  // from the picture's own edges: first up and down (top and bottom bands), then sideways over the full height.\n  // Returns { blob, type, ext: { cw, ch, ox, oy, iw, ih } } like extend() (ext = where the picture sits, in pixels).\n  function composePage(img, iw0, ih0, W, H, vis, smooth) {\n    var A = iw0 / ih0, B = vis.w / vis.h;\n    var fw = A >= B ? vis.w : vis.h * A, fh = A >= B ? vis.w / A : vis.h; // the picture's box in inches (contain)\n    var fx = vis.x + (vis.w - fw) / 2, fy = vis.y + (vis.h - fh) / 2;\n    var k = iw0 / fw; // picture pixels per inch\n    var cw = W * k, ch = H * k;\n    var s = Math.min(1, 16384 / cw, 16384 / ch, Math.sqrt((isPhone() ? 16e6 : 40e6) / (cw * ch)));\n    cw = Math.max(1, Math.round(cw * s)); ch = Math.max(1, Math.round(ch * s));\n    var kk = k * s, iw = Math.max(1, Math.round(fw * kk)), ih = Math.max(1, Math.round(fh * kk));\n    var ox = Math.max(0, Math.min(cw - iw, Math.round(fx * kk))), oy = Math.max(0, Math.min(ch - ih, Math.round(fy * kk)));\n    var fillBand = smooth ? soften : side;\n    // pass 1: the picture with its top and bottom bands, as tall as the page\n    var c1 = mkCanvas(iw, ch), x1 = c1.getContext('2d');\n    x1.imageSmoothingEnabled = true; x1.imageSmoothingQuality = 'high';\n    fillBand(x1, img, iw0, ih0, 't', 0, 0, iw, oy);\n    fillBand(x1, img, iw0, ih0, 'b', 0, oy + ih, iw, ch - oy - ih);\n    x1.drawImage(img, 0, oy, iw, ih);\n    if (smooth) { var f1 = Math.max(2, Math.round(ih * 0.05)); if (oy > 0) soften(x1, img, iw0, ih0, 't', 0, oy, iw, f1, 1); if (ch - oy - ih > 0) soften(x1, img, iw0, ih0, 'b', 0, oy + ih - f1, iw, f1, 1); }\n    // pass 2: the left and right bands from that tall strip\n    var cv = mkCanvas(cw, ch), x = cv.getContext('2d');\n    x.imageSmoothingEnabled = true; x.imageSmoothingQuality = 'high';\n    fillBand(x, c1, iw, ch, 'l', 0, 0, ox, ch);\n    fillBand(x, c1, iw, ch, 'r', ox + iw, 0, cw - ox - iw, ch);\n    x.drawImage(c1, ox, 0, iw, ch);\n    if (smooth) { var f2 = Math.max(2, Math.round(iw * 0.05)); if (ox > 0) soften(x, c1, iw, ch, 'l', ox, 0, f2, ch, 1); if (cw - ox - iw > 0) soften(x, c1, iw, ch, 'r', ox + iw - f2, 0, f2, ch, 1); }\n    c1.width = c1.height = 1;\n    return toBlob(cv, 'image/jpeg', 0.92).then(function (b) {\n      cv.width = cv.height = 1;\n      if (!b) throw new Error('extend');\n      return { blob: b, type: ['image/jpeg', '.jpg'], ext: { cw: cw, ch: ch, ox: ox, oy: oy, iw: iw, ih: ih } };\n    });\n  }\n  // put an AI design on a face: o = { id, face, smooth, logo, lb, fetched? ({ blob, img, w, h }) }\n  function placeAi(o) {\n    var id = String((o && o.id) || '').toLowerCase();\n    if (!/^[0-9a-f]{32}$/.test(id)) return Promise.reject(new Error('id'));\n    var rot = 0; // sign designs are made upright for the visible area\n    var face = aiFace(o.face || (API.editFace && API.editFace()));\n    if (ai && ai.logoObj) removeLogo();\n    ai = { id: id, face: face, logo: /^[0-9A-Za-z_-]{8,64}$/.test(o.logo || '') ? o.logo : '', lb: parseBox(o.lb), ext: null, logoObj: null, rot: rot };\n    syncLogoBtn();\n    var pz = pieceOfF(face), bm = API.cfg().bm || {};\n    if (/back$/.test(face) && bm[pz] !== 'different' && API.pickBackMode) API.pickBackMode('different', pz);\n    else if (API.goFace) API.goFace(face);\n    var got = o.fetched ? Promise.resolve(o.fetched) : fetchImage(apiBase() + '/bimg/' + id);\n    return got.then(function (r) {\n      var c = API.pageOf ? API.pageOf(face) : API.cfg(), box = API.faceBox(face);\n      return composePage(r.img, r.w, r.h, c.Wi, c.Hi, box, !!o.smooth).then(function (x) {\n        var file = new File([x.blob], 'ardor-ai-sign-' + face + '-' + id.slice(0, 8) + x.type[1], { type: x.type[0] });\n        ai.ext = x.ext; ai.file = file; ai.aiImg = r.img;\n        API.loadFile(file, face);\n        return waitFor(function () { var a = API.getArt(face); return a && a.file === file && a.img ? a : null; }, 20000);\n      });\n    }).then(function (a) {\n      var c = API.cfg();\n      a.rot = rot; a.ai = true;\n      a.mode = 'custom'; a.rw = 1; a.rcx = 0.5; a.rcy = 0.5; // the composed picture is the whole page\n      API.render();\n      try { (window.dataLayer = window.dataLayer || []).push({ event: 'ardor_seg_ai_design_loaded', sign: c.key, face: face }); } catch (e) {}\n      syncLogoBtn();\n      return a;\n    });\n  }\n  function handoff() {\n    var q;\n    try { q = new URLSearchParams(window.location.search); } catch (e) { return; }\n    var id = String(q.get('ai') || '').toLowerCase();\n    if (!/^[0-9a-f]{32}$/.test(id)) return;\n    var pick = null;\n    try { pick = JSON.parse(window.sessionStorage.getItem('ardorRealestateAiPick') || 'null'); } catch (e) { pick = null; }\n    if (!pick || typeof pick !== 'object' || String(pick.ai || '').toLowerCase() !== id) pick = null;\n    var info = API.signInfo ? API.signInfo(String(q.get('sign') || q.get('stand') || (pick && pick.sign) || '')) : null;\n    if (info && API.signKey() !== info.key && API.pickSign) API.pickSign(info.key);\n    var want = nf(String(q.get('face') || (pick && pick.face) || 'front').toLowerCase());\n    // a rider face turns the rider on (at the size it was made for); a back makes the sign 2-sided where that is a choice\n    if (/^rider/.test(want) && API.setRider) API.setRider(String(q.get('rider') || (pick && pick.rider) || ''));\n    if (want === 'back') {\n      var c0 = API.cfg();\n      if (c0.sides !== 2) c0.fam.groups.forEach(function (g) { if (g.role !== 'sides') return; (g.values || []).forEach(function (v) { if (v.faces === 2 && API.pickOpt) API.pickOpt(g.id, v.v); }); });\n    }\n    var face = aiFace(want);\n    var ends = String(q.get('ends') || (pick && pick.ends) || '');\n    var logo = String(q.get('logo') || (pick && pick.logo) || ''), lb = q.get('lb') || (pick && pick.lb) || null;\n    cleanUrl();\n    toast('Loading your AI sign design\u2026', 0);\n    placeAi({ id: id, face: face, rot: 0, smooth: ends === 'smooth', logo: logo, lb: lb }).then(function () {\n      var where = { front: 'your sign', back: 'the back of your sign', 'rider-front': 'your rider', 'rider-back': 'the back of your rider' }[face] || 'your sign';\n      if (ai && ai.logo) toast('Your AI design is on ' + where + '. Tap \"Use my exact logo\" to put your original logo file over the AI\\'s version.', 9000);\n      else toast('Your AI design is on ' + where + '. Move it, resize it, or add text and clipart.', 8000);\n    }).catch(function () {\n      toast('We couldn\\'t load your AI design. Go back to the AI page and tap \"Use this design\" again.', 10000);\n    });\n  }\n  // banners wider than 3:1 (or taller than 1:3): AI image centered, the sides filled by stretching its edge pixels,\n  // sharp at the seam and blurred further out. smooth = true (the customer picked Smooth ends on the AI page, &ends=smooth)\n  // fills the sides with a soft blend of the edge colors instead and feathers the seam into the design's outer 5%.\n  function extend(img, iw0, ih0, B, smooth) {\n    var wide = B > 1, cw, ch;\n    if (wide) { ch = ih0; cw = ih0 * B; } else { cw = iw0; ch = iw0 / B; }\n    var s = Math.min(1, 16384 / cw, 16384 / ch, Math.sqrt((isPhone() ? 16e6 : 40e6) / (cw * ch)));\n    cw = Math.max(1, Math.round(cw * s)); ch = Math.max(1, Math.round(ch * s));\n    var iw = wide ? Math.round(iw0 * ch / ih0) : cw, ih = wide ? ch : Math.round(ih0 * cw / iw0);\n    var ox = wide ? Math.round((cw - iw) / 2) : 0, oy = wide ? 0 : Math.round((ch - ih) / 2);\n    var cv = mkCanvas(cw, ch), x = cv.getContext('2d');\n    x.imageSmoothingEnabled = true; x.imageSmoothingQuality = 'high';\n    var A = wide ? ['l', 0, 0, ox, ch, 'r', ox + iw, 0, cw - ox - iw, ch] : ['t', 0, 0, cw, oy, 'b', 0, oy + ih, cw, ch - oy - ih];\n    for (var q = 0; q < 10; q += 5) (smooth ? soften : side)(x, img, iw0, ih0, A[q], A[q + 1], A[q + 2], A[q + 3], A[q + 4]);\n    x.drawImage(img, ox, oy, iw, ih);\n    if (smooth) {\n      var f = Math.max(2, Math.round((wide ? iw : ih) * 0.05));\n      if (wide) { soften(x, img, iw0, ih0, 'l', ox, 0, f, ch, 1); soften(x, img, iw0, ih0, 'r', ox + iw - f, 0, f, ch, 1); }\n      else { soften(x, img, iw0, ih0, 't', 0, oy, cw, f, 1); soften(x, img, iw0, ih0, 'b', 0, oy + ih - f, cw, f, 1); }\n    }\n    return toBlob(cv, 'image/jpeg', 0.92).then(function (b) {\n      cv.width = cv.height = 1;\n      if (!b) throw new Error('extend');\n      return { blob: b, type: ['image/jpeg', '.jpg'], ext: { cw: cw, ch: ch, ox: ox, oy: oy, iw: iw, ih: ih } };\n    });\n  }\n  // soft fill for one side: the outer 6% of the design averaged into 6 steps along the edge, then\n  // stretched smoothly over the side. feather = 1 draws it over the design's own edge, fading out inward.\n  function soften(x, img, iw0, ih0, where, dx, dy, dw, dh, feather) {\n    if (dw < 1 || dh < 1) return;\n    var horiz = where === 'l' || where === 'r', band = Math.max(1, Math.round((horiz ? iw0 : ih0) * 0.06));\n    var mid = horiz ? mkCanvas(1, 64) : mkCanvas(64, 1), mx = mid.getContext('2d');\n    mx.imageSmoothingEnabled = true; mx.imageSmoothingQuality = 'high';\n    if (where === 'l') mx.drawImage(img, 0, 0, band, ih0, 0, 0, 1, 64);\n    if (where === 'r') mx.drawImage(img, iw0 - band, 0, band, ih0, 0, 0, 1, 64);\n    if (where === 't') mx.drawImage(img, 0, 0, iw0, band, 0, 0, 64, 1);\n    if (where === 'b') mx.drawImage(img, 0, ih0 - band, iw0, band, 0, 0, 64, 1);\n    var small = horiz ? mkCanvas(1, 6) : mkCanvas(6, 1), smx = small.getContext('2d');\n    smx.imageSmoothingEnabled = true; smx.imageSmoothingQuality = 'high';\n    smx.drawImage(mid, 0, 0, small.width, small.height);\n    var soft = mkCanvas(dw, dh), so = soft.getContext('2d');\n    so.imageSmoothingEnabled = true; so.imageSmoothingQuality = 'high';\n    so.drawImage(small, 0, 0, dw, dh);\n    if (feather) {\n      var g = where === 'l' ? so.createLinearGradient(0, 0, dw, 0) : where === 'r' ? so.createLinearGradient(dw, 0, 0, 0)\n        : where === 't' ? so.createLinearGradient(0, 0, 0, dh) : so.createLinearGradient(0, dh, 0, 0);\n      g.addColorStop(0, 'rgba(0,0,0,1)'); g.addColorStop(1, 'rgba(0,0,0,0)');\n      so.globalCompositeOperation = 'destination-in'; so.fillStyle = g; so.fillRect(0, 0, dw, dh);\n    }\n    x.drawImage(soft, dx, dy);\n  }\n  function side(x, img, iw0, ih0, where, dx, dy, dw, dh) {\n    if (dw < 1 || dh < 1) return;\n    var horiz = where === 'l' || where === 'r', n = Math.max(1, Math.min(4, horiz ? iw0 : ih0));\n    var line = horiz ? mkCanvas(1, dh) : mkCanvas(dw, 1), lx = line.getContext('2d');\n    lx.imageSmoothingEnabled = true; lx.imageSmoothingQuality = 'high';\n    if (where === 'l') lx.drawImage(img, 0, 0, n, ih0, 0, 0, 1, dh);\n    if (where === 'r') lx.drawImage(img, iw0 - n, 0, n, ih0, 0, 0, 1, dh);\n    if (where === 't') lx.drawImage(img, 0, 0, iw0, n, 0, 0, dw, 1);\n    if (where === 'b') lx.drawImage(img, 0, ih0 - n, iw0, n, 0, 0, dw, 1);\n    var sharp = mkCanvas(dw, dh), sx = sharp.getContext('2d');\n    sx.imageSmoothingEnabled = false;\n    sx.drawImage(line, 0, 0, dw, dh);\n    var len = horiz ? dh : dw, k = Math.max(2, Math.round(len / 40));\n    var small = horiz ? mkCanvas(1, Math.max(2, Math.round(dh / k))) : mkCanvas(Math.max(2, Math.round(dw / k)), 1), smx = small.getContext('2d');\n    smx.imageSmoothingEnabled = true; smx.imageSmoothingQuality = 'high';\n    smx.drawImage(line, 0, 0, small.width, small.height);\n    var soft = mkCanvas(dw, dh), so = soft.getContext('2d');\n    so.imageSmoothingEnabled = true; so.imageSmoothingQuality = 'high';\n    so.drawImage(small, 0, 0, dw, dh);\n    var fade = Math.max(1, Math.min(horiz ? dw : dh, len * 0.3)), g;\n    if (where === 'l') g = so.createLinearGradient(dw, 0, dw - fade, 0);\n    else if (where === 'r') g = so.createLinearGradient(0, 0, fade, 0);\n    else if (where === 't') g = so.createLinearGradient(0, dh, 0, dh - fade);\n    else g = so.createLinearGradient(0, 0, 0, fade);\n    g.addColorStop(0, 'rgba(0,0,0,0)'); g.addColorStop(1, 'rgba(0,0,0,1)');\n    so.globalCompositeOperation = 'destination-in'; so.fillStyle = g; so.fillRect(0, 0, dw, dh);\n    sx.drawImage(soft, 0, 0);\n    x.drawImage(sharp, dx, dy);\n  }\n  function syncLogoBtn() {\n    var b = ui.logoBtn; if (!b) return;\n    b.hidden = !(ai && ai.logo);\n    if (b.hidden) return;\n    var on = !!(ai.logoObj && fc && objectsFor(ai.face || 'front').indexOf(ai.logoObj) >= 0);\n    if (!on) ai.logoObj = null;\n    $('[data-abl-logo-lbl]', b).textContent = on ? 'Remove my exact logo' : 'Use my exact logo';\n    b.classList.toggle('is-on', on);\n  }\n  // a box normalized to the AI image -> page inches (where that part of the AI design sits on the sign now, turned with the art)\n  function aiBox(nb) {\n    var g = API.artGeom(ai.face || 'front'), e = ai.ext;\n    if (!g || !e || !nb) return null;\n    var r = g.rot || 0;\n    var P = function (u, v) {\n      var U = (e.ox + u * e.iw) / e.cw, V = (e.oy + v * e.ih) / e.ch, s, t;\n      if (r === 90) { s = 1 - V; t = U; } else if (r === 180) { s = 1 - U; t = 1 - V; } else if (r === 270) { s = V; t = 1 - U; } else { s = U; t = V; }\n      return [g.x + s * g.w, g.y + t * g.h];\n    };\n    var a = P(nb[0], nb[1]), b = P(nb[2], nb[3]);\n    return { x: Math.min(a[0], b[0]), y: Math.min(a[1], b[1]), w: Math.abs(b[0] - a[0]), h: Math.abs(b[1] - a[1]) };\n  }\n  function logoBox(ar) {\n    var b = sign(), s = safeArea(b.c, b.Wi, b.Hi), bx = aiBox(ai.lb);\n    if (!bx) bx = { x: s.x + s.w * 0.3, y: s.y + s.h * 0.25, w: s.w * 0.4, h: s.h * 0.5 };\n    var w = bx.w, h = w / ar; if (h > bx.h) { h = bx.h; w = h * ar; }\n    if (w > s.w) { w = s.w; h = w / ar; } if (h > s.h) { h = s.h; w = h * ar; }\n    return { cx: clamp(bx.x + bx.w / 2, s.x + w / 2, s.x + s.w - w / 2), cy: clamp(bx.y + bx.h / 2, s.y + h / 2, s.y + s.h - h / 2), w: w, h: h };\n  }\n  // When the AI's logo sits on one even background color, a patch of that color goes over the AI's logo before the\n  // original file is placed, so the AI's slightly different drawing doesn't show around it. The color is read from a\n  // thin ring just outside the logo box; if that ring isn't one even color (text, photo, gradient), no patch is used.\n  // No patch either when much of the logo file is close to that color (for example a black logo on a black banner,\n  // where the AI redrew it in white): there the AI's version is what keeps the logo readable.\n  function coverFor(lb, logoImg) {\n    var img = ai && ai.aiImg; if (!img || !lb) return null;\n    var aw = img.naturalWidth || img.width, ah = img.naturalHeight || img.height; if (!aw || !ah) return null;\n    var W = 240, H = Math.max(8, Math.round(W * ah / aw)), c = mkCanvas(W, H), x = c.getContext('2d', { willReadFrequently: true });\n    x.drawImage(img, 0, 0, W, H);\n    var d = x.getImageData(0, 0, W, H).data, bw = lb[2] - lb[0], bh = lb[3] - lb[1];\n    var gx = Math.max(bw * 0.03, 2 / W), gy = Math.max(bh * 0.03, 2 / H), rx = Math.max(bw * 0.08, 5 / W), ry = Math.max(bh * 0.08, 5 / H);\n    var inn = [lb[0] - gx, lb[1] - gy, lb[2] + gx, lb[3] + gy], out = [lb[0] - rx, lb[1] - ry, lb[2] + rx, lb[3] + ry];\n    var R = [], G = [], B = [], px, py;\n    for (py = Math.max(0, Math.floor(out[1] * H)); py < Math.min(H, Math.ceil(out[3] * H)); py++) {\n      for (px = Math.max(0, Math.floor(out[0] * W)); px < Math.min(W, Math.ceil(out[2] * W)); px++) {\n        var u = (px + 0.5) / W, v = (py + 0.5) / H;\n        if (u > inn[0] && u < inn[2] && v > inn[1] && v < inn[3]) continue;\n        var i = (py * W + px) * 4; R.push(d[i]); G.push(d[i + 1]); B.push(d[i + 2]);\n      }\n    }\n    if (R.length < 40) return null;\n    var med = function (a) { var b2 = a.slice().sort(function (p, q) { return p - q; }); return b2[b2.length >> 1]; };\n    var mr = med(R), mg = med(G), mb = med(B), near = 0;\n    for (var k = 0; k < R.length; k++) if (Math.max(Math.abs(R[k] - mr), Math.abs(G[k] - mg), Math.abs(B[k] - mb)) <= 36) near++;\n    if (near / R.length < 0.85) return null;\n    if (logoImg) {\n      var lw = logoImg.naturalWidth || logoImg.width, lh = logoImg.naturalHeight || logoImg.height;\n      if (lw && lh) {\n        var LW = Math.min(200, lw), LH = Math.max(1, Math.round(LW * lh / lw)), lc = mkCanvas(LW, LH), lx = lc.getContext('2d', { willReadFrequently: true });\n        lx.drawImage(logoImg, 0, 0, LW, LH);\n        var ld = lx.getImageData(0, 0, LW, LH).data, op = 0, same = 0;\n        for (var j = 0; j < ld.length; j += 4) {\n          if (ld[j + 3] < 128) continue;\n          op++;\n          if (Math.max(Math.abs(ld[j] - mr), Math.abs(ld[j + 1] - mg), Math.abs(ld[j + 2] - mb)) <= 60) same++;\n        }\n        if (!op || same / op > 0.2) return null;\n      }\n    }\n    return { color: 'rgb(' + mr + ',' + mg + ',' + mb + ')', box: [Math.max(0, inn[0]), Math.max(0, inn[1]), Math.min(1, inn[2]), Math.min(1, inn[3])] };\n  }\n  // Finds the customer's logo inside the AI design so the original file lands right on top of the AI's version.\n  // Matches edge maps (normalized cross-correlation of gradient magnitude), which ignores recoloring such as dark\n  // logo text the AI turned white on a dark background. The AI sometimes draws the logo a little wider or narrower\n  // than the file, so a coarse search (image about 40,000 px) tries several widths at the file's shape and, when that\n  // match is weak, at wider and narrower shapes too; a 1-pixel fine pass then refines the best one. Tiny templates\n  // are skipped (they match noise). Returns a box normalized to the AI image [x0,y0,x1,y1], or null when nothing matches\n  // well (we then use the AI check's box).\n  function findLogo(aiImg, logoImg) {\n    var aw = aiImg.naturalWidth || aiImg.width, ah = aiImg.naturalHeight || aiImg.height;\n    var lw0 = logoImg.naturalWidth || logoImg.width, lh0 = logoImg.naturalHeight || logoImg.height;\n    if (!aw || !ah || !lw0 || !lh0) return null;\n    function lum(img, w, h, bg) {\n      var c = mkCanvas(w, h), x = c.getContext('2d', { willReadFrequently: true });\n      if (bg) { x.fillStyle = bg; x.fillRect(0, 0, w, h); }\n      x.imageSmoothingEnabled = true; x.imageSmoothingQuality = 'high'; x.drawImage(img, 0, 0, w, h);\n      var d = x.getImageData(0, 0, w, h).data, g = new Float32Array(w * h);\n      for (var i = 0; i < w * h; i++) g[i] = 0.299 * d[i * 4] + 0.587 * d[i * 4 + 1] + 0.114 * d[i * 4 + 2];\n      return g;\n    }\n    function edges(g, w, h) {\n      var e = new Float32Array(w * h);\n      for (var y = 1; y < h - 1; y++) for (var x = 1; x < w - 1; x++) {\n        var i = y * w + x;\n        var gx = g[i + 1] - g[i - 1] + 0.5 * (g[i - w + 1] - g[i - w - 1] + g[i + w + 1] - g[i + w - 1]);\n        var gy = g[i + w] - g[i - w] + 0.5 * (g[i + w - 1] - g[i - w - 1] + g[i + w + 1] - g[i - w + 1]);\n        e[i] = Math.sqrt(gx * gx + gy * gy);\n      }\n      return e;\n    }\n    function prep(W) {\n      var H = Math.max(16, Math.round(W * ah / aw)), W1 = W + 1, EA = edges(lum(aiImg, W, H), W, H);\n      var S = new Float64Array(W1 * (H + 1)), S2 = new Float64Array(W1 * (H + 1));\n      for (var y = 0; y < H; y++) {\n        var r = 0, r2 = 0;\n        for (var x = 0; x < W; x++) { var v = EA[y * W + x]; r += v; r2 += v * v; S[(y + 1) * W1 + x + 1] = S[y * W1 + x + 1] + r; S2[(y + 1) * W1 + x + 1] = S2[y * W1 + x + 1] + r2; }\n      }\n      return { W: W, H: H, W1: W1, EA: EA, S: S, S2: S2 };\n    }\n    function box(G, T, x, y, w, h) { var W1 = G.W1; return T[(y + h) * W1 + x + w] - T[y * W1 + x + w] - T[(y + h) * W1 + x] + T[y * W1 + x]; }\n    // f = logo width as a share of the image width, a = how much wider the AI drew it than the file (1 = same shape)\n    function tmpl(G, f, a) {\n      var lw = Math.round(G.W * f), lh = Math.round(lw * lh0 / lw0 / a);\n      if (lw < 24 || lh < 10 || lw * lh < 600 || lw >= G.W || lh >= G.H) return null;\n      var ET = edges(lum(logoImg, lw, lh, '#808080'), lw, lh), n = lw * lh, m = 0, v = 0, i;\n      for (i = 0; i < n; i++) m += ET[i];\n      m /= n;\n      var Z = new Float32Array(n), idx = [];\n      for (i = 0; i < n; i++) { Z[i] = ET[i] - m; v += Z[i] * Z[i]; if (Math.abs(Z[i]) > 1e-3) idx.push(i); }\n      return v > 0 ? { lw: lw, lh: lh, n: n, Z: Z, v: v, idx: idx, f: f, a: a } : null;\n    }\n    function score(G, T, x, y, stride) {\n      var s = box(G, G.S, x, y, T.lw, T.lh), s2 = box(G, G.S2, x, y, T.lw, T.lh), va = s2 - s * s / T.n;\n      if (va < 1) return 0;\n      var sl = 0, idx = T.idx, Z = T.Z, lw = T.lw, EA = G.EA, W = G.W;\n      for (var k = 0; k < idx.length; k += stride) { var i = idx[k], ty = (i / lw) | 0; sl += Z[i] * EA[(y + ty) * W + x + i - ty * lw]; }\n      return sl * stride / Math.sqrt(va * T.v);\n    }\n    // about 40,000 pixels for the search (240 px wide for a 2:1 banner, about 160 px for a portrait A-frame sign)\n    var CW = Math.max(150, Math.min(240, Math.round(Math.sqrt(40000 * aw / ah)))), G1 = prep(CW), best = { sc: 0 };\n    function coarse(a) {\n      for (var f = 0.1; f <= 0.98; f *= 1.07) {\n        var T = tmpl(G1, f, a); if (!T) continue;\n        for (var y = 0; y <= G1.H - T.lh; y += 2) for (var x = 0; x <= G1.W - T.lw; x += 2) { var sc = score(G1, T, x, y, 2); if (sc > best.sc) best = { sc: sc, x: x, y: y, T: T }; }\n      }\n    }\n    coarse(1);\n    if (best.sc < 0.65) [0.9, 1.08, 1.18, 1.32].forEach(coarse);\n    if (!best.T) return null;\n    var fine = { sc: 0 };\n    [best.T.f / 1.03, best.T.f, best.T.f * 1.03].forEach(function (ff) {\n      [best.T.a / 1.08, best.T.a / 1.04, best.T.a, best.T.a * 1.04, best.T.a * 1.08].forEach(function (aa) {\n        var T2 = tmpl(G1, ff, aa); if (!T2) return;\n        for (var yy = Math.max(0, best.y - 3); yy <= Math.min(G1.H - T2.lh, best.y + 3); yy++) for (var xx = Math.max(0, best.x - 3); xx <= Math.min(G1.W - T2.lw, best.x + 3); xx++) {\n          var s3 = score(G1, T2, xx, yy, 1); if (s3 > fine.sc) fine = { sc: s3, x: xx, y: yy, T: T2 };\n        }\n      });\n    });\n    if (!fine.T || fine.sc < 0.55) return null;\n    return [fine.x / G1.W, fine.y / G1.H, (fine.x + fine.T.lw) / G1.W, (fine.y + fine.T.lh) / G1.H];\n  }\n  function removeLogo() {\n    if (ai && fc) {\n      if (ai.logoObj) { fc.remove(ai.logoObj); ai.logoObj = null; }\n      if (ai.coverObj) { fc.remove(ai.coverObj); ai.coverObj = null; }\n      fc.requestRenderAll();\n    }\n    syncLogoBtn();\n  }\n  function useLogo() {\n    if (!ai || !ai.logo || ui.logoBtn.disabled) return;\n    if (ai.logoObj) { removeLogo(); toast('Removed your logo file. The AI\\'s version shows again.', 5000); return; }\n    ui.logoBtn.disabled = true; $('[data-abl-logo-lbl]', ui.logoBtn).textContent = 'Adding your logo\\u2026';\n    ready().then(function () { return ai.logoImg ? ai.logoImg : fetchImage(apiBase() + '/bimg/' + ai.logo); }).then(function (r) {\n      ai.logoImg = r;\n      return new Promise(function (res, rej) { fabric.Image.fromURL(r.url, function (im) { if (im && im.width) res(im); else rej(new Error('logo')); }); });\n    }).then(function (im) {\n      targetFace();\n      if (API.editFace() !== (ai.face || 'front')) { if (API.goFace) API.goFace(ai.face || 'front'); sync(); }\n      if (!ai.found && ai.aiImg && ai.logoImg && ai.logoImg.img) {\n        try { var hit = findLogo(ai.aiImg, ai.logoImg.img); if (hit) { ai.lb = hit; ai.cover = coverFor(hit, ai.logoImg.img); } } catch (er) {}\n        ai.found = true;\n      }\n      var cb = ai.cover && aiBox(ai.cover.box), lbx = aiBox(ai.lb);\n      if (cb && lbx && cb.w > 0 && cb.h > 0) {\n        // keep the patch inside the safe line (so the dashed guide stays visible), but always over the AI's logo\n        var sb = sign(), sa = safeArea(sb.c, sb.Wi, sb.Hi);\n        var x0 = Math.min(Math.max(cb.x, sa.x), lbx.x), y0 = Math.min(Math.max(cb.y, sa.y), lbx.y);\n        var x1 = Math.max(Math.min(cb.x + cb.w, sa.x + sa.w), lbx.x + lbx.w), y1 = Math.max(Math.min(cb.y + cb.h, sa.y + sa.h), lbx.y + lbx.h);\n        cb = { x: x0, y: y0, w: x1 - x0, h: y1 - y0 };\n        var rc = new fabric.Rect({ originX: 'center', originY: 'center', left: cb.x + cb.w / 2, top: cb.y + cb.h / 2, width: cb.w, height: cb.h, fill: ai.cover.color, stroke: null, strokeWidth: 0, selectable: false, evented: false, ablKind: 'cover', ablLabel: 'Cover over the AI logo' });\n        fc.add(rc); ai.coverObj = rc;\n      }\n      var art0 = API.getArt(ai.face || 'front'), rr = (art0 && art0.rot) || 0, rq = rr === 90 || rr === 270;\n      var box = logoBox(rq ? im.height / im.width : im.width / im.height);\n      look(im); im.set({ originX: 'center', originY: 'center', left: box.cx, top: box.cy, ablKind: 'image', ablLabel: 'Your logo (original file)', ablLogo: true, angle: rr });\n      im.scale((rq ? box.h : box.w) / im.width);\n      ai.logoObj = im;\n      place(im);\n      ui.logoBtn.disabled = false; syncLogoBtn();\n      toast('We put your original logo file over the AI\\'s version. Drag it or its corners to line it up.', 10000, { label: 'Undo', run: removeLogo });\n    }).catch(function () {\n      ui.logoBtn.disabled = false; syncLogoBtn();\n      toast('We couldn\\'t load your logo file. Please try again, or upload it with the Artwork button.', 8000);\n    });\n  }\n\n  // ---------- keyboard ----------\n  function onKey(e) {\n    if (!fc || document.querySelector('dialog[open]')) return;\n    var ae = document.activeElement, o = fc.getActiveObject();\n    var typing = (ae && /^(input|textarea|select)$/i.test(ae.tagName)) || (o && o.isEditing);\n    var mine = !ae || ae === document.body || ui.root.contains(ae);\n    if (!mine) return;\n    var mod = e.metaKey || e.ctrlKey;\n    if (mod && (e.key === 'z' || e.key === 'Z') && !typing && hist.list.length > 1) { e.preventDefault(); if (e.shiftKey) redo(); else undo(); return; }\n    if (typing || !o || !editable()) return;\n    if (e.key === 'Delete' || e.key === 'Backspace') { e.preventDefault(); removeActive(); return; }\n    if (mod && (e.key === 'd' || e.key === 'D')) { e.preventDefault(); objAction('duplicate'); return; }\n    var step = e.shiftKey ? 2 : 0.25;\n    if (e.key === 'ArrowLeft') o.left -= step; else if (e.key === 'ArrowRight') o.left += step;\n    else if (e.key === 'ArrowUp') o.top -= step; else if (e.key === 'ArrowDown') o.top += step;\n    else return;\n    e.preventDefault(); o.setCoords(); fc.requestRenderAll(); changed(true);\n  }\n\n  // ---------- start ----------\n  function watch() {\n    var chip = $('[data-abb-chip-size]', ui.root);\n    var onRender = function () { syncIdea(); if (fc) sync(); };\n    if (chip && window.MutationObserver) new MutationObserver(onRender).observe(chip, { childList: true, characterData: true, subtree: true });\n    var lc = API.layoutCanvas();\n    if (lc && window.ResizeObserver) { try { new ResizeObserver(function () { if (fc) sync(); }).observe(lc); } catch (e) {} }\n    window.addEventListener('resize', function () { if (fc) sync(); });\n    ui.root.addEventListener('ardor:seg-view', function () { syncIdea(); if (fc) sync(); }); // the designer zoomed or panned the 2D view\n    if (ui.app && window.MutationObserver) {\n      new MutationObserver(function () { if (fc) sync(); syncHist(); }).observe(ui.app, { attributes: true, attributeFilter: ['data-mode'] });\n      var empty = $('[data-abx-empty]', ui.app);\n      if (empty) new MutationObserver(function () { if (fc) syncEmpty(); }).observe(empty, { attributes: true, attributeFilter: ['hidden'] });\n    }\n    document.addEventListener('keydown', onKey);\n    document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && ui.drawer && ui.drawer.classList.contains('is-open') && !document.querySelector('dialog[open]')) closeDrawer(); });\n  }\n  function boot() {\n    if (booted) return true;\n    API = window.ArdorSegAPI;\n    if (!API || !API.root) return false;\n    if (!API.root.querySelector('.abx') && !API.root.classList.contains('abb--app') && !boot.waited) return false;\n    booted = true;\n    IDEA_PAGE = ''; // no AI tools in the SEG designer (Dayne, Oct 19 2026)\n    ui.root = API.root; ui.app = $('.abx', API.root);\n    buildUi();\n    watch();\n    /* no AI hand-off (?ai=) in the SEG designer */\n    try { document.dispatchEvent(new CustomEvent('ardor:layers-kit-ui')); } catch (e) {}\n    return true;\n  }\n\n  window.ArdorSegLayers = {\n    paint: paint, composite: composite, has: has, list: list, canvas: function () { return fc; }, ready: ready,\n    placeAi: placeAi, sync: function () { if (fc) sync(); },\n    openDrawer: function (n) { if (ui.drawer) openDrawer(n); }, closeDrawer: function () { if (ui.drawer) closeDrawer(); }\n  };\n  // Oct 18, 2026 (designer kit): what assets/ardor-kit-qr-tool.js (and later the rest of the designer kit) uses\n  window.ArdorSegLayers.kit = { v: 1, piece: curPiece, faces: function () { return API && API.faces ? API.faces() : ['front']; }, fabric: function () { return fabric; }, canvas: function () { return fc; }, ready: ready, fontReady: fontReady, loadFonts: loadFonts, banner: sign, safeArea: safeArea, look: look, place: place, changed: changed, pushHistory: pushHistory, sync: sync, syncProps: syncProps, objectsFor: objectsFor, face: function () { return cur; }, targetFace: targetFace, setQuiet: function (q) { quiet = !!q; }, openDrawer: openDrawer, closeDrawer: closeDrawer, ui: function () { return ui; }, toast: toast, track: track, fitInside: fitInside, FONTS: FONTS, CLIPART: CLIPART, PROPS: PROPS, LOOK: LOOK, api: function () { return API; }, booted: function () { return booted; } };\n  try { document.dispatchEvent(new CustomEvent('ardor:layers-kit')); } catch (e) {}\n\n  if (!boot()) {\n    var tries = 0;\n    document.addEventListener('ardor:seg-api', function () { boot(); });\n    var iv = setInterval(function () { tries++; if (tries > 20) boot.waited = true; if (boot() || tries > 150) clearInterval(iv); }, 100);\n  }\n})();\n"],
  "mappings": "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",
  "names": ["restore", "tries", "S2"]
}
