{
  "version": 3,
  "sources": ["/cdn/shop/t/1064/assets/studio-v2.js?auto=format%2Ccompress"],
  "sourcesContent": ["var NinjaStudio = (() => {\n  var __defProp = Object.defineProperty;\n  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n  var __getOwnPropNames = Object.getOwnPropertyNames;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __export = (target2, all) => {\n    for (var name in all)\n      __defProp(target2, name, { get: all[name], enumerable: true });\n  };\n  var __copyProps = (to2, from, except, desc) => {\n    if (from && typeof from === \"object\" || typeof from === \"function\") {\n      for (let key of __getOwnPropNames(from))\n        if (!__hasOwnProp.call(to2, key) && key !== except)\n          __defProp(to2, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n    }\n    return to2;\n  };\n  var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n  // src/index.js\n  var src_exports = {};\n  __export(src_exports, {\n    MODES: () => MODES,\n    config: () => cfg,\n    mount: () => mount,\n    textLayer: () => renderTextLayer\n  });\n\n  // node_modules/fabric/dist/index.min.mjs\n  var e = Object.defineProperty;\n  var t = (t2, n2) => {\n    let r2 = {};\n    for (var i2 in t2) e(r2, i2, { get: t2[i2], enumerable: true });\n    return n2 || e(r2, Symbol.toStringTag, { value: `Module` }), r2;\n  };\n  function n(e24) {\n    return n = typeof Symbol == `function` && typeof Symbol.iterator == `symbol` ? function(e25) {\n      return typeof e25;\n    } : function(e25) {\n      return e25 && typeof Symbol == `function` && e25.constructor === Symbol && e25 !== Symbol.prototype ? `symbol` : typeof e25;\n    }, n(e24);\n  }\n  function r(e24) {\n    var t2 = function(e25, t3) {\n      if (n(e25) != `object` || !e25) return e25;\n      var r2 = e25[Symbol.toPrimitive];\n      if (r2 !== void 0) {\n        var i2 = r2.call(e25, t3 || `default`);\n        if (n(i2) != `object`) return i2;\n        throw TypeError(`@@toPrimitive must return a primitive value.`);\n      }\n      return (t3 === `string` ? String : Number)(e25);\n    }(e24, `string`);\n    return n(t2) == `symbol` ? t2 : t2 + ``;\n  }\n  function i(e24, t2, n2) {\n    return (t2 = r(t2)) in e24 ? Object.defineProperty(e24, t2, { value: n2, enumerable: true, configurable: true, writable: true }) : e24[t2] = n2, e24;\n  }\n  var a = class {\n    constructor() {\n      i(this, `browserShadowBlurConstant`, 1), i(this, `DPI`, 96), i(this, `devicePixelRatio`, typeof window < `u` ? window.devicePixelRatio : 1), i(this, `perfLimitSizeTotal`, 2097152), i(this, `maxCacheSideLimit`, 4096), i(this, `minCacheSideLimit`, 256), i(this, `disableStyleCopyPaste`, false), i(this, `enableGLFiltering`, true), i(this, `textureSize`, 4096), i(this, `forceGLPutImageData`, false), i(this, `cachesBoundsOfCurve`, false), i(this, `fontPaths`, {}), i(this, `NUM_FRACTION_DIGITS`, 4);\n    }\n  };\n  var o = new class extends a {\n    constructor(e24) {\n      super(), this.configure(e24);\n    }\n    configure(e24 = {}) {\n      Object.assign(this, e24);\n    }\n    addFonts(e24 = {}) {\n      this.fontPaths = { ...this.fontPaths, ...e24 };\n    }\n    removeFonts(e24 = []) {\n      e24.forEach((e25) => {\n        delete this.fontPaths[e25];\n      });\n    }\n    clearFonts() {\n      this.fontPaths = {};\n    }\n    restoreDefaults(e24) {\n      let t2 = new a(), n2 = (e24 == null ? void 0 : e24.reduce((e25, n3) => (e25[n3] = t2[n3], e25), {})) || t2;\n      this.configure(n2);\n    }\n  }();\n  var s = (e24, ...t2) => console[e24](`fabric`, ...t2);\n  var c = class extends Error {\n    constructor(e24, t2) {\n      super(`fabric: ${e24}`, t2);\n    }\n  };\n  var l = class extends c {\n    constructor(e24) {\n      super(`${e24} 'options.signal' is in 'aborted' state`);\n    }\n  };\n  var u = class {\n  };\n  var d = class extends u {\n    testPrecision(e24, t2) {\n      let n2 = `precision ${t2} float;\nvoid main(){}`, r2 = e24.createShader(e24.FRAGMENT_SHADER);\n      return !!r2 && (e24.shaderSource(r2, n2), e24.compileShader(r2), !!e24.getShaderParameter(r2, e24.COMPILE_STATUS));\n    }\n    queryWebGL(e24) {\n      let t2 = e24.getContext(`webgl`);\n      t2 && (this.maxTextureSize = t2.getParameter(t2.MAX_TEXTURE_SIZE), this.GLPrecision = [`highp`, `mediump`, `lowp`].find((e25) => this.testPrecision(t2, e25)), t2.getExtension(`WEBGL_lose_context`).loseContext(), s(`log`, `WebGL: max texture size ${this.maxTextureSize}`));\n    }\n    isSupported(e24) {\n      return !!this.maxTextureSize && this.maxTextureSize >= e24;\n    }\n  };\n  var f = {};\n  var p;\n  var h = () => p || (p = { document, window, isTouchSupported: `ontouchstart` in window || `ontouchstart` in document || window && window.navigator && window.navigator.maxTouchPoints > 0, WebGLProbe: new d(), dispose() {\n  }, copyPasteData: f });\n  var g = () => h().document;\n  var _ = () => h().window;\n  var v = () => {\n    var e24;\n    return Math.max((e24 = o.devicePixelRatio) == null ? _().devicePixelRatio : e24, 1);\n  };\n  var y = new class {\n    constructor() {\n      i(this, `boundsOfCurveCache`, {}), this.charWidthsCache = /* @__PURE__ */ new Map();\n    }\n    getFontCache({ fontFamily: e24, fontStyle: t2, fontWeight: n2 }) {\n      e24 = e24.toLowerCase();\n      let r2 = this.charWidthsCache;\n      r2.has(e24) || r2.set(e24, /* @__PURE__ */ new Map());\n      let i2 = r2.get(e24), a2 = `${t2.toLowerCase()}_${(n2 + ``).toLowerCase()}`;\n      return i2.has(a2) || i2.set(a2, /* @__PURE__ */ new Map()), i2.get(a2);\n    }\n    clearFontCache(e24) {\n      e24 ? this.charWidthsCache.delete((e24 || ``).toLowerCase()) : this.charWidthsCache = /* @__PURE__ */ new Map();\n    }\n    limitDimsByArea(e24) {\n      let { perfLimitSizeTotal: t2 } = o, n2 = Math.sqrt(t2 * e24);\n      return [Math.floor(n2), Math.floor(t2 / n2)];\n    }\n  }();\n  var b = `7.4.0`;\n  function x() {\n  }\n  var S = Math.PI / 2;\n  var C = Math.PI / 4;\n  var w = 2 * Math.PI;\n  var ee = Math.PI / 180;\n  var T = Object.freeze([1, 0, 0, 1, 0, 0]);\n  var E = `center`;\n  var D = `left`;\n  var O = `bottom`;\n  var k = `right`;\n  var te = `none`;\n  var ne = /\\r?\\n/;\n  var re = `moving`;\n  var ie = `scaling`;\n  var ae = `rotating`;\n  var oe = `rotate`;\n  var A = `skewing`;\n  var se = `resizing`;\n  var ce = `modifyPoly`;\n  var le = `changed`;\n  var ue = `scale`;\n  var de = `scaleX`;\n  var fe = `scaleY`;\n  var pe = `skewX`;\n  var me = `skewY`;\n  var j = `fill`;\n  var he = `stroke`;\n  var ge = `modified`;\n  var _e = `normal`;\n  var ve = `json`;\n  var M = new class {\n    constructor() {\n      this[ve] = /* @__PURE__ */ new Map(), this.svg = /* @__PURE__ */ new Map();\n    }\n    has(e24) {\n      return this[ve].has(e24);\n    }\n    getClass(e24) {\n      let t2 = this[ve].get(e24);\n      if (!t2) throw new c(`No class registered for ${e24}`);\n      return t2;\n    }\n    setClass(e24, t2) {\n      t2 ? this[ve].set(t2, e24) : (this[ve].set(e24.type, e24), this[ve].set(e24.type.toLowerCase(), e24));\n    }\n    getSVGClass(e24) {\n      return this.svg.get(e24);\n    }\n    setSVGClass(e24, t2) {\n      this.svg.set(t2 == null ? e24.type.toLowerCase() : t2, e24);\n    }\n  }();\n  var ye = new class extends Array {\n    remove(e24) {\n      let t2 = this.indexOf(e24);\n      t2 > -1 && this.splice(t2, 1);\n    }\n    cancelAll() {\n      let e24 = this.splice(0);\n      return e24.forEach((e25) => e25.abort()), e24;\n    }\n    cancelByCanvas(e24) {\n      if (!e24) return [];\n      let t2 = this.filter((t3) => {\n        var n2;\n        return t3.target === e24 || typeof t3.target == `object` && ((n2 = t3.target) == null ? void 0 : n2.canvas) === e24;\n      });\n      return t2.forEach((e25) => e25.abort()), t2;\n    }\n    cancelByTarget(e24) {\n      if (!e24) return [];\n      let t2 = this.filter((t3) => t3.target === e24);\n      return t2.forEach((e25) => e25.abort()), t2;\n    }\n  }();\n  var be = class {\n    constructor() {\n      i(this, `__eventListeners`, {});\n    }\n    on(e24, t2) {\n      if (this.__eventListeners || (this.__eventListeners = {}), typeof e24 == `object`) return Object.entries(e24).forEach(([e25, t3]) => {\n        this.on(e25, t3);\n      }), () => this.off(e24);\n      if (t2) {\n        let n2 = e24;\n        return this.__eventListeners[n2] || (this.__eventListeners[n2] = []), this.__eventListeners[n2].push(t2), () => this.off(n2, t2);\n      }\n      return () => false;\n    }\n    once(e24, t2) {\n      if (typeof e24 == `object`) {\n        let t3 = [];\n        return Object.entries(e24).forEach(([e25, n2]) => {\n          t3.push(this.once(e25, n2));\n        }), () => t3.forEach((e25) => e25());\n      }\n      if (t2) {\n        let n2 = this.on(e24, function(...e25) {\n          t2.call(this, ...e25), n2();\n        });\n        return n2;\n      }\n      return () => false;\n    }\n    _removeEventListener(e24, t2) {\n      if (this.__eventListeners[e24]) if (t2) {\n        let n2 = this.__eventListeners[e24], r2 = n2.indexOf(t2);\n        r2 > -1 && n2.splice(r2, 1);\n      } else this.__eventListeners[e24] = [];\n    }\n    off(e24, t2) {\n      if (this.__eventListeners) if (e24 === void 0) for (let e25 in this.__eventListeners) this._removeEventListener(e25);\n      else typeof e24 == `object` ? Object.entries(e24).forEach(([e25, t3]) => {\n        this._removeEventListener(e25, t3);\n      }) : this._removeEventListener(e24, t2);\n    }\n    fire(e24, t2) {\n      var n2;\n      if (!this.__eventListeners) return;\n      let r2 = (n2 = this.__eventListeners[e24]) == null ? void 0 : n2.concat();\n      if (r2) for (let e25 = 0; e25 < r2.length; e25++) r2[e25].call(this, t2 || {});\n    }\n  };\n  var xe = (e24, t2) => {\n    let n2 = e24.indexOf(t2);\n    return n2 !== -1 && e24.splice(n2, 1), e24;\n  };\n  var Se = (e24) => {\n    if (e24 === 0) return 1;\n    switch (Math.abs(e24) / S) {\n      case 1:\n      case 3:\n        return 0;\n      case 2:\n        return -1;\n    }\n    return Math.cos(e24);\n  };\n  var Ce = (e24) => {\n    if (e24 === 0) return 0;\n    let t2 = e24 / S, n2 = Math.sign(e24);\n    switch (t2) {\n      case 1:\n        return n2;\n      case 2:\n        return 0;\n      case 3:\n        return -n2;\n    }\n    return Math.sin(e24);\n  };\n  var N = class e2 {\n    constructor(e24 = 0, t2 = 0) {\n      typeof e24 == `object` ? (this.x = e24.x, this.y = e24.y) : (this.x = e24, this.y = t2);\n    }\n    add(t2) {\n      return new e2(this.x + t2.x, this.y + t2.y);\n    }\n    addEquals(e24) {\n      return this.x += e24.x, this.y += e24.y, this;\n    }\n    scalarAdd(t2) {\n      return new e2(this.x + t2, this.y + t2);\n    }\n    scalarAddEquals(e24) {\n      return this.x += e24, this.y += e24, this;\n    }\n    subtract(t2) {\n      return new e2(this.x - t2.x, this.y - t2.y);\n    }\n    subtractEquals(e24) {\n      return this.x -= e24.x, this.y -= e24.y, this;\n    }\n    scalarSubtract(t2) {\n      return new e2(this.x - t2, this.y - t2);\n    }\n    scalarSubtractEquals(e24) {\n      return this.x -= e24, this.y -= e24, this;\n    }\n    multiply(t2) {\n      return new e2(this.x * t2.x, this.y * t2.y);\n    }\n    scalarMultiply(t2) {\n      return new e2(this.x * t2, this.y * t2);\n    }\n    scalarMultiplyEquals(e24) {\n      return this.x *= e24, this.y *= e24, this;\n    }\n    divide(t2) {\n      return new e2(this.x / t2.x, this.y / t2.y);\n    }\n    scalarDivide(t2) {\n      return new e2(this.x / t2, this.y / t2);\n    }\n    scalarDivideEquals(e24) {\n      return this.x /= e24, this.y /= e24, this;\n    }\n    eq(e24) {\n      return this.x === e24.x && this.y === e24.y;\n    }\n    lt(e24) {\n      return this.x < e24.x && this.y < e24.y;\n    }\n    lte(e24) {\n      return this.x <= e24.x && this.y <= e24.y;\n    }\n    gt(e24) {\n      return this.x > e24.x && this.y > e24.y;\n    }\n    gte(e24) {\n      return this.x >= e24.x && this.y >= e24.y;\n    }\n    lerp(t2, n2 = 0.5) {\n      return n2 = Math.max(Math.min(1, n2), 0), new e2(this.x + (t2.x - this.x) * n2, this.y + (t2.y - this.y) * n2);\n    }\n    distanceFrom(e24) {\n      let t2 = this.x - e24.x, n2 = this.y - e24.y;\n      return Math.sqrt(t2 * t2 + n2 * n2);\n    }\n    midPointFrom(e24) {\n      return this.lerp(e24);\n    }\n    min(t2) {\n      return new e2(Math.min(this.x, t2.x), Math.min(this.y, t2.y));\n    }\n    max(t2) {\n      return new e2(Math.max(this.x, t2.x), Math.max(this.y, t2.y));\n    }\n    toString() {\n      return `${this.x},${this.y}`;\n    }\n    setXY(e24, t2) {\n      return this.x = e24, this.y = t2, this;\n    }\n    setX(e24) {\n      return this.x = e24, this;\n    }\n    setY(e24) {\n      return this.y = e24, this;\n    }\n    setFromPoint(e24) {\n      return this.x = e24.x, this.y = e24.y, this;\n    }\n    swap(e24) {\n      let t2 = this.x, n2 = this.y;\n      this.x = e24.x, this.y = e24.y, e24.x = t2, e24.y = n2;\n    }\n    clone() {\n      return new e2(this.x, this.y);\n    }\n    rotate(t2, n2 = we) {\n      let r2 = Ce(t2), i2 = Se(t2), a2 = this.subtract(n2);\n      return new e2(a2.x * i2 - a2.y * r2, a2.x * r2 + a2.y * i2).add(n2);\n    }\n    transform(t2, n2 = false) {\n      return new e2(t2[0] * this.x + t2[2] * this.y + (n2 ? 0 : t2[4]), t2[1] * this.x + t2[3] * this.y + (n2 ? 0 : t2[5]));\n    }\n  };\n  var we = new N(0, 0);\n  var Te = (e24) => !!e24 && Array.isArray(e24._objects);\n  function Ee(e24) {\n    class t2 extends e24 {\n      constructor(...e25) {\n        super(...e25), i(this, `_objects`, []);\n      }\n      _onObjectAdded(e25) {\n      }\n      _onObjectRemoved(e25) {\n      }\n      _onStackOrderChanged(e25) {\n      }\n      add(...e25) {\n        let t3 = this._objects.push(...e25);\n        return e25.forEach((e26) => this._onObjectAdded(e26)), t3;\n      }\n      insertAt(e25, ...t3) {\n        return this._objects.splice(e25, 0, ...t3), t3.forEach((e26) => this._onObjectAdded(e26)), this._objects.length;\n      }\n      remove(...e25) {\n        let t3 = this._objects, n2 = [];\n        return e25.forEach((e26) => {\n          let r2 = t3.indexOf(e26);\n          r2 !== -1 && (t3.splice(r2, 1), n2.push(e26), this._onObjectRemoved(e26));\n        }), n2;\n      }\n      forEachObject(e25) {\n        this.getObjects().forEach((t3, n2, r2) => e25(t3, n2, r2));\n      }\n      getObjects(...e25) {\n        return e25.length === 0 ? [...this._objects] : this._objects.filter((t3) => t3.isType(...e25));\n      }\n      item(e25) {\n        return this._objects[e25];\n      }\n      isEmpty() {\n        return this._objects.length === 0;\n      }\n      size() {\n        return this._objects.length;\n      }\n      contains(e25, n2) {\n        return !!this._objects.includes(e25) || !!n2 && this._objects.some((n3) => n3 instanceof t2 && n3.contains(e25, true));\n      }\n      complexity() {\n        return this._objects.reduce((e25, t3) => e25 += t3.complexity ? t3.complexity() : 0, 0);\n      }\n      sendObjectToBack(e25) {\n        return !(!e25 || e25 === this._objects[0]) && (xe(this._objects, e25), this._objects.unshift(e25), this._onStackOrderChanged(e25), true);\n      }\n      bringObjectToFront(e25) {\n        return !(!e25 || e25 === this._objects[this._objects.length - 1]) && (xe(this._objects, e25), this._objects.push(e25), this._onStackOrderChanged(e25), true);\n      }\n      sendObjectBackwards(e25, t3) {\n        if (!e25) return false;\n        let n2 = this._objects.indexOf(e25);\n        if (n2 !== 0) {\n          let r2 = this.findNewLowerIndex(e25, n2, t3);\n          return xe(this._objects, e25), this._objects.splice(r2, 0, e25), this._onStackOrderChanged(e25), true;\n        }\n        return false;\n      }\n      bringObjectForward(e25, t3) {\n        if (!e25) return false;\n        let n2 = this._objects.indexOf(e25);\n        if (n2 !== this._objects.length - 1) {\n          let r2 = this.findNewUpperIndex(e25, n2, t3);\n          return xe(this._objects, e25), this._objects.splice(r2, 0, e25), this._onStackOrderChanged(e25), true;\n        }\n        return false;\n      }\n      moveObjectTo(e25, t3) {\n        return e25 !== this._objects[t3] && (xe(this._objects, e25), this._objects.splice(t3, 0, e25), this._onStackOrderChanged(e25), true);\n      }\n      findNewLowerIndex(e25, t3, n2) {\n        let r2;\n        if (n2) {\n          r2 = t3;\n          for (let n3 = t3 - 1; n3 >= 0; --n3) if (e25.isOverlapping(this._objects[n3])) {\n            r2 = n3;\n            break;\n          }\n        } else r2 = t3 - 1;\n        return r2;\n      }\n      findNewUpperIndex(e25, t3, n2) {\n        let r2;\n        if (n2) {\n          r2 = t3;\n          for (let n3 = t3 + 1; n3 < this._objects.length; ++n3) if (e25.isOverlapping(this._objects[n3])) {\n            r2 = n3;\n            break;\n          }\n        } else r2 = t3 + 1;\n        return r2;\n      }\n      collectObjects({ left: e25, top: t3, width: n2, height: r2 }, { includeIntersecting: i2 = true } = {}) {\n        let a2 = [], o2 = new N(e25, t3), s3 = o2.add(new N(n2, r2));\n        for (let e26 = this._objects.length - 1; e26 >= 0; e26--) {\n          let t4 = this._objects[e26];\n          t4.selectable && t4.visible && (i2 && t4.intersectsWithRect(o2, s3) || t4.isContainedWithinRect(o2, s3) || i2 && t4.containsPoint(o2) || i2 && t4.containsPoint(s3)) && a2.push(t4);\n        }\n        return a2;\n      }\n    }\n    return t2;\n  }\n  var De = class extends be {\n    _setOptions(e24 = {}) {\n      for (let t2 in e24) this.set(t2, e24[t2]);\n    }\n    _setObject(e24) {\n      for (let t2 in e24) this._set(t2, e24[t2]);\n    }\n    set(e24, t2) {\n      return typeof e24 == `object` ? this._setObject(e24) : this._set(e24, t2), this;\n    }\n    _set(e24, t2) {\n      this[e24] = t2;\n    }\n    toggle(e24) {\n      let t2 = this.get(e24);\n      return typeof t2 == `boolean` && this.set(e24, !t2), this;\n    }\n    get(e24) {\n      return this[e24];\n    }\n  };\n  function Oe(e24) {\n    return _().requestAnimationFrame(e24);\n  }\n  function ke(e24) {\n    return _().cancelAnimationFrame(e24);\n  }\n  var Ae = 0;\n  var je = () => Ae++;\n  var P = () => {\n    let e24 = g().createElement(`canvas`);\n    if (!e24 || e24.getContext === void 0) throw new c(\"Failed to create `canvas` element\");\n    return e24;\n  };\n  var Me = () => g().createElement(`img`);\n  var Ne = (e24) => {\n    var t2;\n    let n2 = F(e24);\n    return (t2 = n2.getContext(`2d`)) == null || t2.drawImage(e24, 0, 0), n2;\n  };\n  var F = (e24) => {\n    let t2 = P();\n    return t2.width = e24.width, t2.height = e24.height, t2;\n  };\n  var Pe = (e24, t2, n2) => e24.toDataURL(`image/${t2}`, n2);\n  var Fe = (e24, t2, n2) => new Promise((r2, i2) => {\n    e24.toBlob(r2, `image/${t2}`, n2);\n  });\n  var I = (e24) => e24 * ee;\n  var Ie = (e24) => e24 / ee;\n  var Le = (e24) => e24.every((e25, t2) => e25 === T[t2]);\n  var L = (e24, t2, n2) => new N(e24).transform(t2, n2);\n  var R = (e24) => {\n    let t2 = 1 / (e24[0] * e24[3] - e24[1] * e24[2]), n2 = [t2 * e24[3], -t2 * e24[1], -t2 * e24[2], t2 * e24[0], 0, 0], { x: r2, y: i2 } = new N(e24[4], e24[5]).transform(n2, true);\n    return n2[4] = -r2, n2[5] = -i2, n2;\n  };\n  var z = (e24, t2, n2) => [e24[0] * t2[0] + e24[2] * t2[1], e24[1] * t2[0] + e24[3] * t2[1], e24[0] * t2[2] + e24[2] * t2[3], e24[1] * t2[2] + e24[3] * t2[3], n2 ? 0 : e24[0] * t2[4] + e24[2] * t2[5] + e24[4], n2 ? 0 : e24[1] * t2[4] + e24[3] * t2[5] + e24[5]];\n  var Re = (e24, t2) => e24.reduceRight((e25, n2) => n2 && e25 ? z(n2, e25, t2) : n2 || e25, void 0) || T.concat();\n  var ze = ([e24, t2]) => Math.atan2(t2, e24);\n  var Be = ([e24, t2]) => Math.sqrt(e24 * e24 + t2 * t2);\n  var Ve = ([, , e24, t2]) => Math.sqrt(e24 * e24 + t2 * t2);\n  var He = (e24) => {\n    let t2 = ze(e24), n2 = e24[0] ** 2 + e24[1] ** 2, r2 = Math.sqrt(n2), i2 = (e24[0] * e24[3] - e24[2] * e24[1]) / r2, a2 = Math.atan2(e24[0] * e24[2] + e24[1] * e24[3], n2);\n    return { angle: Ie(t2), scaleX: r2, scaleY: i2, skewX: Ie(a2), skewY: 0, translateX: e24[4] || 0, translateY: e24[5] || 0 };\n  };\n  var Ue = (e24, t2 = 0) => [1, 0, 0, 1, e24, t2];\n  function We({ angle: e24 = 0 } = {}, { x: t2 = 0, y: n2 = 0 } = {}) {\n    let r2 = I(e24), i2 = Se(r2), a2 = Ce(r2);\n    return [i2, a2, -a2, i2, t2 ? t2 - (i2 * t2 - a2 * n2) : 0, n2 ? n2 - (a2 * t2 + i2 * n2) : 0];\n  }\n  var Ge = (e24, t2 = e24) => [e24, 0, 0, t2, 0, 0];\n  var Ke = (e24) => Math.tan(I(e24));\n  var qe = (e24) => [1, 0, Ke(e24), 1, 0, 0];\n  var Je = (e24) => [1, Ke(e24), 0, 1, 0, 0];\n  var Ye = ({ scaleX: e24 = 1, scaleY: t2 = 1, flipX: n2 = false, flipY: r2 = false, skewX: i2 = 0, skewY: a2 = 0 }) => {\n    let o2 = Ge(n2 ? -e24 : e24, r2 ? -t2 : t2);\n    return i2 && (o2 = z(o2, qe(i2), true)), a2 && (o2 = z(o2, Je(a2), true)), o2;\n  };\n  var Xe = (e24) => {\n    let { translateX: t2 = 0, translateY: n2 = 0, angle: r2 = 0 } = e24, i2 = Ue(t2, n2);\n    r2 && (i2 = z(i2, We({ angle: r2 })));\n    let a2 = Ye(e24);\n    return Le(a2) || (i2 = z(i2, a2)), i2;\n  };\n  var Ze = (e24, { signal: t2, crossOrigin: n2 = null } = {}) => new Promise(function(r2, i2) {\n    if (t2 && t2.aborted) return i2(new l(`loadImage`));\n    let a2 = Me(), o2;\n    t2 && (o2 = function(e25) {\n      a2.src = ``, i2(e25);\n    }, t2.addEventListener(`abort`, o2, { once: true }));\n    let s3 = function() {\n      a2.onload = a2.onerror = null, o2 && (t2 == null || t2.removeEventListener(`abort`, o2)), r2(a2);\n    };\n    e24 ? (a2.onload = s3, a2.onerror = function() {\n      o2 && (t2 == null || t2.removeEventListener(`abort`, o2)), i2(new c(`Error loading ${a2.src}`));\n    }, n2 && (a2.crossOrigin = n2), a2.src = e24) : s3();\n  });\n  var Qe = (e24, { signal: t2, reviver: n2 = x } = {}) => new Promise((r2, i2) => {\n    let a2 = [];\n    t2 && t2.addEventListener(`abort`, i2, { once: true }), Promise.allSettled(e24.map((e25) => M.getClass(e25.type).fromObject(e25, { signal: t2 }))).then(async (t3) => {\n      for (let [r3, i3] of t3.entries()) if (i3.status === `fulfilled` && (await n2(e24[r3], i3.value), a2.push(i3.value)), i3.status === `rejected`) {\n        let t4 = await n2(e24[r3], void 0, i3.reason);\n        t4 && a2.push(t4);\n      }\n      r2(a2);\n    }).catch((e25) => {\n      a2.forEach((e26) => {\n        e26.dispose && e26.dispose();\n      }), i2(e25);\n    }).finally(() => {\n      t2 && t2.removeEventListener(`abort`, i2);\n    });\n  });\n  var $e = (e24, { signal: t2 } = {}) => new Promise((n2, r2) => {\n    let i2 = [];\n    t2 && t2.addEventListener(`abort`, r2, { once: true });\n    let a2 = Object.values(e24).map((e25) => e25 && e25.type && M.has(e25.type) ? Qe([e25], { signal: t2 }).then(([e26]) => (i2.push(e26), e26)) : e25), o2 = Object.keys(e24);\n    Promise.all(a2).then((e25) => e25.reduce((e26, t3, n3) => (e26[o2[n3]] = t3, e26), {})).then(n2).catch((e25) => {\n      i2.forEach((e26) => {\n        e26.dispose && e26.dispose();\n      }), r2(e25);\n    }).finally(() => {\n      t2 && t2.removeEventListener(`abort`, r2);\n    });\n  });\n  var et = (e24, t2 = []) => t2.reduce((t3, n2) => (n2 in e24 && (t3[n2] = e24[n2]), t3), {});\n  var tt = (e24, t2) => Object.keys(e24).reduce((n2, r2) => (t2(e24[r2], r2, e24) && (n2[r2] = e24[r2]), n2), {});\n  var B = (e24, t2) => parseFloat(Number(e24).toFixed(t2));\n  var nt = (e24) => `matrix(` + e24.map((e25) => B(e25, o.NUM_FRACTION_DIGITS)).join(` `) + `)`;\n  var V = (e24) => !!e24 && e24.toLive !== void 0;\n  var rt = (e24) => !!e24 && typeof e24.toObject == `function`;\n  var it = (e24) => !!e24 && e24.offsetX !== void 0 && `source` in e24;\n  var at = (e24) => !!e24 && `multiSelectionStacking` in e24;\n  function ot(e24) {\n    let t2 = e24 && H(e24), n2 = 0, r2 = 0;\n    if (!e24 || !t2) return { left: n2, top: r2 };\n    let i2 = e24, a2 = t2.documentElement, o2 = t2.body || { scrollLeft: 0, scrollTop: 0 };\n    for (; i2 && (i2.parentNode || i2.host) && (i2 = i2.parentNode || i2.host, i2 === t2 ? (n2 = o2.scrollLeft || a2.scrollLeft || 0, r2 = o2.scrollTop || a2.scrollTop || 0) : (n2 += i2.scrollLeft || 0, r2 += i2.scrollTop || 0), i2.nodeType !== 1 || i2.style.position !== `fixed`); ) ;\n    return { left: n2, top: r2 };\n  }\n  var H = (e24) => e24.ownerDocument || null;\n  var st = (e24) => {\n    var t2;\n    return ((t2 = e24.ownerDocument) == null ? void 0 : t2.defaultView) || null;\n  };\n  var ct = (e24, t2, { width: n2, height: r2 }, i2 = 1) => {\n    e24.width = n2, e24.height = r2, i2 > 1 && (e24.setAttribute(`width`, (n2 * i2).toString()), e24.setAttribute(`height`, (r2 * i2).toString()), t2.scale(i2, i2));\n  };\n  var lt = (e24, { width: t2, height: n2 }) => {\n    t2 && (e24.style.width = typeof t2 == `number` ? `${t2}px` : t2), n2 && (e24.style.height = typeof n2 == `number` ? `${n2}px` : n2);\n  };\n  function ut(e24) {\n    return e24.onselectstart !== void 0 && (e24.onselectstart = () => false), e24.style.userSelect = te, e24;\n  }\n  var dt = class {\n    constructor(e24) {\n      i(this, `_originalCanvasStyle`, void 0), i(this, `lower`, void 0);\n      let t2 = this.createLowerCanvas(e24);\n      this.lower = { el: t2, ctx: t2.getContext(`2d`) };\n    }\n    createLowerCanvas(e24) {\n      let t2 = (n2 = e24) && n2.getContext !== void 0 ? e24 : e24 && g().getElementById(e24) || P();\n      var n2;\n      if (t2.hasAttribute(`data-fabric`)) throw new c(`Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?`);\n      return this._originalCanvasStyle = t2.style.cssText, t2.setAttribute(`data-fabric`, `main`), t2.classList.add(`lower-canvas`), t2;\n    }\n    cleanupDOM({ width: e24, height: t2 }) {\n      let { el: n2 } = this.lower;\n      n2.classList.remove(`lower-canvas`), n2.removeAttribute(`data-fabric`), n2.setAttribute(`width`, `${e24}`), n2.setAttribute(`height`, `${t2}`), n2.style.cssText = this._originalCanvasStyle || ``, this._originalCanvasStyle = void 0;\n    }\n    setDimensions(e24, t2) {\n      let { el: n2, ctx: r2 } = this.lower;\n      ct(n2, r2, e24, t2);\n    }\n    setCSSDimensions(e24) {\n      lt(this.lower.el, e24);\n    }\n    calcOffset() {\n      return function(e24) {\n        var t2;\n        let n2 = e24 && H(e24), r2 = { left: 0, top: 0 };\n        if (!n2) return r2;\n        let i2 = ((t2 = st(e24)) == null ? void 0 : t2.getComputedStyle(e24, null)) || {};\n        r2.left += parseInt(i2.borderLeftWidth, 10) || 0, r2.top += parseInt(i2.borderTopWidth, 10) || 0, r2.left += parseInt(i2.paddingLeft, 10) || 0, r2.top += parseInt(i2.paddingTop, 10) || 0;\n        let a2 = { left: 0, top: 0 }, o2 = n2.documentElement;\n        e24.getBoundingClientRect !== void 0 && (a2 = e24.getBoundingClientRect());\n        let s3 = ot(e24);\n        return { left: a2.left + s3.left - (o2.clientLeft || 0) + r2.left, top: a2.top + s3.top - (o2.clientTop || 0) + r2.top };\n      }(this.lower.el);\n    }\n    dispose() {\n      h().dispose(this.lower.el), delete this.lower;\n    }\n  };\n  var ft = { backgroundVpt: true, backgroundColor: ``, overlayVpt: true, overlayColor: ``, includeDefaultValues: true, svgViewportTransformation: true, renderOnAddRemove: true, skipOffscreen: true, enableRetinaScaling: true, imageSmoothingEnabled: true, controlsAboveOverlay: false, allowTouchScrolling: false, viewportTransform: [...T], patternQuality: `best` };\n  var pt = t({ capitalize: () => mt, escapeXml: () => U, graphemeSplit: () => gt });\n  var mt = (e24, t2 = false) => `${e24.charAt(0).toUpperCase()}${t2 ? e24.slice(1) : e24.slice(1).toLowerCase()}`;\n  var U = (e24) => e24.toString().replace(/&/g, `&amp;`).replace(/\"/g, `&quot;`).replace(/'/g, `&apos;`).replace(/</g, `&lt;`).replace(/>/g, `&gt;`);\n  var ht;\n  var gt = (e24) => {\n    if (ht || ht || (ht = `Intl` in _() && `Segmenter` in Intl && new Intl.Segmenter(void 0, { granularity: `grapheme` })), ht) {\n      let t2 = ht.segment(e24);\n      return Array.from(t2).map(({ segment: e25 }) => e25);\n    }\n    return _t(e24);\n  };\n  var _t = (e24) => {\n    let t2 = [];\n    for (let n2, r2 = 0; r2 < e24.length; r2++) false !== (n2 = vt(e24, r2)) && t2.push(n2);\n    return t2;\n  };\n  var vt = (e24, t2) => {\n    let n2 = e24.charCodeAt(t2);\n    if (isNaN(n2)) return ``;\n    if (n2 < 55296 || n2 > 57343) return e24.charAt(t2);\n    if (55296 <= n2 && n2 <= 56319) {\n      if (e24.length <= t2 + 1) throw `High surrogate without following low surrogate`;\n      let n3 = e24.charCodeAt(t2 + 1);\n      if (56320 > n3 || n3 > 57343) throw `High surrogate without following low surrogate`;\n      return e24.charAt(t2) + e24.charAt(t2 + 1);\n    }\n    if (t2 === 0) throw `Low surrogate without preceding high surrogate`;\n    let r2 = e24.charCodeAt(t2 - 1);\n    if (55296 > r2 || r2 > 56319) throw `Low surrogate without preceding high surrogate`;\n    return false;\n  };\n  var yt = class e3 extends Ee(De) {\n    get lowerCanvasEl() {\n      var e24;\n      return (e24 = this.elements.lower) == null ? void 0 : e24.el;\n    }\n    get contextContainer() {\n      var e24;\n      return (e24 = this.elements.lower) == null ? void 0 : e24.ctx;\n    }\n    static getDefaults() {\n      return e3.ownDefaults;\n    }\n    constructor(e24, t2 = {}) {\n      super(), Object.assign(this, this.constructor.getDefaults()), this.set(t2), this.initElements(e24), this._setDimensionsImpl({ width: this.width || this.elements.lower.el.width || 0, height: this.height || this.elements.lower.el.height || 0 }), this.skipControlsDrawing = false, this.viewportTransform = [...this.viewportTransform], this.calcViewportBoundaries();\n    }\n    initElements(e24) {\n      this.elements = new dt(e24);\n    }\n    add(...e24) {\n      let t2 = super.add(...e24);\n      return e24.length > 0 && this.renderOnAddRemove && this.requestRenderAll(), t2;\n    }\n    insertAt(e24, ...t2) {\n      let n2 = super.insertAt(e24, ...t2);\n      return t2.length > 0 && this.renderOnAddRemove && this.requestRenderAll(), n2;\n    }\n    remove(...e24) {\n      let t2 = super.remove(...e24);\n      return t2.length > 0 && this.renderOnAddRemove && this.requestRenderAll(), t2;\n    }\n    _onObjectAdded(e24) {\n      e24.canvas && e24.canvas !== this && (s(`warn`, `Canvas is trying to add an object that belongs to a different canvas.\nResulting to default behavior: removing object from previous canvas and adding to new canvas`), e24.canvas.remove(e24)), e24._set(`canvas`, this), e24.setCoords(), this.fire(`object:added`, { target: e24 }), e24.fire(`added`, { target: this });\n    }\n    _onObjectRemoved(e24) {\n      e24._set(`canvas`, void 0), this.fire(`object:removed`, { target: e24 }), e24.fire(`removed`, { target: this });\n    }\n    _onStackOrderChanged() {\n      this.renderOnAddRemove && this.requestRenderAll();\n    }\n    getRetinaScaling() {\n      return this.enableRetinaScaling ? v() : 1;\n    }\n    calcOffset() {\n      return this._offset = this.elements.calcOffset();\n    }\n    getWidth() {\n      return this.width;\n    }\n    getHeight() {\n      return this.height;\n    }\n    _setDimensionsImpl(e24, { cssOnly: t2 = false, backstoreOnly: n2 = false } = {}) {\n      if (!t2) {\n        let t3 = { width: this.width, height: this.height, ...e24 };\n        this.elements.setDimensions(t3, this.getRetinaScaling()), this.hasLostContext = true, this.width = t3.width, this.height = t3.height;\n      }\n      n2 || this.elements.setCSSDimensions(e24), this.calcOffset();\n    }\n    setDimensions(e24, t2) {\n      this._setDimensionsImpl(e24, t2), t2 && t2.cssOnly || this.requestRenderAll();\n    }\n    getZoom() {\n      return Be(this.viewportTransform);\n    }\n    setViewportTransform(e24) {\n      this.viewportTransform = e24, this.calcViewportBoundaries(), this.renderOnAddRemove && this.requestRenderAll();\n    }\n    zoomToPoint(e24, t2) {\n      let n2 = e24, r2 = [...this.viewportTransform], i2 = L(e24, R(r2));\n      r2[0] = t2, r2[3] = t2;\n      let a2 = L(i2, r2);\n      r2[4] += n2.x - a2.x, r2[5] += n2.y - a2.y, this.setViewportTransform(r2);\n    }\n    setZoom(e24) {\n      this.zoomToPoint(new N(0, 0), e24);\n    }\n    absolutePan(e24) {\n      let t2 = [...this.viewportTransform];\n      return t2[4] = -e24.x, t2[5] = -e24.y, this.setViewportTransform(t2);\n    }\n    relativePan(e24) {\n      return this.absolutePan(new N(-e24.x - this.viewportTransform[4], -e24.y - this.viewportTransform[5]));\n    }\n    getElement() {\n      return this.elements.lower.el;\n    }\n    clearContext(e24) {\n      e24.clearRect(0, 0, this.width, this.height);\n    }\n    getContext() {\n      return this.elements.lower.ctx;\n    }\n    clear() {\n      this.remove(...this.getObjects()), this.backgroundImage = void 0, this.overlayImage = void 0, this.backgroundColor = ``, this.overlayColor = ``, this.clearContext(this.getContext()), this.fire(`canvas:cleared`), this.renderOnAddRemove && this.requestRenderAll();\n    }\n    renderAll() {\n      this.cancelRequestedRender(), this.destroyed || this.renderCanvas(this.getContext(), this._objects);\n    }\n    renderAndReset() {\n      this.nextRenderHandle = 0, this.renderAll();\n    }\n    requestRenderAll() {\n      this.nextRenderHandle || this.disposed || this.destroyed || (this.nextRenderHandle = Oe(() => this.renderAndReset()));\n    }\n    calcViewportBoundaries() {\n      let e24 = this.width, t2 = this.height, n2 = R(this.viewportTransform), r2 = L({ x: 0, y: 0 }, n2), i2 = L({ x: e24, y: t2 }, n2), a2 = r2.min(i2), o2 = r2.max(i2);\n      return this.vptCoords = { tl: a2, tr: new N(o2.x, a2.y), bl: new N(a2.x, o2.y), br: o2 };\n    }\n    cancelRequestedRender() {\n      this.nextRenderHandle && (ke(this.nextRenderHandle), this.nextRenderHandle = 0);\n    }\n    drawControls(e24) {\n    }\n    renderCanvas(e24, t2) {\n      if (this.destroyed) return;\n      let n2 = this.viewportTransform, r2 = this.clipPath;\n      this.calcViewportBoundaries(), this.clearContext(e24), e24.imageSmoothingEnabled = this.imageSmoothingEnabled, e24.patternQuality = this.patternQuality, this.fire(`before:render`, { ctx: e24 }), this._renderBackground(e24), e24.save(), e24.transform(n2[0], n2[1], n2[2], n2[3], n2[4], n2[5]), this._renderObjects(e24, t2), e24.restore(), this.controlsAboveOverlay || this.skipControlsDrawing || this.drawControls(e24), r2 && (r2._set(`canvas`, this), r2.shouldCache(), r2._transformDone = true, r2.renderCache({ forClipping: true }), this.drawClipPathOnCanvas(e24, r2)), this._renderOverlay(e24), this.controlsAboveOverlay && !this.skipControlsDrawing && this.drawControls(e24), this.fire(`after:render`, { ctx: e24 }), this.__cleanupTask && (this.__cleanupTask(), this.__cleanupTask = void 0);\n    }\n    drawClipPathOnCanvas(e24, t2) {\n      let n2 = this.viewportTransform;\n      e24.save(), e24.transform(...n2), e24.globalCompositeOperation = `destination-in`, t2.transform(e24), e24.scale(1 / t2.zoomX, 1 / t2.zoomY), e24.drawImage(t2._cacheCanvas, -t2.cacheTranslationX, -t2.cacheTranslationY), e24.restore();\n    }\n    _renderObjects(e24, t2) {\n      for (let n2 = 0, r2 = t2.length; n2 < r2; ++n2) t2[n2] && t2[n2].render(e24);\n    }\n    _renderBackgroundOrOverlay(e24, t2) {\n      let n2 = this[`${t2}Color`], r2 = this[`${t2}Image`], i2 = this.viewportTransform, a2 = this[`${t2}Vpt`];\n      if (!n2 && !r2) return;\n      let o2 = V(n2);\n      if (n2) {\n        if (e24.save(), e24.beginPath(), e24.moveTo(0, 0), e24.lineTo(this.width, 0), e24.lineTo(this.width, this.height), e24.lineTo(0, this.height), e24.closePath(), e24.fillStyle = o2 ? n2.toLive(e24) : n2, a2 && e24.transform(...i2), o2) {\n          e24.transform(1, 0, 0, 1, n2.offsetX || 0, n2.offsetY || 0);\n          let t3 = n2.gradientTransform || n2.patternTransform;\n          t3 && e24.transform(...t3);\n        }\n        e24.fill(), e24.restore();\n      }\n      if (r2) {\n        e24.save();\n        let { skipOffscreen: t3 } = this;\n        this.skipOffscreen = a2, a2 && e24.transform(...i2), r2.render(e24), this.skipOffscreen = t3, e24.restore();\n      }\n    }\n    _renderBackground(e24) {\n      this._renderBackgroundOrOverlay(e24, `background`);\n    }\n    _renderOverlay(e24) {\n      this._renderBackgroundOrOverlay(e24, `overlay`);\n    }\n    getCenterPoint() {\n      return new N(this.width / 2, this.height / 2);\n    }\n    centerObjectH(e24) {\n      return this._centerObject(e24, new N(this.getCenterPoint().x, e24.getCenterPoint().y));\n    }\n    centerObjectV(e24) {\n      return this._centerObject(e24, new N(e24.getCenterPoint().x, this.getCenterPoint().y));\n    }\n    centerObject(e24) {\n      return this._centerObject(e24, this.getCenterPoint());\n    }\n    viewportCenterObject(e24) {\n      return this._centerObject(e24, this.getVpCenter());\n    }\n    viewportCenterObjectH(e24) {\n      return this._centerObject(e24, new N(this.getVpCenter().x, e24.getCenterPoint().y));\n    }\n    viewportCenterObjectV(e24) {\n      return this._centerObject(e24, new N(e24.getCenterPoint().x, this.getVpCenter().y));\n    }\n    getVpCenter() {\n      return L(this.getCenterPoint(), R(this.viewportTransform));\n    }\n    _centerObject(e24, t2) {\n      e24.setXY(t2, E, E), e24.setCoords(), this.renderOnAddRemove && this.requestRenderAll();\n    }\n    toDatalessJSON(e24) {\n      return this.toDatalessObject(e24);\n    }\n    toObject(e24) {\n      return this._toObjectMethod(`toObject`, e24);\n    }\n    toJSON() {\n      return this.toObject();\n    }\n    toDatalessObject(e24) {\n      return this._toObjectMethod(`toDatalessObject`, e24);\n    }\n    _toObjectMethod(e24, t2) {\n      let n2 = this.clipPath, r2 = n2 && !n2.excludeFromExport ? this._toObject(n2, e24, t2) : null;\n      return { version: b, ...et(this, t2), objects: this._objects.filter((e25) => !e25.excludeFromExport).map((n3) => this._toObject(n3, e24, t2)), ...this.__serializeBgOverlay(e24, t2), ...r2 ? { clipPath: r2 } : null };\n    }\n    _toObject(e24, t2, n2) {\n      let r2;\n      this.includeDefaultValues || (r2 = e24.includeDefaultValues, e24.includeDefaultValues = false);\n      let i2 = e24[t2](n2);\n      return this.includeDefaultValues || (e24.includeDefaultValues = !!r2), i2;\n    }\n    __serializeBgOverlay(e24, t2) {\n      let n2 = {}, r2 = this.backgroundImage, i2 = this.overlayImage, a2 = this.backgroundColor, o2 = this.overlayColor;\n      return V(a2) ? a2.excludeFromExport || (n2.background = a2.toObject(t2)) : a2 && (n2.background = a2), V(o2) ? o2.excludeFromExport || (n2.overlay = o2.toObject(t2)) : o2 && (n2.overlay = o2), r2 && !r2.excludeFromExport && (n2.backgroundImage = this._toObject(r2, e24, t2)), i2 && !i2.excludeFromExport && (n2.overlayImage = this._toObject(i2, e24, t2)), n2;\n    }\n    toSVG(e24 = {}, t2) {\n      e24.reviver = t2;\n      let n2 = [];\n      var r2;\n      return (this._setSVGPreamble(n2, e24), this._setSVGHeader(n2, e24), this.clipPath) && n2.push(`<g clip-path=\"url(#${U((r2 = this.clipPath.clipPathId) == null ? `` : r2)})\" >\n`), this._setSVGBgOverlayColor(n2, `background`), this._setSVGBgOverlayImage(n2, `backgroundImage`, t2), this._setSVGObjects(n2, t2), this.clipPath && n2.push(`</g>\n`), this._setSVGBgOverlayColor(n2, `overlay`), this._setSVGBgOverlayImage(n2, `overlayImage`, t2), n2.push(`</svg>`), n2.join(``);\n    }\n    _setSVGPreamble(e24, t2) {\n      t2.suppressPreamble || e24.push(`<?xml version=\"1.0\" encoding=\"`, t2.encoding || `UTF-8`, `\" standalone=\"no\" ?>\n`, `<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" `, `\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n`);\n    }\n    _setSVGHeader(e24, t2) {\n      let n2 = t2.width || `${this.width}`, r2 = t2.height || `${this.height}`, i2 = o.NUM_FRACTION_DIGITS, a2 = t2.viewBox, s3;\n      if (a2) s3 = `viewBox=\"${a2.x} ${a2.y} ${a2.width} ${a2.height}\" `;\n      else if (this.svgViewportTransformation) {\n        let e25 = this.viewportTransform;\n        s3 = `viewBox=\"${B(-e25[4] / e25[0], i2)} ${B(-e25[5] / e25[3], i2)} ${B(this.width / e25[0], i2)} ${B(this.height / e25[3], i2)}\" `;\n      } else s3 = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n      e24.push(`<svg `, `xmlns=\"http://www.w3.org/2000/svg\" `, `xmlns:xlink=\"http://www.w3.org/1999/xlink\" `, `version=\"1.1\" `, `width=\"`, n2, `\" `, `height=\"`, r2, `\" `, s3, `xml:space=\"preserve\">\n`, `<desc>Created with Fabric.js `, b, `</desc>\n`, `<defs>\n`, this.createSVGFontFacesMarkup(), this.createSVGRefElementsMarkup(), this.createSVGClipPathMarkup(t2), `</defs>\n`);\n    }\n    createSVGClipPathMarkup(e24) {\n      let t2 = this.clipPath;\n      return t2 ? (t2.clipPathId = `CLIPPATH_${je()}`, `<clipPath id=\"${t2.clipPathId}\" >\n${t2.toClipPathSVG(e24.reviver)}</clipPath>\n`) : ``;\n    }\n    createSVGRefElementsMarkup() {\n      return [`background`, `overlay`].map((e24) => {\n        let t2 = this[`${e24}Color`];\n        if (V(t2)) {\n          let n2 = this[`${e24}Vpt`], r2 = this.viewportTransform, i2 = { isType: () => false, width: this.width / (n2 ? r2[0] : 1), height: this.height / (n2 ? r2[3] : 1) };\n          return t2.toSVG(i2, { additionalTransform: n2 ? nt(r2) : `` });\n        }\n      }).join(``);\n    }\n    createSVGFontFacesMarkup() {\n      let e24 = [], t2 = {}, n2 = o.fontPaths;\n      this._objects.forEach(function t3(n3) {\n        e24.push(n3), Te(n3) && n3._objects.forEach(t3);\n      }), e24.forEach((e25) => {\n        if (!(r3 = e25) || typeof r3._renderText != `function`) return;\n        var r3;\n        let { styles: i2, fontFamily: a2 } = e25;\n        !t2[a2] && n2[a2] && (t2[a2] = true, i2 && Object.values(i2).forEach((e26) => {\n          Object.values(e26).forEach(({ fontFamily: e27 = `` }) => {\n            !t2[e27] && n2[e27] && (t2[e27] = true);\n          });\n        }));\n      });\n      let r2 = Object.keys(t2).map((e25) => `\t\t@font-face {\n\t\t\tfont-family: '${e25}';\n\t\t\tsrc: url('${n2[e25]}');\n\t\t}\n`).join(``);\n      return r2 ? `\t<style type=\"text/css\"><![CDATA[\n${r2}]]></style>\n` : ``;\n    }\n    _setSVGObjects(e24, t2) {\n      this.forEachObject((n2) => {\n        n2.excludeFromExport || this._setSVGObject(e24, n2, t2);\n      });\n    }\n    _setSVGObject(e24, t2, n2) {\n      e24.push(t2.toSVG(n2));\n    }\n    _setSVGBgOverlayImage(e24, t2, n2) {\n      let r2 = this[t2];\n      r2 && !r2.excludeFromExport && r2.toSVG && e24.push(r2.toSVG(n2));\n    }\n    _setSVGBgOverlayColor(e24, t2) {\n      let n2 = this[`${t2}Color`];\n      if (n2) if (V(n2)) {\n        let r2 = n2.repeat || ``, i2 = this.width, a2 = this.height, o2 = this[`${t2}Vpt`] ? nt(R(this.viewportTransform)) : ``;\n        e24.push(`<rect transform=\"${o2} translate(${i2 / 2},${a2 / 2})\" x=\"${n2.offsetX - i2 / 2}\" y=\"${n2.offsetY - a2 / 2}\" width=\"${r2 !== `repeat-y` && r2 !== `no-repeat` || !it(n2) ? i2 : n2.source.width}\" height=\"${r2 !== `repeat-x` && r2 !== `no-repeat` || !it(n2) ? a2 : n2.source.height}\" fill=\"url(#SVGID_${n2.id})\"></rect>\n`);\n      } else e24.push(`<rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" `, `fill=\"`, n2, `\"`, `></rect>\n`);\n    }\n    loadFromJSON(e24, t2, { signal: n2 } = {}) {\n      if (!e24) return Promise.reject(new c(\"`json` is undefined\"));\n      let { objects: r2 = [], ...i2 } = typeof e24 == `string` ? JSON.parse(e24) : e24, { backgroundImage: a2, background: o2, overlayImage: s3, overlay: l2, clipPath: u2 } = i2, d2 = this.renderOnAddRemove;\n      return this.renderOnAddRemove = false, Promise.all([Qe(r2, { reviver: t2, signal: n2 }), $e({ backgroundImage: a2, backgroundColor: o2, overlayImage: s3, overlayColor: l2, clipPath: u2 }, { signal: n2 })]).then(([e25, t3]) => (this.clear(), this.add(...e25), this.set(i2), this.set(t3), this.renderOnAddRemove = d2, this));\n    }\n    clone(e24) {\n      let t2 = this.toObject(e24);\n      return this.cloneWithoutData().loadFromJSON(t2);\n    }\n    cloneWithoutData() {\n      let e24 = F(this);\n      return new this.constructor(e24);\n    }\n    toDataURL(e24 = {}) {\n      let { format: t2 = `png`, quality: n2 = 1, multiplier: r2 = 1, enableRetinaScaling: i2 = false } = e24, a2 = r2 * (i2 ? this.getRetinaScaling() : 1);\n      return Pe(this.toCanvasElement(a2, e24), t2, n2);\n    }\n    toBlob(e24 = {}) {\n      let { format: t2 = `png`, quality: n2 = 1, multiplier: r2 = 1, enableRetinaScaling: i2 = false } = e24, a2 = r2 * (i2 ? this.getRetinaScaling() : 1);\n      return Fe(this.toCanvasElement(a2, e24), t2, n2);\n    }\n    toCanvasElement(e24 = 1, { width: t2, height: n2, left: r2, top: i2, filter: a2 } = {}) {\n      let o2 = (t2 || this.width) * e24, s3 = (n2 || this.height) * e24, c2 = this.getZoom(), l2 = this.width, u2 = this.height, d2 = this.skipControlsDrawing, f2 = c2 * e24, p2 = this.viewportTransform, m = [f2, 0, 0, f2, (p2[4] - (r2 || 0)) * e24, (p2[5] - (i2 || 0)) * e24], h2 = this.enableRetinaScaling, g2 = F({ width: o2, height: s3 }), _2 = a2 ? this._objects.filter((e25) => a2(e25)) : this._objects;\n      return this.enableRetinaScaling = false, this.viewportTransform = m, this.width = o2, this.height = s3, this.skipControlsDrawing = true, this.calcViewportBoundaries(), this.renderCanvas(g2.getContext(`2d`), _2), this.viewportTransform = p2, this.width = l2, this.height = u2, this.calcViewportBoundaries(), this.enableRetinaScaling = h2, this.skipControlsDrawing = d2, g2;\n    }\n    dispose() {\n      return !this.disposed && this.elements.cleanupDOM({ width: this.width, height: this.height }), ye.cancelByCanvas(this), this.disposed = true, new Promise((e24, t2) => {\n        let n2 = () => {\n          this.destroy(), e24(true);\n        };\n        n2.kill = t2, this.__cleanupTask && this.__cleanupTask.kill(`aborted`), this.destroyed ? e24(false) : this.nextRenderHandle ? this.__cleanupTask = n2 : n2();\n      });\n    }\n    destroy() {\n      this.destroyed = true, this.cancelRequestedRender(), this.forEachObject((e24) => e24.dispose()), this._objects = [], this.backgroundImage && this.backgroundImage.dispose(), this.backgroundImage = void 0, this.overlayImage && this.overlayImage.dispose(), this.overlayImage = void 0, this.elements.dispose();\n    }\n    toString() {\n      return `#<Canvas (${this.complexity()}): { objects: ${this._objects.length} }>`;\n    }\n  };\n  i(yt, `ownDefaults`, ft);\n  var bt = [`touchstart`, `touchmove`, `touchend`];\n  var xt = (e24) => {\n    let t2 = ot(e24.target), n2 = function(e25) {\n      let t3 = e25.changedTouches;\n      return t3 && t3[0] ? t3[0] : e25;\n    }(e24);\n    return new N(n2.clientX + t2.left, n2.clientY + t2.top);\n  };\n  var St = (e24) => bt.includes(e24.type) || e24.pointerType === `touch`;\n  var Ct = (e24) => {\n    e24.preventDefault(), e24.stopPropagation();\n  };\n  var wt = (e24) => {\n    let t2 = 0, n2 = 0, r2 = 0, i2 = 0;\n    for (let a2 = 0, o2 = e24.length; a2 < o2; a2++) {\n      let { x: o3, y: s3 } = e24[a2];\n      (o3 > r2 || !a2) && (r2 = o3), (o3 < t2 || !a2) && (t2 = o3), (s3 > i2 || !a2) && (i2 = s3), (s3 < n2 || !a2) && (n2 = s3);\n    }\n    return { left: t2, top: n2, width: r2 - t2, height: i2 - n2 };\n  };\n  var Tt = (e24, t2) => {\n    Dt(e24, z(R(t2), e24.calcOwnMatrix()));\n  };\n  var Et = (e24, t2) => Dt(e24, z(t2, e24.calcOwnMatrix()));\n  var Dt = (e24, t2) => {\n    let { translateX: n2, translateY: r2, scaleX: i2, scaleY: a2, ...o2 } = He(t2), s3 = new N(n2, r2);\n    e24.flipX = false, e24.flipY = false, Object.assign(e24, o2), e24.set({ scaleX: i2, scaleY: a2 }), e24.setPositionByOrigin(s3, E, E);\n  };\n  var Ot = (e24) => {\n    e24.scaleX = 1, e24.scaleY = 1, e24.skewX = 0, e24.skewY = 0, e24.flipX = false, e24.flipY = false, e24.rotate(0);\n  };\n  var kt = (e24) => ({ scaleX: e24.scaleX, scaleY: e24.scaleY, skewX: e24.skewX, skewY: e24.skewY, angle: e24.angle, left: e24.left, flipX: e24.flipX, flipY: e24.flipY, top: e24.top });\n  var At = (e24, t2, n2) => {\n    let r2 = e24 / 2, i2 = t2 / 2, a2 = wt([new N(-r2, -i2), new N(r2, -i2), new N(-r2, i2), new N(r2, i2)].map((e25) => e25.transform(n2)));\n    return new N(a2.width, a2.height);\n  };\n  var jt = (e24 = T, t2 = T) => z(R(t2), e24);\n  var Mt = (e24, t2 = T, n2 = T) => e24.transform(jt(t2, n2));\n  var Nt = (e24, t2 = T, n2 = T) => e24.transform(jt(t2, n2), true);\n  var Pt = (e24, t2, n2) => {\n    let r2 = jt(t2, n2);\n    return Dt(e24, z(r2, e24.calcOwnMatrix())), r2;\n  };\n  var Ft = { left: -0.5, top: -0.5, center: 0, bottom: 0.5, right: 0.5 };\n  var W = (e24) => typeof e24 == `string` ? Ft[e24] : e24 - 0.5;\n  var It = new N(1, 0);\n  var Lt = new N();\n  var Rt = (e24, t2) => e24.rotate(t2);\n  var zt = (e24, t2) => new N(t2).subtract(e24);\n  var Bt = (e24) => e24.distanceFrom(Lt);\n  var Vt = (e24, t2) => Math.atan2(Gt(e24, t2), Kt(e24, t2));\n  var Ht = (e24) => Vt(It, e24);\n  var Ut = (e24) => e24.eq(Lt) ? e24 : e24.scalarDivide(Bt(e24));\n  var Wt = (e24, t2 = true) => Ut(new N(-e24.y, e24.x).scalarMultiply(t2 ? 1 : -1));\n  var Gt = (e24, t2) => e24.x * t2.y - e24.y * t2.x;\n  var Kt = (e24, t2) => e24.x * t2.x + e24.y * t2.y;\n  var qt = (e24, t2, n2) => {\n    if (e24.eq(t2) || e24.eq(n2)) return true;\n    let r2 = Gt(t2, n2), i2 = Gt(t2, e24), a2 = Gt(n2, e24);\n    return r2 >= 0 ? i2 >= 0 && a2 <= 0 : !(i2 <= 0 && a2 >= 0);\n  };\n  var Jt = `not-allowed`;\n  function Yt(e24) {\n    return W(e24.originX) === W(`center`) && W(e24.originY) === W(`center`);\n  }\n  function Xt(e24) {\n    return 0.5 - W(e24);\n  }\n  var Zt = (e24, t2) => e24[t2];\n  var Qt = (e24, t2, n2, r2) => ({ e: e24, transform: t2, pointer: new N(n2, r2) });\n  function $t(e24, t2, n2) {\n    let r2 = n2, i2 = Ht(zt(Mt(e24.getCenterPoint(), e24.canvas.viewportTransform, void 0), r2)) + w;\n    return Math.round(i2 % w / C);\n  }\n  function en({ target: e24, corner: t2 }, n2, r2, i2, a2) {\n    var o2;\n    let s3 = e24.controls[t2], c2 = ((o2 = e24.canvas) == null ? void 0 : o2.getZoom()) || 1, l2 = e24.padding / c2, u2 = function(e25, t3, n3, r3) {\n      let i3 = e25.getRelativeCenterPoint(), a3 = n3 !== void 0 && r3 !== void 0 ? e25.translateToGivenOrigin(i3, E, E, n3, r3) : new N(e25.left, e25.top);\n      return (e25.angle ? t3.rotate(-I(e25.angle), i3) : t3).subtract(a3);\n    }(e24, new N(i2, a2), n2, r2);\n    return u2.x >= l2 && (u2.x -= l2), u2.x <= -l2 && (u2.x += l2), u2.y >= l2 && (u2.y -= l2), u2.y <= l2 && (u2.y += l2), u2.x -= s3.offsetX, u2.y -= s3.offsetY, u2;\n  }\n  var tn = new RegExp(String.raw`[\\0-\\x1F\\x7F;<>\\\\]|\\/\\*|\\*\\/|url\\s*\\(|expression\\s*\\(|(?:java|vb)script\\s*:|data\\s*:|@import\\b`, `iu`);\n  var nn = (e24) => typeof e24 == `string` && e24.trim().length > 0 && !tn.test(e24);\n  var rn = (e24, t2 = ``) => {\n    let n2 = Number(e24);\n    return Number.isFinite(n2) ? `${n2}` : t2;\n  };\n  var an = (e24, t2 = ``) => typeof e24 == `string` && nn(e24) ? e24 : t2;\n  var on = (e24) => e24.replace(/\\s+/g, ` `);\n  var sn = { aliceblue: `#F0F8FF`, antiquewhite: `#FAEBD7`, aqua: `#0FF`, aquamarine: `#7FFFD4`, azure: `#F0FFFF`, beige: `#F5F5DC`, bisque: `#FFE4C4`, black: `#000`, blanchedalmond: `#FFEBCD`, blue: `#00F`, blueviolet: `#8A2BE2`, brown: `#A52A2A`, burlywood: `#DEB887`, cadetblue: `#5F9EA0`, chartreuse: `#7FFF00`, chocolate: `#D2691E`, coral: `#FF7F50`, cornflowerblue: `#6495ED`, cornsilk: `#FFF8DC`, crimson: `#DC143C`, cyan: `#0FF`, darkblue: `#00008B`, darkcyan: `#008B8B`, darkgoldenrod: `#B8860B`, darkgray: `#A9A9A9`, darkgrey: `#A9A9A9`, darkgreen: `#006400`, darkkhaki: `#BDB76B`, darkmagenta: `#8B008B`, darkolivegreen: `#556B2F`, darkorange: `#FF8C00`, darkorchid: `#9932CC`, darkred: `#8B0000`, darksalmon: `#E9967A`, darkseagreen: `#8FBC8F`, darkslateblue: `#483D8B`, darkslategray: `#2F4F4F`, darkslategrey: `#2F4F4F`, darkturquoise: `#00CED1`, darkviolet: `#9400D3`, deeppink: `#FF1493`, deepskyblue: `#00BFFF`, dimgray: `#696969`, dimgrey: `#696969`, dodgerblue: `#1E90FF`, firebrick: `#B22222`, floralwhite: `#FFFAF0`, forestgreen: `#228B22`, fuchsia: `#F0F`, gainsboro: `#DCDCDC`, ghostwhite: `#F8F8FF`, gold: `#FFD700`, goldenrod: `#DAA520`, gray: `#808080`, grey: `#808080`, green: `#008000`, greenyellow: `#ADFF2F`, honeydew: `#F0FFF0`, hotpink: `#FF69B4`, indianred: `#CD5C5C`, indigo: `#4B0082`, ivory: `#FFFFF0`, khaki: `#F0E68C`, lavender: `#E6E6FA`, lavenderblush: `#FFF0F5`, lawngreen: `#7CFC00`, lemonchiffon: `#FFFACD`, lightblue: `#ADD8E6`, lightcoral: `#F08080`, lightcyan: `#E0FFFF`, lightgoldenrodyellow: `#FAFAD2`, lightgray: `#D3D3D3`, lightgrey: `#D3D3D3`, lightgreen: `#90EE90`, lightpink: `#FFB6C1`, lightsalmon: `#FFA07A`, lightseagreen: `#20B2AA`, lightskyblue: `#87CEFA`, lightslategray: `#789`, lightslategrey: `#789`, lightsteelblue: `#B0C4DE`, lightyellow: `#FFFFE0`, lime: `#0F0`, limegreen: `#32CD32`, linen: `#FAF0E6`, magenta: `#F0F`, maroon: `#800000`, mediumaquamarine: `#66CDAA`, mediumblue: `#0000CD`, mediumorchid: `#BA55D3`, mediumpurple: `#9370DB`, mediumseagreen: `#3CB371`, mediumslateblue: `#7B68EE`, mediumspringgreen: `#00FA9A`, mediumturquoise: `#48D1CC`, mediumvioletred: `#C71585`, midnightblue: `#191970`, mintcream: `#F5FFFA`, mistyrose: `#FFE4E1`, moccasin: `#FFE4B5`, navajowhite: `#FFDEAD`, navy: `#000080`, oldlace: `#FDF5E6`, olive: `#808000`, olivedrab: `#6B8E23`, orange: `#FFA500`, orangered: `#FF4500`, orchid: `#DA70D6`, palegoldenrod: `#EEE8AA`, palegreen: `#98FB98`, paleturquoise: `#AFEEEE`, palevioletred: `#DB7093`, papayawhip: `#FFEFD5`, peachpuff: `#FFDAB9`, peru: `#CD853F`, pink: `#FFC0CB`, plum: `#DDA0DD`, powderblue: `#B0E0E6`, purple: `#800080`, rebeccapurple: `#639`, red: `#F00`, rosybrown: `#BC8F8F`, royalblue: `#4169E1`, saddlebrown: `#8B4513`, salmon: `#FA8072`, sandybrown: `#F4A460`, seagreen: `#2E8B57`, seashell: `#FFF5EE`, sienna: `#A0522D`, silver: `#C0C0C0`, skyblue: `#87CEEB`, slateblue: `#6A5ACD`, slategray: `#708090`, slategrey: `#708090`, snow: `#FFFAFA`, springgreen: `#00FF7F`, steelblue: `#4682B4`, tan: `#D2B48C`, teal: `#008080`, thistle: `#D8BFD8`, tomato: `#FF6347`, turquoise: `#40E0D0`, violet: `#EE82EE`, wheat: `#F5DEB3`, white: `#FFF`, whitesmoke: `#F5F5F5`, yellow: `#FF0`, yellowgreen: `#9ACD32` };\n  var cn = (e24, t2, n2) => (n2 < 0 && (n2 += 1), n2 > 1 && --n2, n2 < 1 / 6 ? e24 + 6 * (t2 - e24) * n2 : n2 < 0.5 ? t2 : n2 < 2 / 3 ? e24 + (t2 - e24) * (2 / 3 - n2) * 6 : e24);\n  var ln = (e24, t2, n2, r2) => {\n    e24 /= 255, t2 /= 255, n2 /= 255;\n    let i2 = Math.max(e24, t2, n2), a2 = Math.min(e24, t2, n2), o2, s3, c2 = (i2 + a2) / 2;\n    if (i2 === a2) o2 = s3 = 0;\n    else {\n      let r3 = i2 - a2;\n      switch (s3 = c2 > 0.5 ? r3 / (2 - i2 - a2) : r3 / (i2 + a2), i2) {\n        case e24:\n          o2 = (t2 - n2) / r3 + (t2 < n2 ? 6 : 0);\n          break;\n        case t2:\n          o2 = (n2 - e24) / r3 + 2;\n          break;\n        case n2:\n          o2 = (e24 - t2) / r3 + 4;\n      }\n      o2 /= 6;\n    }\n    return [Math.round(360 * o2), Math.round(100 * s3), Math.round(100 * c2), r2];\n  };\n  var un = (e24 = `1`) => parseFloat(e24) / (e24.endsWith(`%`) ? 100 : 1);\n  var dn = (e24) => Math.min(Math.round(e24), 255).toString(16).toUpperCase().padStart(2, `0`);\n  var fn = ([e24, t2, n2, r2 = 1]) => {\n    let i2 = Math.round(0.3 * e24 + 0.59 * t2 + 0.11 * n2);\n    return [i2, i2, i2, r2];\n  };\n  var G = class e4 {\n    constructor(t2) {\n      if (i(this, `isUnrecognised`, false), t2) if (t2 instanceof e4) this.setSource([...t2._source]);\n      else if (Array.isArray(t2)) {\n        let [e24, n2, r2, i2 = 1] = t2;\n        this.setSource([e24, n2, r2, i2]);\n      } else this.setSource(this._tryParsingColor(t2));\n      else this.setSource([0, 0, 0, 1]);\n    }\n    _tryParsingColor(t2) {\n      return (t2 = t2.toLowerCase()) in sn && (t2 = sn[t2]), t2 === `transparent` ? [255, 255, 255, 0] : e4.sourceFromHex(t2) || e4.sourceFromRgb(t2) || e4.sourceFromHsl(t2) || (this.isUnrecognised = true) && [0, 0, 0, 1];\n    }\n    getSource() {\n      return this._source;\n    }\n    setSource(e24) {\n      this._source = e24;\n    }\n    toRgb() {\n      let [e24, t2, n2] = this.getSource();\n      return `rgb(${e24},${t2},${n2})`;\n    }\n    toRgba() {\n      return `rgba(${this.getSource().join(`,`)})`;\n    }\n    toHsl() {\n      let [e24, t2, n2] = ln(...this.getSource());\n      return `hsl(${e24},${t2}%,${n2}%)`;\n    }\n    toHsla() {\n      let [e24, t2, n2, r2] = ln(...this.getSource());\n      return `hsla(${e24},${t2}%,${n2}%,${r2})`;\n    }\n    toHex() {\n      return this.toHexa().slice(0, 6);\n    }\n    toHexa() {\n      let [e24, t2, n2, r2] = this.getSource();\n      return `${dn(e24)}${dn(t2)}${dn(n2)}${dn(Math.round(255 * r2))}`;\n    }\n    getAlpha() {\n      return this.getSource()[3];\n    }\n    setAlpha(e24) {\n      return this._source[3] = e24, this;\n    }\n    toGrayscale() {\n      return this.setSource(fn(this.getSource())), this;\n    }\n    toBlackWhite(e24) {\n      let [t2, , , n2] = fn(this.getSource()), r2 = t2 < (e24 || 127) ? 0 : 255;\n      return this.setSource([r2, r2, r2, n2]), this;\n    }\n    overlayWith(t2) {\n      t2 instanceof e4 || (t2 = new e4(t2));\n      let n2 = this.getSource(), r2 = t2.getSource(), [i2, a2, o2] = n2.map((e24, t3) => Math.round(0.5 * e24 + 0.5 * r2[t3]));\n      return this.setSource([i2, a2, o2, n2[3]]), this;\n    }\n    static fromRgb(t2) {\n      return e4.fromRgba(t2);\n    }\n    static fromRgba(t2) {\n      return new e4(e4.sourceFromRgb(t2));\n    }\n    static sourceFromRgb(e24) {\n      let t2 = on(e24).match(/^rgba?\\(\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?[\\s|,]\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?[\\s|,]\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?(?:\\s?[,/]\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?)?\\)$/i);\n      if (t2) {\n        let [e25, n2, r2] = t2.slice(1, 4).map((e26) => {\n          let t3 = parseFloat(e26);\n          return e26.endsWith(`%`) ? Math.round(2.55 * t3) : t3;\n        });\n        return [e25, n2, r2, un(t2[4])];\n      }\n    }\n    static fromHsl(t2) {\n      return e4.fromHsla(t2);\n    }\n    static fromHsla(t2) {\n      return new e4(e4.sourceFromHsl(t2));\n    }\n    static sourceFromHsl(t2) {\n      let n2 = on(t2).match(/^hsla?\\(\\s?([+-]?\\d{0,3}(?:\\.\\d+)?(?:deg|turn|rad)?)\\s?[\\s|,]\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?[\\s|,]\\s?(\\d{0,3}(?:\\.\\d+)?%?)\\s?(?:\\s?[,/]\\s?(\\d*(?:\\.\\d+)?%?)\\s?)?\\)$/i);\n      if (!n2) return;\n      let r2 = (e4.parseAngletoDegrees(n2[1]) % 360 + 360) % 360 / 360, i2 = parseFloat(n2[2]) / 100, a2 = parseFloat(n2[3]) / 100, o2, s3, c2;\n      if (i2 === 0) o2 = s3 = c2 = a2;\n      else {\n        let e24 = a2 <= 0.5 ? a2 * (i2 + 1) : a2 + i2 - a2 * i2, t3 = 2 * a2 - e24;\n        o2 = cn(t3, e24, r2 + 1 / 3), s3 = cn(t3, e24, r2), c2 = cn(t3, e24, r2 - 1 / 3);\n      }\n      return [Math.round(255 * o2), Math.round(255 * s3), Math.round(255 * c2), un(n2[4])];\n    }\n    static fromHex(t2) {\n      return new e4(e4.sourceFromHex(t2));\n    }\n    static sourceFromHex(e24) {\n      if (e24.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)) {\n        let t2 = e24.slice(e24.indexOf(`#`) + 1), n2;\n        n2 = t2.length <= 4 ? t2.split(``).map((e25) => e25 + e25) : t2.match(/.{2}/g);\n        let [r2, i2, a2, o2 = 255] = n2.map((e25) => parseInt(e25, 16));\n        return [r2, i2, a2, o2 / 255];\n      }\n    }\n    static parseAngletoDegrees(e24) {\n      let t2 = e24.toLowerCase(), n2 = parseFloat(t2);\n      return t2.includes(`rad`) ? Ie(n2) : t2.includes(`turn`) ? 360 * n2 : n2;\n    }\n  };\n  var pn = (e24) => {\n    let t2 = [`instantiated_by_use`, `style`, `id`, `class`];\n    switch (e24) {\n      case `linearGradient`:\n        return t2.concat([`x1`, `y1`, `x2`, `y2`, `gradientUnits`, `gradientTransform`]);\n      case `radialGradient`:\n        return t2.concat([`gradientUnits`, `gradientTransform`, `cx`, `cy`, `r`, `fx`, `fy`, `fr`]);\n      case `stop`:\n        return t2.concat([`offset`, `stop-color`, `stop-opacity`]);\n    }\n    return t2;\n  };\n  var K = (e24, t2 = 16) => {\n    let n2 = /\\D{0,2}$/.exec(e24), r2 = parseFloat(e24), i2 = o.DPI;\n    switch (n2 == null ? void 0 : n2[0]) {\n      case `mm`:\n        return r2 * i2 / 25.4;\n      case `cm`:\n        return r2 * i2 / 2.54;\n      case `in`:\n        return r2 * i2;\n      case `pt`:\n        return r2 * i2 / 72;\n      case `pc`:\n        return r2 * i2 / 72 * 12;\n      case `em`:\n        return r2 * t2;\n      default:\n        return r2;\n    }\n  };\n  var mn = (e24) => {\n    let [t2, n2] = e24.trim().split(` `), [r2, i2] = (a2 = t2) && a2 !== `none` ? [a2.slice(1, 4), a2.slice(5, 8)] : a2 === `none` ? [a2, a2] : [`Mid`, `Mid`];\n    var a2;\n    return { meetOrSlice: n2 || `meet`, alignX: r2, alignY: i2 };\n  };\n  var hn = (e24, t2, n2 = true) => {\n    let r2, i2;\n    if (t2) if (t2.toLive) r2 = `url(#SVGID_${U(t2.id)})`;\n    else {\n      let e25 = String(t2);\n      if (nn(e25)) {\n        let t3 = new G(e25), n3 = t3.getAlpha();\n        r2 = t3.toRgb(), n3 !== 1 && (i2 = n3.toString());\n      } else r2 = new G(`black`).toRgb();\n    }\n    else r2 = `none`;\n    return n2 ? `${e24}: ${r2}; ${i2 ? `${e24}-opacity: ${i2}; ` : ``}` : `${e24}=\"${r2}\" ${i2 ? `${e24}-opacity=\"${i2}\" ` : ``}`;\n  };\n  var gn = class {\n    getSvgStyles(e24) {\n      let t2 = this.fillRule == null ? `nonzero` : an(this.fillRule), n2 = this.strokeWidth == null ? `0` : rn(this.strokeWidth), r2 = this.strokeDashArray == null ? te : this.strokeDashArray.every((e25) => Number.isFinite(Number(e25))) ? this.strokeDashArray.join(` `) : ``, i2 = this.strokeDashOffset == null ? `0` : rn(this.strokeDashOffset), a2 = this.strokeLineCap == null ? `butt` : an(this.strokeLineCap), o2 = this.strokeLineJoin == null ? `miter` : an(this.strokeLineJoin), s3 = this.strokeMiterLimit == null ? `4` : rn(this.strokeMiterLimit), c2 = this.opacity == null ? `1` : rn(this.opacity), l2 = this.visible ? `` : ` visibility: hidden;`, u2 = e24 ? `` : this.getSvgFilter(), d2 = hn(j, this.fill);\n      return [hn(he, this.stroke), n2 ? `stroke-width: ${n2}; ` : ``, r2 ? `stroke-dasharray: ${r2}; ` : ``, a2 ? `stroke-linecap: ${a2}; ` : ``, i2 ? `stroke-dashoffset: ${i2}; ` : ``, o2 ? `stroke-linejoin: ${o2}; ` : ``, s3 ? `stroke-miterlimit: ${s3}; ` : ``, d2, t2 ? `fill-rule: ${t2}; ` : ``, c2 ? `opacity: ${c2};` : ``, u2, l2].map((e25) => U(e25)).join(``);\n    }\n    getSvgFilter() {\n      return this.shadow ? `filter: url(#SVGID_${U(this.shadow.id)});` : ``;\n    }\n    getSvgCommons() {\n      return [this.id ? `id=\"${U(String(this.id))}\" ` : ``, this.clipPath ? `clip-path=\"url(#${U(this.clipPath.clipPathId)})\" ` : ``].join(``);\n    }\n    getSvgTransform(e24, t2 = ``) {\n      return `transform=\"${nt(e24 ? this.calcTransformMatrix() : this.calcOwnMatrix())}${t2}\" `;\n    }\n    _toSVG(e24) {\n      return [``];\n    }\n    toSVG(e24) {\n      return this._createBaseSVGMarkup(this._toSVG(e24), { reviver: e24 });\n    }\n    toClipPathSVG(e24) {\n      return `\t` + this._createBaseClipPathSVGMarkup(this._toSVG(e24), { reviver: e24 });\n    }\n    _createBaseClipPathSVGMarkup(e24, { reviver: t2, additionalTransform: n2 = `` } = {}) {\n      let r2 = [this.getSvgTransform(true, n2), this.getSvgCommons()].join(``), i2 = e24.indexOf(`COMMON_PARTS`);\n      return e24[i2] = r2, t2 ? t2(e24.join(``)) : e24.join(``);\n    }\n    _createBaseSVGMarkup(e24, { noStyle: t2, reviver: n2, withShadow: r2, additionalTransform: i2 } = {}) {\n      let a2 = t2 ? `` : `style=\"${this.getSvgStyles()}\" `, o2 = r2 ? `style=\"${this.getSvgFilter()}\" ` : ``, s3 = this.clipPath, c2 = this.strokeUniform ? `vector-effect=\"non-scaling-stroke\" ` : ``, l2 = s3 && s3.absolutePositioned, u2 = this.stroke, d2 = this.fill, f2 = this.shadow, p2 = [], m = e24.indexOf(`COMMON_PARTS`), h2;\n      return s3 && (s3.clipPathId = `CLIPPATH_${je()}`, h2 = `<clipPath id=\"${s3.clipPathId}\" >\n${s3.toClipPathSVG(n2)}</clipPath>\n`), l2 && p2.push(`<g `, o2, this.getSvgCommons(), ` >\n`), p2.push(`<g `, this.getSvgTransform(false), l2 ? `` : o2 + this.getSvgCommons(), ` >\n`), e24[m] = [a2, c2, t2 ? `` : this.addPaintOrder(), ` `, i2 ? `transform=\"${i2}\" ` : ``].join(``), V(d2) && p2.push(d2.toSVG(this)), V(u2) && p2.push(u2.toSVG(this)), f2 && p2.push(f2.toSVG(this)), s3 && p2.push(h2), p2.push(e24.join(``)), p2.push(`</g>\n`), l2 && p2.push(`</g>\n`), n2 ? n2(p2.join(``)) : p2.join(``);\n    }\n    addPaintOrder() {\n      return this.paintFirst === `fill` ? `` : ` paint-order=\"${U(this.paintFirst)}\" `;\n    }\n  };\n  function _n(e24) {\n    return RegExp(`^(` + e24.join(`|`) + `)\\\\b`, `i`);\n  }\n  var vn = `textDecorationThickness`;\n  var yn = `textDecorationColor`;\n  var bn = [`fontSize`, `fontWeight`, `fontFamily`, `fontStyle`];\n  var xn = [`underline`, `overline`, `linethrough`];\n  var Sn = [...bn, `lineHeight`, `text`, `charSpacing`, `textAlign`, `styles`, `path`, `pathStartOffset`, `pathSide`, `pathAlign`];\n  var Cn = [...Sn, ...xn, `textBackgroundColor`, `direction`, vn, yn];\n  var wn = [...bn, ...xn, he, `strokeWidth`, j, `deltaY`, `textBackgroundColor`, vn, yn];\n  var Tn = { _reNewline: ne, _reSpacesAndTabs: /[ \\t\\r]/g, _reSpaceAndTab: /[ \\t\\r]/, _reWords: /\\S+/g, fontSize: 40, fontWeight: _e, fontFamily: `Times New Roman`, underline: false, overline: false, linethrough: false, textAlign: D, fontStyle: _e, lineHeight: 1.16, textBackgroundColor: ``, stroke: null, shadow: null, path: void 0, pathStartOffset: 0, pathSide: D, pathAlign: `baseline`, charSpacing: 0, deltaY: 0, direction: `ltr`, CACHE_FONT_SIZE: 400, MIN_TEXT_WIDTH: 2, superscript: { size: 0.6, baseline: -0.35 }, subscript: { size: 0.6, baseline: 0.11 }, _fontSizeFraction: 0.222, offsets: { underline: 0.1, linethrough: -0.28167, overline: -0.81333 }, _fontSizeMult: 1.13, [vn]: 66.667 };\n  var En = `justify`;\n  var Dn = String.raw`[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?`;\n  var On = String.raw`(?:\\s*,?\\s+|\\s*,\\s*)`;\n  var An = RegExp(`(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(` + Dn + `(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|` + Dn + `))?\\\\s+(.*)`);\n  var jn = { cx: D, x: D, r: `radius`, cy: `top`, y: `top`, display: `visible`, visibility: `visible`, transform: `transformMatrix`, \"fill-opacity\": `fillOpacity`, \"fill-rule\": `fillRule`, \"font-family\": `fontFamily`, \"font-size\": `fontSize`, \"font-style\": `fontStyle`, \"font-weight\": `fontWeight`, \"letter-spacing\": `charSpacing`, \"paint-order\": `paintFirst`, \"stroke-dasharray\": `strokeDashArray`, \"stroke-dashoffset\": `strokeDashOffset`, \"stroke-linecap\": `strokeLineCap`, \"stroke-linejoin\": `strokeLineJoin`, \"stroke-miterlimit\": `strokeMiterLimit`, \"stroke-opacity\": `strokeOpacity`, \"stroke-width\": `strokeWidth`, \"text-decoration\": `textDecoration`, \"text-anchor\": `textAnchor`, opacity: `opacity`, \"clip-path\": `clipPath`, \"clip-rule\": `clipRule`, \"vector-effect\": `strokeUniform`, \"image-rendering\": `imageSmoothing`, \"text-decoration-thickness\": vn, \"text-decoration-color\": yn };\n  var Mn = `font-size`;\n  var Nn = `clip-path`;\n  var Pn = _n([`path`, `circle`, `polygon`, `polyline`, `ellipse`, `rect`, `line`, `image`, `text`]);\n  var Fn = _n([`symbol`, `image`, `marker`, `pattern`, `view`, `svg`]);\n  var In = _n([`symbol`, `g`, `a`, `svg`, `clipPath`, `defs`]);\n  var Ln = new RegExp(String.raw`^\\s*(${Dn})${On}(${Dn})${On}(${Dn})${On}(${Dn})\\s*$`);\n  var Rn = `(-?\\\\d+(?:\\\\.\\\\d*)?(?:px)?(?:\\\\s?|$))?`;\n  var zn = RegExp(`(?:\\\\s|^)` + Rn + Rn + `(` + Dn + `?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)`);\n  var Bn = class e5 {\n    constructor(t2 = {}) {\n      let n2 = typeof t2 == `string` ? e5.parseShadow(t2) : t2;\n      Object.assign(this, e5.ownDefaults, n2), this.id = je();\n    }\n    static parseShadow(e24) {\n      let t2 = e24.trim(), [, n2 = 0, r2 = 0, i2 = 0] = (zn.exec(t2) || []).map((e25) => parseFloat(e25) || 0);\n      return { color: (t2.replace(zn, ``) || `rgb(0,0,0)`).trim(), offsetX: n2, offsetY: r2, blur: i2 };\n    }\n    toString() {\n      return [this.offsetX, this.offsetY, this.blur, this.color].join(`px `);\n    }\n    toSVG(e24) {\n      let t2 = Rt(new N(this.offsetX, this.offsetY), I(-e24.angle)), n2 = o.NUM_FRACTION_DIGITS, r2 = new G(this.color), i2 = 40, a2 = 40;\n      return e24.width && e24.height && (i2 = 100 * B((Math.abs(t2.x) + this.blur) / e24.width, n2) + 20, a2 = 100 * B((Math.abs(t2.y) + this.blur) / e24.height, n2) + 20), e24.flipX && (t2.x *= -1), e24.flipY && (t2.y *= -1), `<filter id=\"SVGID_${U(this.id)}\" y=\"-${a2}%\" height=\"${100 + 2 * a2}%\" x=\"-${i2}%\" width=\"${100 + 2 * i2}%\" >\n\t<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${B(this.blur ? this.blur / 2 : 0, n2)}\"></feGaussianBlur>\n\t<feOffset dx=\"${B(t2.x, n2)}\" dy=\"${B(t2.y, n2)}\" result=\"oBlur\" ></feOffset>\n\t<feFlood flood-color=\"${r2.toRgb()}\" flood-opacity=\"${r2.getAlpha()}\"/>\n\t<feComposite in2=\"oBlur\" operator=\"in\" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in=\"SourceGraphic\"></feMergeNode>\n\t</feMerge>\n</filter>\n`;\n    }\n    toObject() {\n      let t2 = { color: this.color, blur: this.blur, offsetX: this.offsetX, offsetY: this.offsetY, affectStroke: this.affectStroke, nonScaling: this.nonScaling, type: this.constructor.type }, n2 = e5.ownDefaults;\n      return this.includeDefaultValues ? t2 : tt(t2, (e24, t3) => e24 !== n2[t3]);\n    }\n    static async fromObject(e24) {\n      return new this(e24);\n    }\n  };\n  i(Bn, `ownDefaults`, { color: `rgb(0,0,0)`, blur: 0, offsetX: 0, offsetY: 0, affectStroke: false, includeDefaultValues: true, nonScaling: false }), i(Bn, `type`, `shadow`), M.setClass(Bn, `shadow`);\n  var Vn = (e24, t2, n2) => Math.max(e24, Math.min(t2, n2));\n  var Hn = [`top`, D, de, fe, `flipX`, `flipY`, `originX`, `originY`, `angle`, `opacity`, `globalCompositeOperation`, `shadow`, `visible`, pe, me];\n  var Un = [j, he, `strokeWidth`, `strokeDashArray`, `width`, `height`, `paintFirst`, `strokeUniform`, `strokeLineCap`, `strokeDashOffset`, `strokeLineJoin`, `strokeMiterLimit`, `backgroundColor`, `clipPath`];\n  var Wn = { top: 0, left: 0, width: 0, height: 0, angle: 0, flipX: false, flipY: false, scaleX: 1, scaleY: 1, minScaleLimit: 0, skewX: 0, skewY: 0, originX: E, originY: E, strokeWidth: 1, strokeUniform: false, padding: 0, opacity: 1, paintFirst: j, fill: `rgb(0,0,0)`, fillRule: `nonzero`, stroke: null, strokeDashArray: null, strokeDashOffset: 0, strokeLineCap: `butt`, strokeLineJoin: `miter`, strokeMiterLimit: 4, globalCompositeOperation: `source-over`, backgroundColor: ``, shadow: null, visible: true, includeDefaultValues: true, excludeFromExport: false, objectCaching: true, clipPath: void 0, inverted: false, absolutePositioned: false, centeredRotation: true, centeredScaling: false, dirty: true };\n  var Gn = t({ defaultEasing: () => Jn, easeInBack: () => gr, easeInBounce: () => br, easeInCirc: () => ur, easeInCubic: () => Yn, easeInElastic: () => pr, easeInExpo: () => sr, easeInOutBack: () => vr, easeInOutBounce: () => xr, easeInOutCirc: () => fr, easeInOutCubic: () => Zn, easeInOutElastic: () => hr, easeInOutExpo: () => lr, easeInOutQuad: () => wr, easeInOutQuart: () => er, easeInOutQuint: () => rr, easeInOutSine: () => or, easeInQuad: () => Sr, easeInQuart: () => Qn, easeInQuint: () => tr, easeInSine: () => ir, easeOutBack: () => _r, easeOutBounce: () => yr, easeOutCirc: () => dr, easeOutCubic: () => Xn, easeOutElastic: () => mr, easeOutExpo: () => cr, easeOutQuad: () => Cr, easeOutQuart: () => $n, easeOutQuint: () => nr, easeOutSine: () => ar });\n  var Kn = (e24, t2, n2, r2) => (e24 < Math.abs(t2) ? (e24 = t2, r2 = n2 / 4) : r2 = t2 === 0 && e24 === 0 ? n2 / w * Math.asin(1) : n2 / w * Math.asin(t2 / e24), { a: e24, c: t2, p: n2, s: r2 });\n  var qn = (e24, t2, n2, r2, i2) => e24 * 2 ** (10 * --r2) * Math.sin((r2 * i2 - t2) * w / n2);\n  var Jn = (e24, t2, n2, r2) => -n2 * Math.cos(e24 / r2 * S) + n2 + t2;\n  var Yn = (e24, t2, n2, r2) => n2 * (e24 / r2) ** 3 + t2;\n  var Xn = (e24, t2, n2, r2) => n2 * ((e24 / r2 - 1) ** 3 + 1) + t2;\n  var Zn = (e24, t2, n2, r2) => (e24 /= r2 / 2) < 1 ? n2 / 2 * e24 ** 3 + t2 : n2 / 2 * ((e24 - 2) ** 3 + 2) + t2;\n  var Qn = (e24, t2, n2, r2) => n2 * (e24 /= r2) * e24 ** 3 + t2;\n  var $n = (e24, t2, n2, r2) => -n2 * ((e24 = e24 / r2 - 1) * e24 ** 3 - 1) + t2;\n  var er = (e24, t2, n2, r2) => (e24 /= r2 / 2) < 1 ? n2 / 2 * e24 ** 4 + t2 : -n2 / 2 * ((e24 -= 2) * e24 ** 3 - 2) + t2;\n  var tr = (e24, t2, n2, r2) => n2 * (e24 / r2) ** 5 + t2;\n  var nr = (e24, t2, n2, r2) => n2 * ((e24 / r2 - 1) ** 5 + 1) + t2;\n  var rr = (e24, t2, n2, r2) => (e24 /= r2 / 2) < 1 ? n2 / 2 * e24 ** 5 + t2 : n2 / 2 * ((e24 - 2) ** 5 + 2) + t2;\n  var ir = (e24, t2, n2, r2) => -n2 * Math.cos(e24 / r2 * S) + n2 + t2;\n  var ar = (e24, t2, n2, r2) => n2 * Math.sin(e24 / r2 * S) + t2;\n  var or = (e24, t2, n2, r2) => -n2 / 2 * (Math.cos(Math.PI * e24 / r2) - 1) + t2;\n  var sr = (e24, t2, n2, r2) => e24 === 0 ? t2 : n2 * 2 ** (10 * (e24 / r2 - 1)) + t2;\n  var cr = (e24, t2, n2, r2) => e24 === r2 ? t2 + n2 : n2 * -(2 ** (-10 * e24 / r2) + 1) + t2;\n  var lr = (e24, t2, n2, r2) => e24 === 0 ? t2 : e24 === r2 ? t2 + n2 : (e24 /= r2 / 2) < 1 ? n2 / 2 * 2 ** (10 * (e24 - 1)) + t2 : n2 / 2 * -(2 ** (-10 * (e24 - 1)) + 2) + t2;\n  var ur = (e24, t2, n2, r2) => -n2 * (Math.sqrt(1 - (e24 /= r2) * e24) - 1) + t2;\n  var dr = (e24, t2, n2, r2) => n2 * Math.sqrt(1 - (e24 = e24 / r2 - 1) * e24) + t2;\n  var fr = (e24, t2, n2, r2) => (e24 /= r2 / 2) < 1 ? -n2 / 2 * (Math.sqrt(1 - e24 ** 2) - 1) + t2 : n2 / 2 * (Math.sqrt(1 - (e24 -= 2) * e24) + 1) + t2;\n  var pr = (e24, t2, n2, r2) => {\n    let i2 = n2, a2 = 0;\n    if (e24 === 0) return t2;\n    if ((e24 /= r2) === 1) return t2 + n2;\n    a2 || (a2 = 0.3 * r2);\n    let { a: o2, s: s3, p: c2 } = Kn(i2, n2, a2, 1.70158);\n    return -qn(o2, s3, c2, e24, r2) + t2;\n  };\n  var mr = (e24, t2, n2, r2) => {\n    let i2 = n2, a2 = 0;\n    if (e24 === 0) return t2;\n    if ((e24 /= r2) === 1) return t2 + n2;\n    a2 || (a2 = 0.3 * r2);\n    let { a: o2, s: s3, p: c2, c: l2 } = Kn(i2, n2, a2, 1.70158);\n    return o2 * 2 ** (-10 * e24) * Math.sin((e24 * r2 - s3) * w / c2) + l2 + t2;\n  };\n  var hr = (e24, t2, n2, r2) => {\n    let i2 = n2, a2 = 0;\n    if (e24 === 0) return t2;\n    if ((e24 /= r2 / 2) == 2) return t2 + n2;\n    a2 || (a2 = 0.3 * 1.5 * r2);\n    let { a: o2, s: s3, p: c2, c: l2 } = Kn(i2, n2, a2, 1.70158);\n    return e24 < 1 ? -0.5 * qn(o2, s3, c2, e24, r2) + t2 : o2 * 2 ** (-10 * --e24) * Math.sin((e24 * r2 - s3) * w / c2) * 0.5 + l2 + t2;\n  };\n  var gr = (e24, t2, n2, r2, i2 = 1.70158) => n2 * (e24 /= r2) * e24 * ((i2 + 1) * e24 - i2) + t2;\n  var _r = (e24, t2, n2, r2, i2 = 1.70158) => n2 * ((e24 = e24 / r2 - 1) * e24 * ((i2 + 1) * e24 + i2) + 1) + t2;\n  var vr = (e24, t2, n2, r2, i2 = 1.70158) => (e24 /= r2 / 2) < 1 ? n2 / 2 * (e24 * e24 * ((1 + (i2 *= 1.525)) * e24 - i2)) + t2 : n2 / 2 * ((e24 -= 2) * e24 * ((1 + (i2 *= 1.525)) * e24 + i2) + 2) + t2;\n  var yr = (e24, t2, n2, r2) => (e24 /= r2) < 1 / 2.75 ? n2 * (7.5625 * e24 * e24) + t2 : e24 < 2 / 2.75 ? n2 * (7.5625 * (e24 -= 1.5 / 2.75) * e24 + 0.75) + t2 : e24 < 2.5 / 2.75 ? n2 * (7.5625 * (e24 -= 2.25 / 2.75) * e24 + 0.9375) + t2 : n2 * (7.5625 * (e24 -= 2.625 / 2.75) * e24 + 0.984375) + t2;\n  var br = (e24, t2, n2, r2) => n2 - yr(r2 - e24, 0, n2, r2) + t2;\n  var xr = (e24, t2, n2, r2) => e24 < r2 / 2 ? 0.5 * br(2 * e24, 0, n2, r2) + t2 : 0.5 * yr(2 * e24 - r2, 0, n2, r2) + 0.5 * n2 + t2;\n  var Sr = (e24, t2, n2, r2) => n2 * (e24 /= r2) * e24 + t2;\n  var Cr = (e24, t2, n2, r2) => -n2 * (e24 /= r2) * (e24 - 2) + t2;\n  var wr = (e24, t2, n2, r2) => (e24 /= r2 / 2) < 1 ? n2 / 2 * e24 ** 2 + t2 : -n2 / 2 * (--e24 * (e24 - 2) - 1) + t2;\n  var Tr = () => false;\n  var Er = class {\n    constructor({ startValue: e24, byValue: t2, duration: n2 = 500, delay: r2 = 0, easing: a2 = Jn, onStart: o2 = x, onChange: s3 = x, onComplete: c2 = x, abort: l2 = Tr, target: u2 }) {\n      i(this, `_state`, `pending`), i(this, `durationProgress`, 0), i(this, `valueProgress`, 0), this.tick = this.tick.bind(this), this.duration = n2, this.delay = r2, this.easing = a2, this._onStart = o2, this._onChange = s3, this._onComplete = c2, this._abort = l2, this.target = u2, this.startValue = e24, this.byValue = t2, this.value = this.startValue, this.endValue = Object.freeze(this.calculate(this.duration).value);\n    }\n    get state() {\n      return this._state;\n    }\n    isDone() {\n      return this._state === `aborted` || this._state === `completed`;\n    }\n    start() {\n      let e24 = (e25) => {\n        this._state === `pending` && (this.startTime = e25 || +/* @__PURE__ */ new Date(), this._state = `running`, this._onStart(), this.tick(this.startTime));\n      };\n      this.register(), this.delay > 0 ? this.timeout = _().setTimeout(() => Oe(e24), this.delay) : Oe(e24);\n    }\n    tick(e24) {\n      let t2 = (e24 || +/* @__PURE__ */ new Date()) - this.startTime, n2 = Math.min(t2, this.duration);\n      this.durationProgress = n2 / this.duration;\n      let { value: r2, valueProgress: i2 } = this.calculate(n2);\n      this.value = Object.freeze(r2), this.valueProgress = i2, this._state !== `aborted` && (this._abort(this.value, this.valueProgress, this.durationProgress) ? (this._state = `aborted`, this.unregister()) : t2 >= this.duration ? (this.durationProgress = this.valueProgress = 1, this._onChange(this.endValue, this.valueProgress, this.durationProgress), this._state = `completed`, this._onComplete(this.endValue, this.valueProgress, this.durationProgress), this.unregister(), this.timeout = null) : (this._onChange(this.value, this.valueProgress, this.durationProgress), Oe(this.tick)));\n    }\n    register() {\n      ye.push(this);\n    }\n    unregister() {\n      ye.remove(this);\n    }\n    abort() {\n      this._state = `aborted`, this.unregister(), this.timeout && _().clearTimeout(this.timeout);\n    }\n  };\n  var Dr = class extends Er {\n    constructor({ startValue: e24 = 0, endValue: t2 = 100, ...n2 }) {\n      super({ ...n2, startValue: e24, byValue: t2 - e24 });\n    }\n    calculate(e24) {\n      let t2 = this.easing(e24, this.startValue, this.byValue, this.duration);\n      return { value: t2, valueProgress: Math.abs((t2 - this.startValue) / this.byValue) };\n    }\n  };\n  var Or = class extends Er {\n    constructor({ startValue: e24 = [0], endValue: t2 = [100], ...n2 }) {\n      super({ ...n2, startValue: e24, byValue: t2.map((t3, n3) => t3 - e24[n3]) });\n    }\n    calculate(e24) {\n      let t2 = this.startValue.map((t3, n2) => this.easing(e24, t3, this.byValue[n2], this.duration, n2));\n      return { value: t2, valueProgress: Math.abs((t2[0] - this.startValue[0]) / this.byValue[0]) };\n    }\n  };\n  var kr = (e24, t2, n2, r2) => t2 + n2 * (1 - Math.cos(e24 / r2 * S));\n  var Ar = (e24) => e24 && ((t2, n2, r2) => e24(new G(t2).toRgba(), n2, r2));\n  var jr = class extends Er {\n    constructor({ startValue: e24, endValue: t2, easing: n2 = kr, onChange: r2, onComplete: i2, abort: a2, ...o2 }) {\n      let s3 = new G(e24).getSource(), c2 = new G(t2).getSource();\n      super({ ...o2, startValue: s3, byValue: c2.map((e25, t3) => e25 - s3[t3]), easing: n2, onChange: Ar(r2), onComplete: Ar(i2), abort: Ar(a2) });\n    }\n    calculate(e24) {\n      let [t2, n2, r2, i2] = this.startValue.map((t3, n3) => this.easing(e24, t3, this.byValue[n3], this.duration, n3)), a2 = [...[t2, n2, r2].map(Math.round), Vn(0, i2, 1)];\n      return { value: a2, valueProgress: a2.map((e25, t3) => this.byValue[t3] === 0 ? 0 : Math.abs((e25 - this.startValue[t3]) / this.byValue[t3])).find((e25) => e25 !== 0) || 0 };\n    }\n  };\n  function Mr(e24) {\n    let t2 = ((e25) => Array.isArray(e25.startValue) || Array.isArray(e25.endValue))(e24) ? new Or(e24) : new Dr(e24);\n    return t2.start(), t2;\n  }\n  function Nr(e24) {\n    let t2 = new jr(e24);\n    return t2.start(), t2;\n  }\n  var Pr = class e6 {\n    constructor(e24) {\n      this.status = e24, this.points = [];\n    }\n    includes(e24) {\n      return this.points.some((t2) => t2.eq(e24));\n    }\n    append(...e24) {\n      return this.points = this.points.concat(e24.filter((e25) => !this.includes(e25))), this;\n    }\n    static isPointContained(e24, t2, n2, r2 = false) {\n      if (t2.eq(n2)) return e24.eq(t2);\n      if (t2.x === n2.x) return e24.x === t2.x && (r2 || e24.y >= Math.min(t2.y, n2.y) && e24.y <= Math.max(t2.y, n2.y));\n      if (t2.y === n2.y) return e24.y === t2.y && (r2 || e24.x >= Math.min(t2.x, n2.x) && e24.x <= Math.max(t2.x, n2.x));\n      {\n        let i2 = zt(t2, n2), a2 = zt(t2, e24).divide(i2);\n        return r2 ? Math.abs(a2.x) === Math.abs(a2.y) : a2.x === a2.y && a2.x >= 0 && a2.x <= 1;\n      }\n    }\n    static isPointInPolygon(e24, t2) {\n      let n2 = new N(e24).setX(Math.min(e24.x - 1, ...t2.map((e25) => e25.x))), r2 = 0;\n      for (let i2 = 0; i2 < t2.length; i2++) {\n        let a2 = this.intersectSegmentSegment(t2[i2], t2[(i2 + 1) % t2.length], e24, n2);\n        if (a2.includes(e24)) return true;\n        r2 += Number(a2.status === `Intersection`);\n      }\n      return r2 % 2 == 1;\n    }\n    static intersectLineLine(t2, n2, r2, i2, a2 = true, o2 = true) {\n      let s3 = n2.x - t2.x, c2 = n2.y - t2.y, l2 = i2.x - r2.x, u2 = i2.y - r2.y, d2 = t2.x - r2.x, f2 = t2.y - r2.y, p2 = l2 * f2 - u2 * d2, m = s3 * f2 - c2 * d2, h2 = u2 * s3 - l2 * c2;\n      if (h2 !== 0) {\n        let n3 = p2 / h2, r3 = m / h2;\n        return (a2 || 0 <= n3 && n3 <= 1) && (o2 || 0 <= r3 && r3 <= 1) ? new e6(`Intersection`).append(new N(t2.x + n3 * s3, t2.y + n3 * c2)) : new e6();\n      }\n      return new e6(p2 === 0 || m === 0 ? a2 || o2 || e6.isPointContained(t2, r2, i2) || e6.isPointContained(n2, r2, i2) || e6.isPointContained(r2, t2, n2) || e6.isPointContained(i2, t2, n2) ? `Coincident` : void 0 : `Parallel`);\n    }\n    static intersectSegmentLine(t2, n2, r2, i2) {\n      return e6.intersectLineLine(t2, n2, r2, i2, false, true);\n    }\n    static intersectSegmentSegment(t2, n2, r2, i2) {\n      return e6.intersectLineLine(t2, n2, r2, i2, false, false);\n    }\n    static intersectLinePolygon(t2, n2, r2, i2 = true) {\n      let a2 = new e6(), o2 = r2.length;\n      for (let s3, c2, l2, u2 = 0; u2 < o2; u2++) {\n        if (s3 = r2[u2], c2 = r2[(u2 + 1) % o2], l2 = e6.intersectLineLine(t2, n2, s3, c2, i2, false), l2.status === `Coincident`) return l2;\n        a2.append(...l2.points);\n      }\n      return a2.points.length > 0 && (a2.status = `Intersection`), a2;\n    }\n    static intersectSegmentPolygon(t2, n2, r2) {\n      return e6.intersectLinePolygon(t2, n2, r2, false);\n    }\n    static intersectPolygonPolygon(t2, n2) {\n      let r2 = new e6(), i2 = t2.length, a2 = [];\n      for (let o2 = 0; o2 < i2; o2++) {\n        let s3 = t2[o2], c2 = t2[(o2 + 1) % i2], l2 = e6.intersectSegmentPolygon(s3, c2, n2);\n        l2.status === `Coincident` ? (a2.push(l2), r2.append(s3, c2)) : r2.append(...l2.points);\n      }\n      return a2.length > 0 && a2.length === t2.length ? new e6(`Coincident`) : (r2.points.length > 0 && (r2.status = `Intersection`), r2);\n    }\n    static intersectPolygonRectangle(t2, n2, r2) {\n      let i2 = n2.min(r2), a2 = n2.max(r2), o2 = new N(a2.x, i2.y), s3 = new N(i2.x, a2.y);\n      return e6.intersectPolygonPolygon(t2, [i2, o2, a2, s3]);\n    }\n  };\n  var Fr = class extends De {\n    getX() {\n      return this.getXY().x;\n    }\n    setX(e24) {\n      this.setXY(this.getXY().setX(e24));\n    }\n    getY() {\n      return this.getXY().y;\n    }\n    setY(e24) {\n      this.setXY(this.getXY().setY(e24));\n    }\n    getRelativeX() {\n      return this.left;\n    }\n    setRelativeX(e24) {\n      this.left = e24;\n    }\n    getRelativeY() {\n      return this.top;\n    }\n    setRelativeY(e24) {\n      this.top = e24;\n    }\n    getXY() {\n      let e24 = this.getRelativeXY();\n      return this.group ? L(e24, this.group.calcTransformMatrix()) : e24;\n    }\n    setXY(e24, t2, n2) {\n      this.group && (e24 = L(e24, R(this.group.calcTransformMatrix()))), this.setRelativeXY(e24, t2, n2);\n    }\n    getRelativeXY() {\n      return new N(this.left, this.top);\n    }\n    setRelativeXY(e24, t2 = this.originX, n2 = this.originY) {\n      this.setPositionByOrigin(e24, t2, n2);\n    }\n    isStrokeAccountedForInDimensions() {\n      return false;\n    }\n    getCoords() {\n      let { tl: e24, tr: t2, br: n2, bl: r2 } = this.aCoords || (this.aCoords = this.calcACoords()), i2 = [e24, t2, n2, r2];\n      if (this.group) {\n        let e25 = this.group.calcTransformMatrix();\n        return i2.map((t3) => L(t3, e25));\n      }\n      return i2;\n    }\n    intersectsWithRect(e24, t2) {\n      return Pr.intersectPolygonRectangle(this.getCoords(), e24, t2).status === `Intersection`;\n    }\n    intersectsWithObject(e24) {\n      let t2 = Pr.intersectPolygonPolygon(this.getCoords(), e24.getCoords());\n      return t2.status === `Intersection` || t2.status === `Coincident` || e24.isContainedWithinObject(this) || this.isContainedWithinObject(e24);\n    }\n    isContainedWithinObject(e24) {\n      return this.getCoords().every((t2) => e24.containsPoint(t2));\n    }\n    isContainedWithinRect(e24, t2) {\n      let { left: n2, top: r2, width: i2, height: a2 } = this.getBoundingRect();\n      return n2 >= e24.x && n2 + i2 <= t2.x && r2 >= e24.y && r2 + a2 <= t2.y;\n    }\n    isOverlapping(e24) {\n      return this.intersectsWithObject(e24) || this.isContainedWithinObject(e24) || e24.isContainedWithinObject(this);\n    }\n    containsPoint(e24) {\n      return Pr.isPointInPolygon(e24, this.getCoords());\n    }\n    isOnScreen() {\n      if (!this.canvas) return false;\n      let { tl: e24, br: t2 } = this.canvas.vptCoords;\n      return !!this.getCoords().some((n2) => n2.x <= t2.x && n2.x >= e24.x && n2.y <= t2.y && n2.y >= e24.y) || !!this.intersectsWithRect(e24, t2) || this.containsPoint(e24.midPointFrom(t2));\n    }\n    isPartiallyOnScreen() {\n      if (!this.canvas) return false;\n      let { tl: e24, br: t2 } = this.canvas.vptCoords;\n      return !!this.intersectsWithRect(e24, t2) || this.getCoords().every((n2) => (n2.x >= t2.x || n2.x <= e24.x) && (n2.y >= t2.y || n2.y <= e24.y)) && this.containsPoint(e24.midPointFrom(t2));\n    }\n    getBoundingRect() {\n      return wt(this.getCoords());\n    }\n    getScaledWidth() {\n      return this._getTransformedDimensions().x;\n    }\n    getScaledHeight() {\n      return this._getTransformedDimensions().y;\n    }\n    scale(e24) {\n      this._set(de, e24), this._set(fe, e24), this.setCoords();\n    }\n    scaleToWidth(e24) {\n      let t2 = this.getBoundingRect().width / this.getScaledWidth();\n      return this.scale(e24 / this.width / t2);\n    }\n    scaleToHeight(e24) {\n      let t2 = this.getBoundingRect().height / this.getScaledHeight();\n      return this.scale(e24 / this.height / t2);\n    }\n    getCanvasRetinaScaling() {\n      var e24;\n      return ((e24 = this.canvas) == null ? void 0 : e24.getRetinaScaling()) || 1;\n    }\n    getTotalAngle() {\n      return this.group ? Ie(ze(this.calcTransformMatrix())) : this.angle;\n    }\n    getViewportTransform() {\n      var e24;\n      return ((e24 = this.canvas) == null ? void 0 : e24.viewportTransform) || T.concat();\n    }\n    calcACoords() {\n      let e24 = We({ angle: this.angle }), { x: t2, y: n2 } = this.getRelativeCenterPoint(), r2 = z(Ue(t2, n2), e24), i2 = this._getTransformedDimensions(), a2 = i2.x / 2, o2 = i2.y / 2;\n      return { tl: L({ x: -a2, y: -o2 }, r2), tr: L({ x: a2, y: -o2 }, r2), bl: L({ x: -a2, y: o2 }, r2), br: L({ x: a2, y: o2 }, r2) };\n    }\n    setCoords() {\n      this.aCoords = this.calcACoords();\n    }\n    transformMatrixKey(e24 = false) {\n      let t2 = [];\n      return !e24 && this.group && (t2 = this.group.transformMatrixKey(e24)), t2.push(this.top, this.left, this.width, this.height, this.scaleX, this.scaleY, this.angle, this.strokeWidth, this.skewX, this.skewY, +this.flipX, +this.flipY, W(this.originX), W(this.originY)), t2;\n    }\n    calcTransformMatrix(e24 = false) {\n      let t2 = this.calcOwnMatrix();\n      if (e24 || !this.group) return t2;\n      let n2 = this.transformMatrixKey(e24), r2 = this.matrixCache;\n      return r2 && r2.key.every((e25, t3) => e25 === n2[t3]) ? r2.value : (this.group && (t2 = z(this.group.calcTransformMatrix(false), t2)), this.matrixCache = { key: n2, value: t2 }, t2);\n    }\n    calcOwnMatrix() {\n      let e24 = this.transformMatrixKey(true), t2 = this.ownMatrixCache;\n      if (t2 && t2.key.every((t3, n3) => t3 === e24[n3])) return t2.value;\n      let n2 = this.getRelativeCenterPoint(), r2 = Xe({ angle: this.angle, translateX: n2.x, translateY: n2.y, scaleX: this.scaleX, scaleY: this.scaleY, skewX: this.skewX, skewY: this.skewY, flipX: this.flipX, flipY: this.flipY });\n      return this.ownMatrixCache = { key: e24, value: r2 }, r2;\n    }\n    _getNonTransformedDimensions() {\n      return new N(this.width, this.height).scalarAdd(this.strokeWidth);\n    }\n    _calculateCurrentDimensions(e24) {\n      var t2;\n      let n2 = (t2 = this.canvas) == null ? void 0 : t2.viewportTransform, r2 = this._getTransformedDimensions(e24);\n      return n2 ? r2.multiply(new N(Be(n2), Ve(n2))).scalarAdd(2 * this.padding) : r2.scalarAdd(2 * this.padding);\n    }\n    _getTransformedDimensions(e24 = {}) {\n      let t2 = { scaleX: this.scaleX, scaleY: this.scaleY, skewX: this.skewX, skewY: this.skewY, width: this.width, height: this.height, strokeWidth: this.strokeWidth, ...e24 }, n2 = t2.strokeWidth, r2 = n2, i2 = 0;\n      this.strokeUniform && (r2 = 0, i2 = n2);\n      let a2 = t2.width + r2, o2 = t2.height + r2, s3;\n      return s3 = t2.skewX === 0 && t2.skewY === 0 ? new N(a2 * t2.scaleX, o2 * t2.scaleY) : At(a2, o2, Ye(t2)), s3.scalarAdd(i2);\n    }\n    translateToGivenOrigin(e24, t2, n2, r2, i2) {\n      let a2 = e24.x, o2 = e24.y, s3 = W(r2) - W(t2), c2 = W(i2) - W(n2);\n      if (s3 || c2) {\n        let e25 = this._getTransformedDimensions();\n        a2 += s3 * e25.x, o2 += c2 * e25.y;\n      }\n      return new N(a2, o2);\n    }\n    translateToCenterPoint(e24, t2, n2) {\n      if (t2 === `center` && n2 === `center`) return e24;\n      let r2 = this.translateToGivenOrigin(e24, t2, n2, E, E);\n      return this.angle ? r2.rotate(I(this.angle), e24) : r2;\n    }\n    translateToOriginPoint(e24, t2, n2) {\n      let r2 = this.translateToGivenOrigin(e24, E, E, t2, n2);\n      return this.angle ? r2.rotate(I(this.angle), e24) : r2;\n    }\n    getCenterPoint() {\n      let e24 = this.getRelativeCenterPoint();\n      return this.group ? L(e24, this.group.calcTransformMatrix()) : e24;\n    }\n    getRelativeCenterPoint() {\n      return this.translateToCenterPoint(new N(this.left, this.top), this.originX, this.originY);\n    }\n    getPointByOrigin(e24, t2) {\n      return this.getPositionByOrigin(e24, t2);\n    }\n    getPositionByOrigin(e24, t2) {\n      return this.translateToOriginPoint(this.getRelativeCenterPoint(), e24, t2);\n    }\n    setPositionByOrigin(e24, t2, n2) {\n      let r2 = this.translateToCenterPoint(e24, t2, n2), i2 = this.translateToOriginPoint(r2, this.originX, this.originY);\n      this.set({ left: i2.x, top: i2.y });\n    }\n    _getLeftTopCoords() {\n      return this.getPositionByOrigin(D, `top`);\n    }\n    positionByLeftTop(e24) {\n      return this.setPositionByOrigin(e24, D, `top`);\n    }\n  };\n  var Ir = class e7 extends Fr {\n    static getDefaults() {\n      return e7.ownDefaults;\n    }\n    get type() {\n      let e24 = this.constructor.type;\n      return e24 === `FabricObject` ? `object` : e24.toLowerCase();\n    }\n    set type(e24) {\n      s(`warn`, `Setting type has no effect`, e24);\n    }\n    constructor(t2) {\n      super(), i(this, `_cacheContext`, null), Object.assign(this, e7.ownDefaults), this.setOptions(t2);\n    }\n    _createCacheCanvas() {\n      this._cacheCanvas = P(), this._cacheContext = this._cacheCanvas.getContext(`2d`), this._updateCacheCanvas(), this.dirty = true;\n    }\n    _limitCacheSize(e24) {\n      let t2 = e24.width, n2 = e24.height, r2 = o.maxCacheSideLimit, i2 = o.minCacheSideLimit;\n      if (t2 <= r2 && n2 <= r2 && t2 * n2 <= o.perfLimitSizeTotal) return t2 < i2 && (e24.width = i2), n2 < i2 && (e24.height = i2), e24;\n      let a2 = t2 / n2, [s3, c2] = y.limitDimsByArea(a2), l2 = Vn(i2, s3, r2), u2 = Vn(i2, c2, r2);\n      return t2 > l2 && (e24.zoomX /= t2 / l2, e24.width = l2, e24.capped = true), n2 > u2 && (e24.zoomY /= n2 / u2, e24.height = u2, e24.capped = true), e24;\n    }\n    _getCacheCanvasDimensions() {\n      let e24 = this.getTotalObjectScaling(), t2 = this._getTransformedDimensions({ skewX: 0, skewY: 0 }), n2 = t2.x * e24.x / this.scaleX, r2 = t2.y * e24.y / this.scaleY;\n      return { width: Math.ceil(n2 + 2), height: Math.ceil(r2 + 2), zoomX: e24.x, zoomY: e24.y, x: n2, y: r2 };\n    }\n    _updateCacheCanvas() {\n      let e24 = this._cacheCanvas, t2 = this._cacheContext, { width: n2, height: r2, zoomX: i2, zoomY: a2, x: o2, y: s3 } = this._limitCacheSize(this._getCacheCanvasDimensions()), c2 = n2 !== e24.width || r2 !== e24.height, l2 = this.zoomX !== i2 || this.zoomY !== a2;\n      if (!e24 || !t2) return false;\n      if (c2 || l2) {\n        n2 !== e24.width || r2 !== e24.height ? (e24.width = n2, e24.height = r2) : (t2.setTransform(1, 0, 0, 1, 0, 0), t2.clearRect(0, 0, e24.width, e24.height));\n        let c3 = o2 / 2, l3 = s3 / 2;\n        return this.cacheTranslationX = Math.round(e24.width / 2 - c3) + c3, this.cacheTranslationY = Math.round(e24.height / 2 - l3) + l3, t2.translate(this.cacheTranslationX, this.cacheTranslationY), t2.scale(i2, a2), this.zoomX = i2, this.zoomY = a2, true;\n      }\n      return false;\n    }\n    setOptions(e24 = {}) {\n      this._setOptions(e24);\n    }\n    transform(e24) {\n      let t2 = this.group && !this.group._transformDone || this.group && this.canvas && e24 === this.canvas.contextTop, n2 = this.calcTransformMatrix(!t2);\n      e24.transform(n2[0], n2[1], n2[2], n2[3], n2[4], n2[5]);\n    }\n    getObjectScaling() {\n      if (!this.group) return new N(Math.abs(this.scaleX), Math.abs(this.scaleY));\n      let e24 = He(this.calcTransformMatrix());\n      return new N(Math.abs(e24.scaleX), Math.abs(e24.scaleY));\n    }\n    getTotalObjectScaling() {\n      let e24 = this.getObjectScaling();\n      if (this.canvas) {\n        let t2 = this.canvas.getZoom(), n2 = this.getCanvasRetinaScaling();\n        return e24.scalarMultiply(t2 * n2);\n      }\n      return e24;\n    }\n    getObjectOpacity() {\n      let e24 = this.opacity;\n      return this.group && (e24 *= this.group.getObjectOpacity()), e24;\n    }\n    _constrainScale(e24) {\n      return Math.abs(e24) < this.minScaleLimit ? e24 < 0 ? -this.minScaleLimit : this.minScaleLimit : e24 === 0 ? 1e-4 : e24;\n    }\n    _set(e24, t2) {\n      e24 !== `scaleX` && e24 !== `scaleY` || (t2 = this._constrainScale(t2)), e24 === `scaleX` && t2 < 0 ? (this.flipX = !this.flipX, t2 *= -1) : e24 === `scaleY` && t2 < 0 ? (this.flipY = !this.flipY, t2 *= -1) : e24 !== `shadow` || !t2 || t2 instanceof Bn || (t2 = new Bn(t2));\n      let n2 = this[e24] !== t2;\n      return this[e24] = t2, n2 && this.constructor.cacheProperties.includes(e24) && (this.dirty = true), this.parent && (this.dirty || n2 && this.constructor.stateProperties.includes(e24)) && this.parent._set(`dirty`, true), this;\n    }\n    isNotVisible() {\n      return this.opacity === 0 || !this.width && !this.height && this.strokeWidth === 0 || !this.visible;\n    }\n    render(e24) {\n      this.isNotVisible() || this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen() || (e24.save(), this._setupCompositeOperation(e24), this.drawSelectionBackground(e24), this.transform(e24), this._setOpacity(e24), this._setShadow(e24), this.shouldCache() ? (this.renderCache(), this.drawCacheOnCanvas(e24)) : (this._removeCacheCanvas(), this.drawObject(e24, false, {}), this.dirty = false), e24.restore());\n    }\n    drawSelectionBackground(e24) {\n    }\n    renderCache(e24) {\n      if (e24 = e24 || {}, this._cacheCanvas && this._cacheContext || this._createCacheCanvas(), this.isCacheDirty() && this._cacheContext) {\n        let { zoomX: t2, zoomY: n2, cacheTranslationX: r2, cacheTranslationY: i2 } = this, { width: a2, height: o2 } = this._cacheCanvas;\n        this.drawObject(this._cacheContext, e24.forClipping, { zoomX: t2, zoomY: n2, cacheTranslationX: r2, cacheTranslationY: i2, width: a2, height: o2, parentClipPaths: [] }), this.dirty = false;\n      }\n    }\n    _removeCacheCanvas() {\n      this._cacheCanvas = void 0, this._cacheContext = null;\n    }\n    hasStroke() {\n      return !!this.stroke && this.stroke !== `transparent` && this.strokeWidth !== 0;\n    }\n    hasFill() {\n      return !!this.fill && this.fill !== `transparent`;\n    }\n    needsItsOwnCache() {\n      return !!(this.paintFirst === `stroke` && this.hasFill() && this.hasStroke() && this.shadow) || !!this.clipPath;\n    }\n    shouldCache() {\n      return this.ownCaching = this.objectCaching && (!this.parent || !this.parent.isOnACache()) || this.needsItsOwnCache(), this.ownCaching;\n    }\n    willDrawShadow() {\n      return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n    }\n    drawClipPathOnCache(e24, t2, n2) {\n      e24.save(), t2.inverted ? e24.globalCompositeOperation = `destination-out` : e24.globalCompositeOperation = `destination-in`, e24.setTransform(1, 0, 0, 1, 0, 0), e24.drawImage(n2, 0, 0), e24.restore();\n    }\n    drawObject(e24, t2, n2) {\n      let r2 = this.fill, i2 = this.stroke;\n      t2 ? (this.fill = `black`, this.stroke = ``, this._setClippingProperties(e24)) : this._renderBackground(e24), this.fire(`before:render`, { ctx: e24 }), this._render(e24), this._drawClipPath(e24, this.clipPath, n2), this.fill = r2, this.stroke = i2;\n    }\n    createClipPathLayer(e24, t2) {\n      let n2 = F(t2), r2 = n2.getContext(`2d`);\n      if (r2.translate(t2.cacheTranslationX, t2.cacheTranslationY), r2.scale(t2.zoomX, t2.zoomY), e24._cacheCanvas = n2, t2.parentClipPaths.forEach((e25) => {\n        e25.transform(r2);\n      }), t2.parentClipPaths.push(e24), e24.absolutePositioned) {\n        let e25 = R(this.calcTransformMatrix());\n        r2.transform(e25[0], e25[1], e25[2], e25[3], e25[4], e25[5]);\n      }\n      return e24.transform(r2), e24.drawObject(r2, true, t2), n2;\n    }\n    _drawClipPath(e24, t2, n2) {\n      if (!t2) return;\n      t2._transformDone = true;\n      let r2 = this.createClipPathLayer(t2, n2);\n      this.drawClipPathOnCache(e24, t2, r2);\n    }\n    drawCacheOnCanvas(e24) {\n      e24.scale(1 / this.zoomX, 1 / this.zoomY), e24.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n    }\n    isCacheDirty(e24 = false) {\n      if (this.isNotVisible()) return false;\n      let t2 = this._cacheCanvas, n2 = this._cacheContext;\n      return !(!t2 || !n2 || e24 || !this._updateCacheCanvas()) || !!(this.dirty || this.clipPath && this.clipPath.absolutePositioned) && (t2 && n2 && !e24 && (n2.save(), n2.setTransform(1, 0, 0, 1, 0, 0), n2.clearRect(0, 0, t2.width, t2.height), n2.restore()), true);\n    }\n    _renderBackground(e24) {\n      if (!this.backgroundColor) return;\n      let t2 = this._getNonTransformedDimensions();\n      e24.fillStyle = this.backgroundColor, e24.fillRect(-t2.x / 2, -t2.y / 2, t2.x, t2.y), this._removeShadow(e24);\n    }\n    _setOpacity(e24) {\n      this.group && !this.group._transformDone ? e24.globalAlpha = this.getObjectOpacity() : e24.globalAlpha *= this.opacity;\n    }\n    _setStrokeStyles(e24, t2) {\n      let n2 = t2.stroke;\n      n2 && (e24.lineWidth = t2.strokeWidth, e24.lineCap = t2.strokeLineCap, e24.lineDashOffset = t2.strokeDashOffset, e24.lineJoin = t2.strokeLineJoin, e24.miterLimit = t2.strokeMiterLimit, V(n2) ? n2.gradientUnits === `percentage` || n2.gradientTransform || n2.patternTransform ? this._applyPatternForTransformedGradient(e24, n2) : (e24.strokeStyle = n2.toLive(e24), this._applyPatternGradientTransform(e24, n2)) : e24.strokeStyle = t2.stroke);\n    }\n    _setFillStyles(e24, { fill: t2 }) {\n      t2 && (V(t2) ? (e24.fillStyle = t2.toLive(e24), this._applyPatternGradientTransform(e24, t2)) : e24.fillStyle = t2);\n    }\n    _setClippingProperties(e24) {\n      e24.globalAlpha = 1, e24.strokeStyle = `transparent`, e24.fillStyle = `#000000`;\n    }\n    _setLineDash(e24, t2) {\n      t2 && t2.length !== 0 && e24.setLineDash(t2);\n    }\n    _setShadow(e24) {\n      if (!this.shadow) return;\n      let t2 = this.shadow, n2 = this.canvas, r2 = this.getCanvasRetinaScaling(), [i2, , , a2] = (n2 == null ? void 0 : n2.viewportTransform) || T, s3 = i2 * r2, c2 = a2 * r2, l2 = t2.nonScaling ? new N(1, 1) : this.getObjectScaling();\n      e24.shadowColor = t2.color, e24.shadowBlur = t2.blur * o.browserShadowBlurConstant * (s3 + c2) * (l2.x + l2.y) / 4, e24.shadowOffsetX = t2.offsetX * s3 * l2.x, e24.shadowOffsetY = t2.offsetY * c2 * l2.y;\n    }\n    _removeShadow(e24) {\n      this.shadow && (e24.shadowColor = ``, e24.shadowBlur = e24.shadowOffsetX = e24.shadowOffsetY = 0);\n    }\n    _applyPatternGradientTransform(e24, t2) {\n      if (!V(t2)) return { offsetX: 0, offsetY: 0 };\n      let n2 = t2.gradientTransform || t2.patternTransform, r2 = -this.width / 2 + t2.offsetX || 0, i2 = -this.height / 2 + t2.offsetY || 0;\n      return t2.gradientUnits === `percentage` ? e24.transform(this.width, 0, 0, this.height, r2, i2) : e24.transform(1, 0, 0, 1, r2, i2), n2 && e24.transform(n2[0], n2[1], n2[2], n2[3], n2[4], n2[5]), { offsetX: r2, offsetY: i2 };\n    }\n    _renderPaintInOrder(e24) {\n      this.paintFirst === `stroke` ? (this._renderStroke(e24), this._renderFill(e24)) : (this._renderFill(e24), this._renderStroke(e24));\n    }\n    _render(e24) {\n    }\n    _renderFill(e24) {\n      this.fill && (e24.save(), this._setFillStyles(e24, this), this.fillRule === `evenodd` ? e24.fill(`evenodd`) : e24.fill(), e24.restore());\n    }\n    _renderStroke(e24) {\n      if (this.stroke && this.strokeWidth !== 0) {\n        if (this.shadow && !this.shadow.affectStroke && this._removeShadow(e24), e24.save(), this.strokeUniform) {\n          let t2 = this.getObjectScaling();\n          e24.scale(1 / t2.x, 1 / t2.y);\n        }\n        this._setLineDash(e24, this.strokeDashArray), this._setStrokeStyles(e24, this), e24.stroke(), e24.restore();\n      }\n    }\n    _applyPatternForTransformedGradient(e24, t2) {\n      var n2;\n      let r2 = this._limitCacheSize(this._getCacheCanvasDimensions()), i2 = this.getCanvasRetinaScaling(), a2 = r2.x / this.scaleX / i2, o2 = r2.y / this.scaleY / i2, s3 = F({ width: Math.ceil(a2), height: Math.ceil(o2) }), c2 = s3.getContext(`2d`);\n      c2 && (c2.beginPath(), c2.moveTo(0, 0), c2.lineTo(a2, 0), c2.lineTo(a2, o2), c2.lineTo(0, o2), c2.closePath(), c2.translate(a2 / 2, o2 / 2), c2.scale(r2.zoomX / this.scaleX / i2, r2.zoomY / this.scaleY / i2), this._applyPatternGradientTransform(c2, t2), c2.fillStyle = t2.toLive(e24), c2.fill(), e24.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2), e24.scale(i2 * this.scaleX / r2.zoomX, i2 * this.scaleY / r2.zoomY), e24.strokeStyle = (n2 = c2.createPattern(s3, `no-repeat`)) == null ? `` : n2);\n    }\n    _findCenterFromElement() {\n      return new N(this.left + this.width / 2, this.top + this.height / 2);\n    }\n    clone(e24) {\n      let t2 = this.toObject(e24);\n      return this.constructor.fromObject(t2);\n    }\n    cloneAsImage(e24) {\n      let t2 = this.toCanvasElement(e24);\n      return new (M.getClass(`image`))(t2);\n    }\n    toCanvasElement(e24 = {}) {\n      let t2 = kt(this), n2 = this.group, r2 = this.shadow, i2 = Math.abs, a2 = e24.enableRetinaScaling ? v() : 1, o2 = (e24.multiplier || 1) * a2, s3 = e24.canvasProvider || ((e25) => new yt(e25, { enableRetinaScaling: false, renderOnAddRemove: false, skipOffscreen: false }));\n      delete this.group, e24.withoutTransform && Ot(this), e24.withoutShadow && (this.shadow = null), e24.viewportTransform && Pt(this, this.getViewportTransform()), this.setCoords();\n      let c2 = P(), l2 = this.getBoundingRect(), u2 = this.shadow, d2 = new N();\n      if (u2) {\n        let e25 = u2.blur, t3 = u2.nonScaling ? new N(1, 1) : this.getObjectScaling();\n        d2.x = 2 * Math.round(i2(u2.offsetX) + e25) * i2(t3.x), d2.y = 2 * Math.round(i2(u2.offsetY) + e25) * i2(t3.y);\n      }\n      let f2 = l2.width + d2.x, p2 = l2.height + d2.y;\n      c2.width = Math.ceil(f2), c2.height = Math.ceil(p2);\n      let m = s3(c2);\n      e24.format === `jpeg` && (m.backgroundColor = `#fff`), this.setPositionByOrigin(new N(m.width / 2, m.height / 2), E, E);\n      let h2 = this.canvas;\n      m._objects = [this], this.set(`canvas`, m), this.setCoords();\n      let g2 = m.toCanvasElement(o2 || 1, e24);\n      return this.set(`canvas`, h2), this.shadow = r2, n2 && (this.group = n2), this.set(t2), this.setCoords(), m._objects = [], m.destroy(), g2;\n    }\n    toDataURL(e24 = {}) {\n      return Pe(this.toCanvasElement(e24), e24.format || `png`, e24.quality || 1);\n    }\n    toBlob(e24 = {}) {\n      return Fe(this.toCanvasElement(e24), e24.format || `png`, e24.quality || 1);\n    }\n    isType(...e24) {\n      return e24.includes(this.constructor.type) || e24.includes(this.type);\n    }\n    complexity() {\n      return 1;\n    }\n    toJSON() {\n      return this.toObject();\n    }\n    rotate(e24) {\n      let { centeredRotation: t2, originX: n2, originY: r2 } = this;\n      if (t2) {\n        let { x: e25, y: t3 } = this.getRelativeCenterPoint();\n        this.originX = E, this.originY = E, this.left = e25, this.top = t3;\n      }\n      if (this.set(`angle`, e24), t2) {\n        let { x: e25, y: t3 } = this.getPositionByOrigin(n2, r2);\n        this.left = e25, this.top = t3, this.originX = n2, this.originY = r2;\n      }\n    }\n    setOnGroup() {\n    }\n    _setupCompositeOperation(e24) {\n      this.globalCompositeOperation && (e24.globalCompositeOperation = this.globalCompositeOperation);\n    }\n    dispose() {\n      ye.cancelByTarget(this), this.off(), this._set(`canvas`, void 0), this._cacheCanvas && h().dispose(this._cacheCanvas), this._cacheCanvas = void 0, this._cacheContext = null;\n    }\n    animate(e24, t2) {\n      return Object.entries(e24).reduce((e25, [n2, r2]) => (e25[n2] = this._animate(n2, r2, t2), e25), {});\n    }\n    _animate(e24, t2, n2 = {}) {\n      let r2 = e24.split(`.`), i2 = this.constructor.colorProperties.includes(r2[r2.length - 1]), { abort: a2, startValue: o2, onChange: s3, onComplete: c2 } = n2, l2 = { ...n2, target: this, startValue: o2 == null ? r2.reduce((e25, t3) => e25[t3], this) : o2, endValue: t2, abort: a2 == null ? void 0 : a2.bind(this), onChange: (e25, t3, n3) => {\n        r2.reduce((t4, n4, i3) => (i3 === r2.length - 1 && (t4[n4] = e25), t4[n4]), this), s3 && s3(e25, t3, n3);\n      }, onComplete: (e25, t3, n3) => {\n        this.setCoords(), c2 && c2(e25, t3, n3);\n      } };\n      return i2 ? Nr(l2) : Mr(l2);\n    }\n    isDescendantOf(e24) {\n      let { parent: t2, group: n2 } = this;\n      return t2 === e24 || n2 === e24 || !!t2 && t2.isDescendantOf(e24) || !!n2 && n2 !== t2 && n2.isDescendantOf(e24);\n    }\n    getAncestors() {\n      let e24 = [], t2 = this;\n      do\n        t2 = t2.parent, t2 && e24.push(t2);\n      while (t2);\n      return e24;\n    }\n    findCommonAncestors(e24) {\n      if (this === e24) return { fork: [], otherFork: [], common: [this, ...this.getAncestors()] };\n      let t2 = this.getAncestors(), n2 = e24.getAncestors();\n      if (t2.length === 0 && n2.length > 0 && this === n2[n2.length - 1]) return { fork: [], otherFork: [e24, ...n2.slice(0, n2.length - 1)], common: [this] };\n      for (let r2, i2 = 0; i2 < t2.length; i2++) {\n        if (r2 = t2[i2], r2 === e24) return { fork: [this, ...t2.slice(0, i2)], otherFork: [], common: t2.slice(i2) };\n        for (let a2 = 0; a2 < n2.length; a2++) {\n          if (this === n2[a2]) return { fork: [], otherFork: [e24, ...n2.slice(0, a2)], common: [this, ...t2] };\n          if (r2 === n2[a2]) return { fork: [this, ...t2.slice(0, i2)], otherFork: [e24, ...n2.slice(0, a2)], common: t2.slice(i2) };\n        }\n      }\n      return { fork: [this, ...t2], otherFork: [e24, ...n2], common: [] };\n    }\n    hasCommonAncestors(e24) {\n      let t2 = this.findCommonAncestors(e24);\n      return t2 && !!t2.common.length;\n    }\n    isInFrontOf(e24) {\n      if (this === e24) return;\n      let t2 = this.findCommonAncestors(e24);\n      if (t2.fork.includes(e24)) return true;\n      if (t2.otherFork.includes(this)) return false;\n      let n2 = t2.common[0] || this.canvas;\n      if (!n2) return;\n      let r2 = t2.fork.pop(), i2 = t2.otherFork.pop(), a2 = n2._objects.indexOf(r2), o2 = n2._objects.indexOf(i2);\n      return a2 > -1 && a2 > o2;\n    }\n    toObject(t2 = []) {\n      let n2 = t2.concat(e7.customProperties, this.constructor.customProperties || []), r2, i2 = o.NUM_FRACTION_DIGITS, { clipPath: a2, fill: s3, stroke: c2, shadow: l2, strokeDashArray: u2, left: d2, top: f2, originX: p2, originY: m, width: h2, height: g2, strokeWidth: _2, strokeLineCap: v2, strokeDashOffset: y2, strokeLineJoin: x2, strokeUniform: S2, strokeMiterLimit: C2, scaleX: w2, scaleY: ee2, angle: T2, flipX: E2, flipY: D2, opacity: O2, visible: k2, backgroundColor: te2, fillRule: ne2, paintFirst: re2, globalCompositeOperation: ie2, skewX: ae2, skewY: oe2 } = this;\n      a2 && !a2.excludeFromExport && (r2 = a2.toObject(n2.concat(`inverted`, `absolutePositioned`)));\n      let A2 = (e24) => B(e24, i2), se2 = { ...et(this, n2), type: this.constructor.type, version: b, originX: p2, originY: m, left: A2(d2), top: A2(f2), width: A2(h2), height: A2(g2), fill: rt(s3) ? s3.toObject() : s3, stroke: rt(c2) ? c2.toObject() : c2, strokeWidth: A2(_2), strokeDashArray: u2 && u2.concat(), strokeLineCap: v2, strokeDashOffset: y2, strokeLineJoin: x2, strokeUniform: S2, strokeMiterLimit: A2(C2), scaleX: A2(w2), scaleY: A2(ee2), angle: A2(T2), flipX: E2, flipY: D2, opacity: A2(O2), shadow: l2 && l2.toObject(), visible: k2, backgroundColor: te2, fillRule: ne2, paintFirst: re2, globalCompositeOperation: ie2, skewX: A2(ae2), skewY: A2(oe2), ...r2 ? { clipPath: r2 } : null };\n      return this.includeDefaultValues ? se2 : this._removeDefaultValues(se2);\n    }\n    toDatalessObject(e24) {\n      return this.toObject(e24);\n    }\n    _removeDefaultValues(e24) {\n      let t2 = this.constructor.getDefaults(), n2 = Object.keys(t2).length > 0 ? t2 : Object.getPrototypeOf(this);\n      return tt(e24, (e25, t3) => {\n        if (t3 === `left` || t3 === `top` || t3 === `type`) return true;\n        let r2 = n2[t3];\n        return e25 !== r2 && !(Array.isArray(e25) && Array.isArray(r2) && e25.length === 0 && r2.length === 0);\n      });\n    }\n    toString() {\n      return `#<${this.constructor.type}>`;\n    }\n    static _fromObject({ type: e24, ...t2 }, { extraParam: n2, ...r2 } = {}) {\n      return $e(t2, r2).then((e25) => n2 ? (delete e25[n2], new this(t2[n2], e25)) : new this(e25));\n    }\n    static fromObject(e24, t2) {\n      return this._fromObject(e24, t2);\n    }\n  };\n  i(Ir, `stateProperties`, Hn), i(Ir, `cacheProperties`, Un), i(Ir, `ownDefaults`, Wn), i(Ir, `type`, `FabricObject`), i(Ir, `colorProperties`, [j, he, `backgroundColor`]), i(Ir, `customProperties`, []), M.setClass(Ir), M.setClass(Ir, `object`);\n  var Lr = (e24, t2) => {\n    var n2;\n    let { transform: { target: r2 } } = t2;\n    (n2 = r2.canvas) == null || n2.fire(`object:${e24}`, { ...t2, target: r2 }), r2.fire(e24, t2);\n  };\n  var Rr = (e24, t2, n2) => (r2, i2, a2, o2) => {\n    let s3 = t2(r2, i2, a2, o2);\n    return s3 && Lr(e24, { ...Qt(r2, i2, a2, o2), ...n2 }), s3;\n  };\n  function zr(e24) {\n    return (t2, n2, r2, i2) => {\n      let { target: a2, originX: o2, originY: s3 } = n2, c2 = a2.getPositionByOrigin(o2, s3), l2 = e24(t2, n2, r2, i2);\n      return a2.setPositionByOrigin(c2, n2.originX, n2.originY), l2;\n    };\n  }\n  var Br = (e24, t2, n2, r2) => (i2, a2, o2, s3) => {\n    let c2 = en(a2, a2.originX, a2.originY, o2, s3)[n2], l2 = W(a2[t2]);\n    if (l2 === 0 || l2 > 0 && c2 < 0 || l2 < 0 && c2 > 0) {\n      let { target: t3 } = a2, n3 = t3.strokeWidth / (t3.strokeUniform ? t3[r2] : 1), i3 = Yt(a2) ? 2 : 1, o3 = t3[e24], s4 = Math.abs(c2 * i3 / t3[r2]) - n3;\n      return t3.set(e24, Math.max(s4, 1)), o3 !== t3[e24];\n    }\n    return false;\n  };\n  var Vr = Br(`width`, `originX`, `x`, `scaleX`);\n  var Hr = Br(`height`, `originY`, `y`, `scaleY`);\n  var Ur = Rr(se, zr(Vr));\n  var Wr = Rr(se, zr(Hr));\n  function Gr(e24, t2, n2, r2, i2) {\n    e24.save();\n    let { stroke: a2, xSize: o2, ySize: s3, opName: c2 } = this.commonRenderProps(e24, t2, n2, i2, r2), l2 = o2;\n    o2 > s3 ? e24.scale(1, s3 / o2) : s3 > o2 && (l2 = s3, e24.scale(o2 / s3, 1)), e24.beginPath(), e24.arc(0, 0, l2 / 2, 0, w, false), e24[c2](), a2 && e24.stroke(), e24.restore();\n  }\n  function Kr(e24, t2, n2, r2, i2) {\n    e24.save();\n    let { stroke: a2, xSize: o2, ySize: s3, opName: c2 } = this.commonRenderProps(e24, t2, n2, i2, r2), l2 = o2 / 2, u2 = s3 / 2;\n    e24[`${c2}Rect`](-l2, -u2, o2, s3), a2 && e24.strokeRect(-l2, -u2, o2, s3), e24.restore();\n  }\n  var q = class {\n    constructor(e24) {\n      i(this, `visible`, true), i(this, `actionName`, ue), i(this, `angle`, 0), i(this, `x`, 0), i(this, `y`, 0), i(this, `offsetX`, 0), i(this, `offsetY`, 0), i(this, `sizeX`, 0), i(this, `sizeY`, 0), i(this, `touchSizeX`, 0), i(this, `touchSizeY`, 0), i(this, `cursorStyle`, `crosshair`), i(this, `withConnection`, false), Object.assign(this, e24);\n    }\n    getTransformAnchorPoint() {\n      var e24;\n      return (e24 = this.transformAnchorPoint) == null ? new N(0.5 - this.x, 0.5 - this.y) : e24;\n    }\n    shouldActivate(e24, t2, n2, { tl: r2, tr: i2, br: a2, bl: o2 }) {\n      var s3;\n      return ((s3 = t2.canvas) == null ? void 0 : s3.getActiveObject()) === t2 && t2.isControlVisible(e24) && Pr.isPointInPolygon(n2, [r2, i2, a2, o2]);\n    }\n    getActionHandler(e24, t2, n2) {\n      return this.actionHandler;\n    }\n    getMouseDownHandler(e24, t2, n2) {\n      return this.mouseDownHandler;\n    }\n    getMouseUpHandler(e24, t2, n2) {\n      return this.mouseUpHandler;\n    }\n    cursorStyleHandler(e24, t2, n2, r2) {\n      return t2.cursorStyle;\n    }\n    getActionName(e24, t2, n2) {\n      return t2.actionName;\n    }\n    getVisibility(e24, t2) {\n      var n2, r2;\n      return (n2 = (r2 = e24._controlsVisibility) == null ? void 0 : r2[t2]) == null ? this.visible : n2;\n    }\n    setVisibility(e24, t2, n2) {\n      this.visible = e24;\n    }\n    positionHandler(e24, t2, n2, r2) {\n      return new N(this.x * e24.x + this.offsetX, this.y * e24.y + this.offsetY).transform(t2);\n    }\n    calcCornerCoords(e24, t2, n2, r2, i2, a2) {\n      let o2 = Re([Ue(n2, r2), We({ angle: e24 }), Ge((i2 ? this.touchSizeX : this.sizeX) || t2, (i2 ? this.touchSizeY : this.sizeY) || t2)]);\n      return { tl: new N(-0.5, -0.5).transform(o2), tr: new N(0.5, -0.5).transform(o2), br: new N(0.5, 0.5).transform(o2), bl: new N(-0.5, 0.5).transform(o2) };\n    }\n    commonRenderProps(e24, t2, n2, r2, i2 = {}) {\n      let { cornerSize: a2, cornerColor: o2, transparentCorners: s3, cornerStrokeColor: c2 } = i2, l2 = a2 || r2.cornerSize, u2 = this.sizeX || l2, d2 = this.sizeY || l2, f2 = s3 === void 0 ? r2.transparentCorners : s3, p2 = f2 ? he : j, m = c2 || r2.cornerStrokeColor, h2 = !f2 && !!m;\n      return e24.fillStyle = o2 || r2.cornerColor || ``, e24.strokeStyle = m || ``, e24.translate(t2, n2), e24.rotate(I(r2.getTotalAngle())), { stroke: h2, xSize: u2, ySize: d2, transparentCorners: f2, opName: p2 };\n    }\n    render(e24, t2, n2, r2, i2) {\n      ((r2 = r2 || {}).cornerStyle || i2.cornerStyle) === `circle` ? Gr.call(this, e24, t2, n2, r2, i2) : Kr.call(this, e24, t2, n2, r2, i2);\n    }\n  };\n  var qr = (e24, t2, n2) => n2.lockRotation ? Jt : t2.cursorStyle;\n  var Jr = Rr(ae, zr((e24, { target: t2, ex: n2, ey: r2, theta: i2, originX: a2, originY: o2 }, s3, c2) => {\n    let l2 = t2.getPositionByOrigin(a2, o2);\n    if (Zt(t2, `lockRotation`)) return false;\n    let u2 = Math.atan2(r2 - l2.y, n2 - l2.x), d2 = Ie(Math.atan2(c2 - l2.y, s3 - l2.x) - u2 + i2);\n    if (t2.snapAngle && t2.snapAngle > 0) {\n      let e25 = t2.snapAngle, n3 = t2.snapThreshold || e25, r3 = Math.ceil(d2 / e25) * e25, i3 = Math.floor(d2 / e25) * e25;\n      Math.abs(d2 - i3) < n3 ? d2 = i3 : Math.abs(d2 - r3) < n3 && (d2 = r3);\n    }\n    d2 < 0 && (d2 = 360 + d2), d2 %= 360;\n    let f2 = t2.angle !== d2;\n    return t2.angle = d2, f2;\n  }));\n  function Yr(e24, t2) {\n    let n2 = t2.canvas, r2 = e24[n2.uniScaleKey];\n    return n2.uniformScaling && !r2 || !n2.uniformScaling && r2;\n  }\n  function Xr(e24, t2, n2) {\n    let r2 = Zt(e24, `lockScalingX`), i2 = Zt(e24, `lockScalingY`);\n    if (r2 && i2 || !t2 && (r2 || i2) && n2 || r2 && t2 === `x` || i2 && t2 === `y`) return true;\n    let { width: a2, height: o2, strokeWidth: s3 } = e24;\n    return a2 === 0 && s3 === 0 && t2 !== `y` || o2 === 0 && s3 === 0 && t2 !== `x`;\n  }\n  var Zr = [`e`, `se`, `s`, `sw`, `w`, `nw`, `n`, `ne`, `e`];\n  var Qr = (e24, t2, n2, r2) => {\n    let i2 = Yr(e24, n2);\n    return Xr(n2, t2.x !== 0 && t2.y === 0 ? `x` : t2.x === 0 && t2.y !== 0 ? `y` : ``, i2) ? Jt : `${Zr[$t(n2, 0, r2)]}-resize`;\n  };\n  function $r(e24, t2, n2, r2, i2 = {}) {\n    let a2 = t2.target, o2 = i2.by, s3 = Yr(e24, a2), c2, l2, u2, d2, f2, p2;\n    if (Xr(a2, o2, s3)) return false;\n    if (t2.gestureScale) l2 = t2.scaleX * t2.gestureScale, u2 = t2.scaleY * t2.gestureScale;\n    else {\n      if (c2 = en(t2, t2.originX, t2.originY, n2, r2), f2 = o2 === `y` ? 1 : Math.sign(c2.x || t2.signX || 1), p2 = o2 === `x` ? 1 : Math.sign(c2.y || t2.signY || 1), t2.signX || (t2.signX = f2), t2.signY || (t2.signY = p2), Zt(a2, `lockScalingFlip`) && (t2.signX !== f2 || t2.signY !== p2)) return false;\n      if (d2 = a2._getTransformedDimensions(), s3 && !o2) {\n        let e25 = Math.abs(c2.x) + Math.abs(c2.y), { original: n3 } = t2, r3 = e25 / (Math.abs(d2.x * n3.scaleX / a2.scaleX) + Math.abs(d2.y * n3.scaleY / a2.scaleY));\n        l2 = n3.scaleX * r3, u2 = n3.scaleY * r3;\n      } else l2 = Math.abs(c2.x * a2.scaleX / d2.x), u2 = Math.abs(c2.y * a2.scaleY / d2.y);\n      Yt(t2) && (l2 *= 2, u2 *= 2), t2.signX !== f2 && o2 !== `y` && (t2.originX = Xt(t2.originX), l2 *= -1, t2.signX = f2), t2.signY !== p2 && o2 !== `x` && (t2.originY = Xt(t2.originY), u2 *= -1, t2.signY = p2);\n    }\n    let m = a2.scaleX, h2 = a2.scaleY;\n    return o2 ? (o2 === `x` && a2.set(`scaleX`, l2), o2 === `y` && a2.set(`scaleY`, u2)) : (!Zt(a2, `lockScalingX`) && a2.set(`scaleX`, l2), !Zt(a2, `lockScalingY`) && a2.set(`scaleY`, u2)), m !== a2.scaleX || h2 !== a2.scaleY;\n  }\n  var ei = Rr(ie, zr((e24, t2, n2, r2) => $r(e24, t2, n2, r2)));\n  var ti = Rr(ie, zr((e24, t2, n2, r2) => $r(e24, t2, n2, r2, { by: `x` })));\n  var ni = Rr(ie, zr((e24, t2, n2, r2) => $r(e24, t2, n2, r2, { by: `y` })));\n  var ri = { x: { counterAxis: `y`, scale: de, skew: pe, lockSkewing: `lockSkewingX`, origin: `originX`, flip: `flipX` }, y: { counterAxis: `x`, scale: fe, skew: me, lockSkewing: `lockSkewingY`, origin: `originY`, flip: `flipY` } };\n  var ii = [`ns`, `nesw`, `ew`, `nwse`];\n  var ai = (e24, t2, n2, r2) => t2.x !== 0 && Zt(n2, `lockSkewingY`) || t2.y !== 0 && Zt(n2, `lockSkewingX`) ? Jt : `${ii[$t(n2, 0, r2) % 4]}-resize`;\n  function oi(e24, t2, n2, r2, i2) {\n    let { target: a2 } = n2, { counterAxis: o2, origin: s3, lockSkewing: c2, skew: l2, flip: u2 } = ri[e24];\n    if (Zt(a2, c2)) return false;\n    let { origin: d2, flip: f2 } = ri[o2], p2 = W(n2[d2]) * (a2[f2] ? -1 : 1), m = -Math.sign(p2) * (a2[u2] ? -1 : 1), h2 = -(a2[l2] === 0 && en(n2, `center`, `center`, r2, i2)[e24] > 0 || a2[l2] > 0 ? 1 : -1) * m * 0.5 + 0.5;\n    return Rr(A, zr((t3, n3, r3, i3) => function(e25, { target: t4, ex: n4, ey: r4, skewingSide: i4, ...a3 }, o3) {\n      let { skew: s4 } = ri[e25], c3 = o3.subtract(new N(n4, r4)).divide(new N(t4.scaleX, t4.scaleY))[e25], l3 = t4[s4], u3 = a3[s4], d3 = Math.tan(I(u3)), f3 = e25 === `y` ? t4._getTransformedDimensions({ scaleX: 1, scaleY: 1, skewX: 0 }).x : t4._getTransformedDimensions({ scaleX: 1, scaleY: 1 }).y, p3 = 2 * c3 * i4 / Math.max(f3, 1) + d3, m2 = Ie(Math.atan(p3));\n      t4.set(s4, m2);\n      let h3 = l3 !== t4[s4];\n      if (h3 && e25 === `y`) {\n        let { skewX: e26, scaleX: n5 } = t4, r5 = t4._getTransformedDimensions({ skewY: l3 }), i5 = t4._getTransformedDimensions(), a4 = e26 === 0 ? 1 : r5.x / i5.x;\n        a4 !== 1 && t4.set(`scaleX`, a4 * n5);\n      }\n      return h3;\n    }(e24, n3, new N(r3, i3))))(t2, { ...n2, [s3]: h2, skewingSide: m }, r2, i2);\n  }\n  var si = (e24, t2, n2, r2) => oi(`x`, e24, t2, n2, r2);\n  var ci = (e24, t2, n2, r2) => oi(`y`, e24, t2, n2, r2);\n  function li(e24, t2) {\n    return e24[t2.canvas.altActionKey];\n  }\n  var ui = (e24, t2, n2) => {\n    let r2 = li(e24, n2);\n    return t2.x === 0 ? r2 ? pe : fe : t2.y === 0 ? r2 ? me : de : ``;\n  };\n  var di = (e24, t2, n2, r2) => li(e24, n2) ? ai(0, t2, n2, r2) : Qr(e24, t2, n2, r2);\n  var fi = (e24, t2, n2, r2) => li(e24, t2.target) ? ci(e24, t2, n2, r2) : ti(e24, t2, n2, r2);\n  var pi = (e24, t2, n2, r2) => li(e24, t2.target) ? si(e24, t2, n2, r2) : ni(e24, t2, n2, r2);\n  var mi = () => ({ ml: new q({ x: -0.5, y: 0, cursorStyleHandler: di, actionHandler: fi, getActionName: ui }), mr: new q({ x: 0.5, y: 0, cursorStyleHandler: di, actionHandler: fi, getActionName: ui }), mb: new q({ x: 0, y: 0.5, cursorStyleHandler: di, actionHandler: pi, getActionName: ui }), mt: new q({ x: 0, y: -0.5, cursorStyleHandler: di, actionHandler: pi, getActionName: ui }), tl: new q({ x: -0.5, y: -0.5, cursorStyleHandler: Qr, actionHandler: ei }), tr: new q({ x: 0.5, y: -0.5, cursorStyleHandler: Qr, actionHandler: ei }), bl: new q({ x: -0.5, y: 0.5, cursorStyleHandler: Qr, actionHandler: ei }), br: new q({ x: 0.5, y: 0.5, cursorStyleHandler: Qr, actionHandler: ei }), mtr: new q({ x: 0, y: -0.5, actionHandler: Jr, cursorStyleHandler: qr, offsetY: -40, withConnection: true, actionName: oe }) });\n  var hi = () => ({ mr: new q({ x: 0.5, y: 0, actionHandler: Ur, cursorStyleHandler: di, actionName: se }), ml: new q({ x: -0.5, y: 0, actionHandler: Ur, cursorStyleHandler: di, actionName: se }) });\n  var gi = () => ({ ...mi(), ...hi() });\n  var _i = class e8 extends Ir {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e8.ownDefaults };\n    }\n    constructor(t2) {\n      super(), Object.assign(this, this.constructor.createControls(), e8.ownDefaults), this.setOptions(t2);\n    }\n    static createControls() {\n      return { controls: mi() };\n    }\n    _updateCacheCanvas() {\n      let e24 = this.canvas;\n      if (this.noScaleCache && e24 && e24._currentTransform) {\n        let t2 = e24._currentTransform, n2 = t2.target, r2 = t2.action;\n        if (this === n2 && r2 && r2.startsWith(`scale`)) return false;\n      }\n      return super._updateCacheCanvas();\n    }\n    getActiveControl() {\n      let e24 = this.__corner;\n      return e24 ? { key: e24, control: this.controls[e24], coord: this.oCoords[e24] } : void 0;\n    }\n    findControl(e24, t2 = false) {\n      if (!this.hasControls || !this.canvas) return;\n      this.__corner = void 0;\n      let n2 = Object.entries(this.oCoords);\n      for (let r2 = n2.length - 1; r2 >= 0; r2--) {\n        let [i2, a2] = n2[r2], o2 = this.controls[i2];\n        if (o2.shouldActivate(i2, this, e24, t2 ? a2.touchCorner : a2.corner)) return this.__corner = i2, { key: i2, control: o2, coord: this.oCoords[i2] };\n      }\n    }\n    calcOCoords() {\n      let e24 = this.getViewportTransform(), t2 = Be(e24), n2 = Ve(e24), r2 = this.getCenterPoint(), i2 = z(z(e24, z(Ue(r2.x, r2.y), We({ angle: this.getTotalAngle() - (this.group && this.flipX ? 180 : 0) }))), [1 / t2, 0, 0, 1 / n2, 0, 0]), a2 = this.group ? He(this.calcTransformMatrix()) : void 0;\n      a2 && (a2.scaleX = Math.abs(a2.scaleX), a2.scaleY = Math.abs(a2.scaleY));\n      let o2 = this._calculateCurrentDimensions(a2), s3 = {};\n      return this.forEachControl((e25, t3) => {\n        let n3 = e25.positionHandler(o2, i2, this, e25);\n        s3[t3] = Object.assign(n3, this._calcCornerCoords(e25, n3));\n      }), s3;\n    }\n    _calcCornerCoords(e24, t2) {\n      let n2 = this.getTotalAngle();\n      return { corner: e24.calcCornerCoords(n2, this.cornerSize, t2.x, t2.y, false, this), touchCorner: e24.calcCornerCoords(n2, this.touchCornerSize, t2.x, t2.y, true, this) };\n    }\n    setCoords() {\n      super.setCoords(), this.canvas && (this.oCoords = this.calcOCoords());\n    }\n    forEachControl(e24) {\n      for (let t2 in this.controls) e24(this.controls[t2], t2, this);\n    }\n    drawSelectionBackground(e24) {\n      if (!this.selectionBackgroundColor || this.canvas && this.canvas._activeObject !== this) return;\n      e24.save();\n      let t2 = this.getRelativeCenterPoint(), n2 = this._calculateCurrentDimensions(), r2 = this.getViewportTransform();\n      e24.translate(t2.x, t2.y), e24.scale(1 / r2[0], 1 / r2[3]), e24.rotate(I(this.angle)), e24.fillStyle = this.selectionBackgroundColor, e24.fillRect(-n2.x / 2, -n2.y / 2, n2.x, n2.y), e24.restore();\n    }\n    strokeBorders(e24, t2) {\n      e24.strokeRect(-t2.x / 2, -t2.y / 2, t2.x, t2.y);\n    }\n    _drawBorders(e24, t2, n2 = {}) {\n      let r2 = { hasControls: this.hasControls, borderColor: this.borderColor, borderDashArray: this.borderDashArray, ...n2 };\n      e24.save(), e24.strokeStyle = r2.borderColor, this._setLineDash(e24, r2.borderDashArray), this.strokeBorders(e24, t2), r2.hasControls && this.drawControlsConnectingLines(e24, t2), e24.restore();\n    }\n    _renderControls(e24, t2 = {}) {\n      let { hasBorders: n2, hasControls: r2 } = this, i2 = { hasBorders: n2, hasControls: r2, ...t2 }, a2 = this.getViewportTransform(), o2 = i2.hasBorders, s3 = i2.hasControls, c2 = He(z(a2, this.calcTransformMatrix()));\n      e24.save(), e24.translate(c2.translateX, c2.translateY), e24.lineWidth = this.borderScaleFactor, this.group === this.parent && (e24.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1), this.flipX && (c2.angle -= 180);\n      let l2 = ze(a2);\n      e24.rotate(this.group ? I(c2.angle) : I(this.angle) + l2), o2 && this.drawBorders(e24, c2, t2), s3 && this.drawControls(e24, t2), e24.restore();\n    }\n    drawBorders(e24, t2, n2) {\n      let r2;\n      if (n2 && n2.forActiveSelection || this.group) {\n        let e25 = At(this.width, this.height, Ye(t2)), n3 = this.isStrokeAccountedForInDimensions() ? we : (this.strokeUniform ? new N().scalarAdd(this.canvas ? this.canvas.getZoom() : 1) : new N(t2.scaleX, t2.scaleY)).scalarMultiply(this.strokeWidth);\n        r2 = e25.add(n3).scalarAdd(this.borderScaleFactor).scalarAdd(2 * this.padding);\n      } else r2 = this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);\n      this._drawBorders(e24, r2, n2);\n    }\n    drawControlsConnectingLines(e24, t2) {\n      let n2 = false;\n      e24.beginPath(), this.forEachControl((r2, i2) => {\n        r2.withConnection && r2.getVisibility(this, i2) && (n2 = true, e24.moveTo(r2.x * t2.x, r2.y * t2.y), e24.lineTo(r2.x * t2.x + r2.offsetX, r2.y * t2.y + r2.offsetY));\n      }), n2 && e24.stroke();\n    }\n    drawControls(e24, t2 = {}) {\n      e24.save();\n      let n2 = this.getCanvasRetinaScaling(), { cornerStrokeColor: r2, cornerDashArray: i2, cornerColor: a2 } = this, o2 = { cornerStrokeColor: r2, cornerDashArray: i2, cornerColor: a2, ...t2 };\n      e24.setTransform(n2, 0, 0, n2, 0, 0), e24.strokeStyle = e24.fillStyle = o2.cornerColor, this.transparentCorners || (e24.strokeStyle = o2.cornerStrokeColor), this._setLineDash(e24, o2.cornerDashArray), this.forEachControl((t3, n3) => {\n        if (t3.getVisibility(this, n3)) {\n          let r3 = this.oCoords[n3];\n          t3.render(e24, r3.x, r3.y, o2, this);\n        }\n      }), e24.restore();\n    }\n    isControlVisible(e24) {\n      return this.controls[e24] && this.controls[e24].getVisibility(this, e24);\n    }\n    setControlVisible(e24, t2) {\n      this._controlsVisibility || (this._controlsVisibility = {}), this._controlsVisibility[e24] = t2;\n    }\n    setControlsVisibility(e24 = {}) {\n      Object.entries(e24).forEach(([e25, t2]) => this.setControlVisible(e25, t2));\n    }\n    clearContextTop(e24) {\n      if (!this.canvas) return;\n      let t2 = this.canvas.contextTop;\n      if (!t2) return;\n      let n2 = this.canvas.viewportTransform;\n      t2.save(), t2.transform(n2[0], n2[1], n2[2], n2[3], n2[4], n2[5]), this.transform(t2);\n      let r2 = this.width + 4, i2 = this.height + 4;\n      return t2.clearRect(-r2 / 2, -i2 / 2, r2, i2), e24 || t2.restore(), t2;\n    }\n    onDeselect(e24) {\n      return false;\n    }\n    onSelect(e24) {\n      return false;\n    }\n    shouldStartDragging(e24) {\n      return false;\n    }\n    onDragStart(e24) {\n      return false;\n    }\n    canDrop(e24) {\n      return false;\n    }\n    renderDragSourceEffect(e24) {\n    }\n    renderDropTargetEffect(e24) {\n    }\n  };\n  function vi(e24, t2) {\n    return t2.forEach((t3) => {\n      Object.getOwnPropertyNames(t3.prototype).forEach((n2) => {\n        n2 !== `constructor` && Object.defineProperty(e24.prototype, n2, Object.getOwnPropertyDescriptor(t3.prototype, n2) || /* @__PURE__ */ Object.create(null));\n      });\n    }), e24;\n  }\n  i(_i, `ownDefaults`, { noScaleCache: true, lockMovementX: false, lockMovementY: false, lockRotation: false, lockScalingX: false, lockScalingY: false, lockSkewingX: false, lockSkewingY: false, lockScalingFlip: false, cornerSize: 13, touchCornerSize: 24, transparentCorners: true, cornerColor: `rgb(178,204,255)`, cornerStrokeColor: ``, cornerStyle: `rect`, cornerDashArray: null, hasControls: true, borderColor: `rgb(178,204,255)`, borderDashArray: null, borderOpacityWhenMoving: 0.4, borderScaleFactor: 1, hasBorders: true, selectionBackgroundColor: ``, selectable: true, evented: true, perPixelTargetFind: false, activeOn: `down`, hoverCursor: null, moveCursor: null });\n  var J = class extends _i {\n  };\n  vi(J, [gn]), M.setClass(J), M.setClass(J, `object`);\n  var yi = (e24, t2, n2, r2) => {\n    let i2 = 2 * (r2 = Math.round(r2)) + 1, { data: a2 } = e24.getImageData(t2 - r2, n2 - r2, i2, i2);\n    for (let e25 = 3; e25 < a2.length; e25 += 4) if (a2[e25] > 0) return false;\n    return true;\n  };\n  var bi = class {\n    constructor(e24) {\n      this.options = e24, this.strokeProjectionMagnitude = this.options.strokeWidth / 2, this.scale = new N(this.options.scaleX, this.options.scaleY), this.strokeUniformScalar = this.options.strokeUniform ? new N(1 / this.options.scaleX, 1 / this.options.scaleY) : new N(1, 1);\n    }\n    createSideVector(e24, t2) {\n      let n2 = zt(e24, t2);\n      return this.options.strokeUniform ? n2.multiply(this.scale) : n2;\n    }\n    projectOrthogonally(e24, t2, n2) {\n      return this.applySkew(e24.add(this.calcOrthogonalProjection(e24, t2, n2)));\n    }\n    isSkewed() {\n      return this.options.skewX !== 0 || this.options.skewY !== 0;\n    }\n    applySkew(e24) {\n      let t2 = new N(e24);\n      return t2.y += t2.x * Math.tan(I(this.options.skewY)), t2.x += t2.y * Math.tan(I(this.options.skewX)), t2;\n    }\n    scaleUnitVector(e24, t2) {\n      return e24.multiply(this.strokeUniformScalar).scalarMultiply(t2);\n    }\n  };\n  var xi = new N();\n  var Si = class e9 extends bi {\n    static getOrthogonalRotationFactor(e24, t2) {\n      let n2 = t2 ? Vt(e24, t2) : Ht(e24);\n      return Math.abs(n2) < S ? -1 : 1;\n    }\n    constructor(e24, t2, n2, r2) {\n      super(r2), i(this, `AB`, void 0), i(this, `AC`, void 0), i(this, `alpha`, void 0), i(this, `bisector`, void 0), this.A = new N(e24), this.B = new N(t2), this.C = new N(n2), this.AB = this.createSideVector(this.A, this.B), this.AC = this.createSideVector(this.A, this.C), this.alpha = Vt(this.AB, this.AC), this.bisector = Ut(Rt(this.AB.eq(xi) ? this.AC : this.AB, this.alpha / 2));\n    }\n    calcOrthogonalProjection(t2, n2, r2 = this.strokeProjectionMagnitude) {\n      let i2 = Wt(this.createSideVector(t2, n2)), a2 = e9.getOrthogonalRotationFactor(i2, this.bisector);\n      return this.scaleUnitVector(i2, r2 * a2);\n    }\n    projectBevel() {\n      let e24 = [];\n      return (this.alpha % w === 0 ? [this.B] : [this.B, this.C]).forEach((t2) => {\n        e24.push(this.projectOrthogonally(this.A, t2)), e24.push(this.projectOrthogonally(this.A, t2, -this.strokeProjectionMagnitude));\n      }), e24;\n    }\n    projectMiter() {\n      let e24 = [], t2 = Math.abs(this.alpha), n2 = 1 / Math.sin(t2 / 2), r2 = this.scaleUnitVector(this.bisector, -this.strokeProjectionMagnitude * n2), i2 = this.options.strokeUniform ? Bt(this.scaleUnitVector(this.bisector, this.options.strokeMiterLimit)) : this.options.strokeMiterLimit;\n      return Bt(r2) / this.strokeProjectionMagnitude <= i2 && e24.push(this.applySkew(this.A.add(r2))), e24.push(...this.projectBevel()), e24;\n    }\n    projectRoundNoSkew(t2, n2) {\n      let r2 = [], i2 = new N(e9.getOrthogonalRotationFactor(this.bisector), e9.getOrthogonalRotationFactor(new N(this.bisector.y, this.bisector.x)));\n      return [new N(1, 0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(i2), new N(0, 1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(i2)].forEach((e24) => {\n        qt(e24, t2, n2) && r2.push(this.A.add(e24));\n      }), r2;\n    }\n    projectRoundWithSkew(e24, t2) {\n      let n2 = [], { skewX: r2, skewY: i2, scaleX: a2, scaleY: o2, strokeUniform: s3 } = this.options, c2 = new N(Math.tan(I(r2)), Math.tan(I(i2))), l2 = this.strokeProjectionMagnitude, u2 = s3 ? l2 / o2 / Math.sqrt(1 / o2 ** 2 + 1 / a2 ** 2 * c2.y ** 2) : l2 / Math.sqrt(1 + c2.y ** 2), d2 = new N(Math.sqrt(Math.max(l2 ** 2 - u2 ** 2, 0)), u2), f2 = s3 ? l2 / Math.sqrt(1 + c2.x ** 2 * (1 / o2) ** 2 / (1 / a2 + 1 / a2 * c2.x * c2.y) ** 2) : l2 / Math.sqrt(1 + c2.x ** 2 / (1 + c2.x * c2.y) ** 2), p2 = new N(f2, Math.sqrt(Math.max(l2 ** 2 - f2 ** 2, 0)));\n      return [p2, p2.scalarMultiply(-1), d2, d2.scalarMultiply(-1)].map((e25) => this.applySkew(s3 ? e25.multiply(this.strokeUniformScalar) : e25)).forEach((r3) => {\n        qt(r3, e24, t2) && n2.push(this.applySkew(this.A).add(r3));\n      }), n2;\n    }\n    projectRound() {\n      let e24 = [];\n      e24.push(...this.projectBevel());\n      let t2 = this.alpha % w === 0, n2 = this.applySkew(this.A), r2 = e24[t2 ? 0 : 2].subtract(n2), i2 = e24[+!!t2].subtract(n2), a2 = Gt(r2, t2 ? this.applySkew(this.AB.scalarMultiply(-1)) : this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1))) > 0, o2 = a2 ? r2 : i2, s3 = a2 ? i2 : r2;\n      return this.isSkewed() ? e24.push(...this.projectRoundWithSkew(o2, s3)) : e24.push(...this.projectRoundNoSkew(o2, s3)), e24;\n    }\n    projectPoints() {\n      switch (this.options.strokeLineJoin) {\n        case `miter`:\n          return this.projectMiter();\n        case `round`:\n          return this.projectRound();\n        default:\n          return this.projectBevel();\n      }\n    }\n    project() {\n      return this.projectPoints().map((e24) => ({ originPoint: this.A, projectedPoint: e24, angle: this.alpha, bisector: this.bisector }));\n    }\n  };\n  var Ci = class extends bi {\n    constructor(e24, t2, n2) {\n      super(n2), this.A = new N(e24), this.T = new N(t2);\n    }\n    calcOrthogonalProjection(e24, t2, n2 = this.strokeProjectionMagnitude) {\n      let r2 = this.createSideVector(e24, t2);\n      return this.scaleUnitVector(Wt(r2), n2);\n    }\n    projectButt() {\n      return [this.projectOrthogonally(this.A, this.T, this.strokeProjectionMagnitude), this.projectOrthogonally(this.A, this.T, -this.strokeProjectionMagnitude)];\n    }\n    projectRound() {\n      let e24 = [];\n      if (!this.isSkewed() && this.A.eq(this.T)) {\n        let t2 = new N(1, 1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);\n        e24.push(this.applySkew(this.A.add(t2)), this.applySkew(this.A.subtract(t2)));\n      } else e24.push(...new Si(this.A, this.T, this.T, this.options).projectRound());\n      return e24;\n    }\n    projectSquare() {\n      let e24 = [];\n      if (this.A.eq(this.T)) {\n        let t2 = new N(1, 1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);\n        e24.push(this.A.add(t2), this.A.subtract(t2));\n      } else {\n        let t2 = this.calcOrthogonalProjection(this.A, this.T, this.strokeProjectionMagnitude), n2 = this.scaleUnitVector(Ut(this.createSideVector(this.A, this.T)), -this.strokeProjectionMagnitude), r2 = this.A.add(n2);\n        e24.push(r2.add(t2), r2.subtract(t2));\n      }\n      return e24.map((e25) => this.applySkew(e25));\n    }\n    projectPoints() {\n      switch (this.options.strokeLineCap) {\n        case `round`:\n          return this.projectRound();\n        case `square`:\n          return this.projectSquare();\n        default:\n          return this.projectButt();\n      }\n    }\n    project() {\n      return this.projectPoints().map((e24) => ({ originPoint: this.A, projectedPoint: e24 }));\n    }\n  };\n  var wi = (e24, t2, n2 = false) => {\n    let r2 = [];\n    if (e24.length === 0) return r2;\n    let i2 = e24.reduce((e25, t3) => (e25[e25.length - 1].eq(t3) || e25.push(new N(t3)), e25), [new N(e24[0])]);\n    if (i2.length === 1) n2 = true;\n    else if (!n2) {\n      let e25 = i2[0], t3 = ((e26, t4) => {\n        for (let n3 = e26.length - 1; n3 >= 0; n3--) if (t4(e26[n3], n3, e26)) return n3;\n        return -1;\n      })(i2, (t4) => !t4.eq(e25));\n      i2.splice(t3 + 1);\n    }\n    return i2.forEach((e25, i3, a2) => {\n      let o2, s3;\n      i3 === 0 ? (s3 = a2[1], o2 = n2 ? e25 : a2[a2.length - 1]) : i3 === a2.length - 1 ? (o2 = a2[i3 - 1], s3 = n2 ? e25 : a2[0]) : (o2 = a2[i3 - 1], s3 = a2[i3 + 1]), n2 && a2.length === 1 ? r2.push(...new Ci(e25, e25, t2).project()) : !n2 || i3 !== 0 && i3 !== a2.length - 1 ? r2.push(...new Si(e25, o2, s3, t2).project()) : r2.push(...new Ci(e25, i3 === 0 ? s3 : o2, t2).project());\n    }), r2;\n  };\n  var Ti = (e24) => {\n    let t2 = {};\n    return Object.keys(e24).forEach((n2) => {\n      t2[n2] = {}, Object.keys(e24[n2]).forEach((r2) => {\n        t2[n2][r2] = { ...e24[n2][r2] };\n      });\n    }), t2;\n  };\n  var Ei = (e24, t2, n2 = false) => e24.fill !== t2.fill || e24.stroke !== t2.stroke || e24.strokeWidth !== t2.strokeWidth || e24.fontSize !== t2.fontSize || e24.fontFamily !== t2.fontFamily || e24.fontWeight !== t2.fontWeight || e24.fontStyle !== t2.fontStyle || e24.textDecorationThickness !== t2.textDecorationThickness || e24.textDecorationColor !== t2.textDecorationColor || e24.textBackgroundColor !== t2.textBackgroundColor || e24.deltaY !== t2.deltaY || n2 && (e24.overline !== t2.overline || e24.underline !== t2.underline || e24.linethrough !== t2.linethrough);\n  var Di = (e24, t2) => {\n    let n2 = t2.split(`\n`), r2 = [], i2 = -1, a2 = {};\n    e24 = Ti(e24);\n    for (let t3 = 0; t3 < n2.length; t3++) {\n      let o2 = gt(n2[t3]);\n      if (e24[t3]) for (let n3 = 0; n3 < o2.length; n3++) {\n        i2++;\n        let o3 = e24[t3][n3];\n        o3 && Object.keys(o3).length > 0 && (Ei(a2, o3, true) ? r2.push({ start: i2, end: i2 + 1, style: o3 }) : r2[r2.length - 1].end++), a2 = o3 || {};\n      }\n      else i2 += o2.length, a2 = {};\n    }\n    return r2;\n  };\n  var Oi = (e24, t2) => {\n    if (!Array.isArray(e24)) return Ti(e24);\n    let n2 = t2.split(ne), r2 = {}, i2 = -1, a2 = 0;\n    for (let t3 = 0; t3 < n2.length; t3++) {\n      let o2 = gt(n2[t3]);\n      for (let n3 = 0; n3 < o2.length; n3++) i2++, e24[a2] && e24[a2].start <= i2 && i2 < e24[a2].end && (r2[t3] = r2[t3] || {}, r2[t3][n3] = { ...e24[a2].style }, i2 === e24[a2].end - 1 && a2++);\n    }\n    return r2;\n  };\n  var ki = [`display`, `transform`, j, `fill-opacity`, `fill-rule`, `opacity`, he, `stroke-dasharray`, `stroke-linecap`, `stroke-dashoffset`, `stroke-linejoin`, `stroke-miterlimit`, `stroke-opacity`, `stroke-width`, `id`, `paint-order`, `vector-effect`, `instantiated_by_use`, `clip-path`];\n  function Ai(e24, t2) {\n    let n2 = e24.nodeName, r2 = e24.getAttribute(`class`), i2 = e24.getAttribute(`id`), a2 = `(?![a-zA-Z\\\\-]+)`, o2;\n    if (o2 = RegExp(`^` + n2, `i`), t2 = t2.replace(o2, ``), i2 && t2.length && (o2 = RegExp(`#` + i2 + a2, `i`), t2 = t2.replace(o2, ``)), r2 && t2.length) {\n      let e25 = r2.split(` `);\n      for (let n3 = e25.length; n3--; ) o2 = RegExp(`\\\\.` + e25[n3] + a2, `i`), t2 = t2.replace(o2, ``);\n    }\n    return t2.length === 0;\n  }\n  function ji(e24, t2) {\n    let n2 = true, r2 = Ai(e24, t2.pop());\n    return r2 && t2.length && (n2 = function(e25, t3) {\n      let n3, r3 = true;\n      for (; e25.parentElement && e25.parentElement.nodeType === 1 && t3.length; ) r3 && (n3 = t3.pop()), r3 = Ai(e25 = e25.parentElement, n3);\n      return t3.length === 0;\n    }(e24, t2)), r2 && n2 && t2.length === 0;\n  }\n  function Mi(e24, t2 = {}) {\n    let n2 = {};\n    for (let r2 in t2) ji(e24, r2.split(` `)) && (n2 = { ...n2, ...t2[r2] });\n    return n2;\n  }\n  var Ni = (e24) => {\n    var t2;\n    return (t2 = jn[e24]) == null ? e24 : t2;\n  };\n  var Pi = RegExp(`(${Dn})`, `gi`);\n  var Y = `(${Dn})`;\n  var Fi = String.raw`(skewX)\\(${Y}\\)`;\n  var Ii = String.raw`(skewY)\\(${Y}\\)`;\n  var Li = String.raw`(rotate)\\(${Y}(?: ${Y} ${Y})?\\)`;\n  var Ri = String.raw`(scale)\\(${Y}(?: ${Y})?\\)`;\n  var zi = String.raw`(translate)\\(${Y}(?: ${Y})?\\)`;\n  var Bi = `(?:${String.raw`(matrix)\\(${Y} ${Y} ${Y} ${Y} ${Y} ${Y}\\)`}|${zi}|${Li}|${Ri}|${Fi}|${Ii})`;\n  var Vi = `(?:${Bi}*)`;\n  var Hi = String.raw`^\\s*(?:${Vi}?)\\s*$`;\n  var Ui = new RegExp(Hi);\n  var Wi = new RegExp(Bi);\n  var Gi = new RegExp(Bi, `g`);\n  function Ki(e24) {\n    let t2 = [];\n    if (!(e24 = ((e25) => on(e25.replace(Pi, ` $1 `).replace(/,/gi, ` `)))(e24).replace(/\\s*([()])\\s*/gi, `$1`)) || e24 && !Ui.test(e24)) return [...T];\n    for (let n2 of e24.matchAll(Gi)) {\n      let e25 = Wi.exec(n2[0]);\n      if (!e25) continue;\n      let r2 = T, [, i2, ...a2] = e25.filter((e26) => !!e26), [o2, s3, c2, l2, u2, d2] = a2.map((e26) => parseFloat(e26));\n      switch (i2) {\n        case `translate`:\n          r2 = Ue(o2, s3);\n          break;\n        case oe:\n          r2 = We({ angle: o2 }, { x: s3, y: c2 });\n          break;\n        case ue:\n          r2 = Ge(o2, s3);\n          break;\n        case pe:\n          r2 = qe(o2);\n          break;\n        case me:\n          r2 = Je(o2);\n          break;\n        case `matrix`:\n          r2 = [o2, s3, c2, l2, u2, d2];\n      }\n      t2.push(r2);\n    }\n    return Re(t2);\n  }\n  function qi(e24, t2, n2, r2) {\n    let i2 = Array.isArray(t2), a2, o2 = t2;\n    if (e24 !== `fill` && e24 !== `stroke` || t2 !== `none`) {\n      if (e24 === `strokeUniform`) return t2 === `non-scaling-stroke`;\n      if (e24 === `strokeDashArray`) o2 = t2 === `none` ? null : t2.replace(/,/g, ` `).split(/\\s+/).map(parseFloat);\n      else if (e24 === `transformMatrix`) o2 = n2 && n2.transformMatrix ? z(n2.transformMatrix, Ki(t2)) : Ki(t2);\n      else if (e24 === `visible`) o2 = t2 !== `none` && t2 !== `hidden`, n2 && false === n2.visible && (o2 = false);\n      else if (e24 === `opacity`) o2 = parseFloat(t2), n2 && n2.opacity !== void 0 && (o2 *= n2.opacity);\n      else if (e24 === `textAnchor`) o2 = t2 === `start` ? D : t2 === `end` ? k : E;\n      else if (e24 === `charSpacing` || e24 === `textDecorationThickness`) a2 = K(t2, r2) / r2 * 1e3;\n      else if (e24 === `paintFirst`) {\n        let e25 = t2.indexOf(j), n3 = t2.indexOf(he);\n        o2 = j, (e25 > -1 && n3 > -1 && n3 < e25 || e25 === -1 && n3 > -1) && (o2 = he);\n      } else {\n        if (e24 === `href` || e24 === `xlink:href` || e24 === `font` || e24 === `id`) return t2;\n        if (e24 === `imageSmoothing`) return t2 === `optimizeQuality`;\n        a2 = i2 ? t2.map(K) : K(t2, r2);\n      }\n    } else o2 = ``;\n    return !i2 && isNaN(a2) ? o2 : a2;\n  }\n  function Ji(e24, t2) {\n    e24.replace(/;\\s*$/, ``).split(`;`).forEach((e25) => {\n      if (!e25) return;\n      let [n2, r2] = e25.split(`:`);\n      t2[n2.trim().toLowerCase()] = r2.trim();\n    });\n  }\n  function Yi(e24) {\n    let t2 = {}, n2 = e24.getAttribute(`style`);\n    return n2 && (typeof n2 == `string` ? Ji(n2, t2) : function(e25, t3) {\n      Object.entries(e25).forEach(([e26, n3]) => {\n        n3 !== void 0 && (t3[e26.toLowerCase()] = n3);\n      });\n    }(n2, t2)), t2;\n  }\n  var Xi = { stroke: `strokeOpacity`, fill: `fillOpacity` };\n  function Zi(e24, t2, n2) {\n    if (!e24) return {};\n    let r2, i2 = {}, a2 = 16;\n    e24.parentNode && In.test(e24.parentNode.nodeName) && (i2 = Zi(e24.parentElement, t2, n2), i2.fontSize && (r2 = a2 = K(i2.fontSize)));\n    let o2 = { ...t2.reduce((t3, n3) => {\n      let r3 = e24.getAttribute(n3);\n      return r3 && (t3[n3] = r3), t3;\n    }, {}), ...Mi(e24, n2), ...Yi(e24) };\n    o2[`clip-path`] && e24.setAttribute(Nn, o2[Nn]), o2[`font-size`] && (r2 = K(o2[Mn], a2), o2[Mn] = `${r2}`);\n    let s3 = {};\n    for (let e25 in o2) {\n      let t3 = Ni(e25);\n      s3[t3] = qi(t3, o2[e25], i2, r2);\n    }\n    s3 && s3.font && function(e25, t3) {\n      let n3 = e25.match(An);\n      if (!n3) return;\n      let r3 = n3[1], i3 = n3[3], a3 = n3[4], o3 = n3[5], s4 = n3[6];\n      r3 && (t3.fontStyle = r3), i3 && (t3.fontWeight = isNaN(parseFloat(i3)) ? i3 : parseFloat(i3)), a3 && (t3.fontSize = K(a3)), s4 && (t3.fontFamily = s4), o3 && (t3.lineHeight = o3 === `normal` ? 1 : o3);\n    }(s3.font, s3);\n    let c2 = { ...i2, ...s3 };\n    return In.test(e24.nodeName) ? c2 : function(e25) {\n      let t3 = J.getDefaults();\n      return Object.entries(Xi).forEach(([n3, r3]) => {\n        if (e25[r3] === void 0 || e25[n3] === ``) return;\n        if (e25[n3] === void 0) {\n          if (!t3[n3]) return;\n          e25[n3] = t3[n3];\n        }\n        if (e25[n3].indexOf(`url(`) === 0) return;\n        let i3 = new G(e25[n3]);\n        e25[n3] = i3.setAlpha(B(i3.getAlpha() * e25[r3], 2)).toRgba();\n      }), e25;\n    }(c2);\n  }\n  var Qi = [`rx`, `ry`];\n  var $i = class e10 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e10.ownDefaults };\n    }\n    constructor(t2) {\n      super(), Object.assign(this, e10.ownDefaults), this.setOptions(t2), this._initRxRy();\n    }\n    _initRxRy() {\n      let { rx: e24, ry: t2 } = this;\n      e24 && !t2 ? this.ry = e24 : t2 && !e24 && (this.rx = t2);\n    }\n    _render(e24) {\n      let { width: t2, height: n2 } = this, r2 = -t2 / 2, i2 = -n2 / 2, a2 = this.rx ? Math.min(this.rx, t2 / 2) : 0, o2 = this.ry ? Math.min(this.ry, n2 / 2) : 0, s3 = a2 !== 0 || o2 !== 0;\n      e24.beginPath(), e24.moveTo(r2 + a2, i2), e24.lineTo(r2 + t2 - a2, i2), s3 && e24.bezierCurveTo(r2 + t2 - 0.4477152502 * a2, i2, r2 + t2, i2 + 0.4477152502 * o2, r2 + t2, i2 + o2), e24.lineTo(r2 + t2, i2 + n2 - o2), s3 && e24.bezierCurveTo(r2 + t2, i2 + n2 - 0.4477152502 * o2, r2 + t2 - 0.4477152502 * a2, i2 + n2, r2 + t2 - a2, i2 + n2), e24.lineTo(r2 + a2, i2 + n2), s3 && e24.bezierCurveTo(r2 + 0.4477152502 * a2, i2 + n2, r2, i2 + n2 - 0.4477152502 * o2, r2, i2 + n2 - o2), e24.lineTo(r2, i2 + o2), s3 && e24.bezierCurveTo(r2, i2 + 0.4477152502 * o2, r2 + 0.4477152502 * a2, i2, r2 + a2, i2), e24.closePath(), this._renderPaintInOrder(e24);\n    }\n    toObject(e24 = []) {\n      return super.toObject([...Qi, ...e24]);\n    }\n    _toSVG() {\n      let { width: e24, height: t2, rx: n2, ry: r2 } = this;\n      return [`<rect `, `COMMON_PARTS`, `x=\"${-e24 / 2}\" y=\"${-t2 / 2}\" rx=\"${U(n2)}\" ry=\"${U(r2)}\" width=\"${U(e24)}\" height=\"${U(t2)}\" />\n`];\n    }\n    static async fromElement(e24, t2, n2) {\n      let { left: r2 = 0, top: i2 = 0, width: a2 = 0, height: o2 = 0, visible: s3 = true, ...c2 } = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return new this({ ...t2, ...c2, left: r2, top: i2, width: a2, height: o2, visible: !!(s3 && a2 && o2) });\n    }\n  };\n  i($i, `type`, `Rect`), i($i, `cacheProperties`, [...Un, ...Qi]), i($i, `ownDefaults`, { rx: 0, ry: 0 }), i($i, `ATTRIBUTE_NAMES`, [...ki, `x`, `y`, `rx`, `ry`, `width`, `height`]), M.setClass($i), M.setSVGClass($i);\n  var ea = `initialization`;\n  var ta = `added`;\n  var na = (e24, t2) => {\n    let { strokeUniform: n2, strokeWidth: r2, width: i2, height: a2, group: o2 } = t2, s3 = o2 && o2 !== e24 ? jt(o2.calcTransformMatrix(), e24.calcTransformMatrix()) : null, c2 = s3 ? t2.getRelativeCenterPoint().transform(s3) : t2.getRelativeCenterPoint(), l2 = !t2.isStrokeAccountedForInDimensions(), u2 = n2 && l2 ? Nt(new N(r2, r2), void 0, e24.calcTransformMatrix()) : we, d2 = !n2 && l2 ? r2 : 0, f2 = At(i2 + d2, a2 + d2, Re([s3, t2.calcOwnMatrix()], true)).add(u2).scalarDivide(2);\n    return [c2.subtract(f2), c2.add(f2)];\n  };\n  var ra = class {\n    calcLayoutResult(e24, t2) {\n      if (this.shouldPerformLayout(e24)) return this.calcBoundingBox(t2, e24);\n    }\n    shouldPerformLayout({ type: e24, prevStrategy: t2, strategy: n2 }) {\n      return e24 === `initialization` || e24 === `imperative` || !!t2 && n2 !== t2;\n    }\n    shouldLayoutClipPath({ type: e24, target: { clipPath: t2 } }) {\n      return e24 !== `initialization` && t2 && !t2.absolutePositioned;\n    }\n    getInitialSize(e24, t2) {\n      return t2.size;\n    }\n    calcBoundingBox(e24, t2) {\n      let { type: n2, target: r2 } = t2;\n      if (n2 === `imperative` && t2.overrides) return t2.overrides;\n      if (e24.length === 0) return;\n      let { left: i2, top: a2, width: o2, height: s3 } = wt(e24.map((e25) => na(r2, e25)).reduce((e25, t3) => e25.concat(t3), [])), c2 = new N(o2, s3), l2 = new N(i2, a2).add(c2.scalarDivide(2));\n      if (n2 === `initialization`) {\n        let e25 = this.getInitialSize(t2, { size: c2, center: l2 });\n        return { center: l2, relativeCorrection: new N(0, 0), size: e25 };\n      }\n      return { center: l2.transform(r2.calcOwnMatrix()), size: c2 };\n    }\n  };\n  i(ra, `type`, `strategy`);\n  var ia = class extends ra {\n    shouldPerformLayout(e24) {\n      return true;\n    }\n  };\n  i(ia, `type`, `fit-content`), M.setClass(ia);\n  var aa = `layoutManager`;\n  var oa = class {\n    constructor(e24 = new ia()) {\n      i(this, `strategy`, void 0), this.strategy = e24, this._subscriptions = /* @__PURE__ */ new Map();\n    }\n    performLayout(e24) {\n      let t2 = { bubbles: true, strategy: this.strategy, ...e24, prevStrategy: this._prevLayoutStrategy, stopPropagation() {\n        this.bubbles = false;\n      } };\n      this.onBeforeLayout(t2);\n      let n2 = this.getLayoutResult(t2);\n      n2 && this.commitLayout(t2, n2), this.onAfterLayout(t2, n2), this._prevLayoutStrategy = t2.strategy;\n    }\n    attachHandlers(e24, t2) {\n      let { target: n2 } = t2;\n      return [ge, re, se, ae, ie, A, le, ce, `modifyPath`].map((t3) => e24.on(t3, (e25) => this.performLayout(t3 === `modified` ? { type: `object_modified`, trigger: t3, e: e25, target: n2 } : { type: `object_modifying`, trigger: t3, e: e25, target: n2 })));\n    }\n    subscribe(e24, t2) {\n      this.unsubscribe(e24, t2);\n      let n2 = this.attachHandlers(e24, t2);\n      this._subscriptions.set(e24, n2);\n    }\n    unsubscribe(e24, t2) {\n      (this._subscriptions.get(e24) || []).forEach((e25) => e25()), this._subscriptions.delete(e24);\n    }\n    unsubscribeTargets(e24) {\n      e24.targets.forEach((t2) => this.unsubscribe(t2, e24));\n    }\n    subscribeTargets(e24) {\n      e24.targets.forEach((t2) => this.subscribe(t2, e24));\n    }\n    onBeforeLayout(e24) {\n      let { target: t2, type: n2 } = e24, { canvas: r2 } = t2;\n      if (n2 === `initialization` || n2 === `added` ? this.subscribeTargets(e24) : n2 === `removed` && this.unsubscribeTargets(e24), t2.fire(`layout:before`, { context: e24 }), r2 && r2.fire(`object:layout:before`, { target: t2, context: e24 }), n2 === `imperative` && e24.deep) {\n        let { strategy: n3, ...r3 } = e24;\n        t2.forEachObject((e25) => e25.layoutManager && e25.layoutManager.performLayout({ ...r3, bubbles: false, target: e25 }));\n      }\n    }\n    getLayoutResult(e24) {\n      let { target: t2, strategy: n2, type: r2 } = e24, i2 = n2.calcLayoutResult(e24, t2.getObjects());\n      if (!i2) return;\n      let a2 = r2 === `initialization` ? new N() : t2.getRelativeCenterPoint(), { center: o2, correction: s3 = new N(), relativeCorrection: c2 = new N() } = i2;\n      return { result: i2, prevCenter: a2, nextCenter: o2, offset: a2.subtract(o2).add(s3).transform(r2 === `initialization` ? T : R(t2.calcOwnMatrix()), true).add(c2) };\n    }\n    commitLayout(e24, t2) {\n      let { target: n2 } = e24, { result: { size: r2 }, nextCenter: i2 } = t2;\n      var a2, o2;\n      n2.set({ width: r2.x, height: r2.y }), this.layoutObjects(e24, t2), e24.type === `initialization` ? n2.set({ left: (a2 = e24.x) == null ? i2.x + r2.x * W(n2.originX) : a2, top: (o2 = e24.y) == null ? i2.y + r2.y * W(n2.originY) : o2 }) : (n2.setPositionByOrigin(i2, E, E), n2.setCoords(), n2.set(`dirty`, true));\n    }\n    layoutObjects(e24, t2) {\n      let { target: n2 } = e24;\n      n2.forEachObject((r2) => {\n        r2.group === n2 && this.layoutObject(e24, t2, r2);\n      }), e24.strategy.shouldLayoutClipPath(e24) && this.layoutObject(e24, t2, n2.clipPath);\n    }\n    layoutObject(e24, { offset: t2 }, n2) {\n      n2.set({ left: n2.left + t2.x, top: n2.top + t2.y });\n    }\n    onAfterLayout(e24, t2) {\n      let { target: n2, strategy: r2, bubbles: i2, prevStrategy: a2, ...o2 } = e24, { canvas: s3 } = n2;\n      n2.fire(`layout:after`, { context: e24, result: t2 }), s3 && s3.fire(`object:layout:after`, { context: e24, result: t2, target: n2 });\n      let c2 = n2.parent;\n      i2 && c2 != null && c2.layoutManager && ((o2.path || (o2.path = [])).push(n2), c2.layoutManager.performLayout({ ...o2, target: c2 })), n2.set(`dirty`, true);\n    }\n    dispose() {\n      let { _subscriptions: e24 } = this;\n      e24.forEach((e25) => e25.forEach((e26) => e26())), e24.clear();\n    }\n    toObject() {\n      return { type: aa, strategy: this.strategy.constructor.type };\n    }\n    toJSON() {\n      return this.toObject();\n    }\n  };\n  M.setClass(oa, aa);\n  var sa = class extends oa {\n    performLayout() {\n    }\n  };\n  var ca = class e11 extends Ee(J) {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e11.ownDefaults };\n    }\n    constructor(t2 = [], n2 = {}) {\n      super(), i(this, `_activeObjects`, []), i(this, `__objectSelectionTracker`, void 0), i(this, `__objectSelectionDisposer`, void 0), Object.assign(this, e11.ownDefaults), this.setOptions(n2), this.groupInit(t2, n2);\n    }\n    groupInit(e24, t2) {\n      var n2;\n      this._objects = [...e24], this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(this, true), this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(this, false), this.forEachObject((e25) => {\n        this.enterGroup(e25, false);\n      }), this.layoutManager = (n2 = t2.layoutManager) == null ? new oa() : n2, this.layoutManager.performLayout({ type: ea, target: this, targets: [...e24], x: t2.left, y: t2.top });\n    }\n    canEnterGroup(e24) {\n      return e24 === this || this.isDescendantOf(e24) ? (s(`error`, `Group: circular object trees are not supported, this call has no effect`), false) : this._objects.indexOf(e24) === -1 || (s(`error`, `Group: duplicate objects are not supported inside group, this call has no effect`), false);\n    }\n    _filterObjectsBeforeEnteringGroup(e24) {\n      return e24.filter((e25, t2, n2) => this.canEnterGroup(e25) && n2.indexOf(e25) === t2);\n    }\n    add(...e24) {\n      let t2 = this._filterObjectsBeforeEnteringGroup(e24), n2 = super.add(...t2);\n      return this._onAfterObjectsChange(ta, t2), n2;\n    }\n    insertAt(e24, ...t2) {\n      let n2 = this._filterObjectsBeforeEnteringGroup(t2), r2 = super.insertAt(e24, ...n2);\n      return this._onAfterObjectsChange(ta, n2), r2;\n    }\n    remove(...e24) {\n      let t2 = super.remove(...e24);\n      return this._onAfterObjectsChange(`removed`, t2), t2;\n    }\n    _onObjectAdded(e24) {\n      this.enterGroup(e24, true), this.fire(`object:added`, { target: e24 }), e24.fire(`added`, { target: this });\n    }\n    _onObjectRemoved(e24, t2) {\n      this.exitGroup(e24, t2), this.fire(`object:removed`, { target: e24 }), e24.fire(`removed`, { target: this });\n    }\n    _onAfterObjectsChange(e24, t2) {\n      this.layoutManager.performLayout({ type: e24, targets: t2, target: this });\n    }\n    _onStackOrderChanged() {\n      this._set(`dirty`, true);\n    }\n    _set(e24, t2) {\n      let n2 = this[e24];\n      return super._set(e24, t2), e24 === `canvas` && n2 !== t2 && (this._objects || []).forEach((n3) => {\n        n3._set(e24, t2);\n      }), this;\n    }\n    _shouldSetNestedCoords() {\n      return this.subTargetCheck;\n    }\n    removeAll() {\n      return this._activeObjects = [], this.remove(...this._objects);\n    }\n    __objectSelectionMonitor(e24, { target: t2 }) {\n      let n2 = this._activeObjects;\n      if (e24) n2.push(t2), this._set(`dirty`, true);\n      else if (n2.length > 0) {\n        let e25 = n2.indexOf(t2);\n        e25 > -1 && (n2.splice(e25, 1), this._set(`dirty`, true));\n      }\n    }\n    _watchObject(e24, t2) {\n      e24 && this._watchObject(false, t2), e24 ? (t2.on(`selected`, this.__objectSelectionTracker), t2.on(`deselected`, this.__objectSelectionDisposer)) : (t2.off(`selected`, this.__objectSelectionTracker), t2.off(`deselected`, this.__objectSelectionDisposer));\n    }\n    enterGroup(e24, t2) {\n      e24.group && e24.group.remove(e24), e24._set(`parent`, this), this._enterGroup(e24, t2);\n    }\n    _enterGroup(e24, t2) {\n      t2 && Dt(e24, z(R(this.calcTransformMatrix()), e24.calcTransformMatrix())), this._shouldSetNestedCoords() && e24.setCoords(), e24._set(`group`, this), e24._set(`canvas`, this.canvas), this._watchObject(true, e24);\n      let n2 = this.canvas && this.canvas.getActiveObject && this.canvas.getActiveObject();\n      n2 && (n2 === e24 || e24.isDescendantOf(n2)) && this._activeObjects.push(e24);\n    }\n    exitGroup(e24, t2) {\n      this._exitGroup(e24, t2), e24._set(`parent`, void 0), e24._set(`canvas`, void 0);\n    }\n    _exitGroup(e24, t2) {\n      e24._set(`group`, void 0), t2 || (Dt(e24, z(this.calcTransformMatrix(), e24.calcTransformMatrix())), e24.setCoords()), this._watchObject(false, e24);\n      let n2 = this._activeObjects.length > 0 ? this._activeObjects.indexOf(e24) : -1;\n      n2 > -1 && this._activeObjects.splice(n2, 1);\n    }\n    shouldCache() {\n      let e24 = J.prototype.shouldCache.call(this);\n      if (e24) {\n        for (let e25 = 0; e25 < this._objects.length; e25++) if (this._objects[e25].willDrawShadow()) return this.ownCaching = false, false;\n      }\n      return e24;\n    }\n    willDrawShadow() {\n      if (super.willDrawShadow()) return true;\n      for (let e24 = 0; e24 < this._objects.length; e24++) if (this._objects[e24].willDrawShadow()) return true;\n      return false;\n    }\n    isOnACache() {\n      return this.ownCaching || !!this.parent && this.parent.isOnACache();\n    }\n    drawObject(e24, t2, n2) {\n      this._renderBackground(e24);\n      for (let t3 = 0; t3 < this._objects.length; t3++) {\n        var r2;\n        let n3 = this._objects[t3];\n        (r2 = this.canvas) != null && r2.preserveObjectStacking && n3.group !== this ? (e24.save(), e24.transform(...R(this.calcTransformMatrix())), n3.render(e24), e24.restore()) : n3.group === this && n3.render(e24);\n      }\n      this._drawClipPath(e24, this.clipPath, n2);\n    }\n    setCoords() {\n      super.setCoords(), this._shouldSetNestedCoords() && this.forEachObject((e24) => e24.setCoords());\n    }\n    triggerLayout(e24 = {}) {\n      this.layoutManager.performLayout({ target: this, type: `imperative`, ...e24 });\n    }\n    render(e24) {\n      this._transformDone = true, super.render(e24), this._transformDone = false;\n    }\n    __serializeObjects(e24, t2) {\n      let n2 = this.includeDefaultValues;\n      return this._objects.filter(function(e25) {\n        return !e25.excludeFromExport;\n      }).map(function(r2) {\n        let i2 = r2.includeDefaultValues;\n        r2.includeDefaultValues = n2;\n        let a2 = r2[e24 || `toObject`](t2);\n        return r2.includeDefaultValues = i2, a2;\n      });\n    }\n    toObject(e24 = []) {\n      let t2 = this.layoutManager.toObject();\n      return { ...super.toObject([`subTargetCheck`, `interactive`, ...e24]), ...t2.strategy !== `fit-content` || this.includeDefaultValues ? { layoutManager: t2 } : {}, objects: this.__serializeObjects(`toObject`, e24) };\n    }\n    toString() {\n      return `#<Group: (${this.complexity()})>`;\n    }\n    dispose() {\n      this.layoutManager.unsubscribeTargets({ targets: this.getObjects(), target: this }), this._activeObjects = [], this.forEachObject((e24) => {\n        this._watchObject(false, e24), e24.dispose();\n      }), super.dispose();\n    }\n    _createSVGBgRect(e24) {\n      if (!this.backgroundColor) return ``;\n      let t2 = $i.prototype._toSVG.call(this), n2 = t2.indexOf(`COMMON_PARTS`);\n      t2[n2] = `for=\"group\" `;\n      let r2 = t2.join(``);\n      return e24 ? e24(r2) : r2;\n    }\n    _toSVG(e24) {\n      let t2 = [`<g `, `COMMON_PARTS`, ` >\n`], n2 = this._createSVGBgRect(e24);\n      n2 && t2.push(`\t\t`, n2);\n      for (let n3 = 0; n3 < this._objects.length; n3++) t2.push(`\t\t`, this._objects[n3].toSVG(e24));\n      return t2.push(`</g>\n`), t2;\n    }\n    getSvgStyles() {\n      let e24 = this.opacity !== void 0 && this.opacity !== 1 ? `opacity: ${U(this.opacity)};` : ``, t2 = this.visible ? `` : ` visibility: hidden;`;\n      return [e24, this.getSvgFilter(), t2].join(``);\n    }\n    toClipPathSVG(e24) {\n      let t2 = [], n2 = this._createSVGBgRect(e24);\n      n2 && t2.push(`\t`, n2);\n      for (let n3 = 0; n3 < this._objects.length; n3++) t2.push(`\t`, this._objects[n3].toClipPathSVG(e24));\n      return this._createBaseClipPathSVGMarkup(t2, { reviver: e24 });\n    }\n    static fromObject({ type: e24, objects: t2 = [], layoutManager: n2, ...r2 }, i2) {\n      return Promise.all([Qe(t2, i2), $e(r2, i2)]).then(([e25, t3]) => {\n        let i3 = new this(e25, { ...r2, ...t3, layoutManager: new sa() });\n        return i3.layoutManager = n2 ? new (M.getClass(n2.type))(new (M.getClass(n2.strategy))()) : new oa(), i3.layoutManager.subscribeTargets({ type: ea, target: i3, targets: i3.getObjects() }), i3.setCoords(), i3;\n      });\n    }\n  };\n  i(ca, `type`, `Group`), i(ca, `ownDefaults`, { strokeWidth: 0, subTargetCheck: false, interactive: false }), M.setClass(ca);\n  var la = (e24, t2) => e24 && e24.length === 1 ? e24[0] : new ca(e24, t2);\n  var ua = (e24, t2) => Math.min(t2.width / e24.width, t2.height / e24.height);\n  var da = (e24, t2) => Math.max(t2.width / e24.width, t2.height / e24.height);\n  var fa = `\\\\s*,?\\\\s*`;\n  var pa = `${fa}(${Dn})`;\n  var ma = `${pa}${pa}${pa}${fa}([01])${fa}([01])${pa}${pa}`;\n  var ha = { m: `l`, M: `L` };\n  var ga = (e24, t2, n2, r2, i2, a2, o2, s3, c2, l2, u2) => {\n    let d2 = Se(e24), f2 = Ce(e24), p2 = Se(t2), m = Ce(t2), h2 = n2 * i2 * p2 - r2 * a2 * m + o2, g2 = r2 * i2 * p2 + n2 * a2 * m + s3;\n    return [`C`, l2 + c2 * (-n2 * i2 * f2 - r2 * a2 * d2), u2 + c2 * (-r2 * i2 * f2 + n2 * a2 * d2), h2 + c2 * (n2 * i2 * m + r2 * a2 * p2), g2 + c2 * (r2 * i2 * m - n2 * a2 * p2), h2, g2];\n  };\n  var _a = (e24, t2, n2, r2) => {\n    let i2 = Math.atan2(t2, e24), a2 = Math.atan2(r2, n2);\n    return a2 >= i2 ? a2 - i2 : 2 * Math.PI - (i2 - a2);\n  };\n  function va(e24, t2, n2, r2, i2, a2, s3, c2) {\n    let l2;\n    if (o.cachesBoundsOfCurve && (l2 = [...arguments].join(), y.boundsOfCurveCache[l2])) return y.boundsOfCurveCache[l2];\n    let u2 = Math.sqrt, d2 = Math.abs, f2 = [], p2 = [[0, 0], [0, 0]], m = 6 * e24 - 12 * n2 + 6 * i2, h2 = -3 * e24 + 9 * n2 - 9 * i2 + 3 * s3, g2 = 3 * n2 - 3 * e24;\n    for (let e25 = 0; e25 < 2; ++e25) {\n      if (e25 > 0 && (m = 6 * t2 - 12 * r2 + 6 * a2, h2 = -3 * t2 + 9 * r2 - 9 * a2 + 3 * c2, g2 = 3 * r2 - 3 * t2), d2(h2) < 1e-12) {\n        if (d2(m) < 1e-12) continue;\n        let e26 = -g2 / m;\n        0 < e26 && e26 < 1 && f2.push(e26);\n        continue;\n      }\n      let n3 = m * m - 4 * g2 * h2;\n      if (n3 < 0) continue;\n      let i3 = u2(n3), o2 = (-m + i3) / (2 * h2);\n      0 < o2 && o2 < 1 && f2.push(o2);\n      let s4 = (-m - i3) / (2 * h2);\n      0 < s4 && s4 < 1 && f2.push(s4);\n    }\n    let _2 = f2.length, v2 = _2, b2 = Sa(e24, t2, n2, r2, i2, a2, s3, c2);\n    for (; _2--; ) {\n      let { x: e25, y: t3 } = b2(f2[_2]);\n      p2[0][_2] = e25, p2[1][_2] = t3;\n    }\n    p2[0][v2] = e24, p2[1][v2] = t2, p2[0][v2 + 1] = s3, p2[1][v2 + 1] = c2;\n    let x2 = [new N(Math.min(...p2[0]), Math.min(...p2[1])), new N(Math.max(...p2[0]), Math.max(...p2[1]))];\n    return o.cachesBoundsOfCurve && (y.boundsOfCurveCache[l2] = x2), x2;\n  }\n  var ya = (e24, t2, [n2, r2, i2, a2, o2, s3, c2, l2]) => {\n    let u2 = ((e25, t3, n3, r3, i3, a3, o3) => {\n      if (n3 === 0 || r3 === 0) return [];\n      let s4 = 0, c3 = 0, l3 = 0, u3 = Math.PI, d2 = o3 * ee, f2 = Ce(d2), p2 = Se(d2), m = 0.5 * (-p2 * e25 - f2 * t3), h2 = 0.5 * (-p2 * t3 + f2 * e25), g2 = n3 ** 2, _2 = r3 ** 2, v2 = h2 ** 2, y2 = m ** 2, b2 = g2 * _2 - g2 * v2 - _2 * y2, x2 = Math.abs(n3), S2 = Math.abs(r3);\n      if (b2 < 0) {\n        let e26 = Math.sqrt(1 - b2 / (g2 * _2));\n        x2 *= e26, S2 *= e26;\n      } else l3 = (i3 === a3 ? -1 : 1) * Math.sqrt(b2 / (g2 * v2 + _2 * y2));\n      let C2 = l3 * x2 * h2 / S2, w2 = -l3 * S2 * m / x2, T2 = p2 * C2 - f2 * w2 + 0.5 * e25, E2 = f2 * C2 + p2 * w2 + 0.5 * t3, D2 = _a(1, 0, (m - C2) / x2, (h2 - w2) / S2), O2 = _a((m - C2) / x2, (h2 - w2) / S2, (-m - C2) / x2, (-h2 - w2) / S2);\n      a3 === 0 && O2 > 0 ? O2 -= 2 * u3 : a3 === 1 && O2 < 0 && (O2 += 2 * u3);\n      let k2 = Math.ceil(Math.abs(O2 / u3 * 2)), te2 = [], ne2 = O2 / k2, re2 = 8 / 3 * Math.sin(ne2 / 4) * Math.sin(ne2 / 4) / Math.sin(ne2 / 2), ie2 = D2 + ne2;\n      for (let e26 = 0; e26 < k2; e26++) te2[e26] = ga(D2, ie2, p2, f2, x2, S2, T2, E2, re2, s4, c3), s4 = te2[e26][5], c3 = te2[e26][6], D2 = ie2, ie2 += ne2;\n      return te2;\n    })(c2 - e24, l2 - t2, r2, i2, o2, s3, a2);\n    for (let n3 = 0, r3 = u2.length; n3 < r3; n3++) u2[n3][1] += e24, u2[n3][2] += t2, u2[n3][3] += e24, u2[n3][4] += t2, u2[n3][5] += e24, u2[n3][6] += t2;\n    return u2;\n  };\n  var ba = (e24) => {\n    let t2 = 0, n2 = 0, r2 = 0, i2 = 0, a2 = [], o2, s3 = 0, c2 = 0;\n    for (let l2 of e24) {\n      let e25 = [...l2], u2;\n      switch (e25[0]) {\n        case `l`:\n          e25[1] += t2, e25[2] += n2;\n        case `L`:\n          t2 = e25[1], n2 = e25[2], u2 = [`L`, t2, n2];\n          break;\n        case `h`:\n          e25[1] += t2;\n        case `H`:\n          t2 = e25[1], u2 = [`L`, t2, n2];\n          break;\n        case `v`:\n          e25[1] += n2;\n        case `V`:\n          n2 = e25[1], u2 = [`L`, t2, n2];\n          break;\n        case `m`:\n          e25[1] += t2, e25[2] += n2;\n        case `M`:\n          t2 = e25[1], n2 = e25[2], r2 = e25[1], i2 = e25[2], u2 = [`M`, t2, n2];\n          break;\n        case `c`:\n          e25[1] += t2, e25[2] += n2, e25[3] += t2, e25[4] += n2, e25[5] += t2, e25[6] += n2;\n        case `C`:\n          s3 = e25[3], c2 = e25[4], t2 = e25[5], n2 = e25[6], u2 = [`C`, e25[1], e25[2], s3, c2, t2, n2];\n          break;\n        case `s`:\n          e25[1] += t2, e25[2] += n2, e25[3] += t2, e25[4] += n2;\n        case `S`:\n          o2 === `C` ? (s3 = 2 * t2 - s3, c2 = 2 * n2 - c2) : (s3 = t2, c2 = n2), t2 = e25[3], n2 = e25[4], u2 = [`C`, s3, c2, e25[1], e25[2], t2, n2], s3 = u2[3], c2 = u2[4];\n          break;\n        case `q`:\n          e25[1] += t2, e25[2] += n2, e25[3] += t2, e25[4] += n2;\n        case `Q`:\n          s3 = e25[1], c2 = e25[2], t2 = e25[3], n2 = e25[4], u2 = [`Q`, s3, c2, t2, n2];\n          break;\n        case `t`:\n          e25[1] += t2, e25[2] += n2;\n        case `T`:\n          o2 === `Q` ? (s3 = 2 * t2 - s3, c2 = 2 * n2 - c2) : (s3 = t2, c2 = n2), t2 = e25[1], n2 = e25[2], u2 = [`Q`, s3, c2, t2, n2];\n          break;\n        case `a`:\n          e25[6] += t2, e25[7] += n2;\n        case `A`:\n          ya(t2, n2, e25).forEach((e26) => a2.push(e26)), t2 = e25[6], n2 = e25[7];\n          break;\n        case `z`:\n        case `Z`:\n          t2 = r2, n2 = i2, u2 = [`Z`];\n      }\n      u2 ? (a2.push(u2), o2 = u2[0]) : o2 = ``;\n    }\n    return a2;\n  };\n  var xa = (e24, t2, n2, r2) => Math.sqrt((n2 - e24) ** 2 + (r2 - t2) ** 2);\n  var Sa = (e24, t2, n2, r2, i2, a2, o2, s3) => (c2) => {\n    let l2 = c2 ** 3, u2 = ((e25) => 3 * e25 ** 2 * (1 - e25))(c2), d2 = ((e25) => 3 * e25 * (1 - e25) ** 2)(c2), f2 = ((e25) => (1 - e25) ** 3)(c2);\n    return new N(o2 * l2 + i2 * u2 + n2 * d2 + e24 * f2, s3 * l2 + a2 * u2 + r2 * d2 + t2 * f2);\n  };\n  var Ca = (e24) => e24 ** 2;\n  var wa = (e24) => 2 * e24 * (1 - e24);\n  var Ta = (e24) => (1 - e24) ** 2;\n  var Ea = (e24, t2, n2, r2, i2, a2, o2, s3) => (c2) => {\n    let l2 = Ca(c2), u2 = wa(c2), d2 = Ta(c2), f2 = 3 * (d2 * (n2 - e24) + u2 * (i2 - n2) + l2 * (o2 - i2)), p2 = 3 * (d2 * (r2 - t2) + u2 * (a2 - r2) + l2 * (s3 - a2));\n    return Math.atan2(p2, f2);\n  };\n  var Da = (e24, t2, n2, r2, i2, a2) => (o2) => {\n    let s3 = Ca(o2), c2 = wa(o2), l2 = Ta(o2);\n    return new N(i2 * s3 + n2 * c2 + e24 * l2, a2 * s3 + r2 * c2 + t2 * l2);\n  };\n  var Oa = (e24, t2, n2, r2, i2, a2) => (o2) => {\n    let s3 = 1 - o2, c2 = 2 * (s3 * (n2 - e24) + o2 * (i2 - n2)), l2 = 2 * (s3 * (r2 - t2) + o2 * (a2 - r2));\n    return Math.atan2(l2, c2);\n  };\n  var ka = (e24, t2, n2) => {\n    let r2 = new N(t2, n2), i2 = 0;\n    for (let t3 = 1; t3 <= 100; t3 += 1) {\n      let n3 = e24(t3 / 100);\n      i2 += xa(r2.x, r2.y, n3.x, n3.y), r2 = n3;\n    }\n    return i2;\n  };\n  var Aa = (e24, t2) => {\n    let n2, r2 = 0, i2 = 0, a2 = { x: e24.x, y: e24.y }, o2 = { ...a2 }, s3 = 0.01, c2 = 0, l2 = e24.iterator, u2 = e24.angleFinder;\n    for (; i2 < t2 && s3 > 1e-4; ) o2 = l2(r2), c2 = r2, n2 = xa(a2.x, a2.y, o2.x, o2.y), n2 + i2 > t2 ? (r2 -= s3, s3 /= 2) : (a2 = o2, r2 += s3, i2 += n2);\n    return { ...o2, angle: u2(c2) };\n  };\n  var ja = (e24) => {\n    let t2, n2, r2 = 0, i2 = 0, a2 = 0, o2 = 0, s3 = 0, c2 = [];\n    for (let l2 of e24) {\n      let e25 = { x: i2, y: a2, command: l2[0], length: 0 };\n      switch (l2[0]) {\n        case `M`:\n          n2 = e25, n2.x = o2 = i2 = l2[1], n2.y = s3 = a2 = l2[2];\n          break;\n        case `L`:\n          n2 = e25, n2.length = xa(i2, a2, l2[1], l2[2]), i2 = l2[1], a2 = l2[2];\n          break;\n        case `C`:\n          t2 = Sa(i2, a2, l2[1], l2[2], l2[3], l2[4], l2[5], l2[6]), n2 = e25, n2.iterator = t2, n2.angleFinder = Ea(i2, a2, l2[1], l2[2], l2[3], l2[4], l2[5], l2[6]), n2.length = ka(t2, i2, a2), i2 = l2[5], a2 = l2[6];\n          break;\n        case `Q`:\n          t2 = Da(i2, a2, l2[1], l2[2], l2[3], l2[4]), n2 = e25, n2.iterator = t2, n2.angleFinder = Oa(i2, a2, l2[1], l2[2], l2[3], l2[4]), n2.length = ka(t2, i2, a2), i2 = l2[3], a2 = l2[4];\n          break;\n        case `Z`:\n          n2 = e25, n2.destX = o2, n2.destY = s3, n2.length = xa(i2, a2, o2, s3), i2 = o2, a2 = s3;\n      }\n      r2 += n2.length, c2.push(n2);\n    }\n    return c2.push({ length: r2, x: i2, y: a2 }), c2;\n  };\n  var Ma = (e24, t2, n2 = ja(e24)) => {\n    let r2 = 0;\n    for (; t2 - n2[r2].length > 0 && r2 < n2.length - 2; ) t2 -= n2[r2].length, r2++;\n    let i2 = n2[r2], a2 = t2 / i2.length, o2 = e24[r2];\n    switch (i2.command) {\n      case `M`:\n        return { x: i2.x, y: i2.y, angle: 0 };\n      case `Z`:\n        return { ...new N(i2.x, i2.y).lerp(new N(i2.destX, i2.destY), a2), angle: Math.atan2(i2.destY - i2.y, i2.destX - i2.x) };\n      case `L`:\n        return { ...new N(i2.x, i2.y).lerp(new N(o2[1], o2[2]), a2), angle: Math.atan2(o2[2] - i2.y, o2[1] - i2.x) };\n      case `C`:\n      case `Q`:\n        return Aa(i2, t2);\n    }\n  };\n  var Na = RegExp(`[mzlhvcsqta][^mzlhvcsqta]*`, `gi`);\n  var Pa = new RegExp(ma, `g`);\n  var Fa = new RegExp(Dn, `gi`);\n  var Ia = { m: 2, l: 2, h: 1, v: 1, c: 6, s: 4, q: 4, t: 2, a: 7 };\n  var La = (e24) => {\n    var t2;\n    let n2 = [], r2 = (t2 = e24.match(Na)) == null ? [] : t2;\n    for (let e25 of r2) {\n      let t3 = e25[0];\n      if (t3 === `z` || t3 === `Z`) {\n        n2.push([t3]);\n        continue;\n      }\n      let r3 = Ia[t3.toLowerCase()], i2 = [];\n      if (t3 === `a` || t3 === `A`) {\n        let t4;\n        for (Pa.lastIndex = 0; t4 = Pa.exec(e25); ) i2.push(...t4.slice(1));\n      } else i2 = e25.match(Fa) || [];\n      for (let e26 = 0; e26 < i2.length; e26 += r3) {\n        let a2 = Array(r3), o2 = ha[t3];\n        a2[0] = e26 > 0 && o2 ? o2 : t3;\n        for (let t4 = 0; t4 < r3; t4++) a2[t4 + 1] = parseFloat(i2[e26 + t4]);\n        n2.push(a2);\n      }\n    }\n    return n2;\n  };\n  var Ra = (e24, t2 = 0) => {\n    let n2 = new N(e24[0]), r2 = new N(e24[1]), i2 = 1, a2 = 0, o2 = [], s3 = e24.length, c2 = s3 > 2, l2;\n    for (c2 && (i2 = e24[2].x < r2.x ? -1 : e24[2].x === r2.x ? 0 : 1, a2 = e24[2].y < r2.y ? -1 : e24[2].y === r2.y ? 0 : 1), o2.push([`M`, n2.x - i2 * t2, n2.y - a2 * t2]), l2 = 1; l2 < s3; l2++) {\n      if (!n2.eq(r2)) {\n        let e25 = n2.midPointFrom(r2);\n        o2.push([`Q`, n2.x, n2.y, e25.x, e25.y]);\n      }\n      n2 = e24[l2], l2 + 1 < e24.length && (r2 = e24[l2 + 1]);\n    }\n    return c2 && (i2 = n2.x > e24[l2 - 2].x ? 1 : n2.x === e24[l2 - 2].x ? 0 : -1, a2 = n2.y > e24[l2 - 2].y ? 1 : n2.y === e24[l2 - 2].y ? 0 : -1), o2.push([`L`, n2.x + i2 * t2, n2.y + a2 * t2]), o2;\n  };\n  var za = (e24, t2, n2) => (n2 && (t2 = z(t2, [1, 0, 0, 1, -n2.x, -n2.y])), e24.map((e25) => {\n    let n3 = [...e25];\n    for (let r2 = 1; r2 < e25.length - 1; r2 += 2) {\n      let { x: i2, y: a2 } = L({ x: e25[r2], y: e25[r2 + 1] }, t2);\n      n3[r2] = i2, n3[r2 + 1] = a2;\n    }\n    return n3;\n  }));\n  var Ba = (e24, t2) => {\n    let n2 = 2 * Math.PI / e24, r2 = -S;\n    e24 % 2 == 0 && (r2 += n2 / 2);\n    let i2 = Array(e24 + 1);\n    for (let a2 = 0; a2 < e24; a2++) {\n      let e25 = a2 * n2 + r2, { x: o2, y: s3 } = new N(Se(e25), Ce(e25)).scalarMultiply(t2);\n      i2[a2] = [a2 === 0 ? `M` : `L`, o2, s3];\n    }\n    return i2[e24] = [`Z`], i2;\n  };\n  var Va = (e24, t2) => e24.map((e25) => e25.map((e26, n2) => n2 === 0 || t2 === void 0 ? e26 : B(e26, t2)).join(` `)).join(` `);\n  var Ha = (e24, t2) => {\n    var n2;\n    let r2 = e24, i2 = t2;\n    r2.inverted && !i2.inverted && (r2 = t2, i2 = e24), Pt(i2, (n2 = i2.group) == null ? void 0 : n2.calcTransformMatrix(), r2.calcTransformMatrix());\n    let a2 = r2.inverted && i2.inverted;\n    return a2 && (r2.inverted = i2.inverted = false), new ca([r2], { clipPath: i2, inverted: a2 });\n  };\n  var Ua = (e24, t2) => Math.floor(Math.random() * (t2 - e24 + 1)) + e24;\n  var Wa = (e24, t2) => {\n    let n2 = e24._findCenterFromElement();\n    e24.transformMatrix && (((e25) => {\n      if (e25.transformMatrix) {\n        let { scaleX: t3, scaleY: n3, angle: r2, skewX: i2 } = He(e25.transformMatrix);\n        e25.flipX = false, e25.flipY = false, e25.set(de, t3), e25.set(fe, n3), e25.angle = r2, e25.skewX = i2, e25.skewY = 0;\n      }\n    })(e24), n2 = n2.transform(e24.transformMatrix)), delete e24.transformMatrix, t2 && (e24.scaleX *= t2.scaleX, e24.scaleY *= t2.scaleY, e24.cropX = t2.cropX, e24.cropY = t2.cropY, n2.x += t2.offsetLeft, n2.y += t2.offsetTop, e24.width = t2.width, e24.height = t2.height), e24.setPositionByOrigin(n2, E, E);\n  };\n  var Ga = t({ addTransformToObject: () => Et, animate: () => Mr, animateColor: () => Nr, applyTransformToObject: () => Dt, calcAngleBetweenVectors: () => Vt, calcDimensionsMatrix: () => Ye, calcPlaneChangeMatrix: () => jt, calcVectorRotation: () => Ht, cancelAnimFrame: () => ke, capValue: () => Vn, composeMatrix: () => Xe, copyCanvasElement: () => Ne, cos: () => Se, createCanvasElement: () => P, createImage: () => Me, createRotateMatrix: () => We, createScaleMatrix: () => Ge, createSkewXMatrix: () => qe, createSkewYMatrix: () => Je, createTranslateMatrix: () => Ue, createVector: () => zt, crossProduct: () => Gt, degreesToRadians: () => I, dotProduct: () => Kt, ease: () => Gn, enlivenObjectEnlivables: () => $e, enlivenObjects: () => Qe, findScaleToCover: () => da, findScaleToFit: () => ua, getBoundsOfCurve: () => va, getOrthonormalVector: () => Wt, getPathSegmentsInfo: () => ja, getPointOnPath: () => Ma, getPointer: () => xt, getRandomInt: () => Ua, getRegularPolygonPath: () => Ba, getSmoothPathFromPoints: () => Ra, getSvgAttributes: () => pn, getUnitVector: () => Ut, groupSVGElements: () => la, hasStyleChanged: () => Ei, invertTransform: () => R, isBetweenVectors: () => qt, isIdentityMatrix: () => Le, isTouchEvent: () => St, isTransparent: () => yi, joinPath: () => Va, loadImage: () => Ze, magnitude: () => Bt, makeBoundingBoxFromPoints: () => wt, makePathSimpler: () => ba, matrixToSVG: () => nt, mergeClipPaths: () => Ha, multiplyTransformMatrices: () => z, multiplyTransformMatrixArray: () => Re, parsePath: () => La, parsePreserveAspectRatioAttribute: () => mn, parseUnit: () => K, pick: () => et, projectStrokeOnPoints: () => wi, qrDecompose: () => He, radiansToDegrees: () => Ie, removeFromArray: () => xe, removeTransformFromObject: () => Tt, removeTransformMatrixForSvgParsing: () => Wa, requestAnimFrame: () => Oe, resetObjectTransform: () => Ot, rotateVector: () => Rt, saveObjectTransform: () => kt, sendObjectToPlane: () => Pt, sendPointToPlane: () => Mt, sendVectorToPlane: () => Nt, sin: () => Ce, sizeAfterTransform: () => At, string: () => pt, stylesFromArray: () => Oi, stylesToArray: () => Di, toBlob: () => Fe, toDataURL: () => Pe, toFixed: () => B, transformPath: () => za, transformPoint: () => L });\n  function Ka(e24, t2) {\n    let n2 = e24.style;\n    n2 && Object.entries(t2).forEach(([e25, t3]) => n2.setProperty(e25, t3));\n  }\n  var qa = class extends dt {\n    constructor(e24, { allowTouchScrolling: t2 = false, containerClass: n2 = `` } = {}) {\n      super(e24), i(this, `upper`, void 0), i(this, `container`, void 0);\n      let { el: r2 } = this.lower, a2 = this.createUpperCanvas();\n      this.upper = { el: a2, ctx: a2.getContext(`2d`) }, this.applyCanvasStyle(r2, { allowTouchScrolling: t2 }), this.applyCanvasStyle(a2, { allowTouchScrolling: t2, styles: { position: `absolute`, left: `0`, top: `0` } });\n      let o2 = this.createContainerElement();\n      o2.classList.add(n2), r2.parentNode && r2.parentNode.replaceChild(o2, r2), o2.append(r2, a2), this.container = o2;\n    }\n    createUpperCanvas() {\n      let { el: e24 } = this.lower, t2 = P();\n      return t2.className = e24.className, t2.classList.remove(`lower-canvas`), t2.classList.add(`upper-canvas`), t2.setAttribute(`data-fabric`, `top`), t2.style.cssText = e24.style.cssText, t2.setAttribute(`draggable`, `true`), t2;\n    }\n    createContainerElement() {\n      let e24 = g().createElement(`div`);\n      return e24.setAttribute(`data-fabric`, `wrapper`), Ka(e24, { position: `relative` }), ut(e24), e24;\n    }\n    applyCanvasStyle(e24, t2) {\n      let { styles: n2, allowTouchScrolling: r2 } = t2;\n      Ka(e24, { ...n2, \"touch-action\": r2 ? `manipulation` : te }), ut(e24);\n    }\n    setDimensions(e24, t2) {\n      super.setDimensions(e24, t2);\n      let { el: n2, ctx: r2 } = this.upper;\n      ct(n2, r2, e24, t2);\n    }\n    setCSSDimensions(e24) {\n      super.setCSSDimensions(e24), lt(this.upper.el, e24), lt(this.container, e24);\n    }\n    cleanupDOM(e24) {\n      let t2 = this.container, { el: n2 } = this.lower, { el: r2 } = this.upper;\n      super.cleanupDOM(e24), t2.removeChild(r2), t2.removeChild(n2), t2.parentNode && t2.parentNode.replaceChild(n2, t2);\n    }\n    dispose() {\n      super.dispose(), h().dispose(this.upper.el), delete this.upper, delete this.container;\n    }\n  };\n  var Ja = (e24, t2, n2, r2) => {\n    let { target: i2, offsetX: a2, offsetY: o2 } = t2, s3 = n2 - a2, c2 = r2 - o2, l2 = !Zt(i2, `lockMovementX`) && i2.left !== s3, u2 = !Zt(i2, `lockMovementY`) && i2.top !== c2;\n    return l2 && i2.set(`left`, s3), u2 && i2.set(`top`, c2), (l2 || u2) && Lr(re, Qt(e24, t2, n2, r2)), l2 || u2;\n  };\n  var Ya = ce;\n  var Xa = (e24) => function(t2, n2, r2) {\n    let { points: i2, pathOffset: a2 } = r2;\n    return new N(i2[e24]).subtract(a2).transform(z(r2.getViewportTransform(), r2.calcTransformMatrix()));\n  };\n  var Za = (e24, t2, n2, r2) => {\n    let { target: i2, pointIndex: a2 } = t2, o2 = i2, s3 = Mt(new N(n2, r2), void 0, o2.calcOwnMatrix());\n    return o2.points[a2] = s3.add(o2.pathOffset), o2.setDimensions(), o2.set(`dirty`, true), true;\n  };\n  var Qa = (e24, t2) => function(n2, r2, i2, a2) {\n    let o2 = r2.target, s3 = new N(o2.points[(e24 > 0 ? e24 : o2.points.length) - 1]), c2 = s3.subtract(o2.pathOffset).transform(o2.calcOwnMatrix()), l2 = t2(n2, { ...r2, pointIndex: e24 }, i2, a2), u2 = s3.subtract(o2.pathOffset).transform(o2.calcOwnMatrix()).subtract(c2);\n    return o2.left -= u2.x, o2.top -= u2.y, l2;\n  };\n  var $a = (e24) => Rr(Ya, Qa(e24, Za));\n  function eo(e24, t2 = {}) {\n    let n2 = {};\n    for (let r2 = 0; r2 < (typeof e24 == `number` ? e24 : e24.points.length); r2++) n2[`p${r2}`] = new q({ actionName: Ya, positionHandler: Xa(r2), actionHandler: $a(r2), ...t2 });\n    return n2;\n  }\n  var to = (e24, t2, n2) => {\n    let { path: r2, pathOffset: i2 } = e24, a2 = r2[t2];\n    return new N(a2[n2] - i2.x, a2[n2 + 1] - i2.y).transform(z(e24.getViewportTransform(), e24.calcTransformMatrix()));\n  };\n  function no(e24, t2, n2) {\n    let { commandIndex: r2, pointIndex: i2 } = this;\n    return to(n2, r2, i2);\n  }\n  function ro(e24, t2, n2, r2) {\n    let { target: i2 } = t2, { commandIndex: a2, pointIndex: o2 } = this, s3 = ((e25, t3, n3, r3, i3) => {\n      let { path: a3, pathOffset: o3 } = e25, s4 = a3[(r3 > 0 ? r3 : a3.length) - 1], c2 = new N(s4[i3], s4[i3 + 1]), l2 = c2.subtract(o3).transform(e25.calcOwnMatrix()), u2 = Mt(new N(t3, n3), void 0, e25.calcOwnMatrix());\n      a3[r3][i3] = u2.x + o3.x, a3[r3][i3 + 1] = u2.y + o3.y, e25.setDimensions();\n      let d2 = c2.subtract(e25.pathOffset).transform(e25.calcOwnMatrix()).subtract(l2);\n      return e25.left -= d2.x, e25.top -= d2.y, e25.set(`dirty`, true), true;\n    })(i2, n2, r2, a2, o2);\n    return s3 && Lr(this.actionName, { ...Qt(e24, t2, n2, r2), commandIndex: a2, pointIndex: o2 }), s3;\n  }\n  var io = class extends q {\n    constructor(e24) {\n      super(e24);\n    }\n    render(e24, t2, n2, r2, i2) {\n      let a2 = { ...r2, cornerColor: this.controlFill, cornerStrokeColor: this.controlStroke, transparentCorners: !this.controlFill };\n      super.render(e24, t2, n2, a2, i2);\n    }\n  };\n  var ao = class extends io {\n    constructor(e24) {\n      super(e24);\n    }\n    render(e24, t2, n2, r2, i2) {\n      let { path: a2 } = i2, { commandIndex: o2, pointIndex: s3, connectToCommandIndex: c2, connectToPointIndex: l2 } = this;\n      e24.save(), e24.strokeStyle = this.controlStroke, this.connectionDashArray && e24.setLineDash(this.connectionDashArray);\n      let [u2] = a2[o2], d2 = to(i2, c2, l2);\n      if (u2 === `Q`) {\n        let r3 = to(i2, o2, s3 + 2);\n        e24.moveTo(r3.x, r3.y), e24.lineTo(t2, n2);\n      } else e24.moveTo(t2, n2);\n      e24.lineTo(d2.x, d2.y), e24.stroke(), e24.restore(), super.render(e24, t2, n2, r2, i2);\n    }\n  };\n  var oo = (e24, t2, n2, r2, i2, a2) => new (n2 ? ao : io)({ commandIndex: e24, pointIndex: t2, actionName: `modifyPath`, positionHandler: no, actionHandler: ro, connectToCommandIndex: i2, connectToPointIndex: a2, ...r2, ...n2 ? r2.controlPointStyle : r2.pointStyle });\n  function so(e24, t2 = {}) {\n    let n2 = {}, r2 = `M`;\n    return e24.path.forEach((e25, i2) => {\n      let a2 = e25[0];\n      switch (a2 !== `Z` && (n2[`c_${i2}_${a2}`] = oo(i2, e25.length - 2, false, t2)), a2) {\n        case `C`:\n          n2[`c_${i2}_C_CP_1`] = oo(i2, 1, true, t2, i2 - 1, /* @__PURE__ */ ((e26) => e26 === `C` ? 5 : e26 === `Q` ? 3 : 1)(r2)), n2[`c_${i2}_C_CP_2`] = oo(i2, 3, true, t2, i2, 5);\n          break;\n        case `Q`:\n          n2[`c_${i2}_Q_CP_1`] = oo(i2, 1, true, t2, i2, 3);\n      }\n      r2 = a2;\n    }), n2;\n  }\n  var co = t({ changeHeight: () => Wr, changeObjectHeight: () => Hr, changeObjectWidth: () => Vr, changeWidth: () => Ur, createObjectDefaultControls: () => mi, createPathControls: () => so, createPolyActionHandler: () => $a, createPolyControls: () => eo, createPolyPositionHandler: () => Xa, createResizeControls: () => hi, createTextboxDefaultControls: () => gi, dragHandler: () => Ja, factoryPolyActionHandler: () => Qa, getLocalPoint: () => en, polyActionHandler: () => Za, renderCircleControl: () => Gr, renderSquareControl: () => Kr, rotationStyleHandler: () => qr, rotationWithSnapping: () => Jr, scaleCursorStyleHandler: () => Qr, scaleOrSkewActionName: () => ui, scaleSkewCursorStyleHandler: () => di, scalingEqually: () => ei, scalingX: () => ti, scalingXOrSkewingY: () => fi, scalingY: () => ni, scalingYOrSkewingX: () => pi, skewCursorStyleHandler: () => ai, skewHandlerX: () => si, skewHandlerY: () => ci, wrapWithFireEvent: () => Rr, wrapWithFixedAnchor: () => zr });\n  var lo = class e12 extends yt {\n    constructor(...e24) {\n      super(...e24), i(this, `_hoveredTargets`, []), i(this, `_currentTransform`, null), i(this, `_groupSelector`, null), i(this, `contextTopDirty`, false);\n    }\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e12.ownDefaults };\n    }\n    get upperCanvasEl() {\n      var e24;\n      return (e24 = this.elements.upper) == null ? void 0 : e24.el;\n    }\n    get contextTop() {\n      var e24;\n      return (e24 = this.elements.upper) == null ? void 0 : e24.ctx;\n    }\n    get wrapperEl() {\n      return this.elements.container;\n    }\n    initElements(e24) {\n      this.elements = new qa(e24, { allowTouchScrolling: this.allowTouchScrolling, containerClass: this.containerClass }), this._createCacheCanvas();\n    }\n    _onObjectAdded(e24) {\n      this._objectsToRender = void 0, super._onObjectAdded(e24);\n    }\n    _onObjectRemoved(e24) {\n      this._objectsToRender = void 0, e24 === this._activeObject && (this.fire(`before:selection:cleared`, { deselected: [e24] }), this._discardActiveObject(), this.fire(`selection:cleared`, { deselected: [e24] }), e24.fire(`deselected`, { target: e24 })), e24 === this._hoveredTarget && (this._hoveredTarget = void 0, this._hoveredTargets = []), super._onObjectRemoved(e24);\n    }\n    _onStackOrderChanged() {\n      this._objectsToRender = void 0, super._onStackOrderChanged();\n    }\n    _chooseObjectsToRender() {\n      let e24 = this._activeObject;\n      return !this.preserveObjectStacking && e24 ? this._objects.filter((t2) => !t2.group && t2 !== e24).concat(e24) : this._objects;\n    }\n    renderAll() {\n      this.cancelRequestedRender(), this.destroyed || (!this.contextTopDirty || this._groupSelector || this.isDrawingMode || (this.clearContext(this.contextTop), this.contextTopDirty = false), this.hasLostContext && (this.renderTopLayer(this.contextTop), this.hasLostContext = false), !this._objectsToRender && (this._objectsToRender = this._chooseObjectsToRender()), this.renderCanvas(this.getContext(), this._objectsToRender));\n    }\n    renderTopLayer(e24) {\n      e24.save(), this.isDrawingMode && this._isCurrentlyDrawing && (this.freeDrawingBrush && this.freeDrawingBrush._render(), this.contextTopDirty = true), this.selection && this._groupSelector && (this._drawSelection(e24), this.contextTopDirty = true), e24.restore();\n    }\n    renderTop() {\n      let e24 = this.contextTop;\n      this.clearContext(e24), this.renderTopLayer(e24), this.fire(`after:render`, { ctx: e24 });\n    }\n    setTargetFindTolerance(e24) {\n      e24 = Math.round(e24), this.targetFindTolerance = e24;\n      let t2 = this.getRetinaScaling(), n2 = Math.ceil((2 * e24 + 1) * t2);\n      this.pixelFindCanvasEl.width = this.pixelFindCanvasEl.height = n2, this.pixelFindContext.scale(t2, t2);\n    }\n    isTargetTransparent(e24, t2, n2) {\n      let r2 = this.targetFindTolerance, i2 = this.pixelFindContext;\n      this.clearContext(i2), i2.save(), i2.translate(-t2 + r2, -n2 + r2), i2.transform(...this.viewportTransform);\n      let a2 = e24.selectionBackgroundColor;\n      e24.selectionBackgroundColor = ``, e24.render(i2), e24.selectionBackgroundColor = a2, i2.restore();\n      let o2 = Math.round(r2 * this.getRetinaScaling());\n      return yi(i2, o2, o2, o2);\n    }\n    _isSelectionKeyPressed(e24) {\n      let t2 = this.selectionKey;\n      return !!t2 && (Array.isArray(t2) ? !!t2.find((t3) => !!t3 && true === e24[t3]) : e24[t2]);\n    }\n    _shouldClearSelection(e24, t2) {\n      let n2 = this.getActiveObjects(), r2 = this._activeObject;\n      return !!(!t2 || t2 && r2 && n2.length > 1 && n2.indexOf(t2) === -1 && r2 !== t2 && !this._isSelectionKeyPressed(e24) || t2 && !t2.evented || t2 && !t2.selectable && r2 && r2 !== t2);\n    }\n    _shouldCenterTransform(e24, t2, n2) {\n      if (!e24) return;\n      let r2;\n      return t2 === `scale` || t2 === `scaleX` || t2 === `scaleY` || t2 === `resizing` ? r2 = this.centeredScaling || e24.centeredScaling : t2 === `rotate` && (r2 = this.centeredRotation || e24.centeredRotation), r2 ? !n2 : n2;\n    }\n    _getOriginFromCorner(e24, t2) {\n      let n2 = t2 ? e24.controls[t2].getTransformAnchorPoint() : { x: e24.originX, y: e24.originY };\n      return t2 ? ([`ml`, `tl`, `bl`].includes(t2) ? n2.x = k : [`mr`, `tr`, `br`].includes(t2) && (n2.x = D), [`tl`, `mt`, `tr`].includes(t2) ? n2.y = O : [`bl`, `mb`, `br`].includes(t2) && (n2.y = `top`), n2) : n2;\n    }\n    _setupCurrentTransform(e24, t2, n2) {\n      var r2;\n      let i2 = t2.group ? Mt(this.getScenePoint(e24), void 0, t2.group.calcTransformMatrix()) : this.getScenePoint(e24), { key: a2 = ``, control: o2 } = t2.getActiveControl() || {}, s3 = n2 && o2 ? (r2 = o2.getActionHandler(e24, t2, o2)) == null ? void 0 : r2.bind(o2) : Ja, c2 = ((e25, t3, n3, r3) => {\n        if (!t3 || !e25) return `drag`;\n        let i3 = r3.controls[t3];\n        return i3.getActionName(n3, i3, r3);\n      })(n2, a2, e24, t2), l2 = e24[this.centeredKey], u2 = this._shouldCenterTransform(t2, c2, l2) ? { x: E, y: E } : this._getOriginFromCorner(t2, a2), { scaleX: d2, scaleY: f2, skewX: p2, skewY: m, left: h2, top: g2, angle: _2, width: v2, height: y2, cropX: b2, cropY: x2 } = t2, S2 = { target: t2, action: c2, actionHandler: s3, actionPerformed: false, corner: a2, scaleX: d2, scaleY: f2, skewX: p2, skewY: m, offsetX: i2.x - h2, offsetY: i2.y - g2, originX: u2.x, originY: u2.y, ex: i2.x, ey: i2.y, lastX: i2.x, lastY: i2.y, theta: I(_2), width: v2, height: y2, shiftKey: e24.shiftKey, altKey: l2, original: { ...kt(t2), originX: u2.x, originY: u2.y, cropX: b2, cropY: x2 } };\n      this._currentTransform = S2, this.fire(`before:transform`, { e: e24, transform: S2 });\n    }\n    setCursor(e24) {\n      this.upperCanvasEl.style.cursor = e24;\n    }\n    _drawSelection(e24) {\n      let { x: t2, y: n2, deltaX: r2, deltaY: i2 } = this._groupSelector, a2 = new N(t2, n2).transform(this.viewportTransform), o2 = new N(t2 + r2, n2 + i2).transform(this.viewportTransform), s3 = this.selectionLineWidth / 2, c2 = Math.min(a2.x, o2.x), l2 = Math.min(a2.y, o2.y), u2 = Math.max(a2.x, o2.x), d2 = Math.max(a2.y, o2.y);\n      this.selectionColor && (e24.fillStyle = this.selectionColor, e24.fillRect(c2, l2, u2 - c2, d2 - l2)), this.selectionLineWidth && this.selectionBorderColor && (e24.lineWidth = this.selectionLineWidth, e24.strokeStyle = this.selectionBorderColor, c2 += s3, l2 += s3, u2 -= s3, d2 -= s3, J.prototype._setLineDash.call(this, e24, this.selectionDashArray), e24.strokeRect(c2, l2, u2 - c2, d2 - l2));\n    }\n    findTarget(e24) {\n      if (this._targetInfo) return this._targetInfo;\n      if (this.skipTargetFind) return { subTargets: [], currentSubTargets: [] };\n      let t2 = this.getScenePoint(e24), n2 = this._activeObject, r2 = this.getActiveObjects(), i2 = this.searchPossibleTargets(this._objects, t2), { subTargets: a2, container: o2, target: s3 } = i2, c2 = { ...i2, currentSubTargets: a2, currentContainer: o2, currentTarget: s3 };\n      if (!n2) return c2;\n      let l2 = { ...this.searchPossibleTargets([n2], t2), currentSubTargets: a2, currentContainer: o2, currentTarget: s3 };\n      return n2.findControl(this.getViewportPoint(e24), St(e24)) ? { ...l2, target: n2 } : l2.target && (r2.length > 1 || !this.preserveObjectStacking || this.preserveObjectStacking && e24[this.altSelectionKey]) ? l2 : c2;\n    }\n    _pointIsInObjectSelectionArea(e24, t2) {\n      let n2 = e24.getCoords(), r2 = this.getZoom(), i2 = e24.padding / r2;\n      if (i2) {\n        let [e25, t3, r3, a2] = n2, o2 = Math.atan2(t3.y - e25.y, t3.x - e25.x), s3 = Se(o2) * i2, c2 = Ce(o2) * i2, l2 = s3 + c2, u2 = s3 - c2;\n        n2 = [new N(e25.x - u2, e25.y - l2), new N(t3.x + l2, t3.y - u2), new N(r3.x + u2, r3.y + l2), new N(a2.x - l2, a2.y + u2)];\n      }\n      return Pr.isPointInPolygon(t2, n2);\n    }\n    _checkTarget(e24, t2) {\n      if (e24 && e24.visible && e24.evented && this._pointIsInObjectSelectionArea(e24, t2)) {\n        if (!this.perPixelTargetFind && !e24.perPixelTargetFind || e24.isEditing) return true;\n        {\n          let n2 = t2.transform(this.viewportTransform);\n          if (!this.isTargetTransparent(e24, n2.x, n2.y)) return true;\n        }\n      }\n      return false;\n    }\n    _searchPossibleTargets(e24, t2, n2) {\n      let r2 = e24.length;\n      for (; r2--; ) {\n        let i2 = e24[r2];\n        if (this._checkTarget(i2, t2)) {\n          if (Te(i2) && i2.subTargetCheck) {\n            let { target: e25 } = this._searchPossibleTargets(i2._objects, t2, n2);\n            e25 && n2.push(e25);\n          }\n          return { target: i2, subTargets: n2 };\n        }\n      }\n      return { subTargets: [] };\n    }\n    searchPossibleTargets(e24, t2) {\n      let n2 = this._searchPossibleTargets(e24, t2, []);\n      n2.container = n2.target;\n      let { container: r2, subTargets: i2 } = n2;\n      if (r2 && Te(r2) && r2.interactive && i2[0]) {\n        for (let e25 = i2.length - 1; e25 > 0; e25--) {\n          let t3 = i2[e25];\n          if (!Te(t3) || !t3.interactive) return n2.target = t3, n2;\n        }\n        return n2.target = i2[0], n2;\n      }\n      return n2;\n    }\n    getViewportPoint(e24) {\n      return this._viewportPoint ? this._viewportPoint : this._getPointerImpl(e24, true);\n    }\n    getScenePoint(e24) {\n      return this._scenePoint ? this._scenePoint : this._getPointerImpl(e24);\n    }\n    _getPointerImpl(e24, t2 = false) {\n      let n2 = this.upperCanvasEl, r2 = n2.getBoundingClientRect(), i2 = xt(e24), a2 = r2.width || 0, o2 = r2.height || 0;\n      a2 && o2 || (`top` in r2 && `bottom` in r2 && (o2 = Math.abs(r2.top - r2.bottom)), `right` in r2 && `left` in r2 && (a2 = Math.abs(r2.right - r2.left))), this.calcOffset(), i2.x -= this._offset.left, i2.y -= this._offset.top, t2 || (i2 = Mt(i2, void 0, this.viewportTransform));\n      let s3 = this.getRetinaScaling();\n      s3 !== 1 && (i2.x /= s3, i2.y /= s3);\n      let c2 = a2 === 0 || o2 === 0 ? new N(1, 1) : new N(n2.width / a2, n2.height / o2);\n      return i2.multiply(c2);\n    }\n    _setDimensionsImpl(e24, t2) {\n      this._resetTransformEventData(), super._setDimensionsImpl(e24, t2), this._isCurrentlyDrawing && this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop);\n    }\n    _createCacheCanvas() {\n      this.pixelFindCanvasEl = P(), this.pixelFindContext = this.pixelFindCanvasEl.getContext(`2d`, { willReadFrequently: true }), this.setTargetFindTolerance(this.targetFindTolerance);\n    }\n    getTopContext() {\n      return this.elements.upper.ctx;\n    }\n    getSelectionContext() {\n      return this.elements.upper.ctx;\n    }\n    getSelectionElement() {\n      return this.elements.upper.el;\n    }\n    getActiveObject() {\n      return this._activeObject;\n    }\n    getActiveObjects() {\n      let e24 = this._activeObject;\n      return at(e24) ? e24.getObjects() : e24 ? [e24] : [];\n    }\n    _fireSelectionEvents(e24, t2) {\n      let n2 = false, r2 = false, i2 = this.getActiveObjects(), a2 = [], o2 = [];\n      e24.forEach((e25) => {\n        i2.includes(e25) || (n2 = true, e25.fire(`deselected`, { e: t2, target: e25 }), o2.push(e25));\n      }), i2.forEach((r3) => {\n        e24.includes(r3) || (n2 = true, r3.fire(`selected`, { e: t2, target: r3 }), a2.push(r3));\n      }), e24.length > 0 && i2.length > 0 ? (r2 = true, n2 && this.fire(`selection:updated`, { e: t2, selected: a2, deselected: o2 })) : i2.length > 0 ? (r2 = true, this.fire(`selection:created`, { e: t2, selected: a2 })) : e24.length > 0 && (r2 = true, this.fire(`selection:cleared`, { e: t2, deselected: o2 })), r2 && (this._objectsToRender = void 0);\n    }\n    setActiveObject(e24, t2) {\n      let n2 = this.getActiveObjects(), r2 = this._setActiveObject(e24, t2);\n      return this._fireSelectionEvents(n2, t2), r2;\n    }\n    _setActiveObject(e24, t2) {\n      let n2 = this._activeObject;\n      return n2 !== e24 && !(!this._discardActiveObject(t2, e24) && this._activeObject) && !e24.onSelect({ e: t2 }) && (this._activeObject = e24, at(e24) && n2 !== e24 && e24.set(`canvas`, this), e24.setCoords(), true);\n    }\n    _discardActiveObject(e24, t2) {\n      let n2 = this._activeObject;\n      return !!n2 && !n2.onDeselect({ e: e24, object: t2 }) && (this._currentTransform && this._currentTransform.target === n2 && this.endCurrentTransform(e24), at(n2) && n2 === this._hoveredTarget && (this._hoveredTarget = void 0), this._activeObject = void 0, true);\n    }\n    discardActiveObject(e24) {\n      let t2 = this.getActiveObjects(), n2 = this.getActiveObject();\n      t2.length && this.fire(`before:selection:cleared`, { e: e24, deselected: [n2] });\n      let r2 = this._discardActiveObject(e24);\n      return this._fireSelectionEvents(t2, e24), r2;\n    }\n    endCurrentTransform(e24) {\n      let t2 = this._currentTransform;\n      this._finalizeCurrentTransform(e24), t2 && t2.target && (t2.target.isMoving = false), this._currentTransform = null;\n    }\n    _finalizeCurrentTransform(e24) {\n      let t2 = this._currentTransform, n2 = t2.target, r2 = { e: e24, target: n2, transform: t2, action: t2.action };\n      n2._scaling && (n2._scaling = false), n2.setCoords(), t2.actionPerformed && (this.fire(`object:modified`, r2), n2.fire(ge, r2));\n    }\n    setViewportTransform(e24) {\n      super.setViewportTransform(e24);\n      let t2 = this._activeObject;\n      t2 && t2.setCoords();\n    }\n    destroy() {\n      let e24 = this._activeObject;\n      at(e24) && (e24.removeAll(), e24.dispose()), delete this._activeObject, super.destroy(), this.pixelFindContext = null, this.pixelFindCanvasEl = void 0;\n    }\n    clear() {\n      this.discardActiveObject(), this._activeObject = void 0, this.clearContext(this.contextTop), super.clear();\n    }\n    drawControls(e24) {\n      let t2 = this._activeObject;\n      t2 && t2._renderControls(e24);\n    }\n    _toObject(e24, t2, n2) {\n      let r2 = this._realizeGroupTransformOnObject(e24), i2 = super._toObject(e24, t2, n2);\n      return e24.set(r2), i2;\n    }\n    _realizeGroupTransformOnObject(e24) {\n      let { group: t2 } = e24;\n      if (t2 && at(t2) && this._activeObject === t2) {\n        let n2 = et(e24, [`angle`, `flipX`, `flipY`, D, de, fe, pe, me, `top`]);\n        return Et(e24, t2.calcOwnMatrix()), n2;\n      }\n      return {};\n    }\n    _setSVGObject(e24, t2, n2) {\n      let r2 = this._realizeGroupTransformOnObject(t2);\n      super._setSVGObject(e24, t2, n2), t2.set(r2);\n    }\n  };\n  i(lo, `ownDefaults`, { uniformScaling: true, uniScaleKey: `shiftKey`, centeredScaling: false, centeredRotation: false, centeredKey: `altKey`, altActionKey: `shiftKey`, selection: true, selectionKey: `shiftKey`, selectionColor: `rgba(100, 100, 255, 0.3)`, selectionDashArray: [], selectionBorderColor: `rgba(255, 255, 255, 0.3)`, selectionLineWidth: 1, selectionFullyContained: false, hoverCursor: `move`, moveCursor: `move`, defaultCursor: `default`, freeDrawingCursor: `crosshair`, notAllowedCursor: `not-allowed`, perPixelTargetFind: false, targetFindTolerance: 0, skipTargetFind: false, stopContextMenu: true, fireRightClick: true, fireMiddleClick: true, enablePointerEvents: false, containerClass: `canvas-container`, preserveObjectStacking: true });\n  var uo = class {\n    constructor(e24) {\n      i(this, `targets`, []), i(this, `__disposer`, void 0);\n      let t2 = () => {\n        let { hiddenTextarea: t3 } = e24.getActiveObject() || {};\n        t3 && t3.focus();\n      }, n2 = e24.upperCanvasEl;\n      n2.addEventListener(`click`, t2), this.__disposer = () => n2.removeEventListener(`click`, t2);\n    }\n    exitTextEditing() {\n      this.target = void 0, this.targets.forEach((e24) => {\n        e24.isEditing && e24.exitEditing();\n      });\n    }\n    add(e24) {\n      this.targets.push(e24);\n    }\n    remove(e24) {\n      this.unregister(e24), xe(this.targets, e24);\n    }\n    register(e24) {\n      this.target = e24;\n    }\n    unregister(e24) {\n      e24 === this.target && (this.target = void 0);\n    }\n    onMouseMove(e24) {\n      var t2;\n      (t2 = this.target) != null && t2.isEditing && this.target.updateSelectionOnMouseMove(e24);\n    }\n    clear() {\n      this.targets = [], this.target = void 0;\n    }\n    dispose() {\n      this.clear(), this.__disposer(), delete this.__disposer;\n    }\n  };\n  var X = { passive: false };\n  var fo = (e24, t2) => ({ viewportPoint: e24.getViewportPoint(t2), scenePoint: e24.getScenePoint(t2) });\n  var po = (e24, ...t2) => e24.addEventListener(...t2);\n  var Z = (e24, ...t2) => e24.removeEventListener(...t2);\n  var mo = { mouse: { in: `over`, out: `out`, targetIn: `mouseover`, targetOut: `mouseout`, canvasIn: `mouse:over`, canvasOut: `mouse:out` }, drag: { in: `enter`, out: `leave`, targetIn: `dragenter`, targetOut: `dragleave`, canvasIn: `drag:enter`, canvasOut: `drag:leave` } };\n  var ho = class extends lo {\n    constructor(e24, t2 = {}) {\n      super(e24, t2), i(this, `_isClick`, void 0), i(this, `textEditingManager`, new uo(this)), [`_onMouseDown`, `_onTouchStart`, `_onMouseMove`, `_onMouseUp`, `_onTouchEnd`, `_onResize`, `_onMouseWheel`, `_onMouseOut`, `_onMouseEnter`, `_onContextMenu`, `_onClick`, `_onDragStart`, `_onDragEnd`, `_onDragProgress`, `_onDragOver`, `_onDragEnter`, `_onDragLeave`, `_onDrop`].forEach((e25) => {\n        this[e25] = this[e25].bind(this);\n      }), this.addOrRemove(po);\n    }\n    _getEventPrefix() {\n      return this.enablePointerEvents ? `pointer` : `mouse`;\n    }\n    addOrRemove(e24, t2 = false) {\n      let n2 = this.upperCanvasEl, r2 = this._getEventPrefix();\n      e24(st(n2), `resize`, this._onResize), e24(n2, r2 + `down`, this._onMouseDown), e24(n2, `${r2}move`, this._onMouseMove, X), e24(n2, `${r2}out`, this._onMouseOut), e24(n2, `${r2}enter`, this._onMouseEnter), e24(n2, `wheel`, this._onMouseWheel, { passive: false }), e24(n2, `contextmenu`, this._onContextMenu), t2 || (e24(n2, `click`, this._onClick), e24(n2, `dblclick`, this._onClick)), e24(n2, `dragstart`, this._onDragStart), e24(n2, `dragend`, this._onDragEnd), e24(n2, `dragover`, this._onDragOver), e24(n2, `dragenter`, this._onDragEnter), e24(n2, `dragleave`, this._onDragLeave), e24(n2, `drop`, this._onDrop), this.enablePointerEvents || e24(n2, `touchstart`, this._onTouchStart, X);\n    }\n    removeListeners() {\n      this.addOrRemove(Z);\n      let e24 = this._getEventPrefix(), t2 = H(this.upperCanvasEl);\n      Z(t2, `${e24}up`, this._onMouseUp), Z(t2, `touchend`, this._onTouchEnd, X), Z(t2, `${e24}move`, this._onMouseMove, X), Z(t2, `touchmove`, this._onMouseMove, X), clearTimeout(this._willAddMouseDown);\n    }\n    _onMouseWheel(e24) {\n      this._cacheTransformEventData(e24), this._handleEvent(e24, `wheel`), this._resetTransformEventData();\n    }\n    _onMouseOut(e24) {\n      let t2 = this._hoveredTarget, n2 = { e: e24, ...fo(this, e24) };\n      this.fire(`mouse:out`, { ...n2, target: t2 }), this._hoveredTarget = void 0, t2 && t2.fire(`mouseout`, { ...n2 }), this._hoveredTargets.forEach((e25) => {\n        this.fire(`mouse:out`, { ...n2, target: e25 }), e25 && e25.fire(`mouseout`, { ...n2 });\n      }), this._hoveredTargets = [];\n    }\n    _onMouseEnter(e24) {\n      let { target: t2 } = this.findTarget(e24);\n      this._currentTransform || t2 || (this.fire(`mouse:over`, { e: e24, ...fo(this, e24) }), this._hoveredTarget = void 0, this._hoveredTargets = []);\n    }\n    _onDragStart(e24) {\n      this._isClick = false;\n      let t2 = this.getActiveObject();\n      if (t2 && t2.onDragStart(e24)) {\n        this._dragSource = t2;\n        let n2 = { e: e24, target: t2 };\n        this.fire(`dragstart`, n2), t2.fire(`dragstart`, n2), po(this.upperCanvasEl, `drag`, this._onDragProgress);\n        return;\n      }\n      Ct(e24);\n    }\n    _renderDragEffects(e24, t2, n2) {\n      let r2 = false, i2 = this._dropTarget;\n      i2 && i2 !== t2 && i2 !== n2 && (i2.clearContextTop(), r2 = true), t2 == null || t2.clearContextTop(), n2 !== t2 && (n2 == null || n2.clearContextTop());\n      let a2 = this.contextTop;\n      a2.save(), a2.transform(...this.viewportTransform), t2 && (a2.save(), t2.transform(a2), t2.renderDragSourceEffect(e24), a2.restore(), r2 = true), n2 && (a2.save(), n2.transform(a2), n2.renderDropTargetEffect(e24), a2.restore(), r2 = true), a2.restore(), r2 && (this.contextTopDirty = true);\n    }\n    _onDragEnd(e24) {\n      let { currentSubTargets: t2 } = this.findTarget(e24), n2 = !!e24.dataTransfer && e24.dataTransfer.dropEffect !== `none`, r2 = n2 ? this._activeObject : void 0, i2 = { e: e24, target: this._dragSource, subTargets: t2, dragSource: this._dragSource, didDrop: n2, dropTarget: r2 };\n      Z(this.upperCanvasEl, `drag`, this._onDragProgress), this.fire(`dragend`, i2), this._dragSource && this._dragSource.fire(`dragend`, i2), delete this._dragSource, this._onMouseUp(e24);\n    }\n    _onDragProgress(e24) {\n      let t2 = { e: e24, target: this._dragSource, dragSource: this._dragSource, dropTarget: this._draggedoverTarget };\n      this.fire(`drag`, t2), this._dragSource && this._dragSource.fire(`drag`, t2);\n    }\n    _onDragOver(e24) {\n      let t2 = `dragover`, { currentContainer: n2, currentSubTargets: r2 } = this.findTarget(e24), i2 = this._dragSource, a2 = { e: e24, target: n2, subTargets: r2, dragSource: i2, canDrop: false, dropTarget: void 0 }, o2;\n      this.fire(t2, a2), this._fireEnterLeaveEvents(e24, n2, a2), n2 && (n2.canDrop(e24) && (o2 = n2), n2.fire(t2, a2));\n      for (let n3 = 0; n3 < r2.length; n3++) {\n        let i3 = r2[n3];\n        i3.canDrop(e24) && (o2 = i3), i3.fire(t2, a2);\n      }\n      this._renderDragEffects(e24, i2, o2), this._dropTarget = o2;\n    }\n    _onDragEnter(e24) {\n      let { currentContainer: t2, currentSubTargets: n2 } = this.findTarget(e24), r2 = { e: e24, target: t2, subTargets: n2, dragSource: this._dragSource };\n      this.fire(`dragenter`, r2), this._fireEnterLeaveEvents(e24, t2, r2);\n    }\n    _onDragLeave(e24) {\n      let { currentSubTargets: t2 } = this.findTarget(e24), n2 = { e: e24, target: this._draggedoverTarget, subTargets: t2, dragSource: this._dragSource };\n      this.fire(`dragleave`, n2), this._fireEnterLeaveEvents(e24, void 0, n2), this._renderDragEffects(e24, this._dragSource), this._dropTarget = void 0, this._hoveredTargets = [];\n    }\n    _onDrop(e24) {\n      let { currentContainer: t2, currentSubTargets: n2 } = this.findTarget(e24), r2 = this._basicEventHandler(`drop:before`, { e: e24, target: t2, subTargets: n2, dragSource: this._dragSource, ...fo(this, e24) });\n      r2.didDrop = false, r2.dropTarget = void 0, this._basicEventHandler(`drop`, r2), this.fire(`drop:after`, r2);\n    }\n    _onContextMenu(e24) {\n      let { target: t2, subTargets: n2 } = this.findTarget(e24), r2 = this._basicEventHandler(`contextmenu:before`, { e: e24, target: t2, subTargets: n2 });\n      return this.stopContextMenu && Ct(e24), this._basicEventHandler(`contextmenu`, r2), false;\n    }\n    _onClick(e24) {\n      let t2 = e24.detail;\n      t2 > 3 || t2 < 2 || (this._cacheTransformEventData(e24), t2 == 2 && e24.type === `dblclick` && this._handleEvent(e24, `dblclick`), t2 == 3 && this._handleEvent(e24, `tripleclick`), this._resetTransformEventData());\n    }\n    fireEventFromPointerEvent(e24, t2, n2, r2 = {}) {\n      this._cacheTransformEventData(e24);\n      let { target: i2, subTargets: a2 } = this.findTarget(e24), o2 = { e: e24, target: i2, subTargets: a2, ...fo(this, e24), transform: this._currentTransform, ...r2 };\n      this.fire(t2, o2), i2 && i2.fire(n2, o2);\n      for (let e25 = 0; e25 < a2.length; e25++) a2[e25] !== i2 && a2[e25].fire(n2, o2);\n      this._resetTransformEventData();\n    }\n    getPointerId(e24) {\n      let t2 = e24.changedTouches;\n      return t2 ? t2[0] && t2[0].identifier : this.enablePointerEvents ? e24.pointerId : -1;\n    }\n    _isMainEvent(e24) {\n      return true === e24.isPrimary || false !== e24.isPrimary && (e24.type === `touchend` && e24.touches.length === 0 || !e24.changedTouches || e24.changedTouches[0].identifier === this.mainTouchId);\n    }\n    _onTouchStart(e24) {\n      this._cacheTransformEventData(e24);\n      let t2 = !this.allowTouchScrolling, n2 = this._activeObject;\n      this.mainTouchId === void 0 && (this.mainTouchId = this.getPointerId(e24)), this.__onMouseDown(e24);\n      let { target: r2 } = this.findTarget(e24);\n      (this.isDrawingMode || n2 && r2 === n2) && (t2 = true), t2 && e24.preventDefault();\n      let i2 = this.upperCanvasEl, a2 = this._getEventPrefix(), o2 = H(i2);\n      po(o2, `touchend`, this._onTouchEnd, X), t2 && po(o2, `touchmove`, this._onMouseMove, X), Z(i2, `${a2}down`, this._onMouseDown), this._resetTransformEventData();\n    }\n    _onMouseDown(e24) {\n      this._cacheTransformEventData(e24), this.__onMouseDown(e24);\n      let t2 = this.upperCanvasEl, n2 = this._getEventPrefix();\n      Z(t2, `${n2}move`, this._onMouseMove, X);\n      let r2 = H(t2);\n      po(r2, `${n2}up`, this._onMouseUp), po(r2, `${n2}move`, this._onMouseMove, X), this._resetTransformEventData();\n    }\n    _onTouchEnd(e24) {\n      if (e24.touches.length > 0) return;\n      this._cacheTransformEventData(e24), this.__onMouseUp(e24), this._resetTransformEventData(), delete this.mainTouchId;\n      let t2 = this._getEventPrefix(), n2 = H(this.upperCanvasEl);\n      Z(n2, `touchend`, this._onTouchEnd, X), Z(n2, `touchmove`, this._onMouseMove, X), this._willAddMouseDown && clearTimeout(this._willAddMouseDown), this._willAddMouseDown = setTimeout(() => {\n        po(this.upperCanvasEl, `${t2}down`, this._onMouseDown), this._willAddMouseDown = 0;\n      }, 400);\n    }\n    _onMouseUp(e24) {\n      this._cacheTransformEventData(e24), this.__onMouseUp(e24);\n      let t2 = this.upperCanvasEl, n2 = this._getEventPrefix();\n      if (this._isMainEvent(e24)) {\n        let e25 = H(this.upperCanvasEl);\n        Z(e25, `${n2}up`, this._onMouseUp), Z(e25, `${n2}move`, this._onMouseMove, X), po(t2, `${n2}move`, this._onMouseMove, X);\n      }\n      this._resetTransformEventData();\n    }\n    _onMouseMove(e24) {\n      this._cacheTransformEventData(e24);\n      let t2 = this.getActiveObject();\n      !this.allowTouchScrolling && (!t2 || !t2.shouldStartDragging(e24)) && e24.preventDefault && e24.preventDefault(), this.__onMouseMove(e24), this._resetTransformEventData();\n    }\n    _onResize() {\n      this.calcOffset(), this._resetTransformEventData();\n    }\n    _shouldRender(e24) {\n      let t2 = this.getActiveObject();\n      return !!t2 != !!e24 || t2 && e24 && t2 !== e24;\n    }\n    __onMouseUp(e24) {\n      var t2;\n      this._handleEvent(e24, `up:before`);\n      let n2 = this._currentTransform, r2 = this._isClick, { target: i2 } = this.findTarget(e24), { button: a2 } = e24;\n      if (a2) return void ((this.fireMiddleClick && a2 === 1 || this.fireRightClick && a2 === 2) && this._handleEvent(e24, `up`));\n      if (this.isDrawingMode && this._isCurrentlyDrawing) return void this._onMouseUpInDrawingMode(e24);\n      if (!this._isMainEvent(e24)) return;\n      let o2, s3, c2 = false;\n      if (n2 && (this._finalizeCurrentTransform(e24), c2 = n2.actionPerformed), !r2) {\n        let t3 = i2 === this._activeObject;\n        this.handleSelection(e24), c2 || (c2 = this._shouldRender(i2) || !t3 && i2 === this._activeObject);\n      }\n      if (i2) {\n        let { key: t3, control: r3 } = i2.findControl(this.getViewportPoint(e24), St(e24)) || {};\n        if (s3 = t3, i2.selectable && i2 !== this._activeObject && i2.activeOn === `up`) this.setActiveObject(i2, e24), c2 = true;\n        else if (r3) {\n          let t4 = r3.getMouseUpHandler(e24, i2, r3);\n          t4 && (o2 = this.getScenePoint(e24), t4.call(r3, e24, n2, o2.x, o2.y));\n        }\n        i2.isMoving = false;\n      }\n      if (n2 && (n2.target !== i2 || n2.corner !== s3)) {\n        let t3 = n2.target && n2.target.controls[n2.corner], r3 = t3 && t3.getMouseUpHandler(e24, n2.target, t3);\n        o2 = o2 || this.getScenePoint(e24), r3 && r3.call(t3, e24, n2, o2.x, o2.y);\n      }\n      this._setCursorFromEvent(e24, i2), this._handleEvent(e24, `up`), this._groupSelector = null, this._currentTransform = null, i2 && (i2.__corner = void 0), c2 ? this.requestRenderAll() : r2 || (t2 = this._activeObject) != null && t2.isEditing || this.renderTop();\n    }\n    _basicEventHandler(e24, t2) {\n      let { target: n2, subTargets: r2 = [] } = t2;\n      this.fire(e24, t2), n2 && n2.fire(e24, t2);\n      for (let i2 = 0; i2 < r2.length; i2++) r2[i2] !== n2 && r2[i2].fire(e24, t2);\n      return t2;\n    }\n    _handleEvent(e24, t2, n2) {\n      let { target: r2, subTargets: i2 } = this.findTarget(e24), a2 = { e: e24, target: r2, subTargets: i2, ...fo(this, e24), transform: this._currentTransform, ...t2 === `down:before` || t2 === `down` ? n2 : {} };\n      t2 !== `up:before` && t2 !== `up` || (a2.isClick = this._isClick), this.fire(`mouse:${t2}`, a2), r2 && r2.fire(`mouse${t2}`, a2);\n      for (let e25 = 0; e25 < i2.length; e25++) i2[e25] !== r2 && i2[e25].fire(`mouse${t2}`, a2);\n    }\n    _onMouseDownInDrawingMode(e24) {\n      this._isCurrentlyDrawing = true, this.getActiveObject() && (this.discardActiveObject(e24), this.requestRenderAll());\n      let t2 = this.getScenePoint(e24);\n      this.freeDrawingBrush && this.freeDrawingBrush.onMouseDown(t2, { e: e24, pointer: t2 }), this._handleEvent(e24, `down`, { alreadySelected: false });\n    }\n    _onMouseMoveInDrawingMode(e24) {\n      if (this._isCurrentlyDrawing) {\n        let t2 = this.getScenePoint(e24);\n        this.freeDrawingBrush && this.freeDrawingBrush.onMouseMove(t2, { e: e24, pointer: t2 });\n      }\n      this.setCursor(this.freeDrawingCursor), this._handleEvent(e24, `move`);\n    }\n    _onMouseUpInDrawingMode(e24) {\n      let t2 = this.getScenePoint(e24);\n      this.freeDrawingBrush ? this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({ e: e24, pointer: t2 }) : this._isCurrentlyDrawing = false, this._handleEvent(e24, `up`);\n    }\n    __onMouseDown(e24) {\n      this._isClick = true, this._handleEvent(e24, `down:before`);\n      let { target: t2 } = this.findTarget(e24), n2 = !!t2 && t2 === this._activeObject, { button: r2 } = e24;\n      if (r2) return void ((this.fireMiddleClick && r2 === 1 || this.fireRightClick && r2 === 2) && this._handleEvent(e24, `down`, { alreadySelected: n2 }));\n      if (this.isDrawingMode) return void this._onMouseDownInDrawingMode(e24);\n      if (!this._isMainEvent(e24) || this._currentTransform) return;\n      let i2 = this._shouldRender(t2), a2 = false;\n      if (this.handleMultiSelection(e24, t2) ? (t2 = this._activeObject, a2 = true, i2 = true) : this._shouldClearSelection(e24, t2) && this.discardActiveObject(e24), this.selection && (!t2 || !t2.selectable && !t2.isEditing && t2 !== this._activeObject)) {\n        let t3 = this.getScenePoint(e24);\n        this._groupSelector = { x: t3.x, y: t3.y, deltaY: 0, deltaX: 0 };\n      }\n      if (n2 = !!t2 && t2 === this._activeObject, t2) {\n        t2.selectable && t2.activeOn === `down` && this.setActiveObject(t2, e24);\n        let r3 = t2.findControl(this.getViewportPoint(e24), St(e24));\n        if (t2 === this._activeObject && (r3 || !a2)) {\n          this._setupCurrentTransform(e24, t2, n2);\n          let i3 = r3 ? r3.control : void 0, a3 = this.getScenePoint(e24), o2 = i3 && i3.getMouseDownHandler(e24, t2, i3);\n          o2 && o2.call(i3, e24, this._currentTransform, a3.x, a3.y);\n        }\n      }\n      i2 && (this._objectsToRender = void 0), this._handleEvent(e24, `down`, { alreadySelected: n2 }), i2 && this.requestRenderAll();\n    }\n    _resetTransformEventData() {\n      this._targetInfo = this._viewportPoint = this._scenePoint = void 0;\n    }\n    _cacheTransformEventData(e24) {\n      this._resetTransformEventData(), this._viewportPoint = this.getViewportPoint(e24), this._scenePoint = Mt(this._viewportPoint, void 0, this.viewportTransform), this._targetInfo = this.findTarget(e24), this._currentTransform && (this._targetInfo.target = this._currentTransform.target);\n    }\n    __onMouseMove(e24) {\n      if (this._isClick = false, this._handleEvent(e24, `move:before`), this.isDrawingMode) return void this._onMouseMoveInDrawingMode(e24);\n      if (!this._isMainEvent(e24)) return;\n      let t2 = this._groupSelector;\n      if (t2) {\n        let n2 = this.getScenePoint(e24);\n        t2.deltaX = n2.x - t2.x, t2.deltaY = n2.y - t2.y, this.renderTop();\n      } else if (this._currentTransform) this._transformObject(e24);\n      else {\n        let { target: t3 } = this.findTarget(e24);\n        this._setCursorFromEvent(e24, t3), this._fireOverOutEvents(e24, t3);\n      }\n      this.textEditingManager.onMouseMove(e24), this._handleEvent(e24, `move`);\n    }\n    _fireOverOutEvents(e24, t2) {\n      let { _hoveredTarget: n2, _hoveredTargets: r2 } = this, { subTargets: i2, currentTarget: a2 } = this.findTarget(e24), o2 = Math.max(r2.length, i2.length);\n      this.fireSyntheticInOutEvents(`mouse`, { e: e24, target: t2, oldTarget: n2, actualTarget: a2, oldActualTarget: this._hoveredActualTarget, fireCanvas: true });\n      for (let a3 = 0; a3 < o2; a3++) i2[a3] === t2 || r2[a3] && r2[a3] === n2 || this.fireSyntheticInOutEvents(`mouse`, { e: e24, target: i2[a3], oldTarget: r2[a3] });\n      this._hoveredActualTarget = a2, this._hoveredTarget = t2, this._hoveredTargets = i2;\n    }\n    _fireEnterLeaveEvents(e24, t2, n2) {\n      let r2 = this._draggedoverTarget, i2 = this._hoveredTargets, { subTargets: a2 } = this.findTarget(e24), o2 = Math.max(i2.length, a2.length);\n      this.fireSyntheticInOutEvents(`drag`, { ...n2, target: t2, oldTarget: r2, fireCanvas: true });\n      for (let e25 = 0; e25 < o2; e25++) this.fireSyntheticInOutEvents(`drag`, { ...n2, target: a2[e25], oldTarget: i2[e25] });\n      this._draggedoverTarget = t2;\n    }\n    fireSyntheticInOutEvents(e24, { target: t2, oldTarget: n2, actualTarget: r2, oldActualTarget: i2, fireCanvas: a2, e: o2, ...s3 }) {\n      let { targetIn: c2, targetOut: l2, canvasIn: u2, canvasOut: d2 } = mo[e24], f2 = n2 !== t2, p2 = i2 !== r2, m = t2 && f2, h2 = r2 && p2, g2 = n2 && f2, _2 = i2 && p2, v2 = { ...s3, e: o2, ...fo(this, o2) }, y2 = { ...v2, target: n2, nextTarget: t2, actualTarget: i2, nextActualTarget: r2 };\n      (g2 || _2) && a2 && this.fire(d2, y2), g2 && n2.fire(l2, y2), _2 && n2 !== i2 && i2.fire(l2, y2);\n      let b2 = { ...v2, target: t2, previousTarget: n2, actualTarget: r2, previousActualTarget: i2 };\n      (m || h2) && a2 && this.fire(u2, b2), m && t2.fire(c2, b2), h2 && r2 !== t2 && r2.fire(c2, b2);\n    }\n    _transformObject(e24) {\n      let t2 = this.getScenePoint(e24), n2 = this._currentTransform, r2 = n2.target, i2 = r2.group ? Mt(t2, void 0, r2.group.calcTransformMatrix()) : t2;\n      n2.shiftKey = e24.shiftKey, n2.altKey = !!this.centeredKey && e24[this.centeredKey], this._performTransformAction(e24, n2, i2), n2.actionPerformed && this.requestRenderAll();\n    }\n    _performTransformAction(e24, t2, n2) {\n      let { action: r2, actionHandler: i2, target: a2 } = t2, o2 = !!i2 && i2(e24, t2, n2.x, n2.y);\n      o2 && a2.setCoords(), r2 === `drag` && o2 && (t2.target.isMoving = true, this.setCursor(t2.target.moveCursor || this.moveCursor)), t2.actionPerformed = t2.actionPerformed || o2;\n    }\n    _setCursorFromEvent(e24, t2) {\n      if (!t2) return void this.setCursor(this.defaultCursor);\n      let n2 = t2.hoverCursor || this.hoverCursor, r2 = at(this._activeObject) ? this._activeObject : null, i2 = (!r2 || t2.group !== r2) && t2.findControl(this.getViewportPoint(e24));\n      if (i2) {\n        let { control: n3, coord: r3 } = i2;\n        this.setCursor(n3.cursorStyleHandler(e24, n3, t2, r3));\n      } else {\n        if (t2.subTargetCheck) {\n          let { subTargets: t3 } = this.findTarget(e24);\n          t3.concat().reverse().forEach((e25) => {\n            n2 = e25.hoverCursor || n2;\n          });\n        }\n        this.setCursor(n2);\n      }\n    }\n    handleMultiSelection(e24, t2) {\n      let n2 = this._activeObject, r2 = at(n2);\n      if (n2 && this._isSelectionKeyPressed(e24) && this.selection && t2 && t2.selectable && (n2 !== t2 || r2) && (r2 || !t2.isDescendantOf(n2) && !n2.isDescendantOf(t2)) && !t2.onSelect({ e: e24 }) && !n2.getActiveControl()) {\n        if (r2) {\n          let r3 = n2.getObjects(), i2 = [];\n          if (t2 === n2) {\n            let n3 = this.getScenePoint(e24), a2 = this.searchPossibleTargets(r3, n3);\n            if (a2.target ? (t2 = a2.target, i2 = a2.subTargets) : (a2 = this.searchPossibleTargets(this._objects, n3), t2 = a2.target, i2 = a2.subTargets), !t2 || !t2.selectable) return false;\n          }\n          t2.group === n2 ? (n2.remove(t2), this._hoveredTarget = t2, this._hoveredTargets = i2, n2.size() === 1 && this._setActiveObject(n2.item(0), e24)) : (n2.multiSelectAdd(t2), this._hoveredTarget = n2, this._hoveredTargets = i2), this._fireSelectionEvents(r3, e24);\n        } else {\n          n2.isEditing && n2.exitEditing();\n          let r3 = new (M.getClass(`ActiveSelection`))([], { canvas: this });\n          r3.multiSelectAdd(n2, t2), this._hoveredTarget = r3, this._setActiveObject(r3, e24), this._fireSelectionEvents([n2], e24);\n        }\n        return true;\n      }\n      return false;\n    }\n    handleSelection(e24) {\n      if (!this.selection || !this._groupSelector) return false;\n      let { x: t2, y: n2, deltaX: r2, deltaY: i2 } = this._groupSelector, a2 = new N(t2, n2), o2 = a2.add(new N(r2, i2)), s3 = a2.min(o2), c2 = a2.max(o2).subtract(s3), l2 = this.collectObjects({ left: s3.x, top: s3.y, width: c2.x, height: c2.y }, { includeIntersecting: !this.selectionFullyContained }), u2 = a2.eq(o2) ? l2[0] ? [l2[0]] : [] : l2.length > 1 ? l2.filter((t3) => !t3.onSelect({ e: e24 })).reverse() : l2;\n      if (u2.length === 1) this.setActiveObject(u2[0], e24);\n      else if (u2.length > 1) {\n        let t3 = M.getClass(`ActiveSelection`);\n        this.setActiveObject(new t3(u2, { canvas: this }), e24);\n      }\n      return this._groupSelector = null, true;\n    }\n    toCanvasElement(e24 = 1, t2) {\n      let { upper: n2 } = this.elements;\n      n2.ctx = void 0;\n      let r2 = super.toCanvasElement(e24, t2);\n      return n2.ctx = n2.el.getContext(`2d`), r2;\n    }\n    clear() {\n      this.textEditingManager.clear(), super.clear();\n    }\n    destroy() {\n      this.removeListeners(), this.textEditingManager.dispose(), super.destroy();\n    }\n  };\n  var go = { x1: 0, y1: 0, x2: 0, y2: 0 };\n  var _o = { ...go, r1: 0, r2: 0 };\n  var vo = (e24, t2) => isNaN(e24) && typeof t2 == `number` ? t2 : e24;\n  function yo(e24) {\n    return e24 && /%$/.test(e24) && Number.isFinite(parseFloat(e24));\n  }\n  function bo(e24, t2) {\n    return Vn(0, vo(typeof e24 == `number` ? e24 : typeof e24 == `string` ? parseFloat(e24) / (yo(e24) ? 100 : 1) : NaN, t2), 1);\n  }\n  var xo = /\\s*;\\s*/;\n  var So = /\\s*:\\s*/;\n  function Co(e24, t2) {\n    let n2, r2, i2 = e24.getAttribute(`style`);\n    if (i2) {\n      let e25 = i2.split(xo);\n      e25[e25.length - 1] === `` && e25.pop();\n      for (let t3 = e25.length; t3--; ) {\n        let [i3, a3] = e25[t3].split(So).map((e26) => e26.trim());\n        i3 === `stop-color` ? n2 = a3 : i3 === `stop-opacity` && (r2 = a3);\n      }\n    }\n    n2 = n2 || e24.getAttribute(`stop-color`) || `rgb(0,0,0)`, r2 = vo(parseFloat(r2 || e24.getAttribute(`stop-opacity`) || ``), 1);\n    let a2 = new G(n2);\n    return a2.setAlpha(a2.getAlpha() * r2 * t2), { offset: bo(e24.getAttribute(`offset`), 0), color: a2.toRgba() };\n  }\n  function wo(e24, t2) {\n    let n2 = [], r2 = e24.getElementsByTagName(`stop`), i2 = bo(t2, 1);\n    for (let e25 = r2.length; e25--; ) n2.push(Co(r2[e25], i2));\n    return n2;\n  }\n  function To(e24) {\n    return e24.nodeName === `linearGradient` || e24.nodeName === `LINEARGRADIENT` ? `linear` : `radial`;\n  }\n  function Eo(e24) {\n    return e24.getAttribute(`gradientUnits`) === `userSpaceOnUse` ? `pixels` : `percentage`;\n  }\n  function Do(e24, t2) {\n    return e24.getAttribute(t2);\n  }\n  function Oo(e24, t2) {\n    return function(e25, { width: t3, height: n2, gradientUnits: r2 }) {\n      let i2;\n      return Object.entries(e25).reduce((e26, [a2, o2]) => {\n        if (o2 === `Infinity`) i2 = 1;\n        else if (o2 === `-Infinity`) i2 = 0;\n        else {\n          let e27 = typeof o2 == `string`;\n          i2 = e27 ? parseFloat(o2) : o2, e27 && yo(o2) && (i2 *= 0.01, r2 === `pixels` && (a2 !== `x1` && a2 !== `x2` && a2 !== `r2` || (i2 *= t3), a2 !== `y1` && a2 !== `y2` || (i2 *= n2)));\n        }\n        return e26[a2] = i2, e26;\n      }, {});\n    }(To(e24) === `linear` ? function(e25) {\n      return { x1: Do(e25, `x1`) || 0, y1: Do(e25, `y1`) || 0, x2: Do(e25, `x2`) || `100%`, y2: Do(e25, `y2`) || 0 };\n    }(e24) : function(e25) {\n      return { x1: Do(e25, `fx`) || Do(e25, `cx`) || `50%`, y1: Do(e25, `fy`) || Do(e25, `cy`) || `50%`, r1: 0, x2: Do(e25, `cx`) || `50%`, y2: Do(e25, `cy`) || `50%`, r2: Do(e25, `r`) || `50%` };\n    }(e24), { ...t2, gradientUnits: Eo(e24) });\n  }\n  var ko = class {\n    constructor(e24) {\n      let { type: t2 = `linear`, gradientUnits: n2 = `pixels`, coords: r2 = {}, colorStops: i2 = [], offsetX: a2 = 0, offsetY: o2 = 0, gradientTransform: s3, id: c2 } = e24 || {};\n      Object.assign(this, { type: t2, gradientUnits: n2, coords: { ...t2 === `radial` ? _o : go, ...r2 }, colorStops: i2, offsetX: a2, offsetY: o2, gradientTransform: s3, id: c2 ? `${c2}_${je()}` : je() });\n    }\n    addColorStop(e24) {\n      for (let t2 in e24) this.colorStops.push({ offset: parseFloat(t2), color: e24[t2] });\n      return this;\n    }\n    toObject(e24) {\n      return { ...et(this, e24), type: this.type, coords: { ...this.coords }, colorStops: this.colorStops.map((e25) => ({ ...e25 })), offsetX: this.offsetX, offsetY: this.offsetY, gradientUnits: this.gradientUnits, gradientTransform: this.gradientTransform ? [...this.gradientTransform] : void 0 };\n    }\n    toSVG(e24, { additionalTransform: t2 } = {}) {\n      let n2 = [], r2 = this.gradientTransform ? this.gradientTransform.concat() : T.concat(), i2 = this.gradientUnits === `pixels` ? `userSpaceOnUse` : `objectBoundingBox`, a2 = this.colorStops.map((e25) => ({ ...e25 })).sort((e25, t3) => e25.offset - t3.offset), o2 = -this.offsetX, s3 = -this.offsetY;\n      var c2;\n      i2 === `objectBoundingBox` ? (o2 /= e24.width, s3 /= e24.height) : (o2 += e24.width / 2, s3 += e24.height / 2), (c2 = e24) && typeof c2._renderPathCommands == `function` && this.gradientUnits !== `percentage` && (o2 -= e24.pathOffset.x, s3 -= e24.pathOffset.y), r2[4] -= o2, r2[5] -= s3;\n      let l2 = [`id=\"SVGID_${U(String(this.id))}\"`, `gradientUnits=\"${i2}\"`, `gradientTransform=\"${t2 ? t2 + ` ` : ``}${nt(r2)}\"`, ``].join(` `), u2 = (e25) => parseFloat(String(e25));\n      if (this.type === `linear`) {\n        let { x1: e25, y1: t3, x2: r3, y2: i3 } = this.coords, a3 = u2(e25), o3 = u2(t3), s4 = u2(r3), c3 = u2(i3);\n        n2.push(`<linearGradient `, l2, ` x1=\"`, a3, `\" y1=\"`, o3, `\" x2=\"`, s4, `\" y2=\"`, c3, `\">\n`);\n      } else if (this.type === `radial`) {\n        let { x1: e25, y1: t3, x2: r3, y2: i3, r1: o3, r2: s4 } = this.coords, c3 = u2(e25), d2 = u2(t3), f2 = u2(r3), p2 = u2(i3), m = u2(o3), h2 = u2(s4), g2 = m > h2;\n        n2.push(`<radialGradient `, l2, ` cx=\"`, g2 ? c3 : f2, `\" cy=\"`, g2 ? d2 : p2, `\" r=\"`, g2 ? m : h2, `\" fx=\"`, g2 ? f2 : c3, `\" fy=\"`, g2 ? p2 : d2, `\">\n`), g2 && (a2.reverse(), a2.forEach((e26) => {\n          e26.offset = 1 - e26.offset;\n        }));\n        let _2 = Math.min(m, h2);\n        if (_2 > 0) {\n          let e26 = _2 / Math.max(m, h2);\n          a2.forEach((t4) => {\n            t4.offset += e26 * (1 - t4.offset);\n          });\n        }\n      }\n      return a2.forEach(({ color: e25, offset: t3 }) => {\n        let r3 = String(e25), i3 = nn(r3) ? r3 : new G(r3).toRgba();\n        n2.push(`<stop offset=\"${100 * t3}%\" style=\"stop-color:${U(i3)};\"/>\n`);\n      }), n2.push(this.type === `linear` ? `</linearGradient>` : `</radialGradient>`, `\n`), n2.join(``);\n    }\n    toLive(e24) {\n      let { x1: t2, y1: n2, x2: r2, y2: i2, r1: a2, r2: o2 } = this.coords, s3 = this.type === `linear` ? e24.createLinearGradient(t2, n2, r2, i2) : e24.createRadialGradient(t2, n2, a2, r2, i2, o2);\n      return this.colorStops.forEach(({ color: e25, offset: t3 }) => {\n        s3.addColorStop(t3, e25);\n      }), s3;\n    }\n    static async fromObject(e24) {\n      let { colorStops: t2, gradientTransform: n2 } = e24;\n      return new this({ ...e24, colorStops: t2 ? t2.map((e25) => ({ ...e25 })) : void 0, gradientTransform: n2 ? [...n2] : void 0 });\n    }\n    static fromElement(e24, t2, n2) {\n      let r2 = Eo(e24), i2 = t2._findCenterFromElement();\n      return new this({ id: e24.getAttribute(`id`) || void 0, type: To(e24), coords: Oo(e24, { width: n2.viewBoxWidth || n2.width, height: n2.viewBoxHeight || n2.height }), colorStops: wo(e24, n2.opacity), gradientUnits: r2, gradientTransform: Ki(e24.getAttribute(`gradientTransform`) || ``), ...r2 === `pixels` ? { offsetX: t2.width / 2 - i2.x, offsetY: t2.height / 2 - i2.y } : { offsetX: 0, offsetY: 0 } });\n    }\n  };\n  i(ko, `type`, `Gradient`), M.setClass(ko, `gradient`), M.setClass(ko, `linear`), M.setClass(ko, `radial`);\n  var Ao = class {\n    get type() {\n      return `pattern`;\n    }\n    set type(e24) {\n      s(`warn`, `Setting type has no effect`, e24);\n    }\n    constructor(e24) {\n      i(this, `repeat`, `repeat`), i(this, `offsetX`, 0), i(this, `offsetY`, 0), i(this, `crossOrigin`, ``), this.id = je(), Object.assign(this, e24);\n    }\n    isImageSource() {\n      return !!this.source && typeof this.source.src == `string`;\n    }\n    isCanvasSource() {\n      return !!this.source && !!this.source.toDataURL;\n    }\n    sourceToString() {\n      return this.isImageSource() ? this.source.src : this.isCanvasSource() ? this.source.toDataURL() : ``;\n    }\n    toLive(e24) {\n      return this.source && (!this.isImageSource() || this.source.complete && this.source.naturalWidth !== 0 && this.source.naturalHeight !== 0) ? e24.createPattern(this.source, this.repeat) : null;\n    }\n    toObject(e24 = []) {\n      let { repeat: t2, crossOrigin: n2 } = this;\n      return { ...et(this, e24), type: `pattern`, source: this.sourceToString(), repeat: t2, crossOrigin: n2, offsetX: B(this.offsetX, o.NUM_FRACTION_DIGITS), offsetY: B(this.offsetY, o.NUM_FRACTION_DIGITS), patternTransform: this.patternTransform ? [...this.patternTransform] : null };\n    }\n    toSVG({ width: e24, height: t2 }) {\n      let { source: n2, repeat: r2, id: i2 } = this, a2 = vo(this.offsetX / e24, 0), o2 = vo(this.offsetY / t2, 0), s3 = r2 === `repeat-y` || r2 === `no-repeat` ? 1 + Math.abs(a2 || 0) : vo(n2.width / e24, 0), c2 = r2 === `repeat-x` || r2 === `no-repeat` ? 1 + Math.abs(o2 || 0) : vo(n2.height / t2, 0);\n      return [`<pattern id=\"SVGID_${U(i2)}\" x=\"${a2}\" y=\"${o2}\" width=\"${s3}\" height=\"${c2}\">`, `<image x=\"0\" y=\"0\" width=\"${n2.width}\" height=\"${n2.height}\" xlink:href=\"${U(this.sourceToString())}\"></image>`, `</pattern>`, ``].join(`\n`);\n    }\n    static async fromObject({ type: e24, source: t2, patternTransform: n2, ...r2 }, i2) {\n      let a2 = await Ze(t2, { ...i2, crossOrigin: r2.crossOrigin });\n      return new this({ ...r2, patternTransform: n2 && n2.slice(0), source: a2 });\n    }\n  };\n  i(Ao, `type`, `Pattern`), M.setClass(Ao), M.setClass(Ao, `pattern`);\n  var Mo = class e13 extends J {\n    constructor(t2, { path: n2, left: r2, top: i2, ...a2 } = {}) {\n      super(), Object.assign(this, e13.ownDefaults), this.setOptions(a2), this._setPath(t2 || [], true), typeof r2 == `number` && this.set(`left`, r2), typeof i2 == `number` && this.set(`top`, i2);\n    }\n    _setPath(e24, t2) {\n      this.path = ba(Array.isArray(e24) ? e24 : La(e24)), this.setBoundingBox(t2);\n    }\n    _findCenterFromElement() {\n      let e24 = this._calcBoundsFromPath();\n      return new N(e24.left + e24.width / 2, e24.top + e24.height / 2);\n    }\n    _renderPathCommands(e24) {\n      let t2 = -this.pathOffset.x, n2 = -this.pathOffset.y;\n      e24.beginPath();\n      for (let r2 of this.path) switch (r2[0]) {\n        case `L`:\n          e24.lineTo(r2[1] + t2, r2[2] + n2);\n          break;\n        case `M`:\n          e24.moveTo(r2[1] + t2, r2[2] + n2);\n          break;\n        case `C`:\n          e24.bezierCurveTo(r2[1] + t2, r2[2] + n2, r2[3] + t2, r2[4] + n2, r2[5] + t2, r2[6] + n2);\n          break;\n        case `Q`:\n          e24.quadraticCurveTo(r2[1] + t2, r2[2] + n2, r2[3] + t2, r2[4] + n2);\n          break;\n        case `Z`:\n          e24.closePath();\n      }\n    }\n    _render(e24) {\n      this._renderPathCommands(e24), this._renderPaintInOrder(e24);\n    }\n    toString() {\n      return `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${this.left} }>`;\n    }\n    toObject(e24 = []) {\n      return { ...super.toObject(e24), path: this.path.map((e25) => e25.slice()) };\n    }\n    toDatalessObject(e24 = []) {\n      let t2 = this.toObject(e24);\n      return this.sourcePath && (delete t2.path, t2.sourcePath = this.sourcePath), t2;\n    }\n    _toSVG() {\n      return [`<path `, `COMMON_PARTS`, `d=\"${Va(this.path, o.NUM_FRACTION_DIGITS)}\" stroke-linecap=\"round\" />\n`];\n    }\n    _getOffsetTransform() {\n      let e24 = o.NUM_FRACTION_DIGITS;\n      return ` translate(${B(-this.pathOffset.x, e24)}, ${B(-this.pathOffset.y, e24)})`;\n    }\n    toClipPathSVG(e24) {\n      let t2 = this._getOffsetTransform();\n      return `\t` + this._createBaseClipPathSVGMarkup(this._toSVG(), { reviver: e24, additionalTransform: t2 });\n    }\n    toSVG(e24) {\n      let t2 = this._getOffsetTransform();\n      return this._createBaseSVGMarkup(this._toSVG(), { reviver: e24, additionalTransform: t2 });\n    }\n    complexity() {\n      return this.path.length;\n    }\n    setDimensions() {\n      this.setBoundingBox();\n    }\n    setBoundingBox(e24) {\n      let { width: t2, height: n2, pathOffset: r2 } = this._calcDimensions();\n      this.set({ width: t2, height: n2, pathOffset: r2 }), e24 && this.setPositionByOrigin(r2, `center`, `center`);\n    }\n    _calcBoundsFromPath() {\n      let e24 = [], t2 = 0, n2 = 0, r2 = 0, i2 = 0;\n      for (let a2 of this.path) switch (a2[0]) {\n        case `L`:\n          r2 = a2[1], i2 = a2[2], e24.push({ x: t2, y: n2 }, { x: r2, y: i2 });\n          break;\n        case `M`:\n          r2 = a2[1], i2 = a2[2], t2 = r2, n2 = i2;\n          break;\n        case `C`:\n          e24.push(...va(r2, i2, a2[1], a2[2], a2[3], a2[4], a2[5], a2[6])), r2 = a2[5], i2 = a2[6];\n          break;\n        case `Q`:\n          e24.push(...va(r2, i2, a2[1], a2[2], a2[1], a2[2], a2[3], a2[4])), r2 = a2[3], i2 = a2[4];\n          break;\n        case `Z`:\n          r2 = t2, i2 = n2;\n      }\n      return wt(e24);\n    }\n    _calcDimensions() {\n      let e24 = this._calcBoundsFromPath();\n      return { ...e24, pathOffset: new N(e24.left + e24.width / 2, e24.top + e24.height / 2) };\n    }\n    static fromObject(e24) {\n      return this._fromObject(e24, { extraParam: `path` });\n    }\n    static async fromElement(e24, t2, n2) {\n      let { d: r2, ...i2 } = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return new this(r2, { ...i2, ...t2, left: void 0, top: void 0 });\n    }\n  };\n  i(Mo, `type`, `Path`), i(Mo, `cacheProperties`, [...Un, `path`, `fillRule`]), i(Mo, `ATTRIBUTE_NAMES`, [...ki, `d`]), M.setClass(Mo), M.setSVGClass(Mo);\n  var Po = [`radius`, `startAngle`, `endAngle`, `counterClockwise`];\n  var Fo = class e14 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e14.ownDefaults };\n    }\n    constructor(t2) {\n      super(), Object.assign(this, e14.ownDefaults), this.setOptions(t2);\n    }\n    _set(e24, t2) {\n      return super._set(e24, t2), e24 === `radius` && this.setRadius(t2), this;\n    }\n    _render(e24) {\n      e24.beginPath(), e24.arc(0, 0, this.radius, I(this.startAngle), I(this.endAngle), this.counterClockwise), this._renderPaintInOrder(e24);\n    }\n    getRadiusX() {\n      return this.get(`radius`) * this.get(de);\n    }\n    getRadiusY() {\n      return this.get(`radius`) * this.get(fe);\n    }\n    setRadius(e24) {\n      this.radius = e24, this.set({ width: 2 * e24, height: 2 * e24 });\n    }\n    toObject(e24 = []) {\n      return super.toObject([...Po, ...e24]);\n    }\n    _toSVG() {\n      let { radius: e24, startAngle: t2, endAngle: n2 } = this, r2 = (n2 - t2) % 360;\n      if (r2 === 0) return [`<circle `, `COMMON_PARTS`, `cx=\"0\" cy=\"0\" `, `r=\"`, `${U(e24)}`, `\" />\n`];\n      {\n        let i2 = I(t2), a2 = I(n2), o2 = Se(i2) * e24, s3 = Ce(i2) * e24, c2 = Se(a2) * e24, l2 = Ce(a2) * e24;\n        return [`<path d=\"M ${o2} ${s3} A ${e24} ${e24} 0 ${+(r2 > 180)} ${+!this.counterClockwise} ${c2} ${l2}\" `, `COMMON_PARTS`, ` />\n`];\n      }\n    }\n    static async fromElement(e24, t2, n2) {\n      let { left: r2 = 0, top: i2 = 0, radius: a2 = 0, ...o2 } = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return new this({ ...o2, radius: a2, left: r2 - a2, top: i2 - a2 });\n    }\n    static fromObject(e24) {\n      return super._fromObject(e24);\n    }\n  };\n  i(Fo, `type`, `Circle`), i(Fo, `cacheProperties`, [...Un, ...Po]), i(Fo, `ownDefaults`, { radius: 0, startAngle: 0, endAngle: 360, counterClockwise: false }), i(Fo, `ATTRIBUTE_NAMES`, [`cx`, `cy`, `r`, ...ki]), M.setClass(Fo), M.setSVGClass(Fo);\n  var zo = [`x1`, `x2`, `y1`, `y2`];\n  var Bo = class e15 extends J {\n    constructor([t2, n2, r2, i2] = [0, 0, 0, 0], a2 = {}) {\n      super(), Object.assign(this, e15.ownDefaults), this.setOptions(a2), this.x1 = t2, this.x2 = r2, this.y1 = n2, this.y2 = i2, this._setWidthHeight();\n      let { left: o2, top: s3 } = a2;\n      typeof o2 == `number` && this.set(`left`, o2), typeof s3 == `number` && this.set(`top`, s3);\n    }\n    _setWidthHeight() {\n      let { x1: e24, y1: t2, x2: n2, y2: r2 } = this;\n      this.width = Math.abs(n2 - e24), this.height = Math.abs(r2 - t2);\n      let { left: i2, top: a2, width: o2, height: s3 } = wt([{ x: e24, y: t2 }, { x: n2, y: r2 }]), c2 = new N(i2 + o2 / 2, a2 + s3 / 2);\n      this.setPositionByOrigin(c2, E, E);\n    }\n    _set(e24, t2) {\n      return super._set(e24, t2), zo.includes(e24) && this._setWidthHeight(), this;\n    }\n    _render(e24) {\n      e24.beginPath();\n      let t2 = this.calcLinePoints();\n      e24.moveTo(t2.x1, t2.y1), e24.lineTo(t2.x2, t2.y2), e24.lineWidth = this.strokeWidth;\n      let n2 = e24.strokeStyle;\n      var r2;\n      V(this.stroke) ? e24.strokeStyle = this.stroke.toLive(e24) : e24.strokeStyle = (r2 = this.stroke) == null ? e24.fillStyle : r2, this.stroke && this._renderStroke(e24), e24.strokeStyle = n2;\n    }\n    _findCenterFromElement() {\n      return new N((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n    }\n    toObject(e24 = []) {\n      return { ...super.toObject(e24), ...this.calcLinePoints() };\n    }\n    _getNonTransformedDimensions() {\n      let e24 = super._getNonTransformedDimensions();\n      return this.strokeLineCap === `butt` && (this.width === 0 && (e24.y -= this.strokeWidth), this.height === 0 && (e24.x -= this.strokeWidth)), e24;\n    }\n    calcLinePoints() {\n      let { x1: e24, x2: t2, y1: n2, y2: r2, width: i2, height: a2 } = this, o2 = e24 <= t2 ? -0.5 : 0.5, s3 = n2 <= r2 ? -0.5 : 0.5;\n      return { x1: o2 * i2, x2: o2 * -i2, y1: s3 * a2, y2: s3 * -a2 };\n    }\n    _toSVG() {\n      let { x1: e24, x2: t2, y1: n2, y2: r2 } = this.calcLinePoints();\n      return [`<line `, `COMMON_PARTS`, `x1=\"${e24}\" y1=\"${n2}\" x2=\"${t2}\" y2=\"${r2}\" />\n`];\n    }\n    static async fromElement(e24, t2, n2) {\n      let { x1: r2 = 0, y1: i2 = 0, x2: a2 = 0, y2: o2 = 0, ...s3 } = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return new this([r2, i2, a2, o2], s3);\n    }\n    static fromObject({ x1: e24, y1: t2, x2: n2, y2: r2, ...i2 }) {\n      return this._fromObject({ ...i2, points: [e24, t2, n2, r2] }, { extraParam: `points` });\n    }\n  };\n  i(Bo, `type`, `Line`), i(Bo, `cacheProperties`, [...Un, ...zo]), i(Bo, `ATTRIBUTE_NAMES`, ki.concat(zo)), M.setClass(Bo), M.setSVGClass(Bo);\n  var Vo = class e16 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e16.ownDefaults };\n    }\n    constructor(t2) {\n      super(), Object.assign(this, e16.ownDefaults), this.setOptions(t2);\n    }\n    _render(e24) {\n      let t2 = this.width / 2, n2 = this.height / 2;\n      e24.beginPath(), e24.moveTo(-t2, n2), e24.lineTo(0, -n2), e24.lineTo(t2, n2), e24.closePath(), this._renderPaintInOrder(e24);\n    }\n    _toSVG() {\n      let e24 = this.width / 2, t2 = this.height / 2;\n      return [`<polygon `, `COMMON_PARTS`, `points=\"`, `${-e24} ${t2},0 ${-t2},${e24} ${t2}`, `\" />`];\n    }\n  };\n  i(Vo, `type`, `Triangle`), i(Vo, `ownDefaults`, { width: 100, height: 100 }), M.setClass(Vo), M.setSVGClass(Vo);\n  var Ho = [`rx`, `ry`];\n  var Uo = class e17 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e17.ownDefaults };\n    }\n    constructor(t2) {\n      super(), Object.assign(this, e17.ownDefaults), this.setOptions(t2);\n    }\n    _set(e24, t2) {\n      switch (super._set(e24, t2), e24) {\n        case `rx`:\n          this.rx = t2, this.set(`width`, 2 * t2);\n          break;\n        case `ry`:\n          this.ry = t2, this.set(`height`, 2 * t2);\n      }\n      return this;\n    }\n    getRx() {\n      return this.get(`rx`) * this.get(de);\n    }\n    getRy() {\n      return this.get(`ry`) * this.get(fe);\n    }\n    toObject(e24 = []) {\n      return super.toObject([...Ho, ...e24]);\n    }\n    _toSVG() {\n      return [`<ellipse `, `COMMON_PARTS`, `cx=\"0\" cy=\"0\" rx=\"${U(this.rx)}\" ry=\"${U(this.ry)}\" />\n`];\n    }\n    _render(e24) {\n      e24.beginPath(), e24.save(), e24.transform(1, 0, 0, this.ry / this.rx, 0, 0), e24.arc(0, 0, this.rx, 0, w, false), e24.restore(), this._renderPaintInOrder(e24);\n    }\n    static async fromElement(e24, t2, n2) {\n      let r2 = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return r2.left = (r2.left || 0) - r2.rx, r2.top = (r2.top || 0) - r2.ry, new this(r2);\n    }\n  };\n  i(Uo, `type`, `Ellipse`), i(Uo, `cacheProperties`, [...Un, ...Ho]), i(Uo, `ownDefaults`, { rx: 0, ry: 0 }), i(Uo, `ATTRIBUTE_NAMES`, [...ki, `cx`, `cy`, `rx`, `ry`]), M.setClass(Uo), M.setSVGClass(Uo);\n  var Wo = { exactBoundingBox: false };\n  var Go = class e18 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e18.ownDefaults };\n    }\n    constructor(t2 = [], n2 = {}) {\n      super(), i(this, `strokeDiff`, void 0), Object.assign(this, e18.ownDefaults), this.setOptions(n2), this.points = t2;\n      let { left: r2, top: a2 } = n2;\n      this.initialized = true, this.setBoundingBox(true), typeof r2 == `number` && this.set(`left`, r2), typeof a2 == `number` && this.set(`top`, a2);\n    }\n    isOpen() {\n      return true;\n    }\n    _projectStrokeOnPoints(e24) {\n      return wi(this.points, e24, this.isOpen());\n    }\n    _calcDimensions(e24) {\n      e24 = { scaleX: this.scaleX, scaleY: this.scaleY, skewX: this.skewX, skewY: this.skewY, strokeLineCap: this.strokeLineCap, strokeLineJoin: this.strokeLineJoin, strokeMiterLimit: this.strokeMiterLimit, strokeUniform: this.strokeUniform, strokeWidth: this.strokeWidth, ...e24 || {} };\n      let t2 = this.exactBoundingBox ? this._projectStrokeOnPoints(e24).map((e25) => e25.projectedPoint) : this.points;\n      if (t2.length === 0) return { left: 0, top: 0, width: 0, height: 0, pathOffset: new N(), strokeOffset: new N(), strokeDiff: new N() };\n      let n2 = wt(t2), r2 = Ye({ ...e24, scaleX: 1, scaleY: 1 }), i2 = wt(this.points.map((e25) => L(e25, r2, true))), a2 = new N(this.scaleX, this.scaleY), o2 = n2.left + n2.width / 2, s3 = n2.top + n2.height / 2;\n      return this.exactBoundingBox && (o2 -= s3 * Math.tan(I(this.skewX)), s3 -= o2 * Math.tan(I(this.skewY))), { ...n2, pathOffset: new N(o2, s3), strokeOffset: new N(i2.left, i2.top).subtract(new N(n2.left, n2.top)).multiply(a2), strokeDiff: new N(n2.width, n2.height).subtract(new N(i2.width, i2.height)).multiply(a2) };\n    }\n    _findCenterFromElement() {\n      let e24 = wt(this.points);\n      return new N(e24.left + e24.width / 2, e24.top + e24.height / 2);\n    }\n    setDimensions() {\n      this.setBoundingBox();\n    }\n    setBoundingBox(e24) {\n      let { left: t2, top: n2, width: r2, height: i2, pathOffset: a2, strokeOffset: o2, strokeDiff: s3 } = this._calcDimensions();\n      this.set({ width: r2, height: i2, pathOffset: a2, strokeOffset: o2, strokeDiff: s3 }), e24 && this.setPositionByOrigin(new N(t2 + r2 / 2, n2 + i2 / 2), `center`, `center`);\n    }\n    isStrokeAccountedForInDimensions() {\n      return this.exactBoundingBox;\n    }\n    _getNonTransformedDimensions() {\n      return this.exactBoundingBox ? new N(this.width, this.height) : super._getNonTransformedDimensions();\n    }\n    _getTransformedDimensions(e24 = {}) {\n      if (this.exactBoundingBox) {\n        let a2;\n        if (Object.keys(e24).some((e25) => this.strokeUniform || this.constructor.layoutProperties.includes(e25))) {\n          var t2, n2;\n          let { width: r3, height: i3 } = this._calcDimensions(e24);\n          a2 = new N((t2 = e24.width) == null ? r3 : t2, (n2 = e24.height) == null ? i3 : n2);\n        } else {\n          var r2, i2;\n          a2 = new N((r2 = e24.width) == null ? this.width : r2, (i2 = e24.height) == null ? this.height : i2);\n        }\n        return a2.multiply(new N(e24.scaleX || this.scaleX, e24.scaleY || this.scaleY));\n      }\n      return super._getTransformedDimensions(e24);\n    }\n    _set(e24, t2) {\n      let n2 = this.initialized && this[e24] !== t2, r2 = super._set(e24, t2);\n      return this.exactBoundingBox && n2 && ((e24 === `scaleX` || e24 === `scaleY`) && this.strokeUniform && this.constructor.layoutProperties.includes(`strokeUniform`) || this.constructor.layoutProperties.includes(e24)) && this.setDimensions(), r2;\n    }\n    toObject(e24 = []) {\n      return { ...super.toObject(e24), points: this.points.map(({ x: e25, y: t2 }) => ({ x: e25, y: t2 })) };\n    }\n    _toSVG() {\n      let e24 = this.pathOffset.x, t2 = this.pathOffset.y, n2 = o.NUM_FRACTION_DIGITS, r2 = this.points.map(({ x: r3, y: i2 }) => `${B(r3 - e24, n2)},${B(i2 - t2, n2)}`).join(` `);\n      return [`<${U(this.constructor.type).toLowerCase()} `, `COMMON_PARTS`, `points=\"${r2}\" />\n`];\n    }\n    _render(e24) {\n      let t2 = this.points.length, n2 = this.pathOffset.x, r2 = this.pathOffset.y;\n      if (t2 && !isNaN(this.points[t2 - 1].y)) {\n        e24.beginPath(), e24.moveTo(this.points[0].x - n2, this.points[0].y - r2);\n        for (let i2 = 0; i2 < t2; i2++) {\n          let t3 = this.points[i2];\n          e24.lineTo(t3.x - n2, t3.y - r2);\n        }\n        !this.isOpen() && e24.closePath(), this._renderPaintInOrder(e24);\n      }\n    }\n    complexity() {\n      return this.points.length;\n    }\n    static async fromElement(e24, t2, n2) {\n      let r2 = function(e25) {\n        if (!e25) return [];\n        let t3 = e25.replace(/,/g, ` `).trim().split(/\\s+/), n3 = [];\n        for (let e26 = 0; e26 < t3.length; e26 += 2) n3.push({ x: parseFloat(t3[e26]), y: parseFloat(t3[e26 + 1]) });\n        return n3;\n      }(e24.getAttribute(`points`)), { left: i2, top: a2, ...o2 } = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return new this(r2, { ...o2, ...t2 });\n    }\n    static fromObject(e24) {\n      return this._fromObject(e24, { extraParam: `points` });\n    }\n  };\n  i(Go, `ownDefaults`, Wo), i(Go, `type`, `Polyline`), i(Go, `layoutProperties`, [pe, me, `strokeLineCap`, `strokeLineJoin`, `strokeMiterLimit`, `strokeWidth`, `strokeUniform`, `points`]), i(Go, `cacheProperties`, [...Un, `points`]), i(Go, `ATTRIBUTE_NAMES`, [...ki]), M.setClass(Go), M.setSVGClass(Go);\n  var Ko = class extends Go {\n    isOpen() {\n      return false;\n    }\n  };\n  i(Ko, `ownDefaults`, Wo), i(Ko, `type`, `Polygon`), M.setClass(Ko), M.setSVGClass(Ko);\n  var qo = class extends J {\n    isEmptyStyles(e24) {\n      if (!this.styles || e24 !== void 0 && !this.styles[e24]) return true;\n      let t2 = e24 === void 0 ? this.styles : { line: this.styles[e24] };\n      for (let e25 in t2) for (let n2 in t2[e25]) for (let r2 in t2[e25][n2]) return false;\n      return true;\n    }\n    styleHas(e24, t2) {\n      if (!this.styles || t2 !== void 0 && !this.styles[t2]) return false;\n      let n2 = t2 === void 0 ? this.styles : { 0: this.styles[t2] };\n      for (let t3 in n2) for (let r2 in n2[t3]) if (n2[t3][r2][e24] !== void 0) return true;\n      return false;\n    }\n    cleanStyle(e24) {\n      if (!this.styles) return false;\n      let t2 = this.styles, n2, r2, i2 = 0, a2 = true, o2 = 0;\n      for (let o3 in t2) {\n        n2 = 0;\n        for (let s3 in t2[o3]) {\n          let c2 = t2[o3][s3] || {};\n          i2++, c2[e24] === void 0 ? a2 = false : (r2 ? c2[e24] !== r2 && (a2 = false) : r2 = c2[e24], c2[e24] === this[e24] && delete c2[e24]), Object.keys(c2).length === 0 ? delete t2[o3][s3] : n2++;\n        }\n        n2 === 0 && delete t2[o3];\n      }\n      for (let e25 = 0; e25 < this._textLines.length; e25++) o2 += this._textLines[e25].length;\n      a2 && i2 === o2 && (this[e24] = r2, this.removeStyle(e24));\n    }\n    removeStyle(e24) {\n      if (!this.styles) return;\n      let t2 = this.styles, n2, r2, i2;\n      for (r2 in t2) {\n        for (i2 in n2 = t2[r2], n2) delete n2[i2][e24], Object.keys(n2[i2]).length === 0 && delete n2[i2];\n        Object.keys(n2).length === 0 && delete t2[r2];\n      }\n    }\n    _extendStyles(e24, t2) {\n      let { lineIndex: n2, charIndex: r2 } = this.get2DCursorLocation(e24);\n      this._getLineStyle(n2) || this._setLineStyle(n2);\n      let i2 = tt({ ...this._getStyleDeclaration(n2, r2), ...t2 }, (e25) => e25 !== void 0);\n      this._setStyleDeclaration(n2, r2, i2);\n    }\n    getSelectionStyles(e24, t2, n2) {\n      let r2 = [];\n      for (let i2 = e24; i2 < (t2 || e24); i2++) r2.push(this.getStyleAtPosition(i2, n2));\n      return r2;\n    }\n    getStyleAtPosition(e24, t2) {\n      let { lineIndex: n2, charIndex: r2 } = this.get2DCursorLocation(e24);\n      return t2 ? this.getCompleteStyleDeclaration(n2, r2) : this._getStyleDeclaration(n2, r2);\n    }\n    setSelectionStyles(e24, t2, n2) {\n      for (let r2 = t2; r2 < (n2 || t2); r2++) this._extendStyles(r2, e24);\n      this._forceClearCache = true;\n    }\n    _getStyleDeclaration(e24, t2) {\n      var n2;\n      let r2 = this.styles && this.styles[e24];\n      return r2 && (n2 = r2[t2]) != null ? n2 : {};\n    }\n    getCompleteStyleDeclaration(e24, t2) {\n      return { ...et(this, this.constructor._styleProperties), ...this._getStyleDeclaration(e24, t2) };\n    }\n    _setStyleDeclaration(e24, t2, n2) {\n      this.styles[e24][t2] = n2;\n    }\n    _deleteStyleDeclaration(e24, t2) {\n      delete this.styles[e24][t2];\n    }\n    _getLineStyle(e24) {\n      return !!this.styles[e24];\n    }\n    _setLineStyle(e24) {\n      this.styles[e24] = {};\n    }\n    _deleteLineStyle(e24) {\n      delete this.styles[e24];\n    }\n  };\n  i(qo, `_styleProperties`, wn);\n  var Jo = /  +/g;\n  var Yo = /\"/g;\n  function Xo(e24, t2, n2, r2, i2) {\n    return `\t\t${((e25, { left: t3, top: n3, width: r3, height: i3 }, a2 = o.NUM_FRACTION_DIGITS) => {\n      let s3 = hn(j, e25, false), [c2, l2, u2, d2] = [t3, n3, r3, i3].map((e26) => B(e26, a2));\n      return `<rect ${s3} x=\"${c2}\" y=\"${l2}\" width=\"${u2}\" height=\"${d2}\"></rect>`;\n    })(e24, { left: t2, top: n2, width: r2, height: i2 })}\n`;\n  }\n  var Zo;\n  var Q = class e19 extends qo {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e19.ownDefaults };\n    }\n    constructor(t2, n2) {\n      super(), i(this, `__charBounds`, []), Object.assign(this, e19.ownDefaults), this.setOptions(n2), this.styles || (this.styles = {}), this.text = t2, this.initialized = true, this.path && this.setPathInfo(), this.initDimensions(), this.setCoords();\n    }\n    setPathInfo() {\n      let e24 = this.path;\n      e24 && (e24.segmentsInfo = ja(e24.path));\n    }\n    _splitText() {\n      let e24 = this._splitTextIntoLines(this.text);\n      return this.textLines = e24.lines, this._textLines = e24.graphemeLines, this._unwrappedTextLines = e24._unwrappedLines, this._text = e24.graphemeText, e24;\n    }\n    initDimensions() {\n      this._splitText(), this._clearCache(), this.dirty = true, this.path ? (this.width = this.path.width, this.height = this.path.height) : (this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH, this.height = this.calcTextHeight()), this.textAlign.includes(`justify`) && this.enlargeSpaces();\n    }\n    enlargeSpaces() {\n      let e24, t2, n2, r2, i2, a2, o2;\n      for (let s3 = 0, c2 = this._textLines.length; s3 < c2; s3++) if ((this.textAlign === `justify` || s3 !== c2 - 1 && !this.isEndOfWrapping(s3)) && (r2 = 0, i2 = this._textLines[s3], t2 = this.getLineWidth(s3), t2 < this.width && (o2 = this.textLines[s3].match(this._reSpacesAndTabs)))) {\n        n2 = o2.length, e24 = (this.width - t2) / n2;\n        for (let t3 = 0; t3 <= i2.length; t3++) a2 = this.__charBounds[s3][t3], this._reSpaceAndTab.test(i2[t3]) ? (a2.width += e24, a2.kernedWidth += e24, a2.left += r2, r2 += e24) : a2.left += r2;\n      }\n    }\n    isEndOfWrapping(e24) {\n      return e24 === this._textLines.length - 1;\n    }\n    missingNewlineOffset(e24) {\n      return 1;\n    }\n    get2DCursorLocation(e24, t2) {\n      let n2 = t2 ? this._unwrappedTextLines : this._textLines, r2;\n      for (r2 = 0; r2 < n2.length; r2++) {\n        if (e24 <= n2[r2].length) return { lineIndex: r2, charIndex: e24 };\n        e24 -= n2[r2].length + this.missingNewlineOffset(r2, t2);\n      }\n      return { lineIndex: r2 - 1, charIndex: n2[r2 - 1].length < e24 ? n2[r2 - 1].length : e24 };\n    }\n    toString() {\n      return `#<Text (${this.complexity()}): { \"text\": \"${this.text}\", \"fontFamily\": \"${this.fontFamily}\" }>`;\n    }\n    _getCacheCanvasDimensions() {\n      let e24 = super._getCacheCanvasDimensions(), t2 = this.fontSize;\n      return e24.width += t2 * e24.zoomX, e24.height += t2 * e24.zoomY, e24;\n    }\n    _render(e24) {\n      let t2 = this.path;\n      t2 && !t2.isNotVisible() && t2._render(e24), this._setTextStyles(e24), this._renderTextLinesBackground(e24), this._renderTextDecoration(e24, `underline`), this._renderText(e24), this._renderTextDecoration(e24, `overline`), this._renderTextDecoration(e24, `linethrough`);\n    }\n    _renderText(e24) {\n      this.paintFirst === `stroke` ? (this._renderTextStroke(e24), this._renderTextFill(e24)) : (this._renderTextFill(e24), this._renderTextStroke(e24));\n    }\n    _setTextStyles(e24, t2, n2) {\n      if (e24.textBaseline = `alphabetic`, this.path) switch (this.pathAlign) {\n        case E:\n          e24.textBaseline = `middle`;\n          break;\n        case `ascender`:\n          e24.textBaseline = `top`;\n          break;\n        case `descender`:\n          e24.textBaseline = O;\n      }\n      e24.font = this._getFontDeclaration(t2, n2);\n    }\n    calcTextWidth() {\n      let e24 = this.getLineWidth(0);\n      for (let t2 = 1, n2 = this._textLines.length; t2 < n2; t2++) {\n        let n3 = this.getLineWidth(t2);\n        n3 > e24 && (e24 = n3);\n      }\n      return e24;\n    }\n    _renderTextLine(e24, t2, n2, r2, i2, a2) {\n      this._renderChars(e24, t2, n2, r2, i2, a2);\n    }\n    _renderTextLinesBackground(e24) {\n      if (!this.textBackgroundColor && !this.styleHas(`textBackgroundColor`)) return;\n      let t2 = e24.fillStyle, n2 = this._getLeftOffset(), r2 = this._getTopOffset();\n      for (let t3 = 0, i2 = this._textLines.length; t3 < i2; t3++) {\n        let i3 = this.getHeightOfLine(t3);\n        if (!this.textBackgroundColor && !this.styleHas(`textBackgroundColor`, t3)) {\n          r2 += i3;\n          continue;\n        }\n        let a2 = this._textLines[t3].length, o2 = this._getLineLeftOffset(t3), s3, c2, l2 = 0, u2 = 0, d2 = this.getValueOfPropertyAt(t3, 0, `textBackgroundColor`), f2 = this.getHeightOfLineImpl(t3);\n        for (let i4 = 0; i4 < a2; i4++) {\n          let a3 = this.__charBounds[t3][i4];\n          c2 = this.getValueOfPropertyAt(t3, i4, `textBackgroundColor`), this.path ? (e24.save(), e24.translate(a3.renderLeft, a3.renderTop), e24.rotate(a3.angle), e24.fillStyle = c2, c2 && e24.fillRect(-a3.width / 2, -f2 * (1 - this._fontSizeFraction), a3.width, f2), e24.restore()) : c2 === d2 ? l2 += a3.kernedWidth : (s3 = n2 + o2 + u2, this.direction === `rtl` && (s3 = this.width - s3 - l2), e24.fillStyle = d2, d2 && e24.fillRect(s3, r2, l2, f2), u2 = a3.left, l2 = a3.width, d2 = c2);\n        }\n        c2 && !this.path && (s3 = n2 + o2 + u2, this.direction === `rtl` && (s3 = this.width - s3 - l2), e24.fillStyle = c2, e24.fillRect(s3, r2, l2, f2)), r2 += i3;\n      }\n      e24.fillStyle = t2, this._removeShadow(e24);\n    }\n    _measureChar(e24, t2, n2, r2) {\n      let i2 = y.getFontCache(t2), a2 = this._getFontDeclaration(t2), o2 = n2 ? n2 + e24 : e24, s3 = n2 && a2 === this._getFontDeclaration(r2), c2 = t2.fontSize / this.CACHE_FONT_SIZE, l2, u2, d2, f2;\n      if (n2 && i2.has(n2) && (d2 = i2.get(n2)), i2.has(e24) && (f2 = l2 = i2.get(e24)), s3 && i2.has(o2) && (u2 = i2.get(o2), f2 = u2 - d2), l2 === void 0 || d2 === void 0 || u2 === void 0) {\n        let r3 = (Zo || (Zo = F({ width: 0, height: 0 }).getContext(`2d`)), Zo);\n        this._setTextStyles(r3, t2, true), l2 === void 0 && (f2 = l2 = r3.measureText(e24).width, i2.set(e24, l2)), d2 === void 0 && s3 && n2 && (d2 = r3.measureText(n2).width, i2.set(n2, d2)), s3 && u2 === void 0 && (u2 = r3.measureText(o2).width, i2.set(o2, u2), f2 = u2 - d2);\n      }\n      return { width: l2 * c2, kernedWidth: f2 * c2 };\n    }\n    getHeightOfChar(e24, t2) {\n      return this.getValueOfPropertyAt(e24, t2, `fontSize`);\n    }\n    measureLine(e24) {\n      let t2 = this._measureLine(e24);\n      return this.charSpacing !== 0 && (t2.width -= this._getWidthOfCharSpacing()), t2.width < 0 && (t2.width = 0), t2;\n    }\n    _measureLine(e24) {\n      let t2, n2, r2 = 0, i2 = this.pathSide === k, a2 = this.path, o2 = this._textLines[e24], s3 = o2.length, c2 = Array(s3);\n      this.__charBounds[e24] = c2;\n      for (let i3 = 0; i3 < s3; i3++) {\n        let a3 = o2[i3];\n        n2 = this._getGraphemeBox(a3, e24, i3, t2), c2[i3] = n2, r2 += n2.kernedWidth, t2 = a3;\n      }\n      if (c2[s3] = { left: n2 ? n2.left + n2.width : 0, width: 0, kernedWidth: 0, height: this.fontSize, deltaY: 0 }, a2 && a2.segmentsInfo) {\n        let e25 = 0, t3 = a2.segmentsInfo[a2.segmentsInfo.length - 1].length;\n        switch (this.textAlign) {\n          case D:\n            e25 = i2 ? t3 - r2 : 0;\n            break;\n          case E:\n            e25 = (t3 - r2) / 2;\n            break;\n          case k:\n            e25 = i2 ? 0 : t3 - r2;\n        }\n        e25 += this.pathStartOffset * (i2 ? -1 : 1);\n        for (let r3 = i2 ? s3 - 1 : 0; i2 ? r3 >= 0 : r3 < s3; i2 ? r3-- : r3++) n2 = c2[r3], e25 > t3 ? e25 %= t3 : e25 < 0 && (e25 += t3), this._setGraphemeOnPath(e25, n2), e25 += n2.kernedWidth;\n      }\n      return { width: r2, numOfSpaces: 0 };\n    }\n    _setGraphemeOnPath(e24, t2) {\n      let n2 = e24 + t2.kernedWidth / 2, r2 = this.path, i2 = Ma(r2.path, n2, r2.segmentsInfo);\n      t2.renderLeft = i2.x - r2.pathOffset.x, t2.renderTop = i2.y - r2.pathOffset.y, t2.angle = i2.angle + (this.pathSide === `right` ? Math.PI : 0);\n    }\n    _getGraphemeBox(e24, t2, n2, r2, i2) {\n      let a2 = this.getCompleteStyleDeclaration(t2, n2), o2 = r2 ? this.getCompleteStyleDeclaration(t2, n2 - 1) : {}, s3 = this._measureChar(e24, a2, r2, o2), c2, l2 = s3.kernedWidth, u2 = s3.width;\n      this.charSpacing !== 0 && (c2 = this._getWidthOfCharSpacing(), u2 += c2, l2 += c2);\n      let d2 = { width: u2, left: 0, height: a2.fontSize, kernedWidth: l2, deltaY: a2.deltaY };\n      if (n2 > 0 && !i2) {\n        let e25 = this.__charBounds[t2][n2 - 1];\n        d2.left = e25.left + e25.width + s3.kernedWidth - s3.width;\n      }\n      return d2;\n    }\n    getHeightOfLineImpl(e24) {\n      let t2 = this.__lineHeights;\n      if (t2[e24]) return t2[e24];\n      let n2 = this.getHeightOfChar(e24, 0);\n      for (let t3 = 1, r2 = this._textLines[e24].length; t3 < r2; t3++) n2 = Math.max(this.getHeightOfChar(e24, t3), n2);\n      return t2[e24] = n2 * this._fontSizeMult;\n    }\n    getHeightOfLine(e24) {\n      return this.getHeightOfLineImpl(e24) * this.lineHeight;\n    }\n    calcTextHeight() {\n      let e24 = 0;\n      for (let t2 = 0, n2 = this._textLines.length; t2 < n2; t2++) e24 += t2 === n2 - 1 ? this.getHeightOfLineImpl(t2) : this.getHeightOfLine(t2);\n      return e24;\n    }\n    _getLeftOffset() {\n      return this.direction === `ltr` ? -this.width / 2 : this.width / 2;\n    }\n    _getTopOffset() {\n      return -this.height / 2;\n    }\n    _renderTextCommon(e24, t2) {\n      e24.save();\n      let n2 = 0, r2 = this._getLeftOffset(), i2 = this._getTopOffset();\n      for (let a2 = 0, o2 = this._textLines.length; a2 < o2; a2++) this._renderTextLine(t2, e24, this._textLines[a2], r2 + this._getLineLeftOffset(a2), i2 + n2 + this.getHeightOfLineImpl(a2), a2), n2 += this.getHeightOfLine(a2);\n      e24.restore();\n    }\n    _renderTextFill(e24) {\n      (this.fill || this.styleHas(`fill`)) && this._renderTextCommon(e24, `fillText`);\n    }\n    _renderTextStroke(e24) {\n      (this.stroke && this.strokeWidth !== 0 || !this.isEmptyStyles()) && (this.shadow && !this.shadow.affectStroke && this._removeShadow(e24), e24.save(), this._setLineDash(e24, this.strokeDashArray), e24.beginPath(), this._renderTextCommon(e24, `strokeText`), e24.closePath(), e24.restore());\n    }\n    _renderChars(e24, t2, n2, r2, i2, a2) {\n      let o2 = this.textAlign.includes(En), s3 = this.path, c2 = !o2 && this.charSpacing === 0 && this.isEmptyStyles(a2) && !s3, l2 = this.direction === `ltr`, u2 = this.direction === `ltr` ? 1 : -1, d2 = t2.direction, f2, p2, m, h2, g2, _2 = ``, v2 = 0;\n      if (t2.save(), d2 !== this.direction && (t2.canvas.setAttribute(`dir`, l2 ? `ltr` : `rtl`), t2.direction = l2 ? `ltr` : `rtl`, t2.textAlign = l2 ? D : k), i2 -= this.getHeightOfLineImpl(a2) * this._fontSizeFraction, c2) return this._renderChar(e24, t2, a2, 0, n2.join(``), r2, i2), void t2.restore();\n      for (let c3 = 0, l3 = n2.length - 1; c3 <= l3; c3++) h2 = c3 === l3 || this.charSpacing || s3, _2 += n2[c3], m = this.__charBounds[a2][c3], v2 === 0 ? (r2 += u2 * (m.kernedWidth - m.width), v2 += m.width) : v2 += m.kernedWidth, o2 && !h2 && this._reSpaceAndTab.test(n2[c3]) && (h2 = true), h2 || (f2 = f2 || this.getCompleteStyleDeclaration(a2, c3), p2 = this.getCompleteStyleDeclaration(a2, c3 + 1), h2 = Ei(f2, p2, false)), h2 && (s3 ? (t2.save(), t2.translate(m.renderLeft, m.renderTop), t2.rotate(m.angle), this._renderChar(e24, t2, a2, c3, _2, -v2 / 2, 0), t2.restore()) : (g2 = r2, this._renderChar(e24, t2, a2, c3, _2, g2, i2)), _2 = ``, f2 = p2, r2 += u2 * v2, v2 = 0);\n      t2.restore();\n    }\n    _applyPatternGradientTransformText(e24) {\n      let t2 = this.width + this.strokeWidth, n2 = this.height + this.strokeWidth, r2 = F({ width: t2, height: n2 }), i2 = r2.getContext(`2d`);\n      return r2.width = t2, r2.height = n2, i2.beginPath(), i2.moveTo(0, 0), i2.lineTo(t2, 0), i2.lineTo(t2, n2), i2.lineTo(0, n2), i2.closePath(), i2.translate(t2 / 2, n2 / 2), i2.fillStyle = e24.toLive(i2), this._applyPatternGradientTransform(i2, e24), i2.fill(), i2.createPattern(r2, `no-repeat`);\n    }\n    handleFiller(e24, t2, n2) {\n      let r2, i2;\n      return V(n2) ? n2.gradientUnits === `percentage` || n2.gradientTransform || n2.patternTransform ? (r2 = -this.width / 2, i2 = -this.height / 2, e24.translate(r2, i2), e24[t2] = this._applyPatternGradientTransformText(n2), { offsetX: r2, offsetY: i2 }) : (e24[t2] = n2.toLive(e24), this._applyPatternGradientTransform(e24, n2)) : (e24[t2] = n2, { offsetX: 0, offsetY: 0 });\n    }\n    _setStrokeStyles(e24, { stroke: t2, strokeWidth: n2 }) {\n      return e24.lineWidth = n2, e24.lineCap = this.strokeLineCap, e24.lineDashOffset = this.strokeDashOffset, e24.lineJoin = this.strokeLineJoin, e24.miterLimit = this.strokeMiterLimit, this.handleFiller(e24, `strokeStyle`, t2);\n    }\n    _setFillStyles(e24, { fill: t2 }) {\n      return this.handleFiller(e24, `fillStyle`, t2);\n    }\n    _renderChar(e24, t2, n2, r2, i2, a2, o2) {\n      let s3 = this._getStyleDeclaration(n2, r2), c2 = this.getCompleteStyleDeclaration(n2, r2), l2 = e24 === `fillText` && c2.fill, u2 = e24 === `strokeText` && c2.stroke && c2.strokeWidth;\n      if (u2 || l2) {\n        if (t2.save(), t2.font = this._getFontDeclaration(c2), s3.textBackgroundColor && this._removeShadow(t2), s3.deltaY && (o2 += s3.deltaY), l2) {\n          let e25 = this._setFillStyles(t2, c2);\n          t2.fillText(i2, a2 - e25.offsetX, o2 - e25.offsetY);\n        }\n        if (u2) {\n          let e25 = this._setStrokeStyles(t2, c2);\n          t2.strokeText(i2, a2 - e25.offsetX, o2 - e25.offsetY);\n        }\n        t2.restore();\n      }\n    }\n    setSuperscript(e24, t2) {\n      this._setScript(e24, t2, this.superscript);\n    }\n    setSubscript(e24, t2) {\n      this._setScript(e24, t2, this.subscript);\n    }\n    _setScript(e24, t2, n2) {\n      let r2 = this.get2DCursorLocation(e24, true), i2 = this.getValueOfPropertyAt(r2.lineIndex, r2.charIndex, `fontSize`), a2 = this.getValueOfPropertyAt(r2.lineIndex, r2.charIndex, `deltaY`), o2 = { fontSize: i2 * n2.size, deltaY: a2 + i2 * n2.baseline };\n      this.setSelectionStyles(o2, e24, t2);\n    }\n    _getLineLeftOffset(e24) {\n      let t2 = this.getLineWidth(e24), n2 = this.width - t2, r2 = this.textAlign, i2 = this.direction, a2 = this.isEndOfWrapping(e24), o2 = 0;\n      return r2 === `justify` || r2 === `justify-center` && !a2 || r2 === `justify-right` && !a2 || r2 === `justify-left` && !a2 ? 0 : (r2 === `center` && (o2 = n2 / 2), r2 === `right` && (o2 = n2), r2 === `justify-center` && (o2 = n2 / 2), r2 === `justify-right` && (o2 = n2), i2 === `rtl` && (r2 === `right` || r2 === `justify-right` ? o2 = 0 : r2 === `left` || r2 === `justify-left` ? o2 = -n2 : r2 !== `center` && r2 !== `justify-center` || (o2 = -n2 / 2)), o2);\n    }\n    _clearCache() {\n      this._forceClearCache = false, this.__lineWidths = [], this.__lineHeights = [], this.__charBounds = [];\n    }\n    getLineWidth(e24) {\n      if (this.__lineWidths[e24] !== void 0) return this.__lineWidths[e24];\n      let { width: t2 } = this.measureLine(e24);\n      return this.__lineWidths[e24] = t2, t2;\n    }\n    _getWidthOfCharSpacing() {\n      return this.charSpacing === 0 ? 0 : this.fontSize * this.charSpacing / 1e3;\n    }\n    getValueOfPropertyAt(e24, t2, n2) {\n      var r2;\n      return (r2 = this._getStyleDeclaration(e24, t2)[n2]) == null ? this[n2] : r2;\n    }\n    _renderTextDecoration(e24, t2) {\n      if (!this[t2] && !this.styleHas(t2)) return;\n      let n2 = this._getTopOffset(), r2 = this._getLeftOffset(), i2 = this.path, a2 = this._getWidthOfCharSpacing(), o2 = t2 === `linethrough` ? 0.5 : +(t2 === `overline`), s3 = this.offsets[t2];\n      for (let c2 = 0, l2 = this._textLines.length; c2 < l2; c2++) {\n        let l3 = this.getHeightOfLine(c2);\n        if (!this[t2] && !this.styleHas(t2, c2)) {\n          n2 += l3;\n          continue;\n        }\n        let u2 = this._textLines[c2], d2 = l3 / this.lineHeight, f2 = this._getLineLeftOffset(c2), p2, m = 0, h2 = 0, g2 = this.getValueOfPropertyAt(c2, 0, t2), _2 = this.getValueOfPropertyAt(c2, 0, j), v2 = this.getValueOfPropertyAt(c2, 0, `textDecorationColor`) || _2, y2 = this.getValueOfPropertyAt(c2, 0, vn), b2 = g2, x2 = v2, S2 = y2, C2 = n2 + d2 * (1 - this._fontSizeFraction), w2 = this.getHeightOfChar(c2, 0), ee2 = this.getValueOfPropertyAt(c2, 0, `deltaY`);\n        for (let n3 = 0, a3 = u2.length; n3 < a3; n3++) {\n          let a4 = this.__charBounds[c2][n3];\n          b2 = this.getValueOfPropertyAt(c2, n3, t2), p2 = this.getValueOfPropertyAt(c2, n3, j), x2 = this.getValueOfPropertyAt(c2, n3, `textDecorationColor`) || p2, S2 = this.getValueOfPropertyAt(c2, n3, vn);\n          let l4 = this.getHeightOfChar(c2, n3), u3 = this.getValueOfPropertyAt(c2, n3, `deltaY`);\n          if (i2 && b2 && p2) {\n            let t3 = this.fontSize * S2 / 1e3;\n            e24.save(), e24.fillStyle = x2, e24.translate(a4.renderLeft, a4.renderTop), e24.rotate(a4.angle), e24.fillRect(-a4.kernedWidth / 2, s3 * l4 + u3 - o2 * t3, a4.kernedWidth, t3), e24.restore();\n          } else if ((b2 !== g2 || p2 !== _2 || x2 !== v2 || l4 !== w2 || S2 !== y2 || u3 !== ee2) && h2 > 0) {\n            let t3 = this.fontSize * y2 / 1e3, n4 = r2 + f2 + m;\n            this.direction === `rtl` && (n4 = this.width - n4 - h2), g2 && v2 && y2 && (e24.fillStyle = v2, e24.fillRect(n4, C2 + s3 * w2 + ee2 - o2 * t3, h2, t3)), m = a4.left, h2 = a4.width, g2 = b2, v2 = x2, y2 = S2, _2 = p2, w2 = l4, ee2 = u3;\n          } else h2 += a4.kernedWidth;\n        }\n        let T2 = r2 + f2 + m;\n        this.direction === `rtl` && (T2 = this.width - T2 - h2), e24.fillStyle = x2;\n        let E2 = this.fontSize * S2 / 1e3;\n        b2 && x2 && S2 && e24.fillRect(T2, C2 + s3 * w2 + ee2 - o2 * E2, h2 - a2, E2), n2 += l3;\n      }\n      this._removeShadow(e24);\n    }\n    _getFontDeclaration({ fontFamily: t2 = this.fontFamily, fontStyle: n2 = this.fontStyle, fontWeight: r2 = this.fontWeight, fontSize: i2 = this.fontSize } = {}, a2) {\n      let o2 = t2.includes(`'`) || t2.includes(`\"`) || t2.includes(`,`) || e19.genericFonts.includes(t2.toLowerCase()) ? t2 : `\"${t2}\"`;\n      return [n2, r2, `${a2 ? this.CACHE_FONT_SIZE : i2}px`, o2].join(` `);\n    }\n    render(e24) {\n      this.visible && (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen() || (this._forceClearCache && this.initDimensions(), super.render(e24)));\n    }\n    graphemeSplit(e24) {\n      return gt(e24);\n    }\n    _splitTextIntoLines(e24) {\n      let t2 = e24.split(this._reNewline), n2 = Array(t2.length), r2 = [`\n`], i2 = [];\n      for (let e25 = 0; e25 < t2.length; e25++) n2[e25] = this.graphemeSplit(t2[e25]), i2 = i2.concat(n2[e25], r2);\n      return i2.pop(), { _unwrappedLines: n2, lines: t2, graphemeText: i2, graphemeLines: n2 };\n    }\n    toObject(e24 = []) {\n      return { ...super.toObject([...Cn, ...e24]), styles: Di(this.styles, this.text), ...this.path ? { path: this.path.toObject() } : {} };\n    }\n    set(e24, t2) {\n      let { textLayoutProperties: n2 } = this.constructor;\n      super.set(e24, t2);\n      let r2 = false, i2 = false;\n      if (typeof e24 == `object`) for (let t3 in e24) t3 === `path` && this.setPathInfo(), r2 = r2 || n2.includes(t3), i2 = i2 || t3 === `path`;\n      else r2 = n2.includes(e24), i2 = e24 === `path`;\n      return i2 && this.setPathInfo(), r2 && this.initialized && (this.initDimensions(), this.setCoords()), this;\n    }\n    complexity() {\n      return 1;\n    }\n    static async fromElement(t2, n2, r2) {\n      let i2 = Zi(t2, e19.ATTRIBUTE_NAMES, r2), { textAnchor: a2 = D, textDecoration: o2 = ``, dx: s3 = 0, dy: c2 = 0, top: l2 = 0, left: u2 = 0, fontSize: d2 = 16, strokeWidth: f2 = 1, ...p2 } = { ...n2, ...i2 }, m = new this(on(t2.textContent || ``).trim(), { left: u2 + s3, top: l2 + c2, underline: o2.includes(`underline`), overline: o2.includes(`overline`), linethrough: o2.includes(`line-through`), strokeWidth: 0, fontSize: d2, ...p2 }), h2 = m.getScaledHeight() / m.height, g2 = ((m.height + m.strokeWidth) * m.lineHeight - m.height) * h2, _2 = m.getScaledHeight() + g2, v2 = 0;\n      return a2 === `center` && (v2 = m.getScaledWidth() / 2), a2 === `right` && (v2 = m.getScaledWidth()), m.set({ left: m.left - v2, top: m.top - (_2 - m.fontSize * (0.07 + m._fontSizeFraction)) / m.lineHeight, strokeWidth: f2 }), m;\n    }\n    static fromObject(e24) {\n      return this._fromObject({ ...e24, styles: Oi(e24.styles || {}, e24.text) }, { extraParam: `text` });\n    }\n  };\n  i(Q, `textLayoutProperties`, Sn), i(Q, `cacheProperties`, [...Un, ...Cn]), i(Q, `ownDefaults`, Tn), i(Q, `type`, `Text`), i(Q, `genericFonts`, [`serif`, `sans-serif`, `monospace`, `cursive`, `fantasy`, `system-ui`, `ui-serif`, `ui-sans-serif`, `ui-monospace`, `ui-rounded`, `math`, `emoji`, `fangsong`]), i(Q, `ATTRIBUTE_NAMES`, ki.concat(`x`, `y`, `dx`, `dy`, `font-family`, `font-style`, `font-weight`, `font-size`, `letter-spacing`, `text-decoration`, `text-decoration-thickness`, `text-decoration-color`, `text-anchor`)), vi(Q, [class extends gn {\n    _toSVG() {\n      let e24 = this._getSVGLeftTopOffsets(), t2 = this._getSVGTextAndBg(e24.textTop, e24.textLeft);\n      return this._wrapSVGTextAndBg(t2);\n    }\n    toSVG(e24) {\n      let t2 = this._createBaseSVGMarkup(this._toSVG(), { reviver: e24, noStyle: true, withShadow: true }), n2 = this.path;\n      return n2 ? t2 + n2._createBaseSVGMarkup(n2._toSVG(), { reviver: e24, withShadow: true, additionalTransform: nt(this.calcOwnMatrix()) }) : t2;\n    }\n    _getSVGLeftTopOffsets() {\n      return { textLeft: -this.width / 2, textTop: -this.height / 2, lineTop: this.getHeightOfLine(0) };\n    }\n    _wrapSVGTextAndBg({ textBgRects: e24, textSpans: t2 }) {\n      let n2 = this.getSvgTextDecoration(this);\n      return [e24.join(``), `\t\t<text xml:space=\"preserve\" `, `font-family=\"${U(this.fontFamily.replace(Yo, `'`))}\" `, `font-size=\"${U(this.fontSize)}\" `, this.fontStyle ? `font-style=\"${U(this.fontStyle)}\" ` : ``, this.fontWeight ? `font-weight=\"${U(this.fontWeight)}\" ` : ``, n2 ? `text-decoration=\"${n2}\" ` : ``, this.direction === `rtl` ? `direction=\"rtl\" ` : ``, `style=\"`, this.getSvgStyles(true), `\"`, this.addPaintOrder(), ` >`, t2.join(``), `</text>\n`];\n    }\n    _getSVGTextAndBg(e24, t2) {\n      let n2 = [], r2 = [], i2, a2 = e24;\n      this.backgroundColor && r2.push(Xo(this.backgroundColor, -this.width / 2, -this.height / 2, this.width, this.height));\n      for (let e25 = 0, o2 = this._textLines.length; e25 < o2; e25++) i2 = this._getLineLeftOffset(e25), this.direction === `rtl` && (i2 += this.width), (this.textBackgroundColor || this.styleHas(`textBackgroundColor`, e25)) && this._setSVGTextLineBg(r2, e25, t2 + i2, a2), this._setSVGTextLineText(n2, e25, t2 + i2, a2), a2 += this.getHeightOfLine(e25);\n      return { textSpans: n2, textBgRects: r2 };\n    }\n    _createTextCharSpan(e24, t2, n2, r2, i2) {\n      let a2 = o.NUM_FRACTION_DIGITS, s3 = this.getSvgSpanStyles(t2, e24 !== e24.trim() || !!e24.match(Jo)), c2 = s3 ? `style=\"${s3}\"` : ``, l2 = t2.deltaY, u2 = l2 ? ` dy=\"${B(l2, a2)}\" ` : ``, { angle: d2, renderLeft: f2, renderTop: p2, width: m } = i2, h2 = ``;\n      if (f2 !== void 0) {\n        let e25 = m / 2;\n        d2 && (h2 = ` rotate=\"${B(Ie(d2), a2)}\"`);\n        let t3 = We({ angle: Ie(d2) });\n        t3[4] = f2, t3[5] = p2;\n        let i3 = new N(-e25, 0).transform(t3);\n        n2 = i3.x, r2 = i3.y;\n      }\n      return `<tspan x=\"${B(n2, a2)}\" y=\"${B(r2, a2)}\" ${u2}${h2}${c2}>${U(e24)}</tspan>`;\n    }\n    _setSVGTextLineText(e24, t2, n2, r2) {\n      let i2 = this.getHeightOfLine(t2), a2 = this.textAlign.includes(En), o2 = this._textLines[t2], s3, c2, l2, u2, d2, f2 = ``, p2 = 0;\n      r2 += i2 * (1 - this._fontSizeFraction) / this.lineHeight;\n      for (let i3 = 0, m = o2.length - 1; i3 <= m; i3++) d2 = i3 === m || this.charSpacing || this.path, f2 += o2[i3], l2 = this.__charBounds[t2][i3], p2 === 0 ? (n2 += l2.kernedWidth - l2.width, p2 += l2.width) : p2 += l2.kernedWidth, a2 && !d2 && this._reSpaceAndTab.test(o2[i3]) && (d2 = true), d2 || (s3 = s3 || this.getCompleteStyleDeclaration(t2, i3), c2 = this.getCompleteStyleDeclaration(t2, i3 + 1), d2 = Ei(s3, c2, true)), d2 && (u2 = this._getStyleDeclaration(t2, i3), e24.push(this._createTextCharSpan(f2, u2, n2, r2, l2)), f2 = ``, s3 = c2, this.direction === `rtl` ? n2 -= p2 : n2 += p2, p2 = 0);\n    }\n    _setSVGTextLineBg(e24, t2, n2, r2) {\n      let i2 = this._textLines[t2], a2 = this.getHeightOfLine(t2) / this.lineHeight, o2, s3 = 0, c2 = 0, l2 = this.getValueOfPropertyAt(t2, 0, `textBackgroundColor`);\n      for (let u2 = 0; u2 < i2.length; u2++) {\n        let { left: i3, width: d2, kernedWidth: f2 } = this.__charBounds[t2][u2];\n        o2 = this.getValueOfPropertyAt(t2, u2, `textBackgroundColor`), o2 === l2 ? s3 += f2 : (l2 && e24.push(Xo(l2, n2 + c2, r2, s3, a2)), c2 = i3, s3 = d2, l2 = o2);\n      }\n      o2 && e24.push(Xo(l2, n2 + c2, r2, s3, a2));\n    }\n    getSvgStyles(e24) {\n      let t2 = nn(this.textDecorationColor) ? ` text-decoration-color: ${U(this[yn])};` : ``;\n      return `${super.getSvgStyles(e24)} text-decoration-thickness: ${B(this.textDecorationThickness * this.getObjectScaling().y / 10, o.NUM_FRACTION_DIGITS)}%;${t2} white-space: pre;`;\n    }\n    getSvgSpanStyles(e24, t2) {\n      let { fontFamily: n2, strokeWidth: r2, stroke: i2, fill: a2, fontSize: s3, fontStyle: c2, fontWeight: l2, textDecorationThickness: u2, textDecorationColor: d2, linethrough: f2, overline: p2, underline: m } = e24, h2 = this.getSvgTextDecoration({ underline: m == null ? this.underline : m, overline: p2 == null ? this.overline : p2, linethrough: f2 == null ? this.linethrough : f2 }), g2 = u2 || this.textDecorationThickness, _2 = d2 || this.textDecorationColor, v2 = rn(r2), y2 = an(n2), b2 = rn(s3), x2 = an(c2), S2 = rn(l2) || an(l2), C2 = an(_2);\n      return [i2 ? hn(he, i2) : ``, v2 ? `stroke-width: ${U(v2)}; ` : ``, y2 ? `font-family: ${y2.includes(`'`) || y2.includes(`\"`) ? U(y2) : `'${U(y2)}'`}; ` : ``, b2 ? `font-size: ${U(b2)}px; ` : ``, x2 ? `font-style: ${U(x2)}; ` : ``, S2 ? `font-weight: ${U(S2)}; ` : ``, h2 ? `text-decoration: ${h2}; text-decoration-thickness: ${B(g2 * this.getObjectScaling().y / 10, o.NUM_FRACTION_DIGITS)}%;${C2 ? ` text-decoration-color: ${U(C2)};` : ``} ` : ``, a2 ? hn(j, a2) : ``, t2 ? `white-space: pre; ` : ``].join(``);\n    }\n    getSvgTextDecoration(e24) {\n      return [`overline`, `underline`, `line-through`].filter((t2) => e24[t2.replace(`-`, ``)]).join(` `);\n    }\n  }]), M.setClass(Q), M.setSVGClass(Q);\n  var Qo = class {\n    constructor(e24) {\n      i(this, `target`, void 0), i(this, `__mouseDownInPlace`, false), i(this, `__dragStartFired`, false), i(this, `__isDraggingOver`, false), i(this, `__dragStartSelection`, void 0), i(this, `__dragImageDisposer`, void 0), i(this, `_dispose`, void 0), this.target = e24;\n      let t2 = [this.target.on(`dragenter`, this.dragEnterHandler.bind(this)), this.target.on(`dragover`, this.dragOverHandler.bind(this)), this.target.on(`dragleave`, this.dragLeaveHandler.bind(this)), this.target.on(`dragend`, this.dragEndHandler.bind(this)), this.target.on(`drop`, this.dropHandler.bind(this))];\n      this._dispose = () => {\n        t2.forEach((e25) => e25()), this._dispose = void 0;\n      };\n    }\n    isPointerOverSelection(e24) {\n      let t2 = this.target, n2 = t2.getSelectionStartFromPointer(e24);\n      return t2.isEditing && n2 >= t2.selectionStart && n2 <= t2.selectionEnd && t2.selectionStart < t2.selectionEnd;\n    }\n    start(e24) {\n      return this.__mouseDownInPlace = this.isPointerOverSelection(e24);\n    }\n    isActive() {\n      return this.__mouseDownInPlace;\n    }\n    end(e24) {\n      let t2 = this.isActive();\n      return t2 && !this.__dragStartFired && (this.target.setCursorByClick(e24), this.target.initDelayedCursor(true)), this.__mouseDownInPlace = false, this.__dragStartFired = false, this.__isDraggingOver = false, t2;\n    }\n    getDragStartSelection() {\n      return this.__dragStartSelection;\n    }\n    setDragImage(e24, { selectionStart: t2, selectionEnd: n2 }) {\n      var r2;\n      let i2 = this.target, a2 = i2.canvas, o2 = new N(i2.flipX ? -1 : 1, i2.flipY ? -1 : 1), s3 = i2._getCursorBoundaries(t2), c2 = new N(s3.left + s3.leftOffset, s3.top + s3.topOffset).multiply(o2).transform(i2.calcTransformMatrix()), l2 = a2.getScenePoint(e24).subtract(c2), u2 = i2.getCanvasRetinaScaling(), d2 = i2.getBoundingRect(), f2 = c2.subtract(new N(d2.left, d2.top)), p2 = a2.viewportTransform, m = f2.add(l2).transform(p2, true), h2 = i2.backgroundColor, g2 = Ti(i2.styles);\n      i2.backgroundColor = ``;\n      let _2 = { stroke: `transparent`, fill: `transparent`, textBackgroundColor: `transparent` };\n      i2.setSelectionStyles(_2, 0, t2), i2.setSelectionStyles(_2, n2, i2.text.length), i2.dirty = true;\n      let v2 = i2.toCanvasElement({ enableRetinaScaling: a2.enableRetinaScaling, viewportTransform: true });\n      i2.backgroundColor = h2, i2.styles = g2, i2.dirty = true, Ka(v2, { position: `fixed`, left: -v2.width + `px`, border: te, width: v2.width / u2 + `px`, height: v2.height / u2 + `px` }), this.__dragImageDisposer && this.__dragImageDisposer(), this.__dragImageDisposer = () => {\n        v2.remove();\n      }, H(e24.target || this.target.hiddenTextarea).body.appendChild(v2), (r2 = e24.dataTransfer) == null || r2.setDragImage(v2, m.x, m.y);\n    }\n    onDragStart(e24) {\n      this.__dragStartFired = true;\n      let t2 = this.target, n2 = this.isActive();\n      if (n2 && e24.dataTransfer) {\n        let n3 = this.__dragStartSelection = { selectionStart: t2.selectionStart, selectionEnd: t2.selectionEnd }, r2 = t2._text.slice(n3.selectionStart, n3.selectionEnd).join(``), i2 = { text: t2.text, value: r2, ...n3 };\n        e24.dataTransfer.setData(`text/plain`, r2), e24.dataTransfer.setData(`application/fabric`, JSON.stringify({ value: r2, styles: t2.getSelectionStyles(n3.selectionStart, n3.selectionEnd, true) })), e24.dataTransfer.effectAllowed = `copyMove`, this.setDragImage(e24, i2);\n      }\n      return t2.abortCursorAnimation(), n2;\n    }\n    canDrop(e24) {\n      if (this.target.editable && !this.target.getActiveControl() && !e24.defaultPrevented) {\n        if (this.isActive() && this.__dragStartSelection) {\n          let t2 = this.target.getSelectionStartFromPointer(e24), n2 = this.__dragStartSelection;\n          return t2 < n2.selectionStart || t2 > n2.selectionEnd;\n        }\n        return true;\n      }\n      return false;\n    }\n    targetCanDrop(e24) {\n      return this.target.canDrop(e24);\n    }\n    dragEnterHandler({ e: e24 }) {\n      let t2 = this.targetCanDrop(e24);\n      !this.__isDraggingOver && t2 && (this.__isDraggingOver = true);\n    }\n    dragOverHandler(e24) {\n      let { e: t2 } = e24, n2 = this.targetCanDrop(t2);\n      !this.__isDraggingOver && n2 ? this.__isDraggingOver = true : this.__isDraggingOver && !n2 && (this.__isDraggingOver = false), this.__isDraggingOver && (t2.preventDefault(), e24.canDrop = true, e24.dropTarget = this.target);\n    }\n    dragLeaveHandler() {\n      (this.__isDraggingOver || this.isActive()) && (this.__isDraggingOver = false);\n    }\n    dropHandler(e24) {\n      var t2;\n      let { e: n2 } = e24, r2 = n2.defaultPrevented;\n      this.__isDraggingOver = false, n2.preventDefault();\n      let i2 = (t2 = n2.dataTransfer) == null ? void 0 : t2.getData(`text/plain`);\n      if (i2 && !r2) {\n        let t3 = this.target, r3 = t3.canvas, a2 = t3.getSelectionStartFromPointer(n2), { styles: o2 } = n2.dataTransfer.types.includes(`application/fabric`) ? JSON.parse(n2.dataTransfer.getData(`application/fabric`)) : {}, s3 = i2[Math.max(0, i2.length - 1)];\n        if (this.__dragStartSelection) {\n          let e25 = this.__dragStartSelection.selectionStart, n3 = this.__dragStartSelection.selectionEnd;\n          a2 > e25 && a2 <= n3 ? a2 = e25 : a2 > n3 && (a2 -= n3 - e25), t3.removeChars(e25, n3), delete this.__dragStartSelection;\n        }\n        t3._reNewline.test(s3) && (t3._reNewline.test(t3._text[a2]) || a2 === t3._text.length) && (i2 = i2.trimEnd()), e24.didDrop = true, e24.dropTarget = t3, t3.insertChars(i2, o2, a2), r3.setActiveObject(t3), t3.enterEditing(n2), t3.selectionStart = Math.min(a2 + 0, t3._text.length), t3.selectionEnd = Math.min(t3.selectionStart + i2.length, t3._text.length), t3.hiddenTextarea.value = t3.text, t3._updateTextarea(), t3.hiddenTextarea.focus(), t3.fire(le, { index: a2 + 0, action: `drop` }), r3.fire(`text:changed`, { target: t3 }), r3.contextTopDirty = true, r3.requestRenderAll();\n      }\n    }\n    dragEndHandler({ e: e24 }) {\n      if (this.isActive() && this.__dragStartFired && this.__dragStartSelection) {\n        var t2;\n        let n2 = this.target, r2 = this.target.canvas, { selectionStart: i2, selectionEnd: a2 } = this.__dragStartSelection, o2 = ((t2 = e24.dataTransfer) == null ? void 0 : t2.dropEffect) || `none`;\n        o2 === `none` ? (n2.selectionStart = i2, n2.selectionEnd = a2, n2._updateTextarea(), n2.hiddenTextarea.focus()) : (n2.clearContextTop(), o2 === `move` && (n2.removeChars(i2, a2), n2.selectionStart = n2.selectionEnd = i2, n2.hiddenTextarea && (n2.hiddenTextarea.value = n2.text), n2._updateTextarea(), n2.fire(le, { index: i2, action: `dragend` }), r2.fire(`text:changed`, { target: n2 }), r2.requestRenderAll()), n2.exitEditing());\n      }\n      this.__dragImageDisposer && this.__dragImageDisposer(), delete this.__dragImageDisposer, delete this.__dragStartSelection, this.__isDraggingOver = false;\n    }\n    dispose() {\n      this._dispose && this._dispose();\n    }\n  };\n  var $o = /[ \\n\\.,;!\\?\\-]/;\n  var es = class extends Q {\n    constructor(...e24) {\n      super(...e24), i(this, `_currentCursorOpacity`, 1);\n    }\n    initBehavior() {\n      this._tick = this._tick.bind(this), this._onTickComplete = this._onTickComplete.bind(this), this.updateSelectionOnMouseMove = this.updateSelectionOnMouseMove.bind(this);\n    }\n    onDeselect(e24) {\n      return this.isEditing && this.exitEditing(), this.selected = false, super.onDeselect(e24);\n    }\n    _animateCursor({ toValue: e24, duration: t2, delay: n2, onComplete: r2 }) {\n      return Mr({ startValue: this._currentCursorOpacity, endValue: e24, duration: t2, delay: n2, onComplete: r2, abort: () => !this.canvas || this.selectionStart !== this.selectionEnd, onChange: (e25) => {\n        this._currentCursorOpacity = e25, this.renderCursorOrSelection();\n      } });\n    }\n    _tick(e24) {\n      this._currentTickState = this._animateCursor({ toValue: 0, duration: this.cursorDuration / 2, delay: Math.max(e24 || 0, 100), onComplete: this._onTickComplete });\n    }\n    _onTickComplete() {\n      var e24;\n      (e24 = this._currentTickCompleteState) == null || e24.abort(), this._currentTickCompleteState = this._animateCursor({ toValue: 1, duration: this.cursorDuration, onComplete: this._tick });\n    }\n    initDelayedCursor(e24) {\n      this.abortCursorAnimation(), this._tick(e24 ? 0 : this.cursorDelay);\n    }\n    abortCursorAnimation() {\n      let e24 = false;\n      [this._currentTickState, this._currentTickCompleteState].forEach((t2) => {\n        t2 && !t2.isDone() && (e24 = true, t2.abort());\n      }), this._currentCursorOpacity = 1, e24 && this.clearContextTop();\n    }\n    restartCursorIfNeeded() {\n      [this._currentTickState, this._currentTickCompleteState].some((e24) => !e24 || e24.isDone()) && this.initDelayedCursor();\n    }\n    selectAll() {\n      return this.selectionStart = 0, this.selectionEnd = this._text.length, this._fireSelectionChanged(), this._updateTextarea(), this;\n    }\n    cmdAll() {\n      this.selectAll(), this.renderCursorOrSelection();\n    }\n    getSelectedText() {\n      return this._text.slice(this.selectionStart, this.selectionEnd).join(``);\n    }\n    findWordBoundaryLeft(e24) {\n      let t2 = 0, n2 = e24 - 1;\n      if (this._reSpace.test(this._text[n2])) for (; this._reSpace.test(this._text[n2]); ) t2++, n2--;\n      for (; /\\S/.test(this._text[n2]) && n2 > -1; ) t2++, n2--;\n      return e24 - t2;\n    }\n    findWordBoundaryRight(e24) {\n      let t2 = 0, n2 = e24;\n      if (this._reSpace.test(this._text[n2])) for (; this._reSpace.test(this._text[n2]); ) t2++, n2++;\n      for (; /\\S/.test(this._text[n2]) && n2 < this._text.length; ) t2++, n2++;\n      return e24 + t2;\n    }\n    findLineBoundaryLeft(e24) {\n      let t2 = 0, n2 = e24 - 1;\n      for (; !/\\n/.test(this._text[n2]) && n2 > -1; ) t2++, n2--;\n      return e24 - t2;\n    }\n    findLineBoundaryRight(e24) {\n      let t2 = 0, n2 = e24;\n      for (; !/\\n/.test(this._text[n2]) && n2 < this._text.length; ) t2++, n2++;\n      return e24 + t2;\n    }\n    searchWordBoundary(e24, t2) {\n      let n2 = this._text, r2 = e24 > 0 && this._reSpace.test(n2[e24]) && (t2 === -1 || !ne.test(n2[e24 - 1])) ? e24 - 1 : e24, i2 = n2[r2];\n      for (; r2 > 0 && r2 < n2.length && !$o.test(i2); ) r2 += t2, i2 = n2[r2];\n      return t2 === -1 && $o.test(i2) && r2++, r2;\n    }\n    selectWord(e24) {\n      var t2;\n      e24 = (t2 = e24) == null ? this.selectionStart : t2;\n      let n2 = this.searchWordBoundary(e24, -1), r2 = Math.max(n2, this.searchWordBoundary(e24, 1));\n      this.selectionStart = n2, this.selectionEnd = r2, this._fireSelectionChanged(), this._updateTextarea(), this.renderCursorOrSelection();\n    }\n    selectLine(e24) {\n      var t2;\n      e24 = (t2 = e24) == null ? this.selectionStart : t2;\n      let n2 = this.findLineBoundaryLeft(e24), r2 = this.findLineBoundaryRight(e24);\n      this.selectionStart = n2, this.selectionEnd = r2, this._fireSelectionChanged(), this._updateTextarea();\n    }\n    enterEditing(e24) {\n      !this.isEditing && this.editable && (this.enterEditingImpl(), this.fire(`editing:entered`, e24 ? { e: e24 } : void 0), this._fireSelectionChanged(), this.canvas && (this.canvas.fire(`text:editing:entered`, { target: this, e: e24 }), this.canvas.requestRenderAll()));\n    }\n    enterEditingImpl() {\n      this.canvas && (this.canvas.calcOffset(), this.canvas.textEditingManager.exitTextEditing()), this.isEditing = true, this.initHiddenTextarea(), this.hiddenTextarea.focus(), this.hiddenTextarea.value = this.text, this._updateTextarea(), this._saveEditingProps(), this._setEditingProps(), this._textBeforeEdit = this.text, this._tick();\n    }\n    updateSelectionOnMouseMove(e24) {\n      if (this.getActiveControl()) return;\n      let t2 = this.hiddenTextarea;\n      H(t2).activeElement !== t2 && t2.focus();\n      let n2 = this.getSelectionStartFromPointer(e24), r2 = this.selectionStart, i2 = this.selectionEnd;\n      (n2 === this.__selectionStartOnMouseDown && r2 !== i2 || r2 !== n2 && i2 !== n2) && (n2 > this.__selectionStartOnMouseDown ? (this.selectionStart = this.__selectionStartOnMouseDown, this.selectionEnd = n2) : (this.selectionStart = n2, this.selectionEnd = this.__selectionStartOnMouseDown), this.selectionStart === r2 && this.selectionEnd === i2 || (this._fireSelectionChanged(), this._updateTextarea(), this.renderCursorOrSelection()));\n    }\n    _setEditingProps() {\n      this.hoverCursor = `text`, this.canvas && (this.canvas.defaultCursor = this.canvas.moveCursor = `text`), this.borderColor = this.editingBorderColor, this.hasControls = this.selectable = false, this.lockMovementX = this.lockMovementY = true;\n    }\n    fromStringToGraphemeSelection(e24, t2, n2) {\n      let r2 = n2.slice(0, e24), i2 = this.graphemeSplit(r2).length;\n      if (e24 === t2) return { selectionStart: i2, selectionEnd: i2 };\n      let a2 = n2.slice(e24, t2);\n      return { selectionStart: i2, selectionEnd: i2 + this.graphemeSplit(a2).length };\n    }\n    fromGraphemeToStringSelection(e24, t2, n2) {\n      let r2 = n2.slice(0, e24).join(``).length;\n      return e24 === t2 ? { selectionStart: r2, selectionEnd: r2 } : { selectionStart: r2, selectionEnd: r2 + n2.slice(e24, t2).join(``).length };\n    }\n    _updateTextarea() {\n      if (this.cursorOffsetCache = {}, this.hiddenTextarea) {\n        if (!this.inCompositionMode) {\n          let e24 = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n          this.hiddenTextarea.selectionStart = e24.selectionStart, this.hiddenTextarea.selectionEnd = e24.selectionEnd;\n        }\n        this.updateTextareaPosition();\n      }\n    }\n    updateFromTextArea() {\n      let { hiddenTextarea: e24, direction: t2, textAlign: n2, inCompositionMode: r2 } = this;\n      if (!e24) return;\n      let i2 = n2 === `justify` ? t2 === `ltr` ? D : k : n2.replace(`justify-`, ``), a2 = this.getPositionByOrigin(i2, `top`);\n      this.cursorOffsetCache = {}, this.text = e24.value, this.set(`dirty`, true), this.initDimensions(), this.setPositionByOrigin(a2, i2, `top`), this.setCoords();\n      let o2 = this.fromStringToGraphemeSelection(e24.selectionStart, e24.selectionEnd, e24.value);\n      this.selectionEnd = this.selectionStart = o2.selectionEnd, r2 || (this.selectionStart = o2.selectionStart), this.updateTextareaPosition();\n    }\n    updateTextareaPosition() {\n      if (this.selectionStart === this.selectionEnd) {\n        let e24 = this._calcTextareaPosition();\n        this.hiddenTextarea.style.left = e24.left, this.hiddenTextarea.style.top = e24.top;\n      }\n    }\n    _calcTextareaPosition() {\n      if (!this.canvas) return { left: `1px`, top: `1px` };\n      let e24 = this.inCompositionMode ? this.compositionStart : this.selectionStart, t2 = this._getCursorBoundaries(e24), n2 = this.get2DCursorLocation(e24), r2 = n2.lineIndex, i2 = n2.charIndex, a2 = this.getValueOfPropertyAt(r2, i2, `fontSize`) * this.lineHeight, o2 = t2.leftOffset, s3 = this.getCanvasRetinaScaling(), c2 = this.canvas.upperCanvasEl, l2 = c2.width / s3, u2 = c2.height / s3, d2 = l2 - a2, f2 = u2 - a2, p2 = new N(t2.left + o2, t2.top + t2.topOffset + a2).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new N(c2.clientWidth / l2, c2.clientHeight / u2));\n      return p2.x < 0 && (p2.x = 0), p2.x > d2 && (p2.x = d2), p2.y < 0 && (p2.y = 0), p2.y > f2 && (p2.y = f2), p2.x += this.canvas._offset.left, p2.y += this.canvas._offset.top, { left: `${p2.x}px`, top: `${p2.y}px`, fontSize: `${a2}px`, charHeight: a2 };\n    }\n    _saveEditingProps() {\n      this._savedProps = { hasControls: this.hasControls, borderColor: this.borderColor, lockMovementX: this.lockMovementX, lockMovementY: this.lockMovementY, hoverCursor: this.hoverCursor, selectable: this.selectable, defaultCursor: this.canvas && this.canvas.defaultCursor, moveCursor: this.canvas && this.canvas.moveCursor };\n    }\n    _restoreEditingProps() {\n      this._savedProps && (this.hoverCursor = this._savedProps.hoverCursor, this.hasControls = this._savedProps.hasControls, this.borderColor = this._savedProps.borderColor, this.selectable = this._savedProps.selectable, this.lockMovementX = this._savedProps.lockMovementX, this.lockMovementY = this._savedProps.lockMovementY, this.canvas && (this.canvas.defaultCursor = this._savedProps.defaultCursor || this.canvas.defaultCursor, this.canvas.moveCursor = this._savedProps.moveCursor || this.canvas.moveCursor), delete this._savedProps);\n    }\n    exitEditingImpl() {\n      let e24 = this.hiddenTextarea;\n      this.selected = false, this.isEditing = false, e24 && (e24.blur && e24.blur(), e24.parentNode && e24.parentNode.removeChild(e24)), this.hiddenTextarea = null, this.abortCursorAnimation(), this.selectionStart !== this.selectionEnd && this.clearContextTop(), this.selectionEnd = this.selectionStart, this._restoreEditingProps(), this._forceClearCache && (this.initDimensions(), this.setCoords());\n    }\n    exitEditing() {\n      let e24 = this._textBeforeEdit !== this.text;\n      return this.exitEditingImpl(), this.fire(`editing:exited`), e24 && this.fire(`modified`), this.canvas && (this.canvas.fire(`text:editing:exited`, { target: this }), e24 && this.canvas.fire(`object:modified`, { target: this })), this;\n    }\n    _removeExtraneousStyles() {\n      for (let e24 in this.styles) this._textLines[e24] || delete this.styles[e24];\n    }\n    removeStyleFromTo(e24, t2) {\n      let { lineIndex: n2, charIndex: r2 } = this.get2DCursorLocation(e24, true), { lineIndex: i2, charIndex: a2 } = this.get2DCursorLocation(t2, true);\n      if (n2 !== i2) {\n        if (this.styles[n2]) for (let e25 = r2; e25 < this._unwrappedTextLines[n2].length; e25++) delete this.styles[n2][e25];\n        if (this.styles[i2]) for (let e25 = a2; e25 < this._unwrappedTextLines[i2].length; e25++) {\n          let t3 = this.styles[i2][e25];\n          t3 && (this.styles[n2] || (this.styles[n2] = {}), this.styles[n2][r2 + e25 - a2] = t3);\n        }\n        for (let e25 = n2 + 1; e25 <= i2; e25++) delete this.styles[e25];\n        this.shiftLineStyles(i2, n2 - i2);\n      } else if (this.styles[n2]) {\n        let e25 = this.styles[n2], t3 = a2 - r2;\n        for (let t4 = r2; t4 < a2; t4++) delete e25[t4];\n        for (let r3 in this.styles[n2]) {\n          let n3 = parseInt(r3, 10);\n          n3 >= a2 && (e25[n3 - t3] = e25[r3], delete e25[r3]);\n        }\n      }\n    }\n    shiftLineStyles(e24, t2) {\n      let n2 = Object.assign({}, this.styles);\n      for (let r2 in this.styles) {\n        let i2 = parseInt(r2, 10);\n        i2 > e24 && (this.styles[i2 + t2] = n2[i2], n2[i2 - t2] || delete this.styles[i2]);\n      }\n    }\n    insertNewlineStyleObject(e24, t2, n2, r2) {\n      let i2 = {}, a2 = this._unwrappedTextLines[e24].length, o2 = a2 === t2, s3 = false;\n      n2 || (n2 = 1), this.shiftLineStyles(e24, n2);\n      let c2 = this.styles[e24] ? this.styles[e24][t2 === 0 ? t2 : t2 - 1] : void 0;\n      for (let n3 in this.styles[e24]) {\n        let r3 = parseInt(n3, 10);\n        r3 >= t2 && (s3 = true, i2[r3 - t2] = this.styles[e24][n3], o2 && t2 === 0 || delete this.styles[e24][n3]);\n      }\n      let l2 = false;\n      for (s3 && !o2 && (this.styles[e24 + n2] = i2, l2 = true), (l2 || a2 > t2) && n2--; n2 > 0; ) r2 && r2[n2 - 1] ? this.styles[e24 + n2] = { 0: { ...r2[n2 - 1] } } : c2 ? this.styles[e24 + n2] = { 0: { ...c2 } } : delete this.styles[e24 + n2], n2--;\n      this._forceClearCache = true;\n    }\n    insertCharStyleObject(e24, t2, n2, r2) {\n      this.styles || (this.styles = {});\n      let i2 = this.styles[e24], a2 = i2 ? { ...i2 } : {};\n      n2 || (n2 = 1);\n      for (let e25 in a2) {\n        let r3 = parseInt(e25, 10);\n        r3 >= t2 && (i2[r3 + n2] = a2[r3], a2[r3 - n2] || delete i2[r3]);\n      }\n      if (this._forceClearCache = true, r2) {\n        for (; n2--; ) Object.keys(r2[n2]).length && (this.styles[e24] || (this.styles[e24] = {}), this.styles[e24][t2 + n2] = { ...r2[n2] });\n        return;\n      }\n      if (!i2) return;\n      let o2 = i2[t2 ? t2 - 1 : 1];\n      for (; o2 && n2--; ) this.styles[e24][t2 + n2] = { ...o2 };\n    }\n    insertNewStyleBlock(e24, t2, n2) {\n      let r2 = this.get2DCursorLocation(t2, true), i2 = [0], a2, o2 = 0;\n      for (let t3 = 0; t3 < e24.length; t3++) e24[t3] === `\n` ? (o2++, i2[o2] = 0) : i2[o2]++;\n      for (i2[0] > 0 && (this.insertCharStyleObject(r2.lineIndex, r2.charIndex, i2[0], n2), n2 = n2 && n2.slice(i2[0] + 1)), o2 && this.insertNewlineStyleObject(r2.lineIndex, r2.charIndex + i2[0], o2), a2 = 1; a2 < o2; a2++) i2[a2] > 0 ? this.insertCharStyleObject(r2.lineIndex + a2, 0, i2[a2], n2) : n2 && this.styles[r2.lineIndex + a2] && n2[0] && (this.styles[r2.lineIndex + a2][0] = n2[0]), n2 = n2 && n2.slice(i2[a2] + 1);\n      i2[a2] > 0 && this.insertCharStyleObject(r2.lineIndex + a2, 0, i2[a2], n2);\n    }\n    removeChars(e24, t2 = e24 + 1) {\n      this.removeStyleFromTo(e24, t2), this._text.splice(e24, t2 - e24), this.text = this._text.join(``), this.set(`dirty`, true), this.initDimensions(), this.setCoords(), this._removeExtraneousStyles();\n    }\n    insertChars(e24, t2, n2, r2 = n2) {\n      r2 > n2 && this.removeStyleFromTo(n2, r2);\n      let i2 = this.graphemeSplit(e24);\n      this.insertNewStyleBlock(i2, n2, t2), this._text = [...this._text.slice(0, n2), ...i2, ...this._text.slice(r2)], this.text = this._text.join(``), this.set(`dirty`, true), this.initDimensions(), this.setCoords(), this._removeExtraneousStyles();\n    }\n    setSelectionStartEndWithShift(e24, t2, n2) {\n      n2 <= e24 ? (t2 === e24 ? this._selectionDirection = D : this._selectionDirection === `right` && (this._selectionDirection = D, this.selectionEnd = e24), this.selectionStart = n2) : n2 > e24 && n2 < t2 ? this._selectionDirection === `right` ? this.selectionEnd = n2 : this.selectionStart = n2 : (t2 === e24 ? this._selectionDirection = k : this._selectionDirection === `left` && (this._selectionDirection = k, this.selectionStart = t2), this.selectionEnd = n2);\n    }\n  };\n  var ts = class extends es {\n    initHiddenTextarea() {\n      let e24 = this.canvas && H(this.canvas.getElement()) || g(), t2 = e24.createElement(`textarea`);\n      Object.entries({ autocapitalize: `off`, autocorrect: `off`, autocomplete: `off`, spellcheck: `false`, \"data-fabric\": `textarea`, wrap: `off`, name: `fabricTextarea` }).map(([e25, n3]) => t2.setAttribute(e25, n3));\n      let { top: n2, left: r2, fontSize: i2 } = this._calcTextareaPosition();\n      t2.style.cssText = `position: absolute; top: ${n2}; left: ${r2}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${i2};`, (this.hiddenTextareaContainer || e24.body).appendChild(t2), Object.entries({ blur: `blur`, keydown: `onKeyDown`, keyup: `onKeyUp`, input: `onInput`, copy: `copy`, cut: `copy`, paste: `paste`, compositionstart: `onCompositionStart`, compositionupdate: `onCompositionUpdate`, compositionend: `onCompositionEnd` }).map(([e25, n3]) => t2.addEventListener(e25, this[n3].bind(this))), this.hiddenTextarea = t2;\n    }\n    blur() {\n      this.abortCursorAnimation();\n    }\n    onKeyDown(e24) {\n      if (!this.isEditing) return;\n      let t2 = this.direction === `rtl` ? this.keysMapRtl : this.keysMap;\n      if (e24.keyCode in t2) this[t2[e24.keyCode]](e24);\n      else {\n        if (!(e24.keyCode in this.ctrlKeysMapDown) || !e24.ctrlKey && !e24.metaKey) return;\n        this[this.ctrlKeysMapDown[e24.keyCode]](e24);\n      }\n      e24.stopImmediatePropagation(), e24.preventDefault(), e24.keyCode >= 33 && e24.keyCode <= 40 ? (this.inCompositionMode = false, this.clearContextTop(), this.renderCursorOrSelection()) : this.canvas && this.canvas.requestRenderAll();\n    }\n    onKeyUp(e24) {\n      !this.isEditing || this._copyDone || this.inCompositionMode ? this._copyDone = false : e24.keyCode in this.ctrlKeysMapUp && (e24.ctrlKey || e24.metaKey) && (this[this.ctrlKeysMapUp[e24.keyCode]](e24), e24.stopImmediatePropagation(), e24.preventDefault(), this.canvas && this.canvas.requestRenderAll());\n    }\n    onInput(e24) {\n      let t2 = this.fromPaste, { value: n2, selectionStart: r2, selectionEnd: i2 } = this.hiddenTextarea;\n      if (this.fromPaste = false, e24 && e24.stopPropagation(), !this.isEditing) return;\n      let a2 = () => {\n        this.updateFromTextArea(), this.fire(le), this.canvas && (this.canvas.fire(`text:changed`, { target: this }), this.canvas.requestRenderAll());\n      };\n      if (this.hiddenTextarea.value === ``) return this.styles = {}, void a2();\n      let s3 = this._splitTextIntoLines(n2).graphemeText, c2 = this._text.length, l2 = s3.length, u2 = this.selectionStart, d2 = this.selectionEnd, f2 = u2 !== d2, p2, m, g2, _2, v2 = l2 - c2, y2 = this.fromStringToGraphemeSelection(r2, i2, n2), b2 = u2 > y2.selectionStart;\n      f2 ? (m = this._text.slice(u2, d2), v2 += d2 - u2) : l2 < c2 && (m = b2 ? this._text.slice(d2 + v2, d2) : this._text.slice(u2, u2 - v2));\n      let x2 = s3.slice(y2.selectionEnd - v2, y2.selectionEnd);\n      if (m && m.length && (x2.length && (p2 = this.getSelectionStyles(u2, u2 + 1, false), p2 = x2.map(() => p2[0])), f2 ? (g2 = u2, _2 = d2) : b2 ? (g2 = d2 - m.length, _2 = d2) : (g2 = d2, _2 = d2 + m.length), this.removeStyleFromTo(g2, _2)), x2.length) {\n        let { copyPasteData: e25 } = h();\n        t2 && x2.join(``) === e25.copiedText && !o.disableStyleCopyPaste && (p2 = e25.copiedTextStyle), this.insertNewStyleBlock(x2, u2, p2);\n      }\n      a2();\n    }\n    onCompositionStart() {\n      this.inCompositionMode = true;\n    }\n    onCompositionEnd() {\n      this.inCompositionMode = false;\n    }\n    onCompositionUpdate({ target: e24 }) {\n      let { selectionStart: t2, selectionEnd: n2 } = e24;\n      this.compositionStart = t2, this.compositionEnd = n2, this.updateTextareaPosition();\n    }\n    copy() {\n      if (this.selectionStart === this.selectionEnd) return;\n      let { copyPasteData: e24 } = h();\n      e24.copiedText = this.getSelectedText(), o.disableStyleCopyPaste ? e24.copiedTextStyle = void 0 : e24.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true), this._copyDone = true;\n    }\n    paste() {\n      this.fromPaste = true;\n    }\n    _getWidthBeforeCursor(e24, t2) {\n      let n2, r2 = this._getLineLeftOffset(e24);\n      return t2 > 0 && (n2 = this.__charBounds[e24][t2 - 1], r2 += n2.left + n2.width), r2;\n    }\n    getDownCursorOffset(e24, t2) {\n      let n2 = this._getSelectionForOffset(e24, t2), r2 = this.get2DCursorLocation(n2), i2 = r2.lineIndex;\n      if (i2 === this._textLines.length - 1 || e24.metaKey || e24.keyCode === 34) return this._text.length - n2;\n      let a2 = r2.charIndex, o2 = this._getWidthBeforeCursor(i2, a2), s3 = this._getIndexOnLine(i2 + 1, o2);\n      return this._textLines[i2].slice(a2).length + s3 + 1 + this.missingNewlineOffset(i2);\n    }\n    _getSelectionForOffset(e24, t2) {\n      return e24.shiftKey && this.selectionStart !== this.selectionEnd && t2 ? this.selectionEnd : this.selectionStart;\n    }\n    getUpCursorOffset(e24, t2) {\n      let n2 = this._getSelectionForOffset(e24, t2), r2 = this.get2DCursorLocation(n2), i2 = r2.lineIndex;\n      if (i2 === 0 || e24.metaKey || e24.keyCode === 33) return -n2;\n      let a2 = r2.charIndex, o2 = this._getWidthBeforeCursor(i2, a2), s3 = this._getIndexOnLine(i2 - 1, o2), c2 = this._textLines[i2].slice(0, a2), l2 = this.missingNewlineOffset(i2 - 1);\n      return -this._textLines[i2 - 1].length + s3 - c2.length + (1 - l2);\n    }\n    _getIndexOnLine(e24, t2) {\n      let n2 = this._textLines[e24], r2, i2, a2 = this._getLineLeftOffset(e24), o2 = 0;\n      for (let s3 = 0, c2 = n2.length; s3 < c2; s3++) if (r2 = this.__charBounds[e24][s3].width, a2 += r2, a2 > t2) {\n        i2 = true;\n        let e25 = a2 - r2, n3 = a2, c3 = Math.abs(e25 - t2);\n        o2 = Math.abs(n3 - t2) < c3 ? s3 : s3 - 1;\n        break;\n      }\n      return i2 || (o2 = n2.length - 1), o2;\n    }\n    moveCursorDown(e24) {\n      this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length || this._moveCursorUpOrDown(`Down`, e24);\n    }\n    moveCursorUp(e24) {\n      this.selectionStart === 0 && this.selectionEnd === 0 || this._moveCursorUpOrDown(`Up`, e24);\n    }\n    _moveCursorUpOrDown(e24, t2) {\n      let n2 = this[`get${e24}CursorOffset`](t2, this._selectionDirection === k);\n      if (t2.shiftKey ? this.moveCursorWithShift(n2) : this.moveCursorWithoutShift(n2), n2 !== 0) {\n        let e25 = this.text.length;\n        this.selectionStart = Vn(0, this.selectionStart, e25), this.selectionEnd = Vn(0, this.selectionEnd, e25), this.abortCursorAnimation(), this.initDelayedCursor(), this._fireSelectionChanged(), this._updateTextarea();\n      }\n    }\n    moveCursorWithShift(e24) {\n      let t2 = this._selectionDirection === `left` ? this.selectionStart + e24 : this.selectionEnd + e24;\n      return this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, t2), e24 !== 0;\n    }\n    moveCursorWithoutShift(e24) {\n      return e24 < 0 ? (this.selectionStart += e24, this.selectionEnd = this.selectionStart) : (this.selectionEnd += e24, this.selectionStart = this.selectionEnd), e24 !== 0;\n    }\n    moveCursorLeft(e24) {\n      this.selectionStart === 0 && this.selectionEnd === 0 || this._moveCursorLeftOrRight(`Left`, e24);\n    }\n    _move(e24, t2, n2) {\n      let r2;\n      if (e24.altKey) r2 = this[`findWordBoundary${n2}`](this[t2]);\n      else {\n        if (!e24.metaKey && e24.keyCode !== 35 && e24.keyCode !== 36) return this[t2] += n2 === `Left` ? -1 : 1, true;\n        r2 = this[`findLineBoundary${n2}`](this[t2]);\n      }\n      return r2 !== void 0 && this[t2] !== r2 && (this[t2] = r2, true);\n    }\n    _moveLeft(e24, t2) {\n      return this._move(e24, t2, `Left`);\n    }\n    _moveRight(e24, t2) {\n      return this._move(e24, t2, `Right`);\n    }\n    moveCursorLeftWithoutShift(e24) {\n      let t2 = true;\n      return this._selectionDirection = D, this.selectionEnd === this.selectionStart && this.selectionStart !== 0 && (t2 = this._moveLeft(e24, `selectionStart`)), this.selectionEnd = this.selectionStart, t2;\n    }\n    moveCursorLeftWithShift(e24) {\n      return this._selectionDirection === `right` && this.selectionStart !== this.selectionEnd ? this._moveLeft(e24, `selectionEnd`) : this.selectionStart === 0 ? void 0 : (this._selectionDirection = D, this._moveLeft(e24, `selectionStart`));\n    }\n    moveCursorRight(e24) {\n      this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length || this._moveCursorLeftOrRight(`Right`, e24);\n    }\n    _moveCursorLeftOrRight(e24, t2) {\n      let n2 = `moveCursor${e24}${t2.shiftKey ? `WithShift` : `WithoutShift`}`;\n      this._currentCursorOpacity = 1, this[n2](t2) && (this.abortCursorAnimation(), this.initDelayedCursor(), this._fireSelectionChanged(), this._updateTextarea());\n    }\n    moveCursorRightWithShift(e24) {\n      return this._selectionDirection === `left` && this.selectionStart !== this.selectionEnd ? this._moveRight(e24, `selectionStart`) : this.selectionEnd === this._text.length ? void 0 : (this._selectionDirection = k, this._moveRight(e24, `selectionEnd`));\n    }\n    moveCursorRightWithoutShift(e24) {\n      let t2 = true;\n      return this._selectionDirection = k, this.selectionStart === this.selectionEnd ? (t2 = this._moveRight(e24, `selectionStart`), this.selectionEnd = this.selectionStart) : this.selectionStart = this.selectionEnd, t2;\n    }\n  };\n  var ns = (e24) => !!e24.button;\n  var rs = class extends ts {\n    constructor(...e24) {\n      super(...e24), i(this, `draggableTextDelegate`, void 0);\n    }\n    initBehavior() {\n      this.on(`mousedown`, this._mouseDownHandler), this.on(`mouseup`, this.mouseUpHandler), this.on(`mousedblclick`, this.doubleClickHandler), this.on(`mousetripleclick`, this.tripleClickHandler), this.draggableTextDelegate = new Qo(this), super.initBehavior();\n    }\n    shouldStartDragging() {\n      return this.draggableTextDelegate.isActive();\n    }\n    onDragStart(e24) {\n      return this.draggableTextDelegate.onDragStart(e24);\n    }\n    canDrop(e24) {\n      return this.draggableTextDelegate.canDrop(e24);\n    }\n    doubleClickHandler(e24) {\n      this.isEditing && (this.selectWord(this.getSelectionStartFromPointer(e24.e)), this.renderCursorOrSelection());\n    }\n    tripleClickHandler(e24) {\n      this.isEditing && (this.selectLine(this.getSelectionStartFromPointer(e24.e)), this.renderCursorOrSelection());\n    }\n    _mouseDownHandler({ e: e24, alreadySelected: t2 }) {\n      this.canvas && this.editable && !ns(e24) && !this.getActiveControl() && (this.draggableTextDelegate.start(e24) || (this.canvas.textEditingManager.register(this), t2 && (this.inCompositionMode = false, this.setCursorByClick(e24)), this.isEditing && (this.__selectionStartOnMouseDown = this.selectionStart, this.selectionStart === this.selectionEnd && this.abortCursorAnimation(), this.renderCursorOrSelection()), this.selected || (this.selected = t2 || this.isEditing)));\n    }\n    mouseUpHandler({ e: e24, transform: t2 }) {\n      let n2 = this.draggableTextDelegate.end(e24);\n      if (this.canvas) {\n        this.canvas.textEditingManager.unregister(this);\n        let e25 = this.canvas._activeObject;\n        if (e25 && e25 !== this) return;\n      }\n      !this.editable || this.group && !this.group.interactive || t2 && t2.actionPerformed || ns(e24) || n2 || this.selected && !this.getActiveControl() && (this.enterEditing(e24), this.selectionStart === this.selectionEnd ? this.initDelayedCursor(true) : this.renderCursorOrSelection());\n    }\n    setCursorByClick(e24) {\n      let t2 = this.getSelectionStartFromPointer(e24), n2 = this.selectionStart, r2 = this.selectionEnd;\n      e24.shiftKey ? this.setSelectionStartEndWithShift(n2, r2, t2) : (this.selectionStart = t2, this.selectionEnd = t2), this.isEditing && (this._fireSelectionChanged(), this._updateTextarea());\n    }\n    getSelectionStartFromPointer(e24) {\n      let t2 = this.canvas.getScenePoint(e24).transform(R(this.calcTransformMatrix())).add(new N(-this._getLeftOffset(), -this._getTopOffset())), n2 = 0, r2 = 0, i2 = 0;\n      for (let e25 = 0; e25 < this._textLines.length && n2 <= t2.y; e25++) n2 += this.getHeightOfLine(e25), i2 = e25, e25 > 0 && (r2 += this._textLines[e25 - 1].length + this.missingNewlineOffset(e25 - 1));\n      let a2 = Math.abs(this._getLineLeftOffset(i2)), o2 = this._textLines[i2].length, s3 = this.__charBounds[i2];\n      for (let e25 = 0; e25 < o2; e25++) {\n        let n3 = a2 + s3[e25].kernedWidth;\n        if (t2.x <= n3) {\n          Math.abs(t2.x - n3) <= Math.abs(t2.x - a2) && r2++;\n          break;\n        }\n        a2 = n3, r2++;\n      }\n      return Math.min(this.flipX ? o2 - r2 : r2, this._text.length);\n    }\n  };\n  var is = `moveCursorUp`;\n  var as = `moveCursorDown`;\n  var os = `moveCursorLeft`;\n  var ss = `moveCursorRight`;\n  var cs = `exitEditing`;\n  var ls = (e24, t2) => {\n    let n2 = t2.getRetinaScaling();\n    e24.setTransform(n2, 0, 0, n2, 0, 0);\n    let r2 = t2.viewportTransform;\n    e24.transform(r2[0], r2[1], r2[2], r2[3], r2[4], r2[5]);\n  };\n  var us = { selectionStart: 0, selectionEnd: 0, selectionColor: `rgba(17,119,255,0.3)`, isEditing: false, editable: true, editingBorderColor: `rgba(102,153,255,0.25)`, cursorWidth: 2, cursorColor: ``, cursorDelay: 1e3, cursorDuration: 600, caching: true, hiddenTextareaContainer: null, keysMap: { 9: cs, 27: cs, 33: is, 34: as, 35: ss, 36: os, 37: os, 38: is, 39: ss, 40: as }, keysMapRtl: { 9: cs, 27: cs, 33: is, 34: as, 35: os, 36: ss, 37: ss, 38: is, 39: os, 40: as }, ctrlKeysMapDown: { 65: `cmdAll` }, ctrlKeysMapUp: { 67: `copy`, 88: `cut` }, _selectionDirection: null, _reSpace: /\\s|\\r?\\n/, inCompositionMode: false };\n  var ds = class e20 extends rs {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e20.ownDefaults };\n    }\n    get type() {\n      let e24 = super.type;\n      return e24 === `itext` ? `i-text` : e24;\n    }\n    constructor(t2, n2) {\n      super(t2, { ...e20.ownDefaults, ...n2 }), this.initBehavior();\n    }\n    _set(e24, t2) {\n      return this.isEditing && this._savedProps && e24 in this._savedProps ? (this._savedProps[e24] = t2, this) : (e24 === `canvas` && (this.canvas instanceof ho && this.canvas.textEditingManager.remove(this), t2 instanceof ho && t2.textEditingManager.add(this)), super._set(e24, t2));\n    }\n    setSelectionStart(e24) {\n      e24 = Math.max(e24, 0), this._updateAndFire(`selectionStart`, e24);\n    }\n    setSelectionEnd(e24) {\n      e24 = Math.min(e24, this.text.length), this._updateAndFire(`selectionEnd`, e24);\n    }\n    _updateAndFire(e24, t2) {\n      this[e24] !== t2 && (this._fireSelectionChanged(), this[e24] = t2), this._updateTextarea();\n    }\n    _fireSelectionChanged() {\n      this.fire(`selection:changed`), this.canvas && this.canvas.fire(`text:selection:changed`, { target: this });\n    }\n    initDimensions() {\n      this.isEditing && this.initDelayedCursor(), super.initDimensions();\n    }\n    getSelectionStyles(e24 = this.selectionStart || 0, t2 = this.selectionEnd, n2) {\n      return super.getSelectionStyles(e24, t2, n2);\n    }\n    setSelectionStyles(e24, t2 = this.selectionStart || 0, n2 = this.selectionEnd) {\n      return super.setSelectionStyles(e24, t2, n2);\n    }\n    get2DCursorLocation(e24 = this.selectionStart, t2) {\n      return super.get2DCursorLocation(e24, t2);\n    }\n    render(e24) {\n      super.render(e24), this.cursorOffsetCache = {}, this.renderCursorOrSelection();\n    }\n    toCanvasElement(e24) {\n      let t2 = this.isEditing;\n      this.isEditing = false;\n      let n2 = super.toCanvasElement(e24);\n      return this.isEditing = t2, n2;\n    }\n    renderCursorOrSelection() {\n      if (!this.isEditing || !this.canvas) return;\n      let e24 = this.clearContextTop(true);\n      if (!e24) return;\n      let t2 = this._getCursorBoundaries(), n2 = this.findAncestorsWithClipPath(), r2 = n2.length > 0, i2, a2 = e24;\n      if (r2) {\n        i2 = F(e24.canvas), a2 = i2.getContext(`2d`), ls(a2, this.canvas);\n        let t3 = this.calcTransformMatrix();\n        a2.transform(t3[0], t3[1], t3[2], t3[3], t3[4], t3[5]);\n      }\n      if (this.selectionStart !== this.selectionEnd || this.inCompositionMode ? this.renderSelection(a2, t2) : this.renderCursor(a2, t2), r2) for (let t3 of n2) {\n        let n3 = t3.clipPath, r3 = F(e24.canvas), i3 = r3.getContext(`2d`);\n        if (ls(i3, this.canvas), !n3.absolutePositioned) {\n          let e25 = t3.calcTransformMatrix();\n          i3.transform(e25[0], e25[1], e25[2], e25[3], e25[4], e25[5]);\n        }\n        n3.transform(i3), n3.drawObject(i3, true, {}), this.drawClipPathOnCache(a2, n3, r3);\n      }\n      r2 && (e24.setTransform(1, 0, 0, 1, 0, 0), e24.drawImage(i2, 0, 0)), this.canvas.contextTopDirty = true, e24.restore();\n    }\n    findAncestorsWithClipPath() {\n      let e24 = [], t2 = this;\n      for (; t2; ) t2.clipPath && e24.push(t2), t2 = t2.parent;\n      return e24;\n    }\n    _getCursorBoundaries(e24 = this.selectionStart, t2) {\n      let n2 = this._getLeftOffset(), r2 = this._getTopOffset(), i2 = this._getCursorBoundariesOffsets(e24, t2);\n      return { left: n2, top: r2, leftOffset: i2.left, topOffset: i2.top };\n    }\n    _getCursorBoundariesOffsets(e24, t2) {\n      return t2 ? this.__getCursorBoundariesOffsets(e24) : this.cursorOffsetCache && `top` in this.cursorOffsetCache ? this.cursorOffsetCache : this.cursorOffsetCache = this.__getCursorBoundariesOffsets(e24);\n    }\n    __getCursorBoundariesOffsets(e24) {\n      let t2 = 0, n2 = 0, { charIndex: r2, lineIndex: i2 } = this.get2DCursorLocation(e24), { textAlign: a2, direction: o2 } = this;\n      for (let e25 = 0; e25 < i2; e25++) t2 += this.getHeightOfLine(e25);\n      let s3 = this._getLineLeftOffset(i2), c2 = this.__charBounds[i2][r2];\n      c2 && (n2 = c2.left), this.charSpacing !== 0 && r2 === this._textLines[i2].length && (n2 -= this._getWidthOfCharSpacing());\n      let l2 = s3 + (n2 > 0 ? n2 : 0);\n      return o2 === `rtl` && (a2 === `right` || a2 === `justify` || a2 === `justify-right` ? l2 *= -1 : a2 === `left` || a2 === `justify-left` ? l2 = s3 - (n2 > 0 ? n2 : 0) : a2 !== `center` && a2 !== `justify-center` || (l2 = s3 - (n2 > 0 ? n2 : 0))), { top: t2, left: l2 };\n    }\n    renderCursorAt(e24) {\n      this._renderCursor(this.canvas.contextTop, this._getCursorBoundaries(e24, true), e24);\n    }\n    renderCursor(e24, t2) {\n      this._renderCursor(e24, t2, this.selectionStart);\n    }\n    getCursorRenderingData(e24 = this.selectionStart, t2 = this._getCursorBoundaries(e24)) {\n      let n2 = this.get2DCursorLocation(e24), r2 = n2.lineIndex, i2 = n2.charIndex > 0 ? n2.charIndex - 1 : 0, a2 = this.getValueOfPropertyAt(r2, i2, `fontSize`), o2 = this.getObjectScaling().x * this.canvas.getZoom(), s3 = this.cursorWidth / o2, c2 = this.getValueOfPropertyAt(r2, i2, `deltaY`), l2 = t2.topOffset + (1 - this._fontSizeFraction) * this.getHeightOfLine(r2) / this.lineHeight - a2 * (1 - this._fontSizeFraction);\n      return { color: this.cursorColor || this.getValueOfPropertyAt(r2, i2, `fill`), opacity: this._currentCursorOpacity, left: t2.left + t2.leftOffset - s3 / 2, top: l2 + t2.top + c2, width: s3, height: a2 };\n    }\n    _renderCursor(e24, t2, n2) {\n      let { color: r2, opacity: i2, left: a2, top: o2, width: s3, height: c2 } = this.getCursorRenderingData(n2, t2);\n      e24.fillStyle = r2, e24.globalAlpha = i2, e24.fillRect(a2, o2, s3, c2);\n    }\n    renderSelection(e24, t2) {\n      let n2 = { selectionStart: this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart, selectionEnd: this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd };\n      this._renderSelection(e24, n2, t2);\n    }\n    renderDragSourceEffect() {\n      let e24 = this.draggableTextDelegate.getDragStartSelection();\n      this._renderSelection(this.canvas.contextTop, e24, this._getCursorBoundaries(e24.selectionStart, true));\n    }\n    renderDropTargetEffect(e24) {\n      let t2 = this.getSelectionStartFromPointer(e24);\n      this.renderCursorAt(t2);\n    }\n    _renderSelection(e24, t2, n2) {\n      let { textAlign: r2, direction: i2 } = this, a2 = t2.selectionStart, o2 = t2.selectionEnd, s3 = r2.includes(En), c2 = this.get2DCursorLocation(a2), l2 = this.get2DCursorLocation(o2), u2 = c2.lineIndex, d2 = l2.lineIndex, f2 = c2.charIndex < 0 ? 0 : c2.charIndex, p2 = l2.charIndex < 0 ? 0 : l2.charIndex;\n      for (let t3 = u2; t3 <= d2; t3++) {\n        let a3 = this._getLineLeftOffset(t3) || 0, o3 = this.getHeightOfLine(t3), c3 = 0, l3 = 0;\n        if (t3 === u2 && (c3 = this.__charBounds[u2][f2].left), t3 >= u2 && t3 < d2) l3 = s3 && !this.isEndOfWrapping(t3) ? this.width : this.getLineWidth(t3) || 5;\n        else if (t3 === d2) if (p2 === 0) l3 = this.__charBounds[d2][p2].left;\n        else {\n          let e25 = this._getWidthOfCharSpacing();\n          l3 = this.__charBounds[d2][p2 - 1].left + this.__charBounds[d2][p2 - 1].width - e25;\n        }\n        let m = o3;\n        (this.lineHeight < 1 || t3 === d2 && this.lineHeight > 1) && (o3 /= this.lineHeight);\n        let h2 = n2.left + a3 + c3, g2 = o3, _2 = 0, v2 = l3 - c3;\n        this.inCompositionMode ? (e24.fillStyle = this.compositionColor || `black`, g2 = 1, _2 = o3) : e24.fillStyle = this.selectionColor, i2 === `rtl` && (r2 === `right` || r2 === `justify` || r2 === `justify-right` ? h2 = this.width - h2 - v2 : r2 === `left` || r2 === `justify-left` ? h2 = n2.left + a3 - l3 : r2 !== `center` && r2 !== `justify-center` || (h2 = n2.left + a3 - l3)), e24.fillRect(h2, n2.top + n2.topOffset + _2, v2, g2), n2.topOffset += m;\n      }\n    }\n    getCurrentCharFontSize() {\n      let e24 = this._getCurrentCharIndex();\n      return this.getValueOfPropertyAt(e24.l, e24.c, `fontSize`);\n    }\n    getCurrentCharColor() {\n      let e24 = this._getCurrentCharIndex();\n      return this.getValueOfPropertyAt(e24.l, e24.c, j);\n    }\n    _getCurrentCharIndex() {\n      let e24 = this.get2DCursorLocation(this.selectionStart, true), t2 = e24.charIndex > 0 ? e24.charIndex - 1 : 0;\n      return { l: e24.lineIndex, c: t2 };\n    }\n    dispose() {\n      this.exitEditingImpl(), this.draggableTextDelegate.dispose(), super.dispose();\n    }\n  };\n  i(ds, `ownDefaults`, us), i(ds, `type`, `IText`), M.setClass(ds), M.setClass(ds, `i-text`);\n  var fs = class e21 extends ds {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e21.ownDefaults };\n    }\n    constructor(t2, n2) {\n      super(t2, { ...e21.ownDefaults, ...n2 });\n    }\n    static createControls() {\n      return { controls: gi() };\n    }\n    initDimensions() {\n      this.initialized && (this.isEditing && this.initDelayedCursor(), this._clearCache(), this.dynamicMinWidth = 0, this._styleMap = this._generateStyleMap(this._splitText()), this.dynamicMinWidth > this.width && this._set(`width`, this.dynamicMinWidth), this.textAlign.includes(`justify`) && this.enlargeSpaces(), this.height = this.calcTextHeight());\n    }\n    _generateStyleMap(e24) {\n      let t2 = 0, n2 = 0, r2 = 0, i2 = {};\n      for (let a2 = 0; a2 < e24.graphemeLines.length; a2++) e24.graphemeText[r2] === `\n` && a2 > 0 ? (n2 = 0, r2++, t2++) : !this.splitByGrapheme && this._reSpaceAndTab.test(e24.graphemeText[r2]) && a2 > 0 && (n2++, r2++), i2[a2] = { line: t2, offset: n2 }, r2 += e24.graphemeLines[a2].length, n2 += e24.graphemeLines[a2].length;\n      return i2;\n    }\n    styleHas(e24, t2) {\n      if (this._styleMap && !this.isWrapping) {\n        let e25 = this._styleMap[t2];\n        e25 && (t2 = e25.line);\n      }\n      return super.styleHas(e24, t2);\n    }\n    isEmptyStyles(e24) {\n      if (!this.styles) return true;\n      let t2, n2, r2 = 0, i2 = false, a2 = this._styleMap[e24], o2 = this._styleMap[e24 + 1];\n      a2 && (e24 = a2.line, r2 = a2.offset), o2 && (t2 = o2.line, i2 = t2 === e24, n2 = o2.offset);\n      let s3 = e24 === void 0 ? this.styles : { line: this.styles[e24] };\n      for (let e25 in s3) for (let t3 in s3[e25]) {\n        let a3 = parseInt(t3, 10);\n        if (a3 >= r2 && (!i2 || a3 < n2)) for (let n3 in s3[e25][t3]) return false;\n      }\n      return true;\n    }\n    _getStyleDeclaration(e24, t2) {\n      if (this._styleMap && !this.isWrapping) {\n        let n2 = this._styleMap[e24];\n        if (!n2) return {};\n        e24 = n2.line, t2 = n2.offset + t2;\n      }\n      return super._getStyleDeclaration(e24, t2);\n    }\n    _setStyleDeclaration(e24, t2, n2) {\n      let r2 = this._styleMap[e24];\n      super._setStyleDeclaration(r2.line, r2.offset + t2, n2);\n    }\n    _deleteStyleDeclaration(e24, t2) {\n      let n2 = this._styleMap[e24];\n      super._deleteStyleDeclaration(n2.line, n2.offset + t2);\n    }\n    _getLineStyle(e24) {\n      let t2 = this._styleMap[e24];\n      return !!this.styles[t2.line];\n    }\n    _setLineStyle(e24) {\n      let t2 = this._styleMap[e24];\n      super._setLineStyle(t2.line);\n    }\n    _wrapText(e24, t2) {\n      this.isWrapping = true;\n      let n2 = this.getGraphemeDataForRender(e24), r2 = [];\n      for (let e25 = 0; e25 < n2.wordsData.length; e25++) r2.push(...this._wrapLine(e25, t2, n2));\n      return this.isWrapping = false, r2;\n    }\n    getGraphemeDataForRender(e24) {\n      let t2 = this.splitByGrapheme, n2 = t2 ? `` : ` `, r2 = 0;\n      return { wordsData: e24.map((e25, i2) => {\n        let a2 = 0, o2 = t2 ? this.graphemeSplit(e25) : this.wordSplit(e25);\n        return o2.length === 0 ? [{ word: [], width: 0 }] : o2.map((e26) => {\n          let o3 = t2 ? [e26] : this.graphemeSplit(e26), s3 = this._measureWord(o3, i2, a2);\n          return r2 = Math.max(s3, r2), a2 += o3.length + n2.length, { word: o3, width: s3 };\n        });\n      }), largestWordWidth: r2 };\n    }\n    _measureWord(e24, t2, n2 = 0) {\n      let r2, i2 = 0;\n      for (let a2 = 0, o2 = e24.length; a2 < o2; a2++) i2 += this._getGraphemeBox(e24[a2], t2, a2 + n2, r2, true).kernedWidth, r2 = e24[a2];\n      return i2;\n    }\n    wordSplit(e24) {\n      return e24.split(this._wordJoiners);\n    }\n    _wrapLine(e24, t2, { largestWordWidth: n2, wordsData: r2 }, i2 = 0) {\n      let a2 = this._getWidthOfCharSpacing(), o2 = this.splitByGrapheme, s3 = [], c2 = o2 ? `` : ` `, l2 = 0, u2 = [], d2 = 0, f2 = 0, p2 = true;\n      t2 -= i2;\n      let m = Math.max(t2, n2, this.dynamicMinWidth), h2 = r2[e24], g2;\n      for (g2 = 0; g2 < h2.length; g2++) {\n        let { word: t3, width: n3 } = h2[g2];\n        d2 += t3.length, l2 += f2 + n3 - a2, l2 > m && !p2 ? (s3.push(u2), u2 = [], l2 = n3, p2 = true) : l2 += a2, p2 || o2 || u2.push(c2), u2 = u2.concat(t3), f2 = o2 ? 0 : this._measureWord([c2], e24, d2), d2++, p2 = false;\n      }\n      return g2 && s3.push(u2), n2 + i2 > this.dynamicMinWidth && (this.dynamicMinWidth = n2 - a2 + i2), s3;\n    }\n    isEndOfWrapping(e24) {\n      return !this._styleMap[e24 + 1] || this._styleMap[e24 + 1].line !== this._styleMap[e24].line;\n    }\n    missingNewlineOffset(e24, t2) {\n      return this.splitByGrapheme && !t2 ? +!!this.isEndOfWrapping(e24) : 1;\n    }\n    _splitTextIntoLines(e24) {\n      let t2 = super._splitTextIntoLines(e24), n2 = this._wrapText(t2.lines, this.width), r2 = Array(n2.length);\n      for (let e25 = 0; e25 < n2.length; e25++) r2[e25] = n2[e25].join(``);\n      return t2.lines = r2, t2.graphemeLines = n2, t2;\n    }\n    getMinWidth() {\n      return Math.max(this.minWidth, this.dynamicMinWidth);\n    }\n    _removeExtraneousStyles() {\n      let e24 = /* @__PURE__ */ new Map();\n      for (let t2 in this._styleMap) {\n        let n2 = parseInt(t2, 10);\n        if (this._textLines[n2]) {\n          let n3 = this._styleMap[t2].line;\n          e24.set(`${n3}`, true);\n        }\n      }\n      for (let t2 in this.styles) e24.has(t2) || delete this.styles[t2];\n    }\n    toObject(e24 = []) {\n      return super.toObject([`minWidth`, `splitByGrapheme`, ...e24]);\n    }\n  };\n  i(fs, `type`, `Textbox`), i(fs, `textLayoutProperties`, [...ds.textLayoutProperties, `width`]), i(fs, `ownDefaults`, { minWidth: 20, dynamicMinWidth: 2, lockScalingFlip: true, noScaleCache: false, _wordJoiners: /[ \\t\\r]/, splitByGrapheme: false }), M.setClass(fs);\n  var ps = class extends ra {\n    shouldPerformLayout(e24) {\n      return !!e24.target.clipPath && super.shouldPerformLayout(e24);\n    }\n    shouldLayoutClipPath() {\n      return false;\n    }\n    calcLayoutResult(e24, t2) {\n      let { target: n2 } = e24, { clipPath: r2, group: i2 } = n2;\n      if (!r2 || !this.shouldPerformLayout(e24)) return;\n      let { width: a2, height: o2 } = wt(na(n2, r2)), s3 = new N(a2, o2);\n      if (r2.absolutePositioned) return { center: Mt(r2.getRelativeCenterPoint(), void 0, i2 ? i2.calcTransformMatrix() : void 0), size: s3 };\n      {\n        let i3 = r2.getRelativeCenterPoint().transform(n2.calcOwnMatrix(), true);\n        if (this.shouldPerformLayout(e24)) {\n          let { center: n3 = new N(), correction: r3 = new N() } = this.calcBoundingBox(t2, e24) || {};\n          return { center: n3.add(i3), correction: r3.subtract(i3), size: s3 };\n        }\n        return { center: n2.getRelativeCenterPoint().add(i3), size: s3 };\n      }\n    }\n  };\n  i(ps, `type`, `clip-path`), M.setClass(ps);\n  var ms = class extends ra {\n    getInitialSize({ target: e24 }, { size: t2 }) {\n      return new N(e24.width || t2.x, e24.height || t2.y);\n    }\n  };\n  i(ms, `type`, `fixed`), M.setClass(ms);\n  var hs = class extends oa {\n    subscribeTargets(e24) {\n      let t2 = e24.target;\n      e24.targets.reduce((e25, t3) => (t3.parent && e25.add(t3.parent), e25), /* @__PURE__ */ new Set()).forEach((e25) => {\n        e25.layoutManager.subscribeTargets({ target: e25, targets: [t2] });\n      });\n    }\n    unsubscribeTargets(e24) {\n      let t2 = e24.target, n2 = t2.getObjects();\n      e24.targets.reduce((e25, t3) => (t3.parent && e25.add(t3.parent), e25), /* @__PURE__ */ new Set()).forEach((e25) => {\n        !n2.some((t3) => t3.parent === e25) && e25.layoutManager.unsubscribeTargets({ target: e25, targets: [t2] });\n      });\n    }\n  };\n  var gs = class e22 extends ca {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e22.ownDefaults };\n    }\n    constructor(t2 = [], n2 = {}) {\n      super(), Object.assign(this, e22.ownDefaults), this.setOptions(n2);\n      let { left: r2, top: i2, layoutManager: a2 } = n2;\n      this.groupInit(t2, { left: r2, top: i2, layoutManager: a2 == null ? new hs() : a2 });\n    }\n    _shouldSetNestedCoords() {\n      return true;\n    }\n    __objectSelectionMonitor() {\n    }\n    multiSelectAdd(...e24) {\n      this.multiSelectionStacking === `selection-order` ? this.add(...e24) : e24.forEach((e25) => {\n        let t2 = this._objects.findIndex((t3) => t3.isInFrontOf(e25)), n2 = t2 === -1 ? this.size() : t2;\n        this.insertAt(n2, e25);\n      });\n    }\n    canEnterGroup(e24) {\n      return this.getObjects().some((t2) => t2.isDescendantOf(e24) || e24.isDescendantOf(t2)) ? (s(`error`, `ActiveSelection: circular object trees are not supported, this call has no effect`), false) : super.canEnterGroup(e24);\n    }\n    enterGroup(e24, t2) {\n      e24.parent && e24.parent === e24.group ? e24.parent._exitGroup(e24) : e24.group && e24.parent !== e24.group && e24.group.remove(e24), this._enterGroup(e24, t2);\n    }\n    exitGroup(e24, t2) {\n      this._exitGroup(e24, t2), e24.parent && e24.parent._enterGroup(e24, true);\n    }\n    _onAfterObjectsChange(e24, t2) {\n      super._onAfterObjectsChange(e24, t2);\n      let n2 = /* @__PURE__ */ new Set();\n      t2.forEach((e25) => {\n        let { parent: t3 } = e25;\n        t3 && n2.add(t3);\n      }), e24 === `removed` ? n2.forEach((e25) => {\n        e25._onAfterObjectsChange(ta, t2);\n      }) : n2.forEach((e25) => {\n        e25._set(`dirty`, true);\n      });\n    }\n    onDeselect() {\n      return this.removeAll(), false;\n    }\n    toString() {\n      return `#<ActiveSelection: (${this.complexity()})>`;\n    }\n    shouldCache() {\n      return false;\n    }\n    isOnACache() {\n      return false;\n    }\n    _renderControls(e24, t2, n2) {\n      e24.save(), e24.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n      let r2 = { hasControls: false, ...n2, forActiveSelection: true };\n      for (let t3 = 0; t3 < this._objects.length; t3++) this._objects[t3]._renderControls(e24, r2);\n      super._renderControls(e24, t2), e24.restore();\n    }\n  };\n  i(gs, `type`, `ActiveSelection`), i(gs, `ownDefaults`, { multiSelectionStacking: `canvas-stacking` }), M.setClass(gs), M.setClass(gs, `activeSelection`);\n  var _s = class {\n    constructor() {\n      i(this, `resources`, {});\n    }\n    applyFilters(e24, t2, n2, r2, i2) {\n      let a2 = i2.getContext(`2d`, { willReadFrequently: true, desynchronized: true });\n      if (!a2) return;\n      a2.drawImage(t2, 0, 0, n2, r2);\n      let o2 = { sourceWidth: n2, sourceHeight: r2, imageData: a2.getImageData(0, 0, n2, r2), originalEl: t2, originalImageData: a2.getImageData(0, 0, n2, r2), canvasEl: i2, ctx: a2, filterBackend: this };\n      e24.forEach((e25) => {\n        e25.applyTo(o2);\n      });\n      let { imageData: s3 } = o2;\n      return s3.width === n2 && s3.height === r2 || (i2.width = s3.width, i2.height = s3.height), a2.putImageData(s3, 0, 0), o2;\n    }\n  };\n  var vs = class {\n    constructor({ tileSize: e24 = o.textureSize } = {}) {\n      i(this, `aPosition`, new Float32Array([0, 0, 0, 1, 1, 0, 1, 1])), i(this, `resources`, {}), this.tileSize = e24, this.setupGLContext(e24, e24), this.captureGPUInfo();\n    }\n    setupGLContext(e24, t2) {\n      this.dispose(), this.createWebGLCanvas(e24, t2);\n    }\n    createWebGLCanvas(e24, t2) {\n      let n2 = F({ width: e24, height: t2 }), r2 = n2.getContext(`webgl`, { alpha: true, premultipliedAlpha: false, depth: false, stencil: false, antialias: false });\n      r2 && (r2.clearColor(0, 0, 0, 0), this.canvas = n2, this.gl = r2);\n    }\n    applyFilters(e24, t2, n2, r2, i2, a2) {\n      let o2 = this.gl, s3 = i2.getContext(`2d`);\n      if (!o2 || !s3) return;\n      let c2;\n      a2 && (c2 = this.getCachedTexture(a2, t2));\n      let l2 = { originalWidth: t2.width || t2.naturalWidth || 0, originalHeight: t2.height || t2.naturalHeight || 0, sourceWidth: n2, sourceHeight: r2, destinationWidth: n2, destinationHeight: r2, context: o2, sourceTexture: this.createTexture(o2, n2, r2, c2 ? void 0 : t2), targetTexture: this.createTexture(o2, n2, r2), originalTexture: c2 || this.createTexture(o2, n2, r2, c2 ? void 0 : t2), passes: e24.length, webgl: true, aPosition: this.aPosition, programCache: this.programCache, pass: 0, filterBackend: this, targetCanvas: i2 }, u2 = o2.createFramebuffer();\n      return o2.bindFramebuffer(o2.FRAMEBUFFER, u2), e24.forEach((e25) => {\n        e25 && e25.applyTo(l2);\n      }), function(e25) {\n        let t3 = e25.targetCanvas, n3 = t3.width, r3 = t3.height, i3 = e25.destinationWidth, a3 = e25.destinationHeight;\n        n3 === i3 && r3 === a3 || (t3.width = i3, t3.height = a3);\n      }(l2), this.copyGLTo2D(o2, l2), o2.bindTexture(o2.TEXTURE_2D, null), o2.deleteTexture(l2.sourceTexture), o2.deleteTexture(l2.targetTexture), o2.deleteFramebuffer(u2), s3.setTransform(1, 0, 0, 1, 0, 0), l2;\n    }\n    dispose() {\n      this.canvas && (this.canvas = null, this.gl = null), this.clearWebGLCaches();\n    }\n    clearWebGLCaches() {\n      this.programCache = {}, this.textureCache = {};\n    }\n    createTexture(e24, t2, n2, r2, i2) {\n      let { NEAREST: a2, TEXTURE_2D: o2, RGBA: s3, UNSIGNED_BYTE: c2, CLAMP_TO_EDGE: l2, TEXTURE_MAG_FILTER: u2, TEXTURE_MIN_FILTER: d2, TEXTURE_WRAP_S: f2, TEXTURE_WRAP_T: p2 } = e24, m = e24.createTexture();\n      return e24.bindTexture(o2, m), e24.texParameteri(o2, u2, i2 || a2), e24.texParameteri(o2, d2, i2 || a2), e24.texParameteri(o2, f2, l2), e24.texParameteri(o2, p2, l2), r2 ? e24.texImage2D(o2, 0, s3, s3, c2, r2) : e24.texImage2D(o2, 0, s3, t2, n2, 0, s3, c2, null), m;\n    }\n    getCachedTexture(e24, t2, n2) {\n      let { textureCache: r2 } = this;\n      if (r2[e24]) return r2[e24];\n      {\n        let i2 = this.createTexture(this.gl, t2.width, t2.height, t2, n2);\n        return i2 && (r2[e24] = i2), i2;\n      }\n    }\n    evictCachesForKey(e24) {\n      this.textureCache[e24] && (this.gl.deleteTexture(this.textureCache[e24]), delete this.textureCache[e24]);\n    }\n    copyGLTo2D(e24, t2) {\n      let n2 = e24.canvas, r2 = t2.targetCanvas, i2 = r2.getContext(`2d`);\n      if (!i2) return;\n      i2.translate(0, r2.height), i2.scale(1, -1);\n      let a2 = n2.height - r2.height;\n      i2.drawImage(n2, 0, a2, r2.width, r2.height, 0, 0, r2.width, r2.height);\n    }\n    copyGLTo2DPutImageData(e24, t2) {\n      let n2 = t2.targetCanvas.getContext(`2d`), r2 = t2.destinationWidth, i2 = t2.destinationHeight, a2 = r2 * i2 * 4;\n      if (!n2) return;\n      let o2 = new Uint8Array(this.imageBuffer, 0, a2), s3 = new Uint8ClampedArray(this.imageBuffer, 0, a2);\n      e24.readPixels(0, 0, r2, i2, e24.RGBA, e24.UNSIGNED_BYTE, o2);\n      let c2 = new ImageData(s3, r2, i2);\n      n2.putImageData(c2, 0, 0);\n    }\n    captureGPUInfo() {\n      if (this.gpuInfo) return this.gpuInfo;\n      let e24 = this.gl, t2 = { renderer: ``, vendor: `` };\n      if (!e24) return t2;\n      let n2 = e24.getExtension(`WEBGL_debug_renderer_info`);\n      if (n2) {\n        let r2 = e24.getParameter(n2.UNMASKED_RENDERER_WEBGL), i2 = e24.getParameter(n2.UNMASKED_VENDOR_WEBGL);\n        r2 && (t2.renderer = r2.toLowerCase()), i2 && (t2.vendor = i2.toLowerCase());\n      }\n      return this.gpuInfo = t2, t2;\n    }\n  };\n  var ys;\n  function bs() {\n    let { WebGLProbe: e24 } = h();\n    return e24.queryWebGL(P()), o.enableGLFiltering && e24.isSupported(o.textureSize) ? new vs({ tileSize: o.textureSize }) : new _s();\n  }\n  function xs(e24 = true) {\n    return !ys && e24 && (ys = bs()), ys;\n  }\n  function Ss(e24) {\n    ys = e24;\n  }\n  var Cs = [`cropX`, `cropY`];\n  var ws = class e23 extends J {\n    static getDefaults() {\n      return { ...super.getDefaults(), ...e23.ownDefaults };\n    }\n    constructor(t2, n2) {\n      super(), i(this, `_lastScaleX`, 1), i(this, `_lastScaleY`, 1), i(this, `_filterScalingX`, 1), i(this, `_filterScalingY`, 1), this.filters = [], Object.assign(this, e23.ownDefaults), this.setOptions(n2), this.cacheKey = `texture${je()}`, this.setElement(typeof t2 == `string` ? (this.canvas && H(this.canvas.getElement()) || g()).getElementById(t2) : t2, n2);\n    }\n    getElement() {\n      return this._element;\n    }\n    setElement(e24, t2 = {}) {\n      this.removeTexture(this.cacheKey), this.removeTexture(`${this.cacheKey}_filtered`), this._element = e24, this._originalElement = e24, this._setWidthHeight(t2), this.filters.length !== 0 && this.applyFilters(), this.resizeFilter && this.applyResizeFilters();\n    }\n    removeTexture(e24) {\n      let t2 = xs(false);\n      t2 instanceof vs && t2.evictCachesForKey(e24);\n    }\n    dispose() {\n      super.dispose(), this.removeTexture(this.cacheKey), this.removeTexture(`${this.cacheKey}_filtered`), this._cacheContext = null, [`_originalElement`, `_element`, `_filteredEl`, `_cacheCanvas`].forEach((e24) => {\n        let t2 = this[e24];\n        t2 && h().dispose(t2), this[e24] = void 0;\n      });\n    }\n    getCrossOrigin() {\n      return this._originalElement && (this._originalElement.crossOrigin || null);\n    }\n    getOriginalSize() {\n      let e24 = this.getElement();\n      return e24 ? { width: e24.naturalWidth || e24.width, height: e24.naturalHeight || e24.height } : { width: 0, height: 0 };\n    }\n    _stroke(e24) {\n      if (!this.stroke || this.strokeWidth === 0) return;\n      let t2 = this.width / 2, n2 = this.height / 2;\n      e24.beginPath(), e24.moveTo(-t2, -n2), e24.lineTo(t2, -n2), e24.lineTo(t2, n2), e24.lineTo(-t2, n2), e24.lineTo(-t2, -n2), e24.closePath();\n    }\n    toObject(e24 = []) {\n      let t2 = [];\n      return this.filters.forEach((e25) => {\n        e25 && t2.push(e25.toObject());\n      }), { ...super.toObject([...Cs, ...e24]), src: this.getSrc(), crossOrigin: this.getCrossOrigin(), filters: t2, ...this.resizeFilter ? { resizeFilter: this.resizeFilter.toObject() } : {} };\n    }\n    hasCrop() {\n      return !!this.cropX || !!this.cropY || this.width < this._element.width || this.height < this._element.height;\n    }\n    _toSVG() {\n      let e24 = [], t2 = this._element, n2 = -this.width / 2, r2 = -this.height / 2, i2 = [], a2 = [], o2 = ``, s3 = ``;\n      if (!t2) return [];\n      if (this.hasCrop()) {\n        let e25 = je();\n        i2.push(`<clipPath id=\"imageCrop_` + e25 + `\">\n`, `\t<rect x=\"` + n2 + `\" y=\"` + r2 + `\" width=\"` + U(this.width) + `\" height=\"` + U(this.height) + `\" />\n`, `</clipPath>\n`), o2 = ` clip-path=\"url(#imageCrop_` + e25 + `)\" `;\n      }\n      if (this.imageSmoothing || (s3 = ` image-rendering=\"optimizeSpeed\"`), e24.push(`\t<image `, `COMMON_PARTS`, `xlink:href=\"${U(this.getSrc(true))}\" x=\"${n2 - this.cropX}\" y=\"${r2 - this.cropY}\" width=\"${t2.width || t2.naturalWidth}\" height=\"${t2.height || t2.naturalHeight}\"${s3}${o2}></image>\n`), this.stroke || this.strokeDashArray) {\n        let e25 = this.fill;\n        this.fill = null, a2 = [`\t<rect x=\"${n2}\" y=\"${r2}\" width=\"${U(this.width)}\" height=\"${U(this.height)}\" style=\"${this.getSvgStyles()}\" />\n`], this.fill = e25;\n      }\n      return i2 = this.paintFirst === `fill` ? i2.concat(e24, a2) : i2.concat(a2, e24), i2;\n    }\n    getSrc(e24) {\n      let t2 = e24 ? this._element : this._originalElement;\n      return t2 ? t2.toDataURL ? t2.toDataURL() : this.srcFromAttribute ? t2.getAttribute(`src`) || `` : t2.src : this.src || ``;\n    }\n    getSvgSrc(e24) {\n      return this.getSrc(e24);\n    }\n    setSrc(e24, { crossOrigin: t2, signal: n2 } = {}) {\n      return Ze(e24, { crossOrigin: t2, signal: n2 }).then((e25) => {\n        t2 !== void 0 && this.set({ crossOrigin: t2 }), this.setElement(e25);\n      });\n    }\n    toString() {\n      return `#<Image: { src: \"${this.getSrc()}\" }>`;\n    }\n    applyResizeFilters() {\n      let e24 = this.resizeFilter, t2 = this.minimumScaleTrigger, n2 = this.getTotalObjectScaling(), r2 = n2.x, i2 = n2.y, a2 = this._filteredEl || this._originalElement;\n      if (this.group && this.set(`dirty`, true), !e24 || r2 > t2 && i2 > t2) return this._element = a2, this._filterScalingX = 1, this._filterScalingY = 1, this._lastScaleX = r2, void (this._lastScaleY = i2);\n      let o2 = F(a2), { width: s3, height: c2 } = a2;\n      this._element = o2, this._lastScaleX = e24.scaleX = r2, this._lastScaleY = e24.scaleY = i2, xs().applyFilters([e24], a2, s3, c2, this._element), this._filterScalingX = o2.width / this._originalElement.width, this._filterScalingY = o2.height / this._originalElement.height;\n    }\n    applyFilters(e24 = this.filters || []) {\n      if (e24 = e24.filter((e25) => e25 && !e25.isNeutralState()), this.set(`dirty`, true), this.removeTexture(`${this.cacheKey}_filtered`), e24.length === 0) return this._element = this._originalElement, this._filteredEl = void 0, this._filterScalingX = 1, void (this._filterScalingY = 1);\n      let t2 = this._originalElement, n2 = t2.naturalWidth || t2.width, r2 = t2.naturalHeight || t2.height;\n      if (this._element === this._originalElement) {\n        let e25 = F({ width: n2, height: r2 });\n        this._element = e25, this._filteredEl = e25;\n      } else this._filteredEl && (this._element = this._filteredEl, this._filteredEl.getContext(`2d`).clearRect(0, 0, n2, r2), this._lastScaleX = 1, this._lastScaleY = 1);\n      xs().applyFilters(e24, this._originalElement, n2, r2, this._element, this.cacheKey), this._originalElement.width === this._element.width && this._originalElement.height === this._element.height || (this._filterScalingX = this._element.width / this._originalElement.width, this._filterScalingY = this._element.height / this._originalElement.height);\n    }\n    _render(e24) {\n      e24.imageSmoothingEnabled = this.imageSmoothing, true !== this.isMoving && this.resizeFilter && this._needsResize() && this.applyResizeFilters(), this._stroke(e24), this._renderPaintInOrder(e24);\n    }\n    drawCacheOnCanvas(e24) {\n      e24.imageSmoothingEnabled = this.imageSmoothing, super.drawCacheOnCanvas(e24);\n    }\n    shouldCache() {\n      return this.needsItsOwnCache();\n    }\n    _renderFill(e24) {\n      let t2 = this._element;\n      if (!t2) return;\n      let n2 = this._filterScalingX, r2 = this._filterScalingY, i2 = this.width, a2 = this.height, o2 = Math.max(this.cropX, 0), s3 = Math.max(this.cropY, 0), c2 = t2.naturalWidth || t2.width, l2 = t2.naturalHeight || t2.height, u2 = o2 * n2, d2 = s3 * r2, f2 = Math.min(i2 * n2, c2 - u2), p2 = Math.min(a2 * r2, l2 - d2), m = -i2 / 2, h2 = -a2 / 2, g2 = Math.min(i2, c2 / n2 - o2), _2 = Math.min(a2, l2 / r2 - s3);\n      t2 && e24.drawImage(t2, u2, d2, f2, p2, m, h2, g2, _2);\n    }\n    _needsResize() {\n      let e24 = this.getTotalObjectScaling();\n      return e24.x !== this._lastScaleX || e24.y !== this._lastScaleY;\n    }\n    _resetWidthHeight() {\n      this.set(this.getOriginalSize());\n    }\n    _setWidthHeight({ width: e24, height: t2 } = {}) {\n      let n2 = this.getOriginalSize();\n      this.width = e24 || n2.width, this.height = t2 || n2.height;\n    }\n    parsePreserveAspectRatioAttribute() {\n      let e24 = mn(this.preserveAspectRatio || ``), t2 = this.width, n2 = this.height, r2 = { width: t2, height: n2 }, i2, a2 = this._element.width, o2 = this._element.height, s3 = 1, c2 = 1, l2 = 0, u2 = 0, d2 = 0, f2 = 0;\n      return !e24 || e24.alignX === `none` && e24.alignY === `none` ? (s3 = t2 / a2, c2 = n2 / o2) : (e24.meetOrSlice === `meet` && (s3 = c2 = ua(this._element, r2), i2 = (t2 - a2 * s3) / 2, e24.alignX === `Min` && (l2 = -i2), e24.alignX === `Max` && (l2 = i2), i2 = (n2 - o2 * c2) / 2, e24.alignY === `Min` && (u2 = -i2), e24.alignY === `Max` && (u2 = i2)), e24.meetOrSlice === `slice` && (s3 = c2 = da(this._element, r2), i2 = a2 - t2 / s3, e24.alignX === `Mid` && (d2 = i2 / 2), e24.alignX === `Max` && (d2 = i2), i2 = o2 - n2 / c2, e24.alignY === `Mid` && (f2 = i2 / 2), e24.alignY === `Max` && (f2 = i2), a2 = t2 / s3, o2 = n2 / c2)), { width: a2, height: o2, scaleX: s3, scaleY: c2, offsetLeft: l2, offsetTop: u2, cropX: d2, cropY: f2 };\n    }\n    static fromObject({ filters: e24, resizeFilter: t2, src: n2, crossOrigin: r2, type: i2, ...a2 }, o2) {\n      return Promise.all([Ze(n2, { ...o2, crossOrigin: r2 }), e24 && Qe(e24, o2), t2 ? Qe([t2], o2) : [], $e(a2, o2)]).then(([e25, t3 = [], [r3], i3 = {}]) => new this(e25, { ...a2, src: n2, filters: t3, resizeFilter: r3, ...i3 }));\n    }\n    static fromURL(e24, { crossOrigin: t2 = null, signal: n2 } = {}, r2) {\n      return Ze(e24, { crossOrigin: t2, signal: n2 }).then((e25) => new this(e25, r2));\n    }\n    static async fromElement(e24, t2 = {}, n2) {\n      let r2 = Zi(e24, this.ATTRIBUTE_NAMES, n2);\n      return this.fromURL(r2[`xlink:href`] || r2.href, t2, r2).catch((e25) => (s(`log`, `Unable to parse Image`, e25), null));\n    }\n  };\n  i(ws, `type`, `Image`), i(ws, `cacheProperties`, [...Un, ...Cs]), i(ws, `ownDefaults`, { strokeWidth: 0, srcFromAttribute: false, minimumScaleTrigger: 0.5, cropX: 0, cropY: 0, imageSmoothing: true }), i(ws, `ATTRIBUTE_NAMES`, [...ki, `x`, `y`, `width`, `height`, `preserveAspectRatio`, `xlink:href`, `href`, `crossOrigin`, `image-rendering`]), M.setClass(ws), M.setSVGClass(ws);\n  var Ds = _n([`pattern`, `defs`, `symbol`, `metadata`, `clipPath`, `mask`, `desc`]);\n  var zs = (e24) => e24.webgl !== void 0;\n  var Vs = `precision highp float`;\n  var Hs = `\n    ${Vs};\n    varying vec2 vTexCoord;\n    uniform sampler2D uTexture;\n    void main() {\n      gl_FragColor = texture2D(uTexture, vTexCoord);\n    }`;\n  var Us = new RegExp(Vs, `g`);\n  var $ = class {\n    get type() {\n      return this.constructor.type;\n    }\n    constructor({ type: e24, ...t2 } = {}) {\n      Object.assign(this, this.constructor.defaults, t2);\n    }\n    getFragmentSource() {\n      return Hs;\n    }\n    getVertexSource() {\n      return `\n    attribute vec2 aPosition;\n    varying vec2 vTexCoord;\n    void main() {\n      vTexCoord = aPosition;\n      gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n    }`;\n    }\n    createProgram(e24, t2 = this.getFragmentSource(), n2 = this.getVertexSource()) {\n      let { WebGLProbe: { GLPrecision: r2 = `highp` } } = h();\n      r2 !== `highp` && (t2 = t2.replace(Us, Vs.replace(`highp`, r2)));\n      let i2 = e24.createShader(e24.VERTEX_SHADER), a2 = e24.createShader(e24.FRAGMENT_SHADER), o2 = e24.createProgram();\n      if (!i2 || !a2 || !o2) throw new c(`Vertex, fragment shader or program creation error`);\n      if (e24.shaderSource(i2, n2), e24.compileShader(i2), !e24.getShaderParameter(i2, e24.COMPILE_STATUS)) throw new c(`Vertex shader compile error for ${this.type}: ${e24.getShaderInfoLog(i2)}`);\n      if (e24.shaderSource(a2, t2), e24.compileShader(a2), !e24.getShaderParameter(a2, e24.COMPILE_STATUS)) throw new c(`Fragment shader compile error for ${this.type}: ${e24.getShaderInfoLog(a2)}`);\n      if (e24.attachShader(o2, i2), e24.attachShader(o2, a2), e24.linkProgram(o2), !e24.getProgramParameter(o2, e24.LINK_STATUS)) throw new c(`Shader link error for \"${this.type}\" ${e24.getProgramInfoLog(o2)}`);\n      let s3 = this.getUniformLocations(e24, o2) || {};\n      return s3.uStepW = e24.getUniformLocation(o2, `uStepW`), s3.uStepH = e24.getUniformLocation(o2, `uStepH`), { program: o2, attributeLocations: this.getAttributeLocations(e24, o2), uniformLocations: s3 };\n    }\n    getAttributeLocations(e24, t2) {\n      return { aPosition: e24.getAttribLocation(t2, `aPosition`) };\n    }\n    getUniformLocations(e24, t2) {\n      let n2 = this.constructor.uniformLocations, r2 = {};\n      for (let i2 = 0; i2 < n2.length; i2++) r2[n2[i2]] = e24.getUniformLocation(t2, n2[i2]);\n      return r2;\n    }\n    sendAttributeData(e24, t2, n2) {\n      let r2 = t2.aPosition, i2 = e24.createBuffer();\n      e24.bindBuffer(e24.ARRAY_BUFFER, i2), e24.enableVertexAttribArray(r2), e24.vertexAttribPointer(r2, 2, e24.FLOAT, false, 0, 0), e24.bufferData(e24.ARRAY_BUFFER, n2, e24.STATIC_DRAW);\n    }\n    _setupFrameBuffer(e24) {\n      let t2 = e24.context;\n      if (e24.passes > 1) {\n        let n2 = e24.destinationWidth, r2 = e24.destinationHeight;\n        e24.sourceWidth === n2 && e24.sourceHeight === r2 || (t2.deleteTexture(e24.targetTexture), e24.targetTexture = e24.filterBackend.createTexture(t2, n2, r2)), t2.framebufferTexture2D(t2.FRAMEBUFFER, t2.COLOR_ATTACHMENT0, t2.TEXTURE_2D, e24.targetTexture, 0);\n      } else t2.bindFramebuffer(t2.FRAMEBUFFER, null), t2.finish();\n    }\n    _swapTextures(e24) {\n      e24.passes--, e24.pass++;\n      let t2 = e24.targetTexture;\n      e24.targetTexture = e24.sourceTexture, e24.sourceTexture = t2;\n    }\n    isNeutralState(e24) {\n      return false;\n    }\n    applyTo(e24) {\n      zs(e24) ? (this._setupFrameBuffer(e24), this.applyToWebGL(e24), this._swapTextures(e24)) : this.applyTo2d(e24);\n    }\n    applyTo2d(e24) {\n    }\n    getCacheKey() {\n      return this.type;\n    }\n    retrieveShader(e24) {\n      let t2 = this.getCacheKey();\n      return e24.programCache[t2] || (e24.programCache[t2] = this.createProgram(e24.context)), e24.programCache[t2];\n    }\n    applyToWebGL(e24) {\n      let t2 = e24.context, n2 = this.retrieveShader(e24);\n      e24.pass === 0 && e24.originalTexture ? t2.bindTexture(t2.TEXTURE_2D, e24.originalTexture) : t2.bindTexture(t2.TEXTURE_2D, e24.sourceTexture), t2.useProgram(n2.program), this.sendAttributeData(t2, n2.attributeLocations, e24.aPosition), t2.uniform1f(n2.uniformLocations.uStepW, 1 / e24.sourceWidth), t2.uniform1f(n2.uniformLocations.uStepH, 1 / e24.sourceHeight), this.sendUniformData(t2, n2.uniformLocations), t2.viewport(0, 0, e24.destinationWidth, e24.destinationHeight), t2.drawArrays(t2.TRIANGLE_STRIP, 0, 4);\n    }\n    bindAdditionalTexture(e24, t2, n2) {\n      e24.activeTexture(n2), e24.bindTexture(e24.TEXTURE_2D, t2), e24.activeTexture(e24.TEXTURE0);\n    }\n    unbindAdditionalTexture(e24, t2) {\n      e24.activeTexture(t2), e24.bindTexture(e24.TEXTURE_2D, null), e24.activeTexture(e24.TEXTURE0);\n    }\n    sendUniformData(e24, t2) {\n    }\n    createHelpLayer(e24) {\n      if (!e24.helpLayer) {\n        let { sourceWidth: t2, sourceHeight: n2 } = e24;\n        e24.helpLayer = F({ width: t2, height: n2 });\n      }\n    }\n    toObject() {\n      let e24 = Object.keys(this.constructor.defaults || {});\n      return { type: this.type, ...e24.reduce((e25, t2) => (e25[t2] = this[t2], e25), {}) };\n    }\n    toJSON() {\n      return this.toObject();\n    }\n    static async fromObject({ type: e24, ...t2 }, n2) {\n      return new this(t2);\n    }\n  };\n  i($, `type`, `BaseFilter`), i($, `uniformLocations`, []);\n  var Ws = { multiply: `gl_FragColor.rgb *= uColor.rgb;\n`, screen: `gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\n`, add: `gl_FragColor.rgb += uColor.rgb;\n`, difference: `gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\n`, subtract: `gl_FragColor.rgb -= uColor.rgb;\n`, lighten: `gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\n`, darken: `gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\n`, exclusion: `gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\n`, overlay: `\n    if (uColor.r < 0.5) {\n      gl_FragColor.r *= 2.0 * uColor.r;\n    } else {\n      gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n    }\n    if (uColor.g < 0.5) {\n      gl_FragColor.g *= 2.0 * uColor.g;\n    } else {\n      gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n    }\n    if (uColor.b < 0.5) {\n      gl_FragColor.b *= 2.0 * uColor.b;\n    } else {\n      gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n    }\n    `, tint: `\n    gl_FragColor.rgb *= (1.0 - uColor.a);\n    gl_FragColor.rgb += uColor.rgb;\n    ` };\n  var Gs = class extends $ {\n    getCacheKey() {\n      return `${this.type}_${this.mode}`;\n    }\n    getFragmentSource() {\n      return `\n      precision highp float;\n      uniform sampler2D uTexture;\n      uniform vec4 uColor;\n      varying vec2 vTexCoord;\n      void main() {\n        vec4 color = texture2D(uTexture, vTexCoord);\n        gl_FragColor = color;\n        if (color.a > 0.0) {\n          ${Ws[this.mode]}\n        }\n      }\n      `;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = new G(this.color).getSource(), n2 = this.alpha, r2 = t2[0] * n2, i2 = t2[1] * n2, a2 = t2[2] * n2, o2 = 1 - n2;\n      for (let t3 = 0; t3 < e24.length; t3 += 4) {\n        let n3 = e24[t3], s3 = e24[t3 + 1], c2 = e24[t3 + 2], l2, u2, d2;\n        switch (this.mode) {\n          case `multiply`:\n            l2 = n3 * r2 / 255, u2 = s3 * i2 / 255, d2 = c2 * a2 / 255;\n            break;\n          case `screen`:\n            l2 = 255 - (255 - n3) * (255 - r2) / 255, u2 = 255 - (255 - s3) * (255 - i2) / 255, d2 = 255 - (255 - c2) * (255 - a2) / 255;\n            break;\n          case `add`:\n            l2 = n3 + r2, u2 = s3 + i2, d2 = c2 + a2;\n            break;\n          case `difference`:\n            l2 = Math.abs(n3 - r2), u2 = Math.abs(s3 - i2), d2 = Math.abs(c2 - a2);\n            break;\n          case `subtract`:\n            l2 = n3 - r2, u2 = s3 - i2, d2 = c2 - a2;\n            break;\n          case `darken`:\n            l2 = Math.min(n3, r2), u2 = Math.min(s3, i2), d2 = Math.min(c2, a2);\n            break;\n          case `lighten`:\n            l2 = Math.max(n3, r2), u2 = Math.max(s3, i2), d2 = Math.max(c2, a2);\n            break;\n          case `overlay`:\n            l2 = r2 < 128 ? 2 * n3 * r2 / 255 : 255 - 2 * (255 - n3) * (255 - r2) / 255, u2 = i2 < 128 ? 2 * s3 * i2 / 255 : 255 - 2 * (255 - s3) * (255 - i2) / 255, d2 = a2 < 128 ? 2 * c2 * a2 / 255 : 255 - 2 * (255 - c2) * (255 - a2) / 255;\n            break;\n          case `exclusion`:\n            l2 = r2 + n3 - 2 * r2 * n3 / 255, u2 = i2 + s3 - 2 * i2 * s3 / 255, d2 = a2 + c2 - 2 * a2 * c2 / 255;\n            break;\n          case `tint`:\n            l2 = r2 + n3 * o2, u2 = i2 + s3 * o2, d2 = a2 + c2 * o2;\n        }\n        e24[t3] = l2, e24[t3 + 1] = u2, e24[t3 + 2] = d2;\n      }\n    }\n    sendUniformData(e24, t2) {\n      let n2 = new G(this.color).getSource();\n      n2[0] = this.alpha * n2[0] / 255, n2[1] = this.alpha * n2[1] / 255, n2[2] = this.alpha * n2[2] / 255, n2[3] = this.alpha, e24.uniform4fv(t2.uColor, n2);\n    }\n  };\n  i(Gs, `defaults`, { color: `#F95C63`, mode: `multiply`, alpha: 1 }), i(Gs, `type`, `BlendColor`), i(Gs, `uniformLocations`, [`uColor`]), M.setClass(Gs);\n  var Ks = { multiply: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform sampler2D uImage;\n    uniform vec4 uColor;\n    varying vec2 vTexCoord;\n    varying vec2 vTexCoord2;\n    void main() {\n      vec4 color = texture2D(uTexture, vTexCoord);\n      vec4 color2 = texture2D(uImage, vTexCoord2);\n      color.rgba *= color2.rgba;\n      gl_FragColor = color;\n    }\n    `, mask: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform sampler2D uImage;\n    uniform vec4 uColor;\n    varying vec2 vTexCoord;\n    varying vec2 vTexCoord2;\n    void main() {\n      vec4 color = texture2D(uTexture, vTexCoord);\n      vec4 color2 = texture2D(uImage, vTexCoord2);\n      color.a = color2.a;\n      gl_FragColor = color;\n    }\n    ` };\n  var qs = class extends $ {\n    getCacheKey() {\n      return `${this.type}_${this.mode}`;\n    }\n    getFragmentSource() {\n      return Ks[this.mode];\n    }\n    getVertexSource() {\n      return `\n    attribute vec2 aPosition;\n    varying vec2 vTexCoord;\n    varying vec2 vTexCoord2;\n    uniform mat3 uTransformMatrix;\n    void main() {\n      vTexCoord = aPosition;\n      vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\n      gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n    }\n    `;\n    }\n    applyToWebGL(e24) {\n      let t2 = e24.context, n2 = this.createTexture(e24.filterBackend, this.image);\n      this.bindAdditionalTexture(t2, n2, t2.TEXTURE1), super.applyToWebGL(e24), this.unbindAdditionalTexture(t2, t2.TEXTURE1);\n    }\n    createTexture(e24, t2) {\n      return e24.getCachedTexture(t2.cacheKey, t2.getElement());\n    }\n    calculateMatrix() {\n      let e24 = this.image, { width: t2, height: n2 } = e24.getElement();\n      return [1 / e24.scaleX, 0, 0, 0, 1 / e24.scaleY, 0, -e24.left / t2, -e24.top / n2, 1];\n    }\n    applyTo2d({ imageData: { data: e24, width: t2, height: n2 }, filterBackend: { resources: r2 } }) {\n      let i2 = this.image;\n      r2.blendImage || (r2.blendImage = P());\n      let a2 = r2.blendImage, o2 = a2.getContext(`2d`);\n      a2.width !== t2 || a2.height !== n2 ? (a2.width = t2, a2.height = n2) : o2.clearRect(0, 0, t2, n2), o2.setTransform(i2.scaleX, 0, 0, i2.scaleY, i2.left, i2.top), o2.drawImage(i2.getElement(), 0, 0, t2, n2);\n      let s3 = o2.getImageData(0, 0, t2, n2).data;\n      for (let t3 = 0; t3 < e24.length; t3 += 4) {\n        let n3 = e24[t3], r3 = e24[t3 + 1], i3 = e24[t3 + 2], a3 = e24[t3 + 3], o3 = s3[t3], c2 = s3[t3 + 1], l2 = s3[t3 + 2], u2 = s3[t3 + 3];\n        switch (this.mode) {\n          case `multiply`:\n            e24[t3] = n3 * o3 / 255, e24[t3 + 1] = r3 * c2 / 255, e24[t3 + 2] = i3 * l2 / 255, e24[t3 + 3] = a3 * u2 / 255;\n            break;\n          case `mask`:\n            e24[t3 + 3] = u2;\n        }\n      }\n    }\n    sendUniformData(e24, t2) {\n      let n2 = this.calculateMatrix();\n      e24.uniform1i(t2.uImage, 1), e24.uniformMatrix3fv(t2.uTransformMatrix, false, n2);\n    }\n    toObject() {\n      return { ...super.toObject(), image: this.image && this.image.toObject() };\n    }\n    static async fromObject({ type: e24, image: t2, ...n2 }, r2) {\n      return ws.fromObject(t2, r2).then((e25) => new this({ ...n2, image: e25 }));\n    }\n  };\n  i(qs, `type`, `BlendImage`), i(qs, `defaults`, { mode: `multiply`, alpha: 1 }), i(qs, `uniformLocations`, [`uTransformMatrix`, `uImage`]), M.setClass(qs);\n  var Js = class extends $ {\n    getFragmentSource() {\n      return `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform vec2 uDelta;\n    varying vec2 vTexCoord;\n    const float nSamples = 15.0;\n    vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\n    float random(vec3 scale) {\n      /* use the fragment position for a different seed per-pixel */\n      return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n    }\n    void main() {\n      vec4 color = vec4(0.0);\n      float totalC = 0.0;\n      float totalA = 0.0;\n      float offset = random(v3offset);\n      for (float t = -nSamples; t <= nSamples; t++) {\n        float percent = (t + offset - 0.5) / nSamples;\n        vec4 sample = texture2D(uTexture, vTexCoord + uDelta * percent);\n        float weight = 1.0 - abs(percent);\n        float alpha = weight * sample.a;\n        color.rgb += sample.rgb * alpha;\n        color.a += alpha;\n        totalA += weight;\n        totalC += alpha;\n      }\n      gl_FragColor.rgb = color.rgb / totalC;\n      gl_FragColor.a = color.a / totalA;\n    }\n  `;\n    }\n    applyTo(e24) {\n      zs(e24) ? (this.aspectRatio = e24.sourceWidth / e24.sourceHeight, e24.passes++, this._setupFrameBuffer(e24), this.horizontal = true, this.applyToWebGL(e24), this._swapTextures(e24), this._setupFrameBuffer(e24), this.horizontal = false, this.applyToWebGL(e24), this._swapTextures(e24)) : this.applyTo2d(e24);\n    }\n    applyTo2d({ imageData: { data: e24, width: t2, height: n2 } }) {\n      this.aspectRatio = t2 / n2, this.horizontal = true;\n      let r2 = this.getBlurValue() * t2, i2 = new Uint8ClampedArray(e24), a2 = 4 * t2;\n      for (let t3 = 0; t3 < e24.length; t3 += 4) {\n        let n3 = 0, o2 = 0, s3 = 0, c2 = 0, l2 = 0, u2 = t3 - t3 % a2, d2 = u2 + a2;\n        for (let i3 = -14; i3 < 15; i3++) {\n          let a3 = i3 / 15, f2 = 4 * Math.floor(r2 * a3), p2 = 1 - Math.abs(a3), m = t3 + f2;\n          m < u2 ? m = u2 : m > d2 && (m = d2);\n          let h2 = e24[m + 3] * p2;\n          n3 += e24[m] * h2, o2 += e24[m + 1] * h2, s3 += e24[m + 2] * h2, c2 += h2, l2 += p2;\n        }\n        i2[t3] = n3 / c2, i2[t3 + 1] = o2 / c2, i2[t3 + 2] = s3 / c2, i2[t3 + 3] = c2 / l2;\n      }\n      this.horizontal = false, r2 = this.getBlurValue() * n2;\n      for (let t3 = 0; t3 < i2.length; t3 += 4) {\n        let n3 = 0, o2 = 0, s3 = 0, c2 = 0, l2 = 0, u2 = t3 % a2, d2 = i2.length - a2 + u2;\n        for (let e25 = -14; e25 < 15; e25++) {\n          let f2 = e25 / 15, p2 = Math.floor(r2 * f2) * a2, m = 1 - Math.abs(f2), h2 = t3 + p2;\n          h2 < u2 ? h2 = u2 : h2 > d2 && (h2 = d2);\n          let g2 = i2[h2 + 3] * m;\n          n3 += i2[h2] * g2, o2 += i2[h2 + 1] * g2, s3 += i2[h2 + 2] * g2, c2 += g2, l2 += m;\n        }\n        e24[t3] = n3 / c2, e24[t3 + 1] = o2 / c2, e24[t3 + 2] = s3 / c2, e24[t3 + 3] = c2 / l2;\n      }\n    }\n    sendUniformData(e24, t2) {\n      let n2 = this.chooseRightDelta();\n      e24.uniform2fv(t2.uDelta, n2);\n    }\n    isNeutralState() {\n      return this.blur === 0;\n    }\n    getBlurValue() {\n      let e24 = 1, { horizontal: t2, aspectRatio: n2 } = this;\n      return t2 ? n2 > 1 && (e24 = 1 / n2) : n2 < 1 && (e24 = n2), e24 * this.blur * 0.12;\n    }\n    chooseRightDelta() {\n      let e24 = this.getBlurValue();\n      return this.horizontal ? [e24, 0] : [0, e24];\n    }\n  };\n  i(Js, `type`, `Blur`), i(Js, `defaults`, { blur: 0 }), i(Js, `uniformLocations`, [`uDelta`]), M.setClass(Js);\n  var Ys = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uBrightness;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    color.rgb += uBrightness;\n    gl_FragColor = color;\n  }\n`;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = Math.round(255 * this.brightness);\n      for (let n2 = 0; n2 < e24.length; n2 += 4) e24[n2] += t2, e24[n2 + 1] += t2, e24[n2 + 2] += t2;\n    }\n    isNeutralState() {\n      return this.brightness === 0;\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uBrightness, this.brightness);\n    }\n  };\n  i(Ys, `type`, `Brightness`), i(Ys, `defaults`, { brightness: 0 }), i(Ys, `uniformLocations`, [`uBrightness`]), M.setClass(Ys);\n  var Xs = { matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], colorsOnly: true };\n  var Zs = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  varying vec2 vTexCoord;\n  uniform mat4 uColorMatrix;\n  uniform vec4 uConstants;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    color *= uColorMatrix;\n    color += uConstants;\n    gl_FragColor = color;\n  }`;\n    }\n    applyTo2d(e24) {\n      let t2 = e24.imageData.data, n2 = this.matrix, r2 = this.colorsOnly;\n      for (let e25 = 0; e25 < t2.length; e25 += 4) {\n        let i2 = t2[e25], a2 = t2[e25 + 1], o2 = t2[e25 + 2];\n        if (t2[e25] = i2 * n2[0] + a2 * n2[1] + o2 * n2[2] + 255 * n2[4], t2[e25 + 1] = i2 * n2[5] + a2 * n2[6] + o2 * n2[7] + 255 * n2[9], t2[e25 + 2] = i2 * n2[10] + a2 * n2[11] + o2 * n2[12] + 255 * n2[14], !r2) {\n          let r3 = t2[e25 + 3];\n          t2[e25] += r3 * n2[3], t2[e25 + 1] += r3 * n2[8], t2[e25 + 2] += r3 * n2[13], t2[e25 + 3] = i2 * n2[15] + a2 * n2[16] + o2 * n2[17] + r3 * n2[18] + 255 * n2[19];\n        }\n      }\n    }\n    sendUniformData(e24, t2) {\n      let n2 = this.matrix, r2 = [n2[0], n2[1], n2[2], n2[3], n2[5], n2[6], n2[7], n2[8], n2[10], n2[11], n2[12], n2[13], n2[15], n2[16], n2[17], n2[18]], i2 = [n2[4], n2[9], n2[14], n2[19]];\n      e24.uniformMatrix4fv(t2.uColorMatrix, false, r2), e24.uniform4fv(t2.uConstants, i2);\n    }\n    toObject() {\n      return { ...super.toObject(), matrix: [...this.matrix] };\n    }\n  };\n  function Qs(e24, t2) {\n    var n2;\n    let r2 = (i(n2 = class extends Zs {\n      toObject() {\n        return { type: this.type, colorsOnly: this.colorsOnly };\n      }\n    }, `type`, e24), i(n2, `defaults`, { colorsOnly: false, matrix: t2 }), n2);\n    return M.setClass(r2, e24), r2;\n  }\n  i(Zs, `type`, `ColorMatrix`), i(Zs, `defaults`, Xs), i(Zs, `uniformLocations`, [`uColorMatrix`, `uConstants`]), M.setClass(Zs);\n  var $s = Qs(`Brownie`, [0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449, 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0]);\n  var ec = Qs(`Vintage`, [0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0, 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0]);\n  var tc = Qs(`Kodachrome`, [1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0, 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0]);\n  var nc = Qs(`Technicolor`, [1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0, -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0]);\n  var rc = Qs(`Polaroid`, [1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016, 1.483, 0, 0, 0, 0, 0, 1, 0]);\n  var ic = Qs(`Sepia`, [0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131, 0, 0, 0, 0, 0, 1, 0]);\n  var ac = Qs(`BlackWhite`, [1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0, 1, 0]);\n  var oc = class extends $ {\n    constructor(e24 = {}) {\n      super(e24), this.subFilters = e24.subFilters || [];\n    }\n    applyTo(e24) {\n      zs(e24) && (e24.passes += this.subFilters.length - 1), this.subFilters.forEach((t2) => {\n        t2.applyTo(e24);\n      });\n    }\n    toObject() {\n      return { type: this.type, subFilters: this.subFilters.map((e24) => e24.toObject()) };\n    }\n    isNeutralState() {\n      return !this.subFilters.some((e24) => !e24.isNeutralState());\n    }\n    static fromObject(e24, t2) {\n      return Promise.all((e24.subFilters || []).map((e25) => M.getClass(e25.type).fromObject(e25, t2))).then((e25) => new this({ subFilters: e25 }));\n    }\n  };\n  i(oc, `type`, `Composed`), M.setClass(oc);\n  var sc = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uContrast;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\n    color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\n    gl_FragColor = color;\n  }`;\n    }\n    isNeutralState() {\n      return this.contrast === 0;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = Math.floor(255 * this.contrast), n2 = 259 * (t2 + 255) / (255 * (259 - t2));\n      for (let t3 = 0; t3 < e24.length; t3 += 4) e24[t3] = n2 * (e24[t3] - 128) + 128, e24[t3 + 1] = n2 * (e24[t3 + 1] - 128) + 128, e24[t3 + 2] = n2 * (e24[t3 + 2] - 128) + 128;\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uContrast, this.contrast);\n    }\n  };\n  i(sc, `type`, `Contrast`), i(sc, `defaults`, { contrast: 0 }), i(sc, `uniformLocations`, [`uContrast`]), M.setClass(sc);\n  var cc = { Convolute_3_1: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[9];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 0);\n      for (float h = 0.0; h < 3.0; h+=1.0) {\n        for (float w = 0.0; w < 3.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\n          color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n        }\n      }\n      gl_FragColor = color;\n    }\n    `, Convolute_3_0: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[9];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 1);\n      for (float h = 0.0; h < 3.0; h+=1.0) {\n        for (float w = 0.0; w < 3.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\n          color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n        }\n      }\n      float alpha = texture2D(uTexture, vTexCoord).a;\n      gl_FragColor = color;\n      gl_FragColor.a = alpha;\n    }\n    `, Convolute_5_1: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[25];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 0);\n      for (float h = 0.0; h < 5.0; h+=1.0) {\n        for (float w = 0.0; w < 5.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n          color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n        }\n      }\n      gl_FragColor = color;\n    }\n    `, Convolute_5_0: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[25];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 1);\n      for (float h = 0.0; h < 5.0; h+=1.0) {\n        for (float w = 0.0; w < 5.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n          color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n        }\n      }\n      float alpha = texture2D(uTexture, vTexCoord).a;\n      gl_FragColor = color;\n      gl_FragColor.a = alpha;\n    }\n    `, Convolute_7_1: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[49];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 0);\n      for (float h = 0.0; h < 7.0; h+=1.0) {\n        for (float w = 0.0; w < 7.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n          color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n        }\n      }\n      gl_FragColor = color;\n    }\n    `, Convolute_7_0: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[49];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 1);\n      for (float h = 0.0; h < 7.0; h+=1.0) {\n        for (float w = 0.0; w < 7.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n          color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n        }\n      }\n      float alpha = texture2D(uTexture, vTexCoord).a;\n      gl_FragColor = color;\n      gl_FragColor.a = alpha;\n    }\n    `, Convolute_9_1: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[81];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 0);\n      for (float h = 0.0; h < 9.0; h+=1.0) {\n        for (float w = 0.0; w < 9.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n          color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n        }\n      }\n      gl_FragColor = color;\n    }\n    `, Convolute_9_0: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform float uMatrix[81];\n    uniform float uStepW;\n    uniform float uStepH;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = vec4(0, 0, 0, 1);\n      for (float h = 0.0; h < 9.0; h+=1.0) {\n        for (float w = 0.0; w < 9.0; w+=1.0) {\n          vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n          color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n        }\n      }\n      float alpha = texture2D(uTexture, vTexCoord).a;\n      gl_FragColor = color;\n      gl_FragColor.a = alpha;\n    }\n    ` };\n  var lc = class extends $ {\n    getCacheKey() {\n      return `${this.type}_${Math.sqrt(this.matrix.length)}_${+!!this.opaque}`;\n    }\n    getFragmentSource() {\n      return cc[this.getCacheKey()];\n    }\n    applyTo2d(e24) {\n      let t2 = e24.imageData, n2 = t2.data, r2 = this.matrix, i2 = Math.round(Math.sqrt(r2.length)), a2 = Math.floor(i2 / 2), o2 = t2.width, s3 = t2.height, c2 = e24.ctx.createImageData(o2, s3), l2 = c2.data, u2 = +!!this.opaque, d2, f2, p2, m, h2, g2, _2, v2, y2, b2, x2, S2, C2;\n      for (x2 = 0; x2 < s3; x2++) for (b2 = 0; b2 < o2; b2++) {\n        for (h2 = 4 * (x2 * o2 + b2), d2 = 0, f2 = 0, p2 = 0, m = 0, C2 = 0; C2 < i2; C2++) for (S2 = 0; S2 < i2; S2++) _2 = x2 + C2 - a2, g2 = b2 + S2 - a2, _2 < 0 || _2 >= s3 || g2 < 0 || g2 >= o2 || (v2 = 4 * (_2 * o2 + g2), y2 = r2[C2 * i2 + S2], d2 += n2[v2] * y2, f2 += n2[v2 + 1] * y2, p2 += n2[v2 + 2] * y2, u2 || (m += n2[v2 + 3] * y2));\n        l2[h2] = d2, l2[h2 + 1] = f2, l2[h2 + 2] = p2, l2[h2 + 3] = u2 ? n2[h2 + 3] : m;\n      }\n      e24.imageData = c2;\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1fv(t2.uMatrix, this.matrix);\n    }\n    toObject() {\n      return { ...super.toObject(), opaque: this.opaque, matrix: [...this.matrix] };\n    }\n  };\n  i(lc, `type`, `Convolute`), i(lc, `defaults`, { opaque: false, matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0] }), i(lc, `uniformLocations`, [`uMatrix`, `uOpaque`, `uHalfSize`, `uSize`]), M.setClass(lc);\n  var uc = `Gamma`;\n  var dc = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform vec3 uGamma;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    vec3 correction = (1.0 / uGamma);\n    color.r = pow(color.r, correction.r);\n    color.g = pow(color.g, correction.g);\n    color.b = pow(color.b, correction.b);\n    gl_FragColor = color;\n    gl_FragColor.rgb *= color.a;\n  }\n`;\n    }\n    constructor(e24 = {}) {\n      super(e24), this.gamma = e24.gamma || this.constructor.defaults.gamma.concat();\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = this.gamma, n2 = 1 / t2[0], r2 = 1 / t2[1], i2 = 1 / t2[2];\n      this.rgbValues || (this.rgbValues = { r: new Uint8Array(256), g: new Uint8Array(256), b: new Uint8Array(256) });\n      let a2 = this.rgbValues;\n      for (let e25 = 0; e25 < 256; e25++) a2.r[e25] = 255 * (e25 / 255) ** n2, a2.g[e25] = 255 * (e25 / 255) ** r2, a2.b[e25] = 255 * (e25 / 255) ** i2;\n      for (let t3 = 0; t3 < e24.length; t3 += 4) e24[t3] = a2.r[e24[t3]], e24[t3 + 1] = a2.g[e24[t3 + 1]], e24[t3 + 2] = a2.b[e24[t3 + 2]];\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform3fv(t2.uGamma, this.gamma);\n    }\n    isNeutralState() {\n      let { gamma: e24 } = this;\n      return e24[0] === 1 && e24[1] === 1 && e24[2] === 1;\n    }\n    toObject() {\n      return { type: uc, gamma: this.gamma.concat() };\n    }\n  };\n  i(dc, `type`, uc), i(dc, `defaults`, { gamma: [1, 1, 1] }), i(dc, `uniformLocations`, [`uGamma`]), M.setClass(dc);\n  var fc = { average: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 color = texture2D(uTexture, vTexCoord);\n      float average = (color.r + color.b + color.g) / 3.0;\n      gl_FragColor = vec4(average, average, average, color.a);\n    }\n    `, lightness: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform int uMode;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 col = texture2D(uTexture, vTexCoord);\n      float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\n      gl_FragColor = vec4(average, average, average, col.a);\n    }\n    `, luminosity: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform int uMode;\n    varying vec2 vTexCoord;\n    void main() {\n      vec4 col = texture2D(uTexture, vTexCoord);\n      float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\n      gl_FragColor = vec4(average, average, average, col.a);\n    }\n    ` };\n  var pc = class extends $ {\n    applyTo2d({ imageData: { data: e24 } }) {\n      for (let t2, n2 = 0; n2 < e24.length; n2 += 4) {\n        let r2 = e24[n2], i2 = e24[n2 + 1], a2 = e24[n2 + 2];\n        switch (this.mode) {\n          case `average`:\n            t2 = (r2 + i2 + a2) / 3;\n            break;\n          case `lightness`:\n            t2 = (Math.min(r2, i2, a2) + Math.max(r2, i2, a2)) / 2;\n            break;\n          case `luminosity`:\n            t2 = 0.21 * r2 + 0.72 * i2 + 0.07 * a2;\n        }\n        e24[n2 + 2] = e24[n2 + 1] = e24[n2] = t2;\n      }\n    }\n    getCacheKey() {\n      return `${this.type}_${this.mode}`;\n    }\n    getFragmentSource() {\n      return fc[this.mode];\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1i(t2.uMode, 1);\n    }\n    isNeutralState() {\n      return false;\n    }\n  };\n  i(pc, `type`, `Grayscale`), i(pc, `defaults`, { mode: `average` }), i(pc, `uniformLocations`, [`uMode`]), M.setClass(pc);\n  var mc = { ...Xs, rotation: 0 };\n  var hc = class extends Zs {\n    calculateMatrix() {\n      let e24 = this.rotation * Math.PI, t2 = Se(e24), n2 = Ce(e24), r2 = 1 / 3, i2 = Math.sqrt(r2) * n2, a2 = 1 - t2;\n      this.matrix = [t2 + a2 / 3, r2 * a2 - i2, r2 * a2 + i2, 0, 0, r2 * a2 + i2, t2 + r2 * a2, r2 * a2 - i2, 0, 0, r2 * a2 - i2, r2 * a2 + i2, t2 + r2 * a2, 0, 0, 0, 0, 0, 1, 0];\n    }\n    isNeutralState() {\n      return this.rotation === 0;\n    }\n    applyTo(e24) {\n      this.calculateMatrix(), super.applyTo(e24);\n    }\n    toObject() {\n      return { type: this.type, rotation: this.rotation };\n    }\n  };\n  i(hc, `type`, `HueRotation`), i(hc, `defaults`, mc), M.setClass(hc);\n  var gc = class extends $ {\n    applyTo2d({ imageData: { data: e24 } }) {\n      for (let t2 = 0; t2 < e24.length; t2 += 4) e24[t2] = 255 - e24[t2], e24[t2 + 1] = 255 - e24[t2 + 1], e24[t2 + 2] = 255 - e24[t2 + 2], this.alpha && (e24[t2 + 3] = 255 - e24[t2 + 3]);\n    }\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform int uInvert;\n  uniform int uAlpha;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    if (uInvert == 1) {\n      if (uAlpha == 1) {\n        gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);\n      } else {\n        gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n      }\n    } else {\n      gl_FragColor = color;\n    }\n  }\n`;\n    }\n    isNeutralState() {\n      return !this.invert;\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1i(t2.uInvert, Number(this.invert)), e24.uniform1i(t2.uAlpha, Number(this.alpha));\n    }\n  };\n  i(gc, `type`, `Invert`), i(gc, `defaults`, { alpha: false, invert: true }), i(gc, `uniformLocations`, [`uInvert`, `uAlpha`]), M.setClass(gc);\n  var _c = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uStepH;\n  uniform float uNoise;\n  uniform float uSeed;\n  varying vec2 vTexCoord;\n  float rand(vec2 co, float seed, float vScale) {\n    return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n  }\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\n    gl_FragColor = color;\n  }\n`;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = this.noise;\n      for (let n2 = 0; n2 < e24.length; n2 += 4) {\n        let r2 = (0.5 - Math.random()) * t2;\n        e24[n2] += r2, e24[n2 + 1] += r2, e24[n2 + 2] += r2;\n      }\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uNoise, this.noise / 255), e24.uniform1f(t2.uSeed, Math.random());\n    }\n    isNeutralState() {\n      return this.noise === 0;\n    }\n  };\n  i(_c, `type`, `Noise`), i(_c, `defaults`, { noise: 0 }), i(_c, `uniformLocations`, [`uNoise`, `uSeed`]), M.setClass(_c);\n  var vc = class extends $ {\n    applyTo2d({ imageData: { data: e24, width: t2, height: n2 } }) {\n      for (let r2 = 0; r2 < n2; r2 += this.blocksize) for (let i2 = 0; i2 < t2; i2 += this.blocksize) {\n        let a2 = 4 * r2 * t2 + 4 * i2, o2 = e24[a2], s3 = e24[a2 + 1], c2 = e24[a2 + 2], l2 = e24[a2 + 3];\n        for (let a3 = r2; a3 < Math.min(r2 + this.blocksize, n2); a3++) for (let n3 = i2; n3 < Math.min(i2 + this.blocksize, t2); n3++) {\n          let r3 = 4 * a3 * t2 + 4 * n3;\n          e24[r3] = o2, e24[r3 + 1] = s3, e24[r3 + 2] = c2, e24[r3 + 3] = l2;\n        }\n      }\n    }\n    isNeutralState() {\n      return this.blocksize === 1;\n    }\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uBlocksize;\n  uniform float uStepW;\n  uniform float uStepH;\n  varying vec2 vTexCoord;\n  void main() {\n    float blockW = uBlocksize * uStepW;\n    float blockH = uBlocksize * uStepH;\n    int posX = int(vTexCoord.x / blockW);\n    int posY = int(vTexCoord.y / blockH);\n    float fposX = float(posX);\n    float fposY = float(posY);\n    vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\n    vec4 color = texture2D(uTexture, squareCoords);\n    gl_FragColor = color;\n  }\n`;\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uBlocksize, this.blocksize);\n    }\n  };\n  i(vc, `type`, `Pixelate`), i(vc, `defaults`, { blocksize: 4 }), i(vc, `uniformLocations`, [`uBlocksize`]), M.setClass(vc);\n  var yc = class extends $ {\n    getFragmentSource() {\n      return `\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\n  gl_FragColor = texture2D(uTexture, vTexCoord);\n  if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\n    gl_FragColor.a = 0.0;\n  }\n}\n`;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = 255 * this.distance, n2 = new G(this.color).getSource(), r2 = [n2[0] - t2, n2[1] - t2, n2[2] - t2], i2 = [n2[0] + t2, n2[1] + t2, n2[2] + t2];\n      for (let t3 = 0; t3 < e24.length; t3 += 4) {\n        let n3 = e24[t3], a2 = e24[t3 + 1], o2 = e24[t3 + 2];\n        n3 > r2[0] && a2 > r2[1] && o2 > r2[2] && n3 < i2[0] && a2 < i2[1] && o2 < i2[2] && (e24[t3 + 3] = 0);\n      }\n    }\n    sendUniformData(e24, t2) {\n      let n2 = new G(this.color).getSource(), r2 = this.distance, i2 = [0 + n2[0] / 255 - r2, 0 + n2[1] / 255 - r2, 0 + n2[2] / 255 - r2, 1], a2 = [n2[0] / 255 + r2, n2[1] / 255 + r2, n2[2] / 255 + r2, 1];\n      e24.uniform4fv(t2.uLow, i2), e24.uniform4fv(t2.uHigh, a2);\n    }\n  };\n  i(yc, `type`, `RemoveColor`), i(yc, `defaults`, { color: `#FFFFFF`, distance: 0.02, useAlpha: false }), i(yc, `uniformLocations`, [`uLow`, `uHigh`]), M.setClass(yc);\n  var bc = class extends $ {\n    sendUniformData(e24, t2) {\n      e24.uniform2fv(t2.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]), e24.uniform1fv(t2.uTaps, this.taps);\n    }\n    getFilterWindow() {\n      let e24 = this.tempScale;\n      return Math.ceil(this.lanczosLobes / e24);\n    }\n    getCacheKey() {\n      let e24 = this.getFilterWindow();\n      return `${this.type}_${e24}`;\n    }\n    getFragmentSource() {\n      let e24 = this.getFilterWindow();\n      return this.generateShader(e24);\n    }\n    getTaps() {\n      let e24 = this.lanczosCreate(this.lanczosLobes), t2 = this.tempScale, n2 = this.getFilterWindow(), r2 = Array(n2);\n      for (let i2 = 1; i2 <= n2; i2++) r2[i2 - 1] = e24(i2 * t2);\n      return r2;\n    }\n    generateShader(e24) {\n      let t2 = Array(e24);\n      for (let n2 = 1; n2 <= e24; n2++) t2[n2 - 1] = `${n2}.0 * uDelta`;\n      return `\n      precision highp float;\n      uniform sampler2D uTexture;\n      uniform vec2 uDelta;\n      varying vec2 vTexCoord;\n      uniform float uTaps[${e24}];\n      void main() {\n        vec4 color = texture2D(uTexture, vTexCoord);\n        float sum = 1.0;\n        ${t2.map((e25, t3) => `\n              color += texture2D(uTexture, vTexCoord + ${e25}) * uTaps[${t3}] + texture2D(uTexture, vTexCoord - ${e25}) * uTaps[${t3}];\n              sum += 2.0 * uTaps[${t3}];\n            `).join(`\n`)}\n        gl_FragColor = color / sum;\n      }\n    `;\n    }\n    applyToForWebgl(e24) {\n      e24.passes++, this.width = e24.sourceWidth, this.horizontal = true, this.dW = Math.round(this.width * this.scaleX), this.dH = e24.sourceHeight, this.tempScale = this.dW / this.width, this.taps = this.getTaps(), e24.destinationWidth = this.dW, super.applyTo(e24), e24.sourceWidth = e24.destinationWidth, this.height = e24.sourceHeight, this.horizontal = false, this.dH = Math.round(this.height * this.scaleY), this.tempScale = this.dH / this.height, this.taps = this.getTaps(), e24.destinationHeight = this.dH, super.applyTo(e24), e24.sourceHeight = e24.destinationHeight;\n    }\n    applyTo(e24) {\n      zs(e24) ? this.applyToForWebgl(e24) : this.applyTo2d(e24);\n    }\n    isNeutralState() {\n      return this.scaleX === 1 && this.scaleY === 1;\n    }\n    lanczosCreate(e24) {\n      return (t2) => {\n        if (t2 >= e24 || t2 <= -e24) return 0;\n        if (t2 < 11920929e-14 && t2 > -11920929e-14) return 1;\n        let n2 = (t2 *= Math.PI) / e24;\n        return Math.sin(t2) / t2 * Math.sin(n2) / n2;\n      };\n    }\n    applyTo2d(e24) {\n      let t2 = e24.imageData, n2 = this.scaleX, r2 = this.scaleY;\n      this.rcpScaleX = 1 / n2, this.rcpScaleY = 1 / r2;\n      let i2 = t2.width, a2 = t2.height, o2 = Math.round(i2 * n2), s3 = Math.round(a2 * r2), c2;\n      c2 = this.resizeType === `sliceHack` ? this.sliceByTwo(e24, i2, a2, o2, s3) : this.resizeType === `hermite` ? this.hermiteFastResize(e24, i2, a2, o2, s3) : this.resizeType === `bilinear` ? this.bilinearFiltering(e24, i2, a2, o2, s3) : this.resizeType === `lanczos` ? this.lanczosResize(e24, i2, a2, o2, s3) : new ImageData(o2, s3), e24.imageData = c2;\n    }\n    sliceByTwo(e24, t2, n2, r2, i2) {\n      let a2 = e24.imageData, o2 = 0.5, s3 = false, c2 = false, l2 = t2 * o2, u2 = n2 * o2, d2 = e24.filterBackend.resources, f2 = 0, p2 = 0, m = t2, h2 = 0;\n      d2.sliceByTwo || (d2.sliceByTwo = P());\n      let g2 = d2.sliceByTwo;\n      (g2.width < 1.5 * t2 || g2.height < n2) && (g2.width = 1.5 * t2, g2.height = n2);\n      let _2 = g2.getContext(`2d`);\n      for (_2.clearRect(0, 0, 1.5 * t2, n2), _2.putImageData(a2, 0, 0), r2 = Math.floor(r2), i2 = Math.floor(i2); !s3 || !c2; ) t2 = l2, n2 = u2, r2 < Math.floor(l2 * o2) ? l2 = Math.floor(l2 * o2) : (l2 = r2, s3 = true), i2 < Math.floor(u2 * o2) ? u2 = Math.floor(u2 * o2) : (u2 = i2, c2 = true), _2.drawImage(g2, f2, p2, t2, n2, m, h2, l2, u2), f2 = m, p2 = h2, h2 += u2;\n      return _2.getImageData(f2, p2, r2, i2);\n    }\n    lanczosResize(e24, t2, n2, r2, i2) {\n      let a2 = e24.imageData.data, o2 = e24.ctx.createImageData(r2, i2), s3 = o2.data, c2 = this.lanczosCreate(this.lanczosLobes), l2 = this.rcpScaleX, u2 = this.rcpScaleY, d2 = 2 / this.rcpScaleX, f2 = 2 / this.rcpScaleY, p2 = Math.ceil(l2 * this.lanczosLobes / 2), m = Math.ceil(u2 * this.lanczosLobes / 2), h2 = {}, g2 = { x: 0, y: 0 }, _2 = { x: 0, y: 0 };\n      return function e25(v2) {\n        let y2, b2, x2, S2, C2, w2, ee2, T2, E2, D2, O2;\n        for (g2.x = (v2 + 0.5) * l2, _2.x = Math.floor(g2.x), y2 = 0; y2 < i2; y2++) {\n          for (g2.y = (y2 + 0.5) * u2, _2.y = Math.floor(g2.y), C2 = 0, w2 = 0, ee2 = 0, T2 = 0, E2 = 0, b2 = _2.x - p2; b2 <= _2.x + p2; b2++) if (!(b2 < 0 || b2 >= t2)) {\n            D2 = Math.floor(1e3 * Math.abs(b2 - g2.x)), h2[D2] || (h2[D2] = {});\n            for (let e26 = _2.y - m; e26 <= _2.y + m; e26++) e26 < 0 || e26 >= n2 || (O2 = Math.floor(1e3 * Math.abs(e26 - g2.y)), h2[D2][O2] || (h2[D2][O2] = c2(Math.sqrt((D2 * d2) ** 2 + (O2 * f2) ** 2) / 1e3)), x2 = h2[D2][O2], x2 > 0 && (S2 = 4 * (e26 * t2 + b2), C2 += x2, w2 += x2 * a2[S2], ee2 += x2 * a2[S2 + 1], T2 += x2 * a2[S2 + 2], E2 += x2 * a2[S2 + 3]));\n          }\n          S2 = 4 * (y2 * r2 + v2), s3[S2] = w2 / C2, s3[S2 + 1] = ee2 / C2, s3[S2 + 2] = T2 / C2, s3[S2 + 3] = E2 / C2;\n        }\n        return ++v2 < r2 ? e25(v2) : o2;\n      }(0);\n    }\n    bilinearFiltering(e24, t2, n2, r2, i2) {\n      let a2, o2, s3, c2, l2, u2, d2, f2, p2, m, h2, g2, _2, v2 = 0, y2 = this.rcpScaleX, b2 = this.rcpScaleY, x2 = 4 * (t2 - 1), S2 = e24.imageData.data, C2 = e24.ctx.createImageData(r2, i2), w2 = C2.data;\n      for (d2 = 0; d2 < i2; d2++) for (f2 = 0; f2 < r2; f2++) for (l2 = Math.floor(y2 * f2), u2 = Math.floor(b2 * d2), p2 = y2 * f2 - l2, m = b2 * d2 - u2, _2 = 4 * (u2 * t2 + l2), h2 = 0; h2 < 4; h2++) a2 = S2[_2 + h2], o2 = S2[_2 + 4 + h2], s3 = S2[_2 + x2 + h2], c2 = S2[_2 + x2 + 4 + h2], g2 = a2 * (1 - p2) * (1 - m) + o2 * p2 * (1 - m) + s3 * m * (1 - p2) + c2 * p2 * m, w2[v2++] = g2;\n      return C2;\n    }\n    hermiteFastResize(e24, t2, n2, r2, i2) {\n      let a2 = this.rcpScaleX, o2 = this.rcpScaleY, s3 = Math.ceil(a2 / 2), c2 = Math.ceil(o2 / 2), l2 = e24.imageData.data, u2 = e24.ctx.createImageData(r2, i2), d2 = u2.data;\n      for (let e25 = 0; e25 < i2; e25++) for (let n3 = 0; n3 < r2; n3++) {\n        let i3 = 4 * (n3 + e25 * r2), u3, f2 = 0, p2 = 0, m = 0, h2 = 0, g2 = 0, _2 = 0, v2 = (e25 + 0.5) * o2;\n        for (let r3 = Math.floor(e25 * o2); r3 < (e25 + 1) * o2; r3++) {\n          let e26 = Math.abs(v2 - (r3 + 0.5)) / c2, i4 = (n3 + 0.5) * a2, o3 = e26 * e26;\n          for (let e27 = Math.floor(n3 * a2); e27 < (n3 + 1) * a2; e27++) {\n            let n4 = Math.abs(i4 - (e27 + 0.5)) / s3, a3 = Math.sqrt(o3 + n4 * n4);\n            a3 > 1 && a3 < -1 || (u3 = 2 * a3 * a3 * a3 - 3 * a3 * a3 + 1, u3 > 0 && (n4 = 4 * (e27 + r3 * t2), _2 += u3 * l2[n4 + 3], p2 += u3, l2[n4 + 3] < 255 && (u3 = u3 * l2[n4 + 3] / 250), m += u3 * l2[n4], h2 += u3 * l2[n4 + 1], g2 += u3 * l2[n4 + 2], f2 += u3));\n          }\n        }\n        d2[i3] = m / f2, d2[i3 + 1] = h2 / f2, d2[i3 + 2] = g2 / f2, d2[i3 + 3] = _2 / p2;\n      }\n      return u2;\n    }\n  };\n  i(bc, `type`, `Resize`), i(bc, `defaults`, { resizeType: `hermite`, scaleX: 1, scaleY: 1, lanczosLobes: 3 }), i(bc, `uniformLocations`, [`uDelta`, `uTaps`]), M.setClass(bc);\n  var xc = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uSaturation;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    float rgMax = max(color.r, color.g);\n    float rgbMax = max(rgMax, color.b);\n    color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\n    color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\n    color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\n    gl_FragColor = color;\n  }\n`;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = -this.saturation;\n      for (let n2 = 0; n2 < e24.length; n2 += 4) {\n        let r2 = e24[n2], i2 = e24[n2 + 1], a2 = e24[n2 + 2], o2 = Math.max(r2, i2, a2);\n        e24[n2] += o2 === r2 ? 0 : (o2 - r2) * t2, e24[n2 + 1] += o2 === i2 ? 0 : (o2 - i2) * t2, e24[n2 + 2] += o2 === a2 ? 0 : (o2 - a2) * t2;\n      }\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uSaturation, -this.saturation);\n    }\n    isNeutralState() {\n      return this.saturation === 0;\n    }\n  };\n  i(xc, `type`, `Saturation`), i(xc, `defaults`, { saturation: 0 }), i(xc, `uniformLocations`, [`uSaturation`]), M.setClass(xc);\n  var Sc = class extends $ {\n    getFragmentSource() {\n      return `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uVibrance;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    float max = max(color.r, max(color.g, color.b));\n    float avg = (color.r + color.g + color.b) / 3.0;\n    float amt = (abs(max - avg) * 2.0) * uVibrance;\n    color.r += max != color.r ? (max - color.r) * amt : 0.00;\n    color.g += max != color.g ? (max - color.g) * amt : 0.00;\n    color.b += max != color.b ? (max - color.b) * amt : 0.00;\n    gl_FragColor = color;\n  }\n`;\n    }\n    applyTo2d({ imageData: { data: e24 } }) {\n      let t2 = -this.vibrance;\n      for (let n2 = 0; n2 < e24.length; n2 += 4) {\n        let r2 = e24[n2], i2 = e24[n2 + 1], a2 = e24[n2 + 2], o2 = Math.max(r2, i2, a2), s3 = (r2 + i2 + a2) / 3, c2 = 2 * Math.abs(o2 - s3) / 255 * t2;\n        e24[n2] += o2 === r2 ? 0 : (o2 - r2) * c2, e24[n2 + 1] += o2 === i2 ? 0 : (o2 - i2) * c2, e24[n2 + 2] += o2 === a2 ? 0 : (o2 - a2) * c2;\n      }\n    }\n    sendUniformData(e24, t2) {\n      e24.uniform1f(t2.uVibrance, -this.vibrance);\n    }\n    isNeutralState() {\n      return this.vibrance === 0;\n    }\n  };\n  i(Sc, `type`, `Vibrance`), i(Sc, `defaults`, { vibrance: 0 }), i(Sc, `uniformLocations`, [`uVibrance`]), M.setClass(Sc);\n  var Cc = t({ BaseFilter: () => $, BlackWhite: () => ac, BlendColor: () => Gs, BlendImage: () => qs, Blur: () => Js, Brightness: () => Ys, Brownie: () => $s, ColorMatrix: () => Zs, Composed: () => oc, Contrast: () => sc, Convolute: () => lc, Gamma: () => dc, Grayscale: () => pc, HueRotation: () => hc, Invert: () => gc, Kodachrome: () => tc, Noise: () => _c, Pixelate: () => vc, Polaroid: () => rc, RemoveColor: () => yc, Resize: () => bc, Saturation: () => xc, Sepia: () => ic, Technicolor: () => nc, Vibrance: () => Sc, Vintage: () => ec });\n\n  // src/fonts-catalog.js\n  var FONT_CATALOG = [\n    { c: \"Popular\", f: \"Poppins\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Roboto\", w: [100, 300, 400, 500, 700, 900] },\n    { c: \"Popular\", f: \"Open Sans\", w: [300, 400, 500, 600, 700, 800] },\n    { c: \"Popular\", f: \"Lato\", w: [100, 300, 400, 700, 900] },\n    { c: \"Popular\", f: \"Montserrat\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Oswald\", w: [200, 300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Raleway\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Nunito\", w: [200, 300, 400, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Rubik\", w: [300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Work Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Inter\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Outfit\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Barlow\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Urbanist\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"DM Sans\", w: [400, 500, 700] },\n    { c: \"Popular\", f: \"Manrope\", w: [200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Popular\", f: \"Playfair Display\", w: [400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Merriweather\", w: [300, 400, 700, 900] },\n    { c: \"Popular\", f: \"Noto Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Ubuntu\", w: [300, 400, 500, 700] },\n    { c: \"Popular\", f: \"Fira Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"PT Sans\", w: [400, 700] },\n    { c: \"Popular\", f: \"Exo 2\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Mulish\", w: [200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Karla\", w: [200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Popular\", f: \"Hind\", w: [300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Quicksand\", w: [300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Source Sans 3\", w: [200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Jost\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Arimo\", w: [400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Cabin\", w: [400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Titillium Web\", w: [200, 300, 400, 600, 700, 900] },\n    { c: \"Popular\", f: \"Mukta\", w: [200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Popular\", f: \"Assistant\", w: [200, 300, 400, 600, 700, 800] },\n    { c: \"Popular\", f: \"Varela Round\", w: [400] },\n    { c: \"Popular\", f: \"Public Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Signika\", w: [300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Overpass\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Heebo\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"IBM Plex Sans\", w: [100, 200, 300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Cairo\", w: [200, 300, 400, 600, 700, 900] },\n    { c: \"Popular\", f: \"Red Hat Display\", w: [400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Prompt\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Tajawal\", w: [200, 300, 400, 500, 700, 800, 900] },\n    { c: \"Popular\", f: \"Noto Serif\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Barlow Condensed\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Lexend\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Hind Siliguri\", w: [300, 400, 500, 600, 700] },\n    { c: \"Popular\", f: \"Be Vietnam Pro\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Popular\", f: \"Noto Sans Display\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Sora\", w: [100, 200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Modern\", f: \"Plus Jakarta Sans\", w: [200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Modern\", f: \"Kumbh Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Figtree\", w: [300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Teko\", w: [300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Anton\", w: [400] },\n    { c: \"Modern\", f: \"Orbitron\", w: [400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Rajdhani\", w: [300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Space Grotesk\", w: [300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Syne\", w: [400, 500, 600, 700, 800] },\n    { c: \"Modern\", f: \"Quantico\", w: [400, 700] },\n    { c: \"Modern\", f: \"Michroma\", w: [400] },\n    { c: \"Modern\", f: \"Audiowide\", w: [400] },\n    { c: \"Modern\", f: \"Jura\", w: [300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Varta\", w: [300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Questrial\", w: [400] },\n    { c: \"Modern\", f: \"Chivo\", w: [300, 400, 700, 900] },\n    { c: \"Modern\", f: \"Sarabun\", w: [100, 200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Modern\", f: \"Asap\", w: [400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Coda\", w: [400, 800] },\n    { c: \"Modern\", f: \"Anek Latin\", w: [100, 200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Modern\", f: \"Hanken Grotesk\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Livvic\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Exo\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Pathway Extreme\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Atkinson Hyperlegible\", w: [400, 700] },\n    { c: \"Modern\", f: \"Encode Sans\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Modern\", f: \"Bai Jamjuree\", w: [200, 300, 400, 500, 600, 700] },\n    { c: \"Modern\", f: \"Sen\", w: [400, 700, 800] },\n    { c: \"Modern\", f: \"Readex Pro\", w: [200, 300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Times New Roman\", w: [400, 700] },\n    { c: \"Classic\", f: \"Crimson Text\", w: [400, 600, 700] },\n    { c: \"Classic\", f: \"Cormorant\", w: [300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Libre Baskerville\", w: [400, 700] },\n    { c: \"Classic\", f: \"Domine\", w: [400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Lora\", w: [400, 500, 600, 700] },\n    { c: \"Classic\", f: \"EB Garamond\", w: [400, 500, 600, 700, 800] },\n    { c: \"Classic\", f: \"Tinos\", w: [400, 700] },\n    { c: \"Classic\", f: \"Spectral\", w: [200, 300, 400, 500, 600, 700, 800] },\n    { c: \"Classic\", f: \"Vollkorn\", w: [400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Cardo\", w: [400, 700] },\n    { c: \"Classic\", f: \"PT Serif\", w: [400, 700] },\n    { c: \"Classic\", f: \"Old Standard TT\", w: [400, 700] },\n    { c: \"Classic\", f: \"Cormorant Garamond\", w: [300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Zilla Slab\", w: [300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Bitter\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Nanum Myeongjo\", w: [400, 700, 800] },\n    { c: \"Classic\", f: \"Gentium Book Plus\", w: [400, 700] },\n    { c: \"Classic\", f: \"Alegreya\", w: [400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Brawler\", w: [400] },\n    { c: \"Classic\", f: \"Sorts Mill Goudy\", w: [400] },\n    { c: \"Classic\", f: \"DM Serif Text\", w: [400] },\n    { c: \"Classic\", f: \"Arapey\", w: [400, 700] },\n    { c: \"Classic\", f: \"Taviraj\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Rokkitt\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Inknut Antiqua\", w: [300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Ledger\", w: [400] },\n    { c: \"Classic\", f: \"Trirong\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Noticia Text\", w: [400, 700] },\n    { c: \"Classic\", f: \"Alice\", w: [400] },\n    { c: \"Classic\", f: \"Neuton\", w: [200, 300, 400, 700, 800] },\n    { c: \"Classic\", f: \"Judson\", w: [400, 700] },\n    { c: \"Classic\", f: \"Rasa\", w: [300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Coustard\", w: [400, 900] },\n    { c: \"Classic\", f: \"Lustria\", w: [400] },\n    { c: \"Classic\", f: \"Suranna\", w: [400] },\n    { c: \"Classic\", f: \"Rhodium Libre\", w: [400] },\n    { c: \"Classic\", f: \"Mate\", w: [400, 700] },\n    { c: \"Classic\", f: \"Noto Serif Display\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"Cormorant Infant\", w: [300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Gloock\", w: [400] },\n    { c: \"Classic\", f: \"Fraunces\", w: [100, 200, 300, 400, 500, 600, 700, 800, 900] },\n    { c: \"Classic\", f: \"IBM Plex Serif\", w: [100, 200, 300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Prata\", w: [400] },\n    { c: \"Classic\", f: \"Adamina\", w: [400] },\n    { c: \"Classic\", f: \"Maitree\", w: [200, 300, 400, 500, 600, 700] },\n    { c: \"Classic\", f: \"Rosarivo\", w: [400] },\n    { c: \"Playful\", f: \"Fredoka\", w: [300, 400, 500, 600, 700] },\n    { c: \"Playful\", f: \"Baloo 2\", w: [400, 500, 600, 700, 800] },\n    { c: \"Playful\", f: \"Chewy\", w: [400] },\n    { c: \"Playful\", f: \"Bungee\", w: [400] },\n    { c: \"Playful\", f: \"Permanent Marker\", w: [400] },\n    { c: \"Playful\", f: \"Luckiest Guy\", w: [400] },\n    { c: \"Playful\", f: \"Shadows Into Light\", w: [400] },\n    { c: \"Playful\", f: \"Comic Neue\", w: [300, 400, 700] },\n    { c: \"Playful\", f: \"Handlee\", w: [400] },\n    { c: \"Playful\", f: \"Patrick Hand\", w: [400] },\n    { c: \"Playful\", f: \"Bubblegum Sans\", w: [400] },\n    { c: \"Playful\", f: \"Carter One\", w: [400] },\n    { c: \"Playful\", f: \"Sigmar\", w: [400] },\n    { c: \"Playful\", f: \"Boogaloo\", w: [400] },\n    { c: \"Playful\", f: \"Chicle\", w: [400] },\n    { c: \"Playful\", f: \"Titan One\", w: [400] },\n    { c: \"Playful\", f: \"Leckerli One\", w: [400] },\n    { c: \"Playful\", f: \"Righteous\", w: [400] },\n    { c: \"Playful\", f: \"Skranji\", w: [400, 700] },\n    { c: \"Playful\", f: \"Acme\", w: [400] },\n    { c: \"Playful\", f: \"Amaranth\", w: [400, 700] },\n    { c: \"Playful\", f: \"Bangers\", w: [400] },\n    { c: \"Playful\", f: \"Black Ops One\", w: [400] },\n    { c: \"Playful\", f: \"Lalezar\", w: [400] },\n    { c: \"Playful\", f: \"Paytone One\", w: [400] },\n    { c: \"Playful\", f: \"Rock Salt\", w: [400] },\n    { c: \"Playful\", f: \"Ravi Prakash\", w: [400] },\n    { c: \"Playful\", f: \"Special Elite\", w: [400] },\n    { c: \"Playful\", f: \"Knewave\", w: [400] },\n    { c: \"Playful\", f: \"Kaushan Script\", w: [400] },\n    { c: \"Playful\", f: \"Press Start 2P\", w: [400] },\n    { c: \"Playful\", f: \"Rye\", w: [400] },\n    { c: \"Playful\", f: \"Sniglet\", w: [400, 800] },\n    { c: \"Playful\", f: \"Cabin Sketch\", w: [400, 700] },\n    { c: \"Playful\", f: \"Creepster\", w: [400] },\n    { c: \"Playful\", f: \"Coiny\", w: [400] },\n    { c: \"Playful\", f: \"Caveat Brush\", w: [400] },\n    { c: \"Playful\", f: \"Berkshire Swash\", w: [400] },\n    { c: \"Playful\", f: \"Bungee Inline\", w: [400] },\n    { c: \"Playful\", f: \"Bungee Shade\", w: [400] },\n    { c: \"Playful\", f: \"Bungee Hairline\", w: [400] },\n    { c: \"Playful\", f: \"Fugaz One\", w: [400] },\n    { c: \"Playful\", f: \"Gochi Hand\", w: [400] },\n    { c: \"Playful\", f: \"Modak\", w: [400] },\n    { c: \"Playful\", f: \"Oleo Script\", w: [400, 700] },\n    { c: \"Playful\", f: \"Nova Round\", w: [400] },\n    { c: \"Playful\", f: \"Salsa\", w: [400] },\n    { c: \"Playful\", f: \"Ranchers\", w: [400] },\n    { c: \"Playful\", f: \"ZCOOL KuaiLe\", w: [400] },\n    { c: \"Handwritten\", f: \"Dancing Script\", w: [400, 500, 600, 700] },\n    { c: \"Handwritten\", f: \"Pacifico\", w: [400] },\n    { c: \"Handwritten\", f: \"Satisfy\", w: [400] },\n    { c: \"Handwritten\", f: \"Caveat\", w: [400, 500, 600, 700] },\n    { c: \"Handwritten\", f: \"Amatic SC\", w: [400, 700] },\n    { c: \"Handwritten\", f: \"Great Vibes\", w: [400] },\n    { c: \"Handwritten\", f: \"Sacramento\", w: [400] },\n    { c: \"Handwritten\", f: \"Gloria Hallelujah\", w: [400] },\n    { c: \"Handwritten\", f: \"Cookie\", w: [400] },\n    { c: \"Handwritten\", f: \"Alex Brush\", w: [400] },\n    { c: \"Handwritten\", f: \"Parisienne\", w: [400] },\n    { c: \"Handwritten\", f: \"Tangerine\", w: [400, 700] },\n    { c: \"Handwritten\", f: \"Marck Script\", w: [400] },\n    { c: \"Handwritten\", f: \"Allura\", w: [400] },\n    { c: \"Handwritten\", f: \"Arizonia\", w: [400] },\n    { c: \"Handwritten\", f: \"Merienda\", w: [400, 700] },\n    { c: \"Handwritten\", f: \"Yesteryear\", w: [400] },\n    { c: \"Handwritten\", f: \"Bad Script\", w: [400] },\n    { c: \"Handwritten\", f: \"Nanum Pen Script\", w: [400] },\n    { c: \"Handwritten\", f: \"Reenie Beanie\", w: [400] },\n    { c: \"Handwritten\", f: \"La Belle Aurore\", w: [400] },\n    { c: \"Handwritten\", f: \"Kalam\", w: [300, 400, 700] },\n    { c: \"Handwritten\", f: \"Covered By Your Grace\", w: [400] },\n    { c: \"Handwritten\", f: \"Calligraffitti\", w: [400] },\n    { c: \"Handwritten\", f: \"Architects Daughter\", w: [400] },\n    { c: \"Handwritten\", f: \"Nothing You Could Do\", w: [400] },\n    { c: \"Handwritten\", f: \"Just Another Hand\", w: [400] },\n    { c: \"Handwritten\", f: \"Beth Ellen\", w: [400] },\n    { c: \"Handwritten\", f: \"Cedarville Cursive\", w: [400] },\n    { c: \"Handwritten\", f: \"Clicker Script\", w: [400] },\n    { c: \"Handwritten\", f: \"Dawning of a New Day\", w: [400] },\n    { c: \"Handwritten\", f: \"Give You Glory\", w: [400] },\n    { c: \"Handwritten\", f: \"Homemade Apple\", w: [400] },\n    { c: \"Handwritten\", f: \"Italianno\", w: [400] },\n    { c: \"Handwritten\", f: \"Mrs Saint Delafield\", w: [400] },\n    { c: \"Handwritten\", f: \"Sofia\", w: [400] },\n    { c: \"Handwritten\", f: \"Sriracha\", w: [400] },\n    { c: \"Handwritten\", f: \"Qwigley\", w: [400] },\n    { c: \"Handwritten\", f: \"Zeyada\", w: [400] },\n    { c: \"Handwritten\", f: \"Norican\", w: [400] },\n    { c: \"Handwritten\", f: \"Rouge Script\", w: [400] },\n    { c: \"Handwritten\", f: \"Herr Von Muellerhoff\", w: [400] },\n    { c: \"Handwritten\", f: \"Pinyon Script\", w: [400] }\n  ];\n\n  // src/fonts.js\n  var CATEGORIES = [...new Set(FONT_CATALOG.map((e24) => e24.c))];\n  var WEIGHT_LABELS = {\n    100: \"Thin\",\n    200: \"Extra Light\",\n    300: \"Light\",\n    400: \"Regular\",\n    500: \"Medium\",\n    600: \"Semi Bold\",\n    700: \"Bold\",\n    800: \"Extra Bold\",\n    900: \"Black\"\n  };\n  var byFamily = new Map(FONT_CATALOG.map((e24) => [e24.f, e24]));\n  var SYSTEM = /* @__PURE__ */ new Set([\"Times New Roman\"]);\n  function fontWeights(family) {\n    const e24 = byFamily.get(family);\n    return e24 ? e24.w : [400, 700];\n  }\n  function nearestWeight(family, target2) {\n    let best = null;\n    for (const w2 of fontWeights(family)) {\n      if (best === null || Math.abs(w2 - target2) < Math.abs(best - target2)) best = w2;\n    }\n    return best === null ? target2 : best;\n  }\n  function addStylesheet(href) {\n    return new Promise((resolve) => {\n      const link = document.createElement(\"link\");\n      link.rel = \"stylesheet\";\n      link.href = href;\n      link.onload = resolve;\n      link.onerror = resolve;\n      document.head.appendChild(link);\n      setTimeout(resolve, 4e3);\n    });\n  }\n  var famParam = (family, wghts) => \"family=\" + encodeURIComponent(family).replace(/%20/g, \"+\") + \":wght@\" + wghts;\n  var CHUNK = 25;\n  var previewLoaded = /* @__PURE__ */ new Set();\n  function ensurePreviewCss(category) {\n    if (previewLoaded.has(category)) return;\n    previewLoaded.add(category);\n    const fams = FONT_CATALOG.filter((e24) => e24.c === category && !SYSTEM.has(e24.f));\n    for (let i2 = 0; i2 < fams.length; i2 += CHUNK) {\n      const chunk = fams.slice(i2, i2 + CHUNK);\n      const text = [...new Set(chunk.map((e24) => e24.f).join(\"\"))].join(\"\");\n      const params = chunk.map((e24) => famParam(e24.f, nearestWeight(e24.f, 400))).join(\"&\");\n      addStylesheet(\n        \"https://fonts.googleapis.com/css2?\" + params + \"&text=\" + encodeURIComponent(text) + \"&display=swap\"\n      );\n    }\n  }\n  function ensureAllPreviewCss() {\n    CATEGORIES.forEach(ensurePreviewCss);\n  }\n  var loadedFull = /* @__PURE__ */ new Map();\n  function loadFont(family) {\n    if (SYSTEM.has(family)) return Promise.resolve();\n    let p2 = loadedFull.get(family);\n    if (!p2) {\n      p2 = loadFontNow(family);\n      loadedFull.set(family, p2);\n    }\n    return p2;\n  }\n  async function loadFontNow(family) {\n    await addStylesheet(\n      \"https://fonts.googleapis.com/css2?\" + famParam(family, fontWeights(family).join(\";\")) + \"&display=swap\"\n    );\n    const reg = nearestWeight(family, 400);\n    const bold = nearestWeight(family, 700);\n    try {\n      await Promise.all([\n        document.fonts.load(reg + ' 32px \"' + family + '\"'),\n        document.fonts.load(bold + ' 32px \"' + family + '\"')\n      ]);\n    } catch (e24) {\n    }\n    try {\n      document.dispatchEvent(new CustomEvent(\"nsv2:fontloaded\", { detail: { family } }));\n    } catch (e24) {\n    }\n  }\n\n  // src/glyphs.js\n  var OWN_SRC = document.currentScript && document.currentScript.src || \"\";\n  var otPromise = null;\n  function loadOpentype() {\n    if (window.NinjaStudioOpentype) return Promise.resolve(window.NinjaStudioOpentype);\n    if (otPromise) return otPromise;\n    otPromise = new Promise((resolve, reject) => {\n      const own = OWN_SRC || (document.querySelector('script[src*=\"studio-v2.js\"]') || {}).src || \"\";\n      if (!own) return reject(new Error(\"studio script tag not found\"));\n      const sc2 = document.createElement(\"script\");\n      sc2.src = own.replace(/studio-v2\\.js/, \"studio-v2-opentype.js\");\n      sc2.async = true;\n      sc2.onload = () => window.NinjaStudioOpentype ? resolve(window.NinjaStudioOpentype) : reject(new Error(\"opentype chunk loaded empty\"));\n      sc2.onerror = () => reject(new Error(\"opentype chunk failed\"));\n      document.head.appendChild(sc2);\n    }).catch((e24) => {\n      otPromise = null;\n      throw e24;\n    });\n    return otPromise;\n  }\n  function prewarmGlyphEngine() {\n    loadOpentype().catch(() => {\n    });\n  }\n  var fontCache = /* @__PURE__ */ new Map();\n  var inflight = /* @__PURE__ */ new Map();\n  var fontsourceId = (family) => family.trim().toLowerCase().replace(/\\s+/g, \"-\");\n  function woffUrl(family, weight, italic) {\n    return \"https://cdn.jsdelivr.net/fontsource/fonts/\" + fontsourceId(family) + \"@latest/latin-\" + weight + \"-\" + (italic ? \"italic\" : \"normal\") + \".woff\";\n  }\n  async function fetchFont(family, weight, italic) {\n    const [ot2, resp] = await Promise.all([\n      loadOpentype(),\n      fetch(woffUrl(family, weight, italic), { mode: \"cors\" })\n    ]);\n    if (!resp.ok) throw new Error(\"font HTTP \" + resp.status);\n    return ot2.parse(await resp.arrayBuffer());\n  }\n  function fontKey(family, weight, italic) {\n    return family + \"|\" + (weight || 400) + \"|\" + (italic ? \"i\" : \"n\");\n  }\n  function getFontSync(family, weight, italic) {\n    return fontCache.get(fontKey(family, weight, italic)) || null;\n  }\n  function ensureFontBinary(family, weight, italic) {\n    const key = fontKey(family, weight, italic);\n    if (fontCache.has(key)) return Promise.resolve(fontCache.get(key));\n    if (inflight.has(key)) return inflight.get(key);\n    const p2 = (async () => {\n      try {\n        const font = await fetchFont(family, weight, italic);\n        const entry = { font, synthetic: false };\n        fontCache.set(key, entry);\n        return entry;\n      } catch (e24) {\n        if (italic) {\n          try {\n            const upEntry = await ensureFontBinary(family, weight, false);\n            const entry = upEntry ? { font: upEntry.font, synthetic: true } : null;\n            fontCache.set(key, entry);\n            return entry;\n          } catch (_2) {\n          }\n        }\n        console.warn(\"studio-v2: font binary unavailable, canvas fallback stays\", family, weight, e24);\n        fontCache.set(key, null);\n        return null;\n      } finally {\n        inflight.delete(key);\n      }\n    })();\n    inflight.set(key, p2);\n    return p2;\n  }\n  function layoutLine(entry, text, fontSize, charSpacingPx) {\n    const { font, synthetic } = entry;\n    const scale = fontSize / font.unitsPerEm;\n    const skew = synthetic ? Math.tan(12 * Math.PI / 180) : 0;\n    const chars = [...text];\n    const glyphs = [];\n    let pen = 0;\n    let prev = null;\n    chars.forEach((ch, i2) => {\n      const glyph = font.charToGlyph(ch);\n      if (prev) pen += font.getKerningValue(prev, glyph) * scale;\n      const adv = glyph.advanceWidth * scale + (i2 < chars.length - 1 ? charSpacingPx : 0);\n      const path = glyph.getPath(pen, 0, fontSize);\n      const commands = skew ? path.commands.map((c2) => {\n        const o2 = { ...c2 };\n        if (o2.x != null) o2.x -= o2.y * skew;\n        if (o2.x1 != null) o2.x1 -= o2.y1 * skew;\n        if (o2.x2 != null) o2.x2 -= o2.y2 * skew;\n        return o2;\n      }) : path.commands;\n      glyphs.push({ ch, adv, pen, commands });\n      pen += adv;\n      prev = glyph;\n    });\n    const ascent = font.ascender / font.unitsPerEm * fontSize;\n    const descent = Math.abs(font.descender / font.unitsPerEm) * fontSize;\n    return { glyphs, width: pen, ascent, descent };\n  }\n\n  // src/recolor.js\n  var MAX_SWATCHES = 10;\n  var MIN_COVERAGE = 1.5;\n  var MERGE_DE = 5;\n  var BIAS_LIMIT = 50;\n  function hexToRgb(h2) {\n    const n2 = parseInt(h2.replace(\"#\", \"\"), 16);\n    return [n2 >> 16 & 255, n2 >> 8 & 255, n2 & 255];\n  }\n  function rgbToHex(r2, g2, b2) {\n    return \"#\" + (1 << 24 | r2 << 16 | g2 << 8 | b2).toString(16).slice(1).toUpperCase();\n  }\n  function rgbToLab(r2, g2, b2) {\n    let sr2 = r2 / 255, sg = g2 / 255, sb = b2 / 255;\n    sr2 = sr2 > 0.04045 ? Math.pow((sr2 + 0.055) / 1.055, 2.4) : sr2 / 12.92;\n    sg = sg > 0.04045 ? Math.pow((sg + 0.055) / 1.055, 2.4) : sg / 12.92;\n    sb = sb > 0.04045 ? Math.pow((sb + 0.055) / 1.055, 2.4) : sb / 12.92;\n    let x2 = (sr2 * 0.4124564 + sg * 0.3575761 + sb * 0.1804375) / 0.95047;\n    let y2 = sr2 * 0.2126729 + sg * 0.7151522 + sb * 0.072175;\n    let z2 = (sr2 * 0.0193339 + sg * 0.119192 + sb * 0.9503041) / 1.08883;\n    x2 = x2 > 8856e-6 ? Math.cbrt(x2) : 7.787 * x2 + 16 / 116;\n    y2 = y2 > 8856e-6 ? Math.cbrt(y2) : 7.787 * y2 + 16 / 116;\n    z2 = z2 > 8856e-6 ? Math.cbrt(z2) : 7.787 * z2 + 16 / 116;\n    return [116 * y2 - 16, 500 * (x2 - y2), 200 * (y2 - z2)];\n  }\n  function labToRgb(L2, a2, bb) {\n    let y2 = (L2 + 16) / 116, x2 = a2 / 500 + y2, z2 = y2 - bb / 200;\n    const x3 = x2 * x2 * x2, y3 = y2 * y2 * y2, z3 = z2 * z2 * z2;\n    x2 = 0.95047 * (x3 > 8856e-6 ? x3 : (x2 - 16 / 116) / 7.787);\n    y2 = y3 > 8856e-6 ? y3 : (y2 - 16 / 116) / 7.787;\n    z2 = 1.08883 * (z3 > 8856e-6 ? z3 : (z2 - 16 / 116) / 7.787);\n    const r2 = x2 * 3.2404542 + y2 * -1.5371385 + z2 * -0.4985314;\n    const g2 = x2 * -0.966926 + y2 * 1.8760108 + z2 * 0.041556;\n    const b2 = x2 * 0.0556434 + y2 * -0.2040259 + z2 * 1.0572252;\n    const gam = (c2) => {\n      c2 = c2 > 31308e-7 ? 1.055 * Math.pow(c2, 1 / 2.4) - 0.055 : 12.92 * c2;\n      return Math.max(0, Math.min(255, Math.round(c2 * 255)));\n    };\n    return [gam(r2), gam(g2), gam(b2)];\n  }\n  function deltaE(l1, l2) {\n    const dL = l1[0] - l2[0], da2 = l1[1] - l2[1], db = l1[2] - l2[2];\n    return Math.sqrt(dL * dL + da2 * da2 + db * db);\n  }\n  var smoothstep = (t2) => {\n    t2 = Math.max(0, Math.min(1, t2));\n    return t2 * t2 * (3 - 2 * t2);\n  };\n  function labToRgbGamut(L2, a2, b2) {\n    const inGamut = (l2, a22, b22) => {\n      let y2 = (l2 + 16) / 116, x2 = a22 / 500 + y2, z2 = y2 - b22 / 200;\n      const x3 = x2 * x2 * x2, y3 = y2 * y2 * y2, z3 = z2 * z2 * z2;\n      x2 = 0.95047 * (x3 > 8856e-6 ? x3 : (x2 - 16 / 116) / 7.787);\n      y2 = y3 > 8856e-6 ? y3 : (y2 - 16 / 116) / 7.787;\n      z2 = 1.08883 * (z3 > 8856e-6 ? z3 : (z2 - 16 / 116) / 7.787);\n      const r2 = x2 * 3.2404542 + y2 * -1.5371385 + z2 * -0.4985314;\n      const g2 = x2 * -0.966926 + y2 * 1.8760108 + z2 * 0.041556;\n      const b3 = x2 * 0.0556434 + y2 * -0.2040259 + z2 * 1.0572252;\n      return r2 >= -1e-3 && r2 <= 1.001 && g2 >= -1e-3 && g2 <= 1.001 && b3 >= -1e-3 && b3 <= 1.001;\n    };\n    if (inGamut(L2, a2, b2)) return labToRgb(L2, a2, b2);\n    let lo2 = 0, hi2 = 1;\n    for (let i2 = 0; i2 < 7; i2++) {\n      const mid = (lo2 + hi2) / 2;\n      if (inGamut(L2, a2 * mid, b2 * mid)) lo2 = mid;\n      else hi2 = mid;\n    }\n    return labToRgb(L2, a2 * lo2, b2 * lo2);\n  }\n  function rgbToOklab(r2, g2, b2) {\n    let sr2 = r2 / 255, sg = g2 / 255, sb = b2 / 255;\n    sr2 = sr2 > 0.04045 ? Math.pow((sr2 + 0.055) / 1.055, 2.4) : sr2 / 12.92;\n    sg = sg > 0.04045 ? Math.pow((sg + 0.055) / 1.055, 2.4) : sg / 12.92;\n    sb = sb > 0.04045 ? Math.pow((sb + 0.055) / 1.055, 2.4) : sb / 12.92;\n    const l2 = Math.cbrt(0.4122214708 * sr2 + 0.5363325363 * sg + 0.0514459929 * sb);\n    const m = Math.cbrt(0.2119034982 * sr2 + 0.6806995451 * sg + 0.1073969566 * sb);\n    const s22 = Math.cbrt(0.0883024619 * sr2 + 0.2817188376 * sg + 0.6299787005 * sb);\n    return [\n      0.2104542553 * l2 + 0.793617785 * m - 0.0040720468 * s22,\n      1.9779984951 * l2 - 2.428592205 * m + 0.4505937099 * s22,\n      0.0259040371 * l2 + 0.7827717662 * m - 0.808675766 * s22\n    ];\n  }\n  function oklabToRgb(L2, a2, b2) {\n    const l2 = (L2 + 0.3963377774 * a2 + 0.2158037573 * b2) ** 3;\n    const m = (L2 - 0.1055613458 * a2 - 0.0638541728 * b2) ** 3;\n    const s22 = (L2 - 0.0894841775 * a2 - 1.291485548 * b2) ** 3;\n    let r2 = 4.0767416621 * l2 - 3.3077115913 * m + 0.2309699292 * s22;\n    let g2 = -1.2684380046 * l2 + 2.6097574011 * m - 0.3413193965 * s22;\n    let b22 = -0.0041960863 * l2 - 0.7034186147 * m + 1.707614701 * s22;\n    const gam = (c2) => {\n      c2 = Math.max(0, Math.min(1, c2));\n      c2 = c2 > 31308e-7 ? 1.055 * Math.pow(c2, 1 / 2.4) - 0.055 : 12.92 * c2;\n      return Math.max(0, Math.min(255, Math.round(c2 * 255)));\n    };\n    return [gam(r2), gam(g2), gam(b22)];\n  }\n  function computeAnchorStats(data, palLab, palRgb, opts = {}) {\n    const k2 = palLab.length;\n    const HB = 160;\n    const hist = Array.from({ length: k2 }, () => new Uint32Array(HB));\n    const counts = new Uint32Array(k2);\n    const wantMix = !!(opts.mixStats && palRgb);\n    const histX = wantMix ? Array.from({ length: k2 }, () => new Uint32Array(HB)) : null;\n    const countsX = wantMix ? new Uint32Array(k2) : null;\n    const n2 = data.length;\n    const stride = Math.max(1, Math.floor(n2 / 4 / 15e4)) * 4;\n    const memo = /* @__PURE__ */ new Map();\n    for (let p2 = 0; p2 < n2; p2 += stride) {\n      if (data[p2 + 3] < 128) continue;\n      const key = data[p2] << 16 | data[p2 + 1] << 8 | data[p2 + 2];\n      let hit = memo.get(key);\n      if (hit === void 0) {\n        const lab = rgbToLab(data[p2], data[p2 + 1], data[p2 + 2]);\n        let dmin = Infinity, imin = 0;\n        for (let i3 = 0; i3 < k2; i3++) {\n          const d2 = deltaE(lab, palLab[i3]);\n          if (d2 < dmin) {\n            dmin = d2;\n            imin = i3;\n          }\n        }\n        let isMix = 0;\n        if (wantMix && dmin > 3) {\n          const r2 = data[p2], g2 = data[p2 + 1], b3 = data[p2 + 2];\n          const lim2 = 0.35 * dmin * 0.35 * dmin * 3;\n          outer: for (let i3 = 0; i3 < k2 - 1; i3++) {\n            const A2 = palRgb[i3];\n            const ax = r2 - A2[0], ay = g2 - A2[1], az = b3 - A2[2];\n            for (let j2 = i3 + 1; j2 < k2; j2++) {\n              const B2 = palRgb[j2];\n              const dx = B2[0] - A2[0], dy = B2[1] - A2[1], dz = B2[2] - A2[2];\n              const gap2 = dx * dx + dy * dy + dz * dz;\n              if (gap2 < 100) continue;\n              const t2 = (ax * dx + ay * dy + az * dz) / gap2;\n              if (t2 <= 0.15 || t2 >= 0.85) continue;\n              const rx = ax - t2 * dx, ry = ay - t2 * dy, rz = az - t2 * dz;\n              if (rx * rx + ry * ry + rz * rz < lim2) {\n                isMix = 1;\n                break outer;\n              }\n            }\n          }\n        }\n        hit = isMix << 16 | imin << 8 | Math.min(HB - 1, Math.round(dmin * 2));\n        memo.set(key, hit);\n      }\n      const i2 = hit >> 8 & 255, b2 = hit & 255;\n      hist[i2][b2]++;\n      counts[i2]++;\n      if (wantMix && !(hit >> 16)) {\n        histX[i2][b2]++;\n        countsX[i2]++;\n      }\n    }\n    const pct = (hh, c2, q2) => {\n      let acc = 0;\n      for (let b2 = 0; b2 < HB; b2++) {\n        acc += hh[b2];\n        if (acc >= q2 * c2) return b2 / 2;\n      }\n      return HB / 2;\n    };\n    return Array.from({ length: k2 }, (_2, i2) => {\n      const c2 = counts[i2];\n      if (!c2) return { n: 0, p50: 0, p90: 0 };\n      const p50 = pct(hist[i2], c2, 0.5), p90 = pct(hist[i2], c2, 0.9);\n      const st2 = { n: c2, p50, p90, p90raw: p90 };\n      if (wantMix && countsX[i2] && p50 <= 3 && p90 > 3 * p50 + 2) {\n        st2.p90 = pct(histX[i2], countsX[i2], 0.9);\n      }\n      return st2;\n    });\n  }\n  var RECOLOR_V4 = true;\n  function applyColorReplacements(data, replacements, palette, width, opts = {}) {\n    if (RECOLOR_V4) opts = Object.assign({ noiseComp: true, familyPull: true, regionGuard: true, pairTiebreak: true, mixStats: true, rimInterloper: true }, opts);\n    if (!replacements.length) return;\n    const k2 = palette.length;\n    if (!k2) return;\n    const palRgb = palette.map((h2) => hexToRgb(h2));\n    const palLab = palRgb.map((c2) => rgbToLab(c2[0], c2[1], c2[2]));\n    const anchorStats = computeAnchorStats(data, palLab, palRgb, opts);\n    const n0 = data.length;\n    if (opts.debugStats) console.log(\"anchorStats\", anchorStats.map((st2, i2) => `${palette[i2]} p50=${st2.p50.toFixed(1)} p90=${st2.p90.toFixed(1)} n=${st2.n}`).join(\"  \"));\n    const palRepl = palette.map((h2) => {\n      const up = h2.toUpperCase();\n      for (let i2 = 0; i2 < replacements.length; i2++) {\n        if (replacements[i2].targetColor.toUpperCase() === up) return replacements[i2];\n      }\n      return null;\n    });\n    if (opts.familyPull) {\n      for (let j2 = 0; j2 < k2; j2++) {\n        if (palRepl[j2]) continue;\n        const Lj = palLab[j2];\n        const Cj = Math.hypot(Lj[1], Lj[2]);\n        if (Cj < 8) continue;\n        {\n          const st2 = anchorStats[j2];\n          let ng = Infinity;\n          for (let q2 = 0; q2 < k2; q2++) if (q2 !== j2) {\n            const d2 = deltaE(palLab[j2], palLab[q2]);\n            if (d2 < ng) ng = d2;\n          }\n          if (!st2.n || !(st2.p90 > 0.35 * ng)) continue;\n        }\n        const hj = Math.atan2(Lj[2], Lj[1]);\n        let best = -1, bestAng = Infinity;\n        for (let i2 = 0; i2 < k2; i2++) {\n          const rp = palRepl[i2];\n          if (!rp || rp.mode !== \"recolor\" || rp.__synthetic) continue;\n          const Li2 = palLab[i2];\n          const Ci2 = Math.hypot(Li2[1], Li2[2]);\n          if (Ci2 < 8) continue;\n          if (Lj[0] > Li2[0] + 8) continue;\n          let ang = Math.abs(hj - Math.atan2(Li2[2], Li2[1]));\n          if (ang > Math.PI) ang = 2 * Math.PI - ang;\n          if (ang < bestAng) {\n            bestAng = ang;\n            best = i2;\n          }\n        }\n        if (best < 0 || bestAng > 0.44) continue;\n        const src2 = hexToRgb(palRepl[best].targetColor);\n        const nc2 = hexToRgb(palRepl[best].newColor);\n        let rgbOut;\n        if (opts.oklchTransport) {\n          const oj = rgbToOklab(...palRgb[j2]);\n          const os2 = rgbToOklab(...src2);\n          const on2 = rgbToOklab(...nc2);\n          const hj2 = Math.atan2(oj[2], oj[1]);\n          const cj2 = Math.hypot(oj[1], oj[2]);\n          const hs2 = Math.atan2(os2[2], os2[1]);\n          const hn2 = Math.atan2(on2[2], on2[1]);\n          const cs2 = Math.max(5e-3, Math.hypot(os2[1], os2[2]));\n          const cn2 = Math.hypot(on2[1], on2[2]);\n          const hOut = hj2 + (hn2 - hs2);\n          const cOut = cj2 * Math.min(1.6, cn2 / cs2);\n          const lOut = oj[0] + (on2[0] - os2[0]) * Math.min(1, cj2 / cs2) * 0.5;\n          rgbOut = oklabToRgb(lOut, cOut * Math.cos(hOut), cOut * Math.sin(hOut));\n        } else {\n          const Lj2 = palLab[j2];\n          const srcLab = rgbToLab(src2[0], src2[1], src2[2]);\n          const nl2 = rgbToLab(nc2[0], nc2[1], nc2[2]);\n          const hSrc = Math.atan2(srcLab[2], srcLab[1]);\n          const hNew = Math.atan2(nl2[2], nl2[1]);\n          const cSrc = Math.max(0.5, Math.hypot(srcLab[1], srcLab[2]));\n          const cNew = Math.hypot(nl2[1], nl2[2]);\n          const hOut = hj + (hNew - hSrc);\n          const cOut = Cj * Math.min(1.6, cNew / cSrc);\n          const lOut = Lj2[0] + (nl2[0] - srcLab[0]) * Math.min(1, Cj / cSrc) * 0.5;\n          rgbOut = labToRgbGamut(lOut, cOut * Math.cos(hOut), cOut * Math.sin(hOut));\n        }\n        palRepl[j2] = { targetColor: palette[j2], mode: \"recolor\", newColor: rgbToHex(rgbOut[0], rgbOut[1], rgbOut[2]), __synthetic: true };\n      }\n    }\n    const sigma = palLab.map((L2, i2) => {\n      let nearest = Infinity;\n      for (let j2 = 0; j2 < k2; j2++) {\n        if (j2 === i2) continue;\n        const d2 = deltaE(L2, palLab[j2]);\n        if (d2 < nearest) nearest = d2;\n      }\n      let s3 = nearest === Infinity ? 20 : 0.45 * nearest;\n      s3 = Math.max(7, Math.min(85, s3));\n      const repl = palRepl[i2];\n      if (repl && repl.boundaryBias) {\n        const bias = Math.max(-BIAS_LIMIT, Math.min(BIAS_LIMIT, repl.boundaryBias));\n        s3 *= Math.pow(2, bias / BIAS_LIMIT);\n      }\n      return s3;\n    });\n    if (opts.sigmaFloor) {\n      for (let i2 = 0; i2 < k2; i2++) {\n        const st2 = anchorStats[i2];\n        let ng = Infinity;\n        for (let j2 = 0; j2 < k2; j2++) if (j2 !== i2) {\n          const d2 = deltaE(palLab[i2], palLab[j2]);\n          if (d2 < ng) ng = d2;\n        }\n        if (st2.n && ng < Infinity && st2.p90 > 0.5 * ng) sigma[i2] = Math.max(sigma[i2], 0.9 * ng);\n      }\n    }\n    const inv2s2 = sigma.map((s3) => 1 / (2 * s3 * s3 * 0.5));\n    const nearestGap = palLab.map((L2, i2) => {\n      let ng = Infinity;\n      for (let j2 = 0; j2 < k2; j2++) {\n        if (j2 !== i2) {\n          const d2 = deltaE(L2, palLab[j2]);\n          if (d2 < ng) ng = d2;\n        }\n      }\n      return ng === Infinity ? 60 : ng;\n    });\n    const gapGate = nearestGap.map((g2) => smoothstep((g2 - 10) / 25));\n    const exactCore = nearestGap.map((g2, i2) => Math.min(6, 0.12 * g2) * gapGate[i2]);\n    const rampEnd = nearestGap.map((g2, i2) => Math.min(16, 0.32 * g2) * gapGate[i2]);\n    const noiseFloor = palLab.map((L2, i2) => {\n      var _a2;\n      if (!opts.noiseComp) return 0;\n      const st2 = anchorStats[i2];\n      if (!st2.n) return 0;\n      const tight = smoothstep((nearestGap[i2] / Math.max(1, st2.p90) - 2) / 2);\n      return Math.min(((_a2 = st2.p90raw) != null ? _a2 : st2.p90) + 2, 0.3 * nearestGap[i2]) * tight * gapGate[i2];\n    });\n    const newLab = palRepl.map(\n      (r2) => r2 && r2.mode === \"recolor\" ? (() => {\n        const c2 = hexToRgb(r2.newColor);\n        return rgbToLab(c2[0], c2[1], c2[2]);\n      })() : null\n    );\n    const outRgb = palRgb.map((c2, i2) => {\n      const rp = palRepl[i2];\n      if (rp && rp.mode === \"recolor\") return hexToRgb(rp.newColor);\n      return c2;\n    });\n    const eraseShare = palRepl.map((rp) => rp && rp.mode === \"transparent\" ? 1 : 0);\n    const chromaScale = palLab.map((tl, i2) => {\n      const nl = newLab[i2];\n      if (!nl) return 1;\n      const cT = Math.sqrt(tl[1] * tl[1] + tl[2] * tl[2]);\n      const cN = Math.sqrt(nl[1] * nl[1] + nl[2] * nl[2]);\n      return Math.min(1, cN / Math.max(cT, 0.5));\n    });\n    const looseAnchor = palLab.map((L2, i2) => {\n      const st2 = anchorStats[i2];\n      return st2.n ? st2.p90 > 0.35 * nearestGap[i2] : false;\n    });\n    const looseMask = opts.speckleGuard || opts.regionGuard ? new Uint8Array(n0 / 4) : null;\n    let looseCount = 0;\n    const memo = /* @__PURE__ */ new Map();\n    const w2 = new Float64Array(k2);\n    const n2 = data.length;\n    const src = new Uint8ClampedArray(data);\n    const rowStride = width ? width * 4 : 0;\n    const rowW = width || n2 / 4;\n    const spatialGate = (p2) => {\n      const p4 = p2 >> 2;\n      const col = p4 % rowW;\n      let m = 0;\n      const look = (q2) => {\n        if (src[q2 + 3] < 128) {\n          m = 999;\n          return;\n        }\n        const d2 = Math.abs(src[q2] - src[p2]) + Math.abs(src[q2 + 1] - src[p2 + 1]) + Math.abs(src[q2 + 2] - src[p2 + 2]);\n        if (d2 > m) m = d2;\n      };\n      if (col > 0) look(p2 - 4);\n      if (col < rowW - 1) look(p2 + 4);\n      if (rowStride) {\n        if (p2 >= rowStride) look(p2 - rowStride);\n        if (p2 + rowStride < n2) look(p2 + rowStride);\n      }\n      return smoothstep((m - 24) / 48);\n    };\n    for (let p2 = 0; p2 < n2; p2 += 4) {\n      const alpha = data[p2 + 3];\n      if (alpha < 2) continue;\n      const r2 = data[p2], g2 = data[p2 + 1], b2 = data[p2 + 2];\n      const key = r2 << 16 | g2 << 8 | b2;\n      let dec = memo.get(key);\n      if (dec === void 0) {\n        const lab = rgbToLab(r2, g2, b2);\n        let sum = 0;\n        let touched = 0;\n        let dmin = Infinity;\n        let imin = -1;\n        for (let i2 = 0; i2 < k2; i2++) {\n          const d2 = deltaE(lab, palLab[i2]);\n          if (d2 < dmin) {\n            dmin = d2;\n            imin = i2;\n          }\n          const wi2 = Math.exp(-d2 * d2 * inv2s2[i2]);\n          w2[i2] = wi2;\n          sum += wi2;\n          if (palRepl[i2]) touched += wi2;\n        }\n        let bary = null;\n        {\n          let ba2 = -1, bj = -1, bt2 = 0, brx = 0, bry = 0, brz = 0, bResid2 = Infinity, bGap2 = 0;\n          let ra2 = -1, rj = -1, rt2 = 0, rrx = 0, rry = 0, rrz = 0, rResid2 = Infinity, rGap2 = 0;\n          const wantTb = !!opts.pairTiebreak;\n          for (let i2 = 0; i2 < k2 - 1; i2++) {\n            const A2 = palRgb[i2];\n            const ax = r2 - A2[0], ay = g2 - A2[1], az = b2 - A2[2];\n            for (let j2 = i2 + 1; j2 < k2; j2++) {\n              const B2 = palRgb[j2];\n              const dx = B2[0] - A2[0], dy = B2[1] - A2[1], dz = B2[2] - A2[2];\n              const gap2 = dx * dx + dy * dy + dz * dz;\n              if (gap2 < 1e-6) continue;\n              const t2 = (ax * dx + ay * dy + az * dz) / gap2;\n              if (t2 <= 0 || t2 >= 1) continue;\n              const rx = ax - t2 * dx, ry = ay - t2 * dy, rz = az - t2 * dz;\n              const resid2 = rx * rx + ry * ry + rz * rz;\n              if (resid2 < bResid2) {\n                bResid2 = resid2;\n                ba2 = i2;\n                bj = j2;\n                bt2 = t2;\n                brx = rx;\n                bry = ry;\n                brz = rz;\n                bGap2 = gap2;\n              }\n              if (wantTb && resid2 < rResid2 && (palRepl[i2] || palRepl[j2])) {\n                rResid2 = resid2;\n                ra2 = i2;\n                rj = j2;\n                rt2 = t2;\n                rrx = rx;\n                rry = ry;\n                rrz = rz;\n                rGap2 = gap2;\n              }\n            }\n          }\n          if (wantTb && ba2 > -1 && ra2 > -1 && !palRepl[ba2] && !palRepl[bj]) {\n            const pairF2 = Math.min(noiseFloor[ra2], noiseFloor[rj]);\n            const tol = pairF2 > 0.5 ? Math.max(4, pairF2) : 0;\n            if (tol > 0 && Math.sqrt(rResid2) <= Math.sqrt(bResid2) + tol) {\n              ba2 = ra2;\n              bj = rj;\n              bt2 = rt2;\n              brx = rrx;\n              bry = rry;\n              brz = rrz;\n              bResid2 = rResid2;\n              bGap2 = rGap2;\n            }\n          }\n          if (ba2 > -1) {\n            const pairGap = deltaE(palLab[ba2], palLab[bj]);\n            let beta = (1 - smoothstep(Math.sqrt(bResid2 / bGap2) / 0.35)) * smoothstep((pairGap - 12) / 20) * smoothstep(bt2 / 0.22) * smoothstep((1 - bt2) / 0.22);\n            if (imin !== ba2 && imin !== bj && beta > 1e-3) {\n              const C2 = palRgb[imin];\n              const dm = Math.sqrt((r2 - C2[0]) ** 2 + (g2 - C2[1]) ** 2 + (b2 - C2[2]) ** 2);\n              const A2 = palRgb[ba2], B2 = palRgb[bj];\n              const dA = Math.sqrt((r2 - A2[0]) ** 2 + (g2 - A2[1]) ** 2 + (b2 - A2[2]) ** 2);\n              const dB = Math.sqrt((r2 - B2[0]) ** 2 + (g2 - B2[1]) ** 2 + (b2 - B2[2]) ** 2);\n              const rho = dm / Math.max(1, Math.min(dA, dB));\n              let keep = false;\n              if (opts.rimInterloper && !palRepl[imin]) {\n                const stI = anchorStats[imin];\n                const tightI = stI.n ? smoothstep((nearestGap[imin] / Math.max(1, stI.p90) - 2) / 2) : 0;\n                if (tightI > 0.5 && dm > Math.max(6, 3 * (stI.p90 + 1))) keep = true;\n              }\n              if (!keep) beta *= smoothstep((rho - 0.35) / 0.35);\n            }\n            if (beta > 1e-3) {\n              const RA = outRgb[ba2], RB = outRgb[bj];\n              bary = {\n                r: RA[0] + bt2 * (RB[0] - RA[0]) + brx,\n                g: RA[1] + bt2 * (RB[1] - RA[1]) + bry,\n                b: RA[2] + bt2 * (RB[2] - RA[2]) + brz,\n                e: (1 - bt2) * eraseShare[ba2] + bt2 * eraseShare[bj],\n                beta,\n                a: ba2,\n                j: bj\n              };\n            }\n          }\n        }\n        if (imin > -1 && dmin < rampEnd[imin] && sum > 1e-9) {\n          const core = exactCore[imin];\n          const t2 = dmin <= core ? 0 : smoothstep((dmin - core) / Math.max(0.5, rampEnd[imin] - core));\n          touched = 0;\n          let s22 = 0;\n          for (let i2 = 0; i2 < k2; i2++) {\n            w2[i2] = t2 * (w2[i2] / sum) + (1 - t2) * (i2 === imin ? 1 : 0);\n            s22 += w2[i2];\n            if (palRepl[i2]) touched += w2[i2];\n          }\n          sum = s22;\n        }\n        if (globalThis.__RCDBG && globalThis.__RCDBG.has(key)) {\n          console.log(\n            \"DBG\",\n            [r2, g2, b2].join(\",\"),\n            \"imin\",\n            imin,\n            \"dmin\",\n            dmin.toFixed(1),\n            \"bary\",\n            bary ? { j: bary.j, beta: +bary.beta.toFixed(3), out: [bary.r, bary.g, bary.b].map((v2) => Math.round(v2)).join(\",\") } : null\n          );\n        }\n        const baryTouched = bary && (palRepl[bary.a] || palRepl[bary.j]) ? bary.beta : 0;\n        if ((sum < 1e-9 || touched / sum < 4e-3) && baryTouched < 4e-3) {\n          dec = false;\n        } else {\n          let oL = lab[0], oa2 = lab[1], ob = lab[2], erase = 0;\n          if (sum > 1e-9) {\n            oL = 0;\n            oa2 = 0;\n            ob = 0;\n          }\n          for (let i2 = 0; sum > 1e-9 && i2 < k2; i2++) {\n            const wi2 = w2[i2] / sum;\n            if (wi2 < 2e-3) continue;\n            const repl = palRepl[i2];\n            if (!repl) {\n              oL += wi2 * lab[0];\n              oa2 += wi2 * lab[1];\n              ob += wi2 * lab[2];\n            } else if (repl.mode === \"transparent\") {\n              erase += wi2;\n              oL += wi2 * lab[0];\n              oa2 += wi2 * lab[1];\n              ob += wi2 * lab[2];\n            } else if (repl.flatFill === true) {\n              const nl = newLab[i2];\n              oL += wi2 * nl[0];\n              oa2 += wi2 * nl[1];\n              ob += wi2 * nl[2];\n            } else {\n              const nl = newLab[i2];\n              const tl = palLab[i2];\n              const cs2 = chromaScale[i2];\n              let da2 = (lab[1] - tl[1]) * cs2, db2 = (lab[2] - tl[2]) * cs2;\n              const F2 = noiseFloor[i2];\n              if (F2 > 0.5) {\n                const m2 = Math.hypot(da2, db2);\n                let m3 = m2 * smoothstep((m2 - 0.8 * F2) / (1.6 * F2));\n                if (m3 > F2) m3 = F2 + 0.25 * (m3 - F2);\n                const f2 = m2 > 1e-6 ? m3 / m2 : 0;\n                da2 *= f2;\n                db2 *= f2;\n              }\n              oL += wi2 * (nl[0] + (lab[0] - tl[0]));\n              oa2 += wi2 * (nl[1] + da2);\n              ob += wi2 * (nl[2] + db2);\n            }\n          }\n          let eSnap = 0;\n          if (opts.noiseComp && imin > -1 && erase > 0) {\n            const rp2 = palRepl[imin];\n            const F2 = noiseFloor[imin];\n            if (rp2 && rp2.mode === \"transparent\" && F2 > 0.5) {\n              const g3 = nearestGap[imin];\n              eSnap = 1 - smoothstep((dmin - 0.22 * g3) / (0.16 * g3));\n              if (eSnap > erase) erase = eSnap;\n            }\n          }\n          const out = labToRgbGamut(oL, oa2, ob);\n          dec = { r: out[0], g: out[1], b: out[2], e: erase, eSnap, bary, loose: imin > -1 && looseAnchor[imin] };\n        }\n        memo.set(key, dec);\n        if (dec === false) continue;\n      } else if (dec === false) {\n        continue;\n      }\n      let or2 = dec.r, og = dec.g, ob2 = dec.b, oe2 = dec.e;\n      if (dec.bary) {\n        const bt2 = dec.bary.beta * spatialGate(p2);\n        if (bt2 > 1e-3) {\n          or2 = Math.max(0, Math.min(255, Math.round(or2 + bt2 * (dec.bary.r - or2))));\n          og = Math.max(0, Math.min(255, Math.round(og + bt2 * (dec.bary.g - og))));\n          ob2 = Math.max(0, Math.min(255, Math.round(ob2 + bt2 * (dec.bary.b - ob2))));\n          oe2 = oe2 + bt2 * (dec.bary.e - oe2);\n          if (dec.eSnap > oe2) oe2 = dec.eSnap;\n        }\n      }\n      data[p2] = or2;\n      data[p2 + 1] = og;\n      data[p2 + 2] = ob2;\n      if (oe2 > 0) data[p2 + 3] = Math.round(alpha * (1 - oe2));\n      if (looseMask && dec.loose) {\n        looseMask[p2 >> 2] = 1;\n        looseCount++;\n      }\n    }\n    if (looseMask && looseCount > 0) {\n      const rowW2 = width || n2 / 4;\n      const rows = n2 / 4 / rowW2 | 0;\n      const px = n2 / 4;\n      const delta = new Float32Array(px);\n      for (let i2 = 0, p2 = 0; i2 < px; i2++, p2 += 4) {\n        delta[i2] = Math.abs(data[p2] - src[p2]) + Math.abs(data[p2 + 1] - src[p2 + 1]) + Math.abs(data[p2 + 2] - src[p2 + 2]);\n      }\n      for (let i2 = 0, p2 = 0; i2 < px; i2++, p2 += 4) {\n        if (!looseMask[i2] || delta[i2] < 24) continue;\n        const x2 = i2 % rowW2, y2 = i2 / rowW2 | 0;\n        let sum2 = 0, cnt = 0;\n        for (let dy = -2; dy <= 2; dy++) {\n          const yy = y2 + dy;\n          if (yy < 0 || yy >= rows) continue;\n          for (let dx = -2; dx <= 2; dx++) {\n            if (!dx && !dy) continue;\n            const xx = x2 + dx;\n            if (xx < 0 || xx >= rowW2) continue;\n            sum2 += delta[yy * rowW2 + xx];\n            cnt++;\n          }\n        }\n        const bound = 2.5 * (sum2 / Math.max(1, cnt)) + 10;\n        if (delta[i2] > bound) {\n          const f2 = bound / delta[i2];\n          data[p2] = Math.round(src[p2] + (data[p2] - src[p2]) * f2);\n          data[p2 + 1] = Math.round(src[p2 + 1] + (data[p2 + 1] - src[p2 + 1]) * f2);\n          data[p2 + 2] = Math.round(src[p2 + 2] + (data[p2 + 2] - src[p2 + 2]) * f2);\n        }\n      }\n    }\n    if (opts.regionGuard && looseMask && looseCount > 0) {\n      const rowW2 = width || n2 / 4;\n      const rows = n2 / 4 / rowW2 | 0;\n      const px = n2 / 4;\n      const chg = new Uint8Array(px);\n      const delta2 = new Float32Array(px);\n      for (let i2 = 0, p2 = 0; i2 < px; i2++, p2 += 4) {\n        const d2 = Math.abs(data[p2] - src[p2]) + Math.abs(data[p2 + 1] - src[p2 + 1]) + Math.abs(data[p2 + 2] - src[p2 + 2]);\n        delta2[i2] = d2;\n        if (looseMask[i2] && d2 > 24) chg[i2] = 1;\n      }\n      const comp = new Int32Array(px).fill(-1);\n      const sizes = [];\n      const stack2 = [];\n      for (let i2 = 0; i2 < px; i2++) {\n        if (!chg[i2] || comp[i2] >= 0) continue;\n        const id2 = sizes.length;\n        let size2 = 0;\n        stack2.push(i2);\n        comp[i2] = id2;\n        while (stack2.length) {\n          const q2 = stack2.pop();\n          size2++;\n          const x2 = q2 % rowW2, y2 = q2 / rowW2 | 0;\n          for (let dy = -1; dy <= 1; dy++) {\n            const yy = y2 + dy;\n            if (yy < 0 || yy >= rows) continue;\n            for (let dx = -1; dx <= 1; dx++) {\n              if (!dx && !dy) continue;\n              const xx = x2 + dx;\n              if (xx < 0 || xx >= rowW2) continue;\n              const q22 = yy * rowW2 + xx;\n              if (chg[q22] && comp[q22] < 0) {\n                comp[q22] = id2;\n                stack2.push(q22);\n              }\n            }\n          }\n        }\n        sizes.push(size2);\n      }\n      let M3 = 0;\n      for (const s22 of sizes) if (s22 > M3) M3 = s22;\n      if (M3 > 400) {\n        const thresh = 0.01 * M3;\n        const factor = sizes.map((s22) => smoothstep(s22 / thresh));\n        for (let i2 = 0, p2 = 0; i2 < px; i2++, p2 += 4) {\n          if (!chg[i2]) continue;\n          const f2 = factor[comp[i2]];\n          if (f2 >= 0.999) continue;\n          data[p2] = Math.round(src[p2] + (data[p2] - src[p2]) * f2);\n          data[p2 + 1] = Math.round(src[p2 + 1] + (data[p2 + 1] - src[p2 + 1]) * f2);\n          data[p2 + 2] = Math.round(src[p2 + 2] + (data[p2 + 2] - src[p2 + 2]) * f2);\n        }\n      }\n    }\n  }\n  function extractSwatches(imageData) {\n    const data = imageData.data;\n    const px = [];\n    const stride = Math.max(1, Math.floor(data.length / 4 / 22e4)) * 4;\n    for (let p2 = 0; p2 < data.length; p2 += stride) {\n      if (data[p2 + 3] < 128) continue;\n      px.push([data[p2], data[p2 + 1], data[p2 + 2]]);\n    }\n    if (!px.length) return [];\n    {\n      const buckets = /* @__PURE__ */ new Map();\n      for (let i2 = 0; i2 < px.length; i2++) {\n        const [r2, g2, b2] = px[i2];\n        const bk = r2 >> 4 << 8 | g2 >> 4 << 4 | b2 >> 4;\n        let bkt = buckets.get(bk);\n        if (!bkt) buckets.set(bk, bkt = { count: 0, modes: /* @__PURE__ */ new Map() });\n        bkt.count++;\n        const ek = r2 << 16 | g2 << 8 | b2;\n        bkt.modes.set(ek, (bkt.modes.get(ek) || 0) + 1);\n      }\n      const sorted = [...buckets.values()].sort((a2, b2) => b2.count - a2.count);\n      const significant = sorted.filter((b2) => b2.count / px.length >= 0.01);\n      const covered = significant.reduce((s3, b2) => s3 + b2.count, 0) / px.length;\n      if (significant.length <= 24 && covered >= 0.92) {\n        const candidates = RECOLOR_V4 ? sorted.filter((b2) => b2.count / px.length >= 5e-4) : significant;\n        const clusters2 = candidates.map((b2) => {\n          let bestK = 0, bestN = -1;\n          b2.modes.forEach((nn2, k2) => {\n            if (nn2 > bestN) {\n              bestN = nn2;\n              bestK = k2;\n            }\n          });\n          return {\n            rgb: [bestK >> 16 & 255, bestK >> 8 & 255, bestK & 255],\n            count: b2.count\n          };\n        });\n        return mergeAndRank(clusters2, px.length, 0.5);\n      }\n    }\n    const boxes = [px];\n    const spread = (box) => {\n      const mins = [255, 255, 255], maxs = [0, 0, 0];\n      for (let i2 = 0; i2 < box.length; i2++)\n        for (let c2 = 0; c2 < 3; c2++) {\n          if (box[i2][c2] < mins[c2]) mins[c2] = box[i2][c2];\n          if (box[i2][c2] > maxs[c2]) maxs[c2] = box[i2][c2];\n        }\n      return maxs[0] - mins[0] + (maxs[1] - mins[1]) + (maxs[2] - mins[2]);\n    };\n    const widestChannel = (box) => {\n      const mins = [255, 255, 255], maxs = [0, 0, 0];\n      for (let i2 = 0; i2 < box.length; i2++)\n        for (let c2 = 0; c2 < 3; c2++) {\n          if (box[i2][c2] < mins[c2]) mins[c2] = box[i2][c2];\n          if (box[i2][c2] > maxs[c2]) maxs[c2] = box[i2][c2];\n        }\n      const dr2 = maxs[0] - mins[0], dg = maxs[1] - mins[1], db = maxs[2] - mins[2];\n      return dg >= dr2 && dg >= db ? 1 : dr2 >= db ? 0 : 2;\n    };\n    while (boxes.length < 32) {\n      boxes.sort((a2, b2) => spread(b2) - spread(a2));\n      const box = boxes.shift();\n      if (!box || box.length < 16 || spread(box) < 10) {\n        if (box) boxes.push(box);\n        break;\n      }\n      const ch = widestChannel(box);\n      box.sort((a2, b2) => a2[ch] - b2[ch]);\n      const mid = box.length >> 1;\n      boxes.push(box.slice(0, mid), box.slice(mid));\n    }\n    const clusters = boxes.filter((b2) => b2.length).map((box) => {\n      const counts = /* @__PURE__ */ new Map();\n      for (let i2 = 0; i2 < box.length; i2++) {\n        const k2 = box[i2][0] << 16 | box[i2][1] << 8 | box[i2][2];\n        counts.set(k2, (counts.get(k2) || 0) + 1);\n      }\n      let bestK = 0, bestN = -1;\n      counts.forEach((nn2, k2) => {\n        if (nn2 > bestN) {\n          bestN = nn2;\n          bestK = k2;\n        }\n      });\n      return { rgb: [bestK >> 16 & 255, bestK >> 8 & 255, bestK & 255], count: box.length };\n    });\n    return mergeAndRank(clusters, px.length, MIN_COVERAGE);\n  }\n  function mergeAndRank(clusters, total, minCoverage) {\n    clusters.forEach((c2) => c2.lab = rgbToLab(c2.rgb[0], c2.rgb[1], c2.rgb[2]));\n    clusters.sort((a2, b2) => b2.count - a2.count);\n    const merged = [];\n    clusters.forEach((c2) => {\n      for (let i2 = 0; i2 < merged.length; i2++) {\n        if (deltaE(c2.lab, merged[i2].lab) < MERGE_DE) {\n          merged[i2].count += c2.count;\n          return;\n        }\n      }\n      merged.push(c2);\n    });\n    merged.sort((a2, b2) => b2.count - a2.count);\n    for (let i2 = merged.length - 1; i2 > 0; i2--) {\n      const c2 = merged[i2];\n      if (c2.count / total >= 0.025) continue;\n      for (let j2 = 0; j2 < i2; j2++) {\n        const big = merged[j2];\n        if (big.count >= 4 * c2.count && deltaE(c2.lab, big.lab) < 18) {\n          big.count += c2.count;\n          merged.splice(i2, 1);\n          break;\n        }\n      }\n    }\n    for (let i2 = merged.length - 1; i2 >= 0; i2--) {\n      const c2 = merged[i2];\n      let dropped = false;\n      for (let x2 = 0; x2 < merged.length && !dropped; x2++) {\n        if (x2 === i2) continue;\n        const A2 = merged[x2];\n        if (c2.count > 0.35 * A2.count) continue;\n        for (let y2 = x2 + 1; y2 < merged.length; y2++) {\n          if (y2 === i2) continue;\n          const B2 = merged[y2];\n          if (c2.count > 0.35 * B2.count) continue;\n          const dx = B2.rgb[0] - A2.rgb[0], dy = B2.rgb[1] - A2.rgb[1], dz = B2.rgb[2] - A2.rgb[2];\n          const gap2 = dx * dx + dy * dy + dz * dz;\n          if (gap2 < 900) continue;\n          const px2 = c2.rgb[0] - A2.rgb[0], py = c2.rgb[1] - A2.rgb[1], pz = c2.rgb[2] - A2.rgb[2];\n          const t2 = (px2 * dx + py * dy + pz * dz) / gap2;\n          if (t2 < 0.12 || t2 > 0.88) continue;\n          const rx = px2 - t2 * dx, ry = py - t2 * dy, rz = pz - t2 * dz;\n          const resid2 = rx * rx + ry * ry + rz * rz;\n          if (resid2 / gap2 > 0.0225 || resid2 > 196) continue;\n          A2.count += Math.round(c2.count * (1 - t2));\n          B2.count += Math.round(c2.count * t2);\n          merged.splice(i2, 1);\n          dropped = true;\n          break;\n        }\n      }\n    }\n    let out = merged.map((c2) => ({\n      hex: rgbToHex(c2.rgb[0], c2.rgb[1], c2.rgb[2]),\n      coveragePercent: Math.round(c2.count / total * 1e3) / 10\n    })).sort((a2, b2) => b2.coveragePercent - a2.coveragePercent);\n    out = out.filter((s3, i2) => i2 === 0 || s3.coveragePercent >= minCoverage);\n    return out.slice(0, MAX_SWATCHES);\n  }\n  function detectImageColors(el2) {\n    const w2 = el2.naturalWidth || el2.width, h2 = el2.naturalHeight || el2.height;\n    const scale = Math.min(1, 420 / Math.max(w2, h2));\n    const c2 = document.createElement(\"canvas\");\n    c2.width = Math.max(1, Math.round(w2 * scale));\n    c2.height = Math.max(1, Math.round(h2 * scale));\n    const ctx = c2.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(el2, 0, 0, c2.width, c2.height);\n    return extractSwatches(ctx.getImageData(0, 0, c2.width, c2.height));\n  }\n  function recolorElement(el2, replacements, palette) {\n    const w2 = el2.naturalWidth || el2.width, h2 = el2.naturalHeight || el2.height;\n    const c2 = document.createElement(\"canvas\");\n    c2.width = w2;\n    c2.height = h2;\n    const ctx = c2.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(el2, 0, 0);\n    const id = ctx.getImageData(0, 0, w2, h2);\n    applyColorReplacements(id.data, replacements, palette, id.width);\n    ctx.putImageData(id, 0, 0);\n    return c2;\n  }\n\n  // src/filters.js\n  var R2 = (key, label, css, overlays, extra) => Object.assign({ key, label, params: Object.assign({ css: css || \"\", overlays: overlays || [] }, extra || {}) });\n  var FILTERS = [\n    { key: \"original\", label: \"Original\", params: null },\n    // \u2500\u2500 Instagram-style looks (CSSgram ports) \u2500\u2500\n    R2(\"clarendon\", \"Clarendon\", \"contrast(1.2) saturate(1.35)\", [[\"rgba(127,187,227,.2)\", \"overlay\", 1]]),\n    R2(\"juno\", \"Juno\", \"sepia(.35) contrast(1.15) brightness(1.15) saturate(1.8)\", [[\"rgba(127,187,227,.2)\", \"overlay\", 1]]),\n    R2(\"lark\", \"Lark\", \"contrast(.9)\", [[\"#22253f\", \"color-dodge\", 1], [\"rgba(242,242,242,.8)\", \"darken\", 1]]),\n    R2(\"gingham\", \"Gingham\", \"brightness(1.05) hue-rotate(-10deg)\", [[\"rgb(230,230,250)\", \"soft-light\", 1]]),\n    R2(\"reyes\", \"Reyes\", \"sepia(.22) brightness(1.1) contrast(.85) saturate(.75)\", [[\"#efcdad\", \"soft-light\", 0.5]]),\n    R2(\"moon\", \"Moon\", \"grayscale(1) contrast(1.1) brightness(1.1)\", [[\"#a0a0a0\", \"soft-light\", 1], [\"#383838\", \"lighten\", 1]]),\n    R2(\"valencia\", \"Valencia\", \"contrast(1.08) brightness(1.08) sepia(.08)\", [[\"rgba(58,3,57,.5)\", \"exclusion\", 1]]),\n    R2(\"nashville\", \"Nashville\", \"sepia(.2) contrast(1.2) brightness(1.05) saturate(1.2)\", [[\"rgba(247,176,153,.56)\", \"darken\", 1], [\"rgba(0,70,150,.4)\", \"lighten\", 1]]),\n    R2(\"slumber\", \"Slumber\", \"saturate(.66) brightness(1.05)\", [[\"rgba(69,41,12,.4)\", \"lighten\", 1], [\"rgba(125,105,24,.5)\", \"soft-light\", 1]]),\n    R2(\"crema\", \"Crema\", \"sepia(.5) contrast(1.25) brightness(1.15) saturate(.9) hue-rotate(-2deg)\", [[\"rgba(125,105,24,.2)\", \"multiply\", 1]]),\n    R2(\"ludwig\", \"Ludwig\", \"sepia(.25) contrast(1.05) brightness(1.05) saturate(2)\", [[\"rgba(125,105,24,.1)\", \"overlay\", 1]]),\n    R2(\"aden\", \"Aden\", \"hue-rotate(-20deg) contrast(.9) saturate(.85) brightness(1.2)\", [[\"linear:rgba(66,10,14,.2)|rgba(66,10,14,0)\", \"darken\", 1]]),\n    R2(\"perpetua\", \"Perpetua\", \"\", [[\"linearv:#005b9a|#e6c13d\", \"soft-light\", 0.5]]),\n    R2(\"mayfair\", \"Mayfair\", \"contrast(1.1) saturate(1.1)\", [[\"radial:rgba(255,255,255,.8)|rgba(255,200,200,.6)|#111\", \"overlay\", 0.4]]),\n    R2(\"rise\", \"Rise\", \"brightness(1.05) sepia(.2) contrast(.9) saturate(.9)\", [[\"radial:rgba(236,205,169,.15)|rgba(50,30,7,.4)\", \"multiply\", 1], [\"radial:rgba(232,180,130,.8)|rgba(232,180,130,0)\", \"overlay\", 0.6]]),\n    R2(\"hudson\", \"Hudson\", \"brightness(1.2) contrast(.9) saturate(1.1)\", [[\"radial:#a6b1ff|#342134\", \"multiply\", 0.5]]),\n    R2(\"xpro2\", \"X-Pro II\", \"sepia(.3)\", [[\"radial:#e6e7e0|rgba(43,42,161,.6)\", \"color-burn\", 1]]),\n    R2(\"sierra\", \"Sierra\", \"sepia(.25) contrast(1.5) brightness(.9) hue-rotate(-15deg)\", [[\"radial:rgba(128,78,15,.5)|rgba(0,0,0,.65)\", \"screen\", 1]]),\n    R2(\"willow\", \"Willow\", \"grayscale(.5) contrast(.95) brightness(.9)\", [[\"radial:#d4a9af|#000\", \"overlay\", 1]]),\n    R2(\"lofi\", \"Lo-Fi\", \"saturate(1.1) contrast(1.5)\", [[\"radial:rgba(0,0,0,0)|#222\", \"multiply\", 1]]),\n    R2(\"inkwell\", \"Inkwell\", \"sepia(.3) contrast(1.1) brightness(1.1) grayscale(1)\", []),\n    R2(\"toaster\", \"Toaster\", \"contrast(1.5) brightness(.9)\", [[\"radial:#804e0f|#3b003b\", \"screen\", 1]]),\n    R2(\"walden\", \"Walden\", \"brightness(1.1) hue-rotate(-10deg) sepia(.3) saturate(1.6)\", [[\"#0044cc\", \"screen\", 0.3]]),\n    R2(\"y1977\", \"1977\", \"contrast(1.1) brightness(1.1) saturate(1.3)\", [[\"rgba(243,106,188,.3)\", \"screen\", 1]]),\n    R2(\"kelvin\", \"Kelvin\", \"\", [[\"#382c34\", \"color-dodge\", 1], [\"#b77d21\", \"overlay\", 1]]),\n    R2(\"brannan\", \"Brannan\", \"sepia(.5) contrast(1.4)\", [[\"rgba(161,44,199,.31)\", \"lighten\", 1]]),\n    R2(\"earlybird\", \"Earlybird\", \"contrast(.9) sepia(.2)\", [[\"radial:#d0ba8e|#360309|#1d0210\", \"overlay\", 1]]),\n    R2(\"stinson\", \"Stinson\", \"contrast(.75) saturate(.85) brightness(1.15)\", [[\"rgba(240,149,128,.2)\", \"soft-light\", 1]]),\n    // \u2500\u2500 Utilities (kept from the original set \u2014 same keys, so saved designs restore) \u2500\u2500\n    R2(\"bw\", \"Black & White\", \"grayscale(1)\", []),\n    R2(\"sepia\", \"Sepia\", \"sepia(.8)\", []),\n    R2(\"fade\", \"Fade\", \"saturate(.65) contrast(.85) brightness(1.08)\", []),\n    R2(\"vivid\", \"Vivid\", \"saturate(1.4) contrast(1.12)\", []),\n    R2(\"cool\", \"Cool\", \"hue-rotate(15deg) saturate(1.1)\", []),\n    R2(\"warm\", \"Warm\", \"hue-rotate(-10deg) saturate(1.15) brightness(1.05)\", []),\n    R2(\"fuchsia\", \"Fuchsia\", \"\", [], { mono: \"C724B1\" }),\n    R2(\"duotone\", \"Duotone\", \"\", [], { duo: [\"003087\", \"00C5FF\"], duoAlpha: 1 })\n  ];\n  function fromImgixParams(params) {\n    if (!params) return null;\n    const css = [];\n    const r2 = { css: \"\", overlays: [] };\n    for (const pair of String(params).split(\"&\")) {\n      const i2 = pair.indexOf(\"=\");\n      const k2 = pair.slice(0, i2);\n      const v2 = pair.slice(i2 + 1);\n      const n2 = Number(v2);\n      if (k2 === \"sat\") css.push(\"saturate(\" + Math.max(0, 1 + n2 / 100) + \")\");\n      else if (k2 === \"con\") css.push(\"contrast(\" + Math.max(0, 1 + n2 / 100) + \")\");\n      else if (k2 === \"bri\" || k2 === \"exp\") css.push(\"brightness(\" + Math.max(0, 1 + n2 / 100) + \")\");\n      else if (k2 === \"sepia\") css.push(\"sepia(\" + Math.max(0, Math.min(1, n2 / 100)) + \")\");\n      else if (k2 === \"hue\") css.push(\"hue-rotate(\" + n2 + \"deg)\");\n      else if (k2 === \"vib\") css.push(\"saturate(\" + Math.max(0, 1 + n2 / 150) + \")\");\n      else if (k2 === \"monochrome\") r2.mono = v2.length === 8 ? v2.slice(2) : v2;\n      else if (k2 === \"duotone\") r2.duo = v2.split(\",\");\n      else if (k2 === \"duotone-alpha\") r2.duoAlpha = Math.max(0, Math.min(1, n2 / 100));\n    }\n    r2.css = css.join(\" \");\n    return r2;\n  }\n  var I2 = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n  var mul = (a2, b2) => {\n    const o2 = new Array(20).fill(0);\n    for (let r2 = 0; r2 < 4; r2++) for (let c2 = 0; c2 < 5; c2++) {\n      let s3 = 0;\n      for (let k2 = 0; k2 < 4; k2++) s3 += a2[r2 * 5 + k2] * b2[k2 * 5 + c2];\n      if (c2 === 4) s3 += a2[r2 * 5 + 4];\n      o2[r2 * 5 + c2] = s3;\n    }\n    return o2;\n  };\n  var MAT = {\n    saturate: (s3) => [0.213 + 0.787 * s3, 0.715 - 0.715 * s3, 0.072 - 0.072 * s3, 0, 0, 0.213 - 0.213 * s3, 0.715 + 0.285 * s3, 0.072 - 0.072 * s3, 0, 0, 0.213 - 0.213 * s3, 0.715 - 0.715 * s3, 0.072 + 0.928 * s3, 0, 0, 0, 0, 0, 1, 0],\n    grayscale: (a2) => MAT.saturate(1 - a2),\n    sepia: (a2) => {\n      const t2 = 1 - a2;\n      return [0.393 + 0.607 * t2, 0.769 - 0.769 * t2, 0.189 - 0.189 * t2, 0, 0, 0.349 - 0.349 * t2, 0.686 + 0.314 * t2, 0.168 - 0.168 * t2, 0, 0, 0.272 - 0.272 * t2, 0.534 - 0.534 * t2, 0.131 + 0.869 * t2, 0, 0, 0, 0, 0, 1, 0];\n    },\n    brightness: (b2) => [b2, 0, 0, 0, 0, 0, b2, 0, 0, 0, 0, 0, b2, 0, 0, 0, 0, 0, 1, 0],\n    contrast: (c2) => {\n      const o2 = (1 - c2) / 2;\n      return [c2, 0, 0, 0, o2, 0, c2, 0, 0, o2, 0, 0, c2, 0, o2, 0, 0, 0, 1, 0];\n    },\n    hue: (deg) => {\n      const a2 = deg * Math.PI / 180, c2 = Math.cos(a2), s3 = Math.sin(a2);\n      return [0.213 + c2 * 0.787 - s3 * 0.213, 0.715 - c2 * 0.715 - s3 * 0.715, 0.072 - c2 * 0.072 + s3 * 0.928, 0, 0, 0.213 - c2 * 0.213 + s3 * 0.143, 0.715 + c2 * 0.285 + s3 * 0.14, 0.072 - c2 * 0.072 - s3 * 0.283, 0, 0, 0.213 - c2 * 0.213 - s3 * 0.787, 0.715 - c2 * 0.715 + s3 * 0.715, 0.072 + c2 * 0.928 + s3 * 0.072, 0, 0, 0, 0, 0, 1, 0];\n    }\n  };\n  function chainMatrix(css, t2) {\n    let m = I2, any = false;\n    const re2 = /([a-z-]+)\\(([^)]+)\\)/g;\n    let x2;\n    while (x2 = re2.exec(css || \"\")) {\n      const f2 = x2[1], v2 = parseFloat(x2[2]);\n      let mm = null;\n      if (f2 === \"saturate\") mm = MAT.saturate(1 + (v2 - 1) * t2);\n      else if (f2 === \"grayscale\") mm = MAT.grayscale(v2 * t2);\n      else if (f2 === \"sepia\") mm = MAT.sepia(v2 * t2);\n      else if (f2 === \"brightness\") mm = MAT.brightness(1 + (v2 - 1) * t2);\n      else if (f2 === \"contrast\") mm = MAT.contrast(1 + (v2 - 1) * t2);\n      else if (f2 === \"hue-rotate\") mm = MAT.hue(v2 * t2);\n      if (mm) {\n        m = mul(mm, m);\n        any = true;\n      }\n    }\n    return any ? m : null;\n  }\n  function applyMatrix(d2, m) {\n    const m0 = m[0], m1 = m[1], m2 = m[2], m4 = m[4] * 255, m5 = m[5], m6 = m[6], m7 = m[7], m9 = m[9] * 255, m10 = m[10], m11 = m[11], m12 = m[12], m14 = m[14] * 255;\n    for (let i2 = 0; i2 < d2.length; i2 += 4) {\n      if (!d2[i2 + 3]) continue;\n      const r2 = d2[i2], g2 = d2[i2 + 1], b2 = d2[i2 + 2];\n      d2[i2] = m0 * r2 + m1 * g2 + m2 * b2 + m4;\n      d2[i2 + 1] = m5 * r2 + m6 * g2 + m7 * b2 + m9;\n      d2[i2 + 2] = m10 * r2 + m11 * g2 + m12 * b2 + m14;\n    }\n  }\n  var hex = (s3) => [parseInt(s3.slice(0, 2), 16), parseInt(s3.slice(2, 4), 16), parseInt(s3.slice(4, 6), 16)];\n  function lumMap(d2, A2, B2, t2) {\n    for (let i2 = 0; i2 < d2.length; i2 += 4) {\n      if (!d2[i2 + 3]) continue;\n      const lum = (d2[i2] * 0.299 + d2[i2 + 1] * 0.587 + d2[i2 + 2] * 0.114) / 255;\n      d2[i2] += t2 * (A2[0] + lum * (B2[0] - A2[0]) - d2[i2]);\n      d2[i2 + 1] += t2 * (A2[1] + lum * (B2[1] - A2[1]) - d2[i2 + 1]);\n      d2[i2 + 2] += t2 * (A2[2] + lum * (B2[2] - A2[2]) - d2[i2 + 2]);\n    }\n  }\n  function fillFor(ctx, w2, h2, spec) {\n    const stops = (list, g2) => {\n      const st2 = list.split(\"|\");\n      st2.forEach((c2, i2) => g2.addColorStop(st2.length === 1 ? 0 : i2 / (st2.length - 1), c2));\n      return g2;\n    };\n    if (spec.startsWith(\"radial:\")) return stops(spec.slice(7), ctx.createRadialGradient(w2 / 2, h2 / 2, 0, w2 / 2, h2 / 2, Math.hypot(w2, h2) / 2));\n    if (spec.startsWith(\"linearv:\")) return stops(spec.slice(8), ctx.createLinearGradient(0, 0, 0, h2));\n    if (spec.startsWith(\"linear:\")) return stops(spec.slice(7), ctx.createLinearGradient(0, 0, w2, 0));\n    return spec;\n  }\n  function applyPresetToCanvas(el2, recipe, strength) {\n    const r2 = typeof recipe === \"string\" ? fromImgixParams(recipe) : recipe;\n    if (!r2) return el2;\n    const t2 = Math.max(0, Math.min(100, strength == null ? 100 : strength)) / 100;\n    if (t2 === 0) return el2;\n    const w2 = el2.naturalWidth || el2.width;\n    const h2 = el2.naturalHeight || el2.height;\n    const out = document.createElement(\"canvas\");\n    out.width = w2;\n    out.height = h2;\n    const ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(el2, 0, 0);\n    const m = chainMatrix(r2.css, t2);\n    const needPixels = m || r2.duo || r2.mono;\n    if (needPixels) {\n      const id = ctx.getImageData(0, 0, w2, h2);\n      if (m) applyMatrix(id.data, m);\n      if (r2.duo) lumMap(id.data, hex(r2.duo[0]), hex(r2.duo[1]), t2 * (r2.duoAlpha == null ? 1 : r2.duoAlpha));\n      else if (r2.mono) lumMap(id.data, [0, 0, 0], hex(r2.mono), t2);\n      ctx.putImageData(id, 0, 0);\n    }\n    const overlays = r2.overlays || [];\n    for (const [spec, blend, opacity] of overlays) {\n      ctx.save();\n      ctx.globalCompositeOperation = blend || \"source-over\";\n      ctx.globalAlpha = (opacity == null ? 1 : opacity) * t2;\n      ctx.fillStyle = fillFor(ctx, w2, h2, spec);\n      ctx.fillRect(0, 0, w2, h2);\n      ctx.restore();\n    }\n    if (overlays.length) {\n      ctx.save();\n      ctx.globalCompositeOperation = \"destination-in\";\n      ctx.drawImage(el2, 0, 0);\n      ctx.restore();\n    }\n    return out;\n  }\n\n  // src/elements.js\n  var fmt = (n2) => {\n    const r2 = Math.round(n2 * 100) / 100;\n    return Object.is(r2, -0) ? 0 : r2;\n  };\n  function regularPolygon(n2, rotDeg, w2, h2) {\n    const raw = [];\n    for (let i2 = 0; i2 < n2; i2++) {\n      const a2 = (rotDeg + 360 / n2 * i2) * Math.PI / 180;\n      raw.push({ x: Math.cos(a2), y: Math.sin(a2) });\n    }\n    let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n    for (const p2 of raw) {\n      minX = Math.min(minX, p2.x);\n      maxX = Math.max(maxX, p2.x);\n      minY = Math.min(minY, p2.y);\n      maxY = Math.max(maxY, p2.y);\n    }\n    const sx = w2 / (maxX - minX), sy = h2 / (maxY - minY);\n    return raw.map((p2) => ({ x: (p2.x - minX) * sx, y: (p2.y - minY) * sy }));\n  }\n  function starPoints(spikes, inner, w2, h2) {\n    const raw = [];\n    for (let i2 = 0; i2 < spikes * 2; i2++) {\n      const r2 = i2 % 2 === 0 ? 1 : inner;\n      const a2 = Math.PI / spikes * i2 - Math.PI / 2;\n      raw.push({ x: r2 * Math.cos(a2), y: r2 * Math.sin(a2) });\n    }\n    let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n    for (const p2 of raw) {\n      minX = Math.min(minX, p2.x);\n      maxX = Math.max(maxX, p2.x);\n      minY = Math.min(minY, p2.y);\n      maxY = Math.max(maxY, p2.y);\n    }\n    const sx = w2 / (maxX - minX), sy = h2 / (maxY - minY);\n    return raw.map((p2) => ({ x: (p2.x - minX) * sx, y: (p2.y - minY) * sy }));\n  }\n  function roundedPolygonPath(pts, round) {\n    const n2 = pts.length;\n    if (!round || round <= 0) {\n      let d3 = \"\";\n      for (let i2 = 0; i2 < n2; i2++) d3 += (i2 ? \"L\" : \"M\") + fmt(pts[i2].x) + \" \" + fmt(pts[i2].y);\n      return d3 + \"Z\";\n    }\n    const seg = [];\n    for (let i2 = 0; i2 < n2; i2++) {\n      const prev = pts[(i2 - 1 + n2) % n2], cur = pts[i2], next = pts[(i2 + 1) % n2];\n      let ax = prev.x - cur.x, ay = prev.y - cur.y;\n      let bx = next.x - cur.x, by = next.y - cur.y;\n      const lenA = Math.hypot(ax, ay) || 1, lenB = Math.hypot(bx, by) || 1;\n      ax /= lenA;\n      ay /= lenA;\n      bx /= lenB;\n      by /= lenB;\n      const trim = round / 100 * (Math.min(lenA, lenB) / 2);\n      const cos = Math.max(-1, Math.min(1, ax * bx + ay * by));\n      const theta = Math.acos(cos);\n      if (theta > Math.PI - 0.01 || trim < 0.01) {\n        seg.push({ pA: cur, pB: cur, r: 0 });\n        continue;\n      }\n      const r2 = trim * Math.tan(theta / 2);\n      const cross = (cur.x - prev.x) * (next.y - cur.y) - (cur.y - prev.y) * (next.x - cur.x);\n      seg.push({\n        pA: { x: cur.x + ax * trim, y: cur.y + ay * trim },\n        // approach point (on edge to prev)\n        pB: { x: cur.x + bx * trim, y: cur.y + by * trim },\n        // exit point (on edge to next)\n        r: r2,\n        sweep: cross > 0 ? 1 : 0\n      });\n    }\n    let d2 = \"M\" + fmt(seg[0].pB.x) + \" \" + fmt(seg[0].pB.y);\n    for (let i2 = 1; i2 <= n2; i2++) {\n      const s3 = seg[i2 % n2];\n      d2 += \"L\" + fmt(s3.pA.x) + \" \" + fmt(s3.pA.y);\n      if (s3.r > 0) d2 += \"A\" + fmt(s3.r) + \" \" + fmt(s3.r) + \" 0 0 \" + s3.sweep + \" \" + fmt(s3.pB.x) + \" \" + fmt(s3.pB.y);\n    }\n    return d2 + \"Z\";\n  }\n  function ellipsePath(w2, h2) {\n    const rx = w2 / 2, ry = h2 / 2;\n    return \"M0 \" + fmt(ry) + \"A\" + fmt(rx) + \" \" + fmt(ry) + \" 0 1 1 \" + fmt(w2) + \" \" + fmt(ry) + \"A\" + fmt(rx) + \" \" + fmt(ry) + \" 0 1 1 0 \" + fmt(ry) + \"Z\";\n  }\n  var HEART_ABS = [\n    12,\n    19.7,\n    // M\n    6.6,\n    15.5,\n    3.5,\n    12.2,\n    3.5,\n    8.9,\n    3.5,\n    6.4,\n    5.4,\n    4.5,\n    7.8,\n    4.5,\n    9.5,\n    4.5,\n    11.1,\n    5.5,\n    12,\n    7.1,\n    12.9,\n    5.5,\n    14.5,\n    4.5,\n    16.2,\n    4.5,\n    18.6,\n    4.5,\n    20.5,\n    6.4,\n    20.5,\n    8.9,\n    20.5,\n    12.2,\n    17.4,\n    15.5,\n    12,\n    19.7\n  ];\n  function heartPath(w2, h2) {\n    const x0 = 3.5, y0 = 4.5, sx = w2 / 17, sy = h2 / 15.2;\n    const P2 = (i2) => fmt((HEART_ABS[i2] - x0) * sx) + \" \" + fmt((HEART_ABS[i2 + 1] - y0) * sy);\n    let d2 = \"M\" + P2(0);\n    for (let i2 = 2; i2 < HEART_ABS.length; i2 += 6) d2 += \"C\" + P2(i2) + \" \" + P2(i2 + 2) + \" \" + P2(i2 + 4);\n    return d2 + \"Z\";\n  }\n  var ELEMENTS = {\n    square: {\n      label: \"Square\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath([{ x: 0, y: 0 }, { x: p2.w, y: 0 }, { x: p2.w, y: p2.h }, { x: 0, y: p2.h }], p2.round)\n    },\n    rounded: {\n      label: \"Rounded\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      defaults: { round: 36 },\n      // \u2248 the old rx = 0.18\u00B7S on a square\n      build: (p2) => roundedPolygonPath([{ x: 0, y: 0 }, { x: p2.w, y: 0 }, { x: p2.w, y: p2.h }, { x: 0, y: p2.h }], p2.round)\n    },\n    circle: {\n      label: \"Circle\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, stretch: true },\n      build: (p2) => ellipsePath(p2.w, p2.h)\n    },\n    triangle: {\n      label: \"Triangle\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath([{ x: p2.w / 2, y: 0 }, { x: p2.w, y: p2.h }, { x: 0, y: p2.h }], p2.round)\n    },\n    star: {\n      label: \"Star\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      aspect: 0.951,\n      // natural 5-point star h/w (1.809/1.902) \u2014 matches the old Polygon\n      build: (p2) => roundedPolygonPath(starPoints(5, 0.42, p2.w, p2.h), p2.round)\n    },\n    heart: {\n      label: \"Heart\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, stretch: true },\n      aspect: 0.894,\n      // the 24-box glyph's natural h/w (15.2/17)\n      build: (p2) => heartPath(p2.w, p2.h)\n    },\n    // P1 catalog wave (plan \u00A71): the registry + options engine make each new\n    // shape one entry \u2014 geometry, tile glyph and every edit option come free.\n    diamond: {\n      label: \"Diamond\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath([\n        { x: p2.w / 2, y: 0 },\n        { x: p2.w, y: p2.h / 2 },\n        { x: p2.w / 2, y: p2.h },\n        { x: 0, y: p2.h / 2 }\n      ], p2.round)\n    },\n    pentagon: {\n      label: \"Pentagon\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath(regularPolygon(5, -90, p2.w, p2.h), p2.round)\n    },\n    hexagon: {\n      label: \"Hexagon\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath(regularPolygon(6, 0, p2.w, p2.h), p2.round)\n      // flat-top\n    },\n    octagon: {\n      label: \"Octagon\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => roundedPolygonPath(regularPolygon(8, 22.5, p2.w, p2.h), p2.round)\n      // stop-sign\n    },\n    semicircle: {\n      label: \"Half circle\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, stretch: true },\n      aspect: 0.5,\n      build: (p2) => \"M0 \" + fmt(p2.h) + \"A\" + fmt(p2.w / 2) + \" \" + fmt(p2.h) + \" 0 0 1 \" + fmt(p2.w) + \" \" + fmt(p2.h) + \"Z\"\n    },\n    quarter: {\n      label: \"Quarter\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, stretch: true },\n      build: (p2) => \"M0 \" + fmt(p2.h) + \"L0 0A\" + fmt(p2.w) + \" \" + fmt(p2.h) + \" 0 0 1 \" + fmt(p2.w) + \" \" + fmt(p2.h) + \"Z\"\n    },\n    plus: {\n      label: \"Plus\",\n      group: \"shapes\",\n      caps: { fill: true, border: true, corners: true, stretch: true },\n      build: (p2) => {\n        const a2 = 0.335, b2 = 0.665;\n        const P2 = (fx, fy) => ({ x: fx * p2.w, y: fy * p2.h });\n        return roundedPolygonPath([\n          P2(a2, 0),\n          P2(b2, 0),\n          P2(b2, a2),\n          P2(1, a2),\n          P2(1, b2),\n          P2(b2, b2),\n          P2(b2, 1),\n          P2(a2, 1),\n          P2(a2, b2),\n          P2(0, b2),\n          P2(0, a2),\n          P2(a2, a2)\n        ], p2.round);\n      }\n    },\n    // Lines (parametric assemblies \u2014 geometry built in editor.js from these\n    // defaults; the registry rows drive the tiles + default caps). All ONE\n    // element (kind stays what was placed; caps are per-end params).\n    line: {\n      label: \"Line\",\n      group: \"lines\",\n      isLine: true,\n      caps: { ends: true, weight: true, dash: true },\n      defaults: { weight: 9, dash: \"solid\", capStart: \"none\", capEnd: \"none\" }\n    },\n    arrow: {\n      label: \"Arrow\",\n      group: \"lines\",\n      isLine: true,\n      caps: { ends: true, weight: true, dash: true },\n      defaults: { weight: 9, dash: \"solid\", capStart: \"none\", capEnd: \"arrow\" }\n    },\n    arrowBoth: {\n      label: \"Double arrow\",\n      group: \"lines\",\n      isLine: true,\n      caps: { ends: true, weight: true, dash: true },\n      defaults: { weight: 9, dash: \"solid\", capStart: \"arrow\", capEnd: \"arrow\" }\n    }\n  };\n  function lineCapPath(kind, endX, dir, w2) {\n    if (kind === \"arrow\") {\n      const L2 = 3.1 * w2, W2 = 1.85 * w2;\n      return \"M\" + fmt(endX) + \" 0L\" + fmt(endX - dir * L2) + \" \" + fmt(-W2) + \"L\" + fmt(endX - dir * L2) + \" \" + fmt(W2) + \"Z\";\n    }\n    if (kind === \"bar\") {\n      const t2 = 0.95 * w2, H2 = 1.8 * w2;\n      return \"M\" + fmt(endX - t2 / 2) + \" \" + fmt(-H2) + \"L\" + fmt(endX + t2 / 2) + \" \" + fmt(-H2) + \"L\" + fmt(endX + t2 / 2) + \" \" + fmt(H2) + \"L\" + fmt(endX - t2 / 2) + \" \" + fmt(H2) + \"Z\";\n    }\n    if (kind === \"dot\") {\n      const r2 = 1.5 * w2;\n      return \"M\" + fmt(endX - r2) + \" 0A\" + fmt(r2) + \" \" + fmt(r2) + \" 0 1 1 \" + fmt(endX + r2) + \" 0A\" + fmt(r2) + \" \" + fmt(r2) + \" 0 1 1 \" + fmt(endX - r2) + \" 0Z\";\n    }\n    return null;\n  }\n  function lineCapInset(kind, w2) {\n    if (kind === \"arrow\") return 2.4 * w2;\n    if (kind === \"bar\") return 0.5 * w2;\n    if (kind === \"dot\") return 1.2 * w2;\n    return 0;\n  }\n  var DEFAULT_EL_PARAMS = (kind) => Object.assign({ round: 0 }, ELEMENTS[kind] && ELEMENTS[kind].defaults || {});\n  function buildElementPath(kind, params) {\n    const def = ELEMENTS[kind];\n    if (!def || !def.build) return null;\n    return def.build(Object.assign({ w: 100, h: 100, round: 0 }, params));\n  }\n  function elementGlyphSvg(kind) {\n    const def = ELEMENTS[kind];\n    if (!def) return \"\";\n    if (def.isLine) {\n      return '<svg width=\"26\" height=\"26\" viewBox=\"-10 -10 120 120\" fill=\"none\">' + lineGlyphInner(def.defaults || {}) + \"</svg>\";\n    }\n    const h2 = 100 * (def.aspect || 1);\n    const d2 = buildElementPath(kind, Object.assign({ w: 100, h: h2 }, DEFAULT_EL_PARAMS(kind)));\n    return '<svg width=\"26\" height=\"26\" viewBox=\"-10 -10 120 120\" fill=\"none\"><path d=\"' + d2 + '\" transform=\"translate(0 ' + fmt((100 - h2) / 2) + ')\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/></svg>';\n  }\n  function lineGlyphInner(defs) {\n    const a2 = { x: 8, y: 92 }, b2 = { x: 92, y: 8 };\n    let inner = '<path d=\"M' + a2.x + \" \" + a2.y + \"L\" + b2.x + \" \" + b2.y + '\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\"/>';\n    const ang = Math.atan2(b2.y - a2.y, b2.x - a2.x);\n    const cap = (p2, dir, kind) => {\n      if (kind === \"arrow\") {\n        const L2 = 26, Wd = 16;\n        const bx = p2.x - Math.cos(dir) * L2, by = p2.y - Math.sin(dir) * L2;\n        const px = -Math.sin(dir) * Wd, py = Math.cos(dir) * Wd;\n        return '<path d=\"M' + fmt(p2.x) + \" \" + fmt(p2.y) + \"L\" + fmt(bx + px) + \" \" + fmt(by + py) + \"L\" + fmt(bx - px) + \" \" + fmt(by - py) + 'Z\" fill=\"currentColor\"/>';\n      }\n      if (kind === \"bar\") {\n        const px = -Math.sin(dir) * 16, py = Math.cos(dir) * 16;\n        return '<path d=\"M' + fmt(p2.x + px) + \" \" + fmt(p2.y + py) + \"L\" + fmt(p2.x - px) + \" \" + fmt(p2.y - py) + '\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\"/>';\n      }\n      if (kind === \"dot\") return '<circle cx=\"' + fmt(p2.x) + '\" cy=\"' + fmt(p2.y) + '\" r=\"12\" fill=\"currentColor\"/>';\n      return \"\";\n    };\n    inner += cap(a2, ang + Math.PI, defs.capStart);\n    inner += cap(b2, ang, defs.capEnd);\n    return inner;\n  }\n\n  // src/adjust-filters.js\n  var fragmentSource = `\n  precision highp float;\n  uniform sampler2D uTexture;\n  uniform float uHi;\n  uniform float uSh;\n  uniform float uWh;\n  uniform float uBl;\n  uniform float uClar;\n  varying vec2 vTexCoord;\n  void main() {\n    vec4 color = texture2D(uTexture, vTexCoord);\n    vec3 c = color.rgb;\n    float lum = dot(c, vec3(0.299, 0.587, 0.114));\n    c += uSh * (1.0 - smoothstep(0.0, 0.55, lum)) * 0.35;\n    c *= 1.0 + uHi * smoothstep(0.45, 1.0, lum) * 0.7;\n    float bp = -0.25 * uBl;\n    c = (c - bp) / max(0.05, 1.0 - bp);\n    c /= max(0.05, 1.0 - 0.25 * uWh);\n    float mid = 1.0 - abs(2.0 * lum - 1.0);\n    c = mix(c, (c - 0.5) * (1.0 + uClar * 0.6) + 0.5, mid);\n    gl_FragColor = vec4(clamp(c, 0.0, 1.0), color.a);\n  }\n`;\n  var sstep = (a2, b2, x2) => {\n    const t2 = Math.min(1, Math.max(0, (x2 - a2) / (b2 - a2)));\n    return t2 * t2 * (3 - 2 * t2);\n  };\n  var NinjaTone = class extends Cc.BaseFilter {\n    getFragmentSource() {\n      return fragmentSource;\n    }\n    applyTo2d({ imageData: { data } }) {\n      const { hi: hi2, sh, wh, bl, clar } = this;\n      const bp = -0.25 * bl;\n      const bpDiv = Math.max(0.05, 1 - bp);\n      const wpDiv = Math.max(0.05, 1 - 0.25 * wh);\n      for (let i2 = 0; i2 < data.length; i2 += 4) {\n        let r2 = data[i2] / 255, g2 = data[i2 + 1] / 255, b2 = data[i2 + 2] / 255;\n        const lum = r2 * 0.299 + g2 * 0.587 + b2 * 0.114;\n        const lift = sh * (1 - sstep(0, 0.55, lum)) * 0.35;\n        const gain = 1 + hi2 * sstep(0.45, 1, lum) * 0.7;\n        const mid = 1 - Math.abs(2 * lum - 1);\n        const tone = (v2) => {\n          v2 = (v2 + lift) * gain;\n          v2 = (v2 - bp) / bpDiv;\n          v2 = v2 / wpDiv;\n          v2 = v2 + ((v2 - 0.5) * (1 + clar * 0.6) + 0.5 - v2) * mid;\n          return Math.min(255, Math.max(0, Math.round(v2 * 255)));\n        };\n        data[i2] = tone(r2);\n        data[i2 + 1] = tone(g2);\n        data[i2 + 2] = tone(b2);\n      }\n    }\n    isNeutralState() {\n      return !this.hi && !this.sh && !this.wh && !this.bl && !this.clar;\n    }\n    sendUniformData(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uHi, this.hi);\n      gl.uniform1f(uniformLocations.uSh, this.sh);\n      gl.uniform1f(uniformLocations.uWh, this.wh);\n      gl.uniform1f(uniformLocations.uBl, this.bl);\n      gl.uniform1f(uniformLocations.uClar, this.clar);\n    }\n  };\n  __publicField(NinjaTone, \"type\", \"NinjaTone\");\n  __publicField(NinjaTone, \"defaults\", { hi: 0, sh: 0, wh: 0, bl: 0, clar: 0 });\n  __publicField(NinjaTone, \"uniformLocations\", [\"uHi\", \"uSh\", \"uWh\", \"uBl\", \"uClar\"]);\n  M.setClass(NinjaTone);\n\n  // src/editor.js\n  var GESTURE_SETTLE = 160;\n  function patchFilterBackend(be2) {\n    if (!be2 || be2.__nsPatched || !be2.gl) return be2;\n    be2.__nsPatched = true;\n    const glMax = be2.gl.getParameter(be2.gl.MAX_TEXTURE_SIZE) || 4096;\n    const orig = be2.applyFilters.bind(be2);\n    let c2d = null;\n    be2.applyFilters = (filters, source, w2, h2, target2, key) => {\n      const dim = Math.max(w2 || 0, h2 || 0);\n      if (dim > glMax) {\n        c2d = c2d || new _s();\n        return c2d.applyFilters(filters, source, w2, h2, target2, key);\n      }\n      if (dim > be2.tileSize) {\n        be2.tileSize = Math.min(glMax, Math.max(dim, be2.tileSize * 2));\n        be2.setupGLContext(be2.tileSize, be2.tileSize);\n      }\n      return orig(filters, source, w2, h2, target2, key);\n    };\n    return be2;\n  }\n  function warpPoint(kind, a2, W2, fontSize, x2, y2) {\n    if (kind === \"wave\") {\n      return [x2, y2 + waveOffset(a2, W2, fontSize, x2)];\n    }\n    if (kind === \"angle\") {\n      return [x2, y2 + x2 * Math.tan(angleTheta(a2))];\n    }\n    if (kind === \"bulge\") {\n      const f2 = Math.max(0.35, 1 + a2 * 0.65 * Math.cos(Math.PI * x2 / W2));\n      return [x2, y2 * f2];\n    }\n    if (kind === \"arcup\" || kind === \"arclo\") {\n      const f2 = Math.max(0.35, 1 + a2 * 0.65 * Math.cos(Math.PI * x2 / W2));\n      if (kind === \"arcup\") return [x2, y2 * f2];\n      const top = -fontSize * 0.72;\n      return [x2, top + (y2 - top) * f2];\n    }\n    return [x2, y2];\n  }\n  function waveOffset(a2, W2, fontSize, x2) {\n    const A2 = a2 * 0.7 * fontSize;\n    const phi = 2 * Math.PI * x2 / (9.5 * fontSize) + 0.075 * Math.PI;\n    return -A2 * Math.sin(phi);\n  }\n  function waveGlyph(a2, W2, fontSize, x2) {\n    return { y: waveOffset(a2, W2, fontSize, x2), rot: 0 };\n  }\n  function angleTheta(a2) {\n    return -a2 * Math.abs(a2) * (Math.PI / 4);\n  }\n  function curveRadius(a2, fontSize) {\n    return fontSize * 1.7 / Math.max(0.01, Math.abs(a2));\n  }\n  function curveGlyph(a2, R3, x2) {\n    const up = a2 > 0;\n    const phi = x2 / R3;\n    return {\n      x: R3 * Math.sin(phi),\n      y: (up ? 1 : -1) * R3 * (1 - Math.cos(phi)),\n      rot: up ? phi : -phi\n    };\n  }\n  var DESIGN_UNITS = 1100;\n  var ROTATE_KNOB_R = 18;\n  function renderRotateControl(ctx, left, top, styleOverride, obj) {\n    const c2 = obj && obj.canvas;\n    if (c2) c2.__mtrScreen = { left, top, hot: c2.__hoverControl === \"mtr\" };\n  }\n  function renderCornerControl(key) {\n    return function(ctx, left, top, styleOverride, obj) {\n      const hot = obj && obj.canvas && obj.canvas.__hoverControl === key;\n      ctx.save();\n      ctx.translate(left, top);\n      ctx.shadowColor = \"rgba(15,23,42,0.25)\";\n      ctx.shadowBlur = 4;\n      ctx.shadowOffsetY = 1;\n      ctx.beginPath();\n      ctx.arc(0, 0, hot ? 7 : 5.5, 0, Math.PI * 2);\n      ctx.fillStyle = hot ? \"#019aff\" : \"#ffffff\";\n      ctx.fill();\n      ctx.shadowColor = \"transparent\";\n      ctx.strokeStyle = hot ? \"#0284d8\" : \"#9db4c8\";\n      ctx.lineWidth = 1;\n      ctx.stroke();\n      ctx.restore();\n    };\n  }\n  var CURSOR_CACHE = {};\n  function resizeCursorUrl(deg) {\n    const a2 = (Math.round(deg / 15) * 15 % 180 + 180) % 180;\n    if (CURSOR_CACHE[a2]) return CURSOR_CACHE[a2];\n    const svg = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\"><g transform=\"rotate(' + a2 + ' 13 13)\"><path d=\"M2.5 13 8.4 7.4v3.4h9.2V7.4l5.9 5.6-5.9 5.6v-3.4H8.4v3.4z\" fill=\"#0f172a\" stroke=\"#ffffff\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/></g></svg>';\n    const fallback = a2 > 22 && a2 <= 67 ? \"nwse-resize\" : a2 > 67 && a2 <= 112 ? \"ns-resize\" : a2 > 112 && a2 <= 157 ? \"nesw-resize\" : \"ew-resize\";\n    return CURSOR_CACHE[a2] = 'url(\"data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg) + '\") 13 13, ' + fallback;\n  }\n  var CORNER_AXIS = { tl: 45, br: 45, tr: 135, bl: 135 };\n  var cornerCursorHandler = (key) => (eventData, control, obj) => resizeCursorUrl(CORNER_AXIS[key] + (obj.angle || 0));\n  var ROTATE_CURSOR = (() => {\n    const head = \"M0 -5 L4.2 3.2 L-4.2 3.2 Z\";\n    const svg = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\"><path d=\"M6 10.5 A8.8 8.8 0 0 0 22 10.5\" fill=\"none\" stroke=\"#ffffff\" stroke-width=\"6.2\" stroke-linecap=\"round\"/><path d=\"M6 10.5 A8.8 8.8 0 0 0 22 10.5\" fill=\"none\" stroke=\"#0f172a\" stroke-width=\"3\" stroke-linecap=\"round\"/><path d=\"' + head + '\" transform=\"translate(6 9.2) rotate(-34)\" fill=\"#0f172a\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/><path d=\"' + head + '\" transform=\"translate(22 9.2) rotate(34)\" fill=\"#0f172a\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/></svg>';\n    return 'url(\"data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg) + '\") 14 14, crosshair';\n  })();\n  var EditorCloneProps = [\n    \"__bgr\",\n    \"__effect\",\n    \"__effectColor\",\n    \"__effectSize\",\n    \"__fxDirection\",\n    \"__fxOffset\",\n    \"__fxBlur\",\n    \"__fxTransparency\",\n    \"__fxRound\",\n    \"__fxSpread\",\n    \"__fxEcho2\",\n    \"__shape\",\n    \"__baseFill\",\n    \"__gradFill\",\n    \"__adjust\",\n    \"__trimmed\",\n    \"__filterStrength\",\n    \"__superRes\",\n    \"__sticker\",\n    \"__stickerPad\",\n    \"__stickerW\",\n    \"__fxShift\",\n    \"__originalSrc\",\n    \"__fileName\",\n    \"__manualWidth\",\n    \"__caseOrig\",\n    \"__bullets\",\n    \"__filter\",\n    \"__filterCS\",\n    \"__filterColors\",\n    \"__bake\",\n    \"__shapeInkOffset\",\n    \"__recolorRepl\",\n    \"__recolorPal\",\n    \"__aiCreated\",\n    \"__aiEdit\",\n    \"__autoWindow\",\n    // '__radius' (image corner rounding): the clipPath serializes natively so the\n    // corners still SHOW, but without this the Radius slider reset to 0 and every\n    // `if (img.__radius) setImageRadius(...)` re-fit guard (crop/BGR/enhance/AI/\n    // filter) no-op'd, leaving a stale clipPath (agent 9-08). '__bgTextH' is the\n    // flat-background plate height, re-derived on restore too \u2014 see _shapeReattach.\n    \"__radius\",\n    \"__bgTextH\",\n    \"__locked\",\n    \"__base\",\n    // '__el': Elements v2 params (kind/w/h/round; lines add len/weight/dash/\n    // caps). The LOOK rides on native fabric props (path/fill/stroke/\u2026) \u2014 this\n    // carries only what's needed to REBUILD geometry when a param changes.\n    // Without it, rounding/caps silently reset on undo/save/clone while the art\n    // still renders (the exact `__radius` failure mode above). '__elRole' tags a\n    // line assembly's children (shaft/capStart/capEnd) for reattach.\n    \"__el\",\n    \"__elRole\"\n  ];\n  var Editor = class {\n    constructor(canvasEl, areaEl, opts = {}) {\n      this.outlineTracksScale = true;\n      this.areaEl = areaEl;\n      this.scrollEl = areaEl.querySelector(\".nsv2-scroll\") || areaEl;\n      this.apronX = 0;\n      this.apronY = 0;\n      this.userZoom = 1;\n      this.fitScale = 0.5;\n      this._restoring = false;\n      this._history = [];\n      this._redo = [];\n      this._listeners = {};\n      this.designW = opts.designW > 0 ? Math.round(opts.designW) : DESIGN_UNITS;\n      this.designH = opts.designH > 0 ? Math.round(opts.designH) : DESIGN_UNITS;\n      this.canvas = new ho(canvasEl, {\n        preserveObjectStacking: true,\n        selection: true,\n        backgroundColor: \"\",\n        // Swipe-to-pan when zoomed (Owen 9-08): fabric swallows EVERY touch by\n        // default, so once the canvas fills the viewport there is no pannable\n        // surface. With this flag fabric only claims touches on the ACTIVE\n        // object (drag still works); empty-canvas swipes fall through to the\n        // .nsv2-scroll container's native scrolling \u2014 the Canva model.\n        allowTouchScrolling: true\n      });\n      this.canvas.upperCanvasEl.style.touchAction = \"pan-x pan-y\";\n      this.canvas.lowerCanvasEl.style.touchAction = \"pan-x pan-y\";\n      this.boardApron = 60;\n      this._boardBg = \"\";\n      this._grid = { on: false, sizeIn: 0.25 };\n      this._guides = { v: [], h: [] };\n      this._guideDrag = null;\n      this._pageEl = document.createElement(\"div\");\n      this._pageEl.className = \"nsv2-page w3_bg\";\n      this.canvas.wrapperEl.insertBefore(this._pageEl, this.canvas.wrapperEl.firstChild);\n      {\n        const origRenderObjects = this.canvas._renderObjects.bind(this.canvas);\n        const editor = this;\n        this.canvas._renderObjects = function(ctx, objects) {\n          ctx.save();\n          ctx.beginPath();\n          ctx.rect(0, 0, editor.designW, editor.designH);\n          ctx.clip();\n          origRenderObjects(ctx, objects);\n          ctx.restore();\n        };\n      }\n      this._strippingLocked = false;\n      const stripLocked = () => {\n        if (this._strippingLocked) return;\n        const sel = this.canvas.getActiveObject();\n        if (!sel || !(sel instanceof gs)) return;\n        const members = sel.getObjects();\n        const keep = members.filter((o2) => !o2.__locked);\n        if (keep.length === members.length) return;\n        this._strippingLocked = true;\n        try {\n          this.canvas.discardActiveObject();\n          if (keep.length === 1) this.canvas.setActiveObject(keep[0]);\n          else if (keep.length > 1) {\n            const ns2 = new gs(keep, { canvas: this.canvas });\n            this.canvas.setActiveObject(ns2);\n            this._styleSelection(ns2);\n          }\n        } finally {\n          this._strippingLocked = false;\n        }\n        this.canvas.requestRenderAll();\n        this._emit(\"selection\");\n      };\n      this.canvas.on(\"selection:created\", stripLocked);\n      this.canvas.on(\"selection:updated\", stripLocked);\n      this._ro = new ResizeObserver(() => this.fitToContainer());\n      this._ro.observe(areaEl);\n      this.fitToContainer();\n      this.canvas.__hoverControl = null;\n      const setHover = (key) => {\n        if (this.canvas.__hoverControl === key) return;\n        this.canvas.__hoverControl = key;\n        this.canvas.requestRenderAll();\n      };\n      this.canvas.on(\"mouse:move\", (e24) => {\n        const tf = this.canvas._currentTransform;\n        if (tf) return setHover(tf.corner || null);\n        const t2 = this.canvas.getActiveObject();\n        if (!t2 || !t2.findControl) return setHover(null);\n        const ctl = t2.findControl(this.canvas.getViewportPoint(e24.e));\n        setHover(ctl ? ctl.key : null);\n      });\n      this.canvas.on(\"mouse:out\", () => setHover(null));\n      this.canvas.on(\"selection:cleared\", () => setHover(null));\n      const styleMulti = () => {\n        const a2 = this.canvas.getActiveObject();\n        if (a2 instanceof gs) {\n          this._styleSelection(a2);\n          for (const o2 of a2.getObjects()) o2.borderColor = \"rgba(102, 186, 255, 0.35)\";\n          this.canvas.requestRenderAll();\n        }\n      };\n      this.canvas.on(\"selection:created\", styleMulti);\n      this.canvas.on(\"selection:updated\", styleMulti);\n      const restoreBorders = (e24) => {\n        for (const o2 of e24 && e24.deselected || []) o2.borderColor = \"#66baff\";\n        const a2 = this.canvas.getActiveObject();\n        if (a2 && !(a2 instanceof gs)) a2.borderColor = \"#66baff\";\n      };\n      this.canvas.on(\"selection:updated\", restoreBorders);\n      this.canvas.on(\"selection:cleared\", restoreBorders);\n      const canvasBlank = (el2) => {\n        try {\n          const p2 = document.createElement(\"canvas\");\n          p2.width = 24;\n          p2.height = 24;\n          const cx = p2.getContext(\"2d\");\n          cx.drawImage(el2, 0, 0, 24, 24);\n          const d2 = cx.getImageData(0, 0, 24, 24).data;\n          for (let i2 = 3; i2 < d2.length; i2 += 4) if (d2[i2] > 0) return false;\n          return true;\n        } catch (e24) {\n          return false;\n        }\n      };\n      this._onVisibility = () => {\n        const objs = this.canvas.getObjects();\n        if (document.hidden) {\n          for (const o2 of objs) {\n            if (!o2.isType || !o2.isType(\"image\")) continue;\n            const src = o2._originalElement || o2._element;\n            if (src && src.tagName === \"CANVAS\") {\n              try {\n                o2.__canvasBackup = src.toDataURL();\n              } catch (e24) {\n              }\n            }\n            if (o2.__stickerEl && o2.__stickerEl.canvas) {\n              try {\n                o2.__stickerBackup = o2.__stickerEl.canvas.toDataURL();\n              } catch (e24) {\n              }\n            }\n          }\n          return;\n        }\n        try {\n          const be2 = xs();\n          if (be2 && be2.gl && be2.gl.isContextLost && be2.gl.isContextLost()) {\n            Ss(patchFilterBackend(bs()));\n          }\n        } catch (e24) {\n        }\n        for (const o2 of objs) {\n          o2.dirty = true;\n          if (!o2.isType || !o2.isType(\"image\")) continue;\n          const st2 = o2.__stickerEl;\n          if (st2 && st2.canvas && o2.__stickerBackup && canvasBlank(st2.canvas)) {\n            const cimg = new Image();\n            cimg.onload = () => {\n              try {\n                const cx = st2.canvas.getContext(\"2d\");\n                cx.clearRect(0, 0, st2.canvas.width, st2.canvas.height);\n                cx.drawImage(cimg, 0, 0);\n                o2.dirty = true;\n                this.canvas.requestRenderAll();\n              } catch (e24) {\n              }\n            };\n            cimg.src = o2.__stickerBackup;\n          }\n          const src = o2._originalElement || o2._element;\n          if (src && src.tagName === \"CANVAS\" && o2.__canvasBackup && canvasBlank(src)) {\n            const img = new Image();\n            img.onload = () => {\n              try {\n                const cx = src.getContext(\"2d\");\n                cx.clearRect(0, 0, src.width, src.height);\n                cx.drawImage(img, 0, 0);\n                if (o2.filters && o2.filters.length) o2.applyFilters();\n                o2.dirty = true;\n                this.canvas.requestRenderAll();\n              } catch (e24) {\n              }\n            };\n            img.src = o2.__canvasBackup;\n          } else if (o2.filters && o2.filters.length) {\n            try {\n              o2.applyFilters();\n              o2.dirty = true;\n            } catch (e24) {\n            }\n          }\n        }\n        this.canvas.calcOffset();\n        this.canvas.renderAll();\n      };\n      document.addEventListener(\"visibilitychange\", this._onVisibility);\n      try {\n        patchFilterBackend(xs());\n      } catch (e24) {\n      }\n      this._snapGuides = null;\n      this._snapState = { v: null, h: null };\n      this._snapTargets = null;\n      this.canvas.on(\"object:moving\", (e24) => {\n        this._hideDragChrome(e24.target);\n        this._snapMove(e24);\n      });\n      const clearSnap = () => {\n        this._restoreDragChrome();\n        this._snapTargets = null;\n        this._snapState = { v: null, h: null };\n        if (!this._snapGuides) return;\n        this._snapGuides = null;\n        this.canvas.requestRenderAll();\n      };\n      this.canvas.on(\"mouse:up\", clearSnap);\n      this.canvas.on(\"selection:cleared\", clearSnap);\n      this.canvas.on(\"selection:created\", clearSnap);\n      this.canvas.on(\"selection:updated\", clearSnap);\n      this.canvas.on(\"after:render\", () => {\n        this._drawUserGuides();\n        this._drawSnapGuides();\n      });\n      this._snapshot = () => {\n        const data = this.canvas.toDatalessJSON(EditorCloneProps);\n        const lighten = (live, json) => {\n          if (!live || !json) return;\n          for (let i2 = 0; i2 < live.length && i2 < json.length; i2++) {\n            const o2 = live[i2], j2 = json[i2];\n            if (!o2 || !j2) continue;\n            if (o2.isType && o2.isType(\"image\") && o2.__preRecolorEl && j2.type && /image/i.test(j2.type)) {\n              const base = o2.__preRecolorEl;\n              const src = base && base.tagName === \"IMG\" ? base.currentSrc || base.src : \"\";\n              if (src && !/^data:/i.test(src)) {\n                j2.src = src;\n                j2.crossOrigin = \"anonymous\";\n                j2.__restage = true;\n              }\n            }\n            if (o2.getObjects && j2.objects) lighten(o2.getObjects(), j2.objects);\n          }\n        };\n        lighten(this.canvas.getObjects(), data.objects);\n        data.__designW = this.designW;\n        data.__designH = this.designH;\n        data.__boardBg = this._boardBg || \"\";\n        data.__guides = { v: this._guides.v.slice(), h: this._guides.h.slice() };\n        return JSON.stringify(data);\n      };\n      this._recordTimer = null;\n      this._flushRecord = () => {\n        if (!this._recordTimer) return;\n        clearTimeout(this._recordTimer);\n        this._recordTimer = null;\n        if (this._restoring) return;\n        this._history.push(this._snapshot());\n        if (this._history.length > 60) this._history.shift();\n        this._redo.length = 0;\n        this._emit(\"history\");\n      };\n      const record = () => {\n        if (this._restoring) return;\n        clearTimeout(this._recordTimer);\n        this._recordTimer = setTimeout(this._flushRecord, 300);\n        this._recordTimer && this._emit(\"history\");\n      };\n      this._record = record;\n      this._history.push(this._snapshot());\n      this.canvas.on(\"object:added\", record);\n      this.canvas.on(\"object:modified\", record);\n      this.canvas.on(\"object:removed\", record);\n      this.canvas.on(\"mouse:down\", (opt) => {\n        const pe2 = opt.e;\n        this._touchHold = pe2 && pe2.pointerType === \"touch\" && opt.target ? { obj: opt.target, left: opt.target.left, top: opt.target.top, x: pe2.clientX, y: pe2.clientY, held: true } : null;\n      });\n      this.canvas.on(\"object:moving\", (opt) => {\n        const h2 = this._touchHold;\n        if (!h2 || !h2.held || opt.target !== h2.obj) return;\n        const pe2 = opt.e;\n        if (pe2 && Math.hypot(pe2.clientX - h2.x, pe2.clientY - h2.y) < 6) {\n          opt.target.set({ left: h2.left, top: h2.top });\n        } else {\n          h2.held = false;\n        }\n      });\n      this.canvas.on(\"mouse:up\", () => {\n        this._touchHold = null;\n      });\n      this._onFontsArrived = (e24) => {\n        const fams = new Set([...e24 && e24.fontfaces || []].map((f2) => String(f2.family || \"\").replace(/^['\"]|['\"]$/g, \"\")));\n        if (!fams.size) return;\n        for (const fam of fams) y.clearFontCache(fam);\n        let touched = false;\n        for (const o2 of this.canvas.getObjects()) {\n          if (o2.isType && o2.isType(\"textbox\") && fams.has(o2.fontFamily) && !o2.isEditing) {\n            this._hugWidth(o2);\n            o2.dirty = true;\n            touched = true;\n          } else if (o2.isType && o2.isType(\"textbox\") && fams.has(o2.fontFamily) && o2.isEditing && !o2.__shape) {\n            this._hugWidth(o2);\n            if (o2.__editCenter) o2.setPositionByOrigin(o2.__editCenter, \"center\", \"center\");\n            o2.setCoords();\n            o2.dirty = true;\n            touched = true;\n          }\n        }\n        if (touched) {\n          this.canvas.requestRenderAll();\n          this._emit(\"selection\");\n        }\n      };\n      try {\n        document.fonts.addEventListener(\"loadingdone\", this._onFontsArrived);\n      } catch (e24) {\n      }\n      this._onStudioFontLoaded = (e24) => {\n        const family = e24 && e24.detail && e24.detail.family;\n        if (family) this._onFontsArrived({ fontfaces: [{ family }] });\n      };\n      try {\n        document.addEventListener(\"nsv2:fontloaded\", this._onStudioFontLoaded);\n      } catch (e24) {\n      }\n      this._canvasFontWatch = /* @__PURE__ */ new Map();\n      this._probeCtx = null;\n      this._canvasFontUsable = (family) => {\n        try {\n          const ctx = this._probeCtx || (this._probeCtx = document.createElement(\"canvas\").getContext(\"2d\"));\n          const txt = \"Your text 0123 WMwm\";\n          ctx.font = '700 40px \"' + family + '\"';\n          const a2 = ctx.measureText(txt).width;\n          ctx.font = \"700 40px serif\";\n          const b2 = ctx.measureText(txt).width;\n          ctx.font = \"700 40px sans-serif\";\n          const c2 = ctx.measureText(txt).width;\n          return Math.abs(a2 - b2) > 0.5 && Math.abs(a2 - c2) > 0.5;\n        } catch (e24) {\n          return true;\n        }\n      };\n      this._ensureCanvasFont = (family) => {\n        if (!family || this._canvasFontWatch.get(family) === \"done\") return;\n        if (this._canvasFontWatch.get(family)) return;\n        if (this._canvasFontUsable(family)) {\n          this._canvasFontWatch.set(family, \"done\");\n          return;\n        }\n        let n2 = 0;\n        const timer = setInterval(() => {\n          n2++;\n          if (this._canvasFontUsable(family)) {\n            clearInterval(timer);\n            this._canvasFontWatch.set(family, \"done\");\n            this._onFontsArrived({ fontfaces: [{ family }] });\n          } else if (n2 >= 40) {\n            clearInterval(timer);\n            this._canvasFontWatch.delete(family);\n          }\n        }, 250);\n        this._canvasFontWatch.set(family, timer);\n      };\n      this.canvas.on(\"object:added\", (e24) => {\n        const o2 = e24 && e24.target;\n        if (o2 && o2.isType && o2.isType(\"textbox\") && o2.fontFamily) this._ensureCanvasFont(o2.fontFamily);\n      });\n      try {\n        document.fonts.ready.then(() => {\n          const fams = /* @__PURE__ */ new Set();\n          for (const o2 of this.canvas.getObjects()) if (o2.isType && o2.isType(\"textbox\") && o2.fontFamily) fams.add(o2.fontFamily);\n          if (fams.size) this._onFontsArrived({ fontfaces: [...fams].map((family) => ({ family })) });\n        });\n      } catch (e24) {\n      }\n      this.canvas.on(\"object:modified\", (e24) => {\n        const t2 = e24 && e24.target;\n        if (!t2) return;\n        if (t2.__el) {\n          if (t2.__el.isLine) this._lineNormalize(t2);\n          else this._elAbsorbScale(t2);\n        } else if (t2.isType && t2.isType(\"activeselection\")) {\n          for (const o2 of t2.getObjects()) {\n            if (!o2.__el) {\n              this._stickerWeightHold(o2);\n              this._textOutlineHold(o2);\n            }\n          }\n        } else {\n          this._stickerWeightHold(t2);\n          this._textOutlineHold(t2);\n        }\n      });\n      this.canvas.on(\"object:scaling\", (e24) => {\n        const t2 = e24 && e24.target;\n        if (!t2 || this.outlineTracksScale) return;\n        const each = (o2) => {\n          if (o2.isType && o2.isType(\"textbox\") && o2.__effect === \"outline\") {\n            const sc2 = this._effScale(o2);\n            const want = Math.max(0.5, 2 * (o2.__effectSize != null ? o2.__effectSize : 12) / sc2);\n            if (Math.abs((o2.strokeWidth || 0) - want) < 0.1) return;\n            o2.set(\"strokeWidth\", want);\n            o2.dirty = true;\n          } else if (o2.isType && o2.isType(\"image\") && o2.__sticker && o2.__sticker.w) {\n            this._stickerLive(o2);\n          } else if (o2.__el && !o2.__el.isLine && o2.__el.bstyle && o2.__el.bstyle !== \"none\") {\n            this._elStrokeSync(o2);\n          } else if (o2.__el && o2.__el.isLine) {\n            const parts = o2.__elParts || this._lineParts(o2);\n            if (parts.shaft) {\n              parts.shaft.set(\"strokeWidth\", Math.max(0.5, (o2.__el.weight || 9) / this._effScale(o2)));\n              parts.shaft.dirty = true;\n              o2.dirty = true;\n            }\n          }\n        };\n        if (t2.isType && t2.isType(\"activeselection\")) t2.getObjects().forEach(each);\n        else each(t2);\n      });\n      const normDeselected = (e24) => {\n        for (const o2 of e24 && e24.deselected || []) {\n          if (o2.__el) {\n            if (o2.__el.isLine) this._lineNormalize(o2);\n            else this._elAbsorbScale(o2);\n          } else {\n            this._stickerWeightHold(o2);\n            this._textOutlineHold(o2);\n          }\n        }\n      };\n      this.canvas.on(\"selection:cleared\", normDeselected);\n      this.canvas.on(\"selection:updated\", normDeselected);\n      this.canvas.on(\"text:changed\", (e24) => {\n        if (e24.target) {\n          if (e24.target.__bullets) this._applyBullets(e24.target);\n          this._hugWidth(e24.target);\n          if (e24.target.isEditing && e24.target.__editCenter) {\n            e24.target.setPositionByOrigin(e24.target.__editCenter, \"center\", \"center\");\n            e24.target.setCoords();\n          }\n          this.canvas.requestRenderAll();\n          this._emit(\"selection\");\n        }\n      });\n      this.canvas.on(\"object:resizing\", (e24) => {\n        if (e24.target) e24.target.__manualWidth = true;\n      });\n      this.canvas.on(\"after:render\", () => {\n        const o2 = this.canvas.getActiveObject();\n        if (!o2 || !o2.__angleEnds || !this._shapeAdjusting || !o2.__shape || o2.__shape.kind !== \"angle\" || this._crop) return;\n        const ctx = this.canvas.contextContainer;\n        const vpt = this.canvas.viewportTransform;\n        const c2 = o2.getCenterPoint();\n        const rad = (o2.angle || 0) * Math.PI / 180;\n        const pt2 = (p2) => {\n          const ox = p2.x * o2.scaleX, oy = p2.y * o2.scaleY;\n          const sx = c2.x + ox * Math.cos(rad) - oy * Math.sin(rad);\n          const sy = c2.y + ox * Math.sin(rad) + oy * Math.cos(rad);\n          return [sx * vpt[0] + vpt[4], sy * vpt[3] + vpt[5]];\n        };\n        const [x0, y0] = pt2(o2.__angleEnds[0]);\n        const [x1, y1] = pt2(o2.__angleEnds[1]);\n        const retina = this.canvas.getRetinaScaling ? this.canvas.getRetinaScaling() : 1;\n        ctx.save();\n        ctx.setTransform(retina, 0, 0, retina, 0, 0);\n        ctx.strokeStyle = \"rgba(102,186,255,0.9)\";\n        ctx.lineWidth = 1;\n        ctx.beginPath();\n        ctx.moveTo(x0, y0);\n        ctx.lineTo(x1, y1);\n        ctx.stroke();\n        for (const [hx, hy] of [[x0, y0], [x1, y1]]) {\n          ctx.beginPath();\n          ctx.arc(hx, hy, 4.5, 0, Math.PI * 2);\n          ctx.fillStyle = \"#ffffff\";\n          ctx.fill();\n          ctx.strokeStyle = \"#66baff\";\n          ctx.stroke();\n        }\n        ctx.restore();\n      });\n      this.canvas.on(\"after:render\", () => {\n        const o2 = this.canvas.getActiveObject();\n        if (!o2 || !o2.__curveRing || !this._shapeAdjusting || !o2.__shape || o2.__shape.kind !== \"curve\" || this._crop) return;\n        const ring2 = o2.__curveRing;\n        const ctx = this.canvas.contextContainer;\n        const vpt = this.canvas.viewportTransform;\n        const c2 = o2.getCenterPoint();\n        const rad = (o2.angle || 0) * Math.PI / 180;\n        const ox = ring2.x * o2.scaleX, oy = ring2.y * o2.scaleY;\n        const cx = c2.x + ox * Math.cos(rad) - oy * Math.sin(rad);\n        const cy = c2.y + ox * Math.sin(rad) + oy * Math.cos(rad);\n        const retina = this.canvas.getRetinaScaling ? this.canvas.getRetinaScaling() : 1;\n        const scale = (o2.scaleX + o2.scaleY) / 2 * vpt[0];\n        ctx.save();\n        ctx.setTransform(retina, 0, 0, retina, 0, 0);\n        ctx.strokeStyle = \"rgba(102,186,255,0.9)\";\n        ctx.lineWidth = 1;\n        ctx.beginPath();\n        ctx.arc(cx * vpt[0] + vpt[4], cy * vpt[3] + vpt[5], Math.max(1, ring2.r * scale), 0, Math.PI * 2);\n        ctx.stroke();\n        ctx.restore();\n      });\n      const relay = (ev) => this.canvas.on(ev, () => this._emit(\"selection\"));\n      relay(\"selection:created\");\n      relay(\"selection:updated\");\n      relay(\"selection:cleared\");\n    }\n    on(ev, fn2) {\n      (this._listeners[ev] = this._listeners[ev] || []).push(fn2);\n    }\n    _emit(ev, payload) {\n      (this._listeners[ev] || []).forEach((fn2) => fn2(payload));\n    }\n    // The board wrapper can carry padding (the 22px ruler-strip reserve) \u2014\n    // sizing against the raw scroll client ignores it and leaves a standing\n    // 44px overflow whenever rulers are on (Owen 9-08 desktop wiggle).\n    _boardPad() {\n      const b2 = this.canvas && this.canvas.wrapperEl && this.canvas.wrapperEl.parentElement;\n      if (!b2) return { x: 0, y: 0 };\n      const cs2 = getComputedStyle(b2);\n      return {\n        x: (parseFloat(cs2.paddingLeft) || 0) + (parseFloat(cs2.paddingRight) || 0),\n        y: (parseFloat(cs2.paddingTop) || 0) + (parseFloat(cs2.paddingBottom) || 0)\n      };\n    }\n    fitToContainer() {\n      const pad = this._boardPad();\n      const rect = {\n        width: (this.scrollEl.clientWidth || this.areaEl.getBoundingClientRect().width) - pad.x,\n        height: (this.scrollEl.clientHeight || this.areaEl.getBoundingClientRect().height) - pad.y\n      };\n      if (!(rect.width > 0) || !(rect.height > 0)) return;\n      this.boardApron = 20;\n      const a2 = 2 * this.boardApron;\n      this.fitScale = Math.max(\n        0.01,\n        Math.min((rect.width - a2) / this.designW, (rect.height - a2) / this.designH)\n      );\n      this._applyZoom();\n    }\n    _applyZoom() {\n      const scale = this.fitScale * this.userZoom;\n      const w2 = Math.max(1, Math.round(this.designW * scale));\n      const h2 = Math.max(1, Math.round(this.designH * scale));\n      const A2 = this.boardApron;\n      const pad = this._boardPad();\n      const cw = this.scrollEl ? this.scrollEl.clientWidth - pad.x : 0;\n      const ch = this.scrollEl ? this.scrollEl.clientHeight - pad.y : 0;\n      const apronX = cw && w2 <= cw ? Math.min(A2, Math.max(0, Math.floor((cw - w2) / 2))) : A2;\n      const apronY = ch && h2 <= ch ? Math.min(A2, Math.max(0, Math.floor((ch - h2) / 2))) : A2;\n      this.apronX = apronX;\n      this.apronY = apronY;\n      const newW = w2 + 2 * apronX;\n      const newH = h2 + 2 * apronY;\n      const resized = this.canvas.getWidth() !== newW || this.canvas.getHeight() !== newH;\n      if (resized) this.canvas.setDimensions({ width: newW, height: newH });\n      this.canvas.setViewportTransform([scale, 0, 0, scale, apronX, apronY]);\n      if (this._pageEl) {\n        this._pageEl.style.left = apronX + \"px\";\n        this._pageEl.style.top = apronY + \"px\";\n        this._pageEl.style.width = w2 + \"px\";\n        this._pageEl.style.height = h2 + \"px\";\n        this._paintPage();\n      }\n      if (resized) this.canvas.renderAll();\n      else this.canvas.requestRenderAll();\n      this._emit(\"zoom\");\n    }\n    // Compose the page background: [grid lines] over [preview color | checker].\n    // One inline style each time \u2014 the pieces coexist as background layers, so\n    // the grid works over any board color (line shade adapts to bg luminance).\n    _paintPage() {\n      const p2 = this._pageEl;\n      if (!p2) return;\n      const layers = [];\n      const sizes = [];\n      if (this._grid.on) {\n        const s3 = Math.max(4, this._grid.sizeIn * 50 * this.fitScale * this.userZoom);\n        let line = \"rgba(15,23,42,0.16)\";\n        if (this._boardBg) {\n          const c2 = parseInt(this._boardBg.replace(\"#\", \"\"), 16);\n          const lum = 0.299 * (c2 >> 16 & 255) + 0.587 * (c2 >> 8 & 255) + 0.114 * (c2 & 255);\n          if (lum < 128) line = \"rgba(255,255,255,0.22)\";\n        }\n        layers.push(\"repeating-linear-gradient(to right, \" + line + \" 0 1px, transparent 1px \" + s3 + \"px)\");\n        layers.push(\"repeating-linear-gradient(to bottom, \" + line + \" 0 1px, transparent 1px \" + s3 + \"px)\");\n        sizes.push(\"auto\", \"auto\");\n      }\n      if (this._boardBg) {\n        layers.push(\"linear-gradient(\" + this._boardBg + \", \" + this._boardBg + \")\");\n        sizes.push(\"auto\");\n      } else {\n        layers.push(\"conic-gradient(#e9edf2 25%, #ffffff 0 50%, #e9edf2 0 75%, #ffffff 0)\");\n        sizes.push(\"18px 18px\");\n      }\n      p2.style.background = layers.join(\", \");\n      p2.style.backgroundSize = sizes.join(\", \");\n    }\n    setGrid(opts) {\n      if (opts && typeof opts.on === \"boolean\") this._grid.on = opts.on;\n      if (opts && opts.sizeIn) this._grid.sizeIn = Math.max(0.125, Math.min(4, opts.sizeIn));\n      this._paintPage();\n      this._emit(\"grid\");\n    }\n    get grid() {\n      return { on: this._grid.on, sizeIn: this._grid.sizeIn };\n    }\n    // While an object is being DRAGGED, its selection chrome (blue frame +\n    // handles) disappears \u2014 only the art and the snap guides move (Canva\n    // behavior, Owen 9-07). Restored on mouse:up and on any selection change.\n    // Scale/rotate keep their handles: this fires only for pointer MOVE drags\n    // (gated on fabric's live transform action), so a programmatic\n    // object:moving can never strand an object with its chrome off.\n    _hideDragChrome(o2) {\n      if (!o2 || this._dragChrome && this._dragChrome.o === o2) return;\n      const tr2 = this.canvas._currentTransform;\n      if (!tr2 || tr2.action !== \"drag\") return;\n      this._dragChrome = { o: o2, borders: !!o2.hasBorders, controls: !!o2.hasControls };\n      o2.hasBorders = false;\n      o2.hasControls = false;\n    }\n    // Viewport gesture chrome (Owen 9-18 \"when zooming or panning hide element\n    // controls\"): every continuous VIEWPORT gesture \u2014 pinch, ctrl/\u2318-wheel zoom,\n    // Space-drag pan, the zoom glide, plain board scroll \u2014 calls beginGesture()\n    // per event; the chrome returns GESTURE_SETTLE ms after the last one. While\n    // active the active object's handles + borders are off (same save/restore\n    // idea as the move-drag chrome, but NOT gated on fabric's transform \u2014 a\n    // pinch has none) and index.js hides the pill / Edit chip / context menu\n    // through the 'gesture' event. Object drags keep their own chrome path.\n    beginGesture() {\n      if (!this._gesture) {\n        const o2 = this.canvas.getActiveObject() || null;\n        this._gesture = { o: o2, borders: !!(o2 && o2.hasBorders), controls: !!(o2 && o2.hasControls) };\n        if (o2) {\n          o2.hasBorders = false;\n          o2.hasControls = false;\n        }\n        this._emit(\"gesture\", true);\n        this.canvas.requestRenderAll();\n      }\n      clearTimeout(this._gestureT);\n      this._gestureT = setTimeout(() => this.endGesture(), GESTURE_SETTLE);\n    }\n    endGesture() {\n      clearTimeout(this._gestureT);\n      this._gestureT = 0;\n      const g2 = this._gesture;\n      if (!g2) return;\n      this._gesture = null;\n      if (g2.o && (this.canvas.getObjects().includes(g2.o) || g2.o === this.canvas.getActiveObject())) {\n        g2.o.hasBorders = g2.borders;\n        g2.o.hasControls = g2.controls;\n      }\n      this._emit(\"gesture\", false);\n      this.canvas.requestRenderAll();\n    }\n    _restoreDragChrome() {\n      const s3 = this._dragChrome;\n      if (!s3) return;\n      this._dragChrome = null;\n      s3.o.hasBorders = s3.borders;\n      s3.o.hasControls = s3.controls;\n      this.canvas.requestRenderAll();\n    }\n    // INK rect (scene coords): the box around an object's actual PIXELS.\n    // Frames carry hug margins, padding, and effect headroom \u2014 snapping frame\n    // edges left visible gaps at guides and between elements (Owen 9-07:\n    // \"ideally the one closest to the pixels \u2014 universal\"). Renders the object\n    // small (\u2264200px) and alpha-scans; falls back to the frame on any failure.\n    // opts.shadow = true keeps text shadows IN the measure (they print) \u2014 the\n    // export gate wants that; snapping/alignment keep the shadow-less default.\n    _inkRectFor(o2, opts = {}) {\n      const br2 = o2.getBoundingRect();\n      try {\n        const mult = Math.min(1, 420 / Math.max(br2.width, br2.height, 1));\n        const c2 = o2.toCanvasElement({\n          multiplier: mult,\n          withoutShadow: !opts.shadow && !!(o2.isType && o2.isType(\"textbox\"))\n        });\n        const w2 = c2.width, h2 = c2.height;\n        if (!w2 || !h2) return br2;\n        const d2 = c2.getContext(\"2d\").getImageData(0, 0, w2, h2).data;\n        let mnx = w2, mny = h2, mxx = -1, mxy = -1;\n        for (let y2 = 0; y2 < h2; y2++) {\n          const row = y2 * w2 * 4;\n          for (let x2 = 0; x2 < w2; x2++) {\n            if (d2[row + x2 * 4 + 3] > 8) {\n              if (x2 < mnx) mnx = x2;\n              if (x2 > mxx) mxx = x2;\n              if (y2 < mny) mny = y2;\n              if (y2 > mxy) mxy = y2;\n            }\n          }\n        }\n        if (mxx < 0) return br2;\n        const kx = opts.shadow ? 1 / mult : br2.width / w2;\n        const ky = opts.shadow ? 1 / mult : br2.height / h2;\n        const ox = opts.shadow ? br2.left + br2.width / 2 - w2 / (2 * mult) : br2.left;\n        const oy = opts.shadow ? br2.top + br2.height / 2 - h2 / (2 * mult) : br2.top;\n        return {\n          left: ox + mnx * kx,\n          top: oy + mny * ky,\n          width: (mxx - mnx + 1) * kx,\n          height: (mxy - mny + 1) * ky\n        };\n      } catch (err) {\n        return br2;\n      }\n    }\n    // Snap the dragged object's edges/centers to board center/edges and other\n    // objects' edges/centers \u2014 engage 6px, release 14px (screen-constant), a\n    // held snap wins over switching candidates. Drag only (never scale/rotate).\n    // ALL lines (self + targets) come from INK rects, not frames.\n    _snapMove(e24) {\n      const o2 = e24.target;\n      if (!o2 || this._crop) return;\n      if (e24.transform && e24.transform.action && e24.transform.action !== \"drag\") return;\n      const z2 = this.canvas.getZoom() || 1;\n      const ENGAGE = 3 / z2;\n      const RELEASE = 6 / z2;\n      const TAKEOVER = 2 / z2;\n      if (!this._snapTargets || this._snapTargets.for !== o2) {\n        const tV = [{ t: this.designW / 2, board: true, centerOnly: true }];\n        const tH = [{ t: this.designH / 2, board: true, centerOnly: true }];\n        for (const t2 of this._guides.v) tV.push({ t: t2, board: true });\n        for (const t2 of this._guides.h) tH.push({ t: t2, board: true });\n        const members = o2.getObjects ? new Set(o2.getObjects()) : null;\n        for (const other of this.canvas.getObjects()) {\n          if (other === o2 || other.excludeFromExport || members && members.has(other)) continue;\n          const r2 = this._inkRectFor(other);\n          for (const t2 of [r2.left, r2.left + r2.width / 2, r2.left + r2.width]) tV.push({ t: t2, board: false, a: r2.top, b: r2.top + r2.height });\n          for (const t2 of [r2.top, r2.top + r2.height / 2, r2.top + r2.height]) tH.push({ t: t2, board: false, a: r2.left, b: r2.left + r2.width });\n        }\n        const fr2 = o2.getBoundingRect();\n        const ink = this._inkRectFor(o2);\n        const selfIns = {\n          l: ink.left - fr2.left,\n          t: ink.top - fr2.top,\n          w: ink.width,\n          h: ink.height\n        };\n        this._snapTargets = { for: o2, v: tV, h: tH, selfIns };\n        this._snapState = { v: null, h: null };\n      }\n      o2.setCoords();\n      const br2 = o2.getBoundingRect();\n      const ins = this._snapTargets.selfIns || { l: 0, t: 0, w: br2.width, h: br2.height };\n      const iL = br2.left + ins.l, iT = br2.top + ins.t;\n      const selfV = [iL, iL + ins.w / 2, iL + ins.w];\n      const selfH = [iT, iT + ins.h / 2, iT + ins.h];\n      const axis = (targets, selfs, held) => {\n        let best = null;\n        let bd = null;\n        for (const entry of targets) {\n          for (let si2 = 0; si2 < 3; si2++) {\n            if (entry.centerOnly && si2 !== 1) continue;\n            const d2 = entry.t - selfs[si2];\n            if (Math.abs(d2) <= ENGAGE && (bd === null || Math.abs(d2) < Math.abs(bd))) {\n              bd = d2;\n              best = { t: entry.t, si: si2, entry };\n            }\n          }\n        }\n        if (held) {\n          const d2 = held.t - selfs[held.si];\n          if (Math.abs(d2) <= RELEASE && (!best || Math.abs(bd) >= Math.abs(d2) - TAKEOVER)) return { snap: held, d: d2 };\n        }\n        return best ? { snap: best, d: bd } : null;\n      };\n      const rv = axis(this._snapTargets.v, selfV, this._snapState.v);\n      const rh = axis(this._snapTargets.h, selfH, this._snapState.h);\n      this._snapState.v = rv ? rv.snap : null;\n      this._snapState.h = rh ? rh.snap : null;\n      if (rv) o2.set(\"left\", o2.left + rv.d);\n      if (rh) o2.set(\"top\", o2.top + rh.d);\n      if (this._grid.on) {\n        const step = this._grid.sizeIn * 50;\n        const GRID_R = Math.min(step * 0.4, 4 / z2);\n        const gridAxis = (selfs) => {\n          let best = null;\n          for (let si2 = 0; si2 < 3; si2++) {\n            const t2 = Math.round(selfs[si2] / step) * step;\n            const d2 = t2 - selfs[si2];\n            if (Math.abs(d2) <= GRID_R && (!best || Math.abs(d2) < Math.abs(best))) best = d2;\n          }\n          return best;\n        };\n        if (!rv) {\n          const d2 = gridAxis(selfV);\n          if (d2 !== null) o2.set(\"left\", o2.left + d2);\n        }\n        if (!rh) {\n          const d2 = gridAxis(selfH);\n          if (d2 !== null) o2.set(\"top\", o2.top + d2);\n        }\n      }\n      if (rv || rh || this._grid.on) o2.setCoords();\n      const OVER = 12 / z2;\n      let nbr = null;\n      if (rv || rh) {\n        const b2 = o2.getBoundingRect();\n        nbr = { left: b2.left + ins.l, top: b2.top + ins.t, width: ins.w, height: ins.h };\n      }\n      const seg = (snap, lo2, hi2) => {\n        const e25 = snap.entry;\n        if (!e25 || e25.board) return { t: snap.t, board: true };\n        return { t: snap.t, board: false, a: Math.min(e25.a, lo2) - OVER, b: Math.max(e25.b, hi2) + OVER };\n      };\n      const next = rv || rh ? {\n        v: rv ? seg(rv.snap, nbr.top, nbr.top + nbr.height) : null,\n        h: rh ? seg(rh.snap, nbr.left, nbr.left + nbr.width) : null\n      } : null;\n      if (JSON.stringify(next) !== JSON.stringify(this._snapGuides)) {\n        this._snapGuides = next;\n        this.canvas.requestRenderAll();\n      }\n    }\n    // \u2500\u2500 User guides (ruler-dragged) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    addGuide(axis, t2) {\n      if (this._guides[axis].some((g2) => Math.abs(g2 - t2) < 0.5)) return;\n      this._guides[axis].push(t2);\n      this._record();\n      this.canvas.requestRenderAll();\n    }\n    moveGuide(axis, i2, t2) {\n      if (this._guides[axis][i2] === void 0) return;\n      this._guides[axis][i2] = t2;\n      this.canvas.requestRenderAll();\n    }\n    removeGuide(axis, i2) {\n      this._guides[axis].splice(i2, 1);\n      this._record();\n      this.canvas.requestRenderAll();\n    }\n    // Nearest guide within tol (scene units): {axis, i} | null. v = vertical\n    // lines (match by x), h = horizontal (match by y).\n    hitGuide(pt2, tol) {\n      let best = null;\n      this._guides.v.forEach((t2, i2) => {\n        const d2 = Math.abs(pt2.x - t2);\n        if (d2 <= tol && (!best || d2 < best.d)) best = { axis: \"v\", i: i2, d: d2 };\n      });\n      this._guides.h.forEach((t2, i2) => {\n        const d2 = Math.abs(pt2.y - t2);\n        if (d2 <= tol && (!best || d2 < best.d)) best = { axis: \"h\", i: i2, d: d2 };\n      });\n      return best;\n    }\n    setGuideDrag(axis, t2) {\n      this._guideDrag = t2 === null || t2 === void 0 ? null : { axis, t: t2 };\n      this.canvas.requestRenderAll();\n    }\n    _drawUserGuides() {\n      const has = this._guides.v.length || this._guides.h.length || this._guideDrag;\n      if (!has) return;\n      const ctx = this.canvas.contextContainer;\n      const z2 = this.canvas.getZoom();\n      const vpt = this.canvas.viewportTransform;\n      ctx.save();\n      ctx.lineWidth = 1;\n      const line = (axis, t2, live) => {\n        ctx.strokeStyle = live ? \"rgba(139,92,246,0.55)\" : \"#8b5cf6\";\n        ctx.beginPath();\n        if (axis === \"v\") {\n          const x2 = Math.round(t2 * z2 + vpt[4]) + 0.5;\n          ctx.moveTo(x2, vpt[5]);\n          ctx.lineTo(x2, this.designH * z2 + vpt[5]);\n        } else {\n          const y2 = Math.round(t2 * z2 + vpt[5]) + 0.5;\n          ctx.moveTo(vpt[4], y2);\n          ctx.lineTo(this.designW * z2 + vpt[4], y2);\n        }\n        ctx.stroke();\n      };\n      this._guides.v.forEach((t2) => line(\"v\", t2, false));\n      this._guides.h.forEach((t2) => line(\"h\", t2, false));\n      if (this._guideDrag) line(this._guideDrag.axis, this._guideDrag.t, true);\n      ctx.restore();\n    }\n    _drawSnapGuides() {\n      const g2 = this._snapGuides;\n      if (!g2) return;\n      const ctx = this.canvas.contextContainer;\n      const z2 = this.canvas.getZoom();\n      const vpt = this.canvas.viewportTransform;\n      ctx.save();\n      ctx.strokeStyle = \"#f43f9d\";\n      ctx.lineWidth = 1;\n      ctx.setLineDash([6, 4]);\n      if (g2.v) {\n        const x2 = Math.round(g2.v.t * z2 + vpt[4]) + 0.5;\n        ctx.beginPath();\n        ctx.moveTo(x2, g2.v.board ? 0 : g2.v.a * z2 + vpt[5]);\n        ctx.lineTo(x2, g2.v.board ? this.canvas.getHeight() : g2.v.b * z2 + vpt[5]);\n        ctx.stroke();\n      }\n      if (g2.h) {\n        const y2 = Math.round(g2.h.t * z2 + vpt[5]) + 0.5;\n        ctx.beginPath();\n        ctx.moveTo(g2.h.board ? 0 : g2.h.a * z2 + vpt[4], y2);\n        ctx.lineTo(g2.h.board ? this.canvas.getWidth() : g2.h.b * z2 + vpt[4], y2);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n    get designWIn() {\n      return this.designW / 50;\n    }\n    get designHIn() {\n      return this.designH / 50;\n    }\n    // Board size in inches. Never moves existing art.\n    setCanvasSize(wIn, hIn) {\n      const w2 = Math.round(wIn * 50);\n      const h2 = Math.round(hIn * 50);\n      if (w2 === this.designW && h2 === this.designH) return;\n      const prevW = this.designW, prevH = this.designH;\n      this.designW = w2;\n      this.designH = h2;\n      this.lastCanvasFit = this._fitContentToBoard(prevW, prevH);\n      this._syncBoardClip();\n      this.fitToContainer();\n      this._record();\n      this._emit(\"canvassize\");\n    }\n    // Workspace PREVIEW color only \u2014 the color paints the PAGE element (never\n    // the fabric canvas, whose element now includes the apron), so the print\n    // output stays transparent no matter what is set here. The topbar warns the\n    // user of exactly that. null/'' = back to the transparency grid.\n    setCanvasBackground(color) {\n      this._boardBg = color || \"\";\n      this._paintPage();\n      this._record();\n      this._emit(\"canvasbg\");\n    }\n    get boardBg() {\n      return this._boardBg || \"\";\n    }\n    _syncBoardClip() {\n      this.canvas.clipPath = void 0;\n    }\n    get zoomPercent() {\n      return Math.round(this.fitScale * this.userZoom * 100);\n    }\n    zoomBy(step) {\n      this._cancelZoomAnim();\n      this.userZoom = Math.min(4, Math.max(0.25, this.userZoom * step));\n      this._applyZoom();\n    }\n    zoomFit() {\n      this._cancelZoomAnim();\n      this.userZoom = 1;\n      this._applyZoom();\n    }\n    // SMOOTH zoom (Owen 9-16 \"make the canvas zoom smoother, not so abrupt\"):\n    // discrete changes (\u00B1 steps, Fit, a typed value, double-tap) GLIDE to the\n    // target instead of snapping \u2014 ~220 ms, ease-out, interpolated in LOG space\n    // so each frame is the same perceptual step (Canva's feel). `pin` runs after\n    // every frame so the caller's anchor (viewport center, the tap point) stays\n    // put through the glide. A new zoom input cancels an in-flight glide; the\n    // continuous inputs (slider drag, pinch, wheel) stay direct. Honors\n    // prefers-reduced-motion (instant).\n    animateZoom(targetUserZoom, pin, duration = 220) {\n      this._cancelZoomAnim();\n      const to2 = Math.min(4, Math.max(0.25, targetUserZoom));\n      const from = this.userZoom;\n      const reduced = typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n      if (reduced || Math.abs(Math.log(to2 / from)) < 1e-4) {\n        this.userZoom = to2;\n        this._applyZoom();\n        if (pin) pin();\n        return;\n      }\n      const lf = Math.log(from), lt2 = Math.log(to2);\n      const t0 = performance.now();\n      const step = (now) => {\n        this.beginGesture();\n        const p2 = Math.min(1, (now - t0) / duration);\n        const e24 = 1 - Math.pow(1 - p2, 3);\n        this.userZoom = p2 < 1 ? Math.exp(lf + (lt2 - lf) * e24) : to2;\n        this._applyZoom();\n        if (pin) pin();\n        this._zoomAnim = p2 < 1 ? requestAnimationFrame(step) : null;\n      };\n      this._zoomAnim = requestAnimationFrame(step);\n    }\n    _cancelZoomAnim() {\n      if (this._zoomAnim) {\n        cancelAnimationFrame(this._zoomAnim);\n        this._zoomAnim = null;\n      }\n    }\n    // Absolute display percent (the pill's number) \u2192 userZoom, clamped to the\n    // same 25%\u2013400%-of-fit range as zoomBy. Mobile zoom slider (Owen 9-09).\n    setZoomPercent(p2) {\n      this._cancelZoomAnim();\n      this.userZoom = Math.min(4, Math.max(0.25, p2 / 100 / this.fitScale));\n      this._applyZoom();\n    }\n    // Measured ink overhang beyond fabric's text box (design units, \u22650 per\n    // side). fabric allots each line fontSize\u00D7_fontSizeMult with the baseline\n    // at (1 \u2212 _fontSizeFraction) of it \u2014 script faces (Kaushan) overshoot that\n    // box on every side. measureText's actualBoundingBox matches the fillText\n    // raster exactly, so containment is MEASURED, never modeled; well-behaved\n    // fonts come back all-zero. charSpacing never moves vertical extents;\n    // horizontal overhang is the EDGE glyphs' side bearings (interior glyphs\n    // paint inside their neighbors' advances). Stroke (outline effect) paints\n    // half its width past the glyph edge vertically \u2014 the horizontal share is\n    // already covered by _hugWidth's strokeWidth\u00D72 term.\n    _inkOverhang(t2) {\n      const out = { l: 0, r: 0, t: 0, b: 0 };\n      const lines = t2.textLines || [];\n      if (!lines.length) return out;\n      const ctx = this._measureCtx = this._measureCtx || document.createElement(\"canvas\").getContext(\"2d\");\n      ctx.font = (t2.fontStyle === \"italic\" ? \"italic \" : \"\") + (t2.fontWeight || 400) + \" \" + t2.fontSize + 'px \"' + t2.fontFamily + '\"';\n      const impl = t2.fontSize * (t2._fontSizeMult || 1.13);\n      const frac = t2._fontSizeFraction != null ? t2._fontSizeFraction : 0.222;\n      const sw = 0;\n      for (let i2 = 0; i2 < lines.length; i2++) {\n        const line = lines[i2];\n        if (!line) continue;\n        const m = ctx.measureText(line);\n        if (m.actualBoundingBoxAscent == null) return out;\n        if (i2 === 0) out.t = Math.max(out.t, m.actualBoundingBoxAscent + sw - impl * (1 - frac));\n        if (i2 === lines.length - 1) out.b = Math.max(out.b, m.actualBoundingBoxDescent + sw - impl * frac);\n        out.l = Math.max(out.l, m.actualBoundingBoxLeft || 0);\n        const spacingW = (t2.charSpacing || 0) / 1e3 * t2.fontSize * Math.max(0, line.length - 1);\n        const fw = (t2.getLineWidth ? t2.getLineWidth(i2) : m.width) - spacingW;\n        out.r = Math.max(out.r, (m.actualBoundingBoxRight || 0) - Math.min(fw, m.width));\n      }\n      out.t = Math.max(0, out.t);\n      out.b = Math.max(0, out.b);\n      out.l = Math.max(0, out.l);\n      out.r = Math.max(0, out.r);\n      return out;\n    }\n    // Snap a textbox's width to its content (widest unwrapped line + stroke), unless the\n    // user has taken manual control of the width.\n    _hugWidth(t2) {\n      if (!t2 || !t2.isType || !t2.isType(\"textbox\") || t2.__manualWidth) return;\n      const center = t2.getRelativeCenterPoint();\n      const prevShift = t2.__fxShift || { x: 0, y: 0 };\n      const glyphCenter = center.add(this._objVecToParent(t2, prevShift));\n      t2.set(\"width\", DESIGN_UNITS * 10);\n      t2.initDimensions();\n      let extra = 2;\n      const ov = this._inkOverhang(t2);\n      if (!t2.__shape) {\n        const ext = this._effectExtents(t2);\n        ov.l += ext.l;\n        ov.r += ext.r;\n        ov.t += ext.t;\n        ov.b += ext.b;\n      } else {\n        if (t2.shadow) extra += 2 * (Math.abs(t2.shadow.offsetX || 0) + (t2.shadow.blur || 0));\n        if (t2.__effect === \"echo\") extra += 4 * Math.abs(this._echoParams(t2).dx);\n      }\n      extra += Math.max(t2.fontStyle === \"italic\" ? t2.fontSize * 0.3 : 0, ov.l + ov.r);\n      const w2 = t2.calcTextWidth() + extra;\n      t2.set(\"width\", Math.max(20, w2));\n      t2.initDimensions();\n      if ((t2.charSpacing || 0) < 0 && t2.width > Math.max(20, w2)) t2.width = Math.max(20, w2);\n      if (!t2.isEditing && !t2.__shape && (ov.t > 0.5 || ov.b > 0.5)) {\n        t2.height += ov.t + ov.b;\n        t2.__inkDy = ov.t;\n      } else {\n        t2.__inkDy = 0;\n      }\n      if (!t2.isEditing && !t2.__shape && (ov.l > 0.5 || ov.r > 0.5)) {\n        const a2 = t2.textAlign || \"left\";\n        t2.__inkDx = a2 === \"right\" || a2 === \"justify-right\" ? -ov.r : a2 === \"center\" || a2 === \"justify-center\" ? (ov.l - ov.r) / 2 : ov.l;\n      } else {\n        t2.__inkDx = 0;\n      }\n      t2.padding = t2.__shape && t2.shadow ? 4 + Math.round(Math.abs(t2.shadow.offsetY || 0) + (t2.shadow.blur || 0)) : 4;\n      this._bgInflate(t2);\n      if (t2.__gradFill) {\n        if (t2.fill && typeof t2.fill === \"object\") t2.fill = this._inkFill(t2);\n        if (t2.stroke && typeof t2.stroke === \"object\") t2.stroke = this._inkFill(t2);\n        t2.dirty = true;\n      }\n      this._syncFxRender(t2);\n      const shift = { x: t2.__inkDx || 0, y: !t2.isEditing && !t2.__shape && (ov.t > 0.5 || ov.b > 0.5) ? (ov.t - ov.b) / 2 : 0 };\n      t2.__fxShift = shift;\n      t2.setPositionByOrigin(glyphCenter.subtract(this._objVecToParent(t2, shift)), \"center\", \"center\");\n      t2.setCoords();\n      if (t2.__shape) this._shapeApply(t2);\n    }\n    // Object-space vector (object units) \u2192 parent-frame vector: scaled, then\n    // rotated by the object's angle. Used to pin the glyph anchor across hugs.\n    _objVecToParent(t2, v2) {\n      const p2 = new N((v2.x || 0) * (t2.scaleX || 1) * (t2.flipX ? -1 : 1), (v2.y || 0) * (t2.scaleY || 1) * (t2.flipY ? -1 : 1));\n      return p2.rotate(Ga.degreesToRadians(t2.angle || 0));\n    }\n    // Per-side extent (object units) an effect paints BEYOND the glyph ink:\n    // drop/splice = the shadow copy (offset + blur), echo = the 2\u00D7 trail.\n    _effectExtents(t2) {\n      const e24 = { l: 0, r: 0, t: 0, b: 0 };\n      if (t2.__effect === \"echo\") {\n        const { dx, dy } = this._echoParams(t2);\n        e24.r += Math.max(0, 2 * dx);\n        e24.l += Math.max(0, -2 * dx);\n        e24.b += Math.max(0, 2 * dy);\n        e24.t += Math.max(0, -2 * dy);\n      } else if (t2.shadow) {\n        const ox = t2.shadow.offsetX || 0, oy = t2.shadow.offsetY || 0, bl = t2.shadow.blur || 0;\n        e24.r += Math.max(0, ox + bl);\n        e24.l += Math.max(0, -ox + bl);\n        e24.b += Math.max(0, oy + bl);\n        e24.t += Math.max(0, -oy + bl);\n      }\n      return e24;\n    }\n    // Placement defaults must CONTRAST the board (Owen 9-08 \"when adding an\n    // effect it contrasts what it's applied to\" \u2014 extended to Add Text and\n    // element placement): ink on light boards, white on dark, slate when the\n    // board sits between. Board only \u2014 a fresh object has no element context.\n    _autoInk() {\n      const bg = this._boardBg || \"#ffffff\";\n      const h2 = /^#[0-9a-f]{6}$/i.test(bg) ? bg : \"#ffffff\";\n      const lum = (0.2126 * parseInt(h2.slice(1, 3), 16) + 0.7152 * parseInt(h2.slice(3, 5), 16) + 0.0722 * parseInt(h2.slice(5, 7), 16)) / 255;\n      if (lum < 0.35) return \"#ffffff\";\n      if (lum > 0.62) return \"#0f172a\";\n      return lum < 0.5 ? \"#f1f5f9\" : \"#0f172a\";\n    }\n    async addText(family = \"Poppins\") {\n      await loadFont(family);\n      const land = this._landing();\n      const box = new fs(\"Your text\", {\n        fontFamily: family,\n        fontWeight: 700,\n        fontSize: 120,\n        fill: this._autoInk(),\n        textAlign: \"center\",\n        width: this.designW * 0.7,\n        left: land.x,\n        // shared add-landing cascade (_landing)\n        top: land.y,\n        originX: \"center\",\n        originY: \"center\"\n      });\n      this._hugWidth(box);\n      this._styleSelection(box);\n      this._attachTextHooks([box]);\n      this.canvas.add(box);\n      this._clampOntoBoard([box]);\n      this.canvas.setActiveObject(box);\n      this.canvas.requestRenderAll();\n      return box;\n    }\n    // \u2500\u2500 Text treatments (registry: src/text-treatments.js) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // Build a FULLY STYLED textbox from a treatment part spec WITHOUT adding it\n    // to the canvas. One code path serves placement (addTreatedText below) and\n    // the gallery's pixel-true thumbnails (a detached box rendered onto a\n    // StaticCanvas) \u2014 all styling routes through the same *_To appliers the\n    // toolbar uses, so a placed treatment is indistinguishable from hand-built\n    // text: editable, effects adjustable, serializes/restores identically.\n    async buildTreatedText(spec) {\n      const family = spec.family || \"Poppins\";\n      await loadFont(family);\n      try {\n        await document.fonts.load(\n          (spec.italic ? \"italic \" : \"\") + (spec.weight || 400) + ' 32px \"' + family + '\"'\n        );\n      } catch (e24) {\n      }\n      const box = new fs(spec.text || \"Your text\", {\n        fontFamily: family,\n        fontWeight: spec.weight || 400,\n        fontStyle: spec.italic ? \"italic\" : \"normal\",\n        fontSize: spec.fontSize || 120,\n        lineHeight: spec.lineHeight || 1.16,\n        charSpacing: spec.charSpacing || 0,\n        fill: spec.fill || this._autoInk(),\n        textAlign: \"center\",\n        width: this.designW * 0.7,\n        left: 0,\n        top: 0,\n        originX: \"center\",\n        originY: \"center\"\n      });\n      const fx = spec.fx || {};\n      if (fx.direction != null) box.__fxDirection = fx.direction;\n      if (fx.offset != null) box.__fxOffset = fx.offset;\n      if (fx.echo2 != null) box.__fxEcho2 = fx.echo2;\n      if (fx.round != null) box.__fxRound = fx.round;\n      if (fx.spread != null) box.__fxSpread = fx.spread;\n      if (spec.gradient) this._setGradientTo(box, spec.gradient);\n      if (spec.effect) this._applyTextEffectTo(box, spec.effect.kind, spec.effect.color, spec.effect.size);\n      else this._hugWidth(box);\n      if (spec.shape) this._setShapeTo(box, spec.shape.kind, spec.shape.amount);\n      return box;\n    }\n    // Place a treatment: the main part plus an optional stacked `sub` part\n    // (Canva's \"font combinations\" pairs) lands with the same cascade as Add\n    // Text, clamped onto the board AS A UNIT, and selected. Pairs stay two\n    // independent editable textboxes selected together \u2014 NOT a Group: canvas\n    // double-click text editing inside a Group needs subTargetCheck this\n    // canvas doesn't run, so grouping would strand the pair uneditable.\n    async addTreatedText(preset) {\n      const dark = this._autoInk() === \"#ffffff\";\n      const partSpec = (p2) => dark && p2.dark ? { ...p2, ...p2.dark } : p2;\n      const land = this._landing();\n      const cx = land.x;\n      const cy = land.y;\n      const parts = [preset, ...preset.sub ? [preset.sub] : []];\n      const boxes = [];\n      for (const p2 of parts) {\n        const box = await this.buildTreatedText(partSpec(p2));\n        box.setPositionByOrigin(new N(cx + (p2.dx || 0), cy + (p2.dy || 0)), \"center\", \"center\");\n        box.setCoords();\n        this._styleSelection(box);\n        this._attachTextHooks([box]);\n        this.canvas.add(box);\n        if (box.__shape) this._shapeApply(box);\n        boxes.push(box);\n      }\n      this._clampOntoBoard(boxes);\n      this.canvas.discardActiveObject();\n      if (boxes.length === 1) {\n        this.canvas.setActiveObject(boxes[0]);\n      } else {\n        const sel = new gs(boxes, { canvas: this.canvas });\n        this.canvas.setActiveObject(sel);\n        this._styleSelection(sel);\n      }\n      this.canvas.requestRenderAll();\n      this._emit(\"selection\");\n      return boxes;\n    }\n    // Landing spot for anything ADDED from a pane \u2014 text, text pairs, shapes,\n    // images (uploads, AI results, Pre-Made, My Designs). Board center, stepping\n    // 40 design px down-right while an existing board object already sits on\n    // the spot (within 24 px), wrapping after 8 steps; callers clamp onto the\n    // board. One rule for every add (Owen 9-17 \"if an element is added twice,\n    // it adds them on the same place\" \u2014 only text cascaded, on a blind counter\n    // from 9-08; shapes and images stacked dead-center). Occupancy-based like\n    // Canva: move the first one away and the next add lands centered again.\n    // Paste/duplicate keep _placeCascade \u2014 they offset from the SOURCE object.\n    _landing() {\n      const STEP = 40, NEAR = 24, MAX = 8;\n      const cx = this.designW / 2;\n      let cy = this.designH / 2;\n      const base = this._boardObjects().find((o2) => o2.__base);\n      if (base) cy = Math.min(this.designH - 60, base.getCenterPoint().y + base.getScaledHeight() / 2 + 70);\n      const centers = this._boardObjects().filter((o2) => !o2.__base).map((o2) => o2.getCenterPoint());\n      const taken = (x2, y2) => centers.some((c2) => Math.abs(c2.x - x2) < NEAR && Math.abs(c2.y - y2) < NEAR);\n      for (let i2 = 0; i2 <= MAX; i2++) {\n        if (!taken(cx + i2 * STEP, cy + i2 * STEP)) return new N(cx + i2 * STEP, cy + i2 * STEP);\n      }\n      const n2 = centers.length % (MAX + 1);\n      return new N(cx + n2 * STEP, cy + n2 * STEP);\n    }\n    // Shaped text edits FLAT: fabric's native caret is exact on flat text and a\n    // moving glyph under the cursor is not. The shape re-applies on exit.\n    _attachTextHooks(objs) {\n      for (const t2 of objs) {\n        if (!t2.isType || !t2.isType(\"textbox\") || t2.__editHooked) continue;\n        t2.__editHooked = true;\n        t2.on(\"editing:entered\", () => {\n          if (t2.__shape) this._shapeFlatten(t2);\n          t2.__editCenter = t2.getRelativeCenterPoint().add(this._objVecToParent(t2, t2.__fxShift || { x: 0, y: 0 }));\n          if (t2.__effect === \"background\" || t2.__inkDy || t2.__inkDx) {\n            this._hugWidth(t2);\n            this._syncFxRender(t2);\n          }\n        });\n        t2.on(\"editing:exited\", () => {\n          if (t2.__editCenter) {\n            t2.setPositionByOrigin(t2.__editCenter, \"center\", \"center\");\n            t2.__fxShift = { x: 0, y: 0 };\n            t2.setCoords();\n            t2.__editCenter = null;\n          }\n          if (t2.__shape) {\n            this._shapeApply(t2);\n          } else {\n            this._hugWidth(t2);\n            this._syncFxRender(t2);\n          }\n          this.canvas.requestRenderAll();\n        });\n      }\n    }\n    // Ink bounding box of an element's alpha (2px sampling, widened back by the\n    // step). null when fully opaque-ish, empty, or unreadable (tainted canvas).\n    _inkBBox(el2) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      if (!w2 || !h2) return null;\n      const cv = document.createElement(\"canvas\");\n      cv.width = w2;\n      cv.height = h2;\n      const ctx = cv.getContext(\"2d\", { willReadFrequently: true });\n      ctx.drawImage(el2, 0, 0);\n      let d2;\n      try {\n        d2 = ctx.getImageData(0, 0, w2, h2).data;\n      } catch (e24) {\n        return null;\n      }\n      let minX = w2, minY = h2, maxX = -1, maxY = -1;\n      const step = 2;\n      for (let y2 = 0; y2 < h2; y2 += step) {\n        const row = y2 * w2 * 4;\n        for (let x2 = 0; x2 < w2; x2 += step) {\n          if (d2[row + x2 * 4 + 3] > 8) {\n            if (x2 < minX) minX = x2;\n            if (x2 > maxX) maxX = x2;\n            if (y2 < minY) minY = y2;\n            if (y2 > maxY) maxY = y2;\n          }\n        }\n      }\n      if (maxX < 0) return null;\n      minX = Math.max(0, minX - step);\n      minY = Math.max(0, minY - step);\n      maxX = Math.min(w2 - 1, maxX + step);\n      maxY = Math.min(h2 - 1, maxY + step);\n      return { x: minX, y: minY, w: maxX - minX + 1, h: maxY - minY + 1, gw: w2, gh: h2 };\n    }\n    // Hug the ink at placement: meaningful transparent padding becomes an\n    // initial CROP WINDOW instead of a server-side trim (Owen 9-05). Every\n    // render of the source (original, ix/pc bg-remove, filters) then shares ONE\n    // pixel grid \u2014 bg-remove preserves dimensions \u2014 so model/filter swaps can\n    // never re-map the window (the trim-mismatch bug class).\n    _applyInkCrop(img) {\n      const bb = this._inkBBox(img._originalElement || img._element);\n      if (!bb) return;\n      if (bb.w > bb.gw * 0.98 && bb.h > bb.gh * 0.98) return;\n      img.set({ cropX: bb.x, cropY: bb.y, width: bb.w, height: bb.h });\n      img.__autoWindow = { x: bb.x / bb.gw, y: bb.y / bb.gh, w: bb.w / bb.gw, h: bb.h / bb.gh };\n    }\n    async addImageFromFile(file) {\n      const url = URL.createObjectURL(file);\n      const img = await ws.fromURL(url, { crossOrigin: \"anonymous\" });\n      this._applyInkCrop(img);\n      const s3 = this._placementScale(img);\n      const land = this._landing();\n      img.set({\n        scaleX: s3,\n        scaleY: s3,\n        left: land.x,\n        top: land.y,\n        originX: \"center\",\n        originY: \"center\"\n      });\n      img.__originalSrc = url;\n      img.__fileName = file.name || \"\";\n      this._styleSelection(img);\n      this.canvas.add(img);\n      this._clampOntoBoard([img]);\n      this.canvas.setActiveObject(img);\n      this.canvas.requestRenderAll();\n      return img;\n    }\n    // Place an already-hosted image (QR handoff, uploaded-files library, imgix\n    // renders of print formats) \u2014 no local blob involved.\n    _placementScale(img) {\n      return Math.min(this.designW, this.designH) * 0.7 / Math.max(img.width, img.height);\n    }\n    // Shrink-wrap the crop window to the CURRENT element's ink (Owen 9-05: on a\n    // bg-remove model swap the bounding box \"never goes past the original's\n    // height or width \u2014 it can shrink the lesser dimension\"). The window only\n    // ever INTERSECTS with the new ink box (never grows), and the object's\n    // center shifts by the window-center delta in scene space so the remaining\n    // pixels stay exactly where they were on the board.\n    shrinkWrapWindow(img) {\n      const baseEl = img.__preRecolorEl || img._originalElement || img._element;\n      const bb = this._inkBBox(baseEl);\n      if (!bb) return;\n      const sp = img.__stickerPad || 0;\n      if (sp) {\n        bb.w = bb.w + 2 * sp;\n        bb.h = bb.h + 2 * sp;\n      }\n      const ox0 = img.cropX || 0;\n      const oy0 = img.cropY || 0;\n      const ow0 = img.width;\n      const oh0 = img.height;\n      let x0 = ox0;\n      let y0 = oy0;\n      let w0 = ow0;\n      let h0 = oh0;\n      const coreW = Math.max(1, bb.gw);\n      const coreH = Math.max(1, bb.gh);\n      const auto = img.__autoWindow;\n      const isAuto = auto && Math.abs(x0 / coreW - auto.x) < 0.01 && Math.abs(y0 / coreH - auto.y) < 0.01 && Math.abs(w0 / coreW - auto.w) < 0.01 && Math.abs(h0 / coreH - auto.h) < 0.01;\n      if (isAuto) {\n        x0 = bb.x;\n        y0 = bb.y;\n        w0 = bb.w;\n        h0 = bb.h;\n      }\n      const nx = Math.max(x0, bb.x);\n      const ny = Math.max(y0, bb.y);\n      const nw = Math.max(1, Math.min(x0 + w0, bb.x + bb.w) - nx);\n      const nh = Math.max(1, Math.min(y0 + h0, bb.y + bb.h) - ny);\n      if (isAuto) img.__autoWindow = { x: nx / coreW, y: ny / coreH, w: nw / coreW, h: nh / coreH };\n      if (nw >= ow0 - 2 && nh >= oh0 - 2 && Math.abs(nx - ox0) < 2 && Math.abs(ny - oy0) < 2) return;\n      const dcx = (nx + nw / 2 - (ox0 + ow0 / 2)) * img.scaleX;\n      const dcy = (ny + nh / 2 - (oy0 + oh0 / 2)) * img.scaleY;\n      const rad = (img.angle || 0) * Math.PI / 180;\n      const cur = img.getRelativeCenterPoint();\n      img.set({ cropX: nx, cropY: ny, width: nw, height: nh });\n      img.setPositionByOrigin(\n        new N(\n          cur.x + dcx * Math.cos(rad) - dcy * Math.sin(rad),\n          cur.y + dcx * Math.sin(rad) + dcy * Math.cos(rad)\n        ),\n        \"center\",\n        \"center\"\n      );\n      if (img.__radius) this.setImageRadius(img.__radius, img);\n      img.setCoords();\n      img.dirty = true;\n    }\n    async addImageFromUrl(url, name) {\n      const img = await ws.fromURL(url, { crossOrigin: \"anonymous\" });\n      this._applyInkCrop(img);\n      const s3 = this._placementScale(img);\n      const land = this._landing();\n      img.set({\n        scaleX: s3,\n        scaleY: s3,\n        left: land.x,\n        top: land.y,\n        originX: \"center\",\n        originY: \"center\"\n      });\n      img.__originalSrc = url;\n      img.__fileName = name || url.split(\"/\").pop().split(\"?\")[0];\n      this._styleSelection(img);\n      this.canvas.add(img);\n      this._clampOntoBoard([img]);\n      this.canvas.setActiveObject(img);\n      this.canvas.requestRenderAll();\n      return img;\n    }\n    // Basic shapes (Elements tool): plain fabric primitives placed at canvas\n    // center at ~35% of the design space, brand-ink fill (the line paints via\n    // stroke \u2014 a zero-area line has nothing to fill). They serialize natively\n    // in toDatalessJSON, so undo/redo, clone and export need nothing extra.\n    // Elements v2 (plan: .claude/rules/elements-v2-plan.md): every shape is a\n    // parametric fabric.Path from the elements.js registry \u2014 one geometry source\n    // shared with the pane tiles, and one `roundedPolygonPath` gives circular\n    // corner rounding on ANY polygon at any aspect. `__el` carries the rebuild\n    // params (kind/w/h/round; it rides EditorCloneProps through history/save/\n    // clone); the LOOK stays on native fabric props so old code paths and\n    // exports need nothing.\n    addShape(kind) {\n      const def = ELEMENTS[kind];\n      if (!def) return null;\n      const S2 = Math.min(this.designW, this.designH) * 0.35;\n      const INK = this._autoInk();\n      const land = this._landing();\n      const at2 = { left: land.x, top: land.y, originX: \"center\", originY: \"center\" };\n      let obj;\n      if (def.isLine) {\n        obj = this._buildLineAssembly(kind, S2, at2);\n      } else {\n        const params = Object.assign({ w: S2, h: S2 * (def.aspect || 1) }, DEFAULT_EL_PARAMS(kind));\n        obj = new Mo(buildElementPath(kind, params), Object.assign({ fill: INK }, at2));\n        obj.__el = Object.assign({ kind }, params);\n      }\n      if (!obj) return null;\n      this._styleSelection(obj);\n      this.canvas.add(obj);\n      this._clampOntoBoard([obj]);\n      this.canvas.setActiveObject(obj);\n      this.canvas.requestRenderAll();\n      return obj;\n    }\n    // \u2500\u2500 Line assembly (plan \u00A73b, option A \u2014 Owen-approved) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // A fabric GROUP of shaft (stroked Line: carries dash) + two cap Paths\n    // (an arrowhead is a FILLED triangle \u2014 one object can't stroke its shaft\n    // and fill its head). Two custom endpoint controls re-point/re-length the\n    // line; weight stays constant; caps scale with weight, never with length.\n    // All scaling is locked \u2014 a multi-select scale is normalized back into\n    // `len` on release (_lineNormalize).\n    _buildLineAssembly(kind, S2, at2) {\n      const def = ELEMENTS[kind];\n      const p2 = Object.assign({ kind, isLine: true, len: S2, color: this._autoInk() }, def.defaults);\n      const shaft = new Bo([-p2.len / 2, 0, p2.len / 2, 0], { stroke: p2.color, strokeWidth: p2.weight, strokeLineCap: \"butt\" });\n      shaft.__elRole = \"shaft\";\n      const capS = new Mo(\"M0 0L0.01 0\", { fill: p2.color, stroke: null, visible: false });\n      capS.__elRole = \"capStart\";\n      const capE = new Mo(\"M0 0L0.01 0\", { fill: p2.color, stroke: null, visible: false });\n      capE.__elRole = \"capEnd\";\n      const g2 = new ca([shaft, capS, capE]);\n      g2.__el = p2;\n      this._lineRig(g2);\n      this._rebuildLine(g2);\n      g2.set({ left: at2.left, top: at2.top, originX: \"center\", originY: \"center\" });\n      g2.setCoords();\n      return g2;\n    }\n    // Identify the assembly's children by their __elRole tags (survive\n    // serialization via EditorCloneProps) \u2014 never by index.\n    _lineParts(g2) {\n      const parts = {};\n      for (const c2 of g2.getObjects()) if (c2.__elRole) parts[c2.__elRole] = c2;\n      g2.__elParts = parts;\n      return parts;\n    }\n    // Controls, locks and hit affordances. Control instances here are PER\n    // OBJECT (a fresh controls dict) \u2014 the shared-prototype controls stay\n    // untouched. Does not survive deserialize: _shapeReattach re-rigs.\n    _lineRig(g2) {\n      this._lineParts(g2);\n      g2.set({\n        lockScalingX: true,\n        lockScalingY: true,\n        hasBorders: false,\n        // Canva lines show endpoint knobs, no frame\n        padding: 8,\n        // thin lines are hard to grab\n        subTargetCheck: false,\n        interactive: false\n      });\n      const editor = this;\n      const knob = (ctx, left, top) => {\n        ctx.save();\n        ctx.beginPath();\n        ctx.arc(left, top, 7, 0, Math.PI * 2);\n        ctx.fillStyle = \"#ffffff\";\n        ctx.strokeStyle = \"#019AFF\";\n        ctx.lineWidth = 1.5;\n        ctx.shadowColor = \"rgba(15, 23, 42, 0.25)\";\n        ctx.shadowBlur = 4;\n        ctx.fill();\n        ctx.shadowBlur = 0;\n        ctx.stroke();\n        ctx.restore();\n      };\n      const mk = (endKey, xRel) => new q({\n        x: xRel,\n        y: 0,\n        sizeX: 16,\n        sizeY: 16,\n        touchSizeX: 32,\n        touchSizeY: 32,\n        actionName: \"lineEnd\",\n        cursorStyleHandler: () => \"crosshair\",\n        render: knob,\n        actionHandler: (eventData, transform, x2, y2) => editor._lineEndDrag(endKey, transform, x2, y2)\n      });\n      g2.controls = { lineStart: mk(\"start\", -0.5), lineEnd: mk(\"end\", 0.5) };\n    }\n    // Rebuild the children from __el params IN PLACE (weight/dash/caps/len),\n    // center pinned. Cheap: three tiny objects, mutation + one layout pass.\n    _rebuildLine(g2) {\n      const p2 = g2.__el;\n      const parts = g2.__elParts || this._lineParts(g2);\n      if (!parts.shaft) return;\n      const center = g2.getRelativeCenterPoint();\n      const w2 = p2.weight || 9;\n      const half = (p2.len || 100) / 2;\n      parts.shaft.set({\n        x1: -half + lineCapInset(p2.capStart, w2),\n        y1: 0,\n        x2: half - lineCapInset(p2.capEnd, w2),\n        y2: 0,\n        stroke: p2.color || \"#0f172a\",\n        strokeWidth: w2,\n        strokeDashArray: this._elDash(p2.dash, w2),\n        strokeLineCap: p2.dash === \"dotted\" ? \"round\" : \"butt\"\n      });\n      for (const [role, endX, dir] of [[\"capStart\", -half, -1], [\"capEnd\", half, 1]]) {\n        const cap = parts[role];\n        if (!cap) continue;\n        const kind = p2[role];\n        const d2 = lineCapPath(kind, endX, dir, w2);\n        if (d2) {\n          cap._setPath(d2, true);\n          cap.set({ fill: p2.color || \"#0f172a\", visible: true });\n        } else {\n          cap.set({ visible: false });\n        }\n        cap.dirty = true;\n        cap.setCoords();\n      }\n      parts.shaft.dirty = true;\n      parts.shaft.setCoords();\n      g2.triggerLayout();\n      g2.setPositionByOrigin(center, \"center\", \"center\");\n      g2.dirty = true;\n      g2.setCoords();\n    }\n    // Param changes from the toolbar (color / weight / dash / per-end caps).\n    setLineProps(g2, patch) {\n      const p2 = g2 && g2.__el;\n      if (!p2 || !p2.isLine) return;\n      Object.assign(p2, patch);\n      this._rebuildLine(g2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: g2 });\n    }\n    // Endpoint drag: the OTHER endpoint stays fixed in scene coords; center,\n    // angle and len re-derive from fixed\u2192pointer; children rebuild so caps and\n    // weight never distort (Canva's line behavior).\n    _lineEndDrag(endKey, transform, x2, y2) {\n      const g2 = transform.target;\n      const p2 = g2 && g2.__el;\n      if (!p2) return false;\n      if (!transform.__elFixed) {\n        const m = g2.calcTransformMatrix();\n        const fixedLocal = endKey === \"start\" ? new N(p2.len / 2, 0) : new N(-p2.len / 2, 0);\n        transform.__elFixed = fixedLocal.transform(m);\n      }\n      const fixed = transform.__elFixed;\n      const dx = x2 - fixed.x, dy = y2 - fixed.y;\n      p2.len = Math.max(10, Math.hypot(dx, dy));\n      let angle = Math.atan2(dy, dx) * 180 / Math.PI;\n      if (endKey === \"start\") angle += 180;\n      g2.set({ angle: (angle % 360 + 360) % 360 });\n      this._rebuildLine(g2);\n      g2.setPositionByOrigin(new N((fixed.x + x2) / 2, (fixed.y + y2) / 2), \"center\", \"center\");\n      g2.setCoords();\n      this.canvas.requestRenderAll();\n      return true;\n    }\n    // EVEN DASH FIT for shapes (parity with the image contours, Owen 9-08\n    // \"cleaner dashed lines\"): rescale the pattern so an INTEGER number of\n    // dash+gap units closes the path \u2014 no ragged partial dash at the seam.\n    // Path objects only (legacy migrated primitives keep the nominal pattern).\n    _elApplyDash(o2) {\n      const p2 = o2 && o2.__el;\n      if (!p2) return;\n      const style = p2.bstyle || \"none\";\n      if (style !== \"dashed\" && style !== \"longdash\" && style !== \"dotted\" || !o2.path) return;\n      let dash = this._elDash(style, p2.bweight || 12);\n      try {\n        const info = Ga.getPathSegmentsInfo(o2.path);\n        const L2 = info[info.length - 1].length;\n        const unit = dash[0] + dash[1];\n        if (L2 > unit * 2) {\n          const n2 = Math.max(3, Math.round(L2 / unit));\n          const sc2 = L2 / (n2 * unit);\n          dash = [dash[0] * sc2, dash[1] * sc2];\n        }\n      } catch (e24) {\n      }\n      o2.set(\"strokeDashArray\", dash);\n    }\n    // Dash arrays are WEIGHT-RELATIVE (plan \u00A75.8) \u2014 recompute on every weight\n    // change or dashes go visually wrong as the weight moves. With\n    // strokeUniform the dashes also stay constant under scale.\n    _elDash(style, w2) {\n      if (style === \"dashed\") return [w2 * 2.2, w2 * 1.6];\n      if (style === \"longdash\") return [w2 * 4.6, w2 * 2.2];\n      if (style === \"dotted\") return [0.01, w2 * 2];\n      return null;\n    }\n    // Shape border: style (none/solid/dashed/longdash) + weight + color. State\n    // lives in __el (bstyle/bweight/bcolor \u2014 the rebuild params); the LOOK is\n    // native stroke props so serialization/export need nothing. strokeUniform\n    // keeps the border from fattening under resize (crop-rect precedent).\n    setElBorder(o2, patch) {\n      const p2 = o2 && o2.__el;\n      if (!p2) return;\n      if (patch.style != null) p2.bstyle = patch.style;\n      if (patch.weight != null) p2.bweight = patch.weight;\n      if (patch.color != null) p2.bcolor = patch.color;\n      this._elStrokeSync(o2);\n      o2.dirty = true;\n      o2.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    // OUTWARD outline for shapes \u2014 ALWAYS (Owen 9-08 \"the object changes\n    // considerably when you apply transparent\"): stroke at DOUBLE width so the\n    // visible ring sits entirely outside the geometry, with the inner half\n    // hidden by whichever mechanism the fill state allows:\n    //   fill on  \u2192 paintFirst 'stroke' (the fill paints over the inner half)\n    //   no fill  \u2192 an INVERTED clipPath of the same geometry erases it \u2014\n    //              shapes are exact vectors, so unlike uploads there's no\n    //              edge/halo ambiguity to fight. Native, serializes.\n    // Legacy migrated primitives (no registry builder/path) keep a centered\n    // ring \u2014 the only fallback left.\n    // \u26A0 A fill OR geometry change must re-run this: setElBorder (any patch,\n    // {} included) and _elRebuild both do.\n    _elStrokeSync(o2) {\n      const p2 = o2.__el;\n      const style = p2.bstyle || \"none\";\n      if (style === \"none\") {\n        o2.set({ stroke: null, strokeDashArray: null, paintFirst: \"fill\" });\n        o2.clipPath = void 0;\n        this._elDetachRing(o2);\n        o2.dirty = true;\n        return;\n      }\n      const w2 = p2.bweight || 12;\n      const hasFill = typeof o2.fill === \"string\" && !!o2.fill;\n      const def = ELEMENTS[p2.kind];\n      const canOffset = !!(def && def.build && o2.path);\n      const eff = this.outlineTracksScale ? 1 : this._effScale(o2);\n      const wDraw = w2 / eff;\n      o2.set({\n        stroke: p2.bcolor || \"#0f172a\",\n        strokeWidth: hasFill || canOffset ? wDraw * 2 : wDraw,\n        // 2w also sizes the bbox/cache to the outward band\n        paintFirst: hasFill ? \"stroke\" : \"fill\",\n        strokeUniform: false,\n        strokeDashArray: this._elDash(style, wDraw),\n        strokeLineCap: style === \"dotted\" ? \"round\" : \"butt\",\n        strokeLineJoin: \"round\"\n      });\n      if (style !== \"solid\" && canOffset) {\n        o2.clipPath = void 0;\n        this._elBuildRing(o2, wDraw, style);\n        this._elAttachRing(o2);\n      } else {\n        this._elDetachRing(o2);\n        if (!hasFill && canOffset) {\n          o2.clipPath = new Mo(buildElementPath(p2.kind, p2), {\n            inverted: true,\n            originX: \"center\",\n            originY: \"center\",\n            left: 0,\n            top: 0\n          });\n        } else {\n          o2.clipPath = void 0;\n        }\n        this._elApplyDash(o2);\n      }\n      o2.dirty = true;\n    }\n    // Sample the shape's own path at even arc length and push each sample out\n    // along its normal \u2014 a numeric outward offset that works for EVERY builder\n    // (polygons, ellipse, heart) with no per-shape math. Cached on __elRing.\n    _elBuildRing(o2, w2, style) {\n      const infos = Ga.getPathSegmentsInfo(o2.path);\n      const total = infos[infos.length - 1].length;\n      if (!total || !isFinite(total)) return this._elDetachRing(o2);\n      const n2 = Math.max(32, Math.min(480, Math.round(total / 4)));\n      const base = [];\n      for (let i2 = 0; i2 < n2; i2++) {\n        const pt2 = Ga.getPointOnPath(o2.path, total * i2 / n2, infos);\n        base.push({ x: pt2.x, y: pt2.y });\n      }\n      const d2 = w2 / 2;\n      const offsetBy = (sgn) => base.map((pt2, i2) => {\n        const prev = base[(i2 - 1 + n2) % n2], next = base[(i2 + 1) % n2];\n        let tx = next.x - prev.x, ty = next.y - prev.y;\n        const L2 = Math.hypot(tx, ty) || 1;\n        tx /= L2;\n        ty /= L2;\n        return { x: pt2.x + -ty * d2 * sgn, y: pt2.y + tx * d2 * sgn };\n      });\n      const bbox = (pts) => {\n        let minX = Infinity, maxX = -Infinity;\n        for (const pt2 of pts) {\n          minX = Math.min(minX, pt2.x);\n          maxX = Math.max(maxX, pt2.x);\n        }\n        return maxX - minX;\n      };\n      let ring2 = offsetBy(1);\n      if (bbox(ring2) < bbox(base)) ring2 = offsetBy(-1);\n      let len = 0;\n      for (let i2 = 0; i2 < n2; i2++) {\n        const a2 = ring2[i2], b2 = ring2[(i2 + 1) % n2];\n        len += Math.hypot(b2.x - a2.x, b2.y - a2.y);\n      }\n      const patt = this._elDash(style, w2) || [w2, w2];\n      const unit = patt[0] + patt[1];\n      const k2 = Math.max(3, Math.round(len / unit));\n      const sc2 = len / (k2 * unit);\n      o2.__elRing = {\n        pts: ring2,\n        w: w2,\n        dash: [patt[0] * sc2, patt[1] * sc2],\n        cap: style === \"dotted\" ? \"round\" : \"butt\"\n      };\n    }\n    _elAttachRing(o2) {\n      if (o2.__elRingRender) return;\n      o2.__elRingRender = true;\n      o2._render = function(ctx) {\n        const s3 = this.stroke;\n        this.stroke = null;\n        Mo.prototype._render.call(this, ctx);\n        this.stroke = s3;\n        const ring2 = this.__elRing;\n        if (!ring2 || ring2.pts.length < 3) return;\n        ctx.save();\n        ctx.beginPath();\n        const ox = this.pathOffset.x, oy = this.pathOffset.y;\n        ctx.moveTo(ring2.pts[0].x - ox, ring2.pts[0].y - oy);\n        for (let i2 = 1; i2 < ring2.pts.length; i2++) ctx.lineTo(ring2.pts[i2].x - ox, ring2.pts[i2].y - oy);\n        ctx.closePath();\n        ctx.lineWidth = ring2.w;\n        ctx.strokeStyle = s3 || \"#0f172a\";\n        ctx.lineJoin = \"round\";\n        ctx.lineCap = ring2.cap;\n        ctx.setLineDash(ring2.dash);\n        ctx.stroke();\n        ctx.restore();\n      };\n    }\n    _elDetachRing(o2) {\n      o2.__elRing = null;\n      if (o2.__elRingRender) {\n        delete o2._render;\n        o2.__elRingRender = false;\n      }\n    }\n    // Element transparency (0..100 slider \u2192 opacity). Native prop, serializes.\n    setElOpacity(o2, pct) {\n      if (!o2) return;\n      o2.set(\"opacity\", Math.min(1, Math.max(0, 1 - pct / 100)));\n      o2.dirty = true;\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    // Rebuild a shape's path from its __el params IN PLACE, center pinned.\n    // fabric v7 Path._setPath(d, false) recomputes path/pathOffset/width/height\n    // without repositioning; the explicit center re-pin covers builds whose\n    // bbox changed (absorb-scale). Fires NO events \u2014 callers decide.\n    _elRebuild(o2) {\n      const p2 = o2 && o2.__el;\n      const def = p2 && ELEMENTS[p2.kind];\n      if (!def || !def.build || p2.isLine) return;\n      const center = o2.getRelativeCenterPoint();\n      o2._setPath(buildElementPath(p2.kind, p2));\n      o2.setPositionByOrigin(center, \"center\", \"center\");\n      if (p2.bstyle && p2.bstyle !== \"none\") this._elStrokeSync(o2);\n      o2.dirty = true;\n      o2.setCoords();\n    }\n    // Corner rounding (0..100) \u2014 a PARAM rebuild via roundedPolygonPath, never\n    // rx/ry (fabric's native rounding is Rect-only and goes elliptical under\n    // stretch \u2014 plan \u00A73a). Only caps.corners shapes get the control.\n    setElRound(o2, round) {\n      const p2 = o2 && o2.__el;\n      if (!p2) return;\n      p2.round = Math.min(100, Math.max(0, round));\n      this._elRebuild(o2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    // Multi-select gotcha (plan \u00A73b): fabric applies an ActiveSelection's scale\n    // to MEMBERS regardless of member locks, baking it at discard. Any line\n    // assembly with non-unit scale absorbs it: local endpoints map through the\n    // scaled matrix (exact under rotation + non-uniform scale), then center/\n    // angle/len re-derive, scale resets to 1, weight stays constant.\n    _lineNormalize(g2) {\n      const p2 = g2 && g2.__el;\n      if (!p2 || !p2.isLine) return;\n      const sx = g2.scaleX || 1, sy = g2.scaleY || 1;\n      if (Math.abs(Math.abs(sx) - 1) < 1e-6 && Math.abs(Math.abs(sy) - 1) < 1e-6) return;\n      const m = g2.calcTransformMatrix();\n      const a2 = new N(-p2.len / 2, 0).transform(m);\n      const b2 = new N(p2.len / 2, 0).transform(m);\n      p2.len = Math.max(10, Math.hypot(b2.x - a2.x, b2.y - a2.y));\n      if (this.outlineTracksScale) p2.weight = Math.max(1, Math.round((p2.weight || 9) * ((Math.abs(sx) + Math.abs(sy)) / 2)));\n      g2.set({ scaleX: 1, scaleY: 1, angle: Math.atan2(b2.y - a2.y, b2.x - a2.x) * 180 / Math.PI });\n      this._rebuildLine(g2);\n      g2.setPositionByOrigin(new N((a2.x + b2.x) / 2, (a2.y + b2.y) / 2), \"center\", \"center\");\n      g2.setCoords();\n      this.canvas.requestRenderAll();\n    }\n    // Absorb non-unit scale into the builder's w/h and rebuild \u2014 the rounding\n    // radius stays CIRCULAR at any aspect (the rx\u00B7scaleX class of problem,\n    // plan \u00A75.9). Runs on object:modified and on multi-select release (an\n    // ActiveSelection bakes its transform onto members at discard, plan \u00A75.4 \u2014\n    // fabric applies selection scale to members regardless of member locks).\n    _elAbsorbScale(t2) {\n      const p2 = t2 && t2.__el;\n      if (!p2 || p2.isLine) return;\n      const def = ELEMENTS[p2.kind];\n      if (!def) return;\n      if (!this.outlineTracksScale && (!def.caps || !def.caps.corners)) {\n        if (p2.bstyle && p2.bstyle !== \"none\") this._elStrokeSync(t2);\n        return;\n      }\n      const sx = t2.scaleX || 1, sy = t2.scaleY || 1;\n      if (Math.abs(Math.abs(sx) - 1) < 1e-6 && Math.abs(Math.abs(sy) - 1) < 1e-6) return;\n      if (this.outlineTracksScale && p2.bweight) p2.bweight = Math.max(1, Math.round(p2.bweight * ((Math.abs(sx) + Math.abs(sy)) / 2)));\n      p2.w = Math.max(2, p2.w * Math.abs(sx));\n      p2.h = Math.max(2, p2.h * Math.abs(sy));\n      t2.set({ scaleX: sx < 0 ? -1 : 1, scaleY: sy < 0 ? -1 : 1 });\n      this._elRebuild(t2);\n      this.canvas.requestRenderAll();\n    }\n    // Swap an image object's pixels while preserving its DISPLAYED size AND its\n    // derived geometry. The new render's intrinsic size differs from the old\n    // element's (local blob vs w=2000 imgix render, trim differences), so\n    // everything expressed in element pixels must re-project onto the new one:\n    //   - a rotated-crop bake (__bake) is REPLAYED against the new element\n    //   - the cropX/cropY window is carried over as FRACTIONS of the element\n    //   - the corner-radius clipPath is rebuilt for the new window size\n    // Skipping any of these leaves the crop window pointing at a wrong tiny\n    // region of the new element (the filter-on-cropped-image bug).\n    async replaceImageSource(obj, url) {\n      const displayedW = obj.getScaledWidth();\n      const oldEl = obj._originalElement || obj._element;\n      const pad = obj.__stickerPad || 0;\n      const oldW = (oldEl && (oldEl.naturalWidth || oldEl.width) || obj.width) - 2 * pad || 1;\n      const oldH = (oldEl && (oldEl.naturalHeight || oldEl.height) || obj.height) - 2 * pad || 1;\n      const frac = {\n        x: (obj.cropX || 0) / oldW,\n        y: (obj.cropY || 0) / oldH,\n        w: Math.max(1, obj.width - 2 * pad) / oldW,\n        h: Math.max(1, obj.height - 2 * pad) / oldH\n      };\n      obj.__stickerPad = 0;\n      const hadWindow = (obj.cropX || 0) > 0.5 || (obj.cropY || 0) > 0.5 || frac.w < 0.999 || frac.h < 0.999;\n      await obj.setSrc(url, { crossOrigin: \"anonymous\" });\n      if (obj.__bake) obj.setElement(this._replayBake(obj));\n      if (hadWindow || obj.__bake) {\n        const el2 = obj._element;\n        const nw = el2.naturalWidth || el2.width;\n        const nh = el2.naturalHeight || el2.height;\n        obj.set({\n          cropX: frac.x * nw,\n          cropY: frac.y * nh,\n          width: Math.max(1, frac.w * nw),\n          height: Math.max(1, frac.h * nh)\n        });\n      }\n      if (obj.__recolorRepl || obj.__adjust && obj.__adjust.blur || obj.__sticker && obj.__sticker.w || obj.__filterCS && obj.__filter) {\n        obj.__preRecolorEl = null;\n        this._applyRecolor(obj);\n      }\n      if (obj.__radius) this.setImageRadius(obj.__radius, obj);\n      const s3 = displayedW / obj.width;\n      obj.set({ scaleX: s3, scaleY: s3 });\n      obj.dirty = true;\n      obj.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: obj });\n    }\n    // Adopt an applied AI edit. gram-edit normally returns the INPUT's framing,\n    // so when the new render's aspect matches the old grid the whole geometry\n    // carries over exactly like a bg-remove swap \u2014 crop window, rotated-crop\n    // bake, and every effect survive (Owen 9-07 \"edit with ai should not\n    // destroy effects like outline or crop\"). Only when the model genuinely\n    // re-framed the art (the 9-07 pirate: box didn't resize, art cut off) does\n    // the old window mean nothing \u2014 then reset to the fresh grid and re-hug\n    // the ink, keeping displayed width; effect props re-derive either way.\n    async adoptNewSource(img, url) {\n      const oldEl = img._originalElement || img._element;\n      const pad = img.__stickerPad || 0;\n      const oldW = (oldEl && (oldEl.naturalWidth || oldEl.width) || img.width) - 2 * pad || 1;\n      const oldH = (oldEl && (oldEl.naturalHeight || oldEl.height) || img.height) - 2 * pad || 1;\n      try {\n        const probe = await new Promise((res, rej) => {\n          const i2 = new Image();\n          i2.crossOrigin = \"anonymous\";\n          i2.onload = () => res(i2);\n          i2.onerror = () => rej(new Error(\"probe failed\"));\n          i2.src = url;\n        });\n        const sameFraming = Math.abs(probe.naturalWidth / probe.naturalHeight / (oldW / oldH) - 1) < 0.02;\n        if (sameFraming) return await this.replaceImageSource(img, url);\n      } catch (e24) {\n      }\n      const displayedW = img.getScaledWidth();\n      img.__bake = null;\n      img.__stickerPad = 0;\n      await img.setSrc(url, { crossOrigin: \"anonymous\" });\n      const el2 = img._element;\n      img.set({\n        cropX: 0,\n        cropY: 0,\n        width: el2.naturalWidth || el2.width,\n        height: el2.naturalHeight || el2.height\n      });\n      this._applyInkCrop(img);\n      img.__preRecolorEl = null;\n      if (img.__recolorRepl || img.__sticker && img.__sticker.w || img.__adjust && (img.__adjust.blur || img.__adjust.vig) || img.__filterCS && img.__filter) {\n        this._applyRecolor(img);\n      }\n      if (img.__radius) this.setImageRadius(img.__radius, img);\n      const s3 = displayedW / img.width;\n      img.set({ scaleX: s3, scaleY: s3 });\n      img.dirty = true;\n      img.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: img });\n    }\n    // Re-run a stored rotated-crop bake (obj.__bake) against the image's CURRENT\n    // element. The bake is one affine map (source px \u2192 baked-canvas px) recorded\n    // relative to the source's natural width at bake time; a differently-sized\n    // render of the same source just scales the whole map by k.\n    _replayBake(obj) {\n      const bake = obj.__bake;\n      const el2 = obj._element;\n      const k2 = (el2.naturalWidth || el2.width || bake.natW) / bake.natW;\n      const cnv = document.createElement(\"canvas\");\n      cnv.width = Math.max(1, Math.round(bake.W * k2));\n      cnv.height = Math.max(1, Math.round(bake.H * k2));\n      const ctx = cnv.getContext(\"2d\");\n      const [a2, b2, c2, d2, e24, f2] = bake.m;\n      ctx.setTransform(a2, b2, c2, d2, e24 * k2, f2 * k2);\n      ctx.drawImage(el2, 0, 0);\n      return cnv;\n    }\n    // Canva-style selection chrome: round white corner handles, brand border,\n    // rotate handle floated below the box.\n    _styleSelection(obj) {\n      if (obj.isType && obj.isType(\"textbox\", \"i-text\", \"text\")) obj.hiddenTextareaContainer = this.canvas.wrapperEl;\n      obj.set({\n        transparentCorners: false,\n        cornerStyle: \"circle\",\n        cornerColor: \"#ffffff\",\n        cornerStrokeColor: \"#9db4c8\",\n        cornerSize: 11,\n        touchCornerSize: 32,\n        // finger-sized handle hit areas (Owen 9-09 mobile sensitivity)\n        borderColor: \"#66baff\",\n        borderScaleFactor: 1.5,\n        padding: 4,\n        // Rotation snaps at the clock points \u2014 0/45/90/\u2026 (12:00, 1:30, 3:00,\n        // Owen 9-09). Native fabric snap: within 5\u00B0 it locks to the point,\n        // everywhere else rotation stays perfectly free.\n        snapAngle: 45,\n        snapThreshold: 5\n      });\n      const mtr = obj.controls && obj.controls.mtr;\n      if (mtr) {\n        mtr.y = 0.5;\n        mtr.offsetY = ROTATE_KNOB_R + 16;\n        mtr.withConnection = false;\n        mtr.sizeX = ROTATE_KNOB_R * 2;\n        mtr.sizeY = ROTATE_KNOB_R * 2;\n        mtr.touchSizeX = 44;\n        mtr.touchSizeY = 44;\n        mtr.render = renderRotateControl;\n        mtr.cursorStyleHandler = () => ROTATE_CURSOR;\n      }\n      for (const k2 of [\"tl\", \"tr\", \"bl\", \"br\"]) {\n        const c2 = obj.controls && obj.controls[k2];\n        if (!c2) continue;\n        c2.render = renderCornerControl(k2);\n        c2.cursorStyleHandler = cornerCursorHandler(k2);\n      }\n      obj.setControlsVisibility({ mt: false, mb: false, ml: false, mr: false });\n      if (obj.__el && !obj.__el.isLine) {\n        const elDef = ELEMENTS[obj.__el.kind];\n        if (elDef && elDef.caps && elDef.caps.stretch) {\n          obj.setControlsVisibility({ mt: true, mb: true, ml: true, mr: true });\n        }\n      }\n      obj.setCoords();\n    }\n    activeText() {\n      const list = this.activeTexts();\n      return list[0] || null;\n    }\n    // Multi-text selections (Owen 9-09): an ActiveSelection whose members are\n    // ALL textboxes counts as a text selection \u2014 text tools show and every\n    // applier below fans out over the members (Canva). Reads (font/size shown\n    // in the toolbar) use the FIRST member.\n    activeTexts() {\n      const obj = this.canvas.getActiveObject();\n      if (!obj) return [];\n      if (obj.isType && obj.isType(\"textbox\")) return [obj];\n      if (obj instanceof gs) {\n        const m = obj.getObjects().filter((x2) => x2.isType && x2.isType(\"textbox\") && !x2.__locked);\n        if (m.length) return m;\n      }\n      return [];\n    }\n    activeSelection() {\n      const obj = this.canvas.getActiveObject();\n      return obj instanceof gs ? obj : null;\n    }\n    // Select every object (Ctrl/Cmd+A).\n    selectAll() {\n      const objs = this.canvas.getObjects().filter((o2) => o2.selectable !== false && o2.evented !== false && !o2.__locked);\n      if (!objs.length) return;\n      this.canvas.discardActiveObject();\n      if (objs.length === 1) {\n        this.canvas.setActiveObject(objs[0]);\n      } else {\n        const sel = new gs(objs, { canvas: this.canvas });\n        this.canvas.setActiveObject(sel);\n        this._styleSelection(sel);\n      }\n      this.canvas.requestRenderAll();\n      this._emit(\"selection\");\n    }\n    // Group the current multi-selection into a real fabric Group (\u2318G, Owen\n    // 9-08 Canva parity). Members are removed from the canvas first \u2014 a Group\n    // adopts objects at their scene transforms, and leaving the originals on\n    // canvas would double-render them.\n    groupSelection() {\n      const sel = this.activeSelection();\n      if (!sel) return null;\n      const objs = sel.getObjects();\n      if (objs.length < 2) return null;\n      this.canvas.discardActiveObject();\n      for (const o2 of objs) this.canvas.remove(o2);\n      const g2 = new ca(objs);\n      this.canvas.add(g2);\n      this.canvas.setActiveObject(g2);\n      this._styleSelection(g2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: g2 });\n      this._emit(\"selection\");\n      return g2;\n    }\n    // Dissolve the active Group back into its members (\u2318\u21E7G). Group.removeAll()\n    // restores each child's scene transform; the members come back as a\n    // multi-selection, ready to re-group or move together once more.\n    // Dissolve a group INTO ITS PARENT \u2014 a nested group's parent group, or the\n    // canvas at top level \u2014 never blindly to the canvas root. Blind\n    // `canvas.remove(g)` no-ops for a nested group (it's not a canvas child), so\n    // the empty group was orphaned inside its parent and the survivors ejected\n    // to the top level (agent 9-08: silent layer-tree corruption on nested\n    // delete/ungroup). fabric's remove/add convert coordinate spaces:\n    // parent.remove(g) bakes g's scene transform onto it, g.removeAll() restores\n    // its children to scene coords, parent.add() converts scene\u2192parent-local\n    // (verified: _enterGroup applies inv(parent)\u00D7child, so members stay put).\n    _dissolveGroupIntoParent(g2) {\n      const parent = g2.group && g2.group instanceof ca && !(g2.group instanceof gs) ? g2.group : this.canvas;\n      parent.remove(g2);\n      const members = g2.removeAll();\n      for (const m of members) {\n        parent.add(m);\n        m.setCoords();\n      }\n      return { parent, members };\n    }\n    ungroupSelection() {\n      const g2 = this.canvas.getActiveObject();\n      if (!g2 || !(g2 instanceof ca) || g2 instanceof gs) return null;\n      if (g2.__el) return null;\n      const { parent, members } = this._dissolveGroupIntoParent(g2);\n      if (parent === this.canvas) {\n        const ns2 = new gs(members, { canvas: this.canvas });\n        this.canvas.setActiveObject(ns2);\n        this._styleSelection(ns2);\n      } else {\n        this.canvas.setActiveObject(parent);\n        this._styleSelection(parent);\n      }\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: this.canvas.getActiveObject() });\n      this._emit(\"selection\");\n      return members;\n    }\n    // Align the members of a multi-selection to each other (Owen 9-05): edges or\n    // centers meet the selection's own bounding box. Objects are temporarily\n    // released to top level so the shifts happen in exact scene coordinates\n    // (child coords are group-relative and skew once the group is transformed),\n    // then re-selected.\n    alignSelection(pos) {\n      const sel = this.activeSelection();\n      if (!sel) return;\n      const objs = sel.getObjects();\n      if (objs.length < 2) return;\n      this.canvas.discardActiveObject();\n      const rects = objs.map((o2) => (o2.setCoords(), { o: o2, r: this._inkRectFor(o2) }));\n      const L2 = Math.min(...rects.map((x2) => x2.r.left));\n      const T2 = Math.min(...rects.map((x2) => x2.r.top));\n      const R3 = Math.max(...rects.map((x2) => x2.r.left + x2.r.width));\n      const B2 = Math.max(...rects.map((x2) => x2.r.top + x2.r.height));\n      for (const { o: o2, r: r2 } of rects) {\n        let dx = 0;\n        let dy = 0;\n        if (pos === \"left\") dx = L2 - r2.left;\n        else if (pos === \"centerH\") dx = (L2 + R3) / 2 - (r2.left + r2.width / 2);\n        else if (pos === \"right\") dx = R3 - (r2.left + r2.width);\n        else if (pos === \"top\") dy = T2 - r2.top;\n        else if (pos === \"middle\") dy = (T2 + B2) / 2 - (r2.top + r2.height / 2);\n        else if (pos === \"bottom\") dy = B2 - (r2.top + r2.height);\n        if (dx || dy) {\n          o2.set({ left: o2.left + dx, top: o2.top + dy });\n          o2.setCoords();\n        }\n      }\n      const ns2 = new gs(objs, { canvas: this.canvas });\n      this.canvas.setActiveObject(ns2);\n      this._styleSelection(ns2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: ns2 });\n      this._emit(\"selection\");\n    }\n    // Distribute the members of a multi-selection with EQUAL GAPS along one\n    // axis (Owen 9-05). The outermost items stay put; everything between is\n    // respaced. Needs 3+ members (2 have nothing to distribute). Same\n    // release-to-scene-coords pattern as alignSelection.\n    distributeSelection(axis) {\n      const sel = this.activeSelection();\n      if (!sel) return;\n      const objs = sel.getObjects();\n      if (objs.length < 3) return;\n      this.canvas.discardActiveObject();\n      const rects = objs.map((o2) => (o2.setCoords(), { o: o2, r: this._inkRectFor(o2) }));\n      const horiz = axis === \"h\";\n      const pos = horiz ? \"left\" : \"top\";\n      const size = horiz ? \"width\" : \"height\";\n      rects.sort((a2, b2) => a2.r[pos] - b2.r[pos]);\n      const first = rects[0];\n      const last = rects[rects.length - 1];\n      const span = last.r[pos] + last.r[size] - first.r[pos];\n      const total = rects.reduce((s3, x2) => s3 + x2.r[size], 0);\n      const gap = (span - total) / (rects.length - 1);\n      let cursor = first.r[pos];\n      for (const x2 of rects) {\n        const d2 = cursor - x2.r[pos];\n        if (d2) {\n          x2.o.set(pos, x2.o[pos] + d2);\n          x2.o.setCoords();\n        }\n        cursor += x2.r[size] + gap;\n      }\n      const ns2 = new gs(objs, { canvas: this.canvas });\n      this.canvas.setActiveObject(ns2);\n      this._styleSelection(ns2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: ns2 });\n      this._emit(\"selection\");\n    }\n    // Prefix every line with \"\u2022 \", preserving the caret (each insertion at or\n    // before the caret shifts it by 2).\n    _applyBullets(t2) {\n      const lines = t2.text.split(\"\\n\");\n      const editing = typeof t2.selectionStart === \"number\";\n      const sel = editing ? t2.selectionStart : t2.text.length;\n      let idx = 0;\n      let shift = 0;\n      let changed = false;\n      const out = lines.map((l2) => {\n        const lineStart = idx;\n        idx += l2.length + 1;\n        if (l2.startsWith(\"\\u2022 \")) return l2;\n        changed = true;\n        if (sel >= lineStart) shift += 2;\n        return \"\\u2022 \" + l2;\n      });\n      if (!changed) return;\n      t2.set(\"text\", out.join(\"\\n\"));\n      if (editing) {\n        t2.selectionStart = t2.selectionEnd = Math.min(t2.text.length, sel + shift);\n      }\n    }\n    // Bulleted-list MODE: while on, every line (and every new line typed) keeps\n    // a \"\u2022 \" prefix; off strips the prefixes.\n    setBullets(on2) {\n      const t2 = this.activeText();\n      if (!t2) return;\n      t2.__bullets = !!on2;\n      if (on2) {\n        this._applyBullets(t2);\n      } else {\n        t2.set(\"text\", t2.text.split(\"\\n\").map((l2) => l2.startsWith(\"\\u2022 \") ? l2.slice(2) : l2).join(\"\\n\"));\n      }\n      this._hugWidth(t2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: t2 });\n    }\n    activeImage() {\n      const obj = this.canvas.getActiveObject();\n      return obj && obj.isType(\"image\") ? obj : null;\n    }\n    setTextProp(props) {\n      const list = this.activeTexts();\n      if (!list.length) return;\n      for (const obj of list) {\n        obj.set(props);\n        this._hugWidth(obj);\n      }\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: list[0] });\n    }\n    // Family switches keep the RENDERED WIDTH constant: text that was 4in wide\n    // in Inter stays 4in wide in a wider face \u2014 the font size rescales and the\n    // height/box follow naturally.\n    setFontKeepWidth(props) {\n      const list = this.activeTexts();\n      if (!list.length) return;\n      for (const t2 of list) {\n        const w0 = t2.calcTextWidth();\n        t2.set(props);\n        this._hugWidth(t2);\n        const w1 = t2.calcTextWidth();\n        if (w0 > 1 && w1 > 1 && Math.abs(w1 - w0) > 0.5) {\n          t2.set(\"fontSize\", Math.min(600, Math.max(8, t2.fontSize * (w0 / w1))));\n          this._hugWidth(t2);\n        }\n      }\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: list[0] });\n    }\n    // \u2500\u2500 Gradient fill (2-stop linear) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // Descriptor lives in __gradFill = { a, b, angle } (plain JSON \u2014 survives\n    // snapshots; 0\u00B0 = left\u2192right, 90\u00B0 = top\u2192bottom). __baseFill stays a HEX (the\n    // stop mix) so every luminance/contrast consumer keeps working; the real\n    // fabric Gradient is derived at apply time via _inkFill. The shaped painter\n    // substitutes its own CanvasGradient (fabric Gradients only paint through\n    // fabric's native renderer).\n    _inkFill(t2) {\n      if (!t2.__gradFill) return t2.__baseFill;\n      const g2 = t2.__gradFill;\n      const rad = (g2.angle != null ? g2.angle : 90) * Math.PI / 180;\n      const c2 = Math.cos(rad);\n      const s3 = Math.sin(rad);\n      const w2 = t2.width || 1;\n      const h2 = t2.height || 1;\n      const L2 = (Math.abs(c2) * w2 + Math.abs(s3) * h2) / 2;\n      return new ko({\n        type: \"linear\",\n        gradientUnits: \"pixels\",\n        coords: { x1: w2 / 2 - c2 * L2, y1: h2 / 2 - s3 * L2, x2: w2 / 2 + c2 * L2, y2: h2 / 2 + s3 * L2 },\n        colorStops: [\n          { offset: 0, color: g2.a },\n          { offset: 1, color: g2.b }\n        ]\n      });\n    }\n    // Same gradient as a CanvasGradient for the shaped painter. ctx is in object\n    // space (origin = center); the line spans the ink box along the angle.\n    // ox/oy shift it for the per-glyph fillText fallback (each glyph translates\n    // the ctx, which would otherwise restart the gradient per letter).\n    _canvasGradient(t2, ctx, ox = 0, oy = 0) {\n      const g2 = t2.__gradFill;\n      const rad = (g2.angle != null ? g2.angle : 90) * Math.PI / 180;\n      const c2 = Math.cos(rad);\n      const s3 = Math.sin(rad);\n      const L2 = (Math.abs(c2) * t2.width + Math.abs(s3) * t2.height) / 2;\n      const grad = ctx.createLinearGradient(-c2 * L2 - ox, -s3 * L2 - oy, c2 * L2 - ox, s3 * L2 - oy);\n      grad.addColorStop(0, g2.a);\n      grad.addColorStop(1, g2.b);\n      return grad;\n    }\n    // Set/clear the gradient, then reapply the current effect so fill/stroke\n    // route consistently (hollow/splice carry the ink in the STROKE).\n    // Gangs across an all-text multi-selection like every other text prop\n    // (Owen 9-09 \u2014 parked until _setGradientTo landed with text-treatments).\n    setTextGradient(desc) {\n      const gang = this.activeTexts();\n      if (!gang.length) return;\n      for (const t2 of gang) this._setGradientTo(t2, desc);\n    }\n    // Target-explicit body (text treatments style DETACHED boxes through the\n    // same path \u2014 no parallel effect logic anywhere).\n    _setGradientTo(t2, desc) {\n      t2.__gradFill = desc || null;\n      if (desc) {\n        const mix = (i2) => Math.round((parseInt(desc.a.slice(i2, i2 + 2), 16) + parseInt(desc.b.slice(i2, i2 + 2), 16)) / 2);\n        t2.__baseFill = \"#\" + [1, 3, 5].map((i2) => mix(i2).toString(16).padStart(2, \"0\")).join(\"\");\n      }\n      this._applyTextEffectTo(t2, t2.__effect || \"none\", t2.__effectColor, t2.__effectSize);\n    }\n    // \u2500\u2500 Text effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // One-click effects built from stroke/shadow/fill combos, sized to the font.\n    // The base fill is remembered so switching effects (or None) always restores\n    // the text's own color. Multi-object effects (Echo, Background) are out of\n    // scope for this layer.\n    applyTextEffect(key, color, size) {\n      const list = this.activeTexts();\n      for (const t2 of list) this._applyTextEffectTo(t2, key, color, size);\n    }\n    // Target-explicit body \u2014 ONE code path for the gang loop above AND the\n    // text treatments styling DETACHED boxes (thumbnails): render/history\n    // fires are gated on t.canvas.\n    _applyTextEffectTo(t2, key, color, size) {\n      if (!t2) return;\n      if (t2.__baseFill == null) t2.__baseFill = t2.fill;\n      const em = t2.fontSize;\n      const reset = {\n        stroke: null,\n        strokeWidth: 0,\n        shadow: null,\n        fill: this._inkFill(t2),\n        // gradient-aware: __baseFill, or the derived Gradient\n        paintFirst: \"fill\"\n      };\n      const effSize = Math.max(0, Math.min(100, size != null ? size : t2.__effectSize != null ? t2.__effectSize : 12));\n      const s3 = effSize / 100;\n      const oSc = this._effScale(t2);\n      const keepStroke = this.outlineTracksScale && key === \"outline\" && t2.__effect === \"outline\" && t2.__effectSize != null && effSize === t2.__effectSize && t2.strokeWidth > 0;\n      const outlineW = keepStroke ? t2.strokeWidth : Math.max(0.5, 2 * effSize / oSc);\n      const hollowW = Math.max(1, em * (0.01 + 0.07 * s3));\n      const EFFECTS = {\n        none: reset,\n        outline: {\n          ...reset,\n          stroke: color || \"#ffffff\",\n          strokeWidth: outlineW,\n          paintFirst: \"stroke\",\n          strokeLineJoin: \"round\"\n        },\n        hollow: {\n          ...reset,\n          fill: \"rgba(0,0,0,0)\",\n          stroke: color || this._inkFill(t2),\n          strokeWidth: hollowW,\n          strokeLineJoin: \"round\"\n        },\n        drop: {\n          ...reset,\n          // Canva's Drop control set (Owen 9-05): Direction (degrees, 0 = right,\n          // 90 = down), Offset (0-100 distance), Blur (0-100), Transparency\n          // (0-100 shadow opacity) \u2014 per-object settings. Defaults 45/50/0/100\n          // (Owen 9-05): crisp full-opacity shadow, the retro merch look.\n          shadow: (() => {\n            const dir = (t2.__fxDirection != null ? t2.__fxDirection : 45) * Math.PI / 180;\n            const dist = em * 0.2 * ((t2.__fxOffset != null ? t2.__fxOffset : 50) / 100);\n            return new Bn({\n              color: color || \"#0f172a\",\n              blur: 0,\n              offsetX: dist * Math.cos(dir),\n              offsetY: dist * Math.sin(dir)\n            });\n          })()\n        },\n        // 'glow' REMOVED (Owen 9-08) \u2014 a blur-only effect can't print. Legacy\n        // glow objects keep their serialized shadow until any effect reapplies.\n        splice: {\n          ...reset,\n          fill: \"rgba(0,0,0,0)\",\n          stroke: this._inkFill(t2),\n          // the hollow letter keeps the TEXT's color (gradient included)\n          strokeWidth: hollowW,\n          strokeLineJoin: \"round\",\n          // Effect color paints the OFFSET COPY (the new element), not the\n          // outline (Owen 9-05). Direction + Offset shared with Drop/Echo.\n          shadow: (() => {\n            const dir = (t2.__fxDirection != null ? t2.__fxDirection : 45) * Math.PI / 180;\n            const dist = em * 0.2 * ((t2.__fxOffset != null ? t2.__fxOffset : 50) / 100);\n            return new Bn({\n              color: color || \"#94a3b8\",\n              blur: 0,\n              offsetX: dist * Math.cos(dir),\n              offsetY: dist * Math.sin(dir)\n            });\n          })()\n        }\n      };\n      t2.__effect = key === \"none\" ? null : key;\n      if (key === \"echo\" && t2.__fxEcho2 == null) t2.__fxEcho2 = this._echoDerive(color || t2.__baseFill || \"#0f172a\");\n      t2.__effectColor = color || null;\n      t2.__effectSize = Math.round(effSize);\n      t2.set(EFFECTS[key] || reset);\n      this._hugWidth(t2);\n      if (t2.canvas) {\n        this.canvas.requestRenderAll();\n        this.canvas.fire(\"object:modified\", { target: t2 });\n      }\n      this._syncFxRender(t2);\n    }\n    // \u2500\u2500 Echo (Canva reference, Owen 9-05): two trailing copies of the text at\n    // 1x and 2x the offset. Each copy carries its OWN SOLID color (Owen 9-05) \u2014\n    // copy 1 (nearest) = __effectColor, copy 2 = __fxEcho2 \u2014 no alpha fade, so\n    // an assigned color prints exactly as picked. Needs multiple paint passes\n    // (fabric shadow can't repeat), so flat text gets an instance _render\n    // override and the shaped renderer runs echo passes itself.\n    _echoColors(t2) {\n      const c1 = t2.__effectColor || \"#0f172a\";\n      return [c1, t2.__fxEcho2 || this._echoDerive(c1)];\n    }\n    // Copy-2 seed: copy 1 pulled halfway toward white (dark ink) or slate (light\n    // ink), so a fresh echo still reads as a receding trail before any assigning.\n    _echoDerive(hex3) {\n      const p2 = (i2) => parseInt(hex3.slice(i2, i2 + 2), 16) || 0;\n      const [r2, g2, b2] = [p2(1), p2(3), p2(5)];\n      const light = (r2 * 299 + g2 * 587 + b2 * 114) / 1e3 > 145;\n      const to2 = light ? [71, 85, 105] : [255, 255, 255];\n      const mix = (v2, tv) => Math.round(v2 + (tv - v2) * 0.5).toString(16).padStart(2, \"0\");\n      return \"#\" + mix(r2, to2[0]) + mix(g2, to2[1]) + mix(b2, to2[2]);\n    }\n    _echoParams(t2) {\n      const dir = (t2.__fxDirection != null ? t2.__fxDirection : 45) * Math.PI / 180;\n      const dist = t2.fontSize * 0.2 * ((t2.__fxOffset != null ? t2.__fxOffset : 50) / 100);\n      return { dx: dist * Math.cos(dir), dy: dist * Math.sin(dir) };\n    }\n    // Background plate geometry: padding from Spread, radius from Roundness.\n    _bgParams(t2) {\n      const em = t2.fontSize;\n      const pad = em * (0.08 + 0.4 * ((t2.__fxSpread != null ? t2.__fxSpread : 50) / 100));\n      const round = (t2.__fxRound != null ? t2.__fxRound : 22) / 100;\n      const alpha = 1;\n      return { pad, round, alpha, color: t2.__effectColor || \"#0f172a\" };\n    }\n    // Inflate a FLAT textbox so the background plate fits inside the cached\n    // object box; the renderer recenters the text within it. Skipped while\n    // editing (the caret math assumes uninflated dims \u2014 bg returns on exit).\n    _bgInflate(t2) {\n      if (t2.__effect !== \"background\" || t2.__shape || t2.isEditing) {\n        t2.__bgTextH = null;\n        return;\n      }\n      const { pad } = this._bgParams(t2);\n      t2.__bgTextH = t2.height;\n      t2.width += pad * 2;\n      t2.height += pad * 2;\n      t2.setCoords();\n    }\n    _syncFxRender(t2) {\n      if (!t2 || !t2.isType || !t2.isType(\"textbox\")) return;\n      const wantsFlat = (t2.__effect === \"echo\" || t2.__effect === \"background\" && !t2.isEditing || (t2.__inkDy || 0) > 0 || (t2.__inkDx || 0) !== 0) && !t2.__shapeRender;\n      if (wantsFlat && !t2.__fxRender) {\n        const editor = this;\n        t2.__fxRender = true;\n        t2._render = function(ctx) {\n          editor._renderFxFlat(this, ctx);\n        };\n      } else if (!wantsFlat && t2.__fxRender) {\n        t2.__fxRender = false;\n        if (!t2.__shapeRender) delete t2._render;\n      }\n      t2.dirty = true;\n    }\n    _drawBgPlate(t2, ctx, w2, h2) {\n      const { round, alpha, color } = this._bgParams(t2);\n      const r2 = Math.min(w2, h2) / 2 * round;\n      ctx.save();\n      ctx.globalAlpha *= alpha;\n      ctx.fillStyle = color;\n      ctx.beginPath();\n      ctx.roundRect(-w2 / 2, -h2 / 2, w2, h2, r2);\n      ctx.fill();\n      ctx.restore();\n    }\n    _renderFxFlat(t2, ctx) {\n      const proto = fs.prototype._render;\n      const ink = t2.__inkDy || 0;\n      const inkX = t2.__inkDx || 0;\n      if (t2.__effect === \"background\") {\n        this._drawBgPlate(t2, ctx, t2.width, t2.height);\n        const dy = ink + (t2.__bgTextH != null ? (t2.height - t2.__bgTextH) / 2 : 0);\n        ctx.save();\n        ctx.translate(inkX, dy);\n        proto.call(t2, ctx);\n        ctx.restore();\n        return;\n      }\n      if (t2.__effect === \"echo\") {\n        const { dx, dy } = this._echoParams(t2);\n        const [echo1, echo2] = this._echoColors(t2);\n        const origFill = t2.fill;\n        for (const [mult, color] of [[2, echo2], [1, echo1]]) {\n          ctx.save();\n          ctx.translate(dx * mult + inkX, dy * mult + ink);\n          t2.fill = color;\n          proto.call(t2, ctx);\n          ctx.restore();\n        }\n        t2.fill = origFill;\n        ctx.save();\n        ctx.translate(inkX, ink);\n        proto.call(t2, ctx);\n        ctx.restore();\n        return;\n      }\n      ctx.save();\n      ctx.translate(inkX, ink);\n      proto.call(t2, ctx);\n      ctx.restore();\n    }\n    // \u2500\u2500 Text shapes: Curve / Wave / Bulge \u2014 OWN glyph engine \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // fabric's text-on-path scrambled glyphs (its path-length estimate drifts at\n    // low curvature and Textbox.initDimensions fights the path \u2014 the 9-05 \"curve\n    // breaks easily\" report). Shapes are now rendered by US: per-glyph placement\n    // is computed analytically from measured advances and drawn in an\n    // instance-level _render override; the bounding box is derived FROM the\n    // placements, so it is exact by construction \u2014 no ink scans, no path\n    // plumbing, no drift at any amount.\n    // While the user edits (editing:entered) the text renders FLAT with fabric's\n    // native caret; the shape re-applies on exit. Effects (stroke/shadow/fill)\n    // are plain object props and compose with every shape.\n    // Gangs across an all-text multi-selection like font/color/effects/gradient\n    // (Owen 9-09 \u2014 shapes were the last non-ganged text prop).\n    setShape(kind, amount, preview) {\n      const gang = this.activeTexts();\n      if (!gang.length) return;\n      this._shapeAdjusting = !!preview;\n      for (const t2 of gang) {\n        this._setShapeTo(t2, kind, amount);\n        this.canvas.fire(\"object:modified\", { target: t2 });\n      }\n      this.canvas.requestRenderAll();\n    }\n    // Target-explicit body (treatments shape detached boxes through it too).\n    _setShapeTo(t2, kind, amount) {\n      const a2 = Math.max(-100, Math.min(100, Math.round(amount) || 0));\n      t2.__shape = !kind || kind === \"none\" || !a2 ? null : { kind, amount: a2 };\n      if (t2.__shape) this._shapeApply(t2);\n      else this._shapeFlatten(t2);\n    }\n    // The ANCHOR is the layout ORIGIN \u2014 the mid-line baseline, where the curve\n    // ring is tangent \u2014 not the frame: Canva pins the base of the circle, so the\n    // middle of the text never moves while the arch/ring grows around it (Owen\n    // 9-07 video \"notice the base remains pinned\"). __shapeInkOffset = origin \u2212\n    // frame center in object coords (serialized \u2014 restore needs it to anchor).\n    // Offsets carry o:1 for the origin semantics; a stored offset WITHOUT the\n    // flag is a legacy frame-center pin from before 9-07 \u2014 _shapeApply converts\n    // it in place, jump-free, on the first re-apply.\n    // \u26A0 FRAME: both _inkScenePoint and _anchorInk work in PARENT space (the\n    // group's local frame when t.group is set, scene otherwise). fabric 7's\n    // getCenterPoint() is SCENE-space but setPositionByOrigin() writes PARENT\n    // coords \u2014 mixing them displaced a grouped shaped text by exactly the\n    // group's center vector on every restore, compounding until it left the\n    // board (breaker 9-08). Parent space is also what t.angle/t.scaleX are\n    // relative to, so the offset rotation math is only correct here.\n    _inkScenePoint(t2) {\n      const off = t2.__shapeInkOffset || { x: 0, y: 0 };\n      const rad = (t2.angle || 0) * Math.PI / 180;\n      const ox = off.x * t2.scaleX, oy = off.y * t2.scaleY;\n      const c2 = t2.getRelativeCenterPoint();\n      return {\n        x: c2.x + ox * Math.cos(rad) - oy * Math.sin(rad),\n        y: c2.y + ox * Math.sin(rad) + oy * Math.cos(rad)\n      };\n    }\n    _anchorInk(t2, inkScene, newOff) {\n      const rad = (t2.angle || 0) * Math.PI / 180;\n      const ox = newOff.x * t2.scaleX, oy = newOff.y * t2.scaleY;\n      const target2 = {\n        x: inkScene.x - (ox * Math.cos(rad) - oy * Math.sin(rad)),\n        y: inkScene.y - (ox * Math.sin(rad) + oy * Math.cos(rad))\n      };\n      t2.setPositionByOrigin(target2, \"center\", \"center\");\n      t2.__shapeInkOffset = newOff;\n      t2.setCoords();\n    }\n    // Ascent/descent of the current font \u2014 locates the FLAT text's mid-line\n    // baseline (the shape anchor) relative to its frame center.\n    _flatProbe(t2) {\n      const ctx = this._measureCtx = this._measureCtx || document.createElement(\"canvas\").getContext(\"2d\");\n      ctx.font = (t2.fontStyle === \"italic\" ? \"italic \" : \"\") + (t2.fontWeight || 400) + \" \" + t2.fontSize + 'px \"' + t2.fontFamily + '\"';\n      const probe = ctx.measureText(\"Mgj\");\n      return {\n        asc: probe.actualBoundingBoxAscent || t2.fontSize * 0.88,\n        desc: probe.actualBoundingBoxDescent || t2.fontSize * 0.26\n      };\n    }\n    // Measure one line's glyphs (advances include charSpacing; the trailing\n    // glyph drops the spacing so the line hugs like flat text).\n    _shapeMeasure(t2, ctx) {\n      ctx.font = (t2.fontStyle === \"italic\" ? \"italic \" : \"\") + (t2.fontWeight || 400) + \" \" + t2.fontSize + 'px \"' + t2.fontFamily + '\"';\n      const spacing = (t2.charSpacing || 0) / 1e3 * t2.fontSize;\n      const probe = ctx.measureText(\"Mgj\");\n      const asc = probe.actualBoundingBoxAscent || t2.fontSize * 0.88;\n      const desc = probe.actualBoundingBoxDescent || t2.fontSize * 0.26;\n      const lines = t2.textLines.map((line) => {\n        const glyphs = [];\n        let w2 = 0, wb = 0;\n        const chars = [...line];\n        chars.forEach((ch, i2) => {\n          const raw = ctx.measureText(ch).width;\n          const adv = raw + (i2 < chars.length - 1 ? spacing : 0);\n          glyphs.push({ ch, adv });\n          w2 += adv;\n          wb += raw;\n        });\n        return { glyphs, w: w2, wb };\n      });\n      return { lines, asc, desc };\n    }\n    // Per-glyph placements + exact ink bbox for the current shape. Coordinates\n    // are baseline-centered per line; the caller recenters on the union bbox.\n    _shapeLayout(t2) {\n      const { kind, amount } = t2.__shape;\n      const a2 = amount / 100;\n      const ctx = this._measureCtx = this._measureCtx || document.createElement(\"canvas\").getContext(\"2d\");\n      const { lines, asc, desc } = this._shapeMeasure(t2, ctx);\n      const lineH = t2.fontSize * (t2.lineHeight || 1.16);\n      const n2 = lines.length;\n      const placed = [];\n      let mnx = Infinity, mny = Infinity, mxx = -Infinity, mxy = -Infinity;\n      const pad = (t2.strokeWidth || 0) + (t2.fontStyle === \"italic\" ? t2.fontSize * 0.12 : 0);\n      lines.forEach((line, li2) => {\n        const W2 = Math.max(1, line.w);\n        const baseY = (li2 - (n2 - 1) / 2) * lineH;\n        let scales = null, scaledW = W2;\n        if (kind === \"bulge\" || kind === \"arcup\" || kind === \"arclo\") {\n          let s0 = 0;\n          scales = line.glyphs.map((g2) => {\n            const u2 = (s0 + g2.adv / 2) / W2 - 0.5;\n            s0 += g2.adv;\n            return Math.max(0.35, 1 + a2 * 0.65 * Math.cos(Math.PI * u2));\n          });\n          scaledW = line.glyphs.reduce((sum, g2, i2) => sum + g2.adv * scales[i2], 0);\n        }\n        let s3 = 0, sScaled = 0;\n        line.glyphs.forEach((g2, gi2) => {\n          const mid = s3 + g2.adv / 2;\n          const u2 = mid / W2 - 0.5;\n          let x2 = mid - W2 / 2, y2 = 0, rot = 0, sc2 = 1;\n          if (kind === \"curve\") {\n            const cg = curveGlyph(a2, curveRadius(a2, t2.fontSize), mid - W2 / 2);\n            const midLine = (asc - desc) / 2;\n            x2 = cg.x - midLine * Math.sin(cg.rot);\n            y2 = cg.y + midLine * Math.cos(cg.rot) - midLine;\n            rot = cg.rot;\n          } else if (kind === \"wave\") {\n            x2 = mid - W2 / 2;\n            const wg = waveGlyph(a2, W2, t2.fontSize, x2);\n            y2 = wg.y;\n            rot = wg.rot;\n          } else if (kind === \"angle\") {\n            x2 = mid - W2 / 2;\n            y2 = x2 * Math.tan(angleTheta(a2));\n          } else if (kind === \"bulge\") {\n            sc2 = scales[gi2];\n            x2 = sScaled + g2.adv * sc2 / 2 - scaledW / 2;\n          } else if (kind === \"arcup\" || kind === \"arclo\") {\n            sc2 = scales[gi2];\n            x2 = sScaled + g2.adv * sc2 / 2 - scaledW / 2;\n            if (kind === \"arclo\") y2 = (sc2 - 1) * asc;\n          }\n          placed.push({ ch: g2.ch, adv: g2.adv, x: x2, y: y2 + baseY, rot, sc: sc2 });\n          const hw = (g2.adv / 2 + pad) * sc2;\n          const top = (asc + pad) * sc2, bot = (desc + pad) * sc2;\n          const cos = Math.cos(rot), sin = Math.sin(rot);\n          for (const [gx, gy] of [[-hw, -top], [hw, -top], [-hw, bot], [hw, bot]]) {\n            const px = x2 + gx * cos - gy * sin;\n            const py = y2 + baseY + gx * sin + gy * cos;\n            if (px < mnx) mnx = px;\n            if (px > mxx) mxx = px;\n            if (py < mny) mny = py;\n            if (py > mxy) mxy = py;\n          }\n          s3 += g2.adv;\n          if (scales) sScaled += g2.adv * scales[gi2];\n        });\n      });\n      if (!placed.length) {\n        mnx = mny = -1;\n        mxx = mxy = 1;\n      }\n      let circle = null;\n      if (kind === \"curve\" && lines.length) {\n        circle = { R: curveRadius(amount / 100, t2.fontSize), up: amount > 0, asc };\n      }\n      const line0W = lines.length ? Math.max(1, lines[0].w) : 1;\n      return { placed, circle, line0W, bbox: { l: mnx, t: mny, r: mxx, b: mxy }, asc, desc };\n    }\n    _shapeApply(t2) {\n      if (!t2 || !t2.isType || !t2.isType(\"textbox\") || !t2.__shape) return;\n      if (t2.isEditing) return;\n      const editor = this;\n      if (t2.width < DESIGN_UNITS * 10) {\n        t2.set(\"width\", DESIGN_UNITS * 10);\n        t2.initDimensions();\n      }\n      if (t2.__shapeInkOffset == null) {\n        const { asc, desc } = this._flatProbe(t2);\n        t2.__shapeInkOffset = { x: 0, y: (asc - desc) / 2, o: 1 };\n      }\n      const legacy = !t2.__shapeInkOffset.o;\n      const inkScene = this._inkScenePoint(t2);\n      const italic = t2.fontStyle === \"italic\";\n      const weight = parseInt(t2.fontWeight, 10) || (t2.fontWeight === \"bold\" ? 700 : 400);\n      const entry = getFontSync(t2.fontFamily, weight, italic);\n      if (!entry) {\n        ensureFontBinary(t2.fontFamily, weight, italic).then((e24) => {\n          if (e24 && t2.__shape && !t2.isEditing && this.canvas.getObjects().includes(t2)) {\n            this._shapeApply(t2);\n            this.canvas.requestRenderAll();\n          }\n        });\n      }\n      const layout = entry ? this._shapeLayoutOutline(t2, entry) : this._shapeLayout(t2);\n      const { bbox } = layout;\n      if (t2.__effect === \"echo\") {\n        const { dx, dy } = this._echoParams(t2);\n        bbox.l += Math.min(0, dx * 2);\n        bbox.r += Math.max(0, dx * 2);\n        bbox.t += Math.min(0, dy * 2);\n        bbox.b += Math.max(0, dy * 2);\n      }\n      if (t2.__effect === \"background\") {\n        const { pad } = this._bgParams(t2);\n        bbox.l -= pad;\n        bbox.r += pad;\n        bbox.t -= pad;\n        bbox.b += pad;\n      }\n      t2.__curveRing = null;\n      const m = t2.fontSize * 0.04;\n      t2.width = bbox.r - bbox.l + 2 * m;\n      t2.height = bbox.b - bbox.t + 2 * m;\n      const cx = (bbox.l + bbox.r) / 2;\n      const cy = (bbox.t + bbox.b) / 2;\n      if (layout.rawPaths) {\n        const m2 = new DOMMatrix().translate(-cx, -cy);\n        t2.__shapePath = layout.rawPaths.map((p2) => {\n          const q2 = new Path2D();\n          q2.addPath(p2, m2);\n          return q2;\n        });\n        t2.__shapeLayout = null;\n      } else {\n        t2.__shapeLayout = layout.placed.map((g2) => ({ ...g2, x: g2.x - cx, y: g2.y - cy }));\n        t2.__shapePath = null;\n      }\n      if (!t2.__shapeRender) {\n        t2.__shapeRender = true;\n        t2.__fxRender = false;\n        t2._render = function(ctx) {\n          editor._renderShaped(this, ctx);\n        };\n      }\n      t2.padding = t2.shadow ? 4 + Math.round(Math.abs(t2.shadow.offsetY || 0) + (t2.shadow.blur || 0)) : 4;\n      if (layout.circle) {\n        const { R: R3, up } = layout.circle;\n        t2.__curveRing = { r: R3, x: -cx, y: (up ? R3 : -R3) - cy };\n      }\n      t2.__angleEnds = null;\n      if (t2.__shape.kind === \"angle\" && layout.line0W) {\n        const slope = Math.tan(angleTheta(t2.__shape.amount / 100));\n        const hw = layout.line0W / 2;\n        t2.__angleEnds = [\n          { x: -hw - cx, y: -hw * slope - cy },\n          { x: hw - cx, y: hw * slope - cy }\n        ];\n      }\n      this._anchorInk(t2, inkScene, legacy ? { x: 0, y: 0 } : { x: -cx, y: -cy, o: 1 });\n      if (legacy) t2.__shapeInkOffset = { x: -cx, y: -cy, o: 1 };\n      t2.dirty = true;\n    }\n    _shapeFlatten(t2) {\n      if (!t2) return;\n      const hadAnchor = t2.__shapeInkOffset != null;\n      const originPin = hadAnchor && !!t2.__shapeInkOffset.o;\n      const inkScene = this._inkScenePoint(t2);\n      if (t2.__shapeRender) {\n        delete t2._render;\n        t2.__shapeRender = false;\n      }\n      t2.__shapeLayout = null;\n      t2.__shapePath = null;\n      t2.dirty = true;\n      this._syncFxRender(t2);\n      this._hugWidth(t2);\n      if (originPin) {\n        const { asc, desc } = this._flatProbe(t2);\n        this._anchorInk(t2, inkScene, { x: 0, y: (asc - desc) / 2 });\n      } else {\n        t2.setPositionByOrigin(inkScene, \"center\", \"center\");\n      }\n      t2.__shapeInkOffset = null;\n      t2.setCoords();\n    }\n    // Outline layout: real glyph b\u00E9ziers from the font binary, every point\n    // pushed through the envelope warp. Exact kerning from the font tables;\n    // the bbox comes from the warped points themselves. Underline/linethrough\n    // become warped quads in the same path.\n    _shapeLayoutOutline(t2, entry) {\n      const { kind, amount } = t2.__shape;\n      const a2 = amount / 100;\n      const fontSize = t2.fontSize;\n      const spacing = (t2.charSpacing || 0) / 1e3 * fontSize;\n      const lineH = fontSize * (t2.lineHeight || 1.16);\n      const lines = t2.textLines.map((line) => layoutLine(entry, line, fontSize, spacing));\n      lines.forEach((line) => {\n        line.baseW = line.width - spacing * Math.max(0, line.glyphs.length - 1);\n      });\n      const n2 = lines.length;\n      const rawPaths = [];\n      let rawPath = null;\n      const pad = (t2.strokeWidth || 0) + 1;\n      let mnx = Infinity, mny = Infinity, mxx = -Infinity, mxy = -Infinity;\n      const track2 = (x2, y2) => {\n        if (x2 - pad < mnx) mnx = x2 - pad;\n        if (x2 + pad > mxx) mxx = x2 + pad;\n        if (y2 - pad < mny) mny = y2 - pad;\n        if (y2 + pad > mxy) mxy = y2 + pad;\n      };\n      lines.forEach((line, li2) => {\n        const W2 = Math.max(1, line.width);\n        const baseY = (li2 - (n2 - 1) / 2) * lineH;\n        const wp = (x2, y2) => {\n          const [wx, wy] = warpPoint(kind, a2, W2, fontSize, x2 - W2 / 2, y2);\n          track2(wx, wy + baseY);\n          return [wx, wy + baseY];\n        };\n        const glyphMapper = (g2) => {\n          if (kind !== \"curve\") return wp;\n          const midLine = (line.ascent - line.descent) / 2;\n          const ax = g2.pen + g2.adv / 2 - W2 / 2;\n          const { x: x0, y: y0, rot } = curveGlyph(a2, curveRadius(a2, fontSize), ax);\n          const cos = Math.cos(rot), sin = Math.sin(rot);\n          return (x2, y2) => {\n            const dx = x2 - W2 / 2 - ax;\n            const dy = y2 + midLine;\n            const wx = x0 + dx * cos - dy * sin;\n            const wy = y0 + dx * sin + dy * cos;\n            track2(wx, wy + baseY);\n            return [wx, wy + baseY];\n          };\n        };\n        for (const g2 of line.glyphs) {\n          const wpg = glyphMapper(g2);\n          rawPath = new Path2D();\n          rawPaths.push(rawPath);\n          const subs = [];\n          let sub = null;\n          for (const c2 of g2.commands) {\n            if (c2.type === \"M\") {\n              sub = { m: c2, segs: [] };\n              subs.push(sub);\n            } else if (c2.type === \"Z\") {\n              if (sub) sub.z = true;\n            } else if (sub) {\n              sub.segs.push(c2);\n            }\n          }\n          const eps = 0.01;\n          for (const sp of subs) {\n            if (!sp.segs.length) continue;\n            const last = sp.segs[sp.segs.length - 1];\n            if (last.type === \"L\" && Math.abs(last.x - sp.m.x) < eps && Math.abs(last.y - sp.m.y) < eps) {\n              sp.segs.pop();\n            }\n            const [mx, my] = wpg(sp.m.x, sp.m.y);\n            rawPath.moveTo(mx, my);\n            for (const c2 of sp.segs) {\n              if (c2.type === \"L\") {\n                const [x2, y2] = wpg(c2.x, c2.y);\n                rawPath.lineTo(x2, y2);\n              } else if (c2.type === \"C\") {\n                const [x1, y1] = wpg(c2.x1, c2.y1);\n                const [x2, y2] = wpg(c2.x2, c2.y2);\n                const [x3, y3] = wpg(c2.x, c2.y);\n                rawPath.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n              } else if (c2.type === \"Q\") {\n                const [x1, y1] = wpg(c2.x1, c2.y1);\n                const [x2, y2] = wpg(c2.x, c2.y);\n                rawPath.quadraticCurveTo(x1, y1, x2, y2);\n              }\n            }\n            rawPath.closePath();\n          }\n          const deco = (yEm, hEm) => {\n            const y0 = fontSize * yEm;\n            const y1 = y0 + Math.max(1, fontSize * hEm);\n            const x0 = g2.pen, x1 = g2.pen + g2.adv;\n            const p0 = wpg(x0, y0), p1 = wpg(x1, y0), p2 = wpg(x1, y1), p3 = wpg(x0, y1);\n            rawPath.moveTo(p0[0], p0[1]);\n            rawPath.lineTo(p1[0], p1[1]);\n            rawPath.lineTo(p2[0], p2[1]);\n            rawPath.lineTo(p3[0], p3[1]);\n            rawPath.closePath();\n          };\n          if (t2.underline) deco(0.1, 0.065);\n          if (t2.linethrough) deco(-0.31, 0.065);\n        }\n      });\n      if (mnx === Infinity) {\n        mnx = mny = -1;\n        mxx = mxy = 1;\n      }\n      let circle = null;\n      if (kind === \"curve\" && lines.length) {\n        circle = { R: curveRadius(a2, fontSize), up: a2 > 0, asc: lines[0].ascent };\n      }\n      const line0W = lines.length ? Math.max(1, lines[0].width) : 1;\n      return { rawPaths, circle, line0W, bbox: { l: mnx, t: mny, r: mxx, b: mxy } };\n    }\n    // Draws the shaped text. ctx arrives in object space (origin = center).\n    // Fill/stroke/shadow/paintFirst come from the object, so every effect\n    // composes. Outline engine: one warped Path2D. Fallback engine: per-glyph\n    // fillText placements.\n    _renderShaped(t2, ctx) {\n      if (t2.__shapePath) {\n        ctx.save();\n        if (t2.__effect === \"background\") this._drawBgPlate(t2, ctx, t2.width, t2.height);\n        if (t2.__effect === \"echo\") {\n          const { dx, dy } = this._echoParams(t2);\n          const [echo1, echo2] = this._echoColors(t2);\n          for (const [mult, color] of [[2, echo2], [1, echo1]]) {\n            ctx.save();\n            ctx.translate(dx * mult, dy * mult);\n            ctx.fillStyle = color;\n            for (const gp of t2.__shapePath) ctx.fill(gp);\n            ctx.restore();\n          }\n        }\n        ctx.lineJoin = t2.strokeLineJoin || \"miter\";\n        let fill2 = t2.fill && t2.fill !== \"rgba(0,0,0,0)\" ? t2.fill : null;\n        const strokeW2 = t2.strokeWidth || 0;\n        let stroke2 = t2.stroke && strokeW2 ? t2.stroke : null;\n        if (t2.__gradFill) {\n          const grad = this._canvasGradient(t2, ctx);\n          if (fill2 && typeof fill2 !== \"string\") fill2 = grad;\n          if (stroke2 && typeof stroke2 !== \"string\") stroke2 = grad;\n        }\n        if (fill2) ctx.fillStyle = fill2;\n        if (stroke2) {\n          ctx.strokeStyle = stroke2;\n          ctx.lineWidth = strokeW2;\n        }\n        if (stroke2 && t2.paintFirst === \"stroke\") for (const gp of t2.__shapePath) ctx.stroke(gp);\n        if (fill2) for (const gp of t2.__shapePath) ctx.fill(gp);\n        if (stroke2 && t2.paintFirst !== \"stroke\") for (const gp of t2.__shapePath) ctx.stroke(gp);\n        ctx.restore();\n        return;\n      }\n      const placed = t2.__shapeLayout;\n      if (!placed) return;\n      ctx.save();\n      ctx.font = (t2.fontStyle === \"italic\" ? \"italic \" : \"\") + (t2.fontWeight || 400) + \" \" + t2.fontSize + 'px \"' + t2.fontFamily + '\"';\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"alphabetic\";\n      ctx.lineJoin = t2.strokeLineJoin || \"miter\";\n      const fill = t2.fill && t2.fill !== \"rgba(0,0,0,0)\" ? t2.fill : null;\n      const strokeW = t2.strokeWidth || 0;\n      const stroke = t2.stroke && strokeW ? t2.stroke : null;\n      const gradAt = (ox, oy) => t2.__gradFill ? this._canvasGradient(t2, ctx, ox, oy) : null;\n      if (fill) ctx.fillStyle = typeof fill === \"string\" ? fill : gradAt(0, 0) || \"#0f172a\";\n      if (stroke) {\n        ctx.strokeStyle = typeof stroke === \"string\" ? stroke : gradAt(0, 0) || \"#0f172a\";\n        ctx.lineWidth = strokeW;\n      }\n      const deco = (g2, yEm, hEm) => {\n        const y2 = t2.fontSize * yEm;\n        ctx.fillRect(-g2.adv / 2, y2, g2.adv, Math.max(1, t2.fontSize * hEm));\n      };\n      const glyphPass = (mode) => {\n        for (const g2 of placed) {\n          if (g2.ch === \" \" && !t2.underline && !t2.linethrough) continue;\n          ctx.save();\n          ctx.translate(g2.x, g2.y);\n          if (g2.rot) ctx.rotate(g2.rot);\n          if (g2.sc !== 1) ctx.scale(g2.sc, g2.sc);\n          if (t2.__gradFill) {\n            const lg = gradAt(g2.x, g2.y);\n            if (fill && typeof fill !== \"string\") ctx.fillStyle = lg;\n            if (stroke && typeof stroke !== \"string\") ctx.strokeStyle = lg;\n          }\n          if (mode === \"stroke\") {\n            ctx.strokeText(g2.ch, 0, 0);\n          } else {\n            if (fill) ctx.fillText(g2.ch, 0, 0);\n            if (fill || stroke) {\n              if (!fill) ctx.fillStyle = stroke;\n              if (t2.underline) deco(g2, 0.1, 0.065);\n              if (t2.linethrough) deco(g2, -0.31, 0.065);\n            }\n          }\n          ctx.restore();\n        }\n      };\n      if (stroke && t2.paintFirst === \"stroke\") glyphPass(\"stroke\");\n      glyphPass(\"fill\");\n      if (stroke && t2.paintFirst !== \"stroke\") glyphPass(\"stroke\");\n      ctx.restore();\n    }\n    // Re-attach shape rendering after any deserialize (undo/redo, paste) \u2014 the\n    // JSON carries __shape, but instance _render overrides don't survive it.\n    _shapeReattach(objs) {\n      for (const o2 of objs) {\n        if (o2.__locked) this._applyLockState(o2);\n        if (o2.__base) this._applyBaseState(o2);\n        if (o2.__el && !o2.__el.isLine && o2.path) {\n          this._elStrokeSync(o2);\n          continue;\n        }\n        if (o2.__el && o2.__el.isLine && o2 instanceof ca) {\n          this._lineRig(o2);\n          this._rebuildLine(o2);\n          continue;\n        }\n        if (!o2.__el && !o2.__elRole && !this._crop && o2.selectable !== false && o2.evented !== false && !o2.excludeFromExport && o2.isType && o2.isType(\"rect\", \"circle\", \"triangle\", \"polygon\", \"path\")) {\n          o2.__el = { kind: \"legacy\", w: o2.width, h: o2.height, round: 0 };\n          if (typeof o2.stroke === \"string\" && o2.stroke && o2.strokeWidth) {\n            o2.__el.bstyle = o2.strokeDashArray ? \"dashed\" : \"solid\";\n            o2.__el.bweight = o2.strokeWidth;\n            o2.__el.bcolor = o2.stroke;\n          }\n          continue;\n        }\n        if (!o2.__el && !o2.__elRole && o2.isType && o2.isType(\"line\") && !o2.group && !this._crop) {\n          const m = o2.calcTransformMatrix();\n          const a2 = new N(o2.x1 - (o2.x1 + o2.x2) / 2, o2.y1 - (o2.y1 + o2.y2) / 2).transform(m);\n          const b2 = new N(o2.x2 - (o2.x1 + o2.x2) / 2, o2.y2 - (o2.y1 + o2.y2) / 2).transform(m);\n          const idx = this.canvas.getObjects().indexOf(o2);\n          if (idx !== -1) {\n            const S2 = Math.max(10, Math.hypot(b2.x - a2.x, b2.y - a2.y));\n            const g2 = this._buildLineAssembly(\"line\", S2, { left: (a2.x + b2.x) / 2, top: (a2.y + b2.y) / 2, originX: \"center\", originY: \"center\" });\n            g2.__el.weight = Math.max(1, (o2.strokeWidth || 9) * ((Math.abs(o2.scaleX || 1) + Math.abs(o2.scaleY || 1)) / 2));\n            g2.__el.color = typeof o2.stroke === \"string\" && o2.stroke ? o2.stroke : \"#0f172a\";\n            g2.set({ angle: Math.atan2(b2.y - a2.y, b2.x - a2.x) * 180 / Math.PI, opacity: o2.opacity == null ? 1 : o2.opacity });\n            this._rebuildLine(g2);\n            this.canvas.remove(o2);\n            this.canvas.insertAt(idx, g2);\n            this._styleSelection(g2);\n            g2.setCoords();\n          }\n          continue;\n        }\n        if (o2.isType && o2.isType(\"image\")) {\n          o2.__stickerRender = false;\n          if (o2.__sticker && o2.__sticker.w && o2.__stickerPad) {\n            const el2 = o2._originalElement || o2._element;\n            if (el2 && !this._ringHasInk(el2, o2.__stickerPad)) {\n              o2.__stickerEl = this._contourFor(el2, o2.__stickerPad, o2.__sticker.color || \"#000000\", true);\n              this._attachStickerRender(o2);\n            }\n          }\n          continue;\n        }\n        if (!o2.isType || !o2.isType(\"textbox\")) continue;\n        if (o2.__gradFill) {\n          if (o2.fill && typeof o2.fill === \"object\") o2.fill = this._inkFill(o2);\n          if (o2.stroke && typeof o2.stroke === \"object\") o2.stroke = this._inkFill(o2);\n          o2.dirty = true;\n        }\n        if (o2.__shape) {\n          o2.__shapeRender = false;\n          this._shapeApply(o2);\n        } else {\n          this._hugWidth(o2);\n        }\n        o2.__fxRender = false;\n        this._syncFxRender(o2);\n      }\n    }\n    // \u2500\u2500 Lock (Owen 9-08, Canva semantics): a locked element still SELECTS\n    // (that's the unlock affordance) but can't move/scale/rotate/edit/delete\n    // and drops out of multi-selections. __locked rides EditorCloneProps;\n    // _shapeReattach re-applies the lock after restore/undo/clone.\n    _applyLockState(o2) {\n      const on2 = !!o2.__locked;\n      o2.lockMovementX = o2.lockMovementY = o2.lockScalingX = o2.lockScalingY = o2.lockRotation = on2;\n      o2.hoverCursor = on2 ? \"default\" : null;\n      if (on2) o2.hasControls = false;\n      if (o2.isType && o2.isType(\"textbox\")) o2.editable = !on2;\n    }\n    // Host-supplied BASE art (studio modes \u2014 the by-size Add Text takeover).\n    // Owen 9-20 \"a layer you can put text behind\", then 9-21 \"make the image\n    // moveable and scalable on the text stand alone\": the base is a REAL layer\n    // \u2014 selectable, movable, UNIFORMLY scalable (corner handles only), NOT\n    // rotatable \u2014 but never deleted or duplicated (deleteActive /\n    // _cloneActiveMembers skip it: the upload is why the session exists, and a\n    // copy would smuggle an image into a text-only studio) and never restyled\n    // (syncSelection hides the image tools for it). The Use Design export scale\n    // reads its LIVE scaled width, so the art still lands at by-size's pxW.\n    // __base rides EditorCloneProps; _shapeReattach re-applies this (fabric does\n    // not serialize selectable/evented/controls). Drafts saved while the base\n    // was inert carry __locked:true \u2014 on a base that flag can only be the old\n    // inert state (it had no lock affordance), so it is cleared here.\n    _applyBaseState(o2) {\n      o2.__locked = false;\n      this._applyLockState(o2);\n      o2.selectable = true;\n      o2.evented = true;\n      o2.hasBorders = true;\n      o2.hasControls = true;\n      o2.lockRotation = true;\n      o2.lockUniScaling = true;\n      o2.lockSkewingX = o2.lockSkewingY = true;\n      o2.setControlsVisibility({ mtr: false, mt: false, mb: false, ml: false, mr: false });\n    }\n    setBase(obj) {\n      if (!obj) return;\n      obj.__base = true;\n      this._applyBaseState(obj);\n      obj.setCoords();\n      this.canvas.requestRenderAll();\n    }\n    // Fresh history line from the CURRENT canvas: a host-placed base is the\n    // floor \u2014 undo must never walk back to an empty board.\n    resetHistory() {\n      clearTimeout(this._recordTimer);\n      this._recordTimer = null;\n      this._history = [this._snapshot()];\n      this._redo.length = 0;\n      this._emit(\"history\");\n    }\n    setLocked(obj, on2) {\n      if (!obj) return;\n      obj.__locked = !!on2;\n      this._applyLockState(obj);\n      if (!on2) {\n        obj.hasControls = true;\n        this._styleSelection(obj);\n        this._shapeReattach([obj]);\n      }\n      obj.setCoords();\n      this.canvas.fire(\"object:modified\", { target: obj });\n      this.canvas.requestRenderAll();\n      this._emit(\"selection\");\n    }\n    deleteActive() {\n      const active = this.canvas.getActiveObject();\n      const all = this.canvas.getActiveObjects();\n      const objs = all.filter((o2) => !o2.__locked && !o2.__base);\n      if (!objs.length) {\n        if (all.some((o2) => o2.__base)) this._emit(\"refuse\", \"baseDelete\");\n        return;\n      }\n      this.canvas.discardActiveObject();\n      const touchedGroups = /* @__PURE__ */ new Set();\n      objs.forEach((o2) => {\n        if (o2.group && o2.group !== active && o2.group instanceof ca && !(o2.group instanceof gs)) {\n          touchedGroups.add(o2.group);\n          o2.group.remove(o2);\n        } else this.canvas.remove(o2);\n      });\n      for (const g2 of touchedGroups) {\n        if (g2.getObjects().length > 1) continue;\n        this._dissolveGroupIntoParent(g2);\n      }\n      if (active && this.canvas.getObjects().indexOf(active) !== -1) this.canvas.remove(active);\n      this.canvas.requestRenderAll();\n      this._emit(\"deleted\", { count: objs.length });\n    }\n    // \u2500\u2500 Selection actions (quick-action pill / context menu / keyboard) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    layerUp() {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      this.canvas.bringObjectForward(o2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    layerDown() {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      this.canvas.sendObjectBackwards(o2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    layerToFront() {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      this.canvas.bringObjectToFront(o2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    layerToBack() {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      this.canvas.sendObjectToBack(o2);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    flip(axis) {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      const prop = axis === \"h\" ? \"flipX\" : \"flipY\";\n      o2.set(prop, !o2[prop]);\n      o2.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n    }\n    async _cloneWithMeta(obj) {\n      const clone = await obj.clone(EditorCloneProps);\n      this._styleSelection(clone);\n      this._shapeReattach([clone]);\n      return clone;\n    }\n    // \u26A0 ActiveSelection is EPHEMERAL \u2014 cloning it and adding the clone puts a\n    // wrapper \"object\" on the canvas that renders blank and barely hit-tests\n    // (Owen 9-06 \"duplicated four layers, produced one blank layer I can't\n    // delete\"). Multi-selections always dup/copy/paste by their MEMBERS: the\n    // selection is discarded first so member coords read absolute (inside a\n    // selection they're group-relative), members clone individually, and the\n    // clones re-select as a fresh ActiveSelection.\n    async _cloneActiveMembers() {\n      const obj = this.canvas.getActiveObject();\n      if (!obj) return null;\n      if (obj.__base) {\n        this._emit(\"refuse\", \"baseCopy\");\n        return null;\n      }\n      if (obj instanceof gs) {\n        const members = obj.getObjects();\n        this.canvas.discardActiveObject();\n        const clones = [];\n        for (const m of members) if (!m.__base) clones.push(await this._cloneWithMeta(m));\n        if (members.some((m) => m.__base) && !clones.length) this._emit(\"refuse\", \"baseCopy\");\n        const sel = new gs(members, { canvas: this.canvas });\n        this.canvas.setActiveObject(sel);\n        this._styleSelection(sel);\n        return clones.length ? clones : null;\n      }\n      const clone = await this._cloneWithMeta(obj);\n      const g2 = obj.group;\n      if (g2 && g2 instanceof ca && !(g2 instanceof gs)) {\n        clone.set({\n          angle: (obj.angle || 0) + (g2.angle || 0),\n          scaleX: (obj.scaleX || 1) * (g2.scaleX || 1),\n          scaleY: (obj.scaleY || 1) * (g2.scaleY || 1)\n        });\n        clone.setPositionByOrigin(obj.getCenterPoint(), \"center\", \"center\");\n        clone.setCoords();\n        if (clone.__shape) this._shapeApply(clone);\n      }\n      return [clone];\n    }\n    // Diagonal step (30, 60, \u2026 wrapping) for paste/duplicate so a copy NEVER\n    // lands directly on its original and repeated pastes cascade (Owen 9-08).\n    _placeCascade() {\n      this._placeSeq = (this._placeSeq || 0) % 8 + 1;\n      return this._placeSeq * 30;\n    }\n    // Nudge a set of objects so their combined bounding box stays ON the board\n    // (Owen 9-08 \"any copied or pasted element lands on canvas\"). Objects bigger\n    // than the board are centered instead of pinned.\n    _clampOntoBoard(objs) {\n      let minL = Infinity, minT = Infinity, maxR = -Infinity, maxB = -Infinity;\n      for (const o2 of objs) {\n        o2.setCoords();\n        const r2 = o2.getBoundingRect();\n        minL = Math.min(minL, r2.left);\n        minT = Math.min(minT, r2.top);\n        maxR = Math.max(maxR, r2.left + r2.width);\n        maxB = Math.max(maxB, r2.top + r2.height);\n      }\n      const W2 = this.designW, H2 = this.designH;\n      const bw = maxR - minL, bh = maxB - minT;\n      let dx = 0, dy = 0;\n      if (bw <= W2) {\n        if (minL < 0) dx = -minL;\n        else if (maxR > W2) dx = W2 - maxR;\n      } else dx = W2 / 2 - (minL + bw / 2);\n      if (bh <= H2) {\n        if (minT < 0) dy = -minT;\n        else if (maxB > H2) dy = H2 - maxB;\n      } else dy = H2 / 2 - (minT + bh / 2);\n      if (dx || dy) for (const o2 of objs) {\n        o2.set({ left: o2.left + dx, top: o2.top + dy });\n        o2.setCoords();\n      }\n    }\n    // Real design objects (what prints) \u2014 excludes render helpers.\n    _boardObjects() {\n      return this.canvas.getObjects().filter((o2) => !o2.excludeFromExport);\n    }\n    // Union bounding box of `objs` in design units.\n    _contentBounds(objs) {\n      let minL = Infinity, minT = Infinity, maxR = -Infinity, maxB = -Infinity;\n      for (const o2 of objs) {\n        o2.setCoords();\n        const r2 = o2.getBoundingRect();\n        minL = Math.min(minL, r2.left);\n        minT = Math.min(minT, r2.top);\n        maxR = Math.max(maxR, r2.left + r2.width);\n        maxB = Math.max(maxB, r2.top + r2.height);\n      }\n      return { left: minL, top: minT, width: maxR - minL, height: maxB - minT };\n    }\n    // Union of the objects' INK rects (shadows included \u2014 they print).\n    _inkBounds(objs) {\n      let minL = Infinity, minT = Infinity, maxR = -Infinity, maxB = -Infinity;\n      for (const o2 of objs) {\n        o2.setCoords();\n        const r2 = this._inkRectFor(o2, { shadow: true });\n        minL = Math.min(minL, r2.left);\n        minT = Math.min(minT, r2.top);\n        maxR = Math.max(maxR, r2.left + r2.width);\n        maxB = Math.max(maxB, r2.top + r2.height);\n      }\n      return { left: minL, top: minT, width: maxR - minL, height: maxB - minT };\n    }\n    // True when any real PIXEL pokes past the board edge (what the export\n    // crops). INK, not frames (Owen 9-20 \"I'm getting a warning because my\n    // bounding box is outside of the canvas, not any design pixels\"): frames\n    // carry hug margins, padding and effect headroom; only pixels print. Same\n    // ink rule as snapping and alignment, plus shadows.\n    contentOverhang() {\n      const objs = this._boardObjects();\n      if (!objs.length) return false;\n      const b2 = this._inkBounds(objs);\n      return b2.left < -0.5 || b2.top < -0.5 || b2.left + b2.width > this.designW + 0.5 || b2.top + b2.height > this.designH + 0.5;\n    }\n    // Board-change safety (Owen 9-14): shift the content so it stays centered\n    // on the new board (physical sizes unchanged), then \u2014 only if it still\n    // doesn't fit \u2014 scale the WHOLE design down about the board center, 2%\n    // margin. Never scales UP (print pixels must not inflate). Outlines\n    // re-hold their weight at the new scale; a final clamp catches rounding.\n    _fitContentToBoard(prevW, prevH) {\n      const objs = this._boardObjects();\n      if (!objs.length) return { scaled: false, s: 1 };\n      const wasRestoring = this._restoring;\n      this._restoring = true;\n      try {\n        this.canvas.discardActiveObject();\n        const dx = (this.designW - prevW) / 2, dy = (this.designH - prevH) / 2;\n        if (dx || dy) for (const o2 of objs) {\n          o2.set({ left: o2.left + dx, top: o2.top + dy });\n          o2.setCoords();\n        }\n        const margin = Math.round(Math.min(this.designW, this.designH) * 0.02);\n        const b2 = this._contentBounds(objs);\n        const s3 = Math.min(1, (this.designW - 2 * margin) / Math.max(1, b2.width), (this.designH - 2 * margin) / Math.max(1, b2.height));\n        if (s3 < 1) {\n          const cx = this.designW / 2, cy = this.designH / 2;\n          for (const o2 of objs) {\n            const c2 = o2.getCenterPoint();\n            o2.set({ scaleX: o2.scaleX * s3, scaleY: o2.scaleY * s3 });\n            o2.setPositionByOrigin(new N(cx + (c2.x - cx) * s3, cy + (c2.y - cy) * s3), \"center\", \"center\");\n            o2.setCoords();\n            if (o2.__sticker && o2.__sticker.w) {\n              o2.__stickerFastDirty = true;\n              this._stickerWeightHold(o2);\n            }\n          }\n        }\n        this._clampOntoBoard(objs);\n        this.canvas.requestRenderAll();\n        return { scaled: s3 < 1, s: s3 };\n      } finally {\n        this._restoring = wasRestoring;\n      }\n    }\n    // \"Fit to canvas\" action (overhang toast / export gate): scale + clamp the\n    // design onto the CURRENT board as one undo step.\n    fitContentToBoard() {\n      const r2 = this._fitContentToBoard(this.designW, this.designH);\n      this._record();\n      this._emit(\"canvasfit\");\n      return r2;\n    }\n    _placeClones(clones, atPoint) {\n      if (atPoint) {\n        let minL = Infinity, minT = Infinity, maxR = -Infinity, maxB = -Infinity;\n        for (const c2 of clones) {\n          c2.setCoords();\n          const r2 = c2.getBoundingRect();\n          minL = Math.min(minL, r2.left);\n          minT = Math.min(minT, r2.top);\n          maxR = Math.max(maxR, r2.left + r2.width);\n          maxB = Math.max(maxB, r2.top + r2.height);\n        }\n        const dx = atPoint.x - (minL + maxR) / 2, dy = atPoint.y - (minT + maxB) / 2;\n        for (const c2 of clones) {\n          c2.set({ left: c2.left + dx, top: c2.top + dy });\n          c2.setCoords();\n          this.canvas.add(c2);\n        }\n      } else {\n        const d2 = this._placeCascade();\n        for (const c2 of clones) {\n          c2.set({ left: c2.left + d2, top: c2.top + d2 });\n          c2.setCoords();\n          this.canvas.add(c2);\n        }\n      }\n      this._clampOntoBoard(clones);\n      this.canvas.discardActiveObject();\n      if (clones.length === 1) {\n        this.canvas.setActiveObject(clones[0]);\n      } else {\n        const sel = new gs(clones, { canvas: this.canvas });\n        this.canvas.setActiveObject(sel);\n        this._styleSelection(sel);\n      }\n      this.canvas.requestRenderAll();\n    }\n    async duplicateActive() {\n      const clones = await this._cloneActiveMembers();\n      if (!clones) return null;\n      this._placeClones(clones);\n      return clones.length === 1 ? clones[0] : this.canvas.getActiveObject();\n    }\n    async copyActive() {\n      const clones = await this._cloneActiveMembers();\n      if (!clones) return false;\n      this._clipboard = clones;\n      return true;\n    }\n    hasClipboard() {\n      return !!(this._clipboard && this._clipboard.length);\n    }\n    async paste(atPoint) {\n      if (!this.hasClipboard()) return null;\n      const clones = [];\n      for (const c2 of this._clipboard) clones.push(await this._cloneWithMeta(c2));\n      this._placeClones(clones, atPoint);\n      return this.canvas.getActiveObject();\n    }\n    // \u2500\u2500 Image tools: crop / corner radius / revert \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // Crop mode: a draggable/resizable frame over the image; Apply computes the\n    // fabric cropX/cropY/width/height in image-source pixels. The frame shares\n    // the image's angle so the math stays in image-local space.\n    startCrop() {\n      const img = this.activeImage();\n      if (!img || img.__el || this._crop) return false;\n      const rect = new $i({\n        left: img.left,\n        top: img.top,\n        originX: \"center\",\n        originY: \"center\",\n        angle: img.angle || 0,\n        width: img.getScaledWidth(),\n        height: img.getScaledHeight(),\n        fill: \"rgba(0,0,0,0)\",\n        stroke: \"#019AFF\",\n        strokeWidth: 1.5,\n        strokeUniform: true,\n        lockRotation: true,\n        transparentCorners: false,\n        cornerStyle: \"circle\",\n        cornerColor: \"#ffffff\",\n        cornerStrokeColor: \"#019AFF\",\n        cornerSize: 11,\n        touchCornerSize: 32,\n        // finger-sized handle hit areas (Owen 9-09 mobile sensitivity)\n        borderColor: \"#019AFF\"\n      });\n      rect.setControlsVisibility({ mtr: false, mt: false, mb: false, ml: false, mr: false });\n      for (const k2 of [\"tl\", \"tr\", \"bl\", \"br\"]) {\n        const c2 = rect.controls && rect.controls[k2];\n        if (c2) {\n          c2.render = renderCornerControl(k2);\n          c2.cursorStyleHandler = cornerCursorHandler(k2);\n        }\n      }\n      rect.lockMovementX = rect.lockMovementY = true;\n      this._crop = {\n        img,\n        rect,\n        prevSelectable: img.selectable,\n        baseAngle: img.angle || 0,\n        prevOpacity: img.opacity == null ? 1 : img.opacity,\n        baseScaleX: img.scaleX,\n        baseScaleY: img.scaleY,\n        baseLeft: img.left,\n        baseTop: img.top,\n        ratioLocked: false\n        // set true by the aspect-ratio tiles\n      };\n      const scrim = new $i({\n        fill: \"rgba(100,116,139,0.55)\",\n        selectable: false,\n        evented: false,\n        excludeFromExport: true,\n        originX: \"center\",\n        originY: \"center\",\n        left: this.designW / 2,\n        top: this.designH / 2,\n        width: Math.max(this.designW, this.designH) * 1.4,\n        height: Math.max(this.designW, this.designH) * 1.4\n      });\n      this._crop.scrim = scrim;\n      this.canvas.add(scrim);\n      this.canvas.add(rect);\n      this.canvas.setActiveObject(rect);\n      img.clone().then((bright) => {\n        if (!this._crop || this._crop.img !== img) return;\n        bright.set({\n          selectable: false,\n          evented: false,\n          opacity: this._crop.prevOpacity,\n          excludeFromExport: true\n        });\n        this._crop.bright = bright;\n        this.canvas.add(bright);\n        this.canvas.bringObjectToFront(rect);\n        this._syncCropClip();\n      });\n      this._syncCropClip();\n      this._cropSync = (e24) => {\n        if (this._crop && (e24.target === this._crop.rect || e24.target === this._crop.img)) this._syncCropClip();\n      };\n      this.canvas.on(\"object:moving\", this._cropSync);\n      this.canvas.on(\"object:scaling\", this._cropSync);\n      this.canvas.on(\"object:rotating\", this._cropSync);\n      this.canvas.on(\"object:modified\", this._cropSync);\n      this._cropDown = (opt) => {\n        const c2 = this._crop;\n        if (!c2) return;\n        if (opt.target === c2.rect && !c2.rect.__corner) {\n          const p2 = this.canvas.getScenePoint(opt.e);\n          c2.drag = { x: p2.x, y: p2.y, left: c2.img.left, top: c2.img.top };\n        }\n      };\n      this._cropMove = (opt) => {\n        const c2 = this._crop;\n        if (!c2 || !c2.drag) return;\n        const p2 = this.canvas.getScenePoint(opt.e);\n        c2.img.set({ left: c2.drag.left + (p2.x - c2.drag.x), top: c2.drag.top + (p2.y - c2.drag.y) });\n        c2.img.setCoords();\n        this._syncCropClip();\n      };\n      this._cropUp = () => {\n        if (this._crop) this._crop.drag = null;\n      };\n      this._cropResel = () => {\n        if (!this._crop) return;\n        setTimeout(() => {\n          if (this._crop && !this.canvas.getActiveObject()) {\n            this.canvas.setActiveObject(this._crop.rect);\n            this.canvas.requestRenderAll();\n          }\n        }, 0);\n      };\n      this._cropBeforeTransform = (opt) => {\n        const c2 = this._crop;\n        this.canvas.uniformScaling = !(c2 && opt.transform && opt.transform.target === c2.rect && !c2.ratioLocked);\n      };\n      this.canvas.on(\"before:transform\", this._cropBeforeTransform);\n      this.canvas.on(\"mouse:down\", this._cropDown);\n      this.canvas.on(\"mouse:move\", this._cropMove);\n      this.canvas.on(\"mouse:up\", this._cropUp);\n      this.canvas.on(\"selection:cleared\", this._cropResel);\n      this.canvas.requestRenderAll();\n      return true;\n    }\n    _syncCropClip() {\n      const c2 = this._crop;\n      if (!c2) return;\n      const { img, rect, bright } = c2;\n      if (!bright) {\n        this.canvas.requestRenderAll();\n        return;\n      }\n      bright.set({\n        left: img.left,\n        top: img.top,\n        angle: img.angle,\n        scaleX: img.scaleX,\n        scaleY: img.scaleY,\n        flipX: img.flipX,\n        flipY: img.flipY\n      });\n      bright.clipPath = new $i({\n        absolutePositioned: true,\n        originX: \"center\",\n        originY: \"center\",\n        left: rect.left,\n        top: rect.top,\n        width: rect.getScaledWidth(),\n        height: rect.getScaledHeight(),\n        angle: rect.angle || 0\n      });\n      bright.dirty = true;\n      this.canvas.requestRenderAll();\n    }\n    _teardownCrop(crop) {\n      this.canvas.off(\"object:moving\", this._cropSync);\n      this.canvas.off(\"object:scaling\", this._cropSync);\n      this.canvas.off(\"object:rotating\", this._cropSync);\n      this.canvas.off(\"object:modified\", this._cropSync);\n      this.canvas.off(\"before:transform\", this._cropBeforeTransform);\n      this.canvas.uniformScaling = true;\n      this.canvas.off(\"mouse:down\", this._cropDown);\n      this.canvas.off(\"mouse:move\", this._cropMove);\n      this.canvas.off(\"mouse:up\", this._cropUp);\n      this.canvas.off(\"selection:cleared\", this._cropResel);\n      if (crop.bright) this.canvas.remove(crop.bright);\n      if (crop.scrim) this.canvas.remove(crop.scrim);\n      crop.img.set(\"opacity\", crop.prevOpacity);\n    }\n    // Scale the image INSIDE the crop frame around its center (Canva behavior).\n    setCropScale(pct) {\n      if (!this._crop) return;\n      const c2 = this._crop;\n      const k2 = Math.min(3, Math.max(0.1, (parseFloat(pct) || 100) / 100));\n      c2.img.set({ scaleX: c2.baseScaleX * k2, scaleY: c2.baseScaleY * k2 });\n      c2.img.setCoords();\n      this._syncCropClip();\n      this.canvas.requestRenderAll();\n    }\n    // Rotate the image INSIDE the crop frame (Canva's crop-rotate). Baked on apply.\n    setCropRotation(deg) {\n      if (!this._crop) return;\n      const { img, baseAngle } = this._crop;\n      img.set(\"angle\", baseAngle + (parseFloat(deg) || 0));\n      img.setCoords();\n      this._syncCropClip();\n      this.canvas.requestRenderAll();\n    }\n    cancelCrop() {\n      if (!this._crop) return;\n      const crop = this._crop;\n      const { img, rect, prevSelectable, baseAngle } = crop;\n      this._crop = null;\n      this._teardownCrop(crop);\n      img.set({\n        angle: baseAngle,\n        left: crop.baseLeft,\n        top: crop.baseTop,\n        scaleX: crop.baseScaleX,\n        scaleY: crop.baseScaleY\n      });\n      img.setCoords();\n      this.canvas.remove(rect);\n      img.selectable = prevSelectable;\n      this.canvas.setActiveObject(img);\n      this.canvas.requestRenderAll();\n    }\n    applyCrop() {\n      if (!this._crop) return;\n      const crop = this._crop;\n      const { img, rect, prevSelectable } = crop;\n      const phi = ((img.angle || 0) - (rect.angle || 0)) * Math.PI / 180;\n      if (Math.abs(phi) > 5e-4) {\n        this._crop = null;\n        this._teardownCrop(crop);\n        const keepSticker = img.__sticker && img.__sticker.w ? img.__sticker : null;\n        if (keepSticker && img.__stickerPad) {\n          img.__sticker = null;\n          this._applyRecolor(img);\n        }\n        const el3 = img._originalElement || img._element;\n        const sx = img.scaleX, sy = img.scaleY;\n        const W2 = Math.max(1, Math.round(rect.getScaledWidth() / sx));\n        const H2 = Math.max(1, Math.round(rect.getScaledHeight() / sy));\n        const rad2 = (rect.angle || 0) * Math.PI / 180;\n        const dx2 = img.left - rect.left;\n        const dy2 = img.top - rect.top;\n        const ox = (dx2 * Math.cos(-rad2) - dy2 * Math.sin(-rad2)) / sx;\n        const oy = (dx2 * Math.sin(-rad2) + dy2 * Math.cos(-rad2)) / sy;\n        const cnv = document.createElement(\"canvas\");\n        cnv.width = W2;\n        cnv.height = H2;\n        const ctx = cnv.getContext(\"2d\");\n        ctx.translate(W2 / 2 + ox, H2 / 2 + oy);\n        ctx.rotate(phi);\n        ctx.drawImage(el3, -((img.cropX || 0) + img.width / 2), -((img.cropY || 0) + img.height / 2));\n        {\n          const cos = Math.cos(phi), sin = Math.sin(phi);\n          const tx1 = -((img.cropX || 0) + img.width / 2);\n          const ty1 = -((img.cropY || 0) + img.height / 2);\n          const tx2 = W2 / 2 + ox, ty2 = H2 / 2 + oy;\n          const m1 = [cos, sin, -sin, cos, cos * tx1 - sin * ty1 + tx2, sin * tx1 + cos * ty1 + ty2];\n          const prev = img.__bake;\n          const m = prev ? [\n            // compose: this bake applied AFTER the stored one (m1 \u2218 m0)\n            m1[0] * prev.m[0] + m1[2] * prev.m[1],\n            m1[1] * prev.m[0] + m1[3] * prev.m[1],\n            m1[0] * prev.m[2] + m1[2] * prev.m[3],\n            m1[1] * prev.m[2] + m1[3] * prev.m[3],\n            m1[0] * prev.m[4] + m1[2] * prev.m[5] + m1[4],\n            m1[1] * prev.m[4] + m1[3] * prev.m[5] + m1[5]\n          ] : m1;\n          const natW2 = prev ? prev.natW : el3.naturalWidth || el3.width;\n          img.__bake = { m, W: W2, H: H2, natW: natW2 };\n        }\n        img.__recolorRepl = null;\n        img.__recolorPal = null;\n        img.__filter = null;\n        img.__filterStrength = null;\n        img.__filterColors = null;\n        if (img.__adjust) img.__adjust.blur = 0;\n        img.__stickerPad = 0;\n        img.__preRecolorEl = null;\n        img.setElement(cnv);\n        img.set({\n          cropX: 0,\n          cropY: 0,\n          width: W2,\n          height: H2,\n          left: rect.left,\n          top: rect.top,\n          angle: rect.angle || 0\n        });\n        this.canvas.remove(rect);\n        img.selectable = prevSelectable;\n        img.__autoWindow = null;\n        if (keepSticker) {\n          img.__sticker = keepSticker;\n          this._applyRecolor(img);\n        }\n        if (img.__radius) this.setImageRadius(img.__radius, img);\n        img.dirty = true;\n        img.setCoords();\n        this.canvas.setActiveObject(img);\n        this.canvas.requestRenderAll();\n        this.canvas.fire(\"object:modified\", { target: img });\n        return;\n      }\n      this._crop = null;\n      this._teardownCrop(crop);\n      const rad = (img.angle || 0) * Math.PI / 180;\n      const dx = rect.left - img.left;\n      const dy = rect.top - img.top;\n      const localX = (dx * Math.cos(-rad) - dy * Math.sin(-rad)) / img.scaleX;\n      const localY = (dx * Math.sin(-rad) + dy * Math.cos(-rad)) / img.scaleY;\n      const wLocal = rect.getScaledWidth() / img.scaleX;\n      const hLocal = rect.getScaledHeight() / img.scaleY;\n      const el2 = img._originalElement || img._element;\n      const natW = el2 && (el2.naturalWidth || el2.width) || img.width;\n      const natH = el2 && (el2.naturalHeight || el2.height) || img.height;\n      let cropX = (img.cropX || 0) + img.width / 2 + (localX - wLocal / 2);\n      let cropY = (img.cropY || 0) + img.height / 2 + (localY - hLocal / 2);\n      cropX = Math.max(0, Math.min(natW - 1, cropX));\n      cropY = Math.max(0, Math.min(natH - 1, cropY));\n      const w2 = Math.max(1, Math.min(wLocal, natW - cropX));\n      const h2 = Math.max(1, Math.min(hLocal, natH - cropY));\n      img.set({ cropX, cropY, width: w2, height: h2, left: rect.left, top: rect.top });\n      img.__autoWindow = null;\n      this.canvas.remove(rect);\n      img.selectable = prevSelectable;\n      if (img.__sticker && img.__sticker.w) {\n        const p2 = img.__stickerPad || 0;\n        this._applyRecolor(img, { clipCore: { x: cropX - p2, y: cropY - p2, w: w2, h: h2 } });\n      }\n      if (img.__radius) this.setImageRadius(img.__radius, img);\n      img.setCoords();\n      this.canvas.setActiveObject(img);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: img });\n    }\n    // Corner rounding: pct 0\u2013100 of the shorter side's half \u2192 rounded-rect clipPath.\n    setImageRadius(pct, target2) {\n      const img = target2 || this.activeImage();\n      if (!img) return;\n      img.__radius = Math.max(0, Math.min(100, Math.round(pct) || 0));\n      if (img.__sticker && img.__sticker.w && img.__stickerPad) {\n        img.clipPath = void 0;\n        this._applyRecolor(img);\n      } else if (!img.__radius) {\n        img.clipPath = void 0;\n      } else {\n        const r2 = Math.min(img.width, img.height) * (img.__radius / 100) / 2;\n        img.clipPath = new $i({\n          width: img.width,\n          height: img.height,\n          rx: r2,\n          ry: r2,\n          originX: \"center\",\n          originY: \"center\"\n        });\n      }\n      img.dirty = true;\n      this.canvas.requestRenderAll();\n      if (!target2) this.canvas.fire(\"object:modified\", { target: img });\n    }\n    // \u2500\u2500 Recolor (ported from the PDP's studio-recolor) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // replacements live on the object (__recolorRepl + __recolorPal, serialized)\n    // and re-apply after any source swap, so they compose with BGR/filters.\n    // \u2500\u2500 Adjustments (Owen 9-05): client-side fabric filters \u2014 instant sliders,\n    // no network render, no source swap (so crop/bake geometry is untouched by\n    // construction). Values are UI-range (-100..100, blur 0..100); mapped here\n    // onto fabric's ranges, tempered where fabric's \u00B11 is far past useful.\n    // fabric serializes the `filters` array natively and setElement/setSrc\n    // re-apply it, so adjustments survive undo/redo, saves, BGR/filter swaps,\n    // and recolor without any replay code. __adjust mirrors the values for the\n    // pane's sliders (serialized via EditorCloneProps).\n    setImageAdjust(im, adjust) {\n      if (!im) return;\n      const a2 = Object.assign(\n        { temp: 0, tint: 0, bri: 0, con: 0, hi: 0, sh: 0, wh: 0, bl: 0, invert: false, vib: 0, sat: 0, hue: 0, sharp: 0, clar: 0, vig: 0, blur: 0, noise: 0, pix: 0 },\n        adjust || {}\n      );\n      const any = a2.temp || a2.tint || a2.bri || a2.con || a2.hi || a2.sh || a2.wh || a2.bl || a2.invert || a2.vib || a2.sat || a2.hue || a2.sharp || a2.clar || a2.vig || a2.blur || a2.noise || a2.pix;\n      const prevBlur = im.__adjust && im.__adjust.blur || 0;\n      const prevVig = im.__adjust && im.__adjust.vig || 0;\n      im.__adjust = any ? a2 : null;\n      const list = [];\n      if (a2.temp || a2.tint) {\n        list.push(new Cc.ColorMatrix({\n          matrix: [\n            1,\n            0,\n            0,\n            0,\n            a2.temp / 100 * 0.16,\n            0,\n            1,\n            0,\n            0,\n            -(a2.tint / 100) * 0.12,\n            0,\n            0,\n            1,\n            0,\n            -(a2.temp / 100) * 0.16,\n            0,\n            0,\n            0,\n            1,\n            0\n          ]\n        }));\n      }\n      if (a2.bri) list.push(new Cc.Brightness({ brightness: a2.bri / 100 * 0.5 }));\n      if (a2.con) list.push(new Cc.Contrast({ contrast: a2.con / 100 * 0.5 }));\n      if (a2.hi || a2.sh || a2.wh || a2.bl || a2.clar) {\n        list.push(new NinjaTone({ hi: a2.hi / 100, sh: a2.sh / 100, wh: a2.wh / 100, bl: a2.bl / 100, clar: a2.clar / 100 }));\n      }\n      if (a2.vib) list.push(new Cc.Vibrance({ vibrance: a2.vib / 100 }));\n      if (a2.sat) list.push(new Cc.Saturation({ saturation: a2.sat / 100 }));\n      if (a2.hue) list.push(new Cc.HueRotation({ rotation: a2.hue / 100 }));\n      if (a2.invert) list.push(new Cc.Invert());\n      if (a2.sharp) {\n        const k2 = a2.sharp / 100 * 0.6;\n        const m = -a2.sharp / 100 * 0.08;\n        list.push(new Cc.Convolute({\n          matrix: a2.sharp > 0 ? [0, -k2, 0, -k2, 1 + 4 * k2, -k2, 0, -k2, 0] : [m, m, m, m, 1 - 8 * m, m, m, m, m]\n        }));\n      }\n      if (a2.noise) list.push(new Cc.Noise({ noise: Math.round(a2.noise / 100 * 200) }));\n      if (a2.pix) {\n        const el2 = im._originalElement || im._element;\n        const minDim = Math.min(el2.naturalWidth || el2.width || 100, el2.naturalHeight || el2.height || 100);\n        list.push(new Cc.Pixelate({ blocksize: Math.max(2, Math.round(minDim * 0.04 * (a2.pix / 100))) }));\n      }\n      im.filters = list;\n      if ((a2.blur || 0) !== prevBlur || (a2.vig || 0) !== prevVig) this._applyRecolor(im);\n      else im.applyFilters();\n      im.dirty = true;\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: im });\n    }\n    setImageRecolor(im, replacements, palette) {\n      if (!im) return;\n      im.__recolorRepl = replacements && replacements.length ? replacements : null;\n      im.__recolorPal = im.__recolorRepl ? palette : null;\n      this._applyRecolor(im);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: im });\n    }\n    // INTERIOR blur (Owen 9-05): UNIFORM blur with a crisp silhouette \u2014 the\n    // whole image blurs equally (edge to core), but the alpha channel is the\n    // ORIGINAL's, so there is never an outside halo (which prints as fuzz on a\n    // DTF cut edge). getImageData returns STRAIGHT (non-premultiplied) RGBA, so\n    // the blurred rgb near the edge is already the normalized neighborhood\n    // color \u2014 stamping the original alpha over it gives full-strength blur\n    // right up to a hard edge, no darkened or faded rim. (Earlier 3-draw\n    // composite kept a sharp rim of original pixels \u2014 Owen asked for uniform.)\n    _interiorBlur(el2, amount) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const t2 = Math.max(0, Math.min(100, amount)) / 100;\n      const r2 = Math.max(1, Math.round(Math.min(w2, h2) * 0.03 * t2));\n      const out = document.createElement(\"canvas\");\n      out.width = w2;\n      out.height = h2;\n      const ctx = out.getContext(\"2d\");\n      ctx.filter = \"blur(\" + r2 + \"px)\";\n      ctx.drawImage(el2, 0, 0);\n      ctx.filter = \"none\";\n      const bd = ctx.getImageData(0, 0, w2, h2);\n      const oc2 = document.createElement(\"canvas\");\n      oc2.width = w2;\n      oc2.height = h2;\n      const octx = oc2.getContext(\"2d\");\n      octx.drawImage(el2, 0, 0);\n      const od = octx.getImageData(0, 0, w2, h2).data;\n      const d2 = bd.data;\n      for (let i2 = 3; i2 < d2.length; i2 += 4) d2[i2] = od[i2];\n      ctx.putImageData(bd, 0, 0);\n      return out;\n    }\n    // Sticker outline (Owen 9-06): a solid contour dilated around the art's\n    // silhouette \u2014 the die-cut sticker look. Dilation = the colored silhouette\n    // stamped in two rings of offsets (16 at full radius, 8 at half) with the\n    // art drawn back on top. Same grid as the input; the crop window is grown\n    // separately so the contour isn't clipped (see _applyRecolor).\n    // Output grid = input + 2\u00B7pad with the art at (+pad, +pad): the contour has\n    // guaranteed room on every side, so it can NEVER clip at the grid edge\n    // (Owen 9-06: the outline was cut flat where art touched the file edge).\n    // The outline is a SEPARATE LAYER now (Owen 9-07): the element holds only\n    // the padded ART, and the contour lives on im.__stickerEl, drawn UNDER the\n    // art by a _render override. Two wins: fabric adjustment filters (invert,\n    // brightness, \u2026) apply to the art only \u2014 the contour keeps its exact color \u2014\n    // and the contour is generated SUPERSAMPLED (up to 4\u00D7, targeting ~1800px)\n    // so it stays crisp regardless of the source's resolution.\n    // Art centered on the grown grid with a transparent pad ring \u2014 the element\n    // the window math expects (same grid the baked version used).\n    _padArt(el2, pad) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const out = document.createElement(\"canvas\");\n      out.width = w2 + 2 * pad;\n      out.height = h2 + 2 * pad;\n      out.getContext(\"2d\").drawImage(el2, pad, pad);\n      return out;\n    }\n    // Smooth contour of `el`'s VISIBLE silhouette at supersample k.\n    // 1. Threshold the art's alpha near-hard first (Owen 9-07: art edges can be\n    //    feathered/semi-transparent \u2014 the contour must hug the VISIBLE edge, not\n    //    the faint haze; the haze itself blends over the contour ink underneath,\n    //    so no transparent gap can appear between art and outline).\n    // 2. Exact disc dilation of that silhouette through a Euclidean distance\n    //    transform (9-18): true circles at corners, hairlines preserved, and a\n    //    1px alpha ramp at the exact boundary \u2014 no stamp facets, no blur pass.\n    // prePadded: el is already on the grown grid (restore path).\n    _contourFor(el2, pad, color, prePadded) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const gw = prePadded ? w2 : w2 + 2 * pad;\n      const gh = prePadded ? h2 : h2 + 2 * pad;\n      const target2 = this._stickerFastMode ? 700 : 1800;\n      const k2 = Math.max(gw, gh) <= target2 ? Math.min(4, Math.max(1, Math.round(target2 / Math.max(gw, gh)))) : Math.max(0.15, target2 / Math.max(gw, gh));\n      const r2 = pad * k2;\n      const off = prePadded ? 0 : r2;\n      const hard = document.createElement(\"canvas\");\n      hard.width = w2 * k2;\n      hard.height = h2 * k2;\n      const hctx = hard.getContext(\"2d\");\n      hctx.drawImage(el2, 0, 0, w2, h2, 0, 0, w2 * k2, h2 * k2);\n      const hid = hctx.getImageData(0, 0, hard.width, hard.height);\n      const hd = hid.data;\n      for (let i2 = 3; i2 < hd.length; i2 += 4) {\n        hd[i2] = hd[i2] < 128 ? 0 : 255;\n      }\n      hctx.putImageData(hid, 0, 0);\n      const W2 = Math.max(1, Math.round(gw * k2));\n      const H2 = Math.max(1, Math.round(gh * k2));\n      const sil = document.createElement(\"canvas\");\n      sil.width = W2;\n      sil.height = H2;\n      const sctx = sil.getContext(\"2d\");\n      sctx.drawImage(hard, off, off);\n      const sd = sctx.getImageData(0, 0, W2, H2).data;\n      const INF = 1e20;\n      const f2 = new Float32Array(W2 * H2);\n      for (let i2 = 0, j2 = 3; i2 < f2.length; i2++, j2 += 4) f2[i2] = sd[j2] >= 128 ? 0 : INF;\n      const n2 = Math.max(W2, H2);\n      const v2 = new Int32Array(n2), z2 = new Float64Array(n2 + 1), g2 = new Float32Array(n2), out = new Float32Array(n2);\n      const edt1d = (len, read, write) => {\n        let kk = 0;\n        v2[0] = 0;\n        z2[0] = -INF;\n        z2[1] = INF;\n        for (let q2 = 0; q2 < len; q2++) g2[q2] = read(q2);\n        for (let q2 = 1; q2 < len; q2++) {\n          if (g2[q2] >= INF) continue;\n          let sInt;\n          for (; ; ) {\n            const vk = v2[kk];\n            sInt = (g2[q2] + q2 * q2 - (g2[vk] + vk * vk)) / (2 * q2 - 2 * vk);\n            if (sInt <= z2[kk] && kk > 0) {\n              kk--;\n              continue;\n            }\n            break;\n          }\n          if (g2[v2[kk]] >= INF) {\n            v2[kk] = q2;\n            z2[kk] = -INF;\n            z2[kk + 1] = INF;\n            continue;\n          }\n          kk++;\n          v2[kk] = q2;\n          z2[kk] = sInt;\n          z2[kk + 1] = INF;\n        }\n        kk = 0;\n        for (let q2 = 0; q2 < len; q2++) {\n          while (z2[kk + 1] < q2) kk++;\n          const vk = v2[kk];\n          const dq = q2 - vk;\n          out[q2] = g2[vk] + dq * dq;\n        }\n        for (let q2 = 0; q2 < len; q2++) write(q2, out[q2]);\n      };\n      for (let x2 = 0; x2 < W2; x2++) edt1d(H2, (y2) => f2[y2 * W2 + x2], (y2, val) => {\n        f2[y2 * W2 + x2] = val;\n      });\n      for (let y2 = 0; y2 < H2; y2++) {\n        const row = y2 * W2;\n        edt1d(W2, (x2) => f2[row + x2], (x2, val) => {\n          f2[row + x2] = val;\n        });\n      }\n      const sm = document.createElement(\"canvas\");\n      sm.width = W2;\n      sm.height = H2;\n      const mctx = sm.getContext(\"2d\");\n      const id = mctx.createImageData(W2, H2);\n      const d2 = id.data;\n      const co2 = [parseInt(color.slice(1, 3), 16) || 0, parseInt(color.slice(3, 5), 16) || 0, parseInt(color.slice(5, 7), 16) || 0];\n      const edge = r2 + 0.5;\n      for (let i2 = 0, j2 = 0; i2 < f2.length; i2++, j2 += 4) {\n        const dist = Math.sqrt(f2[i2]);\n        let t2 = edge - dist;\n        t2 = t2 < 0 ? 0 : t2 > 1 ? 1 : t2;\n        d2[j2] = co2[0];\n        d2[j2 + 1] = co2[1];\n        d2[j2 + 2] = co2[2];\n        d2[j2 + 3] = Math.round(t2 * 255);\n      }\n      mctx.putImageData(id, 0, 0);\n      return { canvas: sm, k: k2 };\n    }\n    // Draw the contour under the art, mapped through the SAME crop window the\n    // element uses (contour grid = element grid \u00D7 k, so window coords scale by k).\n    _renderSticker(im, ctx) {\n      const st2 = im.__stickerEl;\n      if (st2 && st2.canvas && st2.canvas.width) {\n        const k2 = st2.k;\n        ctx.drawImage(\n          st2.canvas,\n          (im.cropX || 0) * k2,\n          (im.cropY || 0) * k2,\n          im.width * k2,\n          im.height * k2,\n          -im.width / 2,\n          -im.height / 2,\n          im.width,\n          im.height\n        );\n      }\n      ws.prototype._render.call(im, ctx);\n    }\n    _attachStickerRender(im) {\n      if (im.__stickerRender) return;\n      im.__stickerRender = true;\n      const editor = this;\n      im._render = function(ctx) {\n        editor._renderSticker(this, ctx);\n      };\n    }\n    _detachStickerRender(im) {\n      im.__stickerEl = null;\n      if (im.__stickerRender) {\n        delete im._render;\n        im.__stickerRender = false;\n      }\n    }\n    // Legacy detection: pre-9-07 saves BAKED the contour into the element, so\n    // their pad ring carries ink; the layered format's ring is transparent.\n    _ringHasInk(el2, pad) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      try {\n        const c2 = document.createElement(\"canvas\");\n        c2.width = w2;\n        c2.height = Math.max(1, Math.min(pad, 4));\n        const ctx = c2.getContext(\"2d\");\n        ctx.drawImage(el2, 0, 0);\n        const d2 = ctx.getImageData(0, 0, c2.width, c2.height).data;\n        for (let i2 = 3; i2 < d2.length; i2 += 16) if (d2[i2] > 12) return true;\n      } catch (e24) {\n        return true;\n      }\n      return false;\n    }\n    // Outline weight is in CANVAS units \u2014 same meaning as element outlines\n    // (Owen 9-08 video: element stroke stays visually constant as the object\n    // scales, the image outline used to be a fraction of the SOURCE resolution\n    // so its visual weight rode the display scale). pad converts design units\n    // \u2192 source px through the image's live scale; a resize re-derives it (the\n    // object:modified hook), so the visible weight holds.\n    _stickerPadFor(im, el2) {\n      const w2 = im.__sticker && im.__sticker.w || 0;\n      if (!w2) return 0;\n      const scale = this._effScale(im);\n      const minDim = Math.min(el2.naturalWidth || el2.width || 100, el2.naturalHeight || el2.height || 100);\n      return Math.max(1, Math.min(Math.round(minDim * 0.5), 600, Math.round(w2 / scale)));\n    }\n    // Image outline weight is CANVAS-absolute: after a resize the stored pad\n    // (source px) no longer matches the design-unit weight \u2014 re-stage so the\n    // ring re-derives at the new scale (runs at gesture end, not per-frame).\n    // LIVE image outline during a scale gesture (Owen 9-09 \"that scale\n    // transition on all outlines\"): a full re-stage per frame is too heavy, so\n    // it throttles to one pass every ~300ms and never overlaps itself; the ring\n    // steps back to constant thickness as you drag, and the release hold lands\n    // the exact value.\n    _stickerLive(im) {\n      const now = performance.now();\n      if (this._stickerLiveBusy || now - (this._stickerLiveAt || 0) < 120) return;\n      this._stickerLiveAt = now;\n      this._stickerLiveBusy = true;\n      this._stickerFastMode = true;\n      im.__stickerFastDirty = true;\n      try {\n        const st2 = im.__sticker;\n        const el2 = im._originalElement || im._element;\n        if (st2 && st2.w && im.__stickerPad && el2) {\n          const pad = Math.max(1, Math.min(this._stickerPadFor(im, el2), im.__stickerPad));\n          im.__stickerEl = this._contourFor(el2, pad, st2.color, true);\n          im.dirty = true;\n        } else {\n          this._applyRecolor(im);\n        }\n      } finally {\n        this._stickerFastMode = false;\n        this._stickerLiveBusy = false;\n      }\n      clearTimeout(im.__stickerQT);\n      im.__stickerQT = setTimeout(() => {\n        if (im.__stickerFastDirty) this._stickerWeightHold(im);\n      }, 450);\n    }\n    _stickerWeightHold(im) {\n      if (this.outlineTracksScale) return;\n      if (!im || !im.isType || !im.isType(\"image\")) return;\n      const st2 = im.__sticker;\n      if (!st2 || !st2.w || !im.__stickerPad) return;\n      const visual = im.__stickerPad * this._effScale(im);\n      if (!im.__stickerFastDirty && Math.abs(visual - st2.w) <= Math.max(0.75, st2.w * 0.08)) return;\n      im.__stickerFastDirty = false;\n      this._applyRecolor(im);\n      this.canvas.requestRenderAll();\n    }\n    // \u2550\u2550\u2550 THE OUTLINE SCALE SWITCH (Owen 9-09) \u2550\u2550\u2550\n    // ONE flag governs every outline surface \u2014 text stroke, image sticker,\n    // element border, line weight \u2014 so they always act the same:\n    //   false = CANVAS-ABSOLUTE: the value keeps meaning the same visible band\n    //     through resizes (the gesture-end holds re-derive).\n    //   true (DEFAULT since 9-18, Owen) = outlines RIDE the object scale: holds\n    //     no-op, and the element/line scale-absorb multiplies the weight instead\n    //     of preserving it.\n    // Toggled from File \u2192 \"Outline scales with object\" (persisted per browser).\n    setOutlineTracksScale(v2) {\n      this.outlineTracksScale = !!v2;\n      for (const o2 of this.canvas.getObjects()) {\n        if (!o2.__el) continue;\n        if (!o2.__el.isLine && o2.__el.bstyle && o2.__el.bstyle !== \"none\") this._elStrokeSync(o2);\n        o2.dirty = true;\n      }\n      this.canvas.requestRenderAll();\n    }\n    // Total effective scale of an object, THROUGH any group / active-selection\n    // chain \u2014 mid-gesture a member's own scaleX doesn't include the selection's\n    // transform, which is exactly when the outline holds need the real number.\n    _effScale(o2) {\n      let sx = Math.abs(o2.scaleX || 1);\n      let sy = Math.abs(o2.scaleY || 1);\n      let g2 = o2.group;\n      while (g2) {\n        sx *= Math.abs(g2.scaleX || 1);\n        sy *= Math.abs(g2.scaleY || 1);\n        g2 = g2.group;\n      }\n      return (sx + sy) / 2 || 1;\n    }\n    // Text outline weight is canvas-absolute (see _applyTextEffectTo): after a\n    // resize the stored strokeWidth no longer matches the design-unit value \u2014\n    // re-apply so the visible weight holds (gesture end, like images).\n    _textOutlineHold(t2) {\n      if (this.outlineTracksScale) return;\n      if (!t2 || !t2.isType || !t2.isType(\"textbox\")) return;\n      if (t2.__effect !== \"outline\") return;\n      const sc2 = this._effScale(t2);\n      const want = Math.max(0.5, 2 * (t2.__effectSize != null ? t2.__effectSize : 12) / sc2);\n      if (Math.abs((t2.strokeWidth || 0) - want) <= Math.max(0.5, want * 0.08)) return;\n      this._applyTextEffectTo(t2, \"outline\", t2.__effectColor, t2.__effectSize);\n    }\n    // Slider-scrub variant of the gesture fast path (Owen 9-09 lighten-up):\n    // the outline weight slider re-derived the FULL-quality contour on every\n    // input tick (~52ms even on a fast machine \u2014 a frozen slider on slow\n    // ones). Stage at preview quality (700px trace); a 450ms trailer lands the\n    // full-quality ring \u2014 mode-agnostic, so it also covers outlineTracksScale.\n    setImageStickerLive(im, sticker) {\n      if (!im) return;\n      im.__sticker = sticker && sticker.w ? { w: sticker.w, color: sticker.color || \"#ffffff\" } : null;\n      im.__stickerFastDirty = true;\n      const now = performance.now();\n      if (!this._stickerLiveBusy && now - (this._stickerLiveAt || 0) >= 120) {\n        this._stickerLiveAt = now;\n        this._stickerLiveBusy = true;\n        this._stickerFastMode = true;\n        try {\n          this._applyRecolor(im);\n        } finally {\n          this._stickerFastMode = false;\n          this._stickerLiveBusy = false;\n        }\n        this.canvas.requestRenderAll();\n      }\n      clearTimeout(im.__stickerQT);\n      im.__stickerQT = setTimeout(() => {\n        if (!im.__stickerFastDirty) return;\n        im.__stickerFastDirty = false;\n        this._applyRecolor(im);\n        this.canvas.requestRenderAll();\n      }, 450);\n    }\n    setImageSticker(im, sticker) {\n      if (!im) return;\n      im.__sticker = sticker && sticker.w ? { w: sticker.w, color: sticker.color || \"#ffffff\" } : null;\n      this._applyRecolor(im);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: im });\n    }\n    // Element-stage pipeline: base \u2192 recolor \u2192 preset filter \u2192 interior blur \u2192\n    // sticker outline \u2192 (fabric adjustment filters apply on top via setElement).\n    // One captured base serves all. The preset stage runs CLIENT-SIDE and after\n    // recolor, so filters see the recolored pixels (Owen 9-07 #2) \u2014 no imgix\n    // round-trip, and intensity scrubs are instant like the adjustments.\n    //\n    // WINDOW MODEL: all window math runs through the CORE window \u2014 the visible\n    // rect in base-grid coords. With an outline pad p, the object's fabric\n    // window is (coreX, coreY, coreW + 2p, coreH + 2p) on the padded grid (art\n    // at +p, so the same x/y numerically): content stays centered (origin is\n    // center), the p-ring around the art is where the contour paints, and\n    // repeated re-applies never ratchet. opts.clipCore passes an explicit core\n    // window (a fresh user crop, already mapped to core coords).\n    _applyRecolor(im, opts) {\n      if (!im.__preRecolorEl) im.__preRecolorEl = im._originalElement || im._element;\n      const base = im.__preRecolorEl;\n      const baseW = base.naturalWidth || base.width;\n      const baseH = base.naturalHeight || base.height;\n      const oldPad = im.__stickerPad || 0;\n      let core = opts && opts.clipCore ? opts.clipCore : { x: im.cropX || 0, y: im.cropY || 0, w: Math.max(1, im.width - 2 * oldPad), h: Math.max(1, im.height - 2 * oldPad) };\n      const cx = Math.max(0, Math.min(baseW - 1, core.x));\n      const cy = Math.max(0, Math.min(baseH - 1, core.y));\n      core = { x: cx, y: cy, w: Math.max(1, Math.min(core.w, baseW - cx)), h: Math.max(1, Math.min(core.h, baseH - cy)) };\n      const windowed = core.x > 0.5 || core.y > 0.5 || core.w < baseW - 1 || core.h < baseH - 1;\n      let el2 = base;\n      if (im.__recolorRepl) el2 = recolorElement(el2, im.__recolorRepl, im.__recolorPal || []);\n      if (im.__filterCS && im.__filter) {\n        const f2 = FILTERS.find((x2) => x2.key === im.__filter);\n        let params = f2 && f2.params;\n        if (params && im.__filter === \"duotone\" && im.__filterColors) {\n          params = Object.assign({}, params, { duo: [im.__filterColors.a.replace(\"#\", \"\"), im.__filterColors.b.replace(\"#\", \"\")], duoAlpha: 1 });\n        }\n        if (params) el2 = applyPresetToCanvas(el2, params, im.__filterStrength);\n      }\n      const blur = im.__adjust && im.__adjust.blur;\n      if (blur) el2 = this._interiorBlur(el2, blur);\n      const vig = im.__adjust && im.__adjust.vig;\n      if (vig) el2 = this._vignette(el2, core, vig);\n      const wantW = im.__sticker && im.__sticker.w ? im.__sticker.w : 0;\n      let newPad = 0;\n      if (wantW) {\n        const sameW = im.__stickerW == null ? !!oldPad : im.__stickerW === wantW;\n        newPad = this.outlineTracksScale && oldPad && sameW ? oldPad : this._stickerPadFor(im, el2);\n        im.__stickerW = wantW;\n      } else {\n        im.__stickerW = null;\n      }\n      if (newPad) {\n        if (windowed) el2 = this._clipToWindow(el2, core);\n        if (im.__radius) el2 = this._roundWindowMask(el2, core, im.__radius);\n        im.__stickerEl = this._contourFor(el2, newPad, im.__sticker.color);\n        el2 = this._padArt(el2, newPad);\n        this._attachStickerRender(im);\n      } else {\n        this._detachStickerRender(im);\n      }\n      im.setElement(el2);\n      im.set({\n        cropX: core.x,\n        cropY: core.y,\n        width: core.w + 2 * newPad,\n        height: core.h + 2 * newPad\n      });\n      if (im.__radius) {\n        if (newPad) im.clipPath = void 0;\n        else this.setImageRadius(im.__radius, im);\n      }\n      if (newPad !== oldPad || opts && opts.clipCore) im.setCoords();\n      im.__stickerPad = newPad;\n      if (el2 === base) im.__preRecolorEl = null;\n      im.dirty = true;\n    }\n    // Vignette (Owen 9-07, Canva parity): radial darkening (amt>0) or lightening\n    // (amt<0) centered on the VISIBLE window \u2014 source-atop, so only existing\n    // pixels are touched and the silhouette/alpha never changes.\n    _vignette(el2, core, amt) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const out = document.createElement(\"canvas\");\n      out.width = w2;\n      out.height = h2;\n      const ctx = out.getContext(\"2d\");\n      ctx.drawImage(el2, 0, 0);\n      const cx = core.x + core.w / 2;\n      const cy = core.y + core.h / 2;\n      const outer = Math.sqrt(core.w * core.w + core.h * core.h) / 2;\n      const a2 = Math.min(1, Math.abs(amt) / 100);\n      const tone = amt > 0 ? \"0,0,0\" : \"255,255,255\";\n      const g2 = ctx.createRadialGradient(cx, cy, outer * (0.75 - 0.35 * a2), cx, cy, outer);\n      g2.addColorStop(0, \"rgba(\" + tone + \",0)\");\n      g2.addColorStop(1, \"rgba(\" + tone + \",\" + (0.85 * a2).toFixed(3) + \")\");\n      ctx.globalCompositeOperation = \"source-atop\";\n      ctx.fillStyle = g2;\n      ctx.fillRect(0, 0, w2, h2);\n      return out;\n    }\n    // Copy of the element with everything OUTSIDE the core window cleared \u2014\n    // same grid, art clipped in place (the outline stage's input).\n    _clipToWindow(el2, core) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const out = document.createElement(\"canvas\");\n      out.width = w2;\n      out.height = h2;\n      out.getContext(\"2d\").drawImage(el2, core.x, core.y, core.w, core.h, core.x, core.y, core.w, core.h);\n      return out;\n    }\n    // Bake the corner-radius rounding into the ART PIXELS at the window rect\n    // (full-grid coords, like _clipToWindow). Used when an OUTLINE is active\n    // (Owen 9-08 screenshot): the contour must trace the ROUNDED silhouette,\n    // and the fabric clipPath can't be used \u2014 the sticker underlay escapes it\n    // (square ring behind a circled image) and clipping it would chop the ring.\n    _roundWindowMask(el2, core, pct) {\n      const w2 = el2.naturalWidth || el2.width;\n      const h2 = el2.naturalHeight || el2.height;\n      const out = document.createElement(\"canvas\");\n      out.width = w2;\n      out.height = h2;\n      const x2 = out.getContext(\"2d\");\n      x2.drawImage(el2, 0, 0);\n      const r2 = Math.min(core.w, core.h) * (pct / 100) / 2;\n      x2.globalCompositeOperation = \"destination-in\";\n      x2.beginPath();\n      x2.roundRect(core.x, core.y, core.w, core.h, r2);\n      x2.fill();\n      return out;\n    }\n    // Re-run the element stages with the current props (public: preset filter\n    // picks/intensity re-stage without any source swap \u2014 Owen 9-07 #2).\n    restageImage(im) {\n      if (!im) return;\n      this._applyRecolor(im);\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: im });\n    }\n    // Pixels the recolor pane should DETECT on (the clean pre-recolor base,\n    // unfiltered \u2014 see _applyRecolor).\n    recolorBaseElement(im) {\n      return im.__preRecolorEl || im._originalElement || im._element;\n    }\n    // Small canvas of the image's PRE-FILTER look \u2014 base + recolor \u2014 for the\n    // filter tiles: presets preview on top of the user's recolor (Owen 9-07 #2).\n    // Recolor runs on the downscaled copy, so tiles stay cheap at any source size.\n    filterThumbCanvas(im, size = 320) {\n      const base = this.recolorBaseElement(im);\n      const iw = base.naturalWidth || base.width;\n      const ih = base.naturalHeight || base.height;\n      const k2 = Math.min(1, size / Math.max(1, Math.max(iw, ih)));\n      const c2 = document.createElement(\"canvas\");\n      c2.width = Math.max(1, Math.round(iw * k2));\n      c2.height = Math.max(1, Math.round(ih * k2));\n      c2.getContext(\"2d\").drawImage(base, 0, 0, c2.width, c2.height);\n      return im.__recolorRepl ? recolorElement(c2, im.__recolorRepl, im.__recolorPal || []) : c2;\n    }\n    // Revert: back to the original upload \u2014 crop, rounding, and BGR pick cleared;\n    // displayed width preserved.\n    async revertImage() {\n      const img = this.activeImage();\n      if (!img || !img.__originalSrc) return;\n      const displayedW = img.getScaledWidth();\n      await img.setSrc(img.__originalSrc, { crossOrigin: \"anonymous\" });\n      {\n        const el2 = img._element;\n        img.set({ cropX: 0, cropY: 0, width: el2.naturalWidth || el2.width, height: el2.naturalHeight || el2.height });\n      }\n      img.clipPath = void 0;\n      img.__radius = 0;\n      img.__filter = null;\n      img.__filterCS = false;\n      img.__filterStrength = null;\n      img.__filterColors = null;\n      img.__bake = null;\n      img.__recolorRepl = null;\n      img.__recolorPal = null;\n      img.__preRecolorEl = null;\n      img.__sticker = null;\n      img.__stickerPad = 0;\n      img.__superRes = false;\n      img.__adjust = null;\n      img.filters = [];\n      img.applyFilters();\n      if (img.__bgr) img.__bgr.model = null;\n      this._applyInkCrop(img);\n      const s3 = displayedW / img.width;\n      img.set({ scaleX: s3, scaleY: s3 });\n      img.dirty = true;\n      img.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: img });\n    }\n    // Align the selection to the page (the current design space). Uses the INK\n    // rect, not the frame \u2014 alignment works on pixels, exactly like snapping\n    // (Owen 9-08 \"that goes for all alignment\").\n    alignToPage(pos) {\n      const o2 = this.canvas.getActiveObject();\n      if (!o2) return;\n      o2.setCoords();\n      const br2 = this._inkRectFor(o2);\n      const W2 = this.designW;\n      const H2 = this.designH;\n      if (pos === \"left\") o2.set(\"left\", o2.left - br2.left);\n      else if (pos === \"centerH\") o2.set(\"left\", o2.left + (W2 / 2 - (br2.left + br2.width / 2)));\n      else if (pos === \"right\") o2.set(\"left\", o2.left + (W2 - (br2.left + br2.width)));\n      else if (pos === \"top\") o2.set(\"top\", o2.top - br2.top);\n      else if (pos === \"middle\") o2.set(\"top\", o2.top + (H2 / 2 - (br2.top + br2.height / 2)));\n      else if (pos === \"bottom\") o2.set(\"top\", o2.top + (H2 - (br2.top + br2.height)));\n      o2.setCoords();\n      this.canvas.requestRenderAll();\n      this.canvas.fire(\"object:modified\", { target: o2 });\n      this._emit(\"selection\");\n    }\n    async _restore(json) {\n      this._restoring = true;\n      try {\n        performance.mark(\"nsv2:restore:start\");\n      } catch (e24) {\n      }\n      try {\n        const data = typeof json === \"string\" ? JSON.parse(json) : json;\n        {\n          const fams = /* @__PURE__ */ new Set();\n          const raw = typeof json === \"string\" ? json : JSON.stringify(data);\n          for (const m of raw.matchAll(/\"fontFamily\"\\s*:\\s*\"([^\"]+)\"/g)) fams.add(m[1]);\n          const fontsReady = Promise.all([...fams].map((f2) => loadFont(f2).catch(() => {\n          })));\n          await Promise.race([fontsReady, new Promise((r2) => setTimeout(r2, 200))]);\n          const token = this._restoreToken = (this._restoreToken || 0) + 1;\n          this._restoreSettled = fontsReady.then(() => {\n            if (this._restoreToken !== token) return;\n            this._refitTextMetrics();\n          });\n        }\n        if (data.__designW && (data.__designW !== this.designW || data.__designH !== this.designH)) {\n          this.designW = data.__designW;\n          this.designH = data.__designH || data.__designW;\n          this.fitToContainer();\n          this._emit(\"canvassize\");\n        }\n        await this.canvas.loadFromJSON(data);\n        this._syncBoardClip();\n        {\n          const bg = data.__boardBg != null ? data.__boardBg : this.canvas.backgroundColor || \"\";\n          this.canvas.backgroundColor = \"\";\n          this._boardBg = bg;\n          this._paintPage();\n        }\n        this._guides = data.__guides && data.__guides.v ? { v: data.__guides.v.slice(), h: data.__guides.h.slice() } : { v: [], h: [] };\n        for (const o2 of [...this.canvas.getObjects()]) {\n          if (o2 instanceof gs || o2.type === \"activeselection\" || o2.type === \"activeSelection\") {\n            this.canvas.remove(o2);\n          }\n        }\n        const objs = [];\n        const walk = (list) => {\n          for (const o2 of list) {\n            objs.push(o2);\n            if (o2 instanceof ca && !(o2 instanceof gs) && o2.getObjects) walk(o2.getObjects());\n          }\n        };\n        walk(this.canvas.getObjects());\n        objs.forEach((o2) => this._styleSelection(o2));\n        for (const o2 of objs) {\n          if (o2.__restage && o2.isType && o2.isType(\"image\")) {\n            delete o2.__restage;\n            o2.__preRecolorEl = null;\n            try {\n              this._applyRecolor(o2);\n            } catch (e24) {\n              console.warn(\"studio-v2: restage on restore failed\", e24);\n            }\n          }\n        }\n        this._shapeReattach(objs);\n        this._emit(\"canvasbg\");\n        this._attachTextHooks(objs);\n        this.canvas.requestRenderAll();\n      } finally {\n        this._restoring = false;\n        try {\n          performance.mark(\"nsv2:restore:end\");\n          performance.measure(\"nsv2:restore\", \"nsv2:restore:start\", \"nsv2:restore:end\");\n        } catch (e24) {\n        }\n      }\n      this._emit(\"selection\");\n      this._emit(\"history\");\n    }\n    // Resolves when the latest restore has fully settled (fonts landed + text\n    // refit) \u2014 after this, nothing on the canvas will shift. Resolved promise\n    // when no restore ran.\n    whenRestoreSettled() {\n      return this._restoreSettled || Promise.resolve();\n    }\n    // Re-derive text geometry after the real fonts land: boot restores paint\n    // with fallback faces first (see _restore's fast-paint race), so hug/wrap/\n    // shape need one pass with true metrics. Idempotent when fonts were already\n    // warm. Fires no object:modified \u2192 no history records.\n    _refitTextMetrics() {\n      const walk = (list, parent) => {\n        for (const o2 of list) {\n          if (o2 instanceof ca && !(o2 instanceof gs) && o2.getObjects) {\n            walk(o2.getObjects(), o2);\n            if (o2.triggerLayout) o2.triggerLayout();\n            continue;\n          }\n          if (!o2.isType || !o2.isType(\"textbox\") || o2.isEditing) continue;\n          if (o2.__shape) this._shapeApply(o2);\n          else if (o2.__manualWidth) o2.initDimensions();\n          else this._hugWidth(o2);\n          o2.setCoords();\n        }\n      };\n      walk(this.canvas.getObjects(), null);\n      this.canvas.requestRenderAll();\n    }\n    // The full design state as a JSON string \u2014 same shape history snapshots use\n    // (toDatalessJSON + EditorCloneProps + __designW/__designH), so anything\n    // undo/redo can restore, a saved design can too.\n    designJSON() {\n      this._flushRecord();\n      return this._snapshot();\n    }\n    // Load a SAVED design (My Designs \u2192 continue editing). Same revive path as\n    // undo/redo, but the loaded design starts a FRESH history line \u2014 undo must\n    // never walk back into whatever was on the canvas before the load.\n    async loadDesign(json) {\n      await this._restore(json);\n      clearTimeout(this._recordTimer);\n      this._recordTimer = null;\n      this._history = [this._snapshot()];\n      this._redo.length = 0;\n      this._emit(\"history\");\n    }\n    get canUndo() {\n      return this._history.length > 1 || !!this._recordTimer;\n    }\n    get canRedo() {\n      return this._redo.length > 0;\n    }\n    async undo() {\n      this._flushRecord();\n      if (this._history.length <= 1) return;\n      this._redo.push(this._history.pop());\n      await this._restore(this._history[this._history.length - 1]);\n    }\n    async redo() {\n      this._flushRecord();\n      if (!this.canRedo) return;\n      const state = this._redo.pop();\n      this._history.push(state);\n      await this._restore(state);\n    }\n    // Full design space \u2192 transparent PNG blob at targetPx square (the output contract's step 1).\n    async exportPng(targetPx, opts = {}) {\n      const active = this.canvas.getActiveObject();\n      this.canvas.discardActiveObject();\n      const prevBg = this.canvas.backgroundColor;\n      this.canvas.backgroundColor = \"\";\n      this.canvas.renderAll();\n      const swaps = [];\n      const wantPrint = opts.print !== false && targetPx > 2e3 && typeof this.printSourceFor === \"function\";\n      const wasRestoring = this._restoring;\n      if (wantPrint) {\n        this._restoring = true;\n        for (const o2 of this.canvas.getObjects()) {\n          if (!o2.isType || !o2.isType(\"image\") || o2.__el) continue;\n          let pair = null;\n          try {\n            pair = this.printSourceFor(o2);\n          } catch (e24) {\n            pair = null;\n          }\n          if (!pair) continue;\n          try {\n            const snap = { scaleX: o2.scaleX, scaleY: o2.scaleY, left: o2.left, top: o2.top, cropX: o2.cropX, cropY: o2.cropY, width: o2.width, height: o2.height, pad: o2.__stickerPad || 0 };\n            const center = o2.getCenterPoint();\n            const coreDisp = (snap.width - 2 * snap.pad) * snap.scaleX;\n            await this.replaceImageSource(o2, pair.print);\n            for (let i2 = 0; i2 < 2; i2++) {\n              const core = Math.max(1, o2.width - 2 * (o2.__stickerPad || 0));\n              const sc2 = coreDisp / core;\n              o2.set({ scaleX: sc2, scaleY: sc2 });\n              if (o2.__sticker && o2.__sticker.w) {\n                o2.__stickerFastDirty = true;\n                this._stickerWeightHold(o2);\n              } else break;\n            }\n            o2.setPositionByOrigin(center, \"center\", \"center\");\n            o2.setCoords();\n            swaps.push({ o: o2, back: pair.display, snap });\n          } catch (err) {\n            console.warn(\"studio-v2: print-res swap failed, exporting display res\", err);\n          }\n        }\n        this.canvas.renderAll();\n      }\n      const shaped = this.canvas.getObjects().filter((o2) => o2.isType && o2.isType(\"textbox\") && o2.__shape);\n      if (shaped.some((t2) => !t2.__shapePath)) {\n        await Promise.all(\n          shaped.map((t2) => {\n            const italic = t2.fontStyle === \"italic\";\n            const weight = parseInt(t2.fontWeight, 10) || (t2.fontWeight === \"bold\" ? 700 : 400);\n            return Promise.race([\n              ensureFontBinary(t2.fontFamily, weight, italic),\n              new Promise((r2) => setTimeout(r2, 6e3))\n            ]);\n          })\n        );\n        for (const t2 of shaped) {\n          if (!t2.__shapePath) this._shapeApply(t2);\n        }\n        this.canvas.renderAll();\n      }\n      try {\n        const z2 = this.canvas.getZoom();\n        const w2 = this.designW * z2;\n        const dataUrl = this.canvas.toDataURL({\n          format: \"png\",\n          quality: 1,\n          // Board top-left sits `apron` px into the canvas element (see\n          // _applyZoom's viewportTransform) \u2014 crop exactly the board.\n          left: this.apronX,\n          top: this.apronY,\n          width: w2,\n          height: this.designH * z2,\n          multiplier: targetPx / w2\n        });\n        return await (await fetch(dataUrl)).blob();\n      } finally {\n        for (const s3 of swaps) {\n          try {\n            await this.replaceImageSource(s3.o, s3.back);\n            const o2 = s3.o;\n            o2.set({ scaleX: s3.snap.scaleX, scaleY: s3.snap.scaleY, left: s3.snap.left, top: s3.snap.top });\n            if (o2.__sticker && o2.__sticker.w) {\n              o2.__stickerFastDirty = true;\n              this._stickerWeightHold(o2);\n            }\n            if ((o2.__stickerPad || 0) === s3.snap.pad) o2.set({ cropX: s3.snap.cropX, cropY: s3.snap.cropY, width: s3.snap.width, height: s3.snap.height });\n            o2.set({ scaleX: s3.snap.scaleX, scaleY: s3.snap.scaleY, left: s3.snap.left, top: s3.snap.top });\n            o2.dirty = true;\n            o2.setCoords();\n          } catch (e24) {\n          }\n        }\n        if (wantPrint) this._restoring = wasRestoring;\n        this.canvas.backgroundColor = prevBg;\n        if (active) this.canvas.setActiveObject(active);\n        this.canvas.renderAll();\n      }\n    }\n    destroy() {\n      this._ro.disconnect();\n      document.removeEventListener(\"visibilitychange\", this._onVisibility);\n      try {\n        document.fonts.removeEventListener(\"loadingdone\", this._onFontsArrived);\n      } catch (e24) {\n      }\n      try {\n        document.removeEventListener(\"nsv2:fontloaded\", this._onStudioFontLoaded);\n      } catch (e24) {\n      }\n      if (this._canvasFontWatch) {\n        for (const t2 of this._canvasFontWatch.values()) if (t2 !== \"done\") clearInterval(t2);\n        this._canvasFontWatch.clear();\n      }\n      this.canvas.dispose();\n    }\n  };\n\n  // src/config.js\n  var cfg = {\n    // uploads API: /uploads/getPresignedUploadUrl, saveData, fetchDataNew, archiveData\n    apiUrl: \"https://hpz51rjda5.execute-api.us-east-1.amazonaws.com/production\",\n    // public image door for the uploads bucket (tiles, previews, derivatives)\n    imgixHost: \"ninjauploads-production.imgix.net\",\n    // the uploads bucket itself: presigned PUTs, and plain GETs of save-state JSON\n    s3Host: \"ninja-services-production-ninjauploadss3bucket-zks2mguobhe4.s3.amazonaws.com\",\n    // CORS-safe imgix copy of the premade \"Ready to Press\" feed; '' = no mirror\n    rtpMirror: \"https://ninjauploads-production.imgix.net/rtp-mirror/\",\n    // background-removal + AI-edit proxy\n    proxyUrl: \"https://ruhg140mmf.execute-api.us-east-1.amazonaws.com/\",\n    // Ninja AI background remover: URL of Wil's shared client (theme asset\n    // nt-bgr-client.js \u2192 window.NinjaBackgroundRemoval, src/ninja-ai.js). '' = OFF\n    // (the ix/pc/gram picker). The US hosts pass their asset_url; UK passes nothing.\n    ninjaAiClient: \"\",\n    // Ninja Labs usage beacons; '' = off\n    evtUrl: \"https://uszaouez69.execute-api.us-east-1.amazonaws.com/evt\",\n    // store tag the proxy expects in its request bodies (UK by-size contract sends 'uk'); '' = omit the key\n    store: \"\",\n    // brandingName the AI create backend receives\n    brandingName: \"ninjatransfers.com\",\n    // 'api' = retire the previous save's row via /uploads/archiveData on overwrite; 'none' = skip (no route)\n    archive: \"api\",\n    // 'in' | 'cm' \u2014 the DISPLAY unit at the UI boundary (canvas presets + custom\n    // inputs, grid-size slider, ruler ticks \u2014 src/units.js). The engine stays\n    // inches: 50 units/in, 300 dpi exports, `wIn x hIn` registrations, and the\n    // Use Design handoff is a FILE the PDP measures itself.\n    units: \"in\",\n    // Canvas-size contract in the unit of `units`: { presets: [[w, h, label]\u2026],\n    // min, max, step, defaultW, defaultH }. null = the US board (src/units.js\n    // boardCfg: the Popular Sizes list + the 22 in max board, converted for cm).\n    board: null\n  };\n  var ROUTE_KEYS = [\"apiUrl\", \"imgixHost\", \"s3Host\", \"rtpMirror\", \"proxyUrl\", \"evtUrl\", \"store\", \"brandingName\", \"ninjaAiClient\"];\n  function configure(storage, units, board) {\n    if (storage && typeof storage === \"object\") {\n      for (const k2 of ROUTE_KEYS) if (typeof storage[k2] === \"string\") cfg[k2] = storage[k2].trim();\n      if (storage.archive === \"api\" || storage.archive === \"none\") cfg.archive = storage.archive;\n      cfg.apiUrl = cfg.apiUrl.replace(/\\/+$/, \"\");\n      if (cfg.rtpMirror && !/\\/$/.test(cfg.rtpMirror)) cfg.rtpMirror += \"/\";\n      if (cfg.proxyUrl && !/\\/$/.test(cfg.proxyUrl)) cfg.proxyUrl += \"/\";\n    }\n    if (units === \"in\" || units === \"cm\") cfg.units = units;\n    cfg.board = normalizeBoard(board);\n    return cfg;\n  }\n  function normalizeBoard(b2) {\n    if (!b2 || typeof b2 !== \"object\") return null;\n    const num = (v2) => typeof v2 === \"number\" && isFinite(v2) && v2 > 0 ? v2 : null;\n    const min = num(b2.min), max = num(b2.max), step = num(b2.step), dw = num(b2.defaultW), dh = num(b2.defaultH);\n    if (min == null || max == null || step == null || dw == null || dh == null) return null;\n    if (!(min < max) || dw < min || dw > max || dh < min || dh > max) return null;\n    const presets = Array.isArray(b2.presets) ? b2.presets.map((p2) => Array.isArray(p2) ? [num(p2[0]), num(p2[1]), typeof p2[2] === \"string\" ? p2[2] : \"\"] : null).filter((p2) => p2 && p2[0] != null && p2[1] != null && p2[0] >= min && p2[0] <= max && p2[1] >= min && p2[1] <= max) : [];\n    if (!presets.length) return null;\n    return { presets, min, max, step, defaultW: dw, defaultH: dh };\n  }\n  function isBucketHost(host) {\n    if (!host || !cfg.s3Host) return false;\n    const bucket = cfg.s3Host.split(\".s3.\")[0];\n    return host.split(\".s3.\")[0] === bucket && /\\.s3(\\.[a-z0-9-]+)?\\.amazonaws\\.com$/.test(host);\n  }\n\n  // src/eyedropper.js\n  var target = null;\n  function setEyeDropperTarget(t2) {\n    target = t2;\n  }\n  function hasNativeEyeDropper() {\n    return typeof window !== \"undefined\" && \"EyeDropper\" in window;\n  }\n  function openEyeDropper() {\n    if (hasNativeEyeDropper()) return new window.EyeDropper().open();\n    return sampleFromBoard();\n  }\n  var hex2 = (v2) => v2.toString(16).padStart(2, \"0\");\n  function sampleFromBoard() {\n    return new Promise((resolve, reject) => {\n      const cv = target && target.canvasEl();\n      const host = target && target.hostEl() || document.body;\n      if (!cv) return reject(new Error(\"eyedropper: no board\"));\n      const coarse = !!(window.matchMedia && window.matchMedia(\"(pointer: coarse)\").matches);\n      const layer = document.createElement(\"div\");\n      layer.className = \"nsv2-eyedrop-layer\";\n      const hint = document.createElement(\"div\");\n      hint.className = \"nsv2-eyedrop-hint\";\n      hint.textContent = coarse ? \"Tap a color on your design\" : \"Click a color on your design \\xB7 Esc to cancel\";\n      const swatch = document.createElement(\"div\");\n      swatch.className = \"nsv2-eyedrop-swatch\";\n      swatch.hidden = true;\n      layer.append(hint, swatch);\n      const phone = host.clientWidth < 768;\n      if (phone) host.classList.add(\"is-eyedropping\");\n      host.appendChild(layer);\n      const lr2 = () => layer.getBoundingClientRect();\n      const fc2 = target.canvas && target.canvas();\n      const act = fc2 && fc2.getActiveObject && fc2.getActiveObject();\n      const savedChrome = act ? { b: act.hasBorders, c: act.hasControls } : null;\n      if (act) {\n        act.hasBorders = false;\n        act.hasControls = false;\n        try {\n          fc2.renderAll();\n        } catch (e24) {\n        }\n      }\n      let ctx = null;\n      try {\n        ctx = cv.getContext(\"2d\");\n      } catch (e24) {\n      }\n      const sample = (clientX, clientY) => {\n        const r2 = cv.getBoundingClientRect();\n        if (!r2.width || !r2.height || clientX < r2.left || clientY < r2.top || clientX >= r2.right || clientY >= r2.bottom) return { off: true };\n        const x2 = Math.floor((clientX - r2.left) * cv.width / r2.width);\n        const y2 = Math.floor((clientY - r2.top) * cv.height / r2.height);\n        const d2 = ctx.getImageData(x2, y2, 1, 1).data;\n        if (d2[3] === 0) return { empty: true };\n        return { sRGBHex: \"#\" + hex2(d2[0]) + hex2(d2[1]) + hex2(d2[2]) };\n      };\n      const done = (fn2) => {\n        window.removeEventListener(\"keydown\", onKey, true);\n        if (phone) host.classList.remove(\"is-eyedropping\");\n        if (act && savedChrome) {\n          act.hasBorders = savedChrome.b;\n          act.hasControls = savedChrome.c;\n          try {\n            fc2.requestRenderAll();\n          } catch (e24) {\n          }\n        }\n        layer.remove();\n        fn2();\n      };\n      const onKey = (e24) => {\n        if (e24.key === \"Escape\") {\n          e24.preventDefault();\n          e24.stopPropagation();\n          done(() => reject(new Error(\"cancelled\")));\n        }\n      };\n      const onMove = (e24) => {\n        let s3;\n        try {\n          s3 = sample(e24.clientX, e24.clientY);\n        } catch (err) {\n          return;\n        }\n        swatch.hidden = !!s3.off;\n        swatch.classList.toggle(\"is-empty\", !!s3.empty);\n        swatch.style.background = s3.sRGBHex || \"\";\n        const b2 = lr2();\n        swatch.style.left = e24.clientX - b2.left + \"px\";\n        swatch.style.top = e24.clientY - b2.top + \"px\";\n      };\n      const onDown = (e24) => {\n        e24.preventDefault();\n        e24.stopPropagation();\n        let s3;\n        try {\n          s3 = sample(e24.clientX, e24.clientY);\n        } catch (err) {\n          hint.textContent = \"This image can\\u2019t be sampled\";\n          setTimeout(() => done(() => reject(new Error(\"tainted\"))), 1400);\n          return;\n        }\n        if (s3.off) return done(() => reject(new Error(\"cancelled\")));\n        done(() => resolve(s3.empty ? null : { sRGBHex: s3.sRGBHex }));\n      };\n      layer.addEventListener(\"pointermove\", onMove);\n      layer.addEventListener(\"pointerdown\", onDown);\n      window.addEventListener(\"keydown\", onKey, true);\n    });\n  }\n\n  // src/units.js\n  var IN2CM = 2.54;\n  var isCm = () => cfg.units === \"cm\";\n  var unitLabel = () => isCm() ? \"cm\" : \"in\";\n  var unitWord = () => isCm() ? \"centimetres\" : \"inches\";\n  var toIn = (v2) => isCm() ? v2 / IN2CM : v2;\n  var fromIn = (v2) => isCm() ? v2 * IN2CM : v2;\n  var roundStep = (v2, step) => Math.round(v2 / step) * step;\n  var fmtNum = (v2) => {\n    const dp = isCm() ? 10 : 100;\n    return String(Math.round(v2 * dp) / dp);\n  };\n  var US_PRESETS_IN = [\n    [2, 2, \"Tag Print / Neck Label\"],\n    [3, 3, \"Small Tag / Sleeve Icon\"],\n    [4, 2, \"Name Label / Small Chest Text\"],\n    [4, 4, \"Left-Chest Logo\"],\n    [5, 3, \"Small Badge Logo\"],\n    [5, 5, \"Small Chest / Youth Print\"],\n    [6, 6, \"Std Left-Chest / Youth\"],\n    [7, 7, \"Small Front (Adult)\"],\n    [8, 8, \"Medium Front Print\"],\n    [9, 9, \"Large Chest / Med Front\"],\n    [9, 11, \"Vertical Front / Youth\"],\n    [10, 10, \"Standard Adult Front\"],\n    [11, 5, \"Chest Banner / Sleeve\"],\n    [11, 11, \"Adult Full Front\"],\n    [11, 14, \"Tall Front / Jersey\"],\n    [12, 17, \"Oversized Front / Hoodie\"],\n    [22, 22, \"Max board\"]\n  ];\n  var US_BOARD_IN = { presets: US_PRESETS_IN, min: 1, max: 22, step: 0.5, defaultW: 22, defaultH: 22 };\n  function boardCfg() {\n    if (cfg.board) return cfg.board;\n    if (!isCm()) return US_BOARD_IN;\n    const cm = (v2) => roundStep(v2 * IN2CM, 0.5);\n    return {\n      presets: US_PRESETS_IN.map(([w2, h2, use]) => [cm(w2), cm(h2), use]),\n      min: cm(US_BOARD_IN.min),\n      max: cm(US_BOARD_IN.max),\n      step: 0.5,\n      defaultW: cm(US_BOARD_IN.defaultW),\n      defaultH: cm(US_BOARD_IN.defaultH)\n    };\n  }\n  var gridRange = () => isCm() ? { min: 0.5, max: 5, step: 0.5, def: 1 } : { min: 0.125, max: 2, step: 0.125, def: 0.25 };\n  var rulerSteps = () => isCm() ? [1, 2, 5, 10, 20, 50] : [1, 2, 5, 10, 20];\n\n  // src/icons.js\n  var s2 = (inner, vb = \"0 0 21 21\", w2 = 19) => '<svg width=\"' + w2 + '\" height=\"' + w2 + '\" viewBox=\"' + vb + '\" fill=\"none\">' + inner + \"</svg>\";\n  var icons = {\n    // Rail (sidebar) glyph set \u2014 Owen's 9-21 filled 72\u00D772 SVGs (\"can we try these icons for the side bar\"), fill:\n    // currentColor so the rail's color/active state applies; used ONLY by the rail tool list in ui.js \u2014 the same tools'\n    // other surfaces (Add text button, upload CTA, Effects) keep the stroke icons below.\n    rail: {\n      text: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M61.06,5.84H10.94c-1.53,0-2.76,1.24-2.76,2.76v9.87c0,1.53,1.24,2.76,2.76,2.76h2.71c1.53,0,2.76-1.24,2.76-2.76v-2.82c0-.51.41-.92.92-.92h13.3c.51,0,.92.41.92.92v42.2c0,.51-.41.92-.92.92h-2.45c-1.53,0-2.76,1.24-2.76,2.76v1.85c0,1.53,1.24,2.76,2.76,2.76h15.64c1.53,0,2.76-1.24,2.76-2.76v-1.85c0-1.53-1.24-2.76-2.76-2.76h-2.45c-.51,0-.92-.41-.92-.92V15.66c0-.51.41-.92.92-.92h13.3c.51,0,.92.41.92.92v2.82c0,1.53,1.24,2.76,2.76,2.76h2.71c1.53,0,2.76-1.24,2.76-2.76v-9.87c0-1.53-1.24-2.76-2.76-2.76Z\"/></svg>',\n      uploads: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M45.59,13.45l3.8-3.8v21.03c0,1.48,1.2,2.68,2.68,2.68s2.68-1.2,2.68-2.68V9.66l3.8,3.8c.44.44,1.02.66,1.6.66s1.16-.22,1.6-.66c.88-.88.88-2.31,0-3.19l-8.07-8.07c-.88-.88-2.31-.88-3.19,0l-8.07,8.07c-.88.88-.88,2.31,0,3.19.88.88,2.31.88,3.19,0Z\"/><path d=\"M59.73,39.26h-14.53c-2.13,0-3.86-1.73-3.86-3.86v-10.62c0-1.28-1.04-2.31-2.31-2.31h-21.71c-4.26,0-7.71,3.45-7.71,7.71v32.57c0,4.26,3.45,7.71,7.71,7.71h37.01c4.26,0,7.71-3.45,7.71-7.71v-21.18c0-1.28-1.04-2.31-2.31-2.31ZM53.93,63.81H17.73c-.64,0-1-.74-.61-1.25l12.03-15.31c.31-.39.9-.39,1.21,0l9.21,11.73c.31.39.9.39,1.21,0l4.86-6.18c.31-.39.9-.39,1.21,0l7.67,9.77c.4.51.04,1.25-.61,1.25Z\"/></svg>',\n      ai: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M58.19,40.33l-18.67-6.91c-.32-.12-.61-.31-.85-.55-.24-.24-.43-.53-.55-.85l-6.91-18.67c-.13-.34-.43-.52-.74-.52s-.61.17-.74.52l-6.91,18.67c-.12.32-.31.61-.55.85-.24.24-.53.43-.85.55l-18.67,6.91c-.17.06-.3.17-.39.3s-.13.28-.13.44c0,.31.17.61.52.74l18.67,6.91c.65.24,1.16.75,1.4,1.4l6.91,18.67c.13.34.43.52.74.52s.61-.17.74-.52l6.91-18.67c.24-.65.75-1.16,1.4-1.4l18.67-6.91c.34-.13.52-.43.52-.74,0-.15-.04-.31-.13-.44s-.21-.24-.39-.3Z\"/><path d=\"M69.5,15.62l-8.77-3.25c-.3-.11-.54-.35-.66-.66l-3.25-8.77c-.06-.16-.2-.24-.35-.24s-.29.08-.35.24l-3.25,8.77c-.11.3-.35.54-.66.66l-8.77,3.25c-.16.06-.24.2-.24.35,0,.14.08.29.24.35l8.77,3.25c.15.06.29.14.4.26.11.11.2.25.26.4l3.25,8.77c.06.16.2.24.35.24s.29-.08.35-.24l3.25-8.77c.06-.15.14-.29.26-.4s.25-.2.4-.26l8.77-3.25c.16-.06.24-.2.24-.35,0-.14-.08-.29-.24-.35Z\"/></svg>',\n      elements: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M37.64,42.13c-.84-1.45-2.94-1.45-3.78,0l-13.13,22.75c-.84,1.45.21,3.27,1.89,3.27h26.27c1.68,0,2.73-1.82,1.89-3.27l-13.13-22.75Z\"/><rect x=\"42.83\" y=\"4.65\" width=\"25.47\" height=\"25.47\" rx=\"2.18\" ry=\"2.18\"/><circle cx=\"16.73\" cy=\"17.38\" r=\"13.53\"/></svg>',\n      layers: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7.06,27.15l26.83,14.29h0c.66.35,1.39.53,2.12.53s1.45-.18,2.12-.53l26.83-14.29c1.02-.54,1.65-1.6,1.65-2.75s-.63-2.2-1.65-2.75l-26.82-14.29c-1.33-.71-2.91-.71-4.24,0L7.06,21.66c-1.02.54-1.65,1.6-1.65,2.75s.63,2.2,1.65,2.75Z\"/><path d=\"M63.01,33.83l-26.01,14.29c-.63.34-1.38.34-2.01,0l-26.01-14.29c-1.61-.89-3.58.28-3.58,2.12h0c0,.88.48,1.69,1.25,2.12l27.17,14.93c.68.37,1.42.56,2.17.56s1.49-.19,2.17-.56l27.17-14.93c.77-.42,1.25-1.24,1.25-2.12,0-1.84-1.97-3-3.58-2.12Z\"/><path d=\"M63.01,45.43l-26.01,14.29c-.63.34-1.38.34-2.01,0l-26.01-14.29c-1.61-.89-3.58.28-3.58,2.12h0c0,.88.48,1.69,1.25,2.12l27.17,14.93c.68.37,1.42.56,2.17.56s1.49-.19,2.17-.56l27.17-14.93c.77-.42,1.25-1.24,1.25-2.12,0-1.84-1.97-3-3.58-2.12Z\"/></svg>',\n      designs: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M65.14,17.4h-29.3l-7.43-8.24c-.41-.46-1-.72-1.62-.72H6.86c-1.2,0-2.18.98-2.18,2.18v50.75c0,1.2.98,2.18,2.18,2.18h58.29c1.2,0,2.18-.98,2.18-2.18V19.58c0-1.2-.98-2.18-2.18-2.18ZM47.68,39.02c-1.84,5.36-11.59,13.35-11.68,13.43h0s0,0,0,0c0,0,0,0,0,0h0c-.09-.08-9.84-8.08-11.68-13.43h0c-.34-.82-.54-1.71-.54-2.66,0-3.71,2.93-6.71,6.55-6.71,2.44,0,4.54,1.38,5.67,3.4,1.13-2.02,3.23-3.4,5.67-3.4,3.62,0,6.55,3,6.55,6.71,0,.95-.19,1.84-.54,2.66h0Z\"/></svg>',\n      premade: '<svg width=\"22\" height=\"22\" viewBox=\"0 0 72 72\" fill=\"currentColor\" aria-hidden=\"true\"><rect x=\"7.51\" y=\"9.12\" width=\"24.26\" height=\"24.26\" rx=\"2.32\" ry=\"2.32\"/><rect x=\"39.73\" y=\"9.12\" width=\"24.26\" height=\"24.26\" rx=\"2.32\" ry=\"2.32\"/><rect x=\"7.51\" y=\"41.35\" width=\"24.26\" height=\"24.26\" rx=\"2.32\" ry=\"2.32\"/><rect x=\"39.73\" y=\"41.35\" width=\"24.26\" height=\"24.26\" rx=\"2.32\" ry=\"2.32\"/></svg>'\n    },\n    lock: s2('<rect x=\"5\" y=\"9.5\" width=\"11\" height=\"8\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.7\"/><path d=\"M7.5 9.5V7a3 3 0 0 1 6 0v2.5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/>'),\n    unlock: s2('<rect x=\"5\" y=\"9.5\" width=\"11\" height=\"8\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.7\"/><path d=\"M7.5 9.5V7a3 3 0 0 1 5.7-1.2\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/>'),\n    // Group-align set: a fixed edge/center line + two bars snapping to it\n    alignL: s2('<path d=\"M4 3.5v14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"6.5\" y=\"5.5\" width=\"8\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"6.5\" y=\"12\" width=\"11\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    alignCH: s2('<path d=\"M10.5 3.5v14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"6\" y=\"5.5\" width=\"9\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"4.5\" y=\"12\" width=\"12\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    alignR: s2('<path d=\"M17 3.5v14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"6.5\" y=\"5.5\" width=\"8\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"3.5\" y=\"12\" width=\"11\" height=\"3.6\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    alignT: s2('<path d=\"M3.5 4h14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"5.5\" y=\"6.5\" width=\"3.6\" height=\"8\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"12\" y=\"6.5\" width=\"3.6\" height=\"11\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    alignM: s2('<path d=\"M3.5 10.5h14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"5.5\" y=\"6\" width=\"3.6\" height=\"9\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"12\" y=\"4.5\" width=\"3.6\" height=\"12\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    alignB: s2('<path d=\"M3.5 17h14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"5.5\" y=\"6.5\" width=\"3.6\" height=\"8\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"12\" y=\"3.5\" width=\"3.6\" height=\"11\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    distH: s2('<rect x=\"3\" y=\"5\" width=\"3.4\" height=\"11\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"8.8\" y=\"5\" width=\"3.4\" height=\"11\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"14.6\" y=\"5\" width=\"3.4\" height=\"11\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    distV: s2('<rect x=\"5\" y=\"3\" width=\"11\" height=\"3.4\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"5\" y=\"8.8\" width=\"11\" height=\"3.4\" rx=\"1.1\" fill=\"currentColor\"/><rect x=\"5\" y=\"14.6\" width=\"11\" height=\"3.4\" rx=\"1.1\" fill=\"currentColor\"/>'),\n    layers: s2('<path d=\"M10.5 3 17.5 7l-7 4-7-4 7-4z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><path d=\"M3.5 10.8l7 4 7-4M3.5 14.4l7 4 7-4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'),\n    grip: s2('<g fill=\"currentColor\"><circle cx=\"7.5\" cy=\"5\" r=\"1.5\"/><circle cx=\"13.5\" cy=\"5\" r=\"1.5\"/><circle cx=\"7.5\" cy=\"10.5\" r=\"1.5\"/><circle cx=\"13.5\" cy=\"10.5\" r=\"1.5\"/><circle cx=\"7.5\" cy=\"16\" r=\"1.5\"/><circle cx=\"13.5\" cy=\"16\" r=\"1.5\"/></g>'),\n    home: s2('<path d=\"M3.5 9.6 10.5 3.5l7 6.1M5.5 8.5v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-8M8.5 17.5v-4.5h4v4.5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'),\n    // Selection rotate knob (DOM glass button under the box \u2014 Owen 9-21); geometry mirrors the old canvas glyph\n    rotate: s2('<path d=\"M3.05 7.47A7.4 7.4 0 0 1 16.06 5.76 M16.95 12.53A7.4 7.4 0 0 1 3.94 14.24\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" fill=\"none\"/><path d=\"M19.04 10.02L18.85 3.81L13.28 7.71Z M0.96 9.98L1.15 16.19L6.72 12.29Z\" fill=\"currentColor\"/>', \"0 0 20 20\", 18),\n    // Grid / rulers (canvas view options)\n    grid: s2('<path d=\"M4 4h13v13H4z M8.3 4v13 M12.7 4v13 M4 8.3h13 M4 12.7h13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>'),\n    ruler: s2('<rect x=\"3\" y=\"8\" width=\"15\" height=\"5.5\" rx=\"1.2\" transform=\"rotate(-25 10.5 10.75)\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M7 11.9l1-2.1M10 10.5l1-2.1M13 9.1l1-2.1\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" transform=\"rotate(0)\"/>'),\n    // Floppy (quick save)\n    save: s2('<path d=\"M5 3.5h8.2L16.5 6.8V16a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 16V5A1.5 1.5 0 0 1 5 3.5z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><path d=\"M7 3.8v3.4h5.4V3.8\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><rect x=\"6.6\" y=\"10.6\" width=\"6.8\" height=\"6.6\" rx=\"0.8\" fill=\"currentColor\"/>'),\n    // Adjustments: three slider tracks with staggered knobs (Owen 9-07 screenshot)\n    sliders: s2('<path d=\"M3.5 5.5h6.5M14.6 5.5h2.9M3.5 10.5h1.9M9.6 10.5h7.9M3.5 15.5h5.2M13.3 15.5h4.2\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/><rect x=\"10.6\" y=\"3.7\" width=\"3.4\" height=\"3.6\" rx=\"1\" fill=\"currentColor\"/><rect x=\"5.9\" y=\"8.7\" width=\"3.4\" height=\"3.6\" rx=\"1\" fill=\"currentColor\"/><rect x=\"9.3\" y=\"13.7\" width=\"3.4\" height=\"3.6\" rx=\"1\" fill=\"currentColor\"/>'),\n    text: s2('<path d=\"M4 6V4h13v2M10.5 4v13M8 17h5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'),\n    uploads: s2('<path d=\"M10.5 13V3.5M6.8 7.2l3.7-3.7 3.7 3.7M4 14.5v2a1.5 1.5 0 0 0 1.5 1.5h10a1.5 1.5 0 0 0 1.5-1.5v-2\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'),\n    ai: s2('<path d=\"M10.5 3l1.7 4.6L17 9.5l-4.8 1.9-1.7 4.6-1.7-4.6L4 9.5l4.8-1.9L10.5 3z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/>'),\n    elements: s2('<rect x=\"3.5\" y=\"3.5\" width=\"9\" height=\"9\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.6\"/><circle cx=\"13.5\" cy=\"13.5\" r=\"4\" stroke=\"currentColor\" stroke-width=\"1.6\"/>'),\n    designs: s2('<circle cx=\"10.5\" cy=\"10.5\" r=\"7\" stroke=\"currentColor\" stroke-width=\"1.6\"/><path d=\"M10.5 6.5v4l2.8 1.7\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'),\n    // Pre-Made Designs: library spines + tilted book (same motif as the PDP's ndl tab)\n    premade: s2('<rect x=\"3.2\" y=\"3.2\" width=\"3.7\" height=\"14.6\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"/><rect x=\"8.5\" y=\"3.2\" width=\"3.7\" height=\"14.6\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M13.9 4.5l3.4.9-3.5 12.8-3.4-.9z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>'),\n    layers: s2('<path d=\"M8 2l6 3.2L8 8.4 2 5.2 8 2z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M2 8.2l6 3.2 6-3.2M2 11.2l6 3.2 6-3.2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 16 16\", 16),\n    undo: s2('<path d=\"M6.5 4L3 7.5 6.5 11\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3 7.5h7.5a4 4 0 0 1 0 8H8\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 18 18\", 17),\n    redo: s2('<path d=\"M11.5 4L15 7.5 11.5 11\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M15 7.5H7.5a4 4 0 0 0 0 8H10\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 18 18\", 17),\n    arrow: s2('<path d=\"M3 7.5h9M8.5 4l3.5 3.5L8.5 11\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 15 15\", 14),\n    chevronDown: s2('<path d=\"M2.5 4l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 11 11\", 11),\n    alignLeft: s2('<path d=\"M2.5 4h12M2.5 8.5h8M2.5 13h12\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 17 17\", 16),\n    alignCenter: s2('<path d=\"M2.5 4h12M4.5 8.5h8M2.5 13h12\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 17 17\", 16),\n    alignRight: s2('<path d=\"M2.5 4h12M6.5 8.5h8M2.5 13h12\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 17 17\", 16),\n    trash: s2('<path d=\"M3 4.5h11M6 4.5V3h5v1.5M4.5 4.5l.7 9a1.5 1.5 0 0 0 1.5 1.4h3.6a1.5 1.5 0 0 0 1.5-1.4l.7-9\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 17 17\", 16),\n    expand: s2('<path d=\"M9 2h4v4M13 2L8.5 6.5M6 13H2V9M2 13l4.5-4.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 15 15\", 14),\n    search: s2('<circle cx=\"6\" cy=\"6\" r=\"4.2\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M9.2 9.2L12.5 12.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>', \"0 0 14 14\", 13),\n    check: s2('<path d=\"M3 8.5l3.4 3.4L13 5.3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 16 16\", 15),\n    close: s2('<path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 16 16\", 15),\n    phone: s2('<rect x=\"5.5\" y=\"2\" width=\"10\" height=\"17\" rx=\"2.2\" stroke=\"currentColor\" stroke-width=\"1.6\"/><path d=\"M9 16.2h3\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 21 21\", 18),\n    arrowLeft: s2('<path d=\"M13.5 8H2.5M7 3.5L2.5 8 7 12.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 16 16\", 16),\n    arrowDown: s2('<path d=\"M8 2.5v11M3.8 9.3L8 13.5l4.2-4.2\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 16 16\", 16),\n    arrowUp: s2('<path d=\"M8 13.5v-11M3.8 6.7L8 2.5l4.2 4.2\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 16 16\", 16),\n    dots: s2('<circle cx=\"3.5\" cy=\"8\" r=\"1.4\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.4\" fill=\"currentColor\"/><circle cx=\"12.5\" cy=\"8\" r=\"1.4\" fill=\"currentColor\"/>', \"0 0 16 16\", 16),\n    copy: s2('<rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M3 10.5V3.9C3 3.4 3.4 3 3.9 3h6.6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>', \"0 0 16 16\", 16),\n    duplicate: s2('<rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M3 10.5V3.9C3 3.4 3.4 3 3.9 3h6.6M9.5 8v3M8 9.5h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>', \"0 0 16 16\", 16),\n    clipboard: s2('<rect x=\"3.5\" y=\"3\" width=\"9\" height=\"11\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M6 3.2V2h4v1.2M6 7h4M6 10h4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>', \"0 0 16 16\", 16),\n    chevronRight: s2('<path d=\"M4 2.5l3 3-3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 11 11\", 11),\n    alignPage: s2('<path d=\"M3 2.5v11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/><rect x=\"5.5\" y=\"4\" width=\"7.5\" height=\"2.6\" rx=\"1\" fill=\"currentColor\"/><rect x=\"5.5\" y=\"9\" width=\"4.5\" height=\"2.6\" rx=\"1\" fill=\"currentColor\"/>', \"0 0 16 16\", 16),\n    // Material Symbols \"colorize\" (Owen-supplied), recolored via currentColor.\n    dropper: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"M120-120v-190l358-358-58-56 58-56 76 76 124-124q5-5 12.5-8t15.5-3q8 0 15 3t13 8l94 94q5 6 8 13t3 15q0 8-3 15.5t-8 12.5L705-555l76 78-57 57-56-58-358 358H120Zm80-80h78l332-334-76-76-334 332v78Z\"/></svg>',\n    dotsV: s2('<circle cx=\"8\" cy=\"3\" r=\"1.4\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.4\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"13\" r=\"1.4\" fill=\"currentColor\"/>', \"0 0 16 16\", 16),\n    // Group: two overlapping frames; ungroup: the frames pulled apart\n    group: s2('<rect x=\"2.5\" y=\"2.5\" width=\"10.5\" height=\"10.5\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.6\"/><path d=\"M15 8h1.5A2 2 0 0 1 18.5 10v6.5a2 2 0 0 1-2 2H10a2 2 0 0 1-2-2V15\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 21 21\", 16),\n    ungroup: s2('<rect x=\"2.5\" y=\"2.5\" width=\"7.5\" height=\"7.5\" rx=\"1.8\" stroke=\"currentColor\" stroke-width=\"1.6\"/><rect x=\"11\" y=\"11\" width=\"7.5\" height=\"7.5\" rx=\"1.8\" stroke=\"currentColor\" stroke-width=\"1.6\"/>', \"0 0 21 21\", 16),\n    // Flip: solid shape + dashed mirror axis + outlined mirror image\n    flipH: s2('<path d=\"M10.5 2.5v16\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-dasharray=\"0.2 3\" /><path d=\"M7.5 6L3 10.5L7.5 15z\" fill=\"currentColor\"/><path d=\"M13.5 6L18 10.5L13.5 15z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>', \"0 0 21 21\", 16),\n    flipV: s2('<path d=\"M2.5 10.5h16\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-dasharray=\"0.2 3\"/><path d=\"M6 7.5L10.5 3L15 7.5z\" fill=\"currentColor\"/><path d=\"M6 13.5L10.5 18L15 13.5z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>', \"0 0 21 21\", 16),\n    plus: s2('<path d=\"M8 3v10M3 8h10\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"/>', \"0 0 16 16\", 14),\n    bullets: s2('<circle cx=\"2.4\" cy=\"3.7\" r=\"1.2\" fill=\"currentColor\"/><circle cx=\"2.4\" cy=\"8.5\" r=\"1.2\" fill=\"currentColor\"/><circle cx=\"2.4\" cy=\"13.3\" r=\"1.2\" fill=\"currentColor\"/><path d=\"M6 3.7h8.5M6 8.5h8.5M6 13.3h8.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>', \"0 0 17 17\", 16),\n    spacing: s2('<path d=\"M4.5 3h8M8.5 3v6.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/><path d=\"M2.5 13.5h12M4.6 11.4l-2.1 2.1 2.1 2.1M12.4 11.4l2.1 2.1-2.1 2.1\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>', \"0 0 17 17\", 17),\n    // Google Drive triangle \u2014 brand-colored fills (approximation of the official mark)\n    drive: '<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M8.7 2.5L0.9 16l3.9 6.8L12.6 9.3 8.7 2.5z\" fill=\"#0F9D58\"/><path d=\"M8.7 2.5h7.8L24.3 16h-7.8L8.7 2.5z\" fill=\"#4285F4\"/><path d=\"M4.8 22.8h15.6l3.9-6.8H8.7l-3.9 6.8z\" fill=\"#FBBC04\"/></svg>'\n  };\n\n  // src/micons.js\n  var M2 = (path, size = 22) => '<svg width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 -960 960 960\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"' + path + '\"/></svg>';\n  var micons = {\n    layers: M2(\"M480-160 200-380l66-50 214 168 214-168 66 50-280 220Zm0-206L200-586l280-220 280 220-280 220Z\"),\n    more: M2(\"M240-400q-33 0-56.5-23.5T160-480q0-33 23.5-56.5T240-560q33 0 56.5 23.5T320-480q0 33-23.5 56.5T240-400Zm240 0q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm240 0q-33 0-56.5-23.5T640-480q0-33 23.5-56.5T720-560q33 0 56.5 23.5T800-480q0 33-23.5 56.5T720-400Z\"),\n    close: M2(\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"),\n    check: M2(\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"),\n    canvas: M2(\"M600-320h140q17 0 28.5-11.5T780-360v-100h-60v100H600v60ZM220-520h60v-100h140v-60H240q-17 0-28.5 11.5T200-640v120ZM160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm0-80h640v-480H160v480Z\"),\n    add: M2(\"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"),\n    expand: M2(\"M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z\"),\n    // extras the mobile trays/stripe may want, kept here so all new icons match:\n    // opacity (water-drop half-fill) \u2014 shape/line transparency chips\n    opacity: M2(\"M480-120q-133 0-226.5-92T160-436q0-66 25-122t69-100l226-222 226 222q44 44 69 100t25 122q0 132-93.5 224T480-120Zm0-80q100 0 170-68.5T720-436q0-27-6-52t-18-47L480-360 264-535q-12 22-18 47t-6 52q0 99 70 167.5T480-200Z\"),\n    // horizontal rule \u2014 border style chips\n    hrule: M2(\"M160-440v-80h640v80H160Z\"),\n    // pen-size-ish diagonal \u2014 line style chip\n    lineStyle: M2(\"m216-160-56-56 464-464-88-88 56-56 88 88 56-56 56 56-56 56 88 88-56 56-88-88-464 464Z\"),\n    // arrow range \u2014 line end-caps chip\n    arrowRange: M2(\"M280-280 80-480l200-200 56 57-103 103h494L624-623l56-57 200 200-200 200-56-57 103-103H233l103 103-56 57Z\"),\n    crop: M2(\"M680-40v-160H280q-33 0-56.5-23.5T200-280v-400H40v-80h160v-160h80v640h640v80H760v160h-80Zm0-320v-320H360v-80h320q33 0 56.5 23.5T760-680v320h-80Z\"),\n    tune: M2(\"M440-120v-240h80v80h320v80H520v80h-80Zm-320-80v-80h240v80H120Zm160-160v-80H120v-80h160v-80h80v240h-80Zm160-80v-80h400v80H440Zm160-160v-240h80v80h160v80H680v80h-80Zm-480-80v-80h400v80H120Z\"),\n    eraser: M2(\"M690-240h190v80H610l80-80Zm-500 80-85-85q-23-23-23.5-57t22.5-58l440-456q23-24 56.5-24t56.5 23l199 199q23 23 23 57t-23 57L520-160H190Zm296-80 314-322-198-198-442 456 64 64h262Z\"),\n    corner: M2(\"M120-120v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80ZM120-280v-80h80v80h-80Zm640 0v-160q0-50-35-85t-85-35H480v-80h160q83 0 141.5 58.5T840-440v160h-80ZM120-440v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80Z\"),\n    restore: M2(\"M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z\"),\n    star: M2(\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Z\"),\n    ring: M2(\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Z\"),\n    filterIc: M2(\"M480-120q-75 0-140.5-28.5t-114-77q-48.5-48.5-77-114T120-480q0-75 28.5-140.5t77-114q48.5-48.5 114-77T480-840v80q-117 0-198.5 81.5T200-480q0 117 81.5 198.5T480-200q117 0 198.5-81.5T760-480h80q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm320-560-40-88-88-40 88-40 40-88 40 88 88 40-88 40-40 88Z\"),\n    pencil: M2(\"M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z\"),\n    zoom: M2(\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\"),\n    colorize: M2(\"M619-527 421-725l43-43q34-34 81.5-34t81.5 34l14 14 43-43q11-11 28-11t28 11q11 11 11 28t-11 28l-43 43 14 14q34 34 34 81.5T765-539l-43 43-103-31ZM234-80q-11 0-21-4t-18-12l-19-19q-8-8-12-18t-4-21q0-11 4-21t12-18l278-278-42-42q-11-11-11-28t11-28q11-11 28-11t28 11l248 248q11 11 11 28t-11 28q-11 11-28 11t-28-11l-42-42-278 278q-8 8-18 12t-21 4Z\"),\n    palette: M2(\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 32.5-156.5t88-128Q256-818 330-849t156-31q80 0 151 27.5t124.5 76q53.5 48.5 85 115T878-518q0 115-70 176.5T640-280h-74q-9 0-12.5 5t-3.5 11q0 12 15 34.5t15 51.5q0 50-27.5 78.5T480-80ZM240-440q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm120-160q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm240 0q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm120 160q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Z\")\n  };\n\n  // src/text-treatments.js\n  var TEXT_TREATMENTS = [\n    // Default = the plain Add text look (Poppins 700, ink flips on dark boards),\n    // first in the gallery (Owen 11-02); the rest keep their order behind it.\n    {\n      key: \"default\",\n      label: \"Default\",\n      text: \"Your Text\",\n      family: \"Poppins\",\n      weight: 700,\n      fontSize: 120,\n      fill: \"#0f172a\",\n      dark: { fill: \"#ffffff\" }\n    },\n    {\n      key: \"varsity\",\n      label: \"Varsity\",\n      text: \"CHAMPS\",\n      family: \"Anton\",\n      weight: 400,\n      fontSize: 130,\n      charSpacing: 40,\n      fill: \"#1e40af\",\n      effect: { kind: \"outline\", color: \"#fbbf24\", size: 6 },\n      shape: { kind: \"arcup\", amount: 55 }\n    },\n    {\n      key: \"game-day\",\n      label: \"Game Day\",\n      text: \"GAME\",\n      family: \"Anton\",\n      weight: 400,\n      fontSize: 150,\n      fill: \"#0f172a\",\n      dark: { fill: \"#ffffff\" },\n      sub: {\n        text: \"day\",\n        family: \"Pacifico\",\n        weight: 400,\n        fontSize: 115,\n        fill: \"#ef4444\",\n        dy: 60,\n        effect: { kind: \"outline\", color: \"#ffffff\", size: 4 }\n      }\n    },\n    {\n      key: \"retro-drop\",\n      label: \"Retro Drop\",\n      text: \"RETRO\",\n      family: \"Bungee\",\n      weight: 400,\n      fontSize: 115,\n      fill: \"#f97316\",\n      effect: { kind: \"drop\", color: \"#7c2d12\" },\n      fx: { direction: 135, offset: 60 }\n    },\n    {\n      key: \"sticker-pop\",\n      label: \"Sticker Pop\",\n      text: \"POP!\",\n      family: \"Baloo 2\",\n      weight: 800,\n      fontSize: 140,\n      fill: \"#ec4899\",\n      effect: { kind: \"outline\", color: \"#ffffff\", size: 8 },\n      tileBg: \"#dbeafe\"\n    },\n    {\n      key: \"sunset-script\",\n      label: \"Sunset Script\",\n      text: \"Sunset\",\n      family: \"Kaushan Script\",\n      weight: 400,\n      fontSize: 135,\n      gradient: { a: \"#f59e0b\", b: \"#ef4444\", angle: 0 }\n    },\n    {\n      key: \"hollow\",\n      label: \"Hollow\",\n      text: \"HOLLOW\",\n      family: \"Anton\",\n      weight: 400,\n      fontSize: 120,\n      charSpacing: 30,\n      fill: \"#0f172a\",\n      effect: { kind: \"hollow\", color: \"#0f172a\", size: 45 },\n      dark: { effect: { kind: \"hollow\", color: \"#ffffff\", size: 45 } }\n    },\n    {\n      key: \"echo\",\n      label: \"Echo\",\n      text: \"ECHO\",\n      family: \"Poppins\",\n      weight: 900,\n      fontSize: 125,\n      fill: \"#0ea5e9\",\n      effect: { kind: \"echo\", color: \"#94a3b8\" },\n      fx: { direction: 0, offset: 60, echo2: \"#cbd5e1\" }\n    },\n    {\n      key: \"badge-plate\",\n      label: \"Badge Plate\",\n      text: \"EST \\u2022 2026\",\n      family: \"Oswald\",\n      weight: 600,\n      fontSize: 95,\n      charSpacing: 150,\n      fill: \"#ffffff\",\n      effect: { kind: \"background\", color: \"#0f172a\" },\n      fx: { round: 70, spread: 55 },\n      dark: { fill: \"#0f172a\", effect: { kind: \"background\", color: \"#ffffff\" } }\n    },\n    {\n      key: \"wave\",\n      label: \"Wave\",\n      text: \"make waves\",\n      family: \"Fredoka\",\n      weight: 600,\n      fontSize: 105,\n      fill: \"#06b6d4\",\n      shape: { kind: \"wave\", amount: 65 }\n    },\n    {\n      key: \"signature\",\n      label: \"Signature\",\n      text: \"Forever yours\",\n      family: \"Great Vibes\",\n      weight: 400,\n      fontSize: 145,\n      fill: \"#111827\",\n      dark: { fill: \"#ffffff\" }\n    },\n    {\n      key: \"splice\",\n      label: \"Splice\",\n      text: \"SLICE\",\n      family: \"Anton\",\n      weight: 400,\n      fontSize: 130,\n      fill: \"#0f172a\",\n      effect: { kind: \"splice\", color: \"#f43f5e\" },\n      fx: { direction: 45, offset: 55 },\n      dark: { fill: \"#ffffff\" }\n    },\n    {\n      key: \"steel\",\n      label: \"Steel\",\n      text: \"TITAN\",\n      family: \"Orbitron\",\n      weight: 800,\n      fontSize: 110,\n      charSpacing: 60,\n      gradient: { a: \"#94a3b8\", b: \"#e2e8f0\", angle: 90 },\n      effect: { kind: \"drop\", color: \"#0f172a\" },\n      fx: { direction: 90, offset: 30 }\n    },\n    {\n      key: \"comic-blast\",\n      label: \"Comic Blast\",\n      text: \"BAM!\",\n      family: \"Bangers\",\n      weight: 400,\n      fontSize: 145,\n      charSpacing: 60,\n      fill: \"#facc15\",\n      effect: { kind: \"outline\", color: \"#0f172a\", size: 6 },\n      shape: { kind: \"bulge\", amount: 45 }\n    },\n    {\n      key: \"stamp\",\n      label: \"Stamp\",\n      text: \"AUTHENTIC\",\n      family: \"Special Elite\",\n      weight: 400,\n      fontSize: 90,\n      charSpacing: 180,\n      fill: \"#7c2d12\"\n    },\n    {\n      key: \"tall-stack\",\n      label: \"Tall Stack\",\n      text: \"STAY\\nHUNGRY\",\n      family: \"Barlow Condensed\",\n      weight: 800,\n      fontSize: 120,\n      lineHeight: 0.92,\n      charSpacing: 60,\n      fill: \"#0f172a\",\n      dark: { fill: \"#ffffff\" }\n    },\n    {\n      key: \"western\",\n      label: \"Western\",\n      text: \"RODEO\",\n      family: \"Rye\",\n      weight: 400,\n      fontSize: 110,\n      fill: \"#92400e\",\n      effect: { kind: \"drop\", color: \"#fbbf24\" },\n      fx: { direction: 90, offset: 45 }\n    },\n    {\n      key: \"arcade\",\n      label: \"Arcade\",\n      text: \"PLAYER 1\",\n      family: \"Press Start 2P\",\n      weight: 400,\n      fontSize: 75,\n      fill: \"#22c55e\",\n      effect: { kind: \"drop\", color: \"#0f172a\" },\n      fx: { direction: 90, offset: 40 }\n    },\n    {\n      key: \"kawaii\",\n      label: \"Kawaii\",\n      text: \"cutie\",\n      family: \"Chewy\",\n      weight: 400,\n      fontSize: 140,\n      fill: \"#f472b6\",\n      effect: { kind: \"outline\", color: \"#ffffff\", size: 7 },\n      tileBg: \"#fce7f3\"\n    },\n    {\n      key: \"speed\",\n      label: \"Speed\",\n      text: \"FAST\",\n      italic: true,\n      family: \"Exo 2\",\n      weight: 900,\n      fontSize: 130,\n      fill: \"#0f172a\",\n      effect: { kind: \"echo\", color: \"#94a3b8\" },\n      fx: { direction: 180, offset: 55, echo2: \"#cbd5e1\" },\n      dark: { fill: \"#ffffff\" }\n    },\n    {\n      key: \"groovy\",\n      label: \"Groovy\",\n      text: \"groovy\",\n      family: \"Boogaloo\",\n      weight: 400,\n      fontSize: 135,\n      fill: \"#a855f7\",\n      shape: { kind: \"arclo\", amount: 55 }\n    },\n    {\n      key: \"slant\",\n      label: \"Slant\",\n      text: \"VICTORY\",\n      family: \"Teko\",\n      weight: 600,\n      fontSize: 130,\n      charSpacing: 80,\n      fill: \"#dc2626\",\n      shape: { kind: \"angle\", amount: 35 }\n    },\n    {\n      key: \"ring-badge\",\n      label: \"Badge Arc\",\n      text: \"ORIGINAL\",\n      family: \"Oswald\",\n      weight: 600,\n      fontSize: 105,\n      charSpacing: 250,\n      fill: \"#0f766e\",\n      shape: { kind: \"curve\", amount: 55 }\n    },\n    {\n      key: \"athletic-club\",\n      label: \"Athletic Club\",\n      text: \"NINJA\",\n      family: \"Anton\",\n      weight: 400,\n      fontSize: 135,\n      charSpacing: 60,\n      fill: \"#0f172a\",\n      shape: { kind: \"arcup\", amount: 45 },\n      dark: { fill: \"#ffffff\" },\n      sub: {\n        text: \"ATHLETIC DEPT\",\n        family: \"Oswald\",\n        weight: 500,\n        fontSize: 42,\n        charSpacing: 320,\n        fill: \"#dc2626\",\n        dy: 110\n      }\n    }\n  ];\n  function applyTreatment(editor, preset) {\n    return editor.addTreatedText(preset);\n  }\n  var thumbCache = /* @__PURE__ */ new Map();\n  function treatmentThumb(editor, preset, px = 300) {\n    let p2 = thumbCache.get(preset.key);\n    if (!p2) {\n      p2 = renderThumb(editor, preset, px);\n      thumbCache.set(preset.key, p2);\n    }\n    return p2;\n  }\n  async function renderThumb(editor, preset, px) {\n    const parts = [preset, ...preset.sub ? [preset.sub] : []];\n    for (const part of parts) {\n      await loadFont(part.family);\n      if (part.shape) {\n        try {\n          await ensureFontBinary(part.family, part.weight || 400, !!part.italic);\n        } catch (e24) {\n        }\n      }\n    }\n    const boxes = [];\n    for (const part of parts) {\n      const b2 = await editor.buildTreatedText(part);\n      b2.left = part.dx || 0;\n      b2.top = part.dy || 0;\n      b2.setCoords();\n      boxes.push(b2);\n    }\n    let l2 = Infinity, t2 = Infinity, r2 = -Infinity, btm = -Infinity;\n    for (const b2 of boxes) {\n      const bb = b2.getBoundingRect();\n      l2 = Math.min(l2, bb.left);\n      t2 = Math.min(t2, bb.top);\n      r2 = Math.max(r2, bb.left + bb.width);\n      btm = Math.max(btm, bb.top + bb.height);\n    }\n    const k2 = Math.min(px * 0.84 / Math.max(1, r2 - l2), px * 0.66 / Math.max(1, btm - t2));\n    const sc2 = new yt(void 0, {\n      width: px,\n      height: px,\n      backgroundColor: preset.tileBg || \"\",\n      renderOnAddRemove: false\n    });\n    const ucx = (l2 + r2) / 2, ucy = (t2 + btm) / 2;\n    for (const b2 of boxes) {\n      b2.scaleX = b2.scaleY = k2;\n      b2.left = px / 2 + (b2.left - ucx) * k2;\n      b2.top = px / 2 + (b2.top - ucy) * k2;\n      b2.setCoords();\n      sc2.add(b2);\n    }\n    sc2.renderAll();\n    const url = sc2.toDataURL({ format: \"png\" });\n    sc2.dispose();\n    return url;\n  }\n\n  // src/ui.js\n  var el = (tag, cls, html) => {\n    const n2 = document.createElement(tag);\n    if (cls) n2.className = tag === \"div\" ? cls + \" w3_bg\" : cls;\n    else if (tag === \"div\") n2.className = \"w3_bg\";\n    if (html != null) n2.innerHTML = html;\n    return n2;\n  };\n  function buildUI(host, opts) {\n    host.classList.add(\"nsv2-host\");\n    const root = el(\"div\", \"nsv2\");\n    const topbar = el(\"div\", \"nsv2-topbar\");\n    const topLeft = el(\"div\", \"nsv2-top-left\");\n    const homeBtn = el(\n      \"button\",\n      \"nsv2-home-btn\",\n      '<svg width=\"14\" height=\"14\" viewBox=\"0 0 15 15\" fill=\"none\"><path d=\"M9.5 2.5 4.5 7.5l5 5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg><span class=\"nsv2-home-lab\">Exit</span>'\n    );\n    homeBtn.type = \"button\";\n    homeBtn.title = \"Exit the studio (back to where you came from)\";\n    const canvasSizeWrap = el(\"div\", \"nsv2-canvas-size\");\n    const boardC = boardCfg();\n    const unit = unitLabel();\n    const mkSizeInput = (label) => {\n      const i2 = document.createElement(\"input\");\n      i2.type = \"number\";\n      i2.className = \"nsv2-size-in\";\n      i2.min = String(boardC.min);\n      i2.max = String(boardC.max);\n      i2.step = String(boardC.step);\n      i2.setAttribute(\"aria-label\", \"Canvas \" + label + \" (\" + unitWord() + \")\");\n      return i2;\n    };\n    const sizeW = mkSizeInput(\"width\");\n    const sizeH = mkSizeInput(\"height\");\n    const sizeSel = document.createElement(\"select\");\n    sizeSel.className = \"nsv2-select nsv2-canvas-sel\";\n    sizeSel.setAttribute(\"aria-label\", \"Canvas size\");\n    for (const [w2, h2, use] of boardC.presets) {\n      const o2 = document.createElement(\"option\");\n      o2.value = w2 + \"x\" + h2;\n      o2.textContent = w2 + \" \" + unit + \" x \" + h2 + \" \" + unit;\n      o2.title = use;\n      sizeSel.appendChild(o2);\n    }\n    const sizeCustomOpt = document.createElement(\"option\");\n    sizeCustomOpt.value = \"custom\";\n    sizeCustomOpt.textContent = \"Custom size\\u2026\";\n    sizeSel.appendChild(sizeCustomOpt);\n    const sizeCustom = el(\"div\", \"nsv2-canvas-custom\");\n    sizeCustom.hidden = true;\n    sizeCustom.append(sizeW, el(\"span\", \"nsv2-size-x\", \"\\xD7\"), sizeH, el(\"span\", \"nsv2-size-unit\", unit));\n    canvasSizeWrap.append(sizeSel, sizeCustom);\n    const bgBtn = el(\"button\", \"nsv2-ctx-color nsv2-canvas-bg\", '<span class=\"nsv2-color-disc nsv2-canvas-bg-swatch\"></span>');\n    bgBtn.type = \"button\";\n    bgBtn.title = \"Canvas color \\u2014 preview only, will not print\";\n    const bgSwatch = bgBtn.firstChild;\n    const bgColorInput = document.createElement(\"input\");\n    bgColorInput.type = \"color\";\n    bgColorInput.className = \"nsv2-bg-color-input\";\n    bgColorInput.value = \"#ffffff\";\n    bgBtn.appendChild(bgColorInput);\n    const bgClear = el(\"button\", \"nsv2-bg-clear\", icons.close);\n    bgClear.type = \"button\";\n    bgClear.title = \"Remove canvas color\";\n    bgClear.hidden = true;\n    const bgWarn = el(\"span\", \"nsv2-canvas-warn\", \"Preview only \\u2014 won\\u2019t print\");\n    bgWarn.hidden = true;\n    const bgAlert = el(\n      \"div\",\n      \"nsv2-bg-alert\",\n      '<span class=\"nsv2-bg-alert-ic\" aria-hidden=\"true\">!</span><span class=\"nsv2-bg-alert-msg\">Background color is for preview only and will not be printed.</span><button type=\"button\" class=\"nsv2-bg-alert-x\" title=\"Dismiss\">' + icons.close + \"</button>\"\n    );\n    bgAlert.hidden = true;\n    const fitAlert = el(\n      \"div\",\n      \"nsv2-bg-alert nsv2-fit-alert\",\n      '<span class=\"nsv2-bg-alert-ic\" aria-hidden=\"true\">!</span><span class=\"nsv2-bg-alert-msg\">Part of your design is off the canvas and won\\u2019t print.</span><button type=\"button\" class=\"nsv2-bg-alert-act\">Fit to canvas</button><button type=\"button\" class=\"nsv2-bg-alert-x\" title=\"Dismiss\">' + icons.close + \"</button>\"\n    );\n    fitAlert.hidden = true;\n    const fitAlertMsg = fitAlert.querySelector(\".nsv2-bg-alert-msg\");\n    const toast = el(\n      \"div\",\n      \"nsv2-bg-alert nsv2-toast\",\n      '<span class=\"nsv2-bg-alert-msg\"></span><button type=\"button\" class=\"nsv2-bg-alert-act\"></button><button type=\"button\" class=\"nsv2-bg-alert-x\" title=\"Dismiss\">' + icons.close + \"</button>\"\n    );\n    toast.hidden = true;\n    const toastMsg = toast.querySelector(\".nsv2-bg-alert-msg\");\n    const toastAct = toast.querySelector(\".nsv2-bg-alert-act\");\n    const toastX = toast.querySelector(\".nsv2-bg-alert-x\");\n    const fitAlertAct = fitAlert.querySelector(\".nsv2-bg-alert-act\");\n    const fitAlertX = fitAlert.querySelector(\".nsv2-bg-alert-x\");\n    const fileBtn = el(\"button\", \"nsv2-file-btn\", \"File\");\n    fileBtn.type = \"button\";\n    const fileMenu = el(\"div\", \"nsv2-file-menu\");\n    fileMenu.hidden = true;\n    const fileItem = (label) => {\n      const b2 = el(\"button\", \"nsv2-file-item\", label);\n      b2.type = \"button\";\n      fileMenu.appendChild(b2);\n      return b2;\n    };\n    const fileNew = fileItem(\"New Design\");\n    const fileOpen = fileItem(\"Open\");\n    const fileSave = fileItem(\"Save\");\n    const fileSaveAs = fileItem(\"Save as\");\n    const fileDup = fileItem(\"Duplicate Design\");\n    const fileOutlineMode = fileItem(\"Outline scales with object\");\n    fileOutlineMode.classList.add(\"nsv2-file-check\");\n    const fileSignIn = fileItem(\"Sign in\");\n    fileSignIn.hidden = true;\n    const fileBuild = el(\"div\", \"nsv2-file-build\", \"\");\n    fileMenu.appendChild(fileBuild);\n    const fileWrap = el(\"div\", \"nsv2-file-wrap\");\n    fileWrap.append(fileBtn, fileMenu);\n    const undoBtn = el(\"button\", \"nsv2-icon-btn\", icons.undo);\n    const redoBtn = el(\"button\", \"nsv2-icon-btn\", icons.redo);\n    undoBtn.type = redoBtn.type = \"button\";\n    undoBtn.title = \"Undo\";\n    redoBtn.title = \"Redo\";\n    topLeft.append(homeBtn, fileWrap, undoBtn, redoBtn);\n    const topRight = el(\"div\", \"nsv2-top-right\");\n    const useBtn = el(\"button\", \"nsv2-cta\", \"<span>Use Design</span>\" + icons.arrow);\n    useBtn.type = \"button\";\n    const saveBtn = el(\"button\", \"nsv2-icon-btn nsv2-save-btn\", icons.save + '<span class=\"nsv2-visually-hidden\">Save</span>');\n    saveBtn.type = \"button\";\n    saveBtn.title = \"Save to your account\";\n    const designNameInput = el(\"input\", \"nsv2-design-name\");\n    designNameInput.type = \"text\";\n    designNameInput.placeholder = \"Untitled design\";\n    designNameInput.maxLength = 60;\n    designNameInput.setAttribute(\"aria-label\", \"Design name\");\n    const savePop = el(\"div\", \"nsv2-save-pop\");\n    savePop.hidden = true;\n    const saveUpdateBtn = el(\"button\", \"nsv2-save-pop-btn nsv2-save-pop-btn--primary\");\n    saveUpdateBtn.type = \"button\";\n    const saveNewBtn = el(\"button\", \"nsv2-save-pop-btn\", \"Save as new design\");\n    saveNewBtn.type = \"button\";\n    savePop.append(saveUpdateBtn, saveNewBtn);\n    const saveWrap = el(\"div\", \"nsv2-save-wrap\");\n    saveWrap.append(saveBtn, savePop);\n    const topVdiv = el(\"div\", \"nsv2-vdiv\");\n    topRight.append(saveWrap, topVdiv, useBtn);\n    topbar.append(topLeft, designNameInput, topRight);\n    const useModal = el(\"div\", \"nsv2-use-modal\");\n    useModal.hidden = true;\n    const useCard = el(\"div\", \"nsv2-use-card\");\n    const useClose = el(\"button\", \"nsv2-icon-btn nsv2-use-close\", icons.close);\n    useClose.type = \"button\";\n    useClose.title = \"Cancel\";\n    const useTitle = el(\"div\", \"nsv2-use-title\", \"Use this design on\\u2026\");\n    const useSub = el(\"div\", \"nsv2-use-sub\", \"Pick a product \\u2014 your design comes with you.\");\n    const useGrid = el(\"div\", \"nsv2-use-grid\");\n    const useBusy = el(\"div\", \"nsv2-use-busy\", \"Preparing your design\\u2026\");\n    useBusy.hidden = true;\n    useCard.append(useClose, useTitle, useSub, useGrid, useBusy);\n    useModal.appendChild(useCard);\n    root.appendChild(useModal);\n    const rail = el(\"div\", \"nsv2-rail\");\n    const tools = [\n      // Rail glyphs = icons.rail (Owen's filled set, 9-21); fall back to the stroke icon if a tool has none.\n      { id: \"text\", label: \"Text\", icon: icons.rail.text || icons.text },\n      { id: \"uploads\", label: \"Uploads\", icon: icons.rail.uploads || icons.uploads },\n      { id: \"ai\", label: \"Create AI\", icon: icons.rail.ai || icons.ai },\n      { id: \"elements\", label: \"Elements\", icon: icons.rail.elements || icons.elements },\n      { id: \"layers\", label: \"Layers\", icon: icons.rail.layers || icons.layers },\n      { id: \"designs\", label: \"My Designs\", icon: icons.rail.designs || icons.designs },\n      { id: \"premade\", label: \"Pre-Made Designs\", icon: icons.rail.premade || icons.premade }\n    ];\n    const toolBtns = {};\n    tools.forEach((t2) => {\n      const b2 = el(\"button\", \"nsv2-tool\" + (t2.soon ? \" is-soon\" : \"\"), t2.icon + '<span class=\"nsv2-tool-label\">' + t2.label + \"</span>\");\n      b2.type = \"button\";\n      b2.dataset.tool = t2.id;\n      if (t2.soon) b2.title = \"Coming soon\";\n      rail.appendChild(b2);\n      toolBtns[t2.id] = b2;\n    });\n    const panel = el(\"div\", \"nsv2-panel\");\n    const panelClose = el(\"button\", \"nsv2-icon-btn nsv2-panel-close\", icons.close);\n    panelClose.title = \"Close\";\n    panelClose.type = \"button\";\n    const textPane = el(\"div\", \"nsv2-pane\");\n    textPane.dataset.pane = \"text\";\n    const addTextBtn = el(\"button\", \"nsv2-add-text\", icons.text + \"<span>Add text</span>\");\n    addTextBtn.type = \"button\";\n    const treatmentTiles = el(\"div\", \"nsv2-tt-tiles\");\n    for (const p2 of TEXT_TREATMENTS) {\n      const tile = el(\n        \"button\",\n        \"nsv2-fx-tile nsv2-tt-tile\",\n        '<span class=\"nsv2-fx-box\"><img class=\"nsv2-tt-thumb\" alt=\"\" draggable=\"false\" hidden></span><span class=\"nsv2-fx-label\">' + p2.label + \"</span>\"\n      );\n      tile.type = \"button\";\n      tile.dataset.tt = p2.key;\n      if (p2.tileBg) tile.querySelector(\".nsv2-fx-box\").style.background = p2.tileBg;\n      treatmentTiles.appendChild(tile);\n    }\n    textPane.append(\n      el(\"div\", \"nsv2-pane-title\", \"Text\"),\n      addTextBtn,\n      el(\"div\", \"nsv2-pane-label nsv2-tt-label\", \"Premade font styles\"),\n      treatmentTiles\n    );\n    const fontsPane = el(\"div\", \"nsv2-pane\");\n    fontsPane.dataset.pane = \"fonts\";\n    const fontsBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    fontsBackBtn.type = \"button\";\n    fontsBackBtn.title = \"Back\";\n    const fontsHead = el(\"div\", \"nsv2-pane-head\");\n    fontsHead.append(fontsBackBtn, el(\"div\", \"nsv2-pane-title\", \"Fonts\"));\n    const fontSearch = el(\"input\", \"nsv2-font-search\");\n    fontSearch.type = \"text\";\n    fontSearch.placeholder = \"Search fonts\\u2026\";\n    const fontCats = el(\"div\", \"nsv2-font-cats\");\n    const fontList = el(\"div\", \"nsv2-font-list\");\n    fontsPane.append(fontsHead, fontSearch, fontCats, fontList);\n    const colorPane = el(\"div\", \"nsv2-pane\");\n    colorPane.dataset.pane = \"color\";\n    const colorBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    colorBackBtn.type = \"button\";\n    colorBackBtn.title = \"Back\";\n    const colorTitle = el(\"div\", \"nsv2-pane-title\", \"Text color\");\n    const colorHead = el(\"div\", \"nsv2-pane-head\");\n    colorHead.append(colorBackBtn, colorTitle);\n    const colorSearch = el(\"input\", \"nsv2-font-search\");\n    colorSearch.type = \"text\";\n    colorSearch.placeholder = 'Try \"blue\" or \"#00c4cc\"';\n    const colorMain = el(\"div\", \"nsv2-color-main\");\n    const customColorInput = el(\"input\");\n    customColorInput.type = \"color\";\n    customColorInput.className = \"nsv2-color-native\";\n    customColorInput.dataset.spectrumDirect = \"1\";\n    const customColorBtn = el(\"button\", \"nsv2-swatch nsv2-swatch--custom\", icons.plus);\n    customColorBtn.type = \"button\";\n    customColorBtn.title = \"Custom color\";\n    const dropperBtn = el(\"button\", \"nsv2-swatch nsv2-swatch--tool\", icons.dropper);\n    dropperBtn.type = \"button\";\n    dropperBtn.title = \"Pick from screen\";\n    const currentSwatch = el(\"button\", \"nsv2-swatch is-active\");\n    currentSwatch.type = \"button\";\n    currentSwatch.title = \"Current color\";\n    const colorToolsRow = el(\"div\", \"nsv2-color-row\");\n    const colorNoFill = el(\"button\", \"nsv2-swatch nsv2-swatch--transparent\");\n    colorNoFill.type = \"button\";\n    colorNoFill.title = \"Transparent\";\n    colorNoFill.hidden = true;\n    colorToolsRow.append(customColorBtn, dropperBtn, colorNoFill, currentSwatch, customColorInput);\n    const designLabel = el(\"div\", \"nsv2-pane-label\", \"Colors in this design\");\n    const designGrid = el(\"div\", \"nsv2-color-grid\");\n    const defaultsHead = el(\"div\", \"nsv2-color-defaults-head\");\n    const seeAllBtn = el(\"button\", \"nsv2-see-all\", \"See all\");\n    seeAllBtn.type = \"button\";\n    defaultsHead.append(el(\"div\", \"nsv2-pane-label\", \"Default solid colors\"), seeAllBtn);\n    const defaultGrid = el(\"div\", \"nsv2-color-grid\");\n    const DEFAULT_COLORS = [\n      \"#000000\",\n      \"#545454\",\n      \"#737373\",\n      \"#a6a6a6\",\n      \"#d9d9d9\",\n      \"#f2f2f2\",\n      \"#ffffff\",\n      \"#ff0000\",\n      \"#ff3131\",\n      \"#ff5757\",\n      \"#ff66c4\",\n      \"#cb6ce6\",\n      \"#8c52ff\",\n      \"#5e17eb\",\n      \"#00c2cb\",\n      \"#0cc0df\",\n      \"#5ce1e6\",\n      \"#38b6ff\",\n      \"#5271ff\",\n      \"#004aad\",\n      \"#0a1172\",\n      \"#00bf63\",\n      \"#7ed957\",\n      \"#c1ff72\",\n      \"#ffde59\",\n      \"#ffbd59\",\n      \"#ff914d\",\n      \"#ff751f\"\n    ];\n    for (const c2 of DEFAULT_COLORS) {\n      const sw = el(\"button\", \"nsv2-swatch\");\n      sw.type = \"button\";\n      sw.dataset.c = c2;\n      sw.style.background = c2;\n      sw.title = c2;\n      defaultGrid.appendChild(sw);\n    }\n    const colorToolsLabel = el(\"div\", \"nsv2-pane-label\", \"Text colors\");\n    colorMain.append(\n      colorToolsLabel,\n      colorToolsRow,\n      designLabel,\n      designGrid,\n      defaultsHead,\n      defaultGrid\n    );\n    const allGrid = el(\"div\", \"nsv2-color-grid\");\n    allGrid.hidden = true;\n    const colorMsg = el(\"div\", \"nsv2-color-msg\");\n    colorMsg.hidden = true;\n    colorPane.append(colorHead, colorSearch, colorMsg, colorMain, allGrid);\n    const effectsPane = el(\"div\", \"nsv2-pane nsv2-fx-pane\");\n    effectsPane.dataset.pane = \"effects\";\n    const fxBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    fxBackBtn.type = \"button\";\n    fxBackBtn.title = \"Back\";\n    const fxHead = el(\"div\", \"nsv2-pane-head\");\n    const fxTitle = el(\"div\", \"nsv2-pane-title\", \"Effects\");\n    fxHead.append(fxBackBtn, fxTitle);\n    const FX_TILES = [\n      [\"none\", \"None\"],\n      [\"outline\", \"Outline\"],\n      [\"hollow\", \"Hollow\"],\n      [\"drop\", \"Drop\"],\n      [\"splice\", \"Splice\"],\n      [\"echo\", \"Echo\"],\n      [\"background\", \"Background\"]\n    ];\n    const fxTiles = el(\"div\", \"nsv2-fx-tiles\");\n    for (const [key, label] of FX_TILES) {\n      const badge = key === \"none\" ? \"\" : '<span class=\"nsv2-fx-adjust\">' + icons.sliders + \"</span>\";\n      const tile = el(\n        \"button\",\n        \"nsv2-fx-tile\",\n        '<span class=\"nsv2-fx-box\"><span class=\"nsv2-fx-ag nsv2-fx-ag--' + key + '\">Ag</span>' + badge + '</span><span class=\"nsv2-fx-label\">' + label + \"</span>\"\n      );\n      tile.type = \"button\";\n      tile.dataset.fx = key;\n      fxTiles.appendChild(tile);\n    }\n    const fxColorRow = el(\"div\", \"nsv2-fx-color-row\");\n    const fxColorInput = el(\"input\");\n    fxColorInput.type = \"color\";\n    fxColorInput.value = \"#ffffff\";\n    fxColorInput.className = \"nsv2-color-native\";\n    const fxColorChip = el(\"button\", \"nsv2-swatch nsv2-fx-color-chip\");\n    fxColorChip.type = \"button\";\n    fxColorChip.title = \"Effect color\";\n    const fxColorChip2 = el(\"button\", \"nsv2-swatch nsv2-fx-color-chip\");\n    fxColorChip2.type = \"button\";\n    fxColorChip2.title = \"Second copy color\";\n    fxColorChip2.hidden = true;\n    const fxColorLabel = el(\"span\", \"nsv2-fx-color-label\", \"Color\");\n    const fxChips = el(\"span\", \"nsv2-fx-chips\");\n    fxChips.append(fxColorChip, fxColorChip2);\n    fxColorRow.append(fxColorLabel, fxChips, fxColorInput);\n    const fxColorPop = el(\"div\", \"nsv2-fx-colorpop\");\n    fxColorPop.hidden = true;\n    const fxPopCustom = el(\"button\", \"nsv2-swatch nsv2-swatch--custom\", icons.plus);\n    fxPopCustom.type = \"button\";\n    fxPopCustom.title = \"Custom color\";\n    const fxPopDropper = el(\"button\", \"nsv2-swatch nsv2-swatch--tool\", icons.dropper);\n    fxPopDropper.type = \"button\";\n    fxPopDropper.title = \"Pick from screen\";\n    const fxPopCurrent = el(\"button\", \"nsv2-swatch is-active\");\n    fxPopCurrent.type = \"button\";\n    fxPopCurrent.title = \"Current color\";\n    const fxPopTools = el(\"div\", \"nsv2-color-row\");\n    fxPopTools.append(fxPopCustom, fxPopDropper, fxPopCurrent);\n    const fxDesignLabel = el(\"div\", \"nsv2-pane-label\", \"Colors in this design\");\n    const fxDesignGrid = el(\"div\", \"nsv2-color-grid\");\n    const fxDefaultGrid = el(\"div\", \"nsv2-color-grid\");\n    for (const c2 of DEFAULT_COLORS) {\n      const sw = el(\"button\", \"nsv2-swatch\");\n      sw.type = \"button\";\n      sw.dataset.c = c2;\n      sw.style.background = c2;\n      sw.title = c2;\n      fxDefaultGrid.appendChild(sw);\n    }\n    fxColorPop.append(\n      fxPopTools,\n      fxDesignLabel,\n      fxDesignGrid,\n      el(\"div\", \"nsv2-pane-label\", \"Default solid colors\"),\n      fxDefaultGrid\n    );\n    root.appendChild(fxColorPop);\n    const fxControls = el(\"div\", \"nsv2-fx-controls\");\n    fxControls.hidden = true;\n    fxControls.append(fxColorRow);\n    const nativeValue = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \"value\");\n    const makeRange = (min, max, step, val) => {\n      const range = el(\"input\");\n      range.type = \"range\";\n      range.min = String(min);\n      range.max = String(max);\n      range.step = String(step);\n      const fill = (r2) => {\n        const lo2 = parseFloat(r2.min) || 0;\n        const hi2 = parseFloat(r2.max) || 100;\n        r2.style.setProperty(\"--fill\", String((r2.valueAsNumber - lo2) / (hi2 - lo2) * 100));\n      };\n      Object.defineProperty(range, \"value\", {\n        get() {\n          return nativeValue.get.call(this);\n        },\n        set(v2) {\n          nativeValue.set.call(this, v2);\n          fill(this);\n        }\n      });\n      range.addEventListener(\"input\", () => fill(range));\n      range.value = String(val);\n      return range;\n    };\n    const GRADIENT_PRESETS = [\n      [\"#0f172a\", \"#64748b\"],\n      [\"#8e9eab\", \"#eef2f3\"],\n      [\"#b88746\", \"#fdf5a6\"],\n      [\"#ff3131\", \"#ffde59\"],\n      [\"#ff66c4\", \"#ffde59\"],\n      [\"#ff5757\", \"#8c52ff\"],\n      [\"#8c52ff\", \"#ff914d\"],\n      [\"#5271ff\", \"#ff66c4\"],\n      [\"#cb6ce6\", \"#004aad\"],\n      [\"#5ce1e6\", \"#8c52ff\"],\n      [\"#0cc0df\", \"#7ed957\"],\n      [\"#004aad\", \"#0cc0df\"],\n      [\"#00bf63\", \"#c1ff72\"],\n      [\"#ffde59\", \"#ff751f\"]\n    ];\n    const gradsLabel = el(\"div\", \"nsv2-pane-label\", \"Gradients\");\n    const gradGrid = el(\"div\", \"nsv2-color-grid\");\n    for (const [a2, b2] of GRADIENT_PRESETS) {\n      const sw = el(\"button\", \"nsv2-swatch\");\n      sw.type = \"button\";\n      sw.dataset.ga = a2;\n      sw.dataset.gb = b2;\n      sw.style.background = \"linear-gradient(180deg, \" + a2 + \", \" + b2 + \")\";\n      sw.title = a2 + \" \\u2192 \" + b2;\n      gradGrid.appendChild(sw);\n    }\n    const gradEdit = el(\"div\", \"nsv2-grad-edit\");\n    gradEdit.hidden = true;\n    const mkStop = (label) => {\n      const btn = el(\"button\", \"nsv2-swatch nsv2-grad-stop\");\n      btn.type = \"button\";\n      btn.title = label;\n      const input = el(\"input\");\n      input.type = \"color\";\n      input.className = \"nsv2-color-native\";\n      return [btn, input];\n    };\n    const [gradStopA, gradInputA] = mkStop(\"Start color\");\n    const [gradStopB, gradInputB] = mkStop(\"End color\");\n    const gradStopsRow = el(\"div\", \"nsv2-color-row nsv2-grad-stops\");\n    gradStopsRow.append(gradStopA, gradInputA, gradStopB, gradInputB);\n    const gradAngle = makeRange(0, 360, 1, 90);\n    const gradAngleVal = el(\"span\", \"nsv2-fx-curve-val\", \"90\\xB0\");\n    const gradAngleRow = el(\"div\", \"nsv2-fx-curve\");\n    gradAngleRow.append(el(\"span\", \"nsv2-fx-curve-name\", \"Angle\"), gradAngle, gradAngleVal);\n    gradEdit.append(gradStopsRow, gradAngleRow);\n    colorMain.append(gradsLabel, gradGrid, gradEdit);\n    const fxCurveLabel = el(\"div\", \"nsv2-pane-label nsv2-shape-label\", \"Shape\");\n    const shapeSvg = (d2) => '<svg width=\"26\" height=\"16\" viewBox=\"0 0 26 16\" fill=\"none\"><path d=\"' + d2 + '\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/></svg>';\n    const SHAPE_TILES = [\n      [\"none\", \"None\", shapeSvg(\"M3 8h20\")],\n      [\"curve\", \"Curve\", shapeSvg(\"M3 12 Q13 1 23 12\")],\n      [\"wave\", \"Wave\", shapeSvg(\"M3 8 C7 2 10 2 13 8 S19 14 23 8\")],\n      [\"arcup\", \"Arc Upper\", shapeSvg(\"M3 12 Q13 3 23 12\")],\n      [\"arclo\", \"Arc Lower\", shapeSvg(\"M3 4 Q13 13 23 4\")],\n      [\"angle\", \"Angle\", shapeSvg(\"M3 13 L23 3\")]\n    ];\n    const shapeTiles = el(\"div\", \"nsv2-fx-tiles nsv2-shape-tiles\");\n    for (const [key, label, icon] of SHAPE_TILES) {\n      const tile = el(\n        \"button\",\n        \"nsv2-fx-tile\",\n        '<span class=\"nsv2-fx-box\"><span class=\"nsv2-fx-ag nsv2-fx-shape\">' + icon + '</span></span><span class=\"nsv2-fx-label\">' + label + \"</span>\"\n      );\n      tile.type = \"button\";\n      tile.dataset.shape = key;\n      shapeTiles.appendChild(tile);\n    }\n    const fxCurveRow = el(\"div\", \"nsv2-fx-curve\");\n    const fxCurveRange = makeRange(-100, 100, 1, 0);\n    const fxCurveVal = el(\"input\", \"nsv2-fx-curve-val\");\n    fxCurveVal.type = \"text\";\n    fxCurveVal.inputMode = \"numeric\";\n    fxCurveVal.value = \"0\";\n    fxCurveRow.append(el(\"span\", \"nsv2-fx-curve-name\", \"Amount\"), fxCurveRange, fxCurveVal);\n    fxTiles.appendChild(fxControls);\n    shapeTiles.appendChild(fxCurveRow);\n    effectsPane.append(fxHead, fxTiles, fxCurveLabel, shapeTiles);\n    const bgrPane = el(\"div\", \"nsv2-pane\");\n    bgrPane.dataset.pane = \"bgr\";\n    const bgrBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    bgrBackBtn.type = \"button\";\n    bgrBackBtn.title = \"Back\";\n    const bgrHead = el(\"div\", \"nsv2-pane-head\");\n    bgrHead.append(bgrBackBtn, el(\"div\", \"nsv2-pane-title\", \"Remove background\"));\n    const bgrTiles = el(\"div\", \"nsv2-bgr-tiles\");\n    bgrPane.append(bgrHead, bgrTiles);\n    const recolorPane = el(\"div\", \"nsv2-pane\");\n    recolorPane.dataset.pane = \"recolor\";\n    const recolorBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    recolorBackBtn.type = \"button\";\n    recolorBackBtn.title = \"Back\";\n    const recolorHead = el(\"div\", \"nsv2-pane-head\");\n    recolorHead.append(recolorBackBtn, el(\"div\", \"nsv2-pane-title\", \"Recolor\"));\n    const recolorSrcLabel = el(\"div\", \"nsv2-pane-label\", \"Colors in this image\");\n    const recolorSrcRow = el(\"div\", \"nsv2-color-grid\");\n    const recolorToLabel = el(\"div\", \"nsv2-pane-label\", \"Change to\");\n    const recolorCustomInput = el(\"input\");\n    recolorCustomInput.type = \"color\";\n    recolorCustomInput.dataset.spectrumDirect = \"1\";\n    recolorCustomInput.className = \"nsv2-color-native\";\n    const recolorCustomBtn = el(\"button\", \"nsv2-swatch nsv2-swatch--custom\", icons.plus);\n    recolorCustomBtn.type = \"button\";\n    recolorCustomBtn.title = \"Custom color\";\n    const recolorDropperBtn = el(\"button\", \"nsv2-swatch nsv2-swatch--tool\", icons.dropper);\n    recolorDropperBtn.type = \"button\";\n    recolorDropperBtn.title = \"Pick from screen\";\n    const recolorTransparent = el(\"button\", \"nsv2-swatch nsv2-swatch--transparent\");\n    recolorTransparent.type = \"button\";\n    recolorTransparent.title = \"Transparent (erase)\";\n    recolorTransparent.dataset.mode = \"transparent\";\n    const recolorCurrent = el(\"button\", \"nsv2-swatch\");\n    recolorCurrent.type = \"button\";\n    recolorCurrent.title = \"Current replacement\";\n    const recolorToolsRow = el(\"div\", \"nsv2-color-row\");\n    recolorToolsRow.append(recolorCustomBtn, recolorDropperBtn, recolorTransparent, recolorCurrent, recolorCustomInput);\n    const recolorDesignLabel = el(\"div\", \"nsv2-pane-label\", \"Colors in this design\");\n    const recolorDesignGrid = el(\"div\", \"nsv2-color-grid\");\n    const recolorDefaultsHead = el(\"div\", \"nsv2-color-defaults-head\");\n    const recolorSeeAll = el(\"button\", \"nsv2-see-all\", \"See all\");\n    recolorSeeAll.type = \"button\";\n    recolorDefaultsHead.append(el(\"div\", \"nsv2-pane-label\", \"Default solid colors\"), recolorSeeAll);\n    const recolorGrid = el(\"div\", \"nsv2-color-grid\");\n    const recolorAllGrid = el(\"div\", \"nsv2-color-grid\");\n    recolorAllGrid.hidden = true;\n    const recolorResetBtn = el(\"button\", \"nsv2-recolor-reset\", \"Reset colors\");\n    recolorResetBtn.type = \"button\";\n    recolorPane.append(\n      recolorHead,\n      recolorSrcLabel,\n      recolorSrcRow,\n      recolorToLabel,\n      recolorToolsRow,\n      recolorDesignLabel,\n      recolorDesignGrid,\n      recolorDefaultsHead,\n      recolorGrid,\n      recolorAllGrid,\n      recolorResetBtn\n    );\n    const filtersPane = el(\"div\", \"nsv2-pane\");\n    filtersPane.dataset.pane = \"filters\";\n    const filtersBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    filtersBackBtn.type = \"button\";\n    filtersBackBtn.title = \"Back\";\n    const filtersHead = el(\"div\", \"nsv2-pane-head\");\n    const filtersTitle = el(\"div\", \"nsv2-pane-title\", \"Filters\");\n    filtersHead.append(filtersBackBtn, filtersTitle);\n    const filterTiles = el(\"div\", \"nsv2-bgr-tiles nsv2-filter-tiles\");\n    filtersPane.append(filtersHead, filterTiles);\n    const dlgModal = el(\"div\", \"nsv2-use-modal nsv2-dlg\");\n    dlgModal.hidden = true;\n    const dlgCard = el(\"div\", \"nsv2-use-card nsv2-dlg-card\");\n    const dlgMsg = el(\"div\", \"nsv2-dlg-msg\");\n    const dlgInput = el(\"input\", \"nsv2-dlg-input\");\n    dlgInput.type = \"text\";\n    dlgInput.maxLength = 80;\n    dlgInput.autocomplete = \"off\";\n    dlgInput.hidden = true;\n    const dlgRow = el(\"div\", \"nsv2-aied-row\");\n    const dlgCancel = el(\"button\", \"nsv2-cropbar-cancel nsv2-dlg-cancel\", \"Cancel\");\n    const dlgAlt = el(\"button\", \"nsv2-cropbar-cancel nsv2-dlg-alt\", \"Discard\");\n    dlgAlt.hidden = true;\n    const dlgOk = el(\"button\", \"nsv2-cta nsv2-dlg-ok\", \"<span>OK</span>\");\n    dlgCancel.type = dlgAlt.type = dlgOk.type = \"button\";\n    dlgRow.append(dlgCancel, dlgAlt, dlgOk);\n    dlgCard.append(dlgMsg, dlgInput, dlgRow);\n    dlgModal.appendChild(dlgCard);\n    root.appendChild(dlgModal);\n    const adjustPane = el(\"div\", \"nsv2-pane\");\n    adjustPane.dataset.pane = \"adjust\";\n    const adjustBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    adjustBackBtn.type = \"button\";\n    adjustBackBtn.title = \"Back\";\n    const adjustHead = el(\"div\", \"nsv2-pane-head\");\n    adjustHead.append(adjustBackBtn, el(\"div\", \"nsv2-pane-title\", \"Adjust\"));\n    adjustPane.append(adjustHead);\n    const uploadsPane = el(\"div\", \"nsv2-pane\");\n    uploadsPane.dataset.pane = \"uploads\";\n    const fileInput = el(\"input\");\n    fileInput.type = \"file\";\n    fileInput.multiple = true;\n    fileInput.accept = \".png,.jpg,.jpeg,.gif,.webp,.svg,.pdf,.ai,.eps,.psd,.tif,.tiff\";\n    fileInput.hidden = true;\n    const dropzone = el(\"button\", \"nsv2-upload-cta\", icons.uploads + \"<span>Upload files</span>\");\n    dropzone.type = \"button\";\n    const uploadFormats = el(\n      \"div\",\n      \"nsv2-up-formats\",\n      \"PNG, JPG, SVG, PDF, AI, EPS, PSD & more \\xB7 or drag & drop anywhere\"\n    );\n    const uploadBusy = el(\"div\", \"nsv2-up-busy\", '<span class=\"nsv2-bgr-spin\"></span><span>Uploading\\u2026</span>');\n    uploadBusy.hidden = true;\n    const driveBtn = el(\"button\", \"nsv2-src-btn\", icons.drive + \"<span>Drive</span>\");\n    const phoneBtn = el(\"button\", \"nsv2-src-btn nsv2-src-btn--phone\", icons.phone + \"<span>Phone</span>\");\n    driveBtn.type = phoneBtn.type = \"button\";\n    driveBtn.title = \"Upload from Google Drive\";\n    phoneBtn.title = \"Upload from your phone\";\n    const srcRow = el(\"div\", \"nsv2-src-row\");\n    srcRow.append(driveBtn, phoneBtn);\n    const myFilesLabel = el(\"div\", \"nsv2-pane-label\", \"My uploaded files\");\n    const myFilesGrid = el(\"div\", \"nsv2-myfiles\");\n    myFilesLabel.hidden = myFilesGrid.hidden = true;\n    const uploadsSignin = el(\"div\", \"nsv2-designs-empty nsv2-uploads-signin\", \"Sign in to see your uploaded files\");\n    const uploadsSigninBtn = el(\"button\", \"nsv2-signin-btn\", \"Sign In\");\n    uploadsSigninBtn.type = \"button\";\n    uploadsSignin.appendChild(uploadsSigninBtn);\n    uploadsSignin.hidden = true;\n    uploadsPane.append(\n      el(\"div\", \"nsv2-pane-title\", \"Uploads\"),\n      dropzone,\n      srcRow,\n      uploadFormats,\n      uploadBusy,\n      myFilesLabel,\n      myFilesGrid,\n      uploadsSignin,\n      fileInput\n    );\n    const layersPane = el(\"div\", \"nsv2-pane\");\n    layersPane.dataset.pane = \"layers\";\n    const layersList = el(\"div\", \"nsv2-layers-list\");\n    const layersEmpty = el(\"div\", \"nsv2-designs-empty\", \"Nothing on your canvas yet\");\n    layersEmpty.hidden = true;\n    layersPane.append(el(\"div\", \"nsv2-pane-title\", \"Layers\"), layersEmpty, layersList);\n    const elementsPane = el(\"div\", \"nsv2-pane\");\n    elementsPane.dataset.pane = \"elements\";\n    const elTile = (key) => {\n      const tile = el(\n        \"button\",\n        \"nsv2-fx-tile\",\n        '<span class=\"nsv2-fx-box\"><span class=\"nsv2-fx-ag nsv2-fx-shape\">' + elementGlyphSvg(key) + '</span></span><span class=\"nsv2-fx-label\">' + ELEMENTS[key].label + \"</span>\"\n      );\n      tile.type = \"button\";\n      tile.dataset.el = key;\n      return tile;\n    };\n    const elementTiles = el(\"div\", \"nsv2-fx-tiles\");\n    const elementLineTiles = el(\"div\", \"nsv2-fx-tiles\");\n    const elementLinesLabel = el(\"div\", \"nsv2-pane-label\", \"Lines\");\n    for (const key of Object.keys(ELEMENTS)) {\n      (ELEMENTS[key].isLine ? elementLineTiles : elementTiles).appendChild(elTile(key));\n    }\n    elementsPane.append(\n      el(\"div\", \"nsv2-pane-title\", \"Elements\"),\n      el(\"div\", \"nsv2-pane-label\", \"Shapes\"),\n      elementTiles,\n      elementLinesLabel,\n      elementLineTiles\n    );\n    const designsPane = el(\"div\", \"nsv2-pane\");\n    designsPane.dataset.pane = \"designs\";\n    const designsEmpty = el(\"div\", \"nsv2-designs-empty\");\n    const designsTabs = el(\"div\", \"nsv2-tabs\");\n    const designsTabSaved = el(\"button\", \"nsv2-tab is-on\", \"Saved\");\n    designsTabSaved.type = \"button\";\n    const designsTabExports = el(\"button\", \"nsv2-tab\", \"Exported\");\n    designsTabExports.type = \"button\";\n    designsTabs.append(designsTabSaved, designsTabExports);\n    const designsSavedGrid = el(\"div\", \"nsv2-designs nsv2-designs--saved\");\n    const designsGrid = el(\"div\", \"nsv2-designs\");\n    designsEmpty.hidden = designsGrid.hidden = true;\n    designsTabs.hidden = designsSavedGrid.hidden = true;\n    designsPane.append(\n      el(\"div\", \"nsv2-pane-title\", \"My Designs\"),\n      designsTabs,\n      designsEmpty,\n      designsSavedGrid,\n      designsGrid\n    );\n    const premadePane = el(\"div\", \"nsv2-pane\");\n    premadePane.dataset.pane = \"premade\";\n    const premadeBody = el(\"div\", \"nsv2-premade-body\");\n    premadePane.append(el(\"div\", \"nsv2-pane-title\", \"Pre-Made Designs\"), premadeBody);\n    premadePane.hidden = true;\n    const canvasPane = el(\"div\", \"nsv2-pane nsv2-canvas-pane\");\n    canvasPane.append(el(\"div\", \"nsv2-pane-title\", \"Canvas\"));\n    canvasPane.hidden = true;\n    const formatPane = el(\"div\", \"nsv2-pane nsv2-format-pane\");\n    formatPane.append(el(\"div\", \"nsv2-pane-title\", \"Format\"));\n    formatPane.hidden = true;\n    const spacingPane = el(\"div\", \"nsv2-pane nsv2-spacing-pane\");\n    spacingPane.append(el(\"div\", \"nsv2-pane-title\", \"Spacing\"));\n    spacingPane.hidden = true;\n    const nudgeIcon = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3v18M3 12h18\"/><path d=\"M9 6l3-3 3 3M9 18l3 3 3-3M6 9l-3 3 3 3M18 9l3 3-3 3\"/></svg>';\n    const nudgePane = el(\"div\", \"nsv2-pane nsv2-nudge-pane\");\n    nudgePane.append(el(\"div\", \"nsv2-pane-title\", \"Nudge\"));\n    nudgePane.hidden = true;\n    const nudgePad = el(\"div\", \"nsv2-nudge-pad\");\n    const nudgeBtns = {};\n    for (const [dir, icon, tip] of [[\"left\", icons.arrowLeft, \"Move left\"], [\"up\", icons.arrowUp, \"Move up\"], [\"down\", icons.arrowDown, \"Move down\"], [\"right\", icons.arrow, \"Move right\"]]) {\n      const b2 = el(\"button\", \"nsv2-nudge-btn nsv2-nudge-\" + dir, icon);\n      b2.type = \"button\";\n      b2.setAttribute(\"aria-label\", tip);\n      b2.dataset.dir = dir;\n      nudgePad.appendChild(b2);\n      nudgeBtns[dir] = b2;\n    }\n    nudgePane.append(nudgePad);\n    const shapePane = el(\"div\", \"nsv2-pane nsv2-shape-pane\");\n    shapePane.append(el(\"div\", \"nsv2-pane-title\", \"Shape\"));\n    shapePane.hidden = true;\n    panel.append(panelClose, textPane, fontsPane, uploadsPane, elementsPane, layersPane, designsPane, premadePane, colorPane, effectsPane, bgrPane, filtersPane, recolorPane, adjustPane, canvasPane, formatPane, spacingPane, nudgePane, shapePane);\n    const area = el(\"div\", \"nsv2-area\");\n    const ctxbar = el(\"div\", \"nsv2-ctxbar\");\n    const fontBtn = el(\"button\", \"nsv2-ctx-font\", '<span data-ref=\"family\">Poppins</span>');\n    fontBtn.title = \"Font\";\n    fontBtn.type = \"button\";\n    const sizeWrap = el(\"div\", \"nsv2-ctx-size\");\n    const sizeDown = el(\"button\", \"nsv2-ctx-size-btn\", \"\\u2212\");\n    sizeDown.title = \"Decrease size\";\n    const sizeVal = el(\"input\", \"nsv2-ctx-size-val\");\n    sizeVal.type = \"text\";\n    sizeVal.inputMode = \"numeric\";\n    const sizeUp = el(\"button\", \"nsv2-ctx-size-btn\", \"+\");\n    sizeUp.title = \"Increase size\";\n    sizeDown.type = sizeUp.type = \"button\";\n    sizeWrap.append(sizeDown, sizeVal, sizeUp);\n    const colorBtn = el(\"button\", \"nsv2-ctx-color\", '<span class=\"nsv2-color-disc\" data-ref=\"disc\"></span>');\n    colorBtn.type = \"button\";\n    colorBtn.title = \"Text color\";\n    const boldBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-b\", \"B\");\n    boldBtn.title = \"Bold\";\n    const italicBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-i\", \"I\");\n    italicBtn.title = \"Italic\";\n    const underlineBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-u\", \"U\");\n    underlineBtn.title = \"Underline\";\n    const strikeBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-s\", \"S\");\n    strikeBtn.title = \"Strikethrough\";\n    const caseBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-aa\", \"aA\");\n    caseBtn.title = \"Uppercase\";\n    const bulletsBtn = el(\"button\", \"nsv2-ctx-toggle\", icons.bullets);\n    bulletsBtn.title = \"Bulleted list\";\n    const alignBtn = el(\"button\", \"nsv2-ctx-toggle\", icons.alignCenter);\n    alignBtn.title = \"Alignment\";\n    const spacingBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-sp-btn\", icons.spacing);\n    spacingBtn.title = \"Spacing\";\n    const effectsBtn = el(\"button\", \"nsv2-ctx-word\", '<span class=\"nsv2-cw-ic\">' + icons.ai + '</span><span class=\"nsv2-cw-lab\">Effects</span>');\n    const deleteBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-del\", icons.trash + '<span class=\"nsv2-cw-lab\">Delete</span>');\n    deleteBtn.title = \"Delete\";\n    const word = (label, icon, soon) => {\n      const b2 = el(\n        \"button\",\n        \"nsv2-ctx-word\" + (soon ? \" is-soon\" : \"\"),\n        (icon ? '<span class=\"nsv2-cw-ic\">' + icon + \"</span>\" : \"\") + '<span class=\"nsv2-cw-lab\">' + label + \"</span>\"\n      );\n      b2.type = \"button\";\n      if (soon) b2.title = \"Coming soon\";\n      return b2;\n    };\n    const aiEditBtn = word(\"Edit with AI\", micons.star);\n    const removeBgBtn = word(\"BG Remove\", micons.eraser);\n    removeBgBtn.classList.add(\"nsv2-ctx-removebg\");\n    const cropBtn = word(\"Crop\", micons.crop);\n    cropBtn.classList.add(\"nsv2-cw-iconic\");\n    cropBtn.title = \"Crop\";\n    const radiusBtn = word(\"Radius\", micons.corner);\n    radiusBtn.classList.add(\"nsv2-cw-iconic\");\n    radiusBtn.title = \"Radius\";\n    const colorReplaceBtn = word(\"Swap Colors\", micons.palette);\n    const filtersBtn = word(\"Filters\", micons.filterIc);\n    const revertBtn = word(\"Revert\", micons.restore);\n    [boldBtn, italicBtn, underlineBtn, strikeBtn, caseBtn, bulletsBtn, alignBtn, spacingBtn, effectsBtn, deleteBtn].forEach((b2) => b2.type = \"button\");\n    const fmtCluster = el(\"div\", \"nsv2-fmt-cluster\");\n    fmtCluster.append(boldBtn, italicBtn, underlineBtn, strikeBtn, caseBtn, alignBtn, bulletsBtn, spacingBtn);\n    const fmtChip = el(\"button\", \"nsv2-mchip nsv2-fmt-chip\", '<span class=\"nsv2-fmt-chip-glyph\">B</span><span class=\"nsv2-mchip-lab\">Format</span>');\n    fmtChip.type = \"button\";\n    const spacingChip = el(\"button\", \"nsv2-mchip nsv2-sp-chip\", icons.spacing + '<span class=\"nsv2-mchip-lab\">Spacing</span>');\n    spacingChip.type = \"button\";\n    const shapeChip = el(\n      \"button\",\n      \"nsv2-mchip nsv2-shape-chip\",\n      '<svg width=\"26\" height=\"16\" viewBox=\"0 0 26 16\" fill=\"none\"><path d=\"M3 12 Q13 1 23 12\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/></svg><span class=\"nsv2-mchip-lab\">Shape</span>'\n    );\n    shapeChip.type = \"button\";\n    const editTextChip = word(\"Edit\", micons.pencil);\n    editTextChip.classList.add(\"nsv2-edit-chip\");\n    const ctxTextGroup = el(\"div\", \"nsv2-ctx-group\");\n    ctxTextGroup.append(editTextChip, fontBtn, sizeWrap, colorBtn, el(\"div\", \"nsv2-vdiv\"), fmtCluster, fmtChip, spacingChip, el(\"div\", \"nsv2-vdiv\"), effectsBtn, shapeChip);\n    const imgOutlineColorBtn = el(\"button\", \"nsv2-ctx-color nsv2-elc-chip\", '<span class=\"nsv2-color-disc nsv2-ring-disc\" data-ref=\"disc\"></span>');\n    imgOutlineColorBtn.type = \"button\";\n    imgOutlineColorBtn.title = \"Outline color\";\n    const stickerBtn = word(\"Outline\", micons.ring);\n    stickerBtn.classList.add(\"nsv2-cw-iconic\");\n    stickerBtn.title = \"Outline\";\n    const adjustBtn = el(\"button\", \"nsv2-icon-btn nsv2-ctx-toggle\", icons.sliders + '<span class=\"nsv2-cw-lab nsv2-adjust-lab\">Adjust</span>');\n    adjustBtn.type = \"button\";\n    adjustBtn.title = \"Adjust\";\n    const upscaleBtn = word(\"Upscale\", micons.expand);\n    const ctxImageGroup = el(\"div\", \"nsv2-ctx-group\");\n    ctxImageGroup.append(\n      removeBgBtn,\n      el(\"div\", \"nsv2-vdiv\"),\n      colorReplaceBtn,\n      filtersBtn,\n      upscaleBtn,\n      el(\"div\", \"nsv2-vdiv\"),\n      cropBtn,\n      radiusBtn,\n      imgOutlineColorBtn,\n      stickerBtn,\n      adjustBtn,\n      el(\"div\", \"nsv2-vdiv\"),\n      revertBtn\n    );\n    const elFillBtn = el(\"button\", \"nsv2-ctx-color nsv2-el-fill\", '<span class=\"nsv2-color-disc\" data-ref=\"disc\"></span>');\n    elFillBtn.type = \"button\";\n    elFillBtn.title = \"Fill color\";\n    const elBorderColorBtn = el(\"button\", \"nsv2-ctx-color nsv2-elc-chip\", '<span class=\"nsv2-color-disc nsv2-ring-disc\" data-ref=\"disc\"></span>');\n    elBorderColorBtn.type = \"button\";\n    elBorderColorBtn.title = \"Outline color\";\n    const elBorderBtn = word(\"Outline\", micons.ring);\n    const elRoundBtn = word(\"Radius\", micons.corner);\n    elRoundBtn.hidden = true;\n    const elFlipHBtn = word(\"Flip H\", icons.flipH);\n    const elFlipVBtn = word(\"Flip V\", icons.flipV);\n    const ctxShapeGroup = el(\"div\", \"nsv2-ctx-group\");\n    ctxShapeGroup.append(elFillBtn, elBorderColorBtn, elBorderBtn, elRoundBtn, el(\"div\", \"nsv2-vdiv\"), elFlipHBtn, elFlipVBtn);\n    ctxShapeGroup.hidden = true;\n    const lnColorBtn = el(\"button\", \"nsv2-ctx-color nsv2-ln-color\", '<span class=\"nsv2-color-disc\" data-ref=\"disc\"></span>');\n    lnColorBtn.type = \"button\";\n    lnColorBtn.title = \"Line color\";\n    const lnStyleBtn = word(\"Style\", micons.lineStyle);\n    const lnEndsBtn = word(\"Ends\", micons.arrowRange);\n    const ctxLineGroup = el(\"div\", \"nsv2-ctx-group\");\n    ctxLineGroup.append(lnColorBtn, lnStyleBtn, lnEndsBtn);\n    ctxLineGroup.hidden = true;\n    const borderPop = el(\"div\", \"nsv2-spop nsv2-border-pop\");\n    borderPop.hidden = true;\n    const lnStylePop = el(\"div\", \"nsv2-spop nsv2-border-pop\");\n    lnStylePop.hidden = true;\n    const lnEndsPop = el(\"div\", \"nsv2-spop nsv2-ends-pop\");\n    lnEndsPop.hidden = true;\n    const borderPane = el(\"div\", \"nsv2-pane nsv2-border-pane\");\n    borderPane.append(el(\"div\", \"nsv2-pane-title\", \"Outline\"));\n    borderPane.hidden = true;\n    const endsPane = el(\"div\", \"nsv2-pane nsv2-ends-pane\");\n    endsPane.append(el(\"div\", \"nsv2-pane-title\", \"Line ends\"));\n    endsPane.hidden = true;\n    const lnStylePane = el(\"div\", \"nsv2-pane nsv2-lnstyle-pane\");\n    lnStylePane.append(el(\"div\", \"nsv2-pane-title\", \"Line style\"));\n    lnStylePane.hidden = true;\n    const gridBtn = el(\"button\", \"nsv2-icon-btn nsv2-ctx-toggle\", icons.grid);\n    gridBtn.type = \"button\";\n    gridBtn.title = \"Grid\";\n    const rulerBtn = el(\"button\", \"nsv2-icon-btn nsv2-ctx-toggle nsv2-ruler-btn\", icons.ruler);\n    rulerBtn.type = \"button\";\n    rulerBtn.title = \"Rulers\";\n    const ctxCanvasGroup = el(\"div\", \"nsv2-ctx-group\");\n    const canvasSizeLabel = el(\"span\", \"nsv2-fx-color-label\", \"Canvas\");\n    const canvasSizeVdiv = el(\"div\", \"nsv2-vdiv\");\n    ctxCanvasGroup.append(\n      canvasSizeLabel,\n      canvasSizeWrap,\n      canvasSizeVdiv,\n      bgBtn,\n      el(\"div\", \"nsv2-vdiv\"),\n      gridBtn,\n      rulerBtn\n    );\n    ctxCanvasGroup.hidden = true;\n    const gridPop = el(\"div\", \"nsv2-spop nsv2-grid-pop\");\n    gridPop.hidden = true;\n    const gridToggle = el(\"button\", \"nsv2-enhance-toggle\");\n    gridToggle.type = \"button\";\n    gridToggle.setAttribute(\"aria-pressed\", \"false\");\n    const gridToggleRow = el(\"div\", \"nsv2-fx-color-row\");\n    gridToggleRow.append(el(\"span\", \"nsv2-fx-color-label\", \"Grid\"), gridToggle);\n    const cropBar = el(\"div\", \"nsv2-cropbar\");\n    cropBar.hidden = true;\n    const cropApplyBtn = el(\"button\", \"nsv2-cta nsv2-cropbar-apply\", \"<span>Apply</span>\");\n    const cropCancelBtn = el(\"button\", \"nsv2-cropbar-cancel\", \"Cancel\");\n    cropApplyBtn.type = cropCancelBtn.type = \"button\";\n    cropBar.append(cropApplyBtn, cropCancelBtn);\n    const rpop = el(\"div\", \"nsv2-spop\");\n    rpop.hidden = true;\n    const ctxMoreBtn = el(\"button\", \"nsv2-ctx-toggle nsv2-ctx-more\", icons.dots);\n    ctxMoreBtn.type = \"button\";\n    ctxMoreBtn.title = \"More\";\n    ctxMoreBtn.hidden = true;\n    const ctxMorePanel = el(\"div\", \"nsv2-ctx-more-panel\");\n    ctxMorePanel.hidden = true;\n    const ctxSelGroup = el(\"div\", \"nsv2-ctx-group\");\n    const alignBtns = {};\n    for (const [pos, icon, tip] of [\n      [\"left\", icons.alignL, \"Align left\"],\n      [\"centerH\", icons.alignCH, \"Align center\"],\n      [\"right\", icons.alignR, \"Align right\"],\n      [\"top\", icons.alignT, \"Align top\"],\n      [\"middle\", icons.alignM, \"Align middle\"],\n      [\"bottom\", icons.alignB, \"Align bottom\"]\n    ]) {\n      const b2 = el(\"button\", \"nsv2-icon-btn nsv2-ctx-toggle\");\n      b2.type = \"button\";\n      b2.innerHTML = icon;\n      b2.dataset.tip = tip;\n      b2.dataset.alignPos = pos;\n      ctxSelGroup.appendChild(b2);\n      alignBtns[pos] = b2;\n    }\n    ctxSelGroup.appendChild(el(\"div\", \"nsv2-vdiv\"));\n    const distBtns = {};\n    for (const [axis, icon, tip] of [\n      [\"h\", icons.distH, \"Distribute horizontally\"],\n      [\"v\", icons.distV, \"Distribute vertically\"]\n    ]) {\n      const b2 = el(\"button\", \"nsv2-icon-btn nsv2-ctx-toggle\");\n      b2.type = \"button\";\n      b2.innerHTML = icon;\n      b2.dataset.tip = tip;\n      b2.dataset.distAxis = axis;\n      ctxSelGroup.appendChild(b2);\n      distBtns[axis] = b2;\n    }\n    ctxSelGroup.hidden = true;\n    const nudgeChip = word(\"Nudge\", nudgeIcon);\n    nudgeChip.classList.add(\"nsv2-nudge-chip\");\n    const ctxNudgeGroup = el(\"div\", \"nsv2-ctx-group nsv2-nudge-group\");\n    ctxNudgeGroup.append(nudgeChip);\n    ctxNudgeGroup.hidden = true;\n    const ctxTail = el(\"div\", \"nsv2-ctx-group\");\n    ctxTail.append(el(\"div\", \"nsv2-vdiv\"), deleteBtn);\n    ctxbar.append(ctxTextGroup, ctxImageGroup, ctxShapeGroup, ctxLineGroup, ctxSelGroup, ctxNudgeGroup, ctxCanvasGroup, ctxMoreBtn, ctxTail);\n    const board = el(\"div\", \"nsv2-board\");\n    const canvasEl = el(\"canvas\");\n    board.appendChild(canvasEl);\n    const qa2 = el(\"div\", \"nsv2-qa\");\n    qa2.hidden = true;\n    const qaBtn = (cls, icon, title) => {\n      const b2 = el(\"button\", \"nsv2-qa-btn\" + (cls ? \" \" + cls : \"\"), icon);\n      b2.type = \"button\";\n      b2.title = title;\n      return b2;\n    };\n    const qaAi = el(\"button\", \"nsv2-qa-ai\", \"Edit with AI\");\n    qaAi.type = \"button\";\n    qaAi.hidden = true;\n    const qaDown = qaBtn(\"\", icons.arrowDown, \"Send backward\");\n    const qaUp = qaBtn(\"\", icons.arrowUp, \"Bring forward\");\n    const qaDup = qaBtn(\"nsv2-qa-dup\", icons.duplicate, \"Duplicate\");\n    const qaDel = qaBtn(\"nsv2-qa-del\", icons.trash, \"Delete\");\n    const qaMore = qaBtn(\"\", icons.dots, \"More\");\n    const qaLock = qaBtn(\"nsv2-qa-lock\", icons.unlock, \"Unlock\");\n    const rotKnob = el(\"div\", \"nsv2-qa nsv2-rotate-knob\", icons.rotate);\n    rotKnob.hidden = true;\n    rotKnob.setAttribute(\"aria-hidden\", \"true\");\n    qa2.append(qaAi, qaDown, qaUp, qaDup, qaDel, qaMore, qaLock);\n    const spop = el(\"div\", \"nsv2-spop\");\n    spop.hidden = true;\n    const sliderRow = (label, min, max, step, val) => {\n      const wrap = el(\"div\", \"nsv2-spop-row\");\n      const lab = el(\"div\", \"nsv2-spop-label\", label);\n      const row = el(\"div\", \"nsv2-fx-curve\");\n      const range = makeRange(min, max, step, val);\n      const num = el(\"input\", \"nsv2-fx-curve-val\");\n      num.type = \"text\";\n      num.inputMode = \"decimal\";\n      num.value = String(val);\n      row.append(range, num);\n      wrap.append(lab, row);\n      return { wrap, range, num };\n    };\n    const filterStrength = sliderRow(\"Intensity\", 0, 100, 1, 100);\n    const filterDuoRow = el(\"div\", \"nsv2-fx-color-row nsv2-duo-row\");\n    const duoChip = (title, c2) => {\n      const b2 = el(\"button\", \"nsv2-swatch nsv2-fx-color-chip\");\n      b2.type = \"button\";\n      b2.title = title;\n      b2.dataset.c = c2;\n      b2.style.background = c2;\n      return b2;\n    };\n    const duoShadow = duoChip(\"Shadows\", \"#003087\");\n    const duoHighlight = duoChip(\"Highlights\", \"#00c5ff\");\n    const duoChips = el(\"span\", \"nsv2-fx-chips\");\n    duoChips.append(duoShadow, duoHighlight);\n    filterDuoRow.append(el(\"span\", \"nsv2-fx-color-label\", \"Colors\"), duoChips);\n    filterDuoRow.hidden = true;\n    const filterCtrls = el(\"div\", \"nsv2-filter-ctrls\");\n    filterCtrls.append(filterStrength.wrap, filterDuoRow);\n    filterCtrls.hidden = true;\n    filtersPane.append(filterCtrls);\n    const adjTemp = sliderRow(\"Temperature\", -100, 100, 1, 0);\n    const adjTint = sliderRow(\"Tint\", -100, 100, 1, 0);\n    const adjBri = sliderRow(\"Brightness\", -100, 100, 1, 0);\n    const adjCon = sliderRow(\"Contrast\", -100, 100, 1, 0);\n    const adjHi = sliderRow(\"Highlights\", -100, 100, 1, 0);\n    const adjSh = sliderRow(\"Shadows\", -100, 100, 1, 0);\n    const adjWh = sliderRow(\"Whites\", -100, 100, 1, 0);\n    const adjBl = sliderRow(\"Blacks\", -100, 100, 1, 0);\n    const adjVib = sliderRow(\"Vibrance\", -100, 100, 1, 0);\n    const adjSat = sliderRow(\"Saturation\", -100, 100, 1, 0);\n    const adjHue = sliderRow(\"Hue\", -100, 100, 1, 0);\n    const adjSharp = sliderRow(\"Sharpness\", -100, 100, 1, 0);\n    const adjClar = sliderRow(\"Clarity\", -100, 100, 1, 0);\n    const adjVig = sliderRow(\"Vignette\", -100, 100, 1, 0);\n    const adjBlur = sliderRow(\"Blur\", 0, 100, 1, 0);\n    const adjNoise = sliderRow(\"Noise\", 0, 100, 1, 0);\n    const adjPix = sliderRow(\"Pixelate\", 0, 100, 1, 0);\n    const adjInvertRow = el(\"div\", \"nsv2-fx-color-row nsv2-adj-invert\");\n    const adjInvert = el(\"button\", \"nsv2-enhance-toggle\");\n    adjInvert.type = \"button\";\n    adjInvert.setAttribute(\"aria-pressed\", \"false\");\n    adjInvertRow.append(el(\"span\", \"nsv2-fx-color-label\", \"Invert\"), adjInvert);\n    const adjReset = el(\"button\", \"nsv2-recolor-reset\", \"Reset adjustments\");\n    adjReset.type = \"button\";\n    adjustPane.append(\n      el(\"div\", \"nsv2-pane-label\", \"White balance\"),\n      adjTemp.wrap,\n      adjTint.wrap,\n      el(\"div\", \"nsv2-pane-label\", \"Light\"),\n      adjBri.wrap,\n      adjCon.wrap,\n      adjHi.wrap,\n      adjSh.wrap,\n      adjWh.wrap,\n      adjBl.wrap,\n      el(\"div\", \"nsv2-pane-label\", \"Color\"),\n      adjInvertRow,\n      adjVib.wrap,\n      adjSat.wrap,\n      adjHue.wrap,\n      el(\"div\", \"nsv2-pane-label\", \"Texture\"),\n      adjSharp.wrap,\n      adjClar.wrap,\n      adjVig.wrap,\n      adjBlur.wrap,\n      adjNoise.wrap,\n      adjPix.wrap,\n      adjReset\n    );\n    const gr2 = gridRange();\n    const gridSize = sliderRow(\"Grid size (\" + unit + \")\", gr2.min, gr2.max, gr2.step, gr2.def);\n    gridSize.wrap.classList.add(\"nsv2-grid-size-row\");\n    gridPop.append(gridToggleRow, gridSize.wrap);\n    const letterSp = sliderRow(\"Letter spacing\", -200, 800, 5, 0);\n    const lineSp = sliderRow(\"Line spacing\", 0.75, 2.5, 0.01, 1.16);\n    spop.append(letterSp.wrap, lineSp.wrap);\n    const radiusSp = sliderRow(\"Corner radius\", 0, 100, 1, 0);\n    rpop.append(radiusSp.wrap);\n    const lineSample = (dash, cap) => '<svg width=\"34\" height=\"12\" viewBox=\"0 0 34 12\" fill=\"none\"><path d=\"M3 6H31\" stroke=\"currentColor\" stroke-width=\"3\"' + (dash ? ' stroke-dasharray=\"' + dash + '\"' : \"\") + (cap ? ' stroke-linecap=\"round\"' : \"\") + \"/></svg>\";\n    const noneSample = '<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><circle cx=\"9\" cy=\"9\" r=\"7\" stroke=\"currentColor\" stroke-width=\"1.6\"/><path d=\"M4 14L14 4\" stroke=\"currentColor\" stroke-width=\"1.6\"/></svg>';\n    const miniTile = (ds2, label, inner) => {\n      const t2 = el(\n        \"button\",\n        \"nsv2-fx-tile nsv2-bstyle-tile\",\n        '<span class=\"nsv2-fx-box\">' + inner + '</span><span class=\"nsv2-fx-label\">' + label + \"</span>\"\n      );\n      t2.type = \"button\";\n      Object.assign(t2.dataset, ds2);\n      return t2;\n    };\n    const BSTYLES = [\n      [\"none\", \"None\", noneSample],\n      [\"solid\", \"Solid\", lineSample(\"\", false)],\n      [\"dashed\", \"Dashed\", lineSample(\"7 5\", false)],\n      [\"longdash\", \"Long dash\", lineSample(\"13 5\", false)],\n      [\"dotted\", \"Dotted\", lineSample(\"0.1 6\", true)]\n    ];\n    const borderStyleRow = el(\"div\", \"nsv2-bstyle-row\");\n    for (const [key, label, inner] of BSTYLES) borderStyleRow.appendChild(miniTile({ bstyle: key }, label, inner));\n    const borderWeight = sliderRow(\"Stroke weight\", 1, 100, 1, 12);\n    const borderCtrls = el(\"div\", \"nsv2-el-ctrls\");\n    borderCtrls.append(borderStyleRow, borderWeight.wrap);\n    borderPop.appendChild(borderCtrls);\n    const lnStyleRow = el(\"div\", \"nsv2-bstyle-row nsv2-bstyle-row--3\");\n    for (const [key, label, inner] of BSTYLES.slice(1)) lnStyleRow.appendChild(miniTile({ lnstyle: key }, label, inner));\n    const lnWeight = sliderRow(\"Weight\", 2, 30, 1, 9);\n    const lnStyleCtrls = el(\"div\", \"nsv2-el-ctrls\");\n    lnStyleCtrls.append(lnStyleRow, lnWeight.wrap);\n    lnStylePop.appendChild(lnStyleCtrls);\n    const capSample = (kind) => {\n      if (kind === \"none\") return lineSample(\"\", false);\n      let capSvg = \"\";\n      if (kind === \"arrow\") capSvg = '<path d=\"M31 6L21 1V11Z\" fill=\"currentColor\"/>';\n      if (kind === \"bar\") capSvg = '<path d=\"M30 1V11\" stroke=\"currentColor\" stroke-width=\"3\"/>';\n      if (kind === \"dot\") capSvg = '<circle cx=\"29\" cy=\"6\" r=\"4.5\" fill=\"currentColor\"/>';\n      return '<svg width=\"34\" height=\"12\" viewBox=\"0 0 34 12\" fill=\"none\"><path d=\"M3 6H' + (kind === \"none\" ? 31 : 24) + '\" stroke=\"currentColor\" stroke-width=\"3\"/>' + capSvg + \"</svg>\";\n    };\n    const CAPS = [[\"none\", \"None\"], [\"arrow\", \"Arrow\"], [\"bar\", \"Bar\"], [\"dot\", \"Dot\"]];\n    const capRow = (end) => {\n      const row = el(\"div\", \"nsv2-bstyle-row\");\n      for (const [key, label] of CAPS) row.appendChild(miniTile({ end, cap: key }, label, capSample(key)));\n      return row;\n    };\n    const lnCapStartRow = capRow(\"start\");\n    const lnCapEndRow = capRow(\"end\");\n    const lnEndsCtrls = el(\"div\", \"nsv2-el-ctrls\");\n    lnEndsCtrls.append(\n      el(\"div\", \"nsv2-pane-label\", \"Line start\"),\n      lnCapStartRow,\n      el(\"div\", \"nsv2-pane-label\", \"Line end\"),\n      lnCapEndRow\n    );\n    lnEndsPop.appendChild(lnEndsCtrls);\n    const outlinePane = el(\"div\", \"nsv2-pane\");\n    outlinePane.dataset.pane = \"outline\";\n    const outlineBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    outlineBackBtn.type = \"button\";\n    outlineBackBtn.title = \"Back\";\n    const outlineHead = el(\"div\", \"nsv2-pane-head\");\n    outlineHead.append(outlineBackBtn, el(\"div\", \"nsv2-pane-title\", \"Outline\"));\n    outlinePane.append(outlineHead);\n    panel.appendChild(outlinePane);\n    const fxSize = sliderRow(\"Thickness\", 0, 100, 1, 50);\n    fxSize.wrap.hidden = true;\n    const fxDir = sliderRow(\"Direction\", -180, 180, 1, 45);\n    fxDir.wrap.hidden = true;\n    const fxOff = sliderRow(\"Offset\", 0, 100, 1, 50);\n    fxOff.wrap.hidden = true;\n    const fxBlur = sliderRow(\"Blur\", 0, 100, 1, 0);\n    fxBlur.wrap.hidden = true;\n    const fxRound = sliderRow(\"Roundness\", 0, 100, 1, 22);\n    fxRound.wrap.hidden = true;\n    const fxSpread = sliderRow(\"Spread\", 0, 100, 1, 50);\n    fxSpread.wrap.hidden = true;\n    const fxTransp = sliderRow(\"Transparency\", 0, 100, 1, 100);\n    fxTransp.wrap.hidden = true;\n    fxControls.insertBefore(fxSize.wrap, fxColorRow);\n    fxControls.insertBefore(fxDir.wrap, fxColorRow);\n    fxControls.insertBefore(fxOff.wrap, fxColorRow);\n    fxControls.insertBefore(fxBlur.wrap, fxColorRow);\n    fxControls.insertBefore(fxRound.wrap, fxColorRow);\n    fxControls.insertBefore(fxSpread.wrap, fxColorRow);\n    fxControls.insertBefore(fxTransp.wrap, fxColorRow);\n    const cropPane = el(\"div\", \"nsv2-pane\");\n    cropPane.dataset.pane = \"crop\";\n    const cropBackBtn = el(\"button\", \"nsv2-icon-btn nsv2-pane-back\", icons.arrowLeft);\n    cropBackBtn.type = \"button\";\n    cropBackBtn.title = \"Cancel crop\";\n    const cropHead = el(\"div\", \"nsv2-pane-head\");\n    cropHead.append(cropBackBtn, el(\"div\", \"nsv2-pane-title\", \"Crop\"));\n    const CROP_RATIOS = [\n      [\"free\", \"Freeform\", 0],\n      [\"orig\", \"Original\", 0],\n      [\"1:1\", \"1:1\", 1],\n      [\"4:3\", \"4:3\", 4 / 3],\n      [\"3:4\", \"3:4\", 3 / 4],\n      [\"16:9\", \"16:9\", 16 / 9],\n      [\"9:16\", \"9:16\", 9 / 16]\n    ];\n    const cropRatios = el(\"div\", \"nsv2-crop-ratios nsv2-fx-tiles\");\n    for (const [key, label, ratio] of CROP_RATIOS) {\n      const w2 = ratio ? ratio >= 1 ? 24 : Math.round(24 * ratio) : 20;\n      const h2 = ratio ? ratio >= 1 ? Math.round(24 / ratio) : 24 : 20;\n      const tile = el(\n        \"button\",\n        \"nsv2-fx-tile nsv2-crop-tile\" + (key === \"free\" ? \" is-active\" : \"\"),\n        '<span class=\"nsv2-fx-box\"><span class=\"nsv2-crop-shape' + (key === \"free\" ? \" nsv2-crop-shape--free\" : \"\") + '\" style=\"width:' + w2 + \"px;height:\" + h2 + 'px\"></span></span><span class=\"nsv2-fx-label\">' + label + \"</span>\"\n      );\n      tile.type = \"button\";\n      tile.dataset.ratio = key;\n      cropRatios.appendChild(tile);\n    }\n    const cropScale = sliderRow(\"Scale\", 10, 300, 1, 100);\n    const cropRotate = sliderRow(\"Rotate\", -180, 180, 0.5, 0);\n    const cropRotateReset = el(\"button\", \"nsv2-crop-reset\", \"Reset\");\n    cropRotateReset.type = \"button\";\n    cropRotate.wrap.querySelector(\".nsv2-fx-curve\").appendChild(cropRotateReset);\n    cropPane.append(cropHead, el(\"div\", \"nsv2-pane-label\", \"Aspect ratio\"), cropRatios, cropScale.wrap, cropRotate.wrap);\n    panel.appendChild(cropPane);\n    panel.append(borderPane, endsPane, lnStylePane);\n    const menu = el(\"div\", \"nsv2-menu\");\n    menu.hidden = true;\n    const menuItem = (act, icon, label, kbd) => {\n      const b2 = el(\n        \"button\",\n        \"nsv2-menu-item\",\n        '<span class=\"nsv2-menu-lab\">' + icon + \"<span>\" + label + \"</span></span>\" + (kbd ? \"<kbd>\" + kbd + \"</kbd>\" : \"\")\n      );\n      b2.type = \"button\";\n      b2.dataset.act = act;\n      return b2;\n    };\n    const menuCopy = menuItem(\"copy\", icons.copy, \"Copy\", \"\\u2318C\");\n    const menuPaste = menuItem(\"paste\", icons.clipboard, \"Paste\", \"\\u2318V\");\n    const menuDup = menuItem(\"duplicate\", icons.duplicate, \"Duplicate\", \"\\u2318D\");\n    const menuGroup = menuItem(\"group\", icons.group, \"Group\", \"\\u2318G\");\n    const menuUngroup = menuItem(\"ungroup\", icons.ungroup, \"Ungroup\", \"\\u2318\\u21E7G\");\n    const menuDel = menuItem(\"delete\", icons.trash, \"Delete\", \"DELETE\");\n    const alignWrap = el(\"div\", \"nsv2-menu-sub\");\n    const alignBtnRow = el(\n      \"button\",\n      \"nsv2-menu-item\",\n      '<span class=\"nsv2-menu-lab\">' + icons.alignPage + \"<span>Align to page</span></span>\" + icons.chevronRight\n    );\n    alignBtnRow.type = \"button\";\n    const alignMenu = el(\"div\", \"nsv2-menu nsv2-menu--sub\");\n    alignMenu.append(\n      menuItem(\"align:left\", icons.alignLeft, \"Left\"),\n      menuItem(\"align:centerH\", icons.alignCenter, \"Center\"),\n      menuItem(\"align:right\", icons.alignRight, \"Right\"),\n      el(\"div\", \"nsv2-menu-div\"),\n      menuItem(\"align:top\", icons.arrowUp, \"Top\"),\n      menuItem(\"align:middle\", icons.alignCenter, \"Middle\"),\n      menuItem(\"align:bottom\", icons.arrowDown, \"Bottom\")\n    );\n    alignWrap.append(alignBtnRow, alignMenu);\n    const menuLock = menuItem(\"lock\", icons.lock, \"Lock\");\n    menu.append(\n      menuCopy,\n      menuPaste,\n      menuDup,\n      menuGroup,\n      menuUngroup,\n      menuLock,\n      menuDel,\n      el(\"div\", \"nsv2-menu-div\"),\n      menuItem(\"layer:front\", icons.arrowUp, \"Bring to Front\", \"\\u21E7]\"),\n      menuItem(\"layer:up\", icons.arrowUp, \"Bring Forward\", \"]\"),\n      menuItem(\"layer:down\", icons.arrowDown, \"Send Backward\", \"[\"),\n      menuItem(\"layer:back\", icons.arrowDown, \"Send to Back\", \"\\u21E7[\"),\n      el(\"div\", \"nsv2-menu-div\"),\n      menuItem(\"flip:h\", icons.flipH, \"Flip Horizontal\", \"\\u21E7H\"),\n      menuItem(\"flip:v\", icons.flipV, \"Flip Vertical\", \"\\u21E7V\"),\n      el(\"div\", \"nsv2-menu-div\"),\n      alignWrap\n    );\n    const zoom = el(\"div\", \"nsv2-zoom\");\n    const boardScroll = el(\"div\", \"nsv2-scroll\");\n    boardScroll.appendChild(board);\n    const rulerX = el(\"canvas\", \"nsv2-ruler nsv2-ruler-x\");\n    const rulerY = el(\"canvas\", \"nsv2-ruler nsv2-ruler-y\");\n    const rulerCorner = el(\"div\", \"nsv2-ruler nsv2-ruler-corner\");\n    rulerX.hidden = rulerY.hidden = rulerCorner.hidden = true;\n    const aiDrawer = el(\"aside\", \"nsv2-ai-drawer\");\n    aiDrawer.hidden = true;\n    aiDrawer.setAttribute(\"aria-label\", \"AI assistant\");\n    aiDrawer.tabIndex = -1;\n    const aiHead = el(\"div\", \"nsv2-ai-head\");\n    const aiTitle = el(\"div\", \"nsv2-pane-title nsv2-ai-title\", \"Edit with AI\");\n    const aiClose = el(\"button\", \"nsv2-icon-btn nsv2-ai-close\", icons.close);\n    aiClose.type = \"button\";\n    aiClose.title = \"Close\";\n    aiHead.append(aiTitle, aiClose);\n    const aiThread = el(\"div\", \"nsv2-ai-thread\");\n    const aiFoot = el(\"div\", \"nsv2-ai-foot\");\n    const aiBasis = el(\"div\", \"nsv2-ai-basis\");\n    aiBasis.hidden = true;\n    const aiFootErr = el(\"div\", \"nsv2-ai-foot-err\");\n    aiFootErr.hidden = true;\n    const aiComposer = el(\"div\", \"nsv2-ai-composer\");\n    const aiInput = el(\"textarea\", \"nsv2-ai-input\");\n    aiInput.placeholder = \"Describe what you want to change\";\n    aiInput.rows = 2;\n    const aiSend = el(\"button\", \"nsv2-ai-send\", icons.arrowUp);\n    aiSend.type = \"button\";\n    aiSend.title = \"Send\";\n    aiSend.setAttribute(\"aria-label\", \"Send\");\n    const aiStop = el(\"button\", \"nsv2-ai-send nsv2-ai-stop\", '<span class=\"nsv2-ai-stop-sq\"></span>');\n    aiStop.type = \"button\";\n    aiStop.title = \"Stop\";\n    aiStop.hidden = true;\n    aiComposer.append(aiInput, aiSend, aiStop);\n    aiFoot.append(aiBasis, aiFootErr, aiComposer);\n    aiDrawer.append(aiHead, aiThread, aiFoot);\n    area.append(ctxbar, bgAlert, fitAlert, toast, ctxMorePanel, boardScroll, rulerX, rulerY, rulerCorner, qa2, rotKnob, menu, spop, rpop, gridPop, borderPop, lnStylePop, lnEndsPop, cropBar, zoom);\n    const body = el(\"div\", \"nsv2-body\");\n    body.append(rail, panel, aiDrawer, area);\n    root.append(topbar, body);\n    host.appendChild(root);\n    return {\n      root,\n      topbar,\n      undoBtn,\n      redoBtn,\n      useBtn,\n      useModal,\n      useCard,\n      useClose,\n      useGrid,\n      useBusy,\n      designNameInput,\n      savePop,\n      saveUpdateBtn,\n      saveNewBtn,\n      saveWrap,\n      saveBtn,\n      topVdiv,\n      homeBtn,\n      sizeW,\n      sizeH,\n      sizeSel,\n      sizeCustom,\n      canvasSizeWrap,\n      canvasSizeLabel,\n      canvasSizeVdiv,\n      bgBtn,\n      bgSwatch,\n      bgColorInput,\n      bgClear,\n      bgWarn,\n      bgAlert,\n      fitAlert,\n      toast,\n      toastMsg,\n      toastAct,\n      toastX,\n      fitAlertMsg,\n      fitAlertAct,\n      fitAlertX,\n      fileBtn,\n      fileMenu,\n      fileWrap,\n      fileNew,\n      fileOpen,\n      fileSave,\n      fileSaveAs,\n      fileDup,\n      fileOutlineMode,\n      fileSignIn,\n      fileBuild,\n      rail,\n      toolBtns,\n      panel,\n      panelClose,\n      textPane,\n      addTextBtn,\n      treatmentTiles,\n      fontsPane,\n      fontsBackBtn,\n      fontSearch,\n      fontCats,\n      fontList,\n      uploadsPane,\n      dropzone,\n      fileInput,\n      uploadBusy,\n      driveBtn,\n      phoneBtn,\n      myFilesLabel,\n      myFilesGrid,\n      uploadsSignin,\n      uploadsSigninBtn,\n      designsPane,\n      designsEmpty,\n      designsGrid,\n      designsTabs,\n      designsTabSaved,\n      designsTabExports,\n      designsSavedGrid,\n      premadePane,\n      premadeBody,\n      elementsPane,\n      elementTiles,\n      elementLineTiles,\n      elementLinesLabel,\n      layersPane,\n      layersList,\n      layersEmpty,\n      effectsPane,\n      fxBackBtn,\n      fxTitle,\n      fxTiles,\n      shapeTiles,\n      fxControls,\n      fxColorRow,\n      fxColorInput,\n      fxSize,\n      fxDir,\n      fxOff,\n      fxBlur,\n      fxRound,\n      fxSpread,\n      fxTransp,\n      fxCurveRow,\n      fxCurveRange,\n      fxCurveVal,\n      fxColorChip,\n      fxColorChip2,\n      fxColorLabel,\n      fxColorPop,\n      fxPopCustom,\n      fxPopDropper,\n      fxPopCurrent,\n      fxDesignLabel,\n      fxDesignGrid,\n      fxDefaultGrid,\n      bgrPane,\n      bgrBackBtn,\n      bgrTiles,\n      filtersPane,\n      filtersBackBtn,\n      filtersTitle,\n      filterTiles,\n      filterStrength,\n      filterCtrls,\n      filterDuoRow,\n      duoShadow,\n      duoHighlight,\n      adjustPane,\n      adjustBackBtn,\n      adjTemp,\n      adjTint,\n      adjBri,\n      adjCon,\n      adjHi,\n      adjSh,\n      adjWh,\n      adjBl,\n      adjVib,\n      adjSat,\n      adjHue,\n      adjSharp,\n      adjClar,\n      adjVig,\n      adjBlur,\n      adjNoise,\n      adjPix,\n      adjInvert,\n      adjReset,\n      upscaleBtn,\n      aiDrawer,\n      aiTitle,\n      aiClose,\n      aiThread,\n      aiBasis,\n      aiFootErr,\n      aiComposer,\n      aiInput,\n      aiSend,\n      aiStop,\n      canvasPane,\n      formatPane,\n      spacingPane,\n      spacingChip,\n      nudgePane,\n      nudgeChip,\n      ctxNudgeGroup,\n      nudgeBtns,\n      shapePane,\n      shapeChip,\n      fmtCluster,\n      fmtChip,\n      makeRange,\n      sliderRow,\n      dlgModal,\n      dlgMsg,\n      dlgInput,\n      dlgCancel,\n      dlgAlt,\n      dlgOk,\n      recolorPane,\n      recolorBackBtn,\n      recolorSrcRow,\n      recolorToLabel,\n      recolorToolsRow,\n      recolorGrid,\n      recolorAllGrid,\n      recolorSeeAll,\n      recolorDesignLabel,\n      recolorDesignGrid,\n      recolorTransparent,\n      recolorCurrent,\n      recolorDropperBtn,\n      recolorCustomBtn,\n      recolorCustomInput,\n      recolorResetBtn,\n      colorPane,\n      colorBackBtn,\n      colorTitle,\n      colorSearch,\n      colorMsg,\n      colorMain,\n      customColorBtn,\n      customColorInput,\n      dropperBtn,\n      currentSwatch,\n      colorNoFill,\n      colorToolsLabel,\n      designLabel,\n      designGrid,\n      seeAllBtn,\n      allGrid,\n      gradGrid,\n      gradEdit,\n      gradsLabel,\n      gradStopA,\n      gradInputA,\n      gradStopB,\n      gradInputB,\n      gradAngle,\n      gradAngleVal,\n      area,\n      ctxbar,\n      ctxTextGroup,\n      ctxImageGroup,\n      ctxSelGroup,\n      ctxCanvasGroup,\n      ctxTail,\n      alignBtns,\n      distBtns,\n      fontBtn,\n      sizeDown,\n      sizeVal,\n      sizeUp,\n      colorBtn,\n      ctxShapeGroup,\n      ctxLineGroup,\n      elFillBtn,\n      elBorderBtn,\n      elBorderColorBtn,\n      imgOutlineColorBtn,\n      elRoundBtn,\n      elFlipHBtn,\n      elFlipVBtn,\n      lnColorBtn,\n      lnStyleBtn,\n      lnEndsBtn,\n      borderPop,\n      lnStylePop,\n      lnEndsPop,\n      borderPane,\n      endsPane,\n      lnStylePane,\n      borderCtrls,\n      borderStyleRow,\n      borderWeight,\n      lnStyleCtrls,\n      lnStyleRow,\n      lnWeight,\n      lnEndsCtrls,\n      lnCapStartRow,\n      lnCapEndRow,\n      boldBtn,\n      italicBtn,\n      underlineBtn,\n      strikeBtn,\n      caseBtn,\n      bulletsBtn,\n      alignBtn,\n      spacingBtn,\n      effectsBtn,\n      removeBgBtn,\n      deleteBtn,\n      editTextChip,\n      menuLock,\n      qaLock,\n      sizeWrap,\n      spop,\n      letterSp,\n      lineSp,\n      rpop,\n      radiusSp,\n      stickerBtn,\n      adjustBtn,\n      outlinePane,\n      outlineBackBtn,\n      gridBtn,\n      rulerBtn,\n      gridPop,\n      gridToggle,\n      gridSize,\n      rulerX,\n      rulerY,\n      rulerCorner,\n      rotKnob,\n      cropPane,\n      cropBackBtn,\n      cropRatios,\n      cropScale,\n      cropRotate,\n      cropRotateReset,\n      aiEditBtn,\n      cropBtn,\n      radiusBtn,\n      colorReplaceBtn,\n      filtersBtn,\n      revertBtn,\n      cropBar,\n      cropApplyBtn,\n      cropCancelBtn,\n      ctxMoreBtn,\n      ctxMorePanel,\n      board,\n      boardScroll,\n      canvasEl,\n      zoom,\n      qa: qa2,\n      qaAi,\n      qaDown,\n      qaUp,\n      qaDup,\n      qaDel,\n      qaMore,\n      menu,\n      menuCopy,\n      menuPaste,\n      menuDup,\n      menuDel,\n      menuGroup,\n      menuUngroup,\n      alignWrap\n    };\n  }\n\n  // src/output.js\n  var EXPORT_PX = 22 * 300;\n  var RENDER_W = 4e3;\n  var DISPLAY_W = 2e3;\n  function printVariant(url) {\n    const u2 = String(url || \"\");\n    if (!/^https?:/.test(u2) || u2.indexOf(cfg.imgixHost) === -1) return u2;\n    return u2.replace(/([?&]w=)2000(?=&|$)/, \"$1\" + RENDER_W);\n  }\n  function hostedDisplayUrl(url) {\n    const bare = url.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost);\n    return bare + \"?fm=png&fit=max&w=\" + DISPLAY_W;\n  }\n  var CRC_TABLE = null;\n  function crcTable() {\n    if (CRC_TABLE) return CRC_TABLE;\n    CRC_TABLE = new Int32Array(256);\n    for (let n2 = 0; n2 < 256; n2++) {\n      let c2 = n2;\n      for (let k2 = 0; k2 < 8; k2++) c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1;\n      CRC_TABLE[n2] = c2;\n    }\n    return CRC_TABLE;\n  }\n  async function crc32Blob(blob) {\n    const table = crcTable();\n    const bytes = new Uint8Array(await blob.arrayBuffer());\n    let c2 = -1;\n    for (let i2 = 0; i2 < bytes.length; i2++) c2 = c2 >>> 8 ^ table[(c2 ^ bytes[i2]) & 255];\n    return (c2 ^ -1) >>> 0;\n  }\n  async function getPresignedUploadUrl(fileName, fileType) {\n    const res = await fetch(\n      cfg.apiUrl + \"/uploads/getPresignedUploadUrl?file_name=\" + encodeURIComponent(fileName) + \"&file_type=\" + encodeURIComponent(fileType)\n    );\n    if (!res.ok) throw new Error(\"presign request failed: \" + res.status);\n    return res.json();\n  }\n  async function uploadBlobAs(fileName, blob, fileType) {\n    const presign = await getPresignedUploadUrl(fileName, fileType);\n    if (!presign || !presign.url || !presign.sourceUrl) throw new Error(\"Invalid presigned URL response\");\n    const put = await fetch(presign.url, { method: \"PUT\", headers: { \"Content-Type\": fileType }, body: blob });\n    if (!put.ok) throw new Error(\"Upload failed\");\n    return {\n      fileName,\n      s3Url: presign.sourceUrl,\n      imgixUrl: presign.sourceUrl.split(cfg.s3Host).join(cfg.imgixHost)\n    };\n  }\n  async function uploadFileToS3(file) {\n    const safe = (file.name || \"upload.png\").replace(/[^A-Za-z0-9._-]+/g, \"_\").slice(-60);\n    const fileName = \"studio-upload-\" + Date.now() + \"-\" + Math.floor(Math.random() * 1e4) + \"-\" + safe;\n    const up = await uploadBlobAs(fileName, file, file.type || \"image/png\");\n    rememberSourceFile(up.imgixUrl, file, fileName);\n    return up;\n  }\n  var sourceFiles = /* @__PURE__ */ new Map();\n  function rememberSourceFile(url, file, fileName) {\n    try {\n      const bare = String(url || \"\").split(\"?\")[0];\n      if (!bare || !file) return;\n      sourceFiles.delete(bare);\n      sourceFiles.set(bare, new File([file], fileName, { type: file.type || \"image/png\" }));\n      while (sourceFiles.size > 16) sourceFiles.delete(sourceFiles.keys().next().value);\n    } catch (e24) {\n    }\n  }\n  var sourceFileFor = (url) => sourceFiles.get(String(url || \"\").split(\"?\")[0]) || null;\n  async function registerUpload(customerId, { url, fileName, crc, variantTitle, gangsheet = false }) {\n    const res = await fetch(cfg.apiUrl + \"/uploads/saveData\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify([\n        {\n          variant_title: variantTitle || \"\",\n          file: url,\n          customer_id: String(customerId),\n          file_name: fileName,\n          file_crc: String(crc || 0),\n          product_id: \"\",\n          gangsheet\n        }\n      ])\n    });\n    if (!res.ok) throw new Error(\"saveData failed: \" + res.status + \" \" + (await res.text()).slice(0, 120));\n  }\n  async function fetchUploadedFiles(customerId) {\n    const res = await fetch(\n      cfg.apiUrl + \"/uploads/fetchDataNew?customer_id=\" + encodeURIComponent(customerId) + \"&archived=true&gangsheet=false\"\n    );\n    if (!res.ok) throw new Error(\"fetchDataNew failed: \" + res.status);\n    const json = await res.json();\n    const rows = Array.isArray(json) ? json : json && json.data || [];\n    return rows.filter((it2) => it2 && it2.file && !(it2.archived === true || it2.archived === \"true\")).map((it2) => ({\n      url: it2.file,\n      name: it2.file_name || \"\",\n      gangsheet: it2.gangsheet === true || it2.gangsheet === \"true\",\n      photoId: it2.photo_id != null ? it2.photo_id : null\n      // archiveData needs it (overwrite flow)\n    }));\n  }\n  async function archiveUpload(customerId, photoId) {\n    if (cfg.archive === \"none\") return null;\n    const res = await fetch(\n      cfg.apiUrl + \"/uploads/archiveData?customer_id=\" + encodeURIComponent(customerId) + \"&photo_id=\" + encodeURIComponent(photoId)\n    );\n    if (!res.ok) throw new Error(\"archiveData failed: \" + res.status);\n  }\n  var PRINT_DPI_LADDER = [300, 200];\n  async function exportPrintBlob(editor, targetPx) {\n    const wIn = editor.designWIn || 22;\n    const hIn = editor.designHIn || 22;\n    let lastErr = null;\n    const widths = (targetPx > 0 ? [Math.round(targetPx)] : []).concat(PRINT_DPI_LADDER.map((dpi) => Math.round(wIn * dpi)));\n    for (const px of widths) {\n      const dpi = Math.round(px / wIn);\n      try {\n        const blob = await editor.exportPng(px);\n        if (blob && blob.size > 0) return { blob, dpi, px, wIn, hIn };\n        lastErr = new Error(\"empty export at \" + dpi + \" dpi\");\n      } catch (err) {\n        lastErr = err;\n      }\n      console.warn(\"studio-v2: print export failed at \" + dpi + \" dpi\", lastErr && lastErr.message);\n    }\n    throw lastErr || new Error(\"print export failed\");\n  }\n  async function exportAndUpload(editor, opts = {}) {\n    const { blob, px, wIn, hIn } = await exportPrintBlob(editor, opts.targetPx);\n    const fileName = \"design-studio-\" + Date.now() + \"-\" + Math.floor(Math.random() * 1e4) + \".png\";\n    const fileType = \"image/png\";\n    const presign = await getPresignedUploadUrl(fileName, fileType);\n    if (!presign || !presign.url || !presign.sourceUrl) throw new Error(\"Invalid presigned URL response\");\n    const put = await fetch(presign.url, { method: \"PUT\", headers: { \"Content-Type\": fileType }, body: blob });\n    if (!put.ok) throw new Error(\"Upload failed\");\n    const crc = await crc32Blob(blob);\n    if (opts.customerId) {\n      try {\n        await registerUpload(opts.customerId, {\n          url: presign.sourceUrl,\n          fileName,\n          crc,\n          // the board's inches; customer sizes the print later\n          variantTitle: wIn + \"x\" + hIn\n        });\n      } catch (err) {\n        console.error(\"studio-v2: saveData failed\", err);\n      }\n    }\n    const objs = editor.canvas && editor.canvas.getObjects() || [];\n    const aiFlags = (objs.some((o2) => o2.__aiEdit) ? \"&ai_edit=Y\" : \"\") + (objs.some((o2) => o2.__aiCreated) ? \"&ai_created=Y\" : \"\");\n    return {\n      url: presign.sourceUrl,\n      imgixUrl: presign.sourceUrl.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost),\n      // the hosted twin (by-size file records carry both)\n      fileName,\n      crc,\n      exportPx: px,\n      // the board width actually rendered (targetPx, or a dpi-ladder fallback)\n      handoffQuery: \"?file=\" + encodeURIComponent(presign.sourceUrl) + \"&_design_studio=Yes\" + aiFlags\n    };\n  }\n\n  // src/persistence.js\n  var SAVE_MARKER = \"design-studio-save-\";\n  var SAVE_NAME_RE = /^design-studio-save-(\\d+)-/;\n  var STATE_MARKER = \"design-studio-state-\";\n  var STATE_NAME_RE = /^design-studio-state-(\\d+)-/;\n  var EXPORT_NAME_RE = /^design-studio-(\\d+)-/;\n  function isStudioSave(nameOrUrl) {\n    const base = String(nameOrUrl || \"\").split(\"?\")[0].split(\"/\").pop();\n    return base.indexOf(SAVE_MARKER) === 0 || base.indexOf(STATE_MARKER) === 0;\n  }\n  function savedNameRe(fileName) {\n    const n2 = String(fileName || \"\");\n    return SAVE_NAME_RE.test(n2) ? SAVE_NAME_RE : STATE_NAME_RE.test(n2) ? STATE_NAME_RE : null;\n  }\n  function stateUrlFor(previewUrl) {\n    return previewUrl.split(\"?\")[0].split(cfg.imgixHost).join(cfg.s3Host).replace(/\\.png$/i, \".json\");\n  }\n  function accountRegistry(customerId) {\n    if (!customerId) return null;\n    return {\n      register: (info) => registerUpload(customerId, {\n        url: info.url,\n        fileName: info.fileName,\n        crc: info.crc,\n        variantTitle: info.variantTitle\n      }),\n      list: () => fetchUploadedFiles(customerId),\n      // Retire one save's row by file name (overwrite flow). photo_id comes off\n      // a fresh list \u2014 rows in hand may predate this row's registration.\n      archive: async (fileName) => {\n        const row = (await fetchUploadedFiles(customerId)).find((r2) => r2.name === fileName);\n        if (row && row.photoId != null) await archiveUpload(customerId, row.photoId);\n      }\n    };\n  }\n  var NAME_SLUG_RE = /--([a-z0-9-]+)\\.(?:png|json)$/i;\n  function nameSlug(name) {\n    return String(name || \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 40);\n  }\n  function nameFromFileName(fileName) {\n    const m = NAME_SLUG_RE.exec(String(fileName || \"\").split(\"?\")[0]);\n    if (!m) return \"\";\n    return m[1].replace(/-/g, \" \").replace(/\\b\\w/g, (c2) => c2.toUpperCase());\n  }\n  async function migrateBlobImages(editor) {\n    for (const o2 of editor.canvas.getObjects()) {\n      if (!o2.isType || !o2.isType(\"image\")) continue;\n      const orig = o2.__originalSrc || \"\";\n      if (!orig.startsWith(\"blob:\")) continue;\n      let bare;\n      if (o2.__bgr && o2.__bgr.status === \"ready\" && o2.__bgr.imgixUrl) {\n        bare = o2.__bgr.imgixUrl;\n      } else {\n        const blob = await (await fetch(orig)).blob();\n        const up = await uploadFileToS3(\n          new File([blob], o2.__fileName || \"image.png\", { type: blob.type || \"image/png\" })\n        );\n        if (o2.__bgr) {\n          o2.__bgr.status = \"ready\";\n          o2.__bgr.imgixUrl = up.imgixUrl;\n          o2.__bgr.fileName = up.fileName;\n        }\n        bare = up.imgixUrl;\n      }\n      const display = hostedDisplayUrl(bare);\n      const el2 = o2._element;\n      const canvasBacked = el2 && el2.tagName === \"CANVAS\";\n      if (!canvasBacked) await editor.replaceImageSource(o2, display);\n      o2.__originalSrc = display;\n    }\n  }\n  async function uploadDesignArtifacts(editor, { name, onState }) {\n    await migrateBlobImages(editor);\n    const data = JSON.parse(editor.designJSON());\n    data.__studio = { v: 1, savedAt: Date.now(), name: name || \"\" };\n    const slug = nameSlug(name);\n    const base = SAVE_MARKER + Date.now() + \"-\" + Math.floor(Math.random() * 1e4) + (slug ? \"--\" + slug : \"\");\n    const stateBlob = new Blob([JSON.stringify(data)], { type: \"application/json\" });\n    const st2 = await uploadBlobAs(base + \".json\", stateBlob, \"application/json\");\n    if (typeof onState === \"function\") {\n      try {\n        onState({ fileName: base + \".png\", stateUrl: st2.s3Url });\n      } catch (e24) {\n      }\n    }\n    const { blob: printBlob } = await exportPrintBlob(editor);\n    const pv = await uploadBlobAs(base + \".png\", printBlob, \"image/png\");\n    return {\n      fileName: base + \".png\",\n      stateUrl: st2.s3Url,\n      previewUrl: pv.s3Url,\n      crc: await crc32Blob(printBlob),\n      variantTitle: editor.designWIn + \"x\" + editor.designHIn,\n      name: name || \"\"\n    };\n  }\n  async function registerParked(registry, parked) {\n    if (!registry) throw new Error(\"no design registry (signed out?)\");\n    await registry.register({\n      url: parked.previewUrl,\n      fileName: parked.fileName,\n      crc: parked.crc,\n      variantTitle: parked.variantTitle || \"\"\n    });\n  }\n  async function saveDesign(editor, { registry, name, prevFileName, onState }) {\n    if (!registry) throw new Error(\"no design registry (signed out?)\");\n    const art = await uploadDesignArtifacts(editor, { name, onState });\n    const base = art.fileName.replace(/\\.png$/, \"\");\n    const st2 = { s3Url: art.stateUrl };\n    const pv = { s3Url: art.previewUrl };\n    await registry.register({\n      url: pv.s3Url,\n      fileName: base + \".png\",\n      crc: art.crc,\n      variantTitle: art.variantTitle\n    });\n    if (prevFileName && prevFileName !== base + \".png\" && registry.archive) {\n      try {\n        await registry.archive(prevFileName);\n      } catch (err) {\n        console.warn(\"studio-v2: previous save not archived (duplicate tile may remain)\", err);\n      }\n    }\n    return { fileName: base + \".png\", stateUrl: st2.s3Url, previewUrl: pv.s3Url };\n  }\n  async function duplicateDesign(registry, previewUrl) {\n    if (!registry) throw new Error(\"no design registry (signed out?)\");\n    const bare = previewUrl.split(\"?\")[0];\n    const data = await (await fetch(stateUrlFor(bare))).json();\n    const name = ((data.__studio && data.__studio.name || \"Untitled Design\") + \" Copy\").slice(0, 60);\n    data.__studio = Object.assign({ v: 1 }, data.__studio, { savedAt: Date.now(), name });\n    const slug = nameSlug(name);\n    const legacy = STATE_NAME_RE.test(bare.split(\"/\").pop());\n    const base = (legacy ? STATE_MARKER : SAVE_MARKER) + Date.now() + \"-\" + Math.floor(Math.random() * 1e4) + (slug ? \"--\" + slug : \"\");\n    const stateBlob = new Blob([JSON.stringify(data)], { type: \"application/json\" });\n    const previewBlob = await (await fetch(bare.split(cfg.imgixHost).join(cfg.s3Host))).blob();\n    const st2 = await uploadBlobAs(base + \".json\", stateBlob, \"application/json\");\n    const pv = await uploadBlobAs(base + \".png\", previewBlob, \"image/png\");\n    await registry.register({\n      url: pv.s3Url,\n      fileName: base + \".png\",\n      crc: await crc32Blob(previewBlob),\n      variantTitle: \"\"\n    });\n    return { fileName: base + \".png\", stateUrl: st2.s3Url, previewUrl: pv.s3Url, name };\n  }\n  function fontFamiliesIn(data) {\n    const fams = /* @__PURE__ */ new Set();\n    const re2 = /\"fontFamily\"\\s*:\\s*\"([^\"]+)\"/g;\n    const raw = JSON.stringify(data);\n    let m;\n    while (m = re2.exec(raw)) fams.add(m[1]);\n    return [...fams];\n  }\n  async function loadDesignData(editor, data) {\n    await Promise.all(fontFamiliesIn(data).map((f2) => loadFont(f2).catch(() => {\n    })));\n    await editor.loadDesign(data);\n  }\n  async function loadDesignFromUrl(editor, stateUrl, prepare) {\n    const res = await fetch(stateUrl);\n    if (!res.ok) throw new Error(\"design state fetch failed: \" + res.status);\n    const data = await res.json();\n    await loadDesignData(editor, prepare ? prepare(data) : data);\n    const meta = data.__studio || {};\n    const fileName = stateUrl.split(\"?\")[0].split(\"/\").pop().replace(/\\.json$/i, \".png\");\n    return { name: meta.name || nameFromFileName(fileName), savedAt: meta.savedAt || null, fileName };\n  }\n\n  // src/ndl-data.js\n  var NDL_CATS = [{ \"name\": \"Trending\", \"page\": \"/pages/trending-ready-to-press-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Trending.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Football\", \"h\": \"football-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/football-mama-watercolor-artninja-transfers-644668.jpg?auto=format,compress&w=400\", \"n\": 47 }, { \"t\": \"Viral\", \"h\": \"viral-designs-for-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/NT.RTPTemplate_Busy_LockedIn.jpg?auto=format,compress&w=400\", \"n\": 5 }, { \"t\": \"Baseball\", \"h\": \"baseball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/no-place-like-homeninja-transfers-174500.jpg?auto=format,compress&w=400\", \"n\": 43 }, { \"t\": \"Cat\", \"h\": \"cat-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/cat-lady-for-lifeninja-transfers-229839.jpg?auto=format,compress&w=400\", \"n\": 51 }, { \"t\": \"Military & Veteran\", \"h\": \"military-veteran-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/proud-veteran-us-mapninja-transfers-710919.jpg?auto=format,compress&w=400\", \"n\": 29 }, { \"t\": \"Dog\", \"h\": \"dog-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/if-my-dogs-cant-come-im-not-goingninja-transfers-964808.jpg?auto=format,compress&w=400\", \"n\": 99 }] }, { \"name\": \"Sports\", \"page\": \"/pages/sports-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Sports.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Football\", \"h\": \"football-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/football-mama-watercolor-artninja-transfers-644668.jpg?auto=format,compress&w=400\", \"n\": 47 }, { \"t\": \"Basketball\", \"h\": \"basketball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/BasketballMamaWatercolor.jpg?auto=format,compress&w=400\", \"n\": 72 }, { \"t\": \"Soccer\", \"h\": \"soccer-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/soccer-mom-galaxyninja-transfers-264109.jpg?auto=format,compress&w=400\", \"n\": 66 }, { \"t\": \"Baseball\", \"h\": \"baseball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/no-place-like-homeninja-transfers-174500.jpg?auto=format,compress&w=400\", \"n\": 43 }, { \"t\": \"Hockey\", \"h\": \"hockey-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/goal-getterninja-transfers-117709.jpg?auto=format,compress&w=400\", \"n\": 20 }, { \"t\": \"Tennis\", \"h\": \"tennis-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/live-love-tennisninja-transfers-689118.jpg?auto=format,compress&w=400\", \"n\": 39 }, { \"t\": \"Volleyball\", \"h\": \"volleyball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/in-my-volleyball-era-graffitininja-transfers-951746.jpg?auto=format,compress&w=400\", \"n\": 39 }, { \"t\": \"Cheerleading\", \"h\": \"cheerleading-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/cheerninja-transfers-875169.jpg?auto=format,compress&w=400\", \"n\": 17 }, { \"t\": \"Softball\", \"h\": \"softball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/dripping-softballninja-transfers-207902.jpg?auto=format,compress&w=400\", \"n\": 33 }, { \"t\": \"Field Hockey\", \"h\": \"field-hockey-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/field-hockeyninja-transfers-277467.jpg?auto=format,compress&w=400\", \"n\": 19 }, { \"t\": \"Golf\", \"h\": \"golf-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/golfninja-transfers-533058.jpg?auto=format,compress&w=400\", \"n\": 21 }, { \"t\": \"Boxing\", \"h\": \"boxing-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/boxing-blueninja-transfers-882417.jpg?auto=format,compress&w=400\", \"n\": 11 }, { \"t\": \"Swimming\", \"h\": \"swimming-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/swimming-is-lifeninja-transfers-156104.jpg?auto=format,compress&w=400\", \"n\": 9 }, { \"t\": \"Bowling\", \"h\": \"bowling-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/id-hit-thatninja-transfers-799611.jpg?auto=format,compress&w=400\", \"n\": 21 }, { \"t\": \"Wrestling\", \"h\": \"wrestling-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/loud-and-proud-wrestling-momninja-transfers-605544.jpg?auto=format,compress&w=400\", \"n\": 21 }, { \"t\": \"Lacrosse\", \"h\": \"lacrosse-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/lacrosse-momninja-transfers-584122.jpg?auto=format,compress&w=400\", \"n\": 18 }, { \"t\": \"Surf\", \"h\": \"surf-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/life-is-swell-when-you-surfninja-transfers-253868.jpg?auto=format,compress&w=400\", \"n\": 22 }, { \"t\": \"Skiing\", \"h\": \"skiing-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/ski-legendninja-transfers-689703.jpg?auto=format,compress&w=400\", \"n\": 16 }, { \"t\": \"Cycling\", \"h\": \"cycling-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/just-enjoy-the-rideninja-transfers-553877.jpg?auto=format,compress&w=400\", \"n\": 11 }, { \"t\": \"Disc Golf\", \"h\": \"disc-golf-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/disc-golf-evolutionninja-transfers-356425.jpg?auto=format,compress&w=400\", \"n\": 12 }, { \"t\": \"Archery\", \"h\": \"archery-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Archerymom.jpg?auto=format,compress&w=400\", \"n\": 10 }, { \"t\": \"Pickleball\", \"h\": \"pickleball-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/pickleball-legendninja-transfers-388924.jpg?auto=format,compress&w=400\", \"n\": 19 }] }, { \"name\": \"Holidays & Seasons\", \"page\": \"/pages/holiday-seasons-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Holidays_Seasons_2.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Valentine's Day\", \"h\": \"valentines-day-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/all-you-need-is-love-transferninja-transfers-759649.jpg?auto=format,compress&w=400\", \"n\": 44 }, { \"t\": \"Mardi Gras\", \"h\": \"mardi-gras-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/louisiana-silhouetteninja-transfers-150542.jpg?auto=format,compress&w=400\", \"n\": 22 }, { \"t\": \"Easter\", \"h\": \"easter-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/silly-rabbit-easter-is-for-jesusninja-transfers-161894.jpg?auto=format,compress&w=400\", \"n\": 38 }, { \"t\": \"Mother's Day\", \"h\": \"mothers-day-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/NT.RTP_MamaRainbowCheckered.jpg?auto=format,compress&w=400\", \"n\": 73 }, { \"t\": \"Cinco de Mayo\", \"h\": \"cinco-de-mayo-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/todays-forecastninja-transfers-993603.jpg?auto=format,compress&w=400\", \"n\": 46 }, { \"t\": \"Father's Day\", \"h\": \"fathers-day-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/beer-dad-transferninja-transfers-478407.jpg?auto=format,compress&w=400\", \"n\": 37 }, { \"t\": \"Juneteenth\", \"h\": \"juneteenth-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/juneteenth-free-ish-since-1865ninja-transfers-168032.jpg?auto=format,compress&w=400\", \"n\": 23 }, { \"t\": \"Oktoberfest\", \"h\": \"oktoberfest-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/hello-beer-goodbye-problemsninja-transfers-448697.jpg?auto=format,compress&w=400\", \"n\": 48 }, { \"t\": \"Halloween\", \"h\": \"halloween-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/kitchen-witchninja-transfers-136910.jpg?auto=format,compress&w=400\", \"n\": 77 }, { \"t\": \"Thanksgiving\", \"h\": \"thanksgiving-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/these-rolls-are-homemadeninja-transfers-949179.jpg?auto=format,compress&w=400\", \"n\": 31 }, { \"t\": \"Day of the Dead\", \"h\": \"day-of-the-dead-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/black-sugar-skullninja-transfers-795777.jpg?auto=format,compress&w=400\", \"n\": 28 }, { \"t\": \"Christmas\", \"h\": \"christmas-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/NaughtyList_e00de3e6-1c4b-43a0-9490-7385470300b1.jpg?auto=format,compress&w=400\", \"n\": 88 }, { \"t\": \"Hanukkah\", \"h\": \"hanukkah-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/100-kosher-transferninja-transfers-258205.jpg?auto=format,compress&w=400\", \"n\": 18 }, { \"t\": \"New Year's Eve\", \"h\": \"new-years-eve-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/happy-new-year-yallninja-transfers-228666.jpg?auto=format,compress&w=400\", \"n\": 4 }, { \"t\": \"Winter\", \"h\": \"winter-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/official-cookie-testerninja-transfers-882812.jpg?auto=format,compress&w=400\", \"n\": 21 }, { \"t\": \"Spring\", \"h\": \"spring-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/i-choose-to-shineninja-transfers-284485.jpg?auto=format,compress&w=400\", \"n\": 50 }, { \"t\": \"Autumn\", \"h\": \"autumn-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/its-fall-yallninja-transfers-965476.jpg?auto=format,compress&w=400\", \"n\": 76 }, { \"t\": \"Summer\", \"h\": \"summer-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/bring-on-the-sunshineninja-transfers-127721.jpg?auto=format,compress&w=400\", \"n\": 30 }] }, { \"name\": \"Charities & Causes\", \"page\": \"/pages/charities-causes-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Charities_Causes_4735c03d-5064-4c57-9e5d-5e5e5c7ffec9.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Environmental\", \"h\": \"environmental-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/peace-love-recycleninja-transfers-227380.jpg?auto=format,compress&w=400\", \"n\": 33 }, { \"t\": \"Mental Health\", \"h\": \"mental-health-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/continueninja-transfers-617325.jpg?auto=format,compress&w=400\", \"n\": 53 }, { \"t\": \"Diabetes Awareness\", \"h\": \"diabetes-awareness-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/peace-love-cureninja-transfers-352989.jpg?auto=format,compress&w=400\", \"n\": 14 }, { \"t\": \"Leukemia\", \"h\": \"leukemia-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/proud-brother-of-a-leukemia-warriorninja-transfers-571231.jpg?auto=format,compress&w=400\", \"n\": 54 }, { \"t\": \"Lymphoma\", \"h\": \"lymphoma-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/support-squadninja-transfers-750418.jpg?auto=format,compress&w=400\", \"n\": 50 }, { \"t\": \"Inspirational\", \"h\": \"inspirational-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/sometimes-its-better-to-let-the-silence-do-the-talkingninja-transfers-222766.jpg?auto=format,compress&w=400\", \"n\": 50 }] }, { \"name\": \"Military & First Responders\", \"page\": \"/pages/military-first-responders-ready-to-press-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Military_First_Responders.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Military & Veteran\", \"h\": \"military-veteran-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/proud-veteran-us-mapninja-transfers-710919.jpg?auto=format,compress&w=400\", \"n\": 29 }, { \"t\": \"Police\", \"h\": \"police-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/AmericanBackTheBlueBlackWhiteBlue_1.jpg?auto=format,compress&w=400\", \"n\": 23 }, { \"t\": \"Firefighter\", \"h\": \"firefighter-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/FirefighterMom.jpg?auto=format,compress&w=400\", \"n\": 24 }, { \"t\": \"Nurse\", \"h\": \"nurse-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/will-trade-medical-advice-for-wineninja-transfers-724869.jpg?auto=format,compress&w=400\", \"n\": 26 }, { \"t\": \"EMT\", \"h\": \"emt-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/star-of-life-flagninja-transfers-753673.jpg?auto=format,compress&w=400\", \"n\": 25 }] }, { \"name\": \"Animals\", \"page\": \"/pages/animal-ready-to-press-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Animals_2.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Cat\", \"h\": \"cat-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/cat-lady-for-lifeninja-transfers-229839.jpg?auto=format,compress&w=400\", \"n\": 51 }, { \"t\": \"Sloth\", \"h\": \"sloth-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/if-you-love-me-let-me-sleepninja-transfers-173431.jpg?auto=format,compress&w=400\", \"n\": 35 }, { \"t\": \"Dog\", \"h\": \"dog-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/BarkLessWagMorePastel_1.jpg?auto=format,compress&w=400\", \"n\": 99 }, { \"t\": \"Horses\", \"h\": \"horses-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/horse-riding-is-my-cardioninja-transfers-274650.jpg?auto=format,compress&w=400\", \"n\": 35 }, { \"t\": \"Animal\", \"h\": \"animal-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/cute-slothninja-transfers-259869.jpg?auto=format,compress&w=400\", \"n\": 34 }, { \"t\": \"Bigfoot\", \"h\": \"bigfoot-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/bigfoot-american-flagninja-transfers-145070.jpg?auto=format,compress&w=400\", \"n\": 40 }] }, { \"name\": \"Fitness\", \"page\": \"/pages/fitness-ready-to-press-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Fitness_aceae4a0-d63a-49b0-8fa8-7eb4069d185b.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Gym\", \"h\": \"gym-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/be-a-badass-with-a-good-ass-transferninja-transfers-950832.jpg?auto=format,compress&w=400\", \"n\": 30 }, { \"t\": \"Yoga\", \"h\": \"yoga-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/quiet-your-mind-listen-to-your-soulninja-transfers-631733.jpg?auto=format,compress&w=400\", \"n\": 27 }, { \"t\": \"Gymnastics\", \"h\": \"gymnastics-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/warning-i-may-flip-at-any-timeninja-transfers-468346.jpg?auto=format,compress&w=400\", \"n\": 20 }, { \"t\": \"Running\", \"h\": \"running-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/running-momninja-transfers-193285.jpg?auto=format,compress&w=400\", \"n\": 20 }, { \"t\": \"Meditation\", \"h\": \"meditation-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/you-cannot-travel-on-the-pathninja-transfers-850472.jpg?auto=format,compress&w=400\", \"n\": 25 }, { \"t\": \"Vegan\", \"h\": \"vegan-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/milk-coconuts-not-cowsninja-transfers-909807.jpg?auto=format,compress&w=400\", \"n\": 40 }, { \"t\": \"Muay Thai\", \"h\": \"muay-thai-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/tiger-muay-thaininja-transfers-716315.jpg?auto=format,compress&w=400\", \"n\": 21 }] }, { \"name\": \"Outdoors\", \"page\": \"/pages/outdoors-ready-to-press-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/Outdoors.png?auto=format,compress&w=480\", \"subs\": [{ \"t\": \"Camping\", \"h\": \"camping-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/LifeIsBetterAroundBonfire.jpg?auto=format,compress&w=400\", \"n\": 45 }, { \"t\": \"Beach\", \"h\": \"beach-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/beach-please-transferninja-transfers-317931.jpg?auto=format,compress&w=400\", \"n\": 24 }, { \"t\": \"Boating\", \"h\": \"boating-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/i-like-my-boat-my-dog-and-maybe-three-peopleninja-transfers-622435.jpg?auto=format,compress&w=400\", \"n\": 22 }, { \"t\": \"Fishing\", \"h\": \"fishing-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/a-bad-day-fishing-is-better-than-a-good-day-at-work-transferninja-transfers-459092.jpg?auto=format,compress&w=400\", \"n\": 38 }, { \"t\": \"Hunting\", \"h\": \"hunting-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/hunting-toolsninja-transfers-690991.jpg?auto=format,compress&w=400\", \"n\": 109 }, { \"t\": \"Hiking\", \"h\": \"hiking-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/id-rather-be-hikingninja-transfers-771715.jpg?auto=format,compress&w=400\", \"n\": 39 }, { \"t\": \"Western\", \"h\": \"western-stickers-dtf-transfers\", \"img\": \"https://ninja-transfers-cdn.imgix.net/cowboy-up-or-go-wait-in-the-truckninja-transfers-964896.jpg?auto=format,compress&w=400\", \"n\": 42 }] }];\n\n  // src/diag.js\n  var FEATURE = \"design-studio\";\n  var RING_KEY = \"nsv2Diag\";\n  function track(e24, v2) {\n    try {\n      const body = { f: FEATURE, e: e24 };\n      if (typeof v2 === \"number\" && isFinite(v2) && v2 >= 0) body.v = v2;\n      const ver = window.NinjaStudio && window.NinjaStudio.version;\n      if (ver) body.ver = String(ver).slice(0, 16);\n      body.env = window.Shopify && window.Shopify.theme && window.Shopify.theme.role === \"main\" ? \"production\" : \"staging\";\n      const json = JSON.stringify(body);\n      if (!cfg.evtUrl) return;\n      if (navigator.sendBeacon) navigator.sendBeacon(cfg.evtUrl, json);\n      else fetch(cfg.evtUrl, { method: \"POST\", body: json, keepalive: true }).catch(() => {\n      });\n    } catch (err) {\n    }\n  }\n  var sentErr = /* @__PURE__ */ new Set();\n  function errBeacon(kind) {\n    if (sentErr.has(kind) || sentErr.size >= 3) return;\n    sentErr.add(kind);\n    track(kind);\n  }\n  function ring(msg) {\n    try {\n      const rows = JSON.parse(localStorage.getItem(RING_KEY) || \"[]\");\n      rows.push({ t: Date.now(), m: String(msg).slice(0, 300) });\n      localStorage.setItem(RING_KEY, JSON.stringify(rows.slice(-20)));\n    } catch (e24) {\n    }\n  }\n  function diagCount() {\n    try {\n      return JSON.parse(localStorage.getItem(RING_KEY) || \"[]\").length;\n    } catch (e24) {\n      return 0;\n    }\n  }\n  function diagFail(kind, err) {\n    ring(kind + \": \" + (err && err.message ? err.message : err));\n    errBeacon(kind === \"export_fail\" ? \"export_fail\" : \"save_fail\");\n  }\n  function installDiagnostics() {\n    const fromStudio = (s3) => typeof s3 === \"string\" && s3.indexOf(\"studio-v2\") !== -1;\n    window.addEventListener(\"error\", (e24) => {\n      if (fromStudio(e24.filename) || fromStudio(e24.error && e24.error.stack)) {\n        ring(e24.message);\n        errBeacon(\"error\");\n      }\n    });\n    window.addEventListener(\"unhandledrejection\", (e24) => {\n      const r2 = e24.reason;\n      if (r2 && fromStudio(r2.stack)) {\n        ring(r2.message || String(r2));\n        errBeacon(\"error\");\n      }\n    });\n  }\n\n  // src/drive.js\n  var DEFAULT_CLIENT_ID = \"333432217986-p85aqpdu0cmh9l0ehn44sg31r1k4nlsl.apps.googleusercontent.com\";\n  var DEFAULT_API_KEY = \"AIzaSyDv6DTri7BJaSHwA9s1LxAJ8qiLBqswwh8\";\n  var MIME_TYPES = \"image/jpeg,image/png,image/gif,image/webp,image/svg+xml,image/tiff,application/pdf\";\n  var scriptPromises = /* @__PURE__ */ new Map();\n  function loadScript(src) {\n    if (scriptPromises.has(src)) return scriptPromises.get(src);\n    const p2 = new Promise((resolve, reject) => {\n      const s3 = document.createElement(\"script\");\n      s3.src = src;\n      s3.async = true;\n      s3.onload = resolve;\n      s3.onerror = () => {\n        scriptPromises.delete(src);\n        reject(new Error(\"Failed to load \" + src));\n      };\n      document.head.appendChild(s3);\n    });\n    scriptPromises.set(src, p2);\n    return p2;\n  }\n  async function ensurePicker() {\n    if (!(window.google && window.google.accounts && window.google.accounts.oauth2)) {\n      await loadScript(\"https://accounts.google.com/gsi/client\");\n    }\n    if (!(window.gapi && window.google && window.google.picker)) {\n      await loadScript(\"https://apis.google.com/js/api.js\");\n      await new Promise(\n        (resolve, reject) => window.gapi.load(\"picker\", { callback: resolve, onerror: () => reject(new Error(\"Picker API failed\")) })\n      );\n    }\n  }\n  async function fetchDriveFile(fileId, fileName, mimeType, accessToken) {\n    const res = await fetch(\n      \"https://www.googleapis.com/drive/v3/files/\" + encodeURIComponent(fileId) + \"?alt=media&supportsAllDrives=true\",\n      { headers: { Authorization: \"Bearer \" + accessToken } }\n    );\n    if (!res.ok) throw new Error(\"Drive download failed: \" + res.status);\n    const ab = await res.arrayBuffer();\n    const type = mimeType || \"application/octet-stream\";\n    return new File([new Blob([ab], { type })], fileName, { type });\n  }\n  function openDrivePicker(cfg2 = {}, onFile) {\n    const clientId = cfg2.clientId || DEFAULT_CLIENT_ID;\n    const apiKey = cfg2.apiKey || DEFAULT_API_KEY;\n    ensurePicker().then(() => {\n      const tokenClient = window.google.accounts.oauth2.initTokenClient({\n        client_id: clientId,\n        scope: \"https://www.googleapis.com/auth/drive.file\",\n        login_hint: cfg2.loginHint || \"\",\n        callback: (tok) => {\n          if (!tok || !tok.access_token) return;\n          const docsView = new window.google.picker.DocsView(window.google.picker.ViewId.DOCS).setMimeTypes(MIME_TYPES).setIncludeFolders(true).setSelectFolderEnabled(false);\n          const uploadView = new window.google.picker.DocsUploadView();\n          const picker = new window.google.picker.PickerBuilder().enableFeature(window.google.picker.Feature.MULTISELECT_ENABLED).enableFeature(window.google.picker.Feature.SUPPORT_DRIVES).setAppId((clientId || \"\").split(\"-\")[0]).setOAuthToken(tok.access_token).setDeveloperKey(apiKey).addView(docsView).addView(uploadView).setCallback((data) => {\n            if (data.action !== window.google.picker.Action.PICKED) return;\n            (data.docs || []).forEach((doc) => {\n              fetchDriveFile(doc.id, doc.name, doc.mimeType, tok.access_token).then(onFile).catch((err) => console.error(\"studio-v2: Drive import failed\", doc.name, err));\n            });\n          }).build();\n          picker.setVisible(true);\n        }\n      });\n      tokenClient.requestAccessToken({ prompt: \"\" });\n    }).catch((err) => console.error(\"studio-v2: Drive picker unavailable\", err));\n  }\n\n  // src/bgr.js\n  var BGR_MODELS = [\n    { key: \"ix\", label: \"Option 1\", modelParam: null },\n    { key: \"pc\", label: \"Option 2\", modelParam: 4 },\n    { key: \"gram\", label: \"Option 3\", lambda: true }\n  ];\n  var FAL_TIMEOUT_MS = 25e3;\n  var isVectorName = (name) => /\\.(?:svg|eps|pdf|ai)(?:[?#]|$)/i.test(name || \"\");\n  function candidateUrl(imgixUrl, model, w2 = 2e3, trimmed = false) {\n    const base = imgixUrl.split(\"?\")[0] + \"?\" + (trimmed ? \"trim=colorUnlessAlpha&\" : \"\") + \"fm=png&fit=max&w=\" + w2 + \"&bg-remove=true\";\n    return model.modelParam ? base + \"&bg-remove-model=\" + model.modelParam : base;\n  }\n  async function gramPreview(imgixUrl) {\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), FAL_TIMEOUT_MS);\n    try {\n      const previewInput = imgixUrl + (imgixUrl.includes(\"?\") ? \"&\" : \"?\") + \"w=2000&fit=max\";\n      const resp = await fetch(cfg.proxyUrl, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(Object.assign({ model: \"gram\", imageUrl: previewInput }, cfg.store ? { store: cfg.store } : {})),\n        signal: ctrl.signal\n      });\n      if (!resp.ok) throw new Error(\"gram HTTP \" + resp.status);\n      const data = await resp.json();\n      if (!data || !data.url) throw new Error(\"gram response missing url\");\n      return data.url;\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n  var RETRY_DELAYS = [2e3, 5e3, 1e4];\n  function loadImageWithRetry(url, attempt = 0) {\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.crossOrigin = \"anonymous\";\n      img.onload = () => resolve(url);\n      img.onerror = () => {\n        if (attempt >= RETRY_DELAYS.length) return reject(new Error(\"failed: \" + url.slice(0, 80)));\n        setTimeout(() => loadImageWithRetry(url, attempt + 1).then(resolve, reject), RETRY_DELAYS[attempt]);\n      };\n      img.src = url;\n    });\n  }\n\n  // src/ninja-ai.js\n  var NINJA_AI_STILL_WORKING_MS = 12e3;\n  var NINJA_BGR_MODELS = [\n    { key: \"n1\", label: \"Option 1\", rank: 0, ninja: true },\n    { key: \"n2\", label: \"Option 2\", rank: 1, ninja: true },\n    { key: \"n3\", label: \"Option 3\", rank: 2, ninja: true }\n  ];\n  var unavailable = false;\n  var ninjaAiUnavailable = (err) => !!err && /^(client_missing|client_load_failed|origin_not_allowed)$/.test(err.code || \"\");\n  var ninjaAiEnabled = () => !!cfg.ninjaAiClient && !unavailable;\n  var NAME_RE = /^\\/[A-Za-z0-9_.-]{1,240}\\.(png|jpe?g|jfif|bmp|webp|heic|heif|avif|psd|gif|tiff?)$/i;\n  function ninjaAiEligible(bgr) {\n    if (!ninjaAiEnabled() || !bgr || bgr.isVector || !bgr.imgixUrl) return false;\n    try {\n      const u2 = new URL(bgr.imgixUrl);\n      return u2.protocol === \"https:\" && (u2.hostname === cfg.imgixHost || u2.hostname === cfg.s3Host) && NAME_RE.test(u2.pathname);\n    } catch (e24) {\n      return false;\n    }\n  }\n  var ninjaVersionUrl = (persistentUrl) => persistentUrl.split(\"?\")[0] + \"?fm=png&fit=max&w=\" + DISPLAY_W;\n  var fail = (code, message) => Object.assign(new Error(message || \"Background removal failed.\"), { code });\n  var clientP = null;\n  function client() {\n    if (clientP) return clientP;\n    clientP = new Promise((resolve, reject) => {\n      const ready = () => {\n        try {\n          const api = window.NinjaBackgroundRemoval;\n          if (!api || typeof api.create !== \"function\") throw fail(\"client_missing\", \"Ninja AI client did not load.\");\n          resolve(api.create({}));\n        } catch (e24) {\n          reject(e24);\n        }\n      };\n      if (window.NinjaBackgroundRemoval) return ready();\n      const s3 = document.createElement(\"script\");\n      s3.src = cfg.ninjaAiClient;\n      s3.async = true;\n      s3.onload = ready;\n      s3.onerror = () => reject(fail(\"client_load_failed\", \"Ninja AI client did not load.\"));\n      document.head.appendChild(s3);\n    }).catch((e24) => {\n      clientP = null;\n      if (ninjaAiUnavailable(e24)) unavailable = true;\n      throw e24;\n    });\n    return clientP;\n  }\n  function candidatesFrom(result, bare) {\n    const out = [];\n    const all = result && Array.isArray(result.all) && result.all || [];\n    if (result && result.rankingStatus === \"fallback\") {\n      for (const c2 of all) {\n        const m = BGR_MODELS.find((x2) => x2.key === c2.name && !x2.lambda);\n        if (m && c2.persistentUrl) out.push({ name: c2.name, fallback: true, url: candidateUrl(bare, m) });\n      }\n      return out;\n    }\n    for (const c2 of all) {\n      if (!c2 || !c2.persistentUrl || c2.temporary) continue;\n      let ok = false;\n      try {\n        const u2 = new URL(c2.persistentUrl);\n        ok = u2.protocol === \"https:\" && u2.hostname === cfg.imgixHost;\n      } catch (e24) {\n      }\n      if (ok) out.push({ name: c2.name, modelId: c2.modelId || null, persistentUrl: c2.persistentUrl, url: ninjaVersionUrl(c2.persistentUrl) });\n    }\n    return out;\n  }\n  var jobs = /* @__PURE__ */ new Map();\n  function ninjaAiRemove(sourceUrl, { fileName, onStillWorking } = {}) {\n    const bare = String(sourceUrl || \"\").split(\"?\")[0];\n    if (!ninjaAiEnabled()) return Promise.reject(fail(\"disabled\", \"Ninja AI is not configured on this host.\"));\n    if (jobs.has(bare)) {\n      const p2 = jobs.get(bare);\n      if (onStillWorking) {\n        if (Date.now() - p2.__started >= NINJA_AI_STILL_WORKING_MS) onStillWorking();\n        else p2.__still.push(onStillWorking);\n      }\n      return p2;\n    }\n    const still = onStillWorking ? [onStillWorking] : [];\n    const ctrl = new AbortController();\n    const stillTimer = setTimeout(() => still.splice(0).forEach((f2) => {\n      try {\n        f2();\n      } catch (e24) {\n      }\n    }), NINJA_AI_STILL_WORKING_MS);\n    const name = bare.split(\"/\").pop();\n    const run = (async () => {\n      const c2 = await client();\n      const original = sourceFileFor(bare);\n      if (original && typeof c2.rememberSource === \"function\") {\n        try {\n          c2.rememberSource(bare, original);\n        } catch (e24) {\n        }\n      }\n      const result = await c2.remove(\n        { id: \"studio-\" + name.replace(/[^A-Za-z0-9._-]/g, \"-\").slice(0, 80), imgixUrl: bare, name: fileName || name, uploadName: name },\n        { signal: ctrl.signal }\n      );\n      try {\n        const cands = candidatesFrom(result, bare);\n        if (!cands.length) throw fail(\"no_results\", \"Ninja AI returned no usable result.\");\n        return cands;\n      } finally {\n        try {\n          result && result.dispose && result.dispose();\n        } catch (e24) {\n        }\n      }\n    })().catch((err) => {\n      jobs.delete(bare);\n      if (err && !err.code) err.code = \"ninja_ai_failed\";\n      throw err;\n    }).finally(() => clearTimeout(stillTimer));\n    run.__still = still;\n    run.__started = Date.now();\n    jobs.set(bare, run);\n    return run;\n  }\n\n  // src/ai.js\n  var ROT_HOST = \"https://www.rushordertees.com/design\";\n  var AI_TIMEOUT_MS = 6e4;\n  var EDIT_TIMEOUT_MS = 6e4;\n  var AI_BATCH = 3;\n  function composeEditPrompt(prompt, lineage) {\n    const chain = (lineage || []).slice(-4);\n    if (!chain.length) return prompt;\n    return \"Earlier edits already applied to this image, in order:\\n\" + chain.map((p2, i2) => i2 + 1 + \". \" + p2).join(\"\\n\") + \"\\n\\nNow apply only this change: \" + prompt + `\n\nVague references like \"it\" or \"that\" in the new change mean the thing added or changed by the most recent edit above, NOT the whole image. Do not re-apply earlier edits or alter the image's size, crop, or composition unless explicitly asked.`;\n  }\n  async function aiEdit(imageUrl, prompt, lineage, signal) {\n    const input = imageUrl + (imageUrl.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"w=2000&fit=max\";\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), EDIT_TIMEOUT_MS);\n    if (signal) signal.addEventListener(\"abort\", () => ctrl.abort(), { once: true });\n    try {\n      const resp = await fetch(cfg.proxyUrl, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n          model: \"gram-edit-45g\",\n          // theme #839 + #847 (jblake21, 11-02): Ideogram 4.5 generate route \u2014 folded so a release never reverts live\n          imageUrl: input,\n          prompt: composeEditPrompt(prompt, lineage),\n          transparency: \"AUTO\",\n          ...cfg.store ? { store: cfg.store } : {}\n        }),\n        signal: ctrl.signal\n      });\n      if (!resp.ok) {\n        const err = new Error(\"ai-edit HTTP \" + resp.status + \" \" + (await resp.text()).slice(0, 120));\n        err.aiRefused = true;\n        throw err;\n      }\n      const data = await resp.json();\n      if (!data || !data.url) {\n        const err = new Error(\"ai-edit response missing url\");\n        err.aiRefused = true;\n        throw err;\n      }\n      return data.url + (data.url.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"cs=strip\";\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n  function waitForRender(url, totalMs = 6e4) {\n    const deadline = Date.now() + totalMs;\n    return new Promise((resolve, reject) => {\n      const attempt = () => {\n        const img = new Image();\n        img.crossOrigin = \"anonymous\";\n        img.onload = () => resolve(url);\n        img.onerror = () => {\n          if (Date.now() > deadline) return reject(new Error(\"render not servable: \" + url.slice(0, 80)));\n          setTimeout(attempt, 3e3);\n        };\n        img.src = url;\n      };\n      attempt();\n    });\n  }\n  var hiRes = (url) => url.replace(\"/unsafe/\", \"/unsafe/3000x0/\");\n  function normalize(items) {\n    return (Array.isArray(items) ? items : []).filter((it2) => it2 && it2.url).slice(0, AI_BATCH).map((it2) => ({ url: hiRes(it2.url), thumbnailUrl: it2.thumbnailUrl || it2.url, fileName: it2.fileName || \"ai-image.png\" }));\n  }\n  async function aiCreate(prompt, opts = {}) {\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), AI_TIMEOUT_MS);\n    if (opts.signal) opts.signal.addEventListener(\"abort\", () => ctrl.abort(), { once: true });\n    try {\n      if (!opts.fresh) try {\n        const cached = await fetch(\n          ROT_HOST + \"/studio/getGenerativeAiUploads.php?prompt=\" + encodeURIComponent(prompt),\n          { credentials: \"include\", signal: ctrl.signal }\n        );\n        if (cached.ok) {\n          const rows = normalize(await cached.json());\n          if (rows.length) return rows;\n        }\n      } catch (e24) {\n      }\n      const resp = await fetch(ROT_HOST + \"/studio/postBatchGenerativeAiUpload.php\", {\n        method: \"POST\",\n        body: JSON.stringify({ prompt, batchSize: AI_BATCH, brandingName: cfg.brandingName }),\n        signal: ctrl.signal\n      });\n      if (!resp.ok) throw new Error(\"ai-create HTTP \" + resp.status);\n      return normalize(await resp.json());\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n  var AI_CREATE_STARTERS = [\n    \"A fierce ninja mascot holding a katana\",\n    \"Retro sunset with palm trees and bold stripes\",\n    \"A cute cartoon dog wearing sunglasses\"\n  ];\n  var AI_EDIT_CHIPS = [\n    \"Turn it into a cartoon\",\n    \"Black and white line art\",\n    \"Vintage, distressed look\",\n    \"Make the colors pop\",\n    \"Add a sunset background\",\n    \"Add a thick white outline\"\n  ];\n  var HISTORY_KEY = \"ninjaAiHistory\";\n  var HISTORY_TTL = 30 * 24 * 3600 * 1e3;\n  var HISTORY_MAX = 30;\n  function aiHistory() {\n    try {\n      const rows = JSON.parse(localStorage.getItem(HISTORY_KEY) || \"[]\");\n      const now = Date.now();\n      return rows.filter((r2) => r2 && r2.url && now - (r2.savedAt || 0) < HISTORY_TTL);\n    } catch (e24) {\n      return [];\n    }\n  }\n  function aiHistoryAdd(items, prompt) {\n    try {\n      const now = Date.now();\n      const cur = aiHistory();\n      for (const it2 of items) {\n        if (cur.some((r2) => r2.url === it2.url)) continue;\n        cur.unshift({ url: it2.url, thumbnailUrl: it2.thumbnailUrl, fileName: it2.fileName, prompt, savedAt: now });\n      }\n      localStorage.setItem(HISTORY_KEY, JSON.stringify(cur.slice(0, HISTORY_MAX)));\n      document.dispatchEvent(new CustomEvent(\"ninjaAiHistory:changed\"));\n    } catch (e24) {\n    }\n  }\n  var USAGE_KEY = \"nanoBananaUsage\";\n  var DAILY_LIMIT = 50;\n  function usageDay() {\n    const d2 = /* @__PURE__ */ new Date();\n    return d2.getFullYear() + \"-\" + String(d2.getMonth() + 1).padStart(2, \"0\") + \"-\" + String(d2.getDate()).padStart(2, \"0\");\n  }\n  function canUseAi() {\n    try {\n      const u2 = JSON.parse(localStorage.getItem(USAGE_KEY) || \"null\");\n      return !u2 || u2.day !== usageDay() || (u2.count || 0) < DAILY_LIMIT;\n    } catch (e24) {\n      return true;\n    }\n  }\n  function consumeAi() {\n    try {\n      const day = usageDay();\n      let u2 = JSON.parse(localStorage.getItem(USAGE_KEY) || \"null\");\n      if (!u2 || u2.day !== day) u2 = { day, count: 0 };\n      u2.count = (u2.count || 0) + 1;\n      localStorage.setItem(USAGE_KEY, JSON.stringify(u2));\n    } catch (e24) {\n    }\n  }\n\n  // src/color-names.js\n  var _ctx;\n  function cssToSolidHex(c2) {\n    if (typeof c2 !== \"string\" || !c2) return null;\n    if (!(window.CSS && CSS.supports(\"color\", c2))) return null;\n    _ctx = _ctx || document.createElement(\"canvas\").getContext(\"2d\");\n    _ctx.fillStyle = \"#000000\";\n    _ctx.fillStyle = c2;\n    const v2 = _ctx.fillStyle;\n    if (v2.startsWith(\"#\")) return v2.length === 7 ? v2 : \"#\" + v2.slice(1, 7);\n    const m = v2.match(/rgba?\\((\\d+), ?(\\d+), ?(\\d+)/);\n    if (!m) return null;\n    return \"#\" + [m[1], m[2], m[3]].map((n2) => (+n2).toString(16).padStart(2, \"0\")).join(\"\");\n  }\n  function hexToHsl(hex3) {\n    const r2 = parseInt(hex3.slice(1, 3), 16) / 255;\n    const g2 = parseInt(hex3.slice(3, 5), 16) / 255;\n    const b2 = parseInt(hex3.slice(5, 7), 16) / 255;\n    const max = Math.max(r2, g2, b2), min = Math.min(r2, g2, b2);\n    const l2 = (max + min) / 2;\n    if (max === min) return { h: 0, s: 0, l: l2 * 100 };\n    const d2 = max - min;\n    const s3 = l2 > 0.5 ? d2 / (2 - max - min) : d2 / (max + min);\n    let h2;\n    if (max === r2) h2 = ((g2 - b2) / d2 + (g2 < b2 ? 6 : 0)) * 60;\n    else if (max === g2) h2 = ((b2 - r2) / d2 + 2) * 60;\n    else h2 = ((r2 - g2) / d2 + 4) * 60;\n    return { h: h2, s: s3 * 100, l: l2 * 100 };\n  }\n  function hslToHex(h2, s3, l2) {\n    return cssToSolidHex(\"hsl(\" + h2 + \", \" + s3 + \"%, \" + l2 + \"%)\");\n  }\n  var EXTRA_NAMES = {\n    mint: \"#98e8c1\",\n    \"mint green\": \"#98e8c1\",\n    sage: \"#9caf88\",\n    emerald: \"#2ecc71\",\n    mustard: \"#e1ad01\",\n    peach: \"#ffcba4\",\n    apricot: \"#fbceb1\",\n    cream: \"#fffdd0\",\n    blush: \"#f4c2c2\",\n    rust: \"#b7410e\",\n    burgundy: \"#800020\",\n    wine: \"#722f37\",\n    charcoal: \"#36454f\",\n    slate: \"#64748b\",\n    denim: \"#1560bd\",\n    cobalt: \"#0047ab\",\n    sapphire: \"#0f52ba\",\n    ruby: \"#e0115f\",\n    rose: \"#ff007f\",\n    \"rose gold\": \"#b76e79\",\n    terracotta: \"#e2725b\",\n    sand: \"#e3c9a3\",\n    taupe: \"#8b8589\",\n    mauve: \"#e0b0ff\",\n    lilac: \"#c8a2c8\",\n    periwinkle: \"#ccccff\",\n    blueberry: \"#4f86f7\",\n    grape: \"#6f2da8\",\n    eggplant: \"#614051\",\n    pumpkin: \"#ff7518\",\n    tangerine: \"#f28500\",\n    lemon: \"#fff44f\",\n    banana: \"#ffe135\",\n    avocado: \"#568203\",\n    pine: \"#01796f\",\n    seafoam: \"#93e9be\",\n    aqua: \"#00ffff\",\n    ocean: \"#016fb9\",\n    midnight: \"#191970\",\n    ink: \"#0f172a\",\n    offwhite: \"#faf7f2\",\n    \"off white\": \"#faf7f2\",\n    bone: \"#e3dac9\",\n    mocha: \"#967259\",\n    espresso: \"#4e342e\",\n    caramel: \"#af6f09\",\n    honey: \"#eb9605\",\n    bronze: \"#cd7f32\",\n    copper: \"#b87333\",\n    \"gun metal\": \"#2a3439\",\n    gunmetal: \"#2a3439\",\n    scarlet: \"#ff2400\",\n    // Art / design vocabulary CSS doesn't know (Owen 9-04: \"vermilion\" missed).\n    vermilion: \"#e34234\",\n    vermillion: \"#e34234\",\n    cerulean: \"#2a52be\",\n    ochre: \"#cc7722\",\n    ocher: \"#cc7722\",\n    umber: \"#635147\",\n    \"burnt umber\": \"#8a3324\",\n    \"burnt sienna\": \"#e97451\",\n    \"burnt orange\": \"#cc5500\",\n    carmine: \"#960018\",\n    cardinal: \"#c41e3a\",\n    brick: \"#cb4154\",\n    \"brick red\": \"#cb4154\",\n    mahogany: \"#c04000\",\n    chestnut: \"#954535\",\n    auburn: \"#a52a2a\",\n    amber: \"#ffbf00\",\n    saffron: \"#f4c430\",\n    marigold: \"#eaa221\",\n    canary: \"#ffef00\",\n    butterscotch: \"#e09540\",\n    flax: \"#eedc82\",\n    moss: \"#8a9a5b\",\n    fern: \"#71bc78\",\n    forest: \"#228b22\",\n    \"kelly green\": \"#4cbb17\",\n    \"hunter green\": \"#355e3b\",\n    jade: \"#00a86b\",\n    viridian: \"#40826d\",\n    spruce: \"#2c5545\",\n    juniper: \"#3d5d42\",\n    celadon: \"#ace1af\",\n    pistachio: \"#93c572\",\n    shamrock: \"#009e60\",\n    \"sea green\": \"#2e8b57\",\n    peacock: \"#33a1c9\",\n    ultramarine: \"#3f00ff\",\n    \"prussian blue\": \"#003153\",\n    iris: \"#5a4fcf\",\n    amethyst: \"#9966cc\",\n    heliotrope: \"#df73ff\",\n    cerise: \"#de3163\",\n    raspberry: \"#e30b5d\",\n    strawberry: \"#fc5a8d\",\n    watermelon: \"#fc6c85\",\n    flamingo: \"#fc8eac\",\n    bubblegum: \"#ffc1cc\",\n    melon: \"#fdbcb4\",\n    cantaloupe: \"#ffa62f\",\n    papaya: \"#ffefd5\",\n    persimmon: \"#ec5800\",\n    carrot: \"#ed9121\",\n    cinnamon: \"#d2691e\",\n    ginger: \"#b06500\",\n    walnut: \"#773f1a\",\n    coffee: \"#6f4e37\",\n    cocoa: \"#875f42\",\n    camel: \"#c19a6b\",\n    fawn: \"#e5aa70\",\n    buff: \"#dab87f\",\n    ecru: \"#c2b280\",\n    eggshell: \"#f0ead6\",\n    alabaster: \"#edeae0\",\n    pearl: \"#eae0c8\",\n    porcelain: \"#f0f2f5\",\n    pewter: \"#8e9294\",\n    ash: \"#b2beb5\",\n    smoke: \"#738276\",\n    graphite: \"#41424c\",\n    onyx: \"#353839\",\n    jet: \"#343434\",\n    obsidian: \"#3a3c42\",\n    ebony: \"#555d50\",\n    aubergine: \"#472c4c\",\n    mulberry: \"#c54b8c\",\n    oxblood: \"#4a0000\",\n    garnet: \"#733635\",\n    cherry: \"#de3163\",\n    flame: \"#e25822\",\n    brass: \"#b5a642\",\n    champagne: \"#f7e7ce\",\n    vanilla: \"#f3e5ab\",\n    oatmeal: \"#d9c7a7\",\n    latte: \"#c8a27a\",\n    spearmint: \"#45b08c\",\n    evergreen: \"#05472a\",\n    \"royal purple\": \"#7851a9\",\n    \"royal blue\": \"#4169e1\",\n    \"steel blue\": \"#4682b4\",\n    steel: \"#71797e\",\n    \"sky blue\": \"#87ceeb\",\n    sky: \"#87ceeb\",\n    cornflower: \"#6495ed\",\n    \"ice blue\": \"#d6ecef\",\n    \"forest green\": \"#228b22\",\n    \"olive green\": \"#708238\",\n    \"army green\": \"#4b5320\",\n    \"navy blue\": \"#000080\",\n    \"blood red\": \"#660000\",\n    \"fire engine red\": \"#ce2029\",\n    \"sunflower yellow\": \"#ffda03\",\n    sunflower: \"#ffda03\",\n    \"bubblegum pink\": \"#ffc1cc\"\n  };\n  var MOD_BASES = {\n    purple: \"#8b5cf6\",\n    violet: \"#7c3aed\",\n    blue: \"#3b82f6\",\n    red: \"#ef4444\",\n    green: \"#22c55e\",\n    pink: \"#ec4899\",\n    orange: \"#f97316\",\n    yellow: \"#eab308\",\n    teal: \"#14b8a6\",\n    cyan: \"#06b6d4\",\n    magenta: \"#d946ef\",\n    indigo: \"#6366f1\",\n    brown: \"#92693e\",\n    gray: \"#6b7280\",\n    grey: \"#6b7280\",\n    lime: \"#84cc16\",\n    turquoise: \"#2dd4bf\",\n    navy: \"#1e3a8a\",\n    maroon: \"#7f1d1d\"\n  };\n  var MODIFIERS = {\n    light: (c2) => ({ h: c2.h, s: c2.s * 0.9, l: Math.min(84, c2.l + 18) }),\n    lighter: (c2) => ({ h: c2.h, s: c2.s * 0.85, l: Math.min(88, c2.l + 26) }),\n    pale: (c2) => ({ h: c2.h, s: Math.max(25, c2.s * 0.45), l: Math.min(90, c2.l + 30) }),\n    pastel: (c2) => ({ h: c2.h, s: Math.max(30, c2.s * 0.5), l: Math.min(88, c2.l + 28) }),\n    baby: (c2) => ({ h: c2.h, s: Math.max(30, c2.s * 0.5), l: Math.min(90, c2.l + 32) }),\n    soft: (c2) => ({ h: c2.h, s: Math.max(30, c2.s * 0.6), l: Math.min(85, c2.l + 18) }),\n    dark: (c2) => ({ h: c2.h, s: c2.s, l: Math.max(12, c2.l - 20) }),\n    darker: (c2) => ({ h: c2.h, s: c2.s, l: Math.max(10, c2.l - 28) }),\n    deep: (c2) => ({ h: c2.h, s: Math.min(100, c2.s + 8), l: Math.max(15, c2.l - 24) }),\n    bright: (c2) => ({ h: c2.h, s: 100, l: Math.min(60, Math.max(48, c2.l)) }),\n    vivid: (c2) => ({ h: c2.h, s: 100, l: Math.min(58, Math.max(46, c2.l)) }),\n    neon: (c2) => ({ h: c2.h, s: 100, l: 55 }),\n    electric: (c2) => ({ h: c2.h, s: 100, l: 52 }),\n    hot: (c2) => ({ h: c2.h, s: 100, l: 50 }),\n    muted: (c2) => ({ h: c2.h, s: Math.max(15, c2.s * 0.5), l: c2.l }),\n    dusty: (c2) => ({ h: c2.h, s: Math.max(15, c2.s * 0.45), l: Math.min(75, c2.l + 6) }),\n    medium: (c2) => c2\n  };\n  function resolveBase(s3) {\n    const hexMatch = s3.match(/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i);\n    if (hexMatch) {\n      let h2 = hexMatch[1];\n      if (h2.length === 4 || h2.length === 8) h2 = h2.slice(0, h2.length === 4 ? 3 : 6);\n      if (h2.length === 3) h2 = h2.split(\"\").map((ch) => ch + ch).join(\"\");\n      return \"#\" + h2.toLowerCase();\n    }\n    return cssToSolidHex(s3) || cssToSolidHex(s3.replace(/ /g, \"\")) || EXTRA_NAMES[s3] || null;\n  }\n  function resolveColorName(input) {\n    if (typeof input !== \"string\") return null;\n    const s3 = input.trim().toLowerCase().replace(/[_-]+/g, \" \").replace(/\\s+/g, \" \");\n    if (!s3) return null;\n    const direct = resolveBase(s3);\n    if (direct) return direct;\n    const words = s3.split(\" \");\n    const mods = [];\n    while (words.length > 1 && MODIFIERS[words[0]]) mods.push(MODIFIERS[words.shift()]);\n    if (!mods.length) return null;\n    const rest = words.join(\" \");\n    const base = MOD_BASES[rest] || resolveBase(rest);\n    if (!base) return null;\n    let hsl = hexToHsl(base);\n    for (const m of mods) hsl = m(hsl);\n    return hslToHex(hsl.h, hsl.s, hsl.l);\n  }\n  var COMMON_NAMES = [\n    \"red\",\n    \"orange\",\n    \"yellow\",\n    \"green\",\n    \"blue\",\n    \"purple\",\n    \"pink\",\n    \"brown\",\n    \"black\",\n    \"white\",\n    \"gray\",\n    \"grey\",\n    \"cyan\",\n    \"magenta\",\n    \"teal\",\n    \"navy\",\n    \"maroon\",\n    \"olive\",\n    \"lime\",\n    \"aqua\",\n    \"silver\",\n    \"gold\",\n    \"beige\",\n    \"coral\",\n    \"crimson\",\n    \"fuchsia\",\n    \"indigo\",\n    \"ivory\",\n    \"khaki\",\n    \"lavender\",\n    \"orchid\",\n    \"plum\",\n    \"salmon\",\n    \"sienna\",\n    \"tan\",\n    \"tomato\",\n    \"turquoise\",\n    \"violet\",\n    \"azure\",\n    \"chocolate\",\n    \"scarlet\"\n  ];\n  var FUZZ_BASES = [.../* @__PURE__ */ new Set([...COMMON_NAMES, ...Object.keys(EXTRA_NAMES), ...Object.keys(MOD_BASES)])];\n  var FUZZ_MODS = Object.keys(MODIFIERS);\n  function editDistance(a2, b2, cap) {\n    if (Math.abs(a2.length - b2.length) > cap) return cap + 1;\n    let prev = Array.from({ length: b2.length + 1 }, (_2, i2) => i2);\n    for (let i2 = 1; i2 <= a2.length; i2++) {\n      const cur = [i2];\n      let rowMin = i2;\n      for (let j2 = 1; j2 <= b2.length; j2++) {\n        cur[j2] = Math.min(prev[j2] + 1, cur[j2 - 1] + 1, prev[j2 - 1] + (a2[i2 - 1] === b2[j2 - 1] ? 0 : 1));\n        if (cur[j2] < rowMin) rowMin = cur[j2];\n      }\n      if (rowMin > cap) return cap + 1;\n      prev = cur;\n    }\n    return prev[b2.length];\n  }\n  function nearestWord(w2, dict) {\n    if (w2.length < 3) return null;\n    const cap = w2.length <= 5 ? 1 : 2;\n    let best = null, bestD = cap + 1;\n    for (const cand of dict) {\n      const d2 = editDistance(w2, cand, cap);\n      if (d2 < bestD) {\n        bestD = d2;\n        best = cand;\n        if (d2 === 0) break;\n      }\n    }\n    return best;\n  }\n  function resolveColorSmart(input) {\n    const strict = resolveColorName(input);\n    if (strict) return { hex: strict, corrected: null };\n    if (typeof input !== \"string\") return { hex: null, corrected: null };\n    const s3 = input.trim().toLowerCase().replace(/[_-]+/g, \" \").replace(/\\s+/g, \" \");\n    if (!s3 || s3.startsWith(\"#\")) return { hex: null, corrected: null };\n    const whole = nearestWord(s3, FUZZ_BASES);\n    if (whole) {\n      const hex3 = resolveColorName(whole);\n      if (hex3) return { hex: hex3, corrected: whole };\n    }\n    const words = s3.split(\" \");\n    const fixed = words.map((w2, i2) => {\n      if (i2 < words.length - 1 && (MODIFIERS[w2] || nearestWord(w2, FUZZ_MODS))) {\n        return MODIFIERS[w2] ? w2 : nearestWord(w2, FUZZ_MODS);\n      }\n      return resolveBase(w2) || MOD_BASES[w2] ? w2 : nearestWord(w2, FUZZ_BASES) || w2;\n    });\n    const phrase = fixed.join(\" \");\n    if (phrase !== s3) {\n      const hex3 = resolveColorName(phrase);\n      if (hex3) return { hex: hex3, corrected: phrase };\n    }\n    return { hex: null, corrected: null };\n  }\n  var NAME_POOL = (() => {\n    const pool = [];\n    const push = (name, hex3) => {\n      const c2 = hexToRgbLocal(hex3);\n      if (c2) pool.push({ name, c: c2 });\n    };\n    function hexToRgbLocal(h2) {\n      const m = /^#([0-9a-f]{6})$/i.exec(h2 || \"\");\n      if (!m) return null;\n      const n2 = parseInt(m[1], 16);\n      return [n2 >> 16 & 255, n2 >> 8 & 255, n2 & 255];\n    }\n    for (const [k2, v2] of Object.entries(EXTRA_NAMES)) push(k2, v2);\n    for (const [k2, v2] of Object.entries(MOD_BASES)) push(k2, v2);\n    for (const k2 of [\"black|#000000\", \"white|#ffffff\", \"silver|#c0c0c0\", \"beige|#f5f5dc\", \"cream|#fffdd0\", \"tan|#d2b48c\", \"gold|#ffd700\", \"olive|#808000\", \"coral|#ff7f50\", \"crimson|#dc143c\", \"salmon|#fa8072\", \"khaki|#f0e68c\", \"lavender|#e6e6fa\", \"plum|#dda0dd\", \"orchid|#da70d6\"]) {\n      const [n2, h2] = k2.split(\"|\");\n      push(n2, h2);\n    }\n    return pool;\n  })();\n  function nearestColorName(hex3) {\n    const m = /^#([0-9a-f]{6})$/i.exec(hex3 || \"\");\n    if (!m) return hex3;\n    const n2 = parseInt(m[1], 16);\n    const r2 = n2 >> 16 & 255, g2 = n2 >> 8 & 255, b2 = n2 & 255;\n    let best = null, bestD = Infinity;\n    for (const p2 of NAME_POOL) {\n      const d2 = (p2.c[0] - r2) ** 2 + (p2.c[1] - g2) ** 2 + (p2.c[2] - b2) ** 2;\n      if (d2 < bestD) {\n        bestD = d2;\n        best = p2.name;\n      }\n    }\n    return bestD < 3600 ? best : hex3;\n  }\n\n  // src/colorpicker.js\n  var clamp01 = (v2) => v2 < 0 ? 0 : v2 > 1 ? 1 : v2;\n  function hexToHsv(hex3) {\n    const m = /^#?([0-9a-f]{6})$/i.exec(String(hex3 || \"\").trim());\n    const n2 = m ? parseInt(m[1], 16) : 0;\n    const r2 = (n2 >> 16 & 255) / 255, g2 = (n2 >> 8 & 255) / 255, b2 = (n2 & 255) / 255;\n    const mx = Math.max(r2, g2, b2), mn2 = Math.min(r2, g2, b2), d2 = mx - mn2;\n    let h2 = 0;\n    if (d2) {\n      if (mx === r2) h2 = (g2 - b2) / d2 % 6;\n      else if (mx === g2) h2 = (b2 - r2) / d2 + 2;\n      else h2 = (r2 - g2) / d2 + 4;\n      h2 = (h2 * 60 + 360) % 360;\n    }\n    return { h: h2, s: mx ? d2 / mx : 0, v: mx };\n  }\n  function hsvToHex({ h: h2, s: s3, v: v2 }) {\n    const f2 = (n2) => {\n      const k2 = (n2 + h2 / 60) % 6;\n      const c2 = v2 - v2 * s3 * Math.max(0, Math.min(k2, 4 - k2, 1));\n      return Math.round(c2 * 255).toString(16).padStart(2, \"0\");\n    };\n    return \"#\" + f2(5) + f2(3) + f2(1);\n  }\n  function buildColorPicker(rootEl) {\n    const el2 = (cls, html) => {\n      const d2 = document.createElement(\"div\");\n      d2.className = cls;\n      if (html) d2.innerHTML = html;\n      return d2;\n    };\n    const pop = el2(\"nsv2-cpick\");\n    pop.hidden = true;\n    const sv = el2(\"nsv2-cpick-sv\");\n    const svKnob = el2(\"nsv2-cpick-knob\");\n    sv.appendChild(svKnob);\n    const hueRow = el2(\"nsv2-cpick-hue\");\n    const hueKnob = el2(\"nsv2-cpick-knob nsv2-cpick-hue-knob\");\n    hueRow.appendChild(hueKnob);\n    const row = el2(\"nsv2-cpick-row\");\n    const chip = el2(\"nsv2-cpick-chip\");\n    const hexWrap = el2(\"nsv2-cpick-hexwrap\");\n    const hexIn = document.createElement(\"input\");\n    hexIn.className = \"nsv2-cpick-hex\";\n    hexIn.type = \"text\";\n    hexIn.spellcheck = false;\n    hexIn.maxLength = 7;\n    hexWrap.appendChild(hexIn);\n    const dropBtn = document.createElement(\"button\");\n    dropBtn.type = \"button\";\n    dropBtn.className = \"nsv2-icon-btn nsv2-cpick-drop\";\n    dropBtn.title = \"Pick from screen\";\n    dropBtn.innerHTML = '<svg width=\"17\" height=\"17\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M13.2 2.8a2.3 2.3 0 0 1 3.9 1.7c0 .6-.2 1.2-.7 1.6l-1.5 1.5.6.6a.9.9 0 0 1-1.3 1.3l-.4-.4-6.8 6.8c-.3.3-.7.5-1.1.6l-2.3.5a.7.7 0 0 1-.8-.8l.5-2.3c.1-.4.3-.8.6-1.1l6.8-6.8-.4-.4A.9.9 0 0 1 11.6 4l.6.6 1-1zM6 14.9l6.4-6.4-1-1L5 13.9l-.3 1.3 1.3-.3z\" fill=\"currentColor\"/></svg>';\n    row.append(chip, hexWrap, dropBtn);\n    const designLabel = el2(\"nsv2-cpick-label\");\n    designLabel.textContent = \"Design colors\";\n    const designRow = el2(\"nsv2-cpick-design\");\n    const paletteLabel = el2(\"nsv2-cpick-label\");\n    paletteLabel.textContent = \"Default colors\";\n    const paletteRow = el2(\"nsv2-cpick-design nsv2-cpick-palette\");\n    designLabel.textContent = \"Colors in this design\";\n    paletteLabel.textContent = \"Default solid colors\";\n    const customBtn = document.createElement(\"button\");\n    customBtn.type = \"button\";\n    customBtn.className = \"nsv2-swatch nsv2-swatch--custom\";\n    customBtn.title = \"Custom color\";\n    customBtn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"/></svg>';\n    const dropBtn2 = document.createElement(\"button\");\n    dropBtn2.type = \"button\";\n    dropBtn2.className = \"nsv2-swatch nsv2-swatch--tool\";\n    dropBtn2.title = \"Pick from screen\";\n    dropBtn2.innerHTML = dropBtn.innerHTML;\n    const swView = el2(\"nsv2-cpick-swview\");\n    swView.append(designLabel, designRow, paletteLabel, paletteRow);\n    const handle = el2(\"nsv2-cpick-handle\");\n    const head = el2(\"nsv2-cpick-head\");\n    const headTitle = el2(\"nsv2-cpick-title\");\n    const headDone = document.createElement(\"button\");\n    headDone.type = \"button\";\n    headDone.className = \"nsv2-cpick-done\";\n    headDone.innerHTML = '<svg width=\"20\" height=\"20\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"/></svg>';\n    const headX = document.createElement(\"button\");\n    headX.type = \"button\";\n    headX.className = \"nsv2-cpick-x\";\n    headX.title = \"Close\";\n    headX.setAttribute(\"aria-label\", \"Close\");\n    headX.innerHTML = '<svg width=\"20\" height=\"20\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"/></svg>';\n    head.append(headX, headTitle, headDone);\n    const tabs = el2(\"nsv2-cpick-tabs\");\n    const tabColor = document.createElement(\"button\");\n    tabColor.type = \"button\";\n    tabColor.className = \"nsv2-cpick-tab is-on\";\n    tabColor.textContent = \"Color\";\n    const tabGrad = document.createElement(\"button\");\n    tabGrad.type = \"button\";\n    tabGrad.className = \"nsv2-cpick-tab\";\n    tabGrad.textContent = \"Gradient\";\n    tabs.append(tabColor, tabGrad);\n    tabs.hidden = true;\n    const gradHost = el2(\"nsv2-cpick-gradhost\");\n    gradHost.hidden = true;\n    let gradDock = null;\n    const backBtn = document.createElement(\"button\");\n    backBtn.type = \"button\";\n    backBtn.className = \"nsv2-cpick-back\";\n    backBtn.title = \"Back to colors\";\n    backBtn.innerHTML = '<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M14.5 5.5 8 12l6.5 6.5\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\n    head.insertBefore(backBtn, headTitle);\n    const specView = el2(\"nsv2-cpick-specview\");\n    specView.append(sv, hueRow, row);\n    pop.append(handle, head, swView, specView, gradHost, tabs);\n    rootEl.appendChild(pop);\n    const isMobile = () => rootEl.clientWidth < 768;\n    const returnGradNodes = () => {\n      if (!gradDock) return;\n      for (let i2 = gradDock.nodes.length - 1; i2 >= 0; i2--) {\n        const h2 = gradDock.home[i2];\n        const next = h2.next && h2.next.parentElement === h2.parent ? h2.next : null;\n        h2.parent.insertBefore(gradDock.nodes[i2], next);\n      }\n      gradDock = null;\n    };\n    const showTab = (which) => {\n      tabColor.classList.toggle(\"is-on\", which === \"color\");\n      tabGrad.classList.toggle(\"is-on\", which === \"grad\");\n      gradHost.hidden = which !== \"grad\";\n      specView.style.display = \"\";\n      swView.style.display = \"\";\n      pop.classList.toggle(\"is-grad\", which === \"grad\");\n    };\n    tabColor.addEventListener(\"click\", () => showTab(\"color\"));\n    tabGrad.addEventListener(\"click\", () => showTab(\"grad\"));\n    headDone.addEventListener(\"click\", () => close());\n    const setView = (v2) => {\n      pop.classList.toggle(\"is-spectrum\", v2 === \"spectrum\");\n      place();\n    };\n    customBtn.addEventListener(\"click\", () => setView(\"spectrum\"));\n    backBtn.addEventListener(\"click\", () => setView(\"swatches\"));\n    dropBtn2.addEventListener(\"click\", async () => {\n      try {\n        const res = await openEyeDropper();\n        if (res && res.sRGBHex) {\n          hsv = hexToHsv(res.sRGBHex);\n          emit();\n        }\n      } catch (e24) {\n      }\n    });\n    let hsv = { h: 0, s: 1, v: 1 };\n    let cb = null;\n    let closeCb = null;\n    let anchorEl = null;\n    const paint = () => {\n      try {\n        const nm = nearestColorName(hsvToHex(hsv));\n        headTitle.textContent = nm ? nm.charAt(0).toUpperCase() + nm.slice(1) : hsvToHex(hsv).toUpperCase();\n      } catch (e24) {\n        headTitle.textContent = hsvToHex(hsv).toUpperCase();\n      }\n      sv.style.backgroundColor = \"hsl(\" + hsv.h + \", 100%, 50%)\";\n      svKnob.style.left = hsv.s * 100 + \"%\";\n      svKnob.style.top = (1 - hsv.v) * 100 + \"%\";\n      hueKnob.style.left = hsv.h / 360 * 100 + \"%\";\n      const hex3 = hsvToHex(hsv);\n      chip.style.background = hex3;\n      if (document.activeElement !== hexIn) hexIn.value = hex3.toUpperCase();\n      return hex3;\n    };\n    const emit = () => {\n      const hex3 = paint();\n      if (cb) cb(hex3);\n    };\n    const drag = (surface, apply) => {\n      const move = (e24) => {\n        const r2 = surface.getBoundingClientRect();\n        apply(clamp01((e24.clientX - r2.left) / r2.width), clamp01((e24.clientY - r2.top) / r2.height));\n        emit();\n      };\n      surface.addEventListener(\"pointerdown\", (e24) => {\n        e24.preventDefault();\n        surface.setPointerCapture(e24.pointerId);\n        move(e24);\n        const up = () => {\n          surface.removeEventListener(\"pointermove\", move);\n          surface.removeEventListener(\"pointerup\", up);\n        };\n        surface.addEventListener(\"pointermove\", move);\n        surface.addEventListener(\"pointerup\", up);\n      });\n    };\n    drag(sv, (x2, y2) => {\n      hsv.s = x2;\n      hsv.v = 1 - y2;\n    });\n    drag(hueRow, (x2) => {\n      hsv.h = Math.min(359.9, x2 * 360);\n    });\n    hexIn.addEventListener(\"input\", () => {\n      const v2 = hexIn.value.trim();\n      if (/^#?[0-9a-f]{6}$/i.test(v2)) {\n        hsv = hexToHsv(v2.startsWith(\"#\") ? v2 : \"#\" + v2);\n        emit();\n      }\n    });\n    dropBtn.addEventListener(\"click\", async () => {\n      try {\n        const res = await openEyeDropper();\n        if (res && res.sRGBHex) {\n          hsv = hexToHsv(res.sRGBHex);\n          emit();\n        }\n      } catch (e24) {\n      }\n    });\n    const swatchClick = (e24) => {\n      const sw = e24.target.closest(\".nsv2-swatch\");\n      if (!sw || !sw.dataset.c) return;\n      hsv = hexToHsv(sw.dataset.c);\n      emit();\n    };\n    designRow.addEventListener(\"click\", swatchClick);\n    paletteRow.addEventListener(\"click\", swatchClick);\n    let closeT = 0;\n    const close = () => {\n      if (pop.hidden || pop.classList.contains(\"is-closing\")) return;\n      returnGradNodes();\n      if (pop.classList.contains(\"nsv2-cpick--sheet\") && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n        pop.classList.add(\"is-closing\");\n        const done = () => {\n          clearTimeout(closeT);\n          pop.removeEventListener(\"animationend\", done);\n          pop.classList.remove(\"is-closing\");\n          pop.hidden = true;\n        };\n        pop.addEventListener(\"animationend\", done);\n        closeT = setTimeout(done, 400);\n      } else pop.hidden = true;\n      if (closeCb) closeCb();\n      cb = null;\n      closeCb = null;\n      anchorEl = null;\n    };\n    document.addEventListener(\"pointerdown\", (e24) => {\n      if (!pop.hidden && !pop.contains(e24.target) && !(anchorEl && anchorEl.contains(e24.target))) close();\n    });\n    const fillRow = (rowEl, labelEl, colors, lead) => {\n      rowEl.innerHTML = \"\";\n      if (lead) for (const n2 of lead) rowEl.appendChild(n2);\n      labelEl.hidden = rowEl.hidden = !colors.length && !lead;\n      const cur = hsvToHex(hsv).toLowerCase();\n      for (const c2 of colors) {\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\" + (String(c2).toLowerCase() === cur ? \" is-active\" : \"\");\n        sw.dataset.c = c2;\n        sw.style.background = c2;\n        rowEl.appendChild(sw);\n      }\n    };\n    const place = () => {\n      let anchor = anchorEl || rootEl;\n      if (anchor.offsetWidth < 4 && anchor.parentElement) anchor = anchor.parentElement;\n      const ar2 = rootEl.getBoundingClientRect();\n      const br2 = anchor.getBoundingClientRect();\n      const w2 = pop.offsetWidth || 268;\n      const hgt = pop.offsetHeight || 320;\n      let x2 = br2.left - ar2.left - w2 / 2 + br2.width / 2;\n      x2 = Math.min(Math.max(8, x2), rootEl.clientWidth - w2 - 8);\n      let y2 = br2.bottom - ar2.top + 8;\n      if (y2 + hgt > rootEl.clientHeight - 8) y2 = Math.max(8, br2.top - ar2.top - hgt - 8);\n      pop.style.transform = \"translate(\" + x2 + \"px, \" + y2 + \"px)\";\n    };\n    const open = (opts) => {\n      cb = opts.onChange || null;\n      closeCb = opts.onClose || null;\n      anchorEl = opts.anchor || null;\n      hsv = hexToHsv(opts.value || \"#000000\");\n      fillRow(designRow, designLabel, (opts.designColors || []).slice(0, 14), [customBtn, dropBtn2]);\n      fillRow(paletteRow, paletteLabel, opts.palette || []);\n      paint();\n      pop.classList.toggle(\"is-spectrum\", opts.view === \"spectrum\");\n      const sheet = isMobile();\n      pop.classList.toggle(\"nsv2-cpick--sheet\", sheet);\n      returnGradNodes();\n      if (opts.gradient && opts.gradient.nodes && opts.gradient.nodes.length) {\n        gradDock = {\n          nodes: opts.gradient.nodes,\n          home: opts.gradient.nodes.map((n2) => ({ parent: n2.parentElement, next: n2.nextSibling }))\n        };\n        gradDock.nodes.forEach((n2) => {\n          gradHost.appendChild(n2);\n          n2.hidden = false;\n        });\n        tabs.hidden = false;\n      } else {\n        tabs.hidden = true;\n      }\n      showTab(\"color\");\n      clearTimeout(closeT);\n      pop.classList.remove(\"is-closing\");\n      pop.hidden = false;\n      if (sheet) pop.style.transform = \"\";\n      else place();\n    };\n    headX.addEventListener(\"click\", () => close());\n    return { open, close, element: pop };\n  }\n\n  // src/shell.js\n  function installShell({ root, ui: ui2, editor, api }) {\n    const { openPane, closePanel, getActivePane, discardSelection } = api;\n    const backdrop = document.createElement(\"div\");\n    backdrop.className = \"nsv2-sheet-backdrop\";\n    backdrop.addEventListener(\"click\", () => closePanel());\n    root.appendChild(backdrop);\n    const head = makeSheetHead({\n      onClose: () => {\n        if (typeof ui2.beforeSheetClose === \"function\" && ui2.beforeSheetClose() === false) return;\n        closePanel();\n      },\n      onDone: () => {\n        if (typeof ui2.beforeSheetDone === \"function\" && ui2.beforeSheetDone() === false) return;\n        closePanel();\n      },\n      onBack: () => {\n        const b2 = ui2.panel.querySelector(\".nsv2-pane:not([hidden]) .nsv2-pane-back\");\n        if (b2) b2.click();\n      }\n    });\n    ui2.panel.insertBefore(head.el, ui2.panel.firstChild);\n    ui2.sheetHead = head;\n    ui2.sheetDone = head.done;\n    const detachSwipe = attachSwipeDismiss(head.handle, ui2.panel, () => closePanel());\n    const updateSel = () => {\n      root.classList.toggle(\"nsv2-has-sel\", !!(editor.canvas && editor.canvas.getActiveObject()));\n    };\n    editor.on && editor.on(\"selection\", updateSel);\n    editor.canvas.on(\"selection:created\", updateSel);\n    editor.canvas.on(\"selection:updated\", updateSel);\n    editor.canvas.on(\"selection:cleared\", updateSel);\n    updateSel();\n    const chip = (label, iconHtml, onClick, cls) => {\n      const b2 = document.createElement(\"button\");\n      b2.type = \"button\";\n      b2.className = \"nsv2-mchip\" + (cls ? \" \" + cls : \"\");\n      b2.innerHTML = iconHtml + '<span class=\"nsv2-mchip-lab\">' + label + \"</span>\";\n      b2.addEventListener(\"click\", onClick);\n      return b2;\n    };\n    const layersChip = chip(\"Layers\", micons.layers, () => openPane(getActivePane() === \"layers\" ? null : \"layers\"));\n    layersChip.hidden = !!(api.toolAllowed && !api.toolAllowed(\"layers\"));\n    ui2.ctxbar.append(\n      chip(\"Zoom\", micons.zoom, () => api.openZoomTray && api.openZoomTray()),\n      layersChip,\n      chip(\"More\", micons.more, (e24) => api.openMoreMenu && api.openMoreMenu(e24))\n    );\n    const doneBtn = document.createElement(\"button\");\n    doneBtn.type = \"button\";\n    doneBtn.className = \"nsv2-round-btn nsv2-mstripe-done\";\n    doneBtn.title = \"Done\";\n    doneBtn.innerHTML = micons.check;\n    doneBtn.addEventListener(\"click\", () => discardSelection());\n    ui2.ctxbar.appendChild(doneBtn);\n    const canvasTool = document.createElement(\"button\");\n    canvasTool.type = \"button\";\n    canvasTool.className = \"nsv2-tool nsv2-tool--canvas\";\n    canvasTool.innerHTML = micons.canvas + '<span class=\"nsv2-tool-label\">Canvas</span>';\n    canvasTool.addEventListener(\"click\", () => openPane(getActivePane() === \"canvas\" ? null : \"canvas\"));\n    ui2.rail.appendChild(canvasTool);\n    const zoomTool = document.createElement(\"button\");\n    zoomTool.type = \"button\";\n    zoomTool.className = \"nsv2-tool nsv2-tool--zoom\";\n    zoomTool.innerHTML = micons.zoom + '<span class=\"nsv2-tool-label\">Zoom</span>';\n    zoomTool.addEventListener(\"click\", () => api.openZoomTray && api.openZoomTray());\n    ui2.rail.appendChild(zoomTool);\n    return {\n      destroy() {\n        detachSwipe();\n      }\n    };\n  }\n  function makeSheetHead({ title = \"\", onClose, onDone, onBack, done = true } = {}) {\n    const btn = (cls, label, html) => {\n      const b2 = document.createElement(\"button\");\n      b2.type = \"button\";\n      b2.className = \"nsv2-icon-btn \" + cls;\n      b2.title = label;\n      b2.setAttribute(\"aria-label\", label);\n      b2.innerHTML = html;\n      return b2;\n    };\n    const el2 = document.createElement(\"div\");\n    el2.className = \"nsv2-sheet-head w3_bg\";\n    const handle = document.createElement(\"div\");\n    handle.className = \"nsv2-sheet-handle\";\n    handle.innerHTML = '<span class=\"nsv2-sheet-grip\"></span>';\n    const row = document.createElement(\"div\");\n    row.className = \"nsv2-sheet-row\";\n    const x2 = btn(\"nsv2-sheet-x\", \"Close\", micons.close);\n    x2.addEventListener(\"click\", () => onClose && onClose());\n    const back = btn(\"nsv2-sheet-back\", \"Back\", \"\");\n    back.hidden = true;\n    back.addEventListener(\"click\", () => onBack && onBack());\n    const ttl = document.createElement(\"div\");\n    ttl.className = \"nsv2-sheet-title\";\n    ttl.textContent = title;\n    const extra = document.createElement(\"div\");\n    extra.className = \"nsv2-sheet-extra\";\n    const doneBtn = btn(\"nsv2-sheet-done\", \"Done\", micons.check);\n    doneBtn.hidden = !done;\n    doneBtn.addEventListener(\"click\", () => onDone && onDone());\n    row.append(x2, back, ttl, extra, doneBtn);\n    el2.append(handle, row);\n    return {\n      el: el2,\n      handle,\n      x: x2,\n      back,\n      title: ttl,\n      extra,\n      done: doneBtn,\n      set({ title: t2, back: hasBack } = {}) {\n        if (t2 != null) ttl.textContent = t2;\n        if (hasBack != null) back.hidden = !hasBack;\n      }\n    };\n  }\n  function attachSwipeDismiss(handle, surface, onDismiss, prop = \"transform\") {\n    let y0 = null;\n    const val = (dy) => prop === \"translate\" ? \"0 \" + dy + \"px\" : \"translateY(\" + dy + \"px)\";\n    const onGrab = (e24) => {\n      if (!handle.offsetParent) return;\n      y0 = (e24.touches ? e24.touches[0] : e24).clientY;\n      surface.style.transition = \"none\";\n    };\n    const onMove = (e24) => {\n      if (y0 == null) return;\n      const y2 = (e24.touches ? e24.touches[0] : e24).clientY;\n      surface.style[prop] = val(Math.max(0, y2 - y0));\n    };\n    const onDrop = (e24) => {\n      if (y0 == null) return;\n      const y2 = (e24.changedTouches ? e24.changedTouches[0] : e24).clientY;\n      const dy = y2 - y0;\n      y0 = null;\n      surface.style.transition = \"\";\n      surface.style[prop] = \"\";\n      if (dy > 70) onDismiss();\n    };\n    handle.addEventListener(\"touchstart\", onGrab, { passive: true });\n    handle.addEventListener(\"touchmove\", onMove, { passive: true });\n    handle.addEventListener(\"touchend\", onDrop);\n    handle.addEventListener(\"pointerdown\", onGrab);\n    window.addEventListener(\"pointermove\", onMove);\n    window.addEventListener(\"pointerup\", onDrop);\n    return () => {\n      handle.removeEventListener(\"touchstart\", onGrab);\n      handle.removeEventListener(\"touchmove\", onMove);\n      handle.removeEventListener(\"touchend\", onDrop);\n      handle.removeEventListener(\"pointerdown\", onGrab);\n      window.removeEventListener(\"pointermove\", onMove);\n      window.removeEventListener(\"pointerup\", onDrop);\n    };\n  }\n\n  // src/modes.js\n  var RAIL_TOOLS = [\"text\", \"uploads\", \"ai\", \"elements\", \"layers\", \"designs\", \"premade\"];\n  var TOOL_KIND = {\n    text: \"text\",\n    uploads: \"image\",\n    ai: \"image\",\n    designs: \"image\",\n    // Exported tab places flat PNGs; Saved tab loads whole designs (sanitized)\n    premade: \"image\",\n    elements: \"element\"\n  };\n  var KIND_LABEL = { text: \"Text\", image: \"Images\", element: \"Shapes\" };\n  var MODES = {\n    // Text-only studio (the by-size \"Add Text\" successor): Text pane (add +\n    // text styles), the full text toolbar, and Layers for stacking lines.\n    // Owen 9-20 \"for this let's get rid of save and file \u2026 also the canvas size\n    // as this will be a fixed canvas size\" \u2014 a one-off for THIS preset; the\n    // full studio keeps all three. The size itself comes from the host/board\n    // config (config.js `board`), not from here.\n    // Board 22 \u00D7 22 in (Owen 9-21 \"make the canvas 22x22 on the text only\" \u2014\n    // the same square as the full studio's default board; it replaced the\n    // 22 \u00D7 16 Add Text-stage proportions of 9-20). Still FIXED: the size\n    // control is hidden and the board is pinned at construction + on restore.\n    text: { label: \"text only\", tools: [\"text\", \"layers\"], hide: [\"save\", \"file\", \"canvasSize\", \"name\"], canvas: { w: 22, h: 22 } }\n  };\n  function resolveMode(opts) {\n    let tools = null;\n    let key = null;\n    let label = \"limited\";\n    let hide = [];\n    let canvas = null;\n    const preset = opts.mode ? MODES[opts.mode] : null;\n    if (opts.mode && !preset) console.warn(\"studio-v2: unknown mode ignored (full studio)\", opts.mode);\n    if (preset) {\n      tools = preset.tools;\n      if (Array.isArray(opts.tools)) {\n        const both = preset.tools.filter((t2) => opts.tools.includes(t2));\n        if (both.length) tools = both;\n        else console.warn(\"studio-v2: host tools exclude every tool of mode \" + opts.mode + \" \\u2014 using the mode's own tools\", opts.tools);\n      }\n      key = String(opts.mode);\n      label = preset.label;\n      hide = preset.hide || [];\n      canvas = preset.canvas || null;\n    } else if (Array.isArray(opts.tools)) {\n      tools = opts.tools;\n      key = \"tools:\" + tools.slice().sort().join(\"+\");\n    }\n    if (!tools) return null;\n    if (Array.isArray(opts.hide)) hide = opts.hide;\n    const c2 = opts.canvas || canvas;\n    canvas = c2 && c2.w > 0 && c2.h > 0 ? { w: +c2.w, h: +c2.h } : null;\n    const set = new Set(tools.filter((t2) => RAIL_TOOLS.includes(t2)));\n    const kinds = new Set([...set].map((t2) => TOOL_KIND[t2]).filter(Boolean));\n    return { key, label, tools: set, kinds, hide: new Set(hide), canvas };\n  }\n  function snapshotObjectAllowed(o2, kinds) {\n    if (!o2) return true;\n    if (o2.__base) return true;\n    if (o2.__el) return kinds.has(\"element\");\n    const t2 = String(o2.type || \"\").toLowerCase();\n    if (t2 === \"textbox\" || t2 === \"text\" || t2 === \"i-text\" || t2 === \"itext\") return kinds.has(\"text\");\n    if (t2 === \"image\") return kinds.has(\"image\");\n    if (t2 === \"group\" || t2 === \"activeselection\") return (o2.objects || []).every((c2) => snapshotObjectAllowed(c2, kinds));\n    return kinds.has(\"element\");\n  }\n  function sanitizeSnapshot(data, kinds) {\n    if (!data || !Array.isArray(data.objects)) return { data, removed: 0 };\n    const kept = data.objects.filter((o2) => snapshotObjectAllowed(o2, kinds));\n    const removed = data.objects.length - kept.length;\n    if (!removed) return { data, removed: 0 };\n    return { data: Object.assign({}, data, { objects: kept }), removed };\n  }\n\n  // src/text-layer.js\n  var TEXT_OBJECTS_V = 1;\n  var TEXT_LAYER_HIRES_MAX_PX = 64e6;\n  var TEXT_LAYER_MAX_SIDE = 16384;\n  var TEXT_LAYER_MAX_PX = 16e6;\n  var queue = Promise.resolve();\n  function renderTextLayer(req) {\n    const run = () => render(req || {});\n    const p2 = queue.then(run, run);\n    queue = p2.catch(() => {\n    });\n    return p2;\n  }\n  async function render({ textObjects: t2, baseImage, scale }) {\n    if (!t2 || t2.v !== TEXT_OBJECTS_V || !Array.isArray(t2.objects) || !t2.board || !(t2.board.w > 0) || !(t2.board.h > 0) || !t2.base || !(t2.base.w > 0)) throw new Error(\"__dspTextLayer: textObjects v1 required\");\n    if (!baseImage || !(baseImage.pxW > 0)) throw new Error(\"__dspTextLayer: baseImage.pxW required\");\n    const want = Number.isFinite(scale) && scale > 0 ? scale : 1;\n    const bw = t2.base.w;\n    const bh = baseImage.pxH > 0 && !(t2.base.h > 0 && Math.abs(t2.base.h * baseImage.pxW / bw - baseImage.pxH) <= 1) ? bw * baseImage.pxH / baseImage.pxW : t2.base.h;\n    if (!(bh > 0)) throw new Error(\"__dspTextLayer: no art height\");\n    const f2 = baseImage.pxW / bw;\n    const artL = t2.base.cx - bw / 2, artT = t2.base.cy - bh / 2;\n    const bi2 = Math.max(0, t2.base.index | 0);\n    const objects = [];\n    t2.objects.forEach((o2, i2) => {\n      if (o2 && typeof o2 === \"object\" && !o2.__base) objects.push(Object.assign({}, o2, { __dspBelow: i2 < bi2 }));\n    });\n    if (!objects.length) return null;\n    const area = document.createElement(\"div\");\n    area.setAttribute(\"aria-hidden\", \"true\");\n    area.style.cssText = \"position:fixed;left:-20000px;top:0;width:320px;height:320px;overflow:hidden;visibility:hidden;pointer-events:none;\";\n    const cv = document.createElement(\"canvas\");\n    area.appendChild(cv);\n    document.body.appendChild(area);\n    let ed = null;\n    try {\n      ed = new Editor(cv, area, { designW: t2.board.w, designH: t2.board.h });\n      const fams = /* @__PURE__ */ new Set();\n      for (const m of JSON.stringify(objects).matchAll(/\"fontFamily\"\\s*:\\s*\"([^\"]+)\"/g)) fams.add(m[1]);\n      await Promise.all([...fams].map((fam) => loadFont(fam).catch(() => {\n      })));\n      await ed.loadDesign({ __designW: t2.board.w, __designH: t2.board.h, objects });\n      await ed.whenRestoreSettled();\n      const c2 = ed.canvas;\n      const objs = ed._boardObjects();\n      const shaped = objs.filter((o2) => o2.isType && o2.isType(\"textbox\") && o2.__shape);\n      if (shaped.some((o2) => !o2.__shapePath)) {\n        await Promise.all(shaped.map((o2) => Promise.race([\n          ensureFontBinary(o2.fontFamily, parseInt(o2.fontWeight, 10) || (o2.fontWeight === \"bold\" ? 700 : 400), o2.fontStyle === \"italic\"),\n          new Promise((r2) => setTimeout(r2, 6e3))\n        ])));\n        for (const o2 of shaped) if (!o2.__shapePath) ed._shapeApply(o2);\n      }\n      c2.discardActiveObject();\n      c2.backgroundColor = \"\";\n      c2.renderAll();\n      if (!objs.length) return null;\n      const below = objs.filter((o2) => o2.__dspBelow);\n      const front = objs.filter((o2) => !o2.__dspBelow);\n      objs.forEach((o2) => {\n        delete o2.__dspBelow;\n      });\n      const ink = ed._inkBounds(objs);\n      const L2 = Math.max(0, Math.min(artL, ink.left)), T2 = Math.max(0, Math.min(artT, ink.top));\n      const R3 = Math.min(ed.designW, Math.max(artL + bw, ink.left + ink.width)), B2 = Math.min(ed.designH, Math.max(artT + bh, ink.top + ink.height));\n      const x0 = Math.floor((L2 - artL) * f2), y0 = Math.floor((T2 - artT) * f2);\n      const W2 = Math.ceil((R3 - artL) * f2) - x0, H2 = Math.ceil((B2 - artT) * f2) - y0;\n      if (W2 <= 0 || H2 <= 0) return null;\n      const z2 = c2.getZoom();\n      const all = c2.getObjects();\n      const vis = new Map(all.map((o2) => [o2, o2.visible]));\n      const pass = async (show, s3) => {\n        for (const o2 of all) o2.visible = vis.get(o2) && show.includes(o2);\n        const el2 = c2.toCanvasElement(f2 * s3 / z2, {\n          // same board crop as textLayerOut / exportPng: board (x, y) sits at apron + (x, y) \u00D7 zoom\n          left: ed.apronX + (artL + x0 / f2) * z2,\n          top: ed.apronY + (artT + y0 / f2) * z2,\n          // +\u00BC px: fabric truncates the scaled size, and W / f \u00D7 f lands a hair under W in floats\n          width: (W2 + 0.25 / s3) / f2 * z2,\n          height: (H2 + 0.25 / s3) / f2 * z2\n        });\n        try {\n          const blob = await new Promise((r2) => el2.toBlob(r2, \"image/png\"));\n          if (!blob || !blob.size) throw new Error(\"empty text layer\");\n          return blob;\n        } finally {\n          el2.width = el2.height = 0;\n        }\n      };\n      const area2 = W2 * H2;\n      const s0 = Math.min(want, Math.sqrt(TEXT_LAYER_HIRES_MAX_PX / area2), TEXT_LAYER_MAX_SIDE / Math.max(W2, H2));\n      const s1 = Math.min(want, Math.sqrt(TEXT_LAYER_MAX_PX / area2));\n      const rungs = s1 < s0 ? [s0, s1] : [s0];\n      let lastErr = null;\n      for (const s3 of rungs) {\n        try {\n          const blob = await pass(front, s3);\n          const belowBlob = below.length ? await pass(below, s3) : null;\n          return { v: 1, blob, belowBlob, width: Math.floor(W2 * s3 + 0.25), height: Math.floor(H2 * s3 + 0.25), scale: s3, offset: { x: -x0, y: -y0 }, pxW: Math.round(bw * f2), pxH: Math.round(bh * f2) };\n        } catch (err) {\n          lastErr = err;\n        }\n      }\n      throw lastErr || new Error(\"text layer failed\");\n    } finally {\n      if (ed) {\n        try {\n          ed.destroy();\n        } catch (e24) {\n        }\n      }\n      area.remove();\n    }\n  }\n\n  // src/index.js\n  try {\n    window.__dspTextLayer = renderTextLayer;\n  } catch (e24) {\n  }\n  function mount(host, opts = {}) {\n    configure(opts.storage, opts.units, opts.board);\n    const ui2 = buildUI(host, opts);\n    const tracked = [];\n    const cleanups = [];\n    const listen = (target2, type, fn2, o2) => {\n      target2.addEventListener(type, fn2, o2);\n      tracked.push([target2, type, fn2, o2]);\n      return fn2;\n    };\n    const board = boardCfg();\n    const mode = resolveMode(opts);\n    const editor = new Editor(ui2.canvasEl, ui2.area, mode && mode.canvas ? { designW: mode.canvas.w * 50, designH: mode.canvas.h * 50 } : { designW: toIn(board.defaultW) * 50, designH: toIn(board.defaultH) * 50 });\n    setEyeDropperTarget({ canvasEl: () => editor.canvas.lowerCanvasEl, hostEl: () => ui2.root, canvas: () => editor.canvas });\n    const toolAllowed = (t2) => !mode || mode.tools.has(t2);\n    const kindAllowed = (k2) => !mode || mode.kinds.has(k2);\n    if (mode) ui2.root.dataset.mode = mode.key;\n    Object.entries(ui2.toolBtns).forEach(([tid, b2]) => {\n      b2.hidden = !toolAllowed(tid);\n    });\n    ui2.fileOpen.hidden = !toolAllowed(\"designs\");\n    const chromeHidden = (k2) => !!(mode && mode.hide.has(k2));\n    ui2.saveWrap.hidden = ui2.topVdiv.hidden = chromeHidden(\"save\");\n    ui2.fileWrap.hidden = chromeHidden(\"file\");\n    ui2.canvasSizeLabel.hidden = ui2.canvasSizeWrap.hidden = ui2.canvasSizeVdiv.hidden = chromeHidden(\"canvasSize\");\n    ui2.designNameInput.hidden = chromeHidden(\"name\");\n    let refusePill = null;\n    const BASE_NOTE = { baseDelete: \"Your upload stays in this design.\", baseCopy: \"Your upload can\\u2019t be copied here.\" };\n    function refuse(kind) {\n      if (refusePill) refusePill.remove();\n      const p2 = placingPill(BASE_NOTE[kind] || (KIND_LABEL[kind] || \"That\") + \" can\\u2019t be added here. This studio is \" + (mode ? mode.label : \"limited\") + \".\");\n      p2.classList.add(\"is-note\");\n      refusePill = p2;\n      setTimeout(() => {\n        if (refusePill === p2) refusePill = null;\n        p2.remove();\n      }, 2600);\n      return null;\n    }\n    editor.on(\"refuse\", refuse);\n    let lastStripped = 0;\n    function modeSanitize(data) {\n      lastStripped = 0;\n      if (!mode) return data;\n      const r2 = sanitizeSnapshot(data, mode.kinds);\n      lastStripped = r2.removed;\n      if (mode.canvas) {\n        const w2 = Math.round(mode.canvas.w * 50), h2 = Math.round(mode.canvas.h * 50);\n        if (r2.data.__designW !== w2 || r2.data.__designH !== h2) r2.data = Object.assign({}, r2.data, { __designW: w2, __designH: h2 });\n      }\n      if (r2.removed) {\n        const p2 = placingPill(r2.removed + (r2.removed === 1 ? \" item was\" : \" items were\") + \" left out. This studio is \" + mode.label + \".\");\n        p2.classList.add(\"is-note\");\n        setTimeout(() => p2.remove(), 3600);\n      }\n      return r2.data;\n    }\n    const baseImg = opts.baseImage && opts.baseImage.url ? opts.baseImage : null;\n    const strHash = (s3) => {\n      let h2 = 5381;\n      for (let i2 = 0; i2 < s3.length; i2++) h2 = (h2 << 5) + h2 + s3.charCodeAt(i2) | 0;\n      return (h2 >>> 0).toString(36);\n    };\n    const DRAFT_KEY = \"nsv2Draft\" + (mode ? \":\" + mode.key : \"\") + (baseImg ? \":\" + strHash(baseImg.url.split(\"?\")[0]) : \"\");\n    const SAVE_KEY = DRAFT_KEY + \":save\";\n    const SURFACES = [\"page\", \"popup\", \"embed\"];\n    const surface = SURFACES.includes(opts.surface) ? opts.surface : opts.onUseDesign && opts.onHome ? \"popup\" : host.closest && host.closest(\"[data-nsv3-embed]\") ? \"embed\" : \"page\";\n    let firstAddSent = false;\n    function trackAdd(e24) {\n      track(e24);\n      if (firstAddSent) return;\n      firstAddSent = true;\n      track(\"first_add\");\n    }\n    let firstSaveSent = false;\n    let openedSaved = false;\n    let useSavedSent = false;\n    function trackOpenSaved() {\n      if (openedSaved) return;\n      openedSaved = true;\n      track(\"open_saved\");\n    }\n    function trackUse() {\n      track(\"use_design\", editor.canvas.getObjects().length);\n      if (!openedSaved || useSavedSent) return;\n      useSavedSent = true;\n      track(\"use_saved\");\n    }\n    ui2.root.querySelectorAll(\"[title]\").forEach((b2) => {\n      b2.dataset.tip = b2.title;\n      b2.removeAttribute(\"title\");\n    });\n    const tipEl = document.createElement(\"div\");\n    tipEl.className = \"nsv2-tip\";\n    ui2.root.appendChild(tipEl);\n    let tipTimer = 0;\n    function hideTip() {\n      clearTimeout(tipTimer);\n      tipEl.classList.remove(\"is-show\");\n    }\n    function showTip(el2) {\n      const label = el2.dataset.tip;\n      if (!label || !el2.isConnected) return;\n      tipEl.textContent = label;\n      tipEl.classList.add(\"is-show\");\n      const r2 = el2.getBoundingClientRect();\n      const a2 = ui2.root.getBoundingClientRect();\n      const w2 = tipEl.offsetWidth, h2 = tipEl.offsetHeight;\n      const x2 = Math.min(Math.max(6, r2.left - a2.left + r2.width / 2 - w2 / 2), a2.width - w2 - 6);\n      let y2 = r2.bottom - a2.top + 9;\n      let above = false;\n      if (y2 + h2 > a2.height - 6) {\n        y2 = r2.top - a2.top - h2 - 9;\n        above = true;\n      }\n      tipEl.classList.toggle(\"is-above\", above);\n      tipEl.style.transform = \"translate(\" + x2 + \"px, \" + y2 + \"px)\";\n      tipEl.style.setProperty(\"--tip-caret\", Math.round(r2.left - a2.left + r2.width / 2 - x2) + \"px\");\n    }\n    ui2.root.addEventListener(\"pointerover\", (e24) => {\n      const el2 = e24.target.closest(\"[data-tip]\");\n      clearTimeout(tipTimer);\n      if (!el2 || !ui2.root.contains(el2)) return hideTip();\n      tipTimer = setTimeout(() => showTip(el2), 150);\n    });\n    ui2.root.addEventListener(\"pointerout\", (e24) => {\n      if (e24.target.closest(\"[data-tip]\")) hideTip();\n    });\n    ui2.root.addEventListener(\"pointerdown\", hideTip, true);\n    const busySpin = document.createElement(\"div\");\n    busySpin.className = \"nsv2-obj-busy\";\n    busySpin.innerHTML = '<span class=\"nsv2-bgr-spin\"></span>';\n    busySpin.hidden = true;\n    ui2.area.appendChild(busySpin);\n    let busyCount = 0;\n    function askDialog(message, opts2 = {}) {\n      return new Promise((resolve) => {\n        ui2.dlgInput.hidden = true;\n        ui2.dlgMsg.textContent = message;\n        ui2.dlgOk.querySelector(\"span\").textContent = opts2.ok || \"OK\";\n        ui2.dlgCancel.textContent = opts2.cancel || \"Cancel\";\n        ui2.dlgCancel.hidden = opts2.cancel === null;\n        ui2.dlgAlt.textContent = opts2.alt || \"\";\n        ui2.dlgAlt.hidden = !opts2.alt;\n        ui2.dlgModal.hidden = false;\n        const done = (val) => {\n          ui2.dlgModal.hidden = true;\n          ui2.dlgOk.onclick = ui2.dlgCancel.onclick = ui2.dlgAlt.onclick = null;\n          resolve(val);\n        };\n        ui2.dlgOk.onclick = () => done(true);\n        ui2.dlgCancel.onclick = () => done(false);\n        ui2.dlgAlt.onclick = () => done(\"alt\");\n      });\n    }\n    function askName(message, opts2 = {}) {\n      return new Promise((resolve) => {\n        const fallback = opts2.placeholder || \"Untitled design\";\n        ui2.dlgMsg.textContent = message;\n        ui2.dlgInput.hidden = false;\n        ui2.dlgInput.value = opts2.value || \"\";\n        ui2.dlgInput.placeholder = fallback;\n        ui2.dlgOk.querySelector(\"span\").textContent = opts2.ok || \"Save\";\n        ui2.dlgCancel.textContent = \"Cancel\";\n        ui2.dlgCancel.hidden = false;\n        ui2.dlgAlt.hidden = true;\n        ui2.dlgModal.hidden = false;\n        const done = (val) => {\n          ui2.dlgModal.hidden = true;\n          ui2.dlgInput.hidden = true;\n          ui2.dlgOk.onclick = ui2.dlgCancel.onclick = ui2.dlgAlt.onclick = null;\n          ui2.dlgInput.onkeydown = null;\n          resolve(val);\n        };\n        ui2.dlgOk.onclick = () => done(ui2.dlgInput.value.trim() || fallback);\n        ui2.dlgCancel.onclick = () => done(null);\n        ui2.dlgInput.onkeydown = (e24) => {\n          if (e24.key === \"Enter\") {\n            e24.preventDefault();\n            ui2.dlgOk.click();\n          } else if (e24.key === \"Escape\") {\n            e24.preventDefault();\n            done(null);\n          }\n        };\n        requestAnimationFrame(() => {\n          ui2.dlgInput.focus();\n          ui2.dlgInput.select();\n        });\n      });\n    }\n    async function withObjBusy(obj, fn2) {\n      busyCount++;\n      const timer = setTimeout(() => {\n        if (!busyCount) return;\n        const c2 = obj.getCenterPoint();\n        const vpt = editor.canvas.viewportTransform;\n        const cvR = editor.canvas.upperCanvasEl.getBoundingClientRect();\n        const aR = ui2.area.getBoundingClientRect();\n        busySpin.style.left = cvR.left - aR.left + c2.x * vpt[0] + vpt[4] + \"px\";\n        busySpin.style.top = cvR.top - aR.top + c2.y * vpt[3] + vpt[5] + \"px\";\n        busySpin.hidden = false;\n      }, 150);\n      try {\n        return await fn2();\n      } finally {\n        clearTimeout(timer);\n        if (--busyCount === 0) busySpin.hidden = true;\n      }\n    }\n    let activePane = null;\n    let lastTrayObj = null;\n    let paneBeforeFonts = null;\n    let currentFamily = \"Poppins\";\n    let movedReset = null;\n    let mtrayKind = null;\n    const isMobileView = () => ui2.root.clientWidth < 768;\n    const railIdFor = (id) => id === \"fonts\" || id === \"effects\" || id === \"color\" || id === \"format\" || id === \"spacing\" || id === \"shape\" ? \"text\" : id === \"bgr\" || id === \"crop\" || id === \"filters\" || id === \"recolor\" || id === \"adjust\" ? \"uploads\" : id === \"border\" || id === \"ends\" || id === \"lnstyle\" ? \"elements\" : id;\n    const paneAllowed = (id) => !id || !(railIdFor(id) in ui2.toolBtns) || toolAllowed(railIdFor(id));\n    const TEXT_OPTION_PANES = [\"fonts\", \"color\", \"format\", \"spacing\", \"effects\", \"shape\", \"nudge\"];\n    function exitTextEditingForOptions() {\n      if (!isMobileView()) return;\n      const t2 = editor.activeText && editor.activeText();\n      if (t2 && t2.isEditing) {\n        try {\n          t2.exitEditing();\n        } catch (e24) {\n        }\n        editor.canvas.requestRenderAll();\n      }\n    }\n    let heldPane = null;\n    let holdTimer = 0;\n    const paneEl = (id) => id ? ui2[id + \"Pane\"] || (id === \"lnstyle\" ? ui2.lnStylePane : null) : null;\n    const isSheetLayout = () => ui2.root.getBoundingClientRect().width < 768 && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n    function holdPaneForSlide(prev, id) {\n      if (heldPane) {\n        clearTimeout(holdTimer);\n        if (heldPane !== paneEl(id)) heldPane.hidden = true;\n        heldPane = null;\n      }\n      const pane = !id && prev ? paneEl(prev) : null;\n      if (!pane || !isSheetLayout()) return;\n      pane.hidden = false;\n      heldPane = pane;\n      holdTimer = setTimeout(() => {\n        if (heldPane !== pane) return;\n        heldPane = null;\n        if (activePane !== prev) pane.hidden = true;\n      }, 360);\n    }\n    function openPane(id) {\n      if (!paneAllowed(id)) return;\n      if (id && chat) {\n        if (!chat.busy && (chat.mode === \"create\" || !chat.versions.length || chat.applied)) closeChat(true);\n        else parkChat();\n      }\n      const prev = activePane;\n      activePane = id;\n      if (id) closeMtray();\n      if (id && TEXT_OPTION_PANES.includes(id)) exitTextEditingForOptions();\n      if (id === \"layers\") renderLayers();\n      if (id === \"text\") ensureTreatmentThumbs();\n      if (id !== \"effects\") closeFxColorPop();\n      const railId = railIdFor(id);\n      Object.entries(ui2.toolBtns).forEach(([tid, b2]) => b2.classList.toggle(\"is-active\", !!id && tid === railId));\n      ui2.root.classList.toggle(\"nsv2-panel-open\", !!id);\n      ui2.textPane.hidden = id !== \"text\";\n      ui2.fontsPane.hidden = id !== \"fonts\";\n      ui2.uploadsPane.hidden = id !== \"uploads\";\n      ui2.elementsPane.hidden = id !== \"elements\";\n      ui2.layersPane.hidden = id !== \"layers\";\n      ui2.designsPane.hidden = id !== \"designs\";\n      ui2.premadePane.hidden = id !== \"premade\";\n      ui2.colorPane.hidden = id !== \"color\";\n      ui2.effectsPane.hidden = id !== \"effects\";\n      ui2.cropPane.hidden = id !== \"crop\";\n      ui2.bgrPane.hidden = id !== \"bgr\";\n      ui2.filtersPane.hidden = id !== \"filters\";\n      ui2.recolorPane.hidden = id !== \"recolor\";\n      ui2.adjustPane.hidden = id !== \"adjust\";\n      ui2.canvasPane.hidden = id !== \"canvas\";\n      if (id === \"canvas\" && ui2.ctxCanvasGroup.parentElement !== ui2.canvasPane) {\n        ui2.canvasPane.appendChild(ui2.ctxCanvasGroup);\n        ui2.ctxCanvasGroup.hidden = false;\n        editor._emit(\"canvaspane\");\n      } else if (id !== \"canvas\" && ui2.ctxCanvasGroup.parentElement === ui2.canvasPane) {\n        ui2.ctxbar.insertBefore(ui2.ctxCanvasGroup, ui2.ctxMoreBtn);\n        editor._emit(\"canvaspane\");\n      }\n      ui2.formatPane.hidden = id !== \"format\";\n      if (id === \"format\" && ui2.fmtCluster.parentElement !== ui2.formatPane) {\n        ui2.formatPane.appendChild(ui2.fmtCluster);\n      } else if (id !== \"format\" && ui2.fmtCluster.parentElement === ui2.formatPane) {\n        ui2.fmtChip.parentElement.insertBefore(ui2.fmtCluster, ui2.fmtChip);\n      }\n      ui2.fmtChip.classList.toggle(\"is-active\", id === \"format\");\n      ui2.spacingPane.hidden = id !== \"spacing\";\n      if (id === \"spacing\" && ui2.letterSp.wrap.parentElement !== ui2.spacingPane) {\n        hideSpop();\n        ui2.spacingPane.append(ui2.letterSp.wrap, ui2.lineSp.wrap);\n        if (editor.activeText()) syncSpop();\n      } else if (id !== \"spacing\" && ui2.letterSp.wrap.parentElement === ui2.spacingPane) {\n        ui2.spop.append(ui2.letterSp.wrap, ui2.lineSp.wrap);\n      }\n      ui2.spacingChip.classList.toggle(\"is-active\", id === \"spacing\");\n      ui2.nudgePane.hidden = id !== \"nudge\";\n      ui2.nudgeChip.classList.toggle(\"is-on\", id === \"nudge\");\n      ui2.shapePane.hidden = id !== \"shape\";\n      if (id === \"shape\" && ui2.shapeTiles.parentElement !== ui2.shapePane) {\n        ui2.shapePane.appendChild(ui2.shapeTiles);\n        ui2.shapeTiles.after(ui2.fxCurveRow);\n      } else if (id !== \"shape\" && ui2.shapeTiles.parentElement === ui2.shapePane) {\n        ui2.shapeTiles.appendChild(ui2.fxCurveRow);\n        ui2.effectsPane.appendChild(ui2.shapeTiles);\n      }\n      ui2.shapeChip.classList.toggle(\"is-active\", id === \"shape\");\n      ui2.borderPane.hidden = id !== \"border\";\n      const outlineHost = id === \"border\" ? ui2.borderPane : id === \"outline\" ? ui2.outlinePane : ui2.borderPop;\n      if (ui2.borderCtrls.parentElement !== outlineHost) outlineHost.appendChild(ui2.borderCtrls);\n      ui2.endsPane.hidden = id !== \"ends\";\n      if (id === \"ends\" && ui2.lnEndsCtrls.parentElement !== ui2.endsPane) {\n        ui2.endsPane.appendChild(ui2.lnEndsCtrls);\n      } else if (id !== \"ends\" && ui2.lnEndsCtrls.parentElement === ui2.endsPane) {\n        ui2.lnEndsPop.appendChild(ui2.lnEndsCtrls);\n      }\n      ui2.lnStylePane.hidden = id !== \"lnstyle\";\n      if (id === \"lnstyle\" && ui2.lnStyleCtrls.parentElement !== ui2.lnStylePane) {\n        ui2.lnStylePane.appendChild(ui2.lnStyleCtrls);\n      } else if (id !== \"lnstyle\" && ui2.lnStyleCtrls.parentElement === ui2.lnStylePane) {\n        ui2.lnStylePop.appendChild(ui2.lnStyleCtrls);\n      }\n      ui2.outlinePane.hidden = id !== \"outline\";\n      ui2.root.classList.toggle(\n        \"nsv2-compact-sheet\",\n        id === \"effects\" || id === \"format\" || id === \"spacing\" || id === \"nudge\" || id === \"canvas\" || id === \"filters\" || id === \"bgr\" || id === \"crop\" || id === \"adjust\" || id === \"shape\" || id === \"outline\" || id === \"border\" || id === \"ends\" || id === \"lnstyle\"\n      );\n      if (ui2.sheetHead) {\n        const pane = id ? ui2.panel.querySelector(\".nsv2-pane:not([hidden])\") : null;\n        const t2 = pane && (pane.querySelector(\".nsv2-pane-head .nsv2-pane-title\") || pane.querySelector(\":scope > .nsv2-pane-title\") || pane.querySelector(\".nsv2-pane-title\"));\n        ui2.sheetHead.set({ title: t2 ? t2.textContent.trim() : \"\", back: !!(pane && pane.querySelector(\".nsv2-pane-back\")) });\n      }\n      if (movedReset) {\n        movedReset.el.classList.remove(\"nsv2-head-reset\");\n        movedReset.el.textContent = movedReset.label;\n        movedReset.parent.insertBefore(movedReset.el, movedReset.next);\n        movedReset = null;\n      }\n      if (id && isMobileView()) {\n        const pane = ui2.panel.querySelector(\".nsv2-pane:not([hidden])\");\n        const reset = pane && pane.querySelector(\".nsv2-recolor-reset\");\n        const slot = ui2.sheetHead ? ui2.sheetHead.extra : pane && pane.querySelector(\".nsv2-pane-head\");\n        if (reset && slot) {\n          movedReset = { el: reset, parent: reset.parentElement, next: reset.nextSibling, label: reset.textContent };\n          reset.textContent = \"Reset\";\n          reset.classList.add(\"nsv2-head-reset\");\n          slot.appendChild(reset);\n        }\n      }\n      ui2.fontBtn.classList.toggle(\"is-open\", id === \"fonts\");\n      ui2.colorBtn.classList.toggle(\"is-open\", id === \"color\");\n      ui2.effectsBtn.classList.toggle(\"is-on\", id === \"effects\");\n      ui2.removeBgBtn.classList.toggle(\"is-open\", id === \"bgr\");\n      ui2.stickerBtn.classList.toggle(\"is-open\", id === \"outline\");\n      ui2.filtersBtn.classList.toggle(\"is-open\", id === \"filters\");\n      ui2.colorReplaceBtn.classList.toggle(\"is-open\", id === \"recolor\");\n      if (id === \"uploads\") loadMyFiles();\n      if (id === \"designs\") loadMyDesigns();\n      if (id === \"premade\") initPremade();\n      holdPaneForSlide(prev, id);\n    }\n    const closePanel = () => openPane(null);\n    function openFonts() {\n      if (activePane !== \"fonts\") paneBeforeFonts = activePane;\n      openPane(\"fonts\");\n      renderFontCats();\n      renderFontList();\n      ui2.fontSearch.focus();\n    }\n    const closeFonts = () => openPane(isMobileView() ? null : paneBeforeFonts || \"text\");\n    ui2.toolBtns.text.addEventListener(\n      \"click\",\n      () => activePane === \"text\" || activePane === \"fonts\" ? closePanel() : openPane(\"text\")\n    );\n    ui2.toolBtns.uploads.addEventListener(\"click\", () => activePane === \"uploads\" ? closePanel() : openPane(\"uploads\"));\n    ui2.toolBtns.elements.addEventListener(\"click\", () => activePane === \"elements\" ? closePanel() : openPane(\"elements\"));\n    ui2.toolBtns.layers.addEventListener(\"click\", () => {\n      if (activePane === \"layers\") return closePanel();\n      openPane(\"layers\");\n      renderLayers();\n    });\n    ui2.toolBtns.designs.addEventListener(\"click\", () => activePane === \"designs\" ? closePanel() : openPane(\"designs\"));\n    ui2.toolBtns.premade.addEventListener(\"click\", () => activePane === \"premade\" ? closePanel() : openPane(\"premade\"));\n    ui2.panelClose.addEventListener(\"click\", closePanel);\n    ui2.fontsBackBtn.addEventListener(\"click\", closeFonts);\n    openPane(null);\n    queueMicrotask(() => syncSelection());\n    function holdKeyboard() {\n      if (!isMobileView()) return () => {\n      };\n      const ta2 = document.createElement(\"textarea\");\n      ta2.setAttribute(\"aria-hidden\", \"true\");\n      ta2.tabIndex = -1;\n      ta2.style.cssText = \"position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;padding:0;border:0;font-size:16px;\";\n      editor.canvas.wrapperEl.appendChild(ta2);\n      try {\n        ta2.focus({ preventScroll: true });\n      } catch (e24) {\n      }\n      return () => ta2.remove();\n    }\n    function editFreshText(box, release) {\n      try {\n        if (box && box.isType && box.isType(\"textbox\") && editor.canvas.getActiveObject() === box) {\n          box.enterEditing();\n          box.selectAll();\n          box.__freshEdit = true;\n          const clear = () => {\n            box.__freshEdit = false;\n            box.off(\"changed\", clear);\n            box.off(\"editing:exited\", clear);\n          };\n          box.on(\"changed\", clear);\n          box.on(\"editing:exited\", clear);\n          editor.canvas.requestRenderAll();\n        }\n      } finally {\n        release();\n      }\n    }\n    ui2.addTextBtn.addEventListener(\"click\", () => {\n      if (!kindAllowed(\"text\")) return refuse(\"text\");\n      const release = holdKeyboard();\n      editor.addText(currentFamily).then((box) => editFreshText(box, release), release);\n      trackAdd(\"text_add\");\n      if (isMobileView()) openPane(null);\n    });\n    let ttThumbsStarted = false;\n    function ensureTreatmentThumbs() {\n      if (ttThumbsStarted) return;\n      ttThumbsStarted = true;\n      for (const p2 of TEXT_TREATMENTS) {\n        treatmentThumb(editor, p2).then((url) => {\n          const img = ui2.treatmentTiles.querySelector('[data-tt=\"' + p2.key + '\"] .nsv2-tt-thumb');\n          if (img) {\n            img.src = url;\n            img.hidden = false;\n          }\n        }).catch((e24) => console.warn(\"studio-v2: treatment thumb failed\", p2.key, e24));\n      }\n    }\n    ui2.treatmentTiles.addEventListener(\"click\", async (e24) => {\n      const tile = e24.target.closest(\"[data-tt]\");\n      if (!tile) return;\n      const preset = TEXT_TREATMENTS.find((x2) => x2.key === tile.dataset.tt);\n      if (!preset) return;\n      if (!kindAllowed(\"text\")) return refuse(\"text\");\n      const release = preset.key === \"default\" ? holdKeyboard() : () => {\n      };\n      let boxes;\n      try {\n        boxes = await applyTreatment(editor, preset);\n      } catch (err) {\n        release();\n        throw err;\n      }\n      trackAdd(\"text_add\");\n      closePanelAfterPlace();\n      if (preset.key === \"default\") editFreshText(boxes && boxes[0], release);\n    });\n    let fontCategory = CATEGORIES[0];\n    let currentWeight = 400;\n    let expandedFamily = null;\n    function markFontRows() {\n      ui2.fontList.querySelectorAll(\".nsv2-font-item\").forEach((item) => {\n        const fam = item.dataset.family;\n        const isCurrent = fam === currentFamily;\n        const isOpen = item.classList.contains(\"is-open\");\n        item.querySelector(\".nsv2-font-name\").classList.toggle(\"is-active\", isCurrent && !isOpen);\n        item.querySelectorAll(\".nsv2-font-wrow\").forEach((wrow) => {\n          wrow.classList.toggle(\"is-active\", isCurrent && Number(wrow.dataset.w) === currentWeight);\n        });\n      });\n      ui2.fontBtn.querySelector('[data-ref=\"family\"]').textContent = currentFamily;\n    }\n    function buildWeightRows(entry) {\n      const wrap = document.createElement(\"div\");\n      wrap.className = \"nsv2-font-weights\";\n      for (const w2 of entry.w) {\n        const btn = document.createElement(\"button\");\n        btn.type = \"button\";\n        btn.className = \"nsv2-font-wrow\";\n        btn.dataset.family = entry.f;\n        btn.dataset.w = String(w2);\n        const span = document.createElement(\"span\");\n        span.style.fontFamily = \"'\" + entry.f + \"', sans-serif\";\n        span.style.fontWeight = String(w2);\n        span.textContent = WEIGHT_LABELS[w2] || String(w2);\n        const check = document.createElement(\"span\");\n        check.className = \"nsv2-font-check\";\n        check.innerHTML = icons.check;\n        btn.append(span, check);\n        wrap.appendChild(btn);\n      }\n      return wrap;\n    }\n    function toggleExpand(item) {\n      const fam = item.dataset.family;\n      if (expandedFamily === fam) {\n        expandedFamily = null;\n        item.classList.remove(\"is-open\");\n        const w2 = item.querySelector(\".nsv2-font-weights\");\n        if (w2) w2.hidden = true;\n        markFontRows();\n        return;\n      }\n      const prev = ui2.fontList.querySelector(\".nsv2-font-item.is-open\");\n      if (prev) {\n        prev.classList.remove(\"is-open\");\n        const pw = prev.querySelector(\".nsv2-font-weights\");\n        if (pw) pw.hidden = true;\n      }\n      expandedFamily = fam;\n      let weights = item.querySelector(\".nsv2-font-weights\");\n      if (!weights) {\n        const entry = FONT_CATALOG.find((x2) => x2.f === fam);\n        weights = buildWeightRows(entry);\n        item.appendChild(weights);\n      }\n      weights.hidden = false;\n      item.classList.add(\"is-open\");\n      loadFont(fam);\n      markFontRows();\n    }\n    function renderFontCats() {\n      ui2.fontCats.innerHTML = \"\";\n      for (const c2 of CATEGORIES) {\n        const chip = document.createElement(\"button\");\n        chip.type = \"button\";\n        chip.className = \"nsv2-font-cat\" + (c2 === fontCategory ? \" is-active\" : \"\");\n        chip.dataset.cat = c2;\n        chip.textContent = c2;\n        ui2.fontCats.appendChild(chip);\n      }\n    }\n    function renderFontList() {\n      const q2 = ui2.fontSearch.value.trim().toLowerCase();\n      let rows;\n      if (q2) {\n        ensureAllPreviewCss();\n        rows = FONT_CATALOG.filter((e24) => e24.f.toLowerCase().includes(q2));\n      } else {\n        ensurePreviewCss(fontCategory);\n        rows = FONT_CATALOG.filter((e24) => e24.c === fontCategory);\n      }\n      expandedFamily = null;\n      const frag = document.createDocumentFragment();\n      for (const e24 of rows) {\n        const item = document.createElement(\"div\");\n        item.className = \"nsv2-font-item\";\n        item.dataset.family = e24.f;\n        const row = document.createElement(\"div\");\n        row.className = \"nsv2-font-row\";\n        const nameBtn = document.createElement(\"button\");\n        nameBtn.type = \"button\";\n        nameBtn.className = \"nsv2-font-name\";\n        const name = document.createElement(\"span\");\n        name.style.fontFamily = \"'\" + e24.f + \"', sans-serif\";\n        name.style.fontWeight = String(nearestWeight(e24.f, 400));\n        name.textContent = e24.f;\n        const check = document.createElement(\"span\");\n        check.className = \"nsv2-font-check\";\n        check.innerHTML = icons.check;\n        nameBtn.append(name, check);\n        row.appendChild(nameBtn);\n        if (e24.w.length > 1) {\n          const exp = document.createElement(\"button\");\n          exp.type = \"button\";\n          exp.className = \"nsv2-font-exp\";\n          exp.dataset.tip = \"Styles\";\n          exp.innerHTML = icons.chevronDown;\n          row.appendChild(exp);\n        }\n        item.appendChild(row);\n        frag.appendChild(item);\n      }\n      ui2.fontList.replaceChildren(frag);\n      markFontRows();\n    }\n    ui2.fontCats.addEventListener(\"click\", (e24) => {\n      const chip = e24.target.closest(\".nsv2-font-cat\");\n      if (!chip) return;\n      fontCategory = chip.dataset.cat;\n      ui2.fontSearch.value = \"\";\n      renderFontCats();\n      renderFontList();\n    });\n    ui2.fontList.addEventListener(\"click\", async (e24) => {\n      const wrow = e24.target.closest(\".nsv2-font-wrow\");\n      if (wrow) {\n        const t0 = editor.activeText();\n        const familyChanging = !t0 || t0.fontFamily !== wrow.dataset.family;\n        currentFamily = wrow.dataset.family;\n        currentWeight = Number(wrow.dataset.w);\n        markFontRows();\n        if (t0) await withObjBusy(t0, () => loadFont(currentFamily));\n        else await loadFont(currentFamily);\n        const props = { fontFamily: currentFamily, fontWeight: currentWeight };\n        familyChanging ? editor.setFontKeepWidth(props) : editor.setTextProp(props);\n        syncSelection();\n        return;\n      }\n      const exp = e24.target.closest(\".nsv2-font-exp\");\n      if (exp) {\n        toggleExpand(exp.closest(\".nsv2-font-item\"));\n        return;\n      }\n      const nameBtn = e24.target.closest(\".nsv2-font-name\");\n      if (!nameBtn) return;\n      currentFamily = nameBtn.closest(\".nsv2-font-item\").dataset.family;\n      currentWeight = nearestWeight(currentFamily, 400);\n      markFontRows();\n      const tf = editor.activeText();\n      if (tf) await withObjBusy(tf, () => loadFont(currentFamily));\n      else await loadFont(currentFamily);\n      editor.setFontKeepWidth({ fontFamily: currentFamily, fontWeight: currentWeight });\n      syncSelection();\n    });\n    ui2.fontSearch.addEventListener(\"input\", renderFontList);\n    let paneBeforeColor = null;\n    let colorAllMode = false;\n    function currentTextColor(t2) {\n      if (!t2) return \"#0f172a\";\n      if (t2.__effect === \"hollow\" || t2.__effect === \"splice\") {\n        return typeof t2.stroke === \"string\" ? t2.stroke : \"#0f172a\";\n      }\n      return typeof t2.fill === \"string\" ? t2.fill : \"#0f172a\";\n    }\n    function syncColorUI() {\n      if (colorTarget !== \"text\") {\n        const o2 = colorTargetObj();\n        const c3 = colorTarget === \"canvasBg\" ? editor._boardBg || \"transparent\" : !o2 ? \"#0f172a\" : colorTarget === \"shapeBorder\" ? typeof o2.stroke === \"string\" && o2.stroke || \"#0f172a\" : colorTarget === \"imageOutline\" ? o2.__sticker && o2.__sticker.color || \"#000000\" : colorTarget === \"line\" ? o2.__el && o2.__el.color || \"#0f172a\" : typeof o2.fill === \"string\" && o2.fill || \"transparent\";\n        ui2.currentSwatch.style.background = c3;\n        syncNoFill();\n        if (activePane === \"color\") renderDesignColors();\n        return;\n      }\n      const t2 = editor.activeText();\n      if (!t2) return;\n      const g2 = t2 && t2.__gradFill;\n      let c2 = g2 ? \"linear-gradient(\" + ((g2.angle != null ? g2.angle : 90) + 90) % 360 + \"deg, \" + g2.a + \", \" + g2.b + \")\" : currentTextColor(t2);\n      const gang2 = editor.activeTexts();\n      if (gang2.length > 1) {\n        const cols = [...new Set(gang2.map((x2) => String(currentTextColor(x2) || \"\").toLowerCase()))];\n        if (cols.length > 1) c2 = \"linear-gradient(135deg, \" + cols[0] + \" 0 50%, \" + cols[1] + \" 50% 100%)\";\n      }\n      ui2.colorBtn.querySelector('[data-ref=\"disc\"]').style.background = c2;\n      ui2.currentSwatch.style.background = c2;\n      if (activePane === \"color\") renderDesignColors();\n      syncGradUI();\n    }\n    function syncGradUI() {\n      const t2 = editor.activeText();\n      const g2 = t2 && t2.__gradFill;\n      ui2.gradEdit.hidden = !g2;\n      if (g2) {\n        ui2.gradInputA.value = g2.a;\n        ui2.gradInputB.value = g2.b;\n        ui2.gradStopA.style.background = g2.a;\n        ui2.gradStopB.style.background = g2.b;\n        const ang = Math.round(g2.angle != null ? g2.angle : 90);\n        ui2.gradAngle.value = ang;\n        ui2.gradAngleVal.textContent = ang + \"\\xB0\";\n      }\n      for (const sw of ui2.gradGrid.children) {\n        sw.classList.toggle(\"is-active\", !!g2 && sw.dataset.ga === g2.a && sw.dataset.gb === g2.b);\n      }\n    }\n    function applyGradient(desc) {\n      if (!editor.activeText()) return;\n      editor.setTextGradient(desc);\n      syncColorUI();\n    }\n    function activeGrad() {\n      const t2 = editor.activeText();\n      return t2 && t2.__gradFill || { a: \"#8c52ff\", b: \"#ff914d\", angle: 90 };\n    }\n    function renderDesignColors() {\n      const colors = collectDesignColors();\n      const frag = document.createDocumentFragment();\n      for (const c2 of colors.slice(0, 14)) {\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\";\n        sw.dataset.c = c2;\n        sw.style.background = c2;\n        frag.appendChild(sw);\n      }\n      ui2.designGrid.replaceChildren(frag);\n      ui2.designLabel.hidden = ui2.designGrid.hidden = colors.length === 0;\n    }\n    function setColorMode(all) {\n      colorAllMode = all;\n      ui2.colorMain.hidden = all;\n      ui2.colorSearch.hidden = all;\n      ui2.allGrid.hidden = !all;\n      ui2.colorTitle.textContent = all ? \"Default solid colors\" : colorTitleFor();\n      if (all && !ui2.allGrid.childElementCount) fillGradedPalette(ui2.allGrid);\n    }\n    function fillGradedPalette(grid) {\n      const frag = document.createDocumentFragment();\n      const HUES = [215, 235, 258, 280, 305, 330, 352, 15, 30, 45, 60, 90, 120, 150, 170, 190, 205];\n      for (const h2 of HUES) {\n        for (const l2 of [22, 32, 42, 52, 64, 76, 88]) {\n          const sw = document.createElement(\"button\");\n          sw.type = \"button\";\n          sw.className = \"nsv2-swatch\";\n          const c2 = \"hsl(\" + h2 + \", 82%, \" + l2 + \"%)\";\n          sw.dataset.c = c2;\n          sw.style.background = c2;\n          frag.appendChild(sw);\n        }\n      }\n      grid.appendChild(frag);\n    }\n    function collectDesignColors() {\n      const seen = /* @__PURE__ */ new Set();\n      const colors = [];\n      editor.canvas.getObjects().forEach((o2) => {\n        for (const c2 of [o2.fill, o2.stroke, o2.shadow && o2.shadow.color, o2.__el && o2.__el.color]) {\n          if (typeof c2 === \"string\" && c2 && c2 !== \"transparent\" && !/^rgba\\(0, ?0, ?0, ?0\\)$/.test(c2) && !seen.has(c2.toLowerCase())) {\n            seen.add(c2.toLowerCase());\n            colors.push(c2);\n          }\n        }\n      });\n      return colors;\n    }\n    let colorTarget = \"text\";\n    function colorTargetObj() {\n      if (colorTarget === \"text\") return editor.activeText();\n      if (colorTarget === \"imageOutline\") return editor.activeImage();\n      if (colorTarget === \"canvasBg\") return editor.canvas;\n      const o2 = editor.canvas.getActiveObject();\n      return o2 && o2.__el ? o2 : null;\n    }\n    const colorTitleFor = () => colorTarget === \"shapeFill\" ? \"Fill color\" : colorTarget === \"shapeBorder\" || colorTarget === \"imageOutline\" ? \"Outline color\" : colorTarget === \"line\" ? \"Line color\" : colorTarget === \"canvasBg\" ? \"Background color\" : \"Text color\";\n    function openColors() {\n      if (!colorTargetObj()) return;\n      if (activePane !== \"color\") paneBeforeColor = activePane;\n      setColorMode(false);\n      const shapeMode = colorTarget !== \"text\";\n      ui2.gradsLabel.hidden = ui2.gradGrid.hidden = shapeMode;\n      if (shapeMode) ui2.gradEdit.hidden = true;\n      ui2.colorToolsLabel.textContent = colorTitleFor() + \"s\";\n      syncNoFill();\n      openPane(\"color\");\n      syncColorUI();\n      renderDesignColors();\n    }\n    function closeColors() {\n      if (colorAllMode) return setColorMode(false);\n      if (isMobileView()) return openPane(null);\n      const fallback = colorTarget === \"canvasBg\" ? null : \"text\";\n      openPane(paneBeforeColor === \"color\" ? fallback : paneBeforeColor || fallback);\n    }\n    function syncNoFill() {\n      const o2 = colorTargetObj();\n      ui2.colorNoFill.hidden = !(colorTarget === \"shapeFill\" && o2 && o2.__el || colorTarget === \"canvasBg\");\n    }\n    function applyColor(c2) {\n      c2 = cssToSolidHex(c2) || c2;\n      if (colorTarget !== \"text\") {\n        if (colorTarget === \"canvasBg\") {\n          editor.setCanvasBackground(c2);\n          syncCanvasBg();\n          syncColorUI();\n          return;\n        }\n        const o2 = colorTargetObj();\n        if (!o2) return;\n        if (colorTarget === \"shapeBorder\") {\n          editor.setElBorder(o2, { color: c2 });\n        } else if (colorTarget === \"imageOutline\") {\n          const st2 = o2.__sticker || {};\n          editor.setImageSticker(o2, { w: st2.w || 12, color: c2 });\n          syncImgOutlineChip(o2);\n        } else if (colorTarget === \"line\") {\n          editor.setLineProps(o2, { color: c2 });\n        } else {\n          o2.set(\"fill\", c2);\n          editor.setElBorder(o2, {});\n          o2.dirty = true;\n          editor.canvas.requestRenderAll();\n          editor.canvas.fire(\"object:modified\", { target: o2 });\n        }\n        syncElUI();\n        syncColorUI();\n        return;\n      }\n      const texts = editor.activeTexts();\n      if (!texts.length) return;\n      for (const t2 of texts) {\n        t2.__gradFill = null;\n        if (t2.__effect === \"hollow\" || t2.__effect === \"splice\") {\n          editor._applyTextEffectTo(t2, t2.__effect, c2);\n        } else {\n          t2.set({ fill: c2 });\n          t2.__baseFill = c2;\n          editor._hugWidth(t2);\n        }\n      }\n      editor.canvas.requestRenderAll();\n      editor.canvas.fire(\"object:modified\", { target: texts[0] });\n      syncColorUI();\n    }\n    const mtray = document.createElement(\"div\");\n    mtray.className = \"nsv2-mtray\";\n    mtray.hidden = true;\n    ui2.area.appendChild(mtray);\n    let zoomCtlHome = null;\n    let mtrayOutT = 0;\n    function closeMtray() {\n      if (!mtrayKind) return;\n      if (isMobileView() && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n        const ghost = mtray.cloneNode(true);\n        ghost.classList.add(\"is-closing\");\n        ghost.removeAttribute(\"hidden\");\n        mtray.parentElement.insertBefore(ghost, mtray);\n        clearTimeout(mtrayOutT);\n        mtrayOutT = setTimeout(() => ghost.remove(), 240);\n      }\n      if (mtrayKind === \"zoom\" && zoomCtlHome) zoomCtlHome();\n      mtray.hidden = true;\n      mtray.replaceChildren();\n      mtrayKind = null;\n      ui2.root.classList.remove(\"nsv2-mtray-open\");\n    }\n    function openMtray(kind, fillScroll, onExpand) {\n      mtrayKind = kind;\n      exitTextEditingForOptions();\n      const scroll = document.createElement(\"div\");\n      scroll.className = \"nsv2-mtray-scroll\";\n      fillScroll(scroll);\n      const kids = [scroll];\n      if (onExpand) {\n        const expand = document.createElement(\"button\");\n        expand.type = \"button\";\n        expand.className = \"nsv2-round-btn nsv2-mtray-expand\";\n        expand.title = \"More\";\n        expand.innerHTML = micons.expand;\n        expand.addEventListener(\"click\", () => {\n          closeMtray();\n          onExpand();\n        });\n        kids.push(expand);\n      }\n      mtray.replaceChildren(...kids);\n      mtray.hidden = false;\n      ui2.root.classList.add(\"nsv2-mtray-open\");\n    }\n    editor.canvas.on(\"selection:cleared\", closeMtray);\n    function fillColorTray(scroll) {\n      if (colorTarget === \"shapeFill\" && colorTargetObj()) {\n        const none = document.createElement(\"button\");\n        none.type = \"button\";\n        none.className = \"nsv2-swatch nsv2-swatch--transparent\";\n        none.title = \"Transparent\";\n        none.addEventListener(\"click\", applyNoFill);\n        scroll.appendChild(none);\n      }\n      const custom = document.createElement(\"button\");\n      custom.type = \"button\";\n      custom.className = \"nsv2-swatch nsv2-swatch--custom\";\n      custom.title = \"Custom color\";\n      custom.innerHTML = micons.add;\n      custom.addEventListener(\"click\", () => ui2.customColorInput.click());\n      scroll.appendChild(custom);\n      const curColor = (() => {\n        if (colorTarget === \"text\") {\n          const t2 = editor.activeText();\n          return t2 ? currentTextColor(t2) : null;\n        }\n        const o2 = colorTargetObj();\n        if (!o2) return null;\n        if (colorTarget === \"shapeBorder\") return typeof o2.stroke === \"string\" ? o2.stroke : null;\n        if (colorTarget === \"imageOutline\") return o2.__sticker && o2.__sticker.color || null;\n        if (colorTarget === \"line\") return o2.__el && o2.__el.color || null;\n        return typeof o2.fill === \"string\" ? o2.fill : null;\n      })();\n      const curLc = curColor ? String(curColor).toLowerCase() : null;\n      const seen = /* @__PURE__ */ new Set();\n      for (const c2 of [...collectDesignColors(), ...DEFAULT_PALETTE]) {\n        const lc2 = String(c2).toLowerCase();\n        if (seen.has(lc2)) continue;\n        seen.add(lc2);\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\" + (curLc && lc2 === curLc ? \" is-active\" : \"\");\n        sw.dataset.c = c2;\n        sw.style.background = c2;\n        sw.addEventListener(\"click\", () => {\n          applyColor(c2);\n          scroll.querySelectorAll(\".nsv2-swatch.is-active\").forEach((x2) => x2.classList.remove(\"is-active\"));\n          sw.classList.add(\"is-active\");\n        });\n        scroll.appendChild(sw);\n      }\n    }\n    function applyNoFill() {\n      if (colorTarget === \"canvasBg\") {\n        editor.setCanvasBackground(null);\n        syncCanvasBg();\n        syncColorUI();\n        return;\n      }\n      const o2 = colorTargetObj();\n      if (!o2 || colorTarget !== \"shapeFill\") return;\n      o2.set(\"fill\", \"\");\n      editor.setElBorder(o2, {});\n      o2.dirty = true;\n      editor.canvas.requestRenderAll();\n      editor.canvas.fire(\"object:modified\", { target: o2 });\n      syncElUI();\n      syncColorUI();\n    }\n    ui2.colorNoFill.addEventListener(\"click\", applyNoFill);\n    ui2.colorBtn.addEventListener(\"click\", () => {\n      colorTarget = \"text\";\n      if (isMobileView()) {\n        if (mtrayKind === \"color\") return closeMtray();\n        if (!editor.activeText()) return;\n        openMtray(\"color\", fillColorTray, () => openColors());\n        return;\n      }\n      activePane === \"color\" ? closeColors() : openColors();\n    });\n    ui2.colorBackBtn.addEventListener(\"click\", closeColors);\n    ui2.seeAllBtn.addEventListener(\"click\", () => setColorMode(true));\n    ui2.colorPane.addEventListener(\"click\", (e24) => {\n      const sw = e24.target.closest(\".nsv2-swatch[data-c]\");\n      if (sw) applyColor(sw.dataset.c);\n    });\n    ui2.customColorBtn.addEventListener(\"click\", () => ui2.customColorInput.click());\n    ui2.customColorInput.addEventListener(\"input\", () => applyColor(ui2.customColorInput.value));\n    ui2.gradGrid.addEventListener(\"click\", (e24) => {\n      const sw = e24.target.closest(\"[data-ga]\");\n      if (sw) applyGradient({ a: sw.dataset.ga, b: sw.dataset.gb, angle: activeGrad().angle });\n    });\n    ui2.gradStopA.addEventListener(\"click\", () => ui2.gradInputA.click());\n    ui2.gradStopB.addEventListener(\"click\", () => ui2.gradInputB.click());\n    ui2.gradInputA.addEventListener(\"input\", () => applyGradient({ ...activeGrad(), a: ui2.gradInputA.value }));\n    ui2.gradInputB.addEventListener(\"input\", () => applyGradient({ ...activeGrad(), b: ui2.gradInputB.value }));\n    ui2.gradAngle.addEventListener(\"input\", () => {\n      applyGradient({ ...activeGrad(), angle: ui2.gradAngle.valueAsNumber });\n    });\n    ui2.dropperBtn.addEventListener(\"click\", async () => {\n      try {\n        const r2 = await openEyeDropper();\n        if (r2 && r2.sRGBHex) applyColor(r2.sRGBHex);\n      } catch (e24) {\n      }\n    });\n    function colorSearchMsg(kind, text) {\n      ui2.colorMsg.hidden = false;\n      ui2.colorMsg.classList.toggle(\"is-error\", kind === \"error\");\n      ui2.colorMsg.textContent = text;\n    }\n    function clearColorSearchState() {\n      ui2.colorMsg.hidden = true;\n      ui2.colorSearch.classList.remove(\"is-invalid\");\n    }\n    ui2.colorSearch.addEventListener(\"keydown\", (e24) => {\n      if (e24.key !== \"Enter\") return;\n      const typed = ui2.colorSearch.value.trim();\n      const { hex: hex3, corrected } = resolveColorSmart(typed);\n      if (hex3) {\n        applyColor(hex3);\n        ui2.colorSearch.value = \"\";\n        clearColorSearchState();\n        if (corrected) colorSearchMsg(\"hint\", \"Using \\u201C\" + corrected + \"\\u201D\");\n      } else {\n        ui2.colorSearch.classList.remove(\"is-invalid\");\n        void ui2.colorSearch.offsetWidth;\n        ui2.colorSearch.classList.add(\"is-invalid\");\n        colorSearchMsg(\"error\", \"No color called \\u201C\" + typed + \"\\u201D \\u2014 try \\u201Cblue\\u201D, \\u201Clight purple\\u201D, or a hex like #00c4cc\");\n      }\n    });\n    ui2.colorSearch.addEventListener(\"input\", clearColorSearchState);\n    function applyFontFamily(family) {\n      currentFamily = family;\n      currentWeight = nearestWeight(family, 400);\n      markFontRows();\n      const go2 = () => editor.setFontKeepWidth({ fontFamily: family, fontWeight: currentWeight });\n      go2();\n      loadFont(family).then(() => {\n        go2();\n        syncSelection();\n      });\n    }\n    const FONT_TRAY = [\"Anton\", \"Montserrat\", \"Bebas Neue\", \"Pacifico\", \"Oswald\", \"Poppins\", \"Playfair Display\", \"Roboto\", \"Lobster\", \"Dancing Script\", \"Archivo Black\", \"Caveat\"];\n    function fillFontTray(scroll) {\n      ensureAllPreviewCss();\n      const cur = editor.activeText() && editor.activeText().fontFamily || currentFamily;\n      for (const fam of [cur, ...FONT_TRAY.filter((f2) => f2 !== cur)]) {\n        const pill = document.createElement(\"button\");\n        pill.type = \"button\";\n        pill.className = \"nsv2-fpill\" + (fam === cur ? \" is-active\" : \"\");\n        pill.textContent = fam;\n        pill.style.fontFamily = \"'\" + fam + \"', sans-serif\";\n        pill.addEventListener(\"click\", () => applyFontFamily(fam));\n        scroll.appendChild(pill);\n      }\n    }\n    ui2.editTextChip.addEventListener(\"click\", () => {\n      if (editor.activeSelection()) return;\n      const t2 = editor.activeText();\n      if (!t2) return;\n      closeMtray();\n      if (isMobileView()) openPane(null);\n      if (t2.isEditing) {\n        try {\n          t2.exitEditing();\n        } catch (e24) {\n        }\n        editor.canvas.requestRenderAll();\n        return;\n      }\n      t2.enterEditing();\n      t2.selectAll();\n      editor.canvas.requestRenderAll();\n    });\n    const editChipLab = ui2.editTextChip.querySelector(\".nsv2-cw-lab\");\n    const editChipIc = ui2.editTextChip.querySelector(\".nsv2-cw-ic\");\n    const syncEditChip = (editing) => {\n      ui2.editTextChip.classList.toggle(\"is-done\", !!editing);\n      if (editChipLab) editChipLab.textContent = editing ? \"Done\" : \"Edit\";\n      if (editChipIc) editChipIc.innerHTML = editing ? micons.check : micons.pencil;\n    };\n    editor.canvas.on(\"text:editing:entered\", () => syncEditChip(true));\n    editor.canvas.on(\"text:editing:exited\", () => syncEditChip(false));\n    ui2.root.addEventListener(\"pointerdown\", (e24) => {\n      if (!isMobileView()) return;\n      const t2 = editor.activeText && editor.activeText();\n      if (!t2 || !t2.isEditing) return;\n      if (e24.target && e24.target.closest && e24.target.closest(\"canvas, textarea, .nsv2-edit-chip\")) return;\n      try {\n        t2.exitEditing();\n      } catch (err) {\n      }\n      editor.canvas.requestRenderAll();\n    }, true);\n    ui2.fontBtn.addEventListener(\"click\", () => {\n      if (isMobileView()) {\n        if (mtrayKind === \"font\") return closeMtray();\n        if (!editor.activeText()) return;\n        openMtray(\"font\", fillFontTray, () => openFonts());\n        return;\n      }\n      activePane === \"fonts\" ? closeFonts() : openFonts();\n    });\n    async function addUpload(file) {\n      const img = await editor.addImageFromFile(file);\n      img.__bgr = { status: \"uploading\", isVector: isVectorName(file.name), versions: {}, model: null };\n      trackAdd(\"image_upload\");\n      uploadFileToS3(file).then((up) => {\n        img.__bgr.status = \"ready\";\n        img.__bgr.imgixUrl = up.imgixUrl;\n        img.__bgr.fileName = up.fileName;\n        addRecentUpload(up.imgixUrl, file.name);\n        syncSelection();\n      }).catch((err) => {\n        console.error(\"studio-v2: background upload failed\", err);\n        img.__bgr.status = \"failed\";\n        syncSelection();\n      });\n      return img;\n    }\n    const BROWSER_TYPES = [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\", \"image/svg+xml\"];\n    const ACCEPT_RE = /\\.(png|jpe?g|gif|webp|svg|pdf|ai|eps|psd|tiff?)$/i;\n    function closePanelAfterPlace() {\n      if (isMobileView()) openPane(null);\n    }\n    async function intake(file) {\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      if (BROWSER_TYPES.includes(file.type)) {\n        const img = await addUpload(file);\n        closePanelAfterPlace();\n        return img;\n      }\n      if (!ACCEPT_RE.test(file.name || \"\")) {\n        console.warn(\"studio-v2: unsupported file skipped\", file.name, file.type);\n        return;\n      }\n      ui2.uploadBusy.hidden = false;\n      try {\n        const up = await uploadFileToS3(file);\n        const img = await editor.addImageFromUrl(hostedDisplayUrl(up.imgixUrl), file.name);\n        img.__bgr = {\n          status: \"ready\",\n          imgixUrl: up.imgixUrl,\n          fileName: up.fileName,\n          isVector: isVectorName(file.name),\n          versions: {},\n          model: null\n        };\n        addRecentUpload(up.imgixUrl, file.name);\n        trackAdd(\"image_upload\");\n        syncSelection();\n        closePanelAfterPlace();\n      } catch (err) {\n        console.error(\"studio-v2: upload failed\", file.name, err);\n      } finally {\n        ui2.uploadBusy.hidden = true;\n      }\n    }\n    async function intakeHosted(url, name, addToList = true, bgrMeta) {\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      try {\n        const bare = url.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost);\n        const q2 = url.split(\"?\")[1] || \"\";\n        const hadBgr = /(?:^|&)bg-remove=true/.test(q2);\n        const rowModel = hadBgr ? (q2.match(/bg-remove-model=(\\d+)/) || [])[1] === \"4\" ? \"pc\" : \"ix\" : null;\n        const versions = {};\n        if (rowModel) versions[rowModel] = candidateUrl(bare, BGR_MODELS.find((m) => m.key === rowModel));\n        if (bgrMeta && bgrMeta.model && bgrMeta.url) versions[bgrMeta.model] = bgrMeta.url;\n        const img = await editor.addImageFromUrl(hostedDisplayUrl(bare), name);\n        img.__bgr = {\n          status: \"ready\",\n          imgixUrl: bare,\n          fileName: name || bare.split(\"/\").pop(),\n          isVector: isVectorName(bare),\n          versions,\n          model: null\n        };\n        if (bgrMeta && bgrMeta.modelId && bgrMeta.model) img.__bgr.ninjaModels = { [bgrMeta.model]: bgrMeta.modelId };\n        if (addToList) {\n          addRecentUpload(bare, name);\n          trackAdd(\"image_upload\");\n        }\n        syncSelection();\n        closePanelAfterPlace();\n      } catch (err) {\n        console.error(\"studio-v2: hosted intake failed\", url, err);\n      }\n    }\n    ui2.dropzone.addEventListener(\"click\", () => ui2.fileInput.click());\n    ui2.fileInput.addEventListener(\"change\", () => {\n      Array.from(ui2.fileInput.files || []).forEach(intake);\n      ui2.fileInput.value = \"\";\n    });\n    if (opts.drive === false) ui2.driveBtn.hidden = true;\n    ui2.driveBtn.addEventListener(\n      \"click\",\n      () => openDrivePicker(Object.assign({ loginHint: opts.customerEmail || \"\" }, opts.drive || {}), intake)\n    );\n    function ensureQrModule(src) {\n      return new Promise((resolve, reject) => {\n        if (window.NinjaQrUpload) return resolve();\n        if (!src) return reject(new Error(\"qr module url missing\"));\n        let s3 = document.querySelector(\"script[data-njqr-mod]\");\n        if (!s3) {\n          s3 = document.createElement(\"script\");\n          s3.setAttribute(\"data-njqr-mod\", \"\");\n          s3.src = src;\n          document.head.appendChild(s3);\n        }\n        s3.addEventListener(\"load\", () => window.NinjaQrUpload ? resolve() : reject(new Error(\"njqr load failed\")));\n        s3.addEventListener(\"error\", () => reject(new Error(\"njqr load failed\")));\n      });\n    }\n    const qrCfg = opts.qr || {};\n    if (!qrCfg.moduleUrl) ui2.phoneBtn.hidden = true;\n    ui2.phoneBtn.addEventListener(\"click\", () => {\n      ensureQrModule(qrCfg.moduleUrl).then(() => {\n        window.NinjaQrUpload.open({\n          engine: \"studio\",\n          pageUrl: qrCfg.pageUrl || \"/pages/phone-upload\",\n          exts: [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"pdf\", \"ai\", \"eps\", \"psd\"],\n          max: 10,\n          qrLibUrl: qrCfg.libUrl || \"\",\n          onDesigns: (items) => items.forEach((i2) => intakeHosted(i2.url, i2.fileName))\n        });\n      }).catch((err) => console.error(\"studio-v2: phone upload unavailable\", err));\n    });\n    let sessionFiles = [];\n    let libraryFiles = [];\n    let myFilesLoaded = false;\n    function previewImg(f2) {\n      const img = document.createElement(\"img\");\n      img.loading = \"lazy\";\n      img.alt = f2.name || \"\";\n      const src = f2.bare + \"?trim=colorUnlessAlpha&fm=png&w=200&auto=compress&q=60\";\n      let attempt = 0;\n      img.onerror = () => {\n        if (attempt >= 3) return;\n        const delay = [2e3, 5e3, 1e4][attempt++];\n        setTimeout(() => {\n          img.removeAttribute(\"src\");\n          img.src = src;\n        }, delay);\n      };\n      img.src = src;\n      return img;\n    }\n    function fileTile(f2, onClick, extraClass) {\n      const tile = document.createElement(\"button\");\n      tile.type = \"button\";\n      tile.className = \"nsv2-myfile\" + (extraClass ? \" \" + extraClass : \"\");\n      tile.appendChild(previewImg(f2));\n      tile.addEventListener(\"click\", () => onClick ? onClick(tile) : intakeHosted(f2.url || f2.bare, f2.name, false, f2.bgr));\n      return tile;\n    }\n    function renderMyFiles() {\n      const seen = /* @__PURE__ */ new Set();\n      const rows = [];\n      for (const f2 of sessionFiles) {\n        if (seen.has(f2.bare)) continue;\n        seen.add(f2.bare);\n        rows.push(f2);\n      }\n      for (const f2 of libraryFiles) {\n        if (seen.has(f2.bare)) continue;\n        seen.add(f2.bare);\n        rows.push(f2);\n      }\n      if (!rows.length) {\n        ui2.myFilesLabel.hidden = ui2.myFilesGrid.hidden = true;\n        return;\n      }\n      const frag = document.createDocumentFragment();\n      for (const f2 of rows) frag.appendChild(fileTile(f2));\n      ui2.myFilesGrid.replaceChildren(frag);\n      ui2.myFilesLabel.hidden = ui2.myFilesGrid.hidden = false;\n    }\n    function addRecentUpload(url, name, bgrMeta) {\n      const bare = url.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost);\n      const prev = sessionFiles.find((f2) => f2.bare === bare);\n      sessionFiles = sessionFiles.filter((f2) => f2.bare !== bare);\n      sessionFiles.unshift({ bare, url, name: name || bare.split(\"/\").pop(), bgr: bgrMeta || prev && prev.bgr || null });\n      renderMyFiles();\n    }\n    async function loadMyFiles() {\n      if (myFilesLoaded) return;\n      myFilesLoaded = true;\n      if (!opts.customerId) {\n        renderMyFiles();\n        return;\n      }\n      if (!sessionFiles.length) {\n        const frag = document.createDocumentFragment();\n        for (let i2 = 0; i2 < 4; i2++) {\n          const t2 = document.createElement(\"div\");\n          t2.className = \"nsv2-myfile nsv2-skel\";\n          frag.appendChild(t2);\n        }\n        ui2.myFilesGrid.replaceChildren(frag);\n        ui2.myFilesLabel.hidden = ui2.myFilesGrid.hidden = false;\n      }\n      try {\n        const files = await fetchUploadedFiles(opts.customerId);\n        libraryFiles = files.filter((f2) => !f2.gangsheet && !EXPORT_NAME_RE.test(f2.name) && !isStudioSave(f2.name)).map((f2) => ({\n          bare: f2.url.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost),\n          // FULL url kept: newer rows carry the applied bg-removal in the\n          // query (?bg-remove=true\u2026) \u2014 intakeHosted reads it to seed BGR.\n          url: f2.url,\n          name: f2.name\n        }));\n      } catch (err) {\n        console.warn(\"studio-v2: uploaded-files library unavailable\", err);\n      }\n      renderMyFiles();\n    }\n    ui2.elementsPane.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\".nsv2-fx-tile\");\n      if (tile && tile.dataset.el) {\n        if (!kindAllowed(\"element\")) return refuse(\"element\");\n        editor.addShape(tile.dataset.el);\n        closePanelAfterPlace();\n      }\n    });\n    const activeElAny = () => {\n      const o2 = editor.canvas.getActiveObject();\n      return o2 && o2.__el && !editor.activeSelection() ? o2 : null;\n    };\n    const activeElShape = () => {\n      const o2 = activeElAny();\n      return o2 && !o2.__el.isLine ? o2 : null;\n    };\n    const activeElLine = () => {\n      const o2 = activeElAny();\n      return o2 && o2.__el.isLine ? o2 : null;\n    };\n    function placeSpop(pop, btn) {\n      const br2 = btn.getBoundingClientRect();\n      const ar2 = ui2.area.getBoundingClientRect();\n      const w2 = pop.offsetWidth;\n      const x2 = Math.min(Math.max(8, br2.left - ar2.left - w2 / 2 + br2.width / 2), ui2.area.clientWidth - w2 - 8);\n      pop.style.transform = \"translate(\" + x2 + \"px, \" + (br2.bottom - ar2.top + 8) + \"px)\";\n    }\n    const EL_POPS = () => [ui2.borderPop, ui2.lnStylePop, ui2.lnEndsPop];\n    function hideElPops() {\n      for (const p2 of EL_POPS()) p2.hidden = true;\n    }\n    const outlineTarget = () => {\n      const sh = activeElShape();\n      if (sh) return { type: \"shape\", obj: sh };\n      const im = editor.activeImage();\n      if (im) return { type: \"image\", obj: im };\n      return null;\n    };\n    function syncOutlineCtrls() {\n      const t2 = outlineTarget();\n      if (!t2) return;\n      const isShape = t2.type === \"shape\";\n      const st2 = isShape ? { style: t2.obj.__el.bstyle || \"none\", w: t2.obj.__el.bweight || 12, color: t2.obj.__el.bcolor || \"#0f172a\" } : t2.obj.__sticker && t2.obj.__sticker.w ? { style: \"solid\", w: t2.obj.__sticker.w, color: t2.obj.__sticker.color || \"#000000\" } : { style: \"none\", w: 12, color: \"#000000\" };\n      ui2.borderStyleRow.querySelectorAll(\"[data-bstyle]\").forEach((tl) => {\n        tl.classList.toggle(\"is-active\", tl.dataset.bstyle === st2.style);\n        tl.hidden = !isShape && tl.dataset.bstyle !== \"none\" && tl.dataset.bstyle !== \"solid\";\n      });\n      ui2.borderWeight.range.value = String(st2.w);\n      ui2.borderWeight.num.value = String(st2.w);\n    }\n    function syncShapeUI(o2) {\n      o2 = o2 || activeElShape();\n      if (!o2) return;\n      const p2 = o2.__el;\n      ui2.elFillBtn.querySelector('[data-ref=\"disc\"]').style.background = typeof o2.fill === \"string\" && o2.fill || \"transparent\";\n      const st2 = p2.bstyle || \"none\";\n      syncOutlineCtrls();\n      ui2.elBorderBtn.classList.toggle(\"is-on\", st2 !== \"none\");\n      ui2.elBorderColorBtn.hidden = st2 === \"none\";\n      ui2.elBorderColorBtn.querySelector('[data-ref=\"disc\"]').style.borderColor = p2.bcolor || \"#0f172a\";\n      const def = ELEMENTS[p2.kind];\n      ui2.elRoundBtn.hidden = !(def && def.caps && def.caps.corners);\n      const rv = Math.round(p2.round || 0);\n      ui2.radiusSp.range.value = String(rv);\n      ui2.radiusSp.num.value = String(rv);\n    }\n    function syncLineUI(o2) {\n      o2 = o2 || activeElLine();\n      if (!o2) return;\n      const p2 = o2.__el;\n      ui2.lnColorBtn.querySelector('[data-ref=\"disc\"]').style.background = p2.color || \"#0f172a\";\n      ui2.lnStyleRow.querySelectorAll(\"[data-lnstyle]\").forEach((tl) => {\n        tl.classList.toggle(\"is-active\", tl.dataset.lnstyle === (p2.dash || \"solid\"));\n      });\n      const w2 = p2.weight || 9;\n      ui2.lnWeight.range.value = String(w2);\n      ui2.lnWeight.num.value = String(w2);\n      for (const [row, key] of [[ui2.lnCapStartRow, \"capStart\"], [ui2.lnCapEndRow, \"capEnd\"]]) {\n        row.querySelectorAll(\"[data-cap]\").forEach((tl) => {\n          tl.classList.toggle(\"is-active\", tl.dataset.cap === (p2[key] || \"none\"));\n        });\n      }\n    }\n    function syncElUI() {\n      syncShapeUI();\n      syncLineUI();\n    }\n    ui2.elFillBtn.addEventListener(\"click\", () => {\n      if (!activeElShape()) return;\n      colorTarget = \"shapeFill\";\n      if (isMobileView()) {\n        if (mtrayKind === \"color\") return closeMtray();\n        openMtray(\"color\", fillColorTray, () => openColors());\n        return;\n      }\n      activePane === \"color\" ? closeColors() : openColors();\n    });\n    const hexLum = (hex3) => {\n      const h2 = cssToSolidHex(hex3) || \"#ffffff\";\n      const r2 = parseInt(h2.slice(1, 3), 16) / 255, g2 = parseInt(h2.slice(3, 5), 16) / 255, b2 = parseInt(h2.slice(5, 7), 16) / 255;\n      return 0.2126 * r2 + 0.7152 * g2 + 0.0722 * b2;\n    };\n    function imageAvgLum(im) {\n      try {\n        const el2 = im._element;\n        const c2 = document.createElement(\"canvas\");\n        c2.width = 24;\n        c2.height = 24;\n        const cx = c2.getContext(\"2d\");\n        cx.drawImage(el2, 0, 0, 24, 24);\n        const d2 = cx.getImageData(0, 0, 24, 24).data;\n        let sum = 0, n2 = 0;\n        for (let i2 = 0; i2 < d2.length; i2 += 4) {\n          if (d2[i2 + 3] < 60) continue;\n          sum += (0.2126 * d2[i2] + 0.7152 * d2[i2 + 1] + 0.0722 * d2[i2 + 2]) / 255;\n          n2++;\n        }\n        return n2 ? sum / n2 : null;\n      } catch (e24) {\n        return null;\n      }\n    }\n    function autoOutlineColor(o2) {\n      const boardLum = hexLum(editor._boardBg || \"#ffffff\");\n      let elLum = null;\n      if (o2.__el) elLum = typeof o2.fill === \"string\" && o2.fill ? hexLum(o2.fill) : null;\n      else elLum = imageAvgLum(o2);\n      const targets = elLum == null ? [boardLum] : [elLum, boardLum];\n      let best = \"#0f172a\", bestScore = -1;\n      for (const c2 of [\"#0f172a\", \"#ffffff\", \"#8b98ab\"]) {\n        const cl = hexLum(c2);\n        const score = Math.min.apply(null, targets.map((t2) => Math.abs(cl - t2)));\n        if (score > bestScore) {\n          bestScore = score;\n          best = c2;\n        }\n      }\n      return best;\n    }\n    function syncImgOutlineChip(im) {\n      im = im || editor.activeImage();\n      const on2 = !!(im && im.__sticker && im.__sticker.w);\n      ui2.imgOutlineColorBtn.hidden = !on2;\n      if (on2) ui2.imgOutlineColorBtn.querySelector('[data-ref=\"disc\"]').style.borderColor = im.__sticker.color || \"#0f172a\";\n    }\n    ui2.elBorderColorBtn.addEventListener(\"click\", () => {\n      const o2 = activeElShape();\n      if (!o2) return;\n      if (!o2.__el.bstyle || o2.__el.bstyle === \"none\") editor.setElBorder(o2, { style: \"solid\", color: o2.__el.bcolor || autoOutlineColor(o2) });\n      syncShapeUI(o2);\n      colorTarget = \"shapeBorder\";\n      if (isMobileView()) {\n        if (mtrayKind === \"color\") return closeMtray();\n        openMtray(\"color\", fillColorTray, () => openColors());\n        return;\n      }\n      activePane === \"color\" ? closeColors() : openColors();\n    });\n    ui2.imgOutlineColorBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      if (!im.__sticker || !im.__sticker.w) editor.setImageSticker(im, { w: 12, color: autoOutlineColor(im) });\n      syncImgOutlineChip(im);\n      colorTarget = \"imageOutline\";\n      if (isMobileView()) {\n        if (mtrayKind === \"color\") return closeMtray();\n        openMtray(\"color\", fillColorTray, () => openColors());\n        return;\n      }\n      activePane === \"color\" ? closeColors() : openColors();\n    });\n    ui2.elBorderBtn.addEventListener(\"click\", () => {\n      const o2 = activeElShape();\n      if (!o2) return;\n      if (isMobileView()) return openPane(activePane === \"border\" ? null : \"border\");\n      if (!ui2.borderPop.hidden) return hideElPops();\n      hideElPops();\n      syncShapeUI(o2);\n      ui2.borderPop.hidden = false;\n      placeSpop(ui2.borderPop, ui2.elBorderBtn);\n    });\n    ui2.stickerBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      if (!im.__sticker || !im.__sticker.w) editor.setImageSticker(im, { w: 12, color: autoOutlineColor(im) });\n      syncImgOutlineChip(im);\n      syncOutlineCtrls();\n      if (isMobileView()) return openPane(activePane === \"outline\" ? null : \"outline\");\n      if (activePane === \"outline\") openPane(null);\n      if (!ui2.borderPop.hidden) return hideElPops();\n      hideElPops();\n      ui2.borderPop.hidden = false;\n      placeSpop(ui2.borderPop, ui2.stickerBtn);\n    });\n    ui2.borderStyleRow.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\"[data-bstyle]\");\n      const t2 = outlineTarget();\n      if (!tile || !t2) return;\n      const key = tile.dataset.bstyle;\n      if (t2.type === \"shape\") {\n        const patch = { style: key };\n        if (key !== \"none\" && !t2.obj.__el.bcolor) patch.color = autoOutlineColor(t2.obj);\n        if (key !== \"none\" && !t2.obj.__el.bweight) patch.weight = 12;\n        editor.setElBorder(t2.obj, patch);\n        syncShapeUI(t2.obj);\n        return;\n      }\n      if (key === \"none\") editor.setImageSticker(t2.obj, null);\n      else if (key === \"solid\") {\n        const st2 = t2.obj.__sticker || {};\n        editor.setImageSticker(t2.obj, { w: st2.w || 12, color: st2.color || autoOutlineColor(t2.obj) });\n      }\n      syncImgOutlineChip(t2.obj);\n      syncOutlineCtrls();\n    });\n    let outlineRaf = null;\n    const applyBorderWeight = (v2, live) => {\n      const t2 = outlineTarget();\n      if (!t2) return;\n      if (t2.type === \"shape\") {\n        const n3 = Math.min(100, Math.max(1, Math.round(parseFloat(v2)) || 12));\n        editor.setElBorder(t2.obj, { weight: n3 });\n        syncShapeUI(t2.obj);\n        return;\n      }\n      const n2 = Math.min(100, Math.max(1, Math.round(parseFloat(v2)) || 12));\n      ui2.borderWeight.range.value = String(n2);\n      ui2.borderWeight.num.value = String(n2);\n      if (outlineRaf) cancelAnimationFrame(outlineRaf);\n      outlineRaf = requestAnimationFrame(() => {\n        outlineRaf = null;\n        const st2 = t2.obj.__sticker || {};\n        const sticker = { w: n2, color: st2.color || autoOutlineColor(t2.obj) };\n        if (live) editor.setImageStickerLive(t2.obj, sticker);\n        else editor.setImageSticker(t2.obj, sticker);\n        syncImgOutlineChip(t2.obj);\n      });\n    };\n    ui2.borderWeight.range.addEventListener(\"input\", () => applyBorderWeight(ui2.borderWeight.range.value, true));\n    ui2.borderWeight.range.addEventListener(\"change\", () => applyBorderWeight(ui2.borderWeight.range.value));\n    ui2.borderWeight.num.addEventListener(\"change\", () => applyBorderWeight(ui2.borderWeight.num.value));\n    ui2.elRoundBtn.addEventListener(\"click\", () => openRadiusUI(ui2.elRoundBtn));\n    ui2.elFlipHBtn.addEventListener(\"click\", () => editor.flip(\"h\"));\n    ui2.elFlipVBtn.addEventListener(\"click\", () => editor.flip(\"v\"));\n    ui2.lnColorBtn.addEventListener(\"click\", () => {\n      if (!activeElLine()) return;\n      colorTarget = \"line\";\n      if (isMobileView()) {\n        if (mtrayKind === \"color\") return closeMtray();\n        openMtray(\"color\", fillColorTray, () => openColors());\n        return;\n      }\n      activePane === \"color\" ? closeColors() : openColors();\n    });\n    ui2.lnStyleBtn.addEventListener(\"click\", () => {\n      const o2 = activeElLine();\n      if (!o2) return;\n      if (isMobileView()) return openPane(activePane === \"lnstyle\" ? null : \"lnstyle\");\n      if (!ui2.lnStylePop.hidden) return hideElPops();\n      hideElPops();\n      syncLineUI(o2);\n      ui2.lnStylePop.hidden = false;\n      placeSpop(ui2.lnStylePop, ui2.lnStyleBtn);\n    });\n    ui2.lnEndsBtn.addEventListener(\"click\", () => {\n      const o2 = activeElLine();\n      if (!o2) return;\n      if (isMobileView()) return openPane(activePane === \"ends\" ? null : \"ends\");\n      if (!ui2.lnEndsPop.hidden) return hideElPops();\n      hideElPops();\n      syncLineUI(o2);\n      ui2.lnEndsPop.hidden = false;\n      placeSpop(ui2.lnEndsPop, ui2.lnEndsBtn);\n    });\n    ui2.lnStyleRow.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\"[data-lnstyle]\");\n      const o2 = activeElLine();\n      if (!tile || !o2) return;\n      editor.setLineProps(o2, { dash: tile.dataset.lnstyle });\n      syncLineUI(o2);\n    });\n    const applyLnWeight = (v2) => {\n      const o2 = activeElLine();\n      if (!o2) return;\n      const n2 = Math.min(30, Math.max(2, Math.round(parseFloat(v2)) || 9));\n      editor.setLineProps(o2, { weight: n2 });\n      syncLineUI(o2);\n    };\n    ui2.lnWeight.range.addEventListener(\"input\", () => applyLnWeight(ui2.lnWeight.range.value));\n    ui2.lnWeight.num.addEventListener(\"change\", () => applyLnWeight(ui2.lnWeight.num.value));\n    const onCapRow = (row, key) => {\n      row.addEventListener(\"click\", (e24) => {\n        const tile = e24.target.closest(\"[data-cap]\");\n        const o2 = activeElLine();\n        if (!tile || !o2) return;\n        editor.setLineProps(o2, { [key]: tile.dataset.cap });\n        syncLineUI(o2);\n      });\n    };\n    onCapRow(ui2.lnCapStartRow, \"capStart\");\n    onCapRow(ui2.lnCapEndRow, \"capEnd\");\n    listen(document, \"pointerdown\", (e24) => {\n      const anchors = [ui2.elBorderBtn, ui2.stickerBtn, ui2.lnStyleBtn, ui2.lnEndsBtn];\n      for (const pop of EL_POPS()) {\n        if (pop.hidden) continue;\n        if (pop.contains(e24.target) || anchors.some((b2) => b2.contains(e24.target))) continue;\n        pop.hidden = true;\n      }\n    });\n    const registry = opts.persistRegistry || accountRegistry(opts.customerId);\n    function loginUrl() {\n      let path = window.location.pathname;\n      try {\n        const qs2 = new URLSearchParams(window.location.search);\n        const keep = new URLSearchParams();\n        for (const k2 of [\"view\", \"preview_theme_id\", \"mode\"]) if (qs2.get(k2)) keep.set(k2, qs2.get(k2));\n        if (keep.toString()) path += \"?\" + keep.toString();\n      } catch (e24) {\n      }\n      return \"/customer_authentication/login?return_to=\" + encodeURIComponent(path);\n    }\n    const RETURN_PANE_KEY = \"nsv2ReturnPane\";\n    const gotoLogin = (pane) => {\n      try {\n        if (pane) sessionStorage.setItem(RETURN_PANE_KEY, pane);\n      } catch (e24) {\n      }\n      window.location.href = loginUrl();\n    };\n    try {\n      const qs2 = new URLSearchParams(window.location.search);\n      if (qs2.has(\"shop_sign_in\") || qs2.has(\"shop_consented_scopes\")) {\n        qs2.delete(\"shop_sign_in\");\n        qs2.delete(\"shop_consented_scopes\");\n        const clean = window.location.pathname + (qs2.toString() ? \"?\" + qs2.toString() : \"\");\n        window.history.replaceState(null, \"\", clean);\n      }\n    } catch (e24) {\n    }\n    let designsLoaded = false;\n    let designsTab = \"saved\";\n    let designCounts = null;\n    function designsEmptyState(msg2, withSignIn) {\n      designCounts = null;\n      ui2.designsTabs.hidden = true;\n      ui2.designsSavedGrid.hidden = ui2.designsGrid.hidden = true;\n      ui2.designsEmpty.textContent = msg2;\n      if (withSignIn) {\n        const b2 = document.createElement(\"button\");\n        b2.type = \"button\";\n        b2.className = \"nsv2-signin-btn\";\n        b2.textContent = \"Sign In\";\n        b2.addEventListener(\"click\", () => gotoLogin(\"designs\"));\n        ui2.designsEmpty.appendChild(b2);\n      }\n      ui2.designsEmpty.hidden = false;\n    }\n    function syncDesignsTab() {\n      if (!designCounts) return;\n      ui2.designsTabs.hidden = false;\n      ui2.designsTabSaved.classList.toggle(\"is-on\", designsTab === \"saved\");\n      ui2.designsTabExports.classList.toggle(\"is-on\", designsTab === \"exports\");\n      const saved = designsTab === \"saved\";\n      ui2.designsSavedGrid.hidden = !saved || !designCounts.saved;\n      ui2.designsGrid.hidden = saved || !designCounts.exports;\n      const empty = saved ? !designCounts.saved : !designCounts.exports;\n      ui2.designsEmpty.textContent = saved ? \"No saved designs yet \\u2014 hit Save and they\\u2019ll show up here\" : \"No exported designs yet \\u2014 hit Use Design and they\\u2019ll show up here\";\n      ui2.designsEmpty.hidden = !empty;\n    }\n    ui2.designsTabSaved.addEventListener(\"click\", () => {\n      designsTab = \"saved\";\n      syncDesignsTab();\n    });\n    ui2.designsTabExports.addEventListener(\"click\", () => {\n      designsTab = \"exports\";\n      syncDesignsTab();\n    });\n    function editedAgo(ts2) {\n      if (!ts2) return \"\";\n      const m = Math.floor((Date.now() - ts2) / 6e4);\n      if (m < 1) return \"Edited just now\";\n      if (m < 60) return \"Edited \" + m + (m === 1 ? \" minute ago\" : \" minutes ago\");\n      const h2 = Math.floor(m / 60);\n      if (h2 < 24) return \"Edited \" + h2 + (h2 === 1 ? \" hour ago\" : \" hours ago\");\n      const d2 = Math.floor(h2 / 24);\n      if (d2 < 30) return \"Edited \" + d2 + (d2 === 1 ? \" day ago\" : \" days ago\");\n      return \"Edited \" + new Date(ts2).toLocaleDateString();\n    }\n    const dcardMenu = document.createElement(\"div\");\n    dcardMenu.className = \"nsv2-menu nsv2-dcard-menu\";\n    dcardMenu.hidden = true;\n    const dcardItem = (label, danger) => {\n      const b2 = document.createElement(\"button\");\n      b2.type = \"button\";\n      b2.className = \"nsv2-menu-item\" + (danger ? \" nsv2-menu-item--danger\" : \"\");\n      b2.innerHTML = '<span class=\"nsv2-menu-lab\"><span>' + label + \"</span></span>\";\n      dcardMenu.appendChild(b2);\n      return b2;\n    };\n    const dcardOpen = dcardItem(\"Open\");\n    const dcardDup = dcardItem(\"Duplicate\");\n    const dcardDel = dcardItem(\"Delete\", true);\n    ui2.root.appendChild(dcardMenu);\n    let dcardCtx = null;\n    function closeDcardMenu() {\n      dcardMenu.hidden = true;\n      if (dcardCtx) dcardCtx.dots.classList.remove(\"is-open\");\n      dcardCtx = null;\n    }\n    listen(document, \"pointerdown\", (e24) => {\n      if (dcardCtx && !dcardMenu.contains(e24.target) && !dcardCtx.dots.contains(e24.target)) closeDcardMenu();\n    }, true);\n    listen(document, \"scroll\", () => {\n      if (dcardCtx) closeDcardMenu();\n    }, true);\n    dcardOpen.addEventListener(\"click\", () => {\n      const c2 = dcardCtx;\n      closeDcardMenu();\n      if (c2) openSavedDesign(c2.f, c2.card);\n    });\n    dcardDup.addEventListener(\"click\", async () => {\n      const c2 = dcardCtx;\n      closeDcardMenu();\n      if (!c2) return;\n      c2.card.classList.add(\"is-loading\");\n      try {\n        const result = await duplicateDesign(registry, c2.f.url || c2.f.bare);\n        noteSessionSave(result);\n      } catch (err) {\n        console.error(\"studio-v2: duplicate failed\", err);\n        askDialog(\"Couldn\\u2019t duplicate this design \\u2014 please try again.\", { cancel: null });\n      } finally {\n        c2.card.classList.remove(\"is-loading\");\n      }\n    });\n    dcardDel.addEventListener(\"click\", async () => {\n      const c2 = dcardCtx;\n      closeDcardMenu();\n      if (!c2) return;\n      if (!await askDialog(\"Delete this design? This can\\u2019t be undone.\", { ok: \"Delete\" })) return;\n      c2.card.classList.add(\"is-loading\");\n      try {\n        await registry.archive(c2.f.name);\n        sessionArchived.add(c2.f.name);\n        sessionSaves = sessionSaves.filter((sv) => sv.name !== c2.f.name);\n        designsLoaded = false;\n        loadMyDesigns();\n      } catch (err) {\n        console.error(\"studio-v2: delete failed\", err);\n        c2.card.classList.remove(\"is-loading\");\n        askDialog(\"Couldn\\u2019t delete this design \\u2014 please try again.\", { cancel: null });\n      }\n    });\n    function designCard(f2) {\n      const card = document.createElement(\"div\");\n      card.className = \"nsv2-dcard\" + (f2.pending ? \" is-loading\" : \"\");\n      const thumb = document.createElement(\"button\");\n      thumb.type = \"button\";\n      thumb.className = \"nsv2-dcard-thumb\";\n      if (f2.pending) {\n        const im = document.createElement(\"img\");\n        im.alt = f2.name || \"\";\n        if (f2.thumb) im.src = f2.thumb;\n        thumb.appendChild(im);\n      } else {\n        thumb.appendChild(previewImg(f2));\n      }\n      thumb.addEventListener(\"click\", () => {\n        if (!f2.pending) openSavedDesign(f2, card);\n      });\n      const dots = document.createElement(\"button\");\n      dots.type = \"button\";\n      dots.className = \"nsv2-dcard-dots\";\n      dots.setAttribute(\"aria-label\", \"Design options\");\n      dots.innerHTML = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"3\" cy=\"8\" r=\"1.6\"/><circle cx=\"8\" cy=\"8\" r=\"1.6\"/><circle cx=\"13\" cy=\"8\" r=\"1.6\"/></svg>';\n      dots.addEventListener(\"click\", (e24) => {\n        e24.stopPropagation();\n        if (dcardCtx && dcardCtx.dots === dots) return closeDcardMenu();\n        if (dcardCtx) closeDcardMenu();\n        dcardCtx = { f: f2, card, dots };\n        dots.classList.add(\"is-open\");\n        dcardMenu.hidden = false;\n        const rr2 = ui2.root.getBoundingClientRect();\n        const dr2 = dots.getBoundingClientRect();\n        const mw = dcardMenu.offsetWidth, mh = dcardMenu.offsetHeight;\n        const px = Math.max(8, Math.min(dr2.right - rr2.left - mw, rr2.width - mw - 8));\n        const py = Math.max(8, Math.min(dr2.bottom - rr2.top + 4, rr2.height - mh - 8));\n        dcardMenu.style.transform = \"translate(\" + px + \"px, \" + py + \"px)\";\n      });\n      const name = document.createElement(\"div\");\n      name.className = \"nsv2-dcard-name\";\n      name.textContent = nameFromFileName(f2.name) || \"Untitled Design\";\n      const meta = document.createElement(\"div\");\n      meta.className = \"nsv2-dcard-meta\";\n      meta.textContent = editedAgo(f2.ts);\n      card.append(thumb, dots, name, meta);\n      return card;\n    }\n    function designRow(f2, re2) {\n      return {\n        bare: f2.url.split(\"?\")[0].split(cfg.s3Host).join(cfg.imgixHost),\n        url: f2.url,\n        name: f2.name,\n        ts: Number(f2.name.match(re2)[1]) || 0\n      };\n    }\n    async function openSavedDesign(f2, tile) {\n      if (editor.canvas.getObjects().length && !await askDialog(\"Open this design? Your current canvas will be replaced.\", { ok: \"Open\" }))\n        return;\n      tile.classList.add(\"is-loading\");\n      try {\n        const meta = await loadDesignFromUrl(editor, stateUrlFor(f2.url), modeSanitize);\n        if (!lastStripped) adoptSave(meta);\n        trackOpenSaved();\n      } catch (err) {\n        console.error(\"studio-v2: design load failed\", err);\n        askDialog(\"Couldn\\u2019t open this design \\u2014 please try again.\", { cancel: null });\n      } finally {\n        tile.classList.remove(\"is-loading\");\n      }\n    }\n    let sessionSaves = [];\n    const sessionArchived = /* @__PURE__ */ new Set();\n    function noteSessionSave(result, replacedFileName) {\n      track(\"save\");\n      if (!firstSaveSent) {\n        firstSaveSent = true;\n        track(\"first_save\");\n      }\n      sessionSaves = sessionSaves.filter((s3) => s3.name !== result.fileName);\n      sessionSaves.unshift(designRow({ url: result.previewUrl, name: result.fileName }, savedNameRe(result.fileName)));\n      if (replacedFileName) sessionArchived.add(replacedFileName);\n      designsLoaded = false;\n      if (activePane === \"designs\") loadMyDesigns();\n    }\n    async function notePendingSave(fileName) {\n      let thumb = \"\";\n      try {\n        thumb = URL.createObjectURL(await editor.exportPng(300, { print: false }));\n      } catch (e24) {\n      }\n      const re2 = savedNameRe(fileName);\n      sessionSaves = sessionSaves.filter((s3) => s3.name !== fileName);\n      sessionSaves.unshift({ bare: \"\", url: \"\", name: fileName, ts: re2 ? Number(fileName.match(re2)[1]) || Date.now() : Date.now(), thumb, pending: true });\n      designsLoaded = false;\n      if (activePane === \"designs\") loadMyDesigns();\n    }\n    function dropPendingSave(fileName) {\n      const row = sessionSaves.find((s3) => s3.name === fileName && s3.pending);\n      if (!row) return;\n      if (row.thumb) {\n        try {\n          URL.revokeObjectURL(row.thumb);\n        } catch (e24) {\n        }\n      }\n      sessionSaves = sessionSaves.filter((s3) => s3 !== row);\n      designsLoaded = false;\n      if (activePane === \"designs\") loadMyDesigns();\n    }\n    async function loadMyDesigns() {\n      if (designsLoaded) return;\n      designsLoaded = true;\n      if (!registry) {\n        designsEmptyState(\"Sign in to see your saved designs, exports, and uploads\", true);\n        return;\n      }\n      let files;\n      try {\n        files = await registry.list();\n      } catch (err) {\n        console.warn(\"studio-v2: designs library unavailable\", err);\n        designsLoaded = false;\n        designsEmptyState(\"Couldn\\u2019t load your designs \\u2014 try again in a moment\");\n        return;\n      }\n      const fetched = files.filter((f2) => savedNameRe(f2.name)).map((f2) => designRow(f2, savedNameRe(f2.name)));\n      const seen = new Set(sessionSaves.map((s3) => s3.name));\n      const saved = sessionSaves.concat(fetched.filter((f2) => !seen.has(f2.name))).filter((f2) => !sessionArchived.has(f2.name)).sort((a2, b2) => b2.ts - a2.ts);\n      const exports_ = files.filter((f2) => EXPORT_NAME_RE.test(f2.name) && !savedNameRe(f2.name)).map((f2) => designRow(f2, EXPORT_NAME_RE)).sort((a2, b2) => b2.ts - a2.ts);\n      const savedFrag = document.createDocumentFragment();\n      for (const f2 of saved) savedFrag.appendChild(designCard(f2));\n      ui2.designsSavedGrid.replaceChildren(savedFrag);\n      const expFrag = document.createDocumentFragment();\n      for (const f2 of exports_) expFrag.appendChild(fileTile(f2));\n      ui2.designsGrid.replaceChildren(expFrag);\n      designCounts = { saved: saved.length, exports: exports_.length };\n      syncDesignsTab();\n    }\n    let premadeInit = false;\n    function initPremade() {\n      if (premadeInit) return;\n      premadeInit = true;\n      const body = ui2.premadeBody;\n      const topbar = document.createElement(\"div\");\n      topbar.className = \"nsv2-ndl-top\";\n      const backBtn = document.createElement(\"button\");\n      backBtn.type = \"button\";\n      backBtn.className = \"nsv2-ndl-back\";\n      backBtn.innerHTML = icons.chevronRight + \"<span>Back</span>\";\n      const titleEl = document.createElement(\"span\");\n      titleEl.className = \"nsv2-ndl-title\";\n      topbar.append(backBtn, titleEl);\n      const home = document.createElement(\"div\");\n      home.className = \"nsv2-designs nsv2-designs--saved\";\n      const subs = document.createElement(\"div\");\n      subs.className = \"nsv2-designs nsv2-designs--saved\";\n      const grid = document.createElement(\"div\");\n      grid.className = \"nsv2-designs nsv2-designs--saved\";\n      const pager = document.createElement(\"div\");\n      pager.className = \"nsv2-ndl-pager\";\n      const status = document.createElement(\"div\");\n      status.className = \"nsv2-designs-empty\";\n      body.append(topbar, home, subs, grid, pager, status);\n      let onBack = null;\n      backBtn.addEventListener(\"click\", () => {\n        if (onBack) onBack();\n      });\n      let curHandle = null, page = 1, pages = 1, reqSeq = 0;\n      const cache = {};\n      const views = [topbar, home, subs, grid, pager, status];\n      function show(...els) {\n        for (const v2 of views) v2.hidden = !els.includes(v2);\n      }\n      function card(name, img, meta, onClick) {\n        const c2 = document.createElement(\"div\");\n        c2.className = \"nsv2-dcard\";\n        const thumb = document.createElement(\"button\");\n        thumb.type = \"button\";\n        thumb.className = \"nsv2-dcard-thumb\";\n        if (img) {\n          const im = document.createElement(\"img\");\n          im.loading = \"lazy\";\n          im.decoding = \"async\";\n          im.alt = name;\n          im.src = img;\n          im.onerror = () => {\n            im.remove();\n            thumb.classList.add(\"nsv2-ndl-textile\");\n            thumb.textContent = name;\n          };\n          thumb.appendChild(im);\n        } else {\n          thumb.classList.add(\"nsv2-ndl-textile\");\n          thumb.textContent = name;\n        }\n        thumb.addEventListener(\"click\", () => onClick(c2));\n        const nm = document.createElement(\"div\");\n        nm.className = \"nsv2-dcard-name\";\n        nm.textContent = name;\n        c2.append(thumb, nm);\n        if (meta) {\n          const mt2 = document.createElement(\"div\");\n          mt2.className = \"nsv2-dcard-meta\";\n          mt2.textContent = meta;\n          c2.append(mt2);\n        }\n        return c2;\n      }\n      for (const c2 of NDL_CATS)\n        home.appendChild(card(c2.name, c2.img, c2.subs.length + \" categories\", () => openCat(c2)));\n      function showCats() {\n        reqSeq++;\n        show(home);\n      }\n      function openCat(c2) {\n        reqSeq++;\n        titleEl.textContent = c2.name;\n        onBack = showCats;\n        subs.replaceChildren();\n        for (const s22 of c2.subs)\n          subs.appendChild(card(s22.t, s22.img, s22.n ? s22.n + \" designs\" : \"\", () => openSub(c2, s22)));\n        show(topbar, subs);\n      }\n      function openSub(c2, s22) {\n        titleEl.textContent = c2.name + \" \\u203A \" + s22.t;\n        onBack = () => openCat(c2);\n        load(s22.h, 1);\n      }\n      function urlFor(handle, n2) {\n        let url = \"/collections/\" + handle + \"?view=rtp-json&page=\" + n2;\n        const pv = new URLSearchParams(location.search).get(\"preview_theme_id\");\n        if (pv) url += \"&preview_theme_id=\" + encodeURIComponent(pv);\n        return url;\n      }\n      function load(handle, n2) {\n        curHandle = handle;\n        page = n2;\n        status.textContent = \"Loading designs\\u2026\";\n        show(topbar, status);\n        const key = handle + \":\" + n2;\n        const seq = ++reqSeq;\n        if (cache[key]) return renderDesigns(cache[key], seq);\n        fetch(urlFor(handle, n2)).then((r2) => r2.json()).then((d2) => {\n          cache[key] = d2;\n          renderDesigns(d2, seq);\n        }).catch(() => {\n          if (seq !== reqSeq) return;\n          status.textContent = \"Couldn\\u2019t load designs \\u2014 please try again.\";\n        });\n      }\n      function renderDesigns(d2, seq) {\n        if (seq !== reqSeq) return;\n        pages = d2.pages || 1;\n        grid.replaceChildren();\n        for (const it2 of d2.items || []) {\n          const clean = String(it2.title || \"\").replace(/\\s*[-|,]?\\s*Ready[\\s-]?to[\\s-]?Press(\\s*DTF)?(\\s*Transfers?)?\\s*$/i, \"\").replace(/\\s*[-|,]\\s*$/, \"\").trim() || it2.title || \"\";\n          grid.appendChild(card(clean, thumbUrl(it2), \"\", (tile) => placePremade(it2, clean, tile)));\n        }\n        renderPager();\n        show(topbar, grid, ...pages > 1 ? [pager] : []);\n      }\n      function renderPager() {\n        pager.replaceChildren();\n        if (pages <= 1) return;\n        const mk = (label) => {\n          const b2 = document.createElement(\"button\");\n          b2.type = \"button\";\n          b2.className = \"nsv2-ndl-pgbtn\";\n          b2.textContent = label;\n          return b2;\n        };\n        const prev = mk(\"Prev\"), next = mk(\"Next\");\n        const info = document.createElement(\"span\");\n        info.className = \"nsv2-ndl-pginfo\";\n        info.textContent = \"Page \" + page + \" of \" + pages;\n        prev.disabled = page <= 1;\n        next.disabled = page >= pages;\n        prev.onclick = () => {\n          if (page > 1) load(curHandle, page - 1);\n        };\n        next.onclick = () => {\n          if (page < pages) load(curHandle, page + 1);\n        };\n        pager.append(prev, info, next);\n      }\n      showCats();\n    }\n    function thumbUrl(it2) {\n      return String(it2.img || \"\").replace(/^\\/\\//, \"https://\");\n    }\n    async function placePremade(it2, name, tile) {\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      const file = String(it2.file || \"\");\n      const bare = file.split(\"?\")[0];\n      const cands = [];\n      if (/\\.amazonaws\\.com\\//.test(bare) && bare.indexOf(cfg.s3Host) === -1) {\n        let base = bare.split(\"/\").pop();\n        try {\n          base = decodeURIComponent(base);\n        } catch (e24) {\n        }\n        if (cfg.rtpMirror) cands.push(cfg.rtpMirror + encodeURIComponent(base.replace(/\\+/g, \" \")));\n      } else if (bare.indexOf(\"imgix.net\") > -1 || bare.indexOf(cfg.s3Host) > -1) {\n        cands.push(bare);\n      }\n      tile.classList.add(\"is-loading\");\n      try {\n        let placed = null, lastErr = null;\n        for (const u2 of cands) {\n          try {\n            placed = await editor.addImageFromUrl(hostedDisplayUrl(u2), name);\n            placed.__bgr = {\n              status: \"ready\",\n              imgixUrl: u2.split(\"?\")[0],\n              fileName: name + \".png\",\n              isVector: false,\n              versions: {},\n              model: null\n            };\n            break;\n          } catch (err) {\n            lastErr = err;\n          }\n        }\n        if (!placed) throw lastErr || new Error(\"no loadable part file\");\n        trackAdd(\"premade_place\");\n        syncSelection();\n        closePanelAfterPlace();\n      } catch (err) {\n        console.error(\"studio-v2: premade part file failed\", file, err);\n        askDialog(\"Couldn\\u2019t load this design \\u2014 please try again.\", { cancel: null });\n      } finally {\n        tile.classList.remove(\"is-loading\");\n      }\n    }\n    function syncSelection() {\n      if (editor._crop) return;\n      const t2 = editor.activeText();\n      const im = editor.activeImage();\n      const sel = editor.activeSelection();\n      const none = !editor.canvas.getActiveObject();\n      ui2.ctxbar.classList.add(\"is-visible\");\n      const activeNow = editor.canvas.getActiveObject() || null;\n      if (activeNow !== lastTrayObj) {\n        lastTrayObj = activeNow;\n        if (isMobileView()) ui2.ctxbar.scrollLeft = 0;\n      }\n      const elSh = activeElShape();\n      const elLn = activeElLine();\n      const lockedSel = (() => {\n        const a2 = editor.canvas.getActiveObject();\n        return !!(a2 && a2.__locked);\n      })();\n      const baseSel = (() => {\n        const a2 = editor.canvas.getActiveObject();\n        return !!(a2 && a2.__base);\n      })();\n      ui2.ctxTextGroup.hidden = !t2 || lockedSel;\n      ui2.editTextChip.hidden = !!sel;\n      ui2.ctxImageGroup.hidden = !im || lockedSel || !!im.__base;\n      ui2.cropBtn.hidden = !!(im && im.__el);\n      ui2.ctxShapeGroup.hidden = !elSh || lockedSel;\n      ui2.ctxLineGroup.hidden = !elLn || lockedSel;\n      ui2.ctxSelGroup.hidden = !sel || lockedSel;\n      ui2.ctxCanvasGroup.hidden = !none;\n      ui2.ctxNudgeGroup.hidden = none || lockedSel;\n      if (none && activePane === \"nudge\") openPane(null);\n      ui2.ctxTail.hidden = none || lockedSel || baseSel;\n      if (elSh) syncShapeUI(elSh);\n      if (elLn) syncLineUI(elLn);\n      if (t2) colorTarget = \"text\";\n      if (!elSh && !elLn) {\n        hideElPops();\n        if (activePane === \"border\" || activePane === \"ends\" || activePane === \"lnstyle\") openPane(null);\n      }\n      if (im) {\n        const st2 = im.__bgr && im.__bgr.status || \"none\";\n        ui2.removeBgBtn.disabled = st2 !== \"ready\";\n        ui2.removeBgBtn.dataset.tip = st2 === \"uploading\" ? \"Preparing upload\\u2026\" : st2 === \"failed\" ? \"Upload failed\" : \"Remove background\";\n        ui2.filtersBtn.disabled = st2 !== \"ready\";\n        ui2.filtersBtn.dataset.tip = st2 === \"uploading\" ? \"Preparing upload\\u2026\" : st2 === \"failed\" ? \"Upload failed\" : \"Filters\";\n        ui2.upscaleBtn.disabled = st2 !== \"ready\";\n        ui2.upscaleBtn.dataset.tip = st2 === \"uploading\" ? \"Preparing upload\\u2026\" : st2 === \"failed\" ? \"Upload failed\" : \"AI upscale for sharper large prints\";\n        syncUpscaleUI(im);\n        if (activePane === \"bgr\" && liveBgrObject() !== im) closeBgr();\n        if (activePane === \"filters\" && filterObject !== im) closeFilters();\n        ui2.colorReplaceBtn.disabled = false;\n        if (activePane === \"recolor\" && liveRecolorObject() !== im) closeRecolor();\n        syncImgOutlineChip(im);\n      }\n      if (!t2) {\n        const mob = isMobileView();\n        if (activePane === \"color\") setColorMode(false);\n        const textExp = activePane === \"fonts\" || activePane === \"effects\" || activePane === \"color\" || activePane === \"format\" || activePane === \"spacing\" || activePane === \"shape\";\n        if (mob && textExp) openPane(null);\n        else {\n          if (activePane === \"fonts\") closeFonts();\n          if (activePane === \"effects\") closeFx();\n          if (activePane === \"color\") closeColors();\n        }\n        const imgExp = activePane === \"bgr\" || activePane === \"filters\" || activePane === \"recolor\" || activePane === \"outline\";\n        if (!im && imgExp) {\n          if (mob) openPane(null);\n          else {\n            if (activePane === \"bgr\") closeBgr();\n            if (activePane === \"filters\") closeFilters();\n            if (activePane === \"recolor\") closeRecolor();\n            if (activePane === \"outline\") openPane(null);\n          }\n        }\n        hideSpop();\n        return;\n      }\n      if (!ui2.spop.hidden) syncSpop();\n      ui2.alignBtn.hidden = t2.textLines.length < 2;\n      currentFamily = t2.fontFamily || currentFamily;\n      currentWeight = parseInt(t2.fontWeight, 10) || (t2.fontWeight === \"bold\" ? 700 : 400);\n      markFontRows();\n      const gang = editor.activeTexts();\n      if (gang.length > 1) {\n        const fams = new Set(gang.map((x2) => x2.fontFamily));\n        if (fams.size > 1) ui2.fontBtn.querySelector('[data-ref=\"family\"]').textContent = \"Multiple fonts\";\n        const sizes = new Set(gang.map((x2) => Math.round(x2.fontSize)));\n        ui2.sizeVal.value = sizes.size > 1 ? \"\\u2014\" : String(Math.round(t2.fontSize));\n      } else {\n        ui2.sizeVal.value = String(Math.round(t2.fontSize));\n      }\n      syncColorUI();\n      const wt2 = parseInt(t2.fontWeight, 10) || (t2.fontWeight === \"bold\" ? 700 : 400);\n      ui2.boldBtn.classList.toggle(\"is-on\", wt2 >= 600);\n      ui2.boldBtn.disabled = nearestWeight(t2.fontFamily, 700) < 600;\n      ui2.boldBtn.dataset.tip = ui2.boldBtn.disabled ? \"No bold weight for this font\" : \"Bold\";\n      ui2.italicBtn.classList.toggle(\"is-on\", t2.fontStyle === \"italic\");\n      ui2.underlineBtn.classList.toggle(\"is-on\", !!t2.underline);\n      ui2.strikeBtn.classList.toggle(\"is-on\", !!t2.linethrough);\n      ui2.caseBtn.classList.toggle(\"is-on\", t2.__caseOrig != null && t2.text === t2.__caseOrig.toUpperCase());\n      ui2.bulletsBtn.classList.toggle(\"is-on\", !!t2.__bullets);\n      if (activePane === \"effects\") syncFxPane();\n    }\n    editor.on(\"selection\", syncSelection);\n    const ctxGroupItems = {\n      text: [...ui2.ctxTextGroup.children],\n      image: [...ui2.ctxImageGroup.children],\n      shape: [...ui2.ctxShapeGroup.children],\n      line: [...ui2.ctxLineGroup.children]\n    };\n    function hideMorePanel() {\n      ui2.ctxMorePanel.hidden = true;\n      ui2.ctxMoreBtn.classList.remove(\"is-on\");\n    }\n    function restoreGroup(group, items) {\n      let prev = null;\n      for (const n2 of items) {\n        if (n2.parentNode !== group || n2.previousElementSibling !== prev) {\n          group.insertBefore(n2, prev ? prev.nextElementSibling : group.firstElementChild);\n        }\n        prev = n2;\n      }\n    }\n    function layoutCtxOverflow() {\n      hideMorePanel();\n      if (!ui2.ctxMorePanel.children.length && ui2.ctxbar.scrollWidth <= ui2.ctxbar.clientWidth + 1) {\n        ui2.ctxMoreBtn.hidden = true;\n        return;\n      }\n      restoreGroup(ui2.ctxTextGroup, ctxGroupItems.text);\n      restoreGroup(ui2.ctxImageGroup, ctxGroupItems.image);\n      restoreGroup(ui2.ctxShapeGroup, ctxGroupItems.shape);\n      restoreGroup(ui2.ctxLineGroup, ctxGroupItems.line);\n      ui2.ctxMoreBtn.hidden = true;\n      if (!ui2.ctxbar.classList.contains(\"is-visible\")) return;\n      if (ui2.root.clientWidth < 768) return;\n      const group = !ui2.ctxTextGroup.hidden ? ui2.ctxTextGroup : !ui2.ctxImageGroup.hidden ? ui2.ctxImageGroup : !ui2.ctxShapeGroup.hidden ? ui2.ctxShapeGroup : !ui2.ctxLineGroup.hidden ? ui2.ctxLineGroup : null;\n      if (!group) return;\n      let guard = group.children.length;\n      while (ui2.ctxbar.scrollWidth > ui2.ctxbar.clientWidth + 1 && group.children.length > 1 && guard--) {\n        ui2.ctxMoreBtn.hidden = false;\n        ui2.ctxMorePanel.prepend(group.lastElementChild);\n      }\n      const last = group.lastElementChild;\n      if (!ui2.ctxMoreBtn.hidden && last && last.classList.contains(\"nsv2-vdiv\")) ui2.ctxMorePanel.prepend(last);\n    }\n    ui2.ctxMoreBtn.addEventListener(\"click\", () => {\n      if (!ui2.ctxMorePanel.hidden) return hideMorePanel();\n      ui2.ctxMorePanel.hidden = false;\n      ui2.ctxMoreBtn.classList.add(\"is-on\");\n      const btn = ui2.ctxMoreBtn.getBoundingClientRect();\n      const areaR = ui2.area.getBoundingClientRect();\n      ui2.ctxMorePanel.style.top = btn.bottom - areaR.top + 6 + \"px\";\n      ui2.ctxMorePanel.style.left = Math.max(8, Math.min(btn.right - areaR.left - ui2.ctxMorePanel.offsetWidth, areaR.width - ui2.ctxMorePanel.offsetWidth - 8)) + \"px\";\n    });\n    ui2.root.addEventListener(\"pointerdown\", (e24) => {\n      if (ui2.ctxMorePanel.hidden) return;\n      if (e24.target.closest(\".nsv2-ctx-more-panel\") || e24.target.closest(\".nsv2-ctx-more\")) return;\n      hideMorePanel();\n    });\n    editor.on(\"selection\", layoutCtxOverflow);\n    new ResizeObserver(layoutCtxOverflow).observe(ui2.ctxbar);\n    const stepSize = (d2) => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      editor.setTextProp({ fontSize: Math.min(600, Math.max(8, Math.round(t2.fontSize) + d2)) });\n      syncSelection();\n    };\n    ui2.sizeDown.addEventListener(\"click\", () => stepSize(-4));\n    ui2.sizeUp.addEventListener(\"click\", () => stepSize(4));\n    ui2.fmtChip.addEventListener(\"click\", () => openPane(activePane === \"format\" ? null : \"format\"));\n    ui2.spacingChip.addEventListener(\"click\", () => openPane(activePane === \"spacing\" ? null : \"spacing\"));\n    ui2.shapeChip.addEventListener(\"click\", () => {\n      const opening = activePane !== \"shape\";\n      openPane(opening ? \"shape\" : null);\n      if (opening) syncFxPane();\n    });\n    function fillSizeTray(scroll) {\n      const t2 = editor.activeText();\n      const cur = t2 ? Math.round(t2.fontSize) : 120;\n      const row = ui2.sliderRow(\"Size\", 8, 400, 1, cur);\n      const apply = (v2) => {\n        v2 = Math.min(600, Math.max(8, Math.round(v2) || 8));\n        editor.setTextProp({ fontSize: v2 });\n        row.num.value = String(v2);\n        ui2.sizeVal.value = String(v2);\n      };\n      row.range.addEventListener(\"input\", () => apply(row.range.valueAsNumber));\n      row.num.addEventListener(\"change\", () => {\n        apply(parseFloat(row.num.value));\n        row.range.value = row.num.value;\n      });\n      row.wrap.classList.add(\"nsv2-mtray-sliderrow\");\n      scroll.appendChild(row.wrap);\n    }\n    const toggleSizeTray = () => {\n      ui2.sizeVal.blur();\n      if (mtrayKind === \"size\") return closeMtray();\n      if (!editor.activeText()) return;\n      openMtray(\"size\", fillSizeTray);\n    };\n    ui2.sizeWrap.addEventListener(\"pointerdown\", (e24) => {\n      if (!isMobileView() || e24.pointerType === \"touch\") return;\n      e24.preventDefault();\n      toggleSizeTray();\n    });\n    ui2.sizeWrap.addEventListener(\"touchend\", (e24) => {\n      if (!isMobileView()) return;\n      e24.preventDefault();\n      toggleSizeTray();\n    });\n    ui2.sizeVal.addEventListener(\"pointerdown\", (e24) => {\n      if (!isMobileView() || e24.pointerType === \"touch\") return;\n      e24.preventDefault();\n      toggleSizeTray();\n    });\n    ui2.sizeVal.addEventListener(\"touchend\", (e24) => {\n      if (!isMobileView()) return;\n      e24.preventDefault();\n      toggleSizeTray();\n    });\n    ui2.sizeVal.addEventListener(\"change\", () => {\n      const v2 = parseInt(ui2.sizeVal.value, 10);\n      if (!isNaN(v2)) editor.setTextProp({ fontSize: Math.min(600, Math.max(8, v2)) });\n      syncSelection();\n    });\n    ui2.boldBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      const wt2 = parseInt(t2.fontWeight, 10) || (t2.fontWeight === \"bold\" ? 700 : 400);\n      editor.setTextProp({ fontWeight: nearestWeight(t2.fontFamily, wt2 >= 600 ? 400 : 700) });\n      syncSelection();\n    });\n    ui2.italicBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      editor.setTextProp({ fontStyle: t2.fontStyle === \"italic\" ? \"normal\" : \"italic\" });\n      syncSelection();\n    });\n    ui2.underlineBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (t2) {\n        editor.setTextProp({ underline: !t2.underline });\n        syncSelection();\n      }\n    });\n    ui2.strikeBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (t2) {\n        editor.setTextProp({ linethrough: !t2.linethrough });\n        syncSelection();\n      }\n    });\n    ui2.caseBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      if (t2.__caseOrig != null && t2.text === t2.__caseOrig.toUpperCase()) {\n        editor.setTextProp({ text: t2.__caseOrig });\n        t2.__caseOrig = null;\n      } else if (t2.text === t2.text.toUpperCase() && t2.text !== t2.text.toLowerCase()) {\n        editor.setTextProp({ text: t2.text.toLowerCase() });\n        t2.__caseOrig = null;\n      } else {\n        t2.__caseOrig = t2.text;\n        editor.setTextProp({ text: t2.text.toUpperCase() });\n      }\n      syncSelection();\n    });\n    ui2.bulletsBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      editor.setBullets(!t2.__bullets);\n      syncSelection();\n    });\n    const ALIGNS = [\"left\", \"center\", \"right\"];\n    ui2.alignBtn.addEventListener(\"click\", () => {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      const next = ALIGNS[(ALIGNS.indexOf(t2.textAlign) + 1) % ALIGNS.length];\n      editor.setTextProp({ textAlign: next });\n    });\n    ui2.deleteBtn.addEventListener(\"click\", () => editor.deleteActive());\n    const fxDefaultColor = (key, t2) => {\n      const fillHex = cssToSolidHex(t2 && (t2.__baseFill || t2.fill) || \"#0f172a\") || \"#0f172a\";\n      const fillLum = hexLum(fillHex);\n      const boardLum = hexLum(editor._boardBg || \"#ffffff\");\n      const pick2 = (cands, targets) => {\n        let best = cands[0], bs2 = -1;\n        for (const c2 of cands) {\n          const cl = hexLum(c2);\n          const sc2 = Math.min.apply(null, targets.map((x2) => Math.abs(cl - x2)));\n          if (sc2 > bs2) {\n            bs2 = sc2;\n            best = c2;\n          }\n        }\n        return best;\n      };\n      if (key === \"glow\") return \"#019AFF\";\n      if (key === \"hollow\") return pick2([fillHex, \"#0f172a\", \"#ffffff\", \"#8b98ab\"], [boardLum]);\n      if (key === \"background\") return pick2([\"#0f172a\", \"#e8f1f8\", \"#8b98ab\"], [fillLum, boardLum]);\n      const CANDS = {\n        outline: [\"#0f172a\", \"#ffffff\", \"#8b98ab\"],\n        drop: [\"#0f172a\", \"#94a3b8\", \"#e2e8f0\"],\n        splice: [\"#475569\", \"#94a3b8\", \"#e2e8f0\"],\n        echo: [\"#334155\", \"#94a3b8\", \"#dbe4ee\"]\n      };\n      return pick2(CANDS[key] || [\"#0f172a\", \"#ffffff\", \"#8b98ab\"], [fillLum, boardLum]);\n    };\n    let paneBeforeFx = null;\n    function twoStepSheet({ pane, tiles, title, defaultTitle, adjustable }) {\n      let step = \"pick\";\n      const set = (s3) => {\n        step = s3;\n        const mobile = isMobileView();\n        pane.classList.toggle(\"is-pick\", mobile && step === \"pick\");\n        pane.classList.toggle(\"is-adjust\", mobile && step === \"adjust\");\n        const on2 = tiles.querySelector(\".nsv2-fx-tile.is-active .nsv2-fx-label\");\n        title.textContent = mobile && step === \"adjust\" && on2 ? on2.textContent : defaultTitle;\n      };\n      return {\n        reset: () => set(\"pick\"),\n        // Pane sync: keeps badge/title honest; returns whether controls may show.\n        sync(canAdjust) {\n          if (step === \"adjust\" && !canAdjust) step = \"pick\";\n          set(step);\n          return !isMobileView() || step === \"adjust\";\n        },\n        // Tile tap pre-hook: the SELECTED, adjustable tile tapped again \u2192 step 2\n        // (no re-apply \u2014 the caller returns when this is true).\n        tap(tile) {\n          if (!isMobileView() || !tile.classList.contains(\"is-active\") || !adjustable(tile)) return false;\n          set(\"adjust\");\n          return true;\n        },\n        // \u2039 pre-hook: in step 2 go back to the tiles instead of closing.\n        back() {\n          if (!isMobileView() || step !== \"adjust\") return false;\n          set(\"pick\");\n          return true;\n        }\n      };\n    }\n    const fxSteps = twoStepSheet({\n      pane: ui2.effectsPane,\n      tiles: ui2.fxTiles,\n      title: ui2.fxTitle,\n      defaultTitle: \"Effects\",\n      adjustable: (tile) => tile.dataset.fx !== \"none\"\n    });\n    function closeFx() {\n      if (isMobileView()) {\n        if (fxSteps.back()) return syncFxPane();\n        fxSteps.reset();\n        return openPane(null);\n      }\n      openPane(paneBeforeFx === \"effects\" ? null : paneBeforeFx || \"text\");\n    }\n    function syncFxPane() {\n      const t2 = editor.activeText();\n      const active = t2 && t2.__effect || \"none\";\n      ui2.fxTiles.querySelectorAll(\".nsv2-fx-tile\").forEach((tile) => {\n        tile.classList.toggle(\"is-active\", tile.dataset.fx === active);\n      });\n      if (t2 && t2.__effectColor) {\n        if (/^#/.test(t2.__effectColor)) ui2.fxColorInput.value = t2.__effectColor;\n        ui2.fxColorChip.style.background = t2.__effectColor;\n        ui2.fxPopCurrent.style.background = t2.__effectColor;\n      }\n      const fx = t2 && t2.__effect || null;\n      const placed = !!fx && placeControls(ui2.fxTiles, ui2.fxControls, \".nsv2-fx-tile\", '[data-fx=\"' + fx + '\"]');\n      ui2.fxControls.hidden = !placed || !fxSteps.sync(!!fx && fx !== \"none\");\n      ui2.fxColorChip2.hidden = fx !== \"echo\";\n      ui2.fxColorLabel.textContent = fx === \"echo\" ? \"Colors\" : \"Color\";\n      if (fx === \"echo\" && t2 && t2.__fxEcho2) ui2.fxColorChip2.style.background = t2.__fxEcho2;\n      ui2.fxSize.wrap.hidden = ![\"outline\", \"hollow\", \"splice\"].includes(fx);\n      const isDrop = fx === \"drop\";\n      const isBg = fx === \"background\";\n      const hasDirOff = isDrop || fx === \"echo\" || fx === \"splice\";\n      ui2.fxDir.wrap.hidden = ui2.fxOff.wrap.hidden = !hasDirOff;\n      ui2.fxBlur.wrap.hidden = true;\n      ui2.fxTransp.wrap.hidden = true;\n      ui2.fxRound.wrap.hidden = ui2.fxSpread.wrap.hidden = !isBg;\n      const setRow = (row, v2) => {\n        row.range.value = String(v2);\n        row.num.value = String(v2);\n      };\n      setRow(ui2.fxSize, t2 && t2.__effectSize != null ? t2.__effectSize : 12);\n      if (hasDirOff) {\n        setRow(ui2.fxDir, t2.__fxDirection != null ? t2.__fxDirection : 45);\n        setRow(ui2.fxOff, t2.__fxOffset != null ? t2.__fxOffset : 50);\n      }\n      if (isBg) {\n        setRow(ui2.fxRound, t2.__fxRound != null ? t2.__fxRound : 22);\n        setRow(ui2.fxSpread, t2.__fxSpread != null ? t2.__fxSpread : 50);\n      }\n      const sh = t2 && t2.__shape || null;\n      currentShapeKind = sh ? sh.kind : \"none\";\n      ui2.shapeTiles.querySelectorAll(\".nsv2-fx-tile\").forEach((tile) => {\n        tile.classList.toggle(\"is-active\", tile.dataset.shape === currentShapeKind);\n      });\n      const amt = sh ? sh.amount : 0;\n      ui2.fxCurveRange.value = String(amt);\n      ui2.fxCurveVal.value = String(amt);\n      const shapeSheetOpen = !isMobileView() || activePane === \"shape\";\n      ui2.fxCurveRow.hidden = currentShapeKind === \"none\" || !shapeSheetOpen || !placeControls(ui2.shapeTiles, ui2.fxCurveRow, \".nsv2-fx-tile\", '[data-shape=\"' + currentShapeKind + '\"]');\n    }\n    function openFx() {\n      if (activePane !== \"effects\") paneBeforeFx = activePane;\n      openPane(\"effects\");\n      fxSteps.reset();\n      syncFxPane();\n    }\n    ui2.effectsBtn.addEventListener(\"click\", () => activePane === \"effects\" ? closeFx() : openFx());\n    ui2.fxBackBtn.addEventListener(\"click\", closeFx);\n    ui2.fxTiles.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\".nsv2-fx-tile\");\n      if (!tile) return;\n      const key = tile.dataset.fx;\n      if (fxSteps.tap(tile)) {\n        syncFxPane();\n        return;\n      }\n      if (key !== \"none\") {\n        const c2 = fxDefaultColor(key, editor.activeText());\n        ui2.fxColorInput.value = c2;\n        ui2.fxColorChip.style.background = c2;\n        ui2.fxPopCurrent.style.background = c2;\n        editor.applyTextEffect(key, c2);\n        track(\"effect_apply\");\n      } else {\n        editor.applyTextEffect(\"none\");\n      }\n      syncFxPane();\n      syncSelection();\n    });\n    let fxColorTarget = 1;\n    function applyFxColor(c2) {\n      const t2 = editor.activeText();\n      if (!t2 || !t2.__effect) return;\n      if (fxColorTarget === 2) {\n        for (const x2 of editor.activeTexts()) {\n          x2.__fxEcho2 = c2;\n          editor._applyTextEffectTo(x2, \"echo\", x2.__effectColor || void 0);\n        }\n        ui2.fxColorChip2.style.background = c2;\n      } else {\n        editor.applyTextEffect(t2.__effect, c2);\n        ui2.fxColorChip.style.background = c2;\n        if (/^#/.test(c2)) ui2.fxColorInput.value = c2;\n      }\n      ui2.fxPopCurrent.style.background = c2;\n      markFxPopActive(c2);\n    }\n    function markFxPopActive(c2) {\n      const lc2 = (c2 || \"\").toLowerCase();\n      for (const sw of [...ui2.fxDesignGrid.children, ...ui2.fxDefaultGrid.children]) {\n        sw.classList.toggle(\"is-active\", sw.dataset.c.toLowerCase() === lc2);\n      }\n    }\n    function openFxColorPop() {\n      const t2 = editor.activeText();\n      if (!t2 || !t2.__effect) return;\n      const frag = document.createDocumentFragment();\n      for (const c2 of collectDesignColors().slice(0, 14)) {\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\";\n        sw.dataset.c = c2;\n        sw.style.background = c2;\n        frag.appendChild(sw);\n      }\n      ui2.fxDesignGrid.replaceChildren(frag);\n      ui2.fxDesignLabel.hidden = ui2.fxDesignGrid.hidden = !ui2.fxDesignGrid.childElementCount;\n      const cur = fxColorTarget === 2 ? t2.__fxEcho2 : t2.__effectColor;\n      markFxPopActive(cur);\n      if (cur) ui2.fxPopCurrent.style.background = cur;\n      ui2.fxColorPop.hidden = false;\n      const r2 = (fxColorTarget === 2 ? ui2.fxColorChip2 : ui2.fxColorChip).getBoundingClientRect();\n      const p2 = ui2.fxColorPop;\n      const w2 = Math.min(272, window.innerWidth - 16);\n      p2.style.width = w2 + \"px\";\n      p2.style.left = Math.max(8, Math.min(r2.right - w2, window.innerWidth - w2 - 8)) + \"px\";\n      const h2 = p2.offsetHeight;\n      const below = r2.bottom + 8 + h2 <= window.innerHeight - 8;\n      p2.style.top = (below ? r2.bottom + 8 : Math.max(8, r2.top - 8 - h2)) + \"px\";\n      const got = p2.getBoundingClientRect();\n      p2.style.left = parseFloat(p2.style.left) - (got.left - parseFloat(p2.style.left)) + \"px\";\n      p2.style.top = parseFloat(p2.style.top) - (got.top - parseFloat(p2.style.top)) + \"px\";\n    }\n    function closeFxColorPop() {\n      ui2.fxColorPop.hidden = true;\n    }\n    const chipClick = (target2) => (ev) => {\n      const t2 = editor.activeText();\n      if (!t2 || !t2.__effect) return;\n      fxColorTarget = target2;\n      const cur = target2 === 2 ? t2.__fxEcho2 : t2.__effectColor;\n      cpick.open({\n        anchor: ev.currentTarget,\n        value: /^#[0-9a-f]{6}$/i.test(cur || \"\") ? cur : \"#000000\",\n        designColors: collectDesignColors(),\n        palette: DEFAULT_PALETTE,\n        onChange: (hex3) => applyFxColor(hex3)\n      });\n    };\n    ui2.fxColorChip.addEventListener(\"click\", chipClick(1));\n    ui2.fxColorChip2.addEventListener(\"click\", chipClick(2));\n    listen(document, \"pointerdown\", (e24) => {\n      if (ui2.fxColorPop.hidden) return;\n      if (!ui2.fxColorPop.contains(e24.target) && e24.target !== ui2.fxColorChip && e24.target !== ui2.fxColorChip2) closeFxColorPop();\n    }, true);\n    ui2.fxColorPop.addEventListener(\"click\", (e24) => {\n      const sw = e24.target.closest(\".nsv2-swatch[data-c]\");\n      if (sw) applyFxColor(sw.dataset.c);\n    });\n    ui2.panel.addEventListener(\"scroll\", closeFxColorPop, true);\n    listen(window, \"resize\", closeFxColorPop);\n    ui2.fxPopCustom.addEventListener(\"click\", () => ui2.fxColorInput.click());\n    ui2.fxColorInput.addEventListener(\"input\", () => applyFxColor(ui2.fxColorInput.value));\n    ui2.fxPopDropper.addEventListener(\"click\", async () => {\n      try {\n        const r2 = await openEyeDropper();\n        if (r2 && r2.sRGBHex) applyFxColor(r2.sRGBHex);\n      } catch {\n      }\n    });\n    const applyFxSize = (v2) => {\n      const n2 = Math.max(0, Math.min(100, parseInt(v2, 10) || 0));\n      ui2.fxSize.range.value = String(n2);\n      ui2.fxSize.num.value = String(n2);\n      for (const x2 of editor.activeTexts()) {\n        if (x2.__effect) editor._applyTextEffectTo(x2, x2.__effect, x2.__effectColor || void 0, n2);\n      }\n    };\n    ui2.fxSize.range.addEventListener(\"input\", () => applyFxSize(ui2.fxSize.range.value));\n    ui2.fxSize.num.addEventListener(\"change\", () => applyFxSize(ui2.fxSize.num.value));\n    const wireFxParam = (row, prop, lo2, hi2) => {\n      const apply = (v2) => {\n        const n2 = Math.max(lo2, Math.min(hi2, parseInt(v2, 10) || 0));\n        row.range.value = String(n2);\n        row.num.value = String(n2);\n        for (const x2 of editor.activeTexts()) {\n          if (!x2.__effect) continue;\n          x2[prop] = n2;\n          editor._applyTextEffectTo(x2, x2.__effect, x2.__effectColor || void 0);\n        }\n      };\n      row.range.addEventListener(\"input\", () => apply(row.range.value));\n      row.num.addEventListener(\"change\", () => apply(row.num.value));\n    };\n    wireFxParam(ui2.fxDir, \"__fxDirection\", -180, 180);\n    wireFxParam(ui2.fxOff, \"__fxOffset\", 0, 100);\n    wireFxParam(ui2.fxBlur, \"__fxBlur\", 0, 100);\n    wireFxParam(ui2.fxTransp, \"__fxTransparency\", 0, 100);\n    wireFxParam(ui2.fxRound, \"__fxRound\", 0, 100);\n    wireFxParam(ui2.fxSpread, \"__fxSpread\", 0, 100);\n    let currentShapeKind = \"none\";\n    ui2.shapeTiles.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\".nsv2-fx-tile\");\n      if (!tile) return;\n      currentShapeKind = tile.dataset.shape;\n      const cur = parseInt(ui2.fxCurveRange.value, 10) || 0;\n      editor.setShape(currentShapeKind, currentShapeKind === \"none\" ? 0 : cur || 50);\n      if (currentShapeKind !== \"none\") track(\"shape_apply\");\n      syncFxPane();\n    });\n    const applyShapeFromUi = (v2, preview) => {\n      const n2 = Math.max(-100, Math.min(100, parseInt(v2, 10) || 0));\n      ui2.fxCurveRange.value = String(n2);\n      ui2.fxCurveVal.value = String(n2);\n      if (currentShapeKind !== \"none\") editor.setShape(currentShapeKind, n2, !!preview);\n    };\n    ui2.fxCurveRange.addEventListener(\"input\", () => applyShapeFromUi(ui2.fxCurveRange.value, true));\n    ui2.fxCurveRange.addEventListener(\"change\", () => applyShapeFromUi(ui2.fxCurveRange.value));\n    ui2.fxCurveVal.addEventListener(\"change\", () => applyShapeFromUi(ui2.fxCurveVal.value));\n    let bgrObject = null;\n    function liveBgrObject() {\n      if (!bgrObject) return null;\n      const objs = editor.canvas.getObjects();\n      if (objs.includes(bgrObject)) return bgrObject;\n      const want = bgrObject.__bgr && bgrObject.__bgr.imgixUrl;\n      const imgs = objs.filter((o2) => o2.isType && o2.isType(\"image\"));\n      bgrObject = imgs.find((o2) => want && o2.__bgr && o2.__bgr.imgixUrl === want) || (imgs.length === 1 ? imgs[0] : null);\n      return bgrObject;\n    }\n    let paneBeforeBgr = null;\n    function closeBgr() {\n      bgrObject = null;\n      openPane(paneBeforeBgr === \"bgr\" ? null : paneBeforeBgr || null);\n    }\n    function makeTile(key, label) {\n      const tile = document.createElement(\"button\");\n      tile.type = \"button\";\n      tile.className = \"nsv2-fx-tile nsv2-bgr-tile is-loading\";\n      tile.dataset.model = key;\n      tile.innerHTML = '<span class=\"nsv2-fx-box\"><span class=\"nsv2-bgr-spin\"></span><img alt=\"\" hidden>' + (key === \"original\" ? \"\" : '<span class=\"nsv2-fx-adjust\">' + icons.sliders + \"</span>\") + // mobile two-step badge (filters)\n      (key === \"original\" ? \"\" : '<span class=\"nsv2-bgr-note\" hidden></span>') + // Ninja AI: \"Still working\u2026\" / \"Try again\"\n      '</span><span class=\"nsv2-fx-label\">' + label + \"</span>\";\n      return tile;\n    }\n    function markBgrTiles() {\n      const chosen = bgrObject && bgrObject.__bgr && bgrObject.__bgr.model || \"original\";\n      ui2.bgrTiles.querySelectorAll(\".nsv2-bgr-tile\").forEach((tl) => {\n        tl.classList.toggle(\"is-active\", tl.dataset.model === chosen);\n      });\n    }\n    function tileNote(tile, text) {\n      const note = tile.querySelector(\".nsv2-bgr-note\");\n      if (!note || !tile.isConnected) return;\n      note.textContent = text;\n      note.hidden = false;\n    }\n    function tileReady(tile, url) {\n      const note = tile.querySelector(\".nsv2-bgr-note\");\n      if (note) note.hidden = true;\n      const img = tile.querySelector(\"img\");\n      img.src = url;\n      img.hidden = false;\n      tile.classList.remove(\"is-loading\");\n    }\n    function openBgr(im) {\n      if (activePane !== \"bgr\") paneBeforeBgr = activePane;\n      bgrObject = im;\n      openPane(\"bgr\");\n      const bgr = im.__bgr;\n      ui2.bgrTiles.innerHTML = \"\";\n      const original = makeTile(\"original\", \"Original\");\n      tileReady(original, im.__originalSrc);\n      ui2.bgrTiles.appendChild(original);\n      const ninja = ninjaAiEligible(bgr);\n      for (const m of ninja ? NINJA_BGR_MODELS : BGR_MODELS) {\n        if (m.lambda && bgr.isVector) continue;\n        const tile = makeTile(m.key, m.label);\n        ui2.bgrTiles.appendChild(tile);\n        const validated = im.__bgrValidated = im.__bgrValidated || {};\n        const cached = bgr.versions[m.key];\n        const resolve = cached && validated[m.key] === cached ? Promise.resolve(cached) : (cached ? Promise.resolve(cached) : m.ninja ? ninjaAiRemove(bgr.imgixUrl, { fileName: bgr.fileName, onStillWorking: () => tileNote(tile, \"Still working\\u2026\") }).then((cands) => {\n          const c2 = cands[m.rank];\n          if (!c2) throw new Error(\"ninja ai: no rank \" + (m.rank + 1));\n          if (c2.modelId) (bgr.ninjaModels = bgr.ninjaModels || {})[m.key] = c2.modelId;\n          return loadImageWithRetry(c2.url);\n        }).then(rejectEmptyRemoval) : m.lambda ? gramPreview(bgr.imgixUrl).then((url) => loadImageWithRetry(url)).then(rejectEmptyRemoval) : loadImageWithRetry(candidateUrl(bgr.imgixUrl, m, DISPLAY_W, !!im.__trimmed))).then((url) => rejectMisframedRender(url, im.__originalSrc));\n        resolve.then((url) => {\n          bgr.versions[m.key] = url;\n          validated[m.key] = url;\n          if (bgrObject !== im || activePane !== \"bgr\") return;\n          tileReady(tile, url);\n          markBgrTiles();\n        }).catch((err) => {\n          console.warn(\"studio-v2: bgr option failed\", m.key, err);\n          const msg2 = String(err && err.message);\n          if (m.ninja && ninjaAiUnavailable(err)) {\n            if (m.rank === 0 && bgrObject === im && activePane === \"bgr\") openBgr(im);\n            return;\n          }\n          if (m.ninja && err && err.code && !/misframed|empty removal/.test(msg2)) {\n            if (bgrObject === im && activePane === \"bgr\") {\n              tile.classList.remove(\"is-loading\");\n              tile.classList.add(\"is-failed\");\n              tileNote(tile, \"Try again\");\n            }\n            return;\n          }\n          tile.remove();\n          if (/misframed/.test(msg2)) {\n            delete bgr.versions[m.key];\n            if (bgr.model === m.key) bgr.model = null;\n          }\n        });\n      }\n      markBgrTiles();\n    }\n    ui2.removeBgBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im || !im.__bgr || im.__bgr.status !== \"ready\") return;\n      activePane === \"bgr\" ? closeBgr() : openBgr(im);\n    });\n    ui2.bgrBackBtn.addEventListener(\"click\", closeBgr);\n    async function rejectMisframedRender(url, refSrc) {\n      try {\n        if (!refSrc) return url;\n        const load = (src) => new Promise((res, rej) => {\n          const im = new Image();\n          im.crossOrigin = \"anonymous\";\n          im.onload = () => res(im);\n          im.onerror = rej;\n          im.src = src;\n        });\n        const [cand, ref] = await Promise.all([load(url), load(refSrc)]);\n        const S2 = 220;\n        const draw = (im) => {\n          const c2 = document.createElement(\"canvas\");\n          c2.width = S2;\n          c2.height = S2;\n          const x2 = c2.getContext(\"2d\", { willReadFrequently: true });\n          const s3 = Math.min(S2 / (im.naturalWidth || 1), S2 / (im.naturalHeight || 1));\n          const w2 = Math.round((im.naturalWidth || 1) * s3);\n          const h2 = Math.round((im.naturalHeight || 1) * s3);\n          x2.drawImage(im, Math.floor((S2 - w2) / 2), Math.floor((S2 - h2) / 2), w2, h2);\n          return x2.getImageData(0, 0, S2, S2).data;\n        };\n        const a2 = draw(cand);\n        const b2 = draw(ref);\n        let n2 = 0;\n        let match = 0;\n        for (let i2 = 0; i2 < a2.length; i2 += 4) {\n          if (a2[i2 + 3] < 230) continue;\n          n2++;\n          if (b2[i2 + 3] > 40 && Math.abs(a2[i2] - b2[i2]) < 56 && Math.abs(a2[i2 + 1] - b2[i2 + 1]) < 56 && Math.abs(a2[i2 + 2] - b2[i2 + 2]) < 56)\n            match++;\n        }\n        if (n2 < 400) return url;\n        if (match / n2 < 0.8) throw new Error(\"misframed render (grid parity: color)\");\n        const lum = (d2) => {\n          const out = new Float32Array(S2 * S2);\n          for (let i2 = 0; i2 < S2 * S2; i2++) {\n            const o2 = i2 * 4;\n            out[i2] = (0.3 * d2[o2] + 0.59 * d2[o2 + 1] + 0.11 * d2[o2 + 2]) * (d2[o2 + 3] / 255);\n          }\n          return out;\n        };\n        const edges = (d2) => {\n          const l2 = lum(d2);\n          const e24 = new Uint8Array(S2 * S2);\n          for (let y2 = 1; y2 < S2 - 1; y2++)\n            for (let x2 = 1; x2 < S2 - 1; x2++) {\n              const i2 = y2 * S2 + x2;\n              if (Math.abs(l2[i2 + 1] - l2[i2 - 1]) + Math.abs(l2[i2 + S2] - l2[i2 - S2]) > 60) e24[i2] = 1;\n            }\n          return e24;\n        };\n        const ce2 = edges(a2);\n        const reEdge = edges(b2);\n        const reDil = new Uint8Array(S2 * S2);\n        for (let y2 = 0; y2 < S2; y2++)\n          for (let x2 = 0; x2 < S2; x2++) {\n            if (!reEdge[y2 * S2 + x2]) continue;\n            for (let dy = -2; dy <= 2; dy++)\n              for (let dx = -2; dx <= 2; dx++) {\n                const ny = y2 + dy;\n                const nx = x2 + dx;\n                if (ny >= 0 && ny < S2 && nx >= 0 && nx < S2) reDil[ny * S2 + nx] = 1;\n              }\n          }\n        let en2 = 0;\n        let ehit = 0;\n        for (let i2 = 0; i2 < S2 * S2; i2++) if (ce2[i2]) {\n          en2++;\n          if (reDil[i2]) ehit++;\n        }\n        if (en2 >= 300 && ehit / en2 < 0.85) throw new Error(\"misframed render (grid parity: edges)\");\n        return url;\n      } catch (e24) {\n        if (e24 && /misframed/.test(String(e24.message))) throw e24;\n        return url;\n      }\n    }\n    async function rejectEmptyRemoval(url) {\n      try {\n        const img = new Image();\n        img.crossOrigin = \"anonymous\";\n        await new Promise((res, rej) => {\n          img.onload = res;\n          img.onerror = rej;\n          img.src = url + (url.includes(\"?\") ? \"&\" : \"?\") + \"w=160\";\n        });\n        const cv2 = document.createElement(\"canvas\");\n        cv2.width = img.naturalWidth || 1;\n        cv2.height = img.naturalHeight || 1;\n        const cx = cv2.getContext(\"2d\");\n        cx.drawImage(img, 0, 0);\n        const d2 = cx.getImageData(0, 0, cv2.width, cv2.height).data;\n        for (let i2 = 3; i2 < d2.length; i2 += 4) if (d2[i2] > 8) return url;\n        throw new Error(\"empty removal (no ink)\");\n      } catch (e24) {\n        if (e24 && /empty removal/.test(String(e24.message))) throw e24;\n        return url;\n      }\n    }\n    async function applyBgrModel(im, key) {\n      im.__bgr.model = key === \"original\" || !key ? null : key;\n      await withObjBusy(im, () => editor.replaceImageSource(im, composedSrc(im)));\n      editor.shrinkWrapWindow(im);\n      if (im.__bgr.model) {\n        addRecentUpload(im.__bgr.imgixUrl, im.__bgr.fileName, Object.assign({\n          model: im.__bgr.model,\n          url: im.__bgr.versions[im.__bgr.model]\n        }, im.__bgr.ninjaModels && im.__bgr.ninjaModels[im.__bgr.model] ? { modelId: im.__bgr.ninjaModels[im.__bgr.model] } : {}));\n      }\n      editor.canvas.requestRenderAll();\n      refreshChatBase(im);\n    }\n    ui2.bgrTiles.addEventListener(\"click\", async (e24) => {\n      const tile = e24.target.closest(\".nsv2-bgr-tile\");\n      if (!tile || tile.classList.contains(\"is-loading\") || !bgrObject) return;\n      const im = liveBgrObject();\n      if (tile.classList.contains(\"is-failed\")) return void (im && openBgr(im));\n      const key = tile.dataset.model;\n      if (key !== \"original\" && !im.__bgr.versions[key]) return;\n      await applyBgrModel(im, key);\n      markBgrTiles();\n    });\n    function composedSrc(im) {\n      const bgr = im.__bgr;\n      let base;\n      if (bgr && bgr.model) base = bgr.versions[bgr.model];\n      else base = im.__originalSrc;\n      if (im.__superRes && bgr && bgr.status === \"ready\") {\n        if (base === im.__originalSrc && /^(blob|data):/.test(String(base))) base = hostedDisplayUrl(bgr.imgixUrl);\n        if (!/^(blob|data):/.test(String(base))) base = base + (base.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"upscale=true\";\n      }\n      return base;\n    }\n    editor.printSourceFor = (im) => {\n      const display = composedSrc(im);\n      const print = printVariant(display);\n      return print === display ? null : { print, display };\n    };\n    async function normalizeLegacyFilter(im) {\n      await withObjBusy(im, () => editor.replaceImageSource(im, composedSrc(im)));\n    }\n    let filterObject = null;\n    let paneBeforeFilters = null;\n    const filterSteps = twoStepSheet({\n      pane: ui2.filtersPane,\n      tiles: ui2.filterTiles,\n      title: ui2.filtersTitle,\n      defaultTitle: \"Filters\",\n      adjustable: (tile) => tile.dataset.model !== \"original\"\n      // Original has no Intensity\n    });\n    function closeFilters() {\n      filterSteps.reset();\n      filterObject = null;\n      openPane(paneBeforeFilters === \"filters\" ? null : paneBeforeFilters || null);\n    }\n    function markFilterTiles() {\n      const chosen = filterObject && filterObject.__filter || \"original\";\n      ui2.filterTiles.querySelectorAll(\".nsv2-bgr-tile\").forEach((tl) => {\n        tl.classList.toggle(\"is-active\", tl.dataset.model === chosen);\n      });\n    }\n    const ADJ_ROWS = [\n      [\"temp\", \"adjTemp\"],\n      [\"tint\", \"adjTint\"],\n      [\"bri\", \"adjBri\"],\n      [\"con\", \"adjCon\"],\n      [\"hi\", \"adjHi\"],\n      [\"sh\", \"adjSh\"],\n      [\"wh\", \"adjWh\"],\n      [\"bl\", \"adjBl\"],\n      [\"vib\", \"adjVib\"],\n      [\"sat\", \"adjSat\"],\n      [\"hue\", \"adjHue\"],\n      [\"sharp\", \"adjSharp\"],\n      [\"clar\", \"adjClar\"],\n      [\"vig\", \"adjVig\"],\n      [\"blur\", \"adjBlur\"],\n      [\"noise\", \"adjNoise\"],\n      [\"pix\", \"adjPix\"]\n    ];\n    const ADJ_ON_RELEASE = { blur: true, vig: true };\n    function syncAdjustUI(im) {\n      const a2 = im && im.__adjust || {};\n      for (const [key, ref] of ADJ_ROWS) {\n        const v2 = a2[key] || 0;\n        ui2[ref].range.value = String(v2);\n        ui2[ref].num.value = String(v2);\n      }\n      ui2.adjInvert.classList.toggle(\"is-on\", !!a2.invert);\n      ui2.adjInvert.setAttribute(\"aria-pressed\", String(!!a2.invert));\n    }\n    function collectAdjust() {\n      const a2 = { invert: ui2.adjInvert.classList.contains(\"is-on\") };\n      for (const [key, ref] of ADJ_ROWS) a2[key] = Math.round(parseFloat(ui2[ref].range.value) || 0);\n      return a2;\n    }\n    for (const [key, ref] of ADJ_ROWS) {\n      const live = !ADJ_ON_RELEASE[key];\n      ui2[ref].range.addEventListener(\"input\", () => {\n        ui2[ref].num.value = ui2[ref].range.value;\n        if (!live) return;\n        const im = editor.activeImage();\n        if (im) editor.setImageAdjust(im, collectAdjust());\n      });\n      if (!live) {\n        ui2[ref].range.addEventListener(\"change\", () => {\n          const im = editor.activeImage();\n          if (im) editor.setImageAdjust(im, collectAdjust());\n        });\n      }\n      ui2[ref].num.addEventListener(\"change\", () => {\n        ui2[ref].range.value = String(parseFloat(ui2[ref].num.value) || 0);\n        const im = editor.activeImage();\n        if (im) editor.setImageAdjust(im, collectAdjust());\n      });\n    }\n    ui2.adjInvert.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      ui2.adjInvert.classList.toggle(\"is-on\");\n      ui2.adjInvert.setAttribute(\"aria-pressed\", String(ui2.adjInvert.classList.contains(\"is-on\")));\n      editor.setImageAdjust(im, collectAdjust());\n    });\n    ui2.adjReset.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      editor.setImageAdjust(im, null);\n      syncAdjustUI(im);\n    });\n    {\n      const ADJ_PARAMS = [\n        [\"Temperature\", ui2.adjTemp.wrap],\n        [\"Tint\", ui2.adjTint.wrap],\n        [\"Brightness\", ui2.adjBri.wrap],\n        [\"Contrast\", ui2.adjCon.wrap],\n        [\"Highlights\", ui2.adjHi.wrap],\n        [\"Shadows\", ui2.adjSh.wrap],\n        [\"Whites\", ui2.adjWh.wrap],\n        [\"Blacks\", ui2.adjBl.wrap],\n        [\"Vibrance\", ui2.adjVib.wrap],\n        [\"Saturation\", ui2.adjSat.wrap],\n        [\"Hue\", ui2.adjHue.wrap],\n        [\"Sharpness\", ui2.adjSharp.wrap],\n        [\"Clarity\", ui2.adjClar.wrap],\n        [\"Vignette\", ui2.adjVig.wrap],\n        [\"Blur\", ui2.adjBlur.wrap],\n        [\"Noise\", ui2.adjNoise.wrap],\n        [\"Pixelate\", ui2.adjPix.wrap],\n        [\"Invert\", ui2.adjustPane.querySelector(\".nsv2-adj-invert\")]\n      ];\n      const pills = document.createElement(\"div\");\n      pills.className = \"nsv2-adj-pills\";\n      const setActive = (label) => {\n        for (const [lab, wrap] of ADJ_PARAMS) wrap.classList.toggle(\"is-adj-active\", lab === label);\n        for (const p2 of pills.children) p2.classList.toggle(\"is-active\", p2.textContent === label);\n      };\n      for (const [label] of ADJ_PARAMS) {\n        const p2 = document.createElement(\"button\");\n        p2.type = \"button\";\n        p2.className = \"nsv2-fpill\";\n        p2.textContent = label;\n        p2.addEventListener(\"click\", () => setActive(label));\n        pills.appendChild(p2);\n      }\n      ui2.adjustPane.insertBefore(pills, ui2.adjReset);\n      setActive(\"Temperature\");\n    }\n    let paneBeforeAdjust = null;\n    function closeAdjust() {\n      openPane(paneBeforeAdjust === \"adjust\" ? null : paneBeforeAdjust || null);\n    }\n    ui2.adjustBtn.addEventListener(\"click\", () => {\n      if (activePane === \"adjust\") return closeAdjust();\n      const im = editor.activeImage();\n      if (!im) return;\n      paneBeforeAdjust = activePane;\n      syncAdjustUI(im);\n      openPane(\"adjust\");\n    });\n    ui2.adjustBackBtn.addEventListener(\"click\", closeAdjust);\n    ui2.outlineBackBtn.addEventListener(\"click\", () => openPane(null));\n    function syncUpscaleUI(im) {\n      const on2 = !!(im && im.__superRes);\n      ui2.upscaleBtn.classList.toggle(\"is-on\", on2);\n      ui2.upscaleBtn.setAttribute(\"aria-pressed\", String(on2));\n    }\n    ui2.upscaleBtn.addEventListener(\"click\", async () => {\n      const im = editor.activeImage();\n      if (!im || !im.__bgr || im.__bgr.status !== \"ready\") return;\n      im.__superRes = !im.__superRes;\n      refreshChatBase(im);\n      syncUpscaleUI(im);\n      await withObjBusy(im, () => editor.replaceImageSource(im, composedSrc(im)));\n    });\n    function openFilters(im) {\n      if (activePane !== \"filters\") paneBeforeFilters = activePane;\n      filterObject = im;\n      filterSteps.reset();\n      syncFilterStrengthUI(im);\n      syncUpscaleUI(im);\n      openPane(\"filters\");\n      ui2.filterTiles.innerHTML = \"\";\n      const thumb = editor.filterThumbCanvas(im, 320);\n      for (const f2 of FILTERS) {\n        const tile = makeTile(f2.key, f2.label);\n        ui2.filterTiles.appendChild(tile);\n        try {\n          const c2 = f2.params ? applyPresetToCanvas(thumb, f2.params, 100) : thumb;\n          tileReady(tile, c2.toDataURL());\n        } catch (err) {\n          console.warn(\"studio-v2: filter tile failed\", f2.key, err);\n          tile.remove();\n        }\n      }\n      markFilterTiles();\n    }\n    const DEFAULT_PALETTE = [\n      \"#000000\",\n      \"#545454\",\n      \"#737373\",\n      \"#a6a6a6\",\n      \"#d9d9d9\",\n      \"#f2f2f2\",\n      \"#ffffff\",\n      \"#ff0000\",\n      \"#ff3131\",\n      \"#ff5757\",\n      \"#ff66c4\",\n      \"#cb6ce6\",\n      \"#8c52ff\",\n      \"#5e17eb\",\n      \"#00c2cb\",\n      \"#0cc0df\",\n      \"#5ce1e6\",\n      \"#38b6ff\",\n      \"#5271ff\",\n      \"#004aad\",\n      \"#0a1172\",\n      \"#00bf63\",\n      \"#7ed957\",\n      \"#c1ff72\",\n      \"#ffde59\",\n      \"#ffbd59\",\n      \"#ff914d\",\n      \"#ff751f\"\n    ];\n    function paletteSwatch(c2) {\n      const sw = document.createElement(\"button\");\n      sw.type = \"button\";\n      sw.className = \"nsv2-swatch\";\n      sw.dataset.c = c2;\n      sw.style.background = c2;\n      sw.title = c2;\n      return sw;\n    }\n    for (const c2 of DEFAULT_PALETTE) ui2.recolorGrid.appendChild(paletteSwatch(c2));\n    ui2.filtersBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im || !im.__bgr || im.__bgr.status !== \"ready\") return;\n      activePane === \"filters\" ? closeFilters() : openFilters(im);\n    });\n    ui2.filtersBackBtn.addEventListener(\"click\", () => {\n      if (filterSteps.back()) return syncFilterStrengthUI(filterObject);\n      closeFilters();\n    });\n    function placeControls(grid, controls, tileSel, activeSel) {\n      if (isMobileView()) {\n        if (!grid.querySelector(tileSel + activeSel)) return false;\n        if (controls.previousElementSibling !== grid) grid.after(controls);\n        return true;\n      }\n      return placeAfterRow(grid, controls, tileSel, activeSel);\n    }\n    function placeAfterRow(grid, controls, tileSel, activeSel) {\n      const tiles = [...grid.querySelectorAll(tileSel)];\n      const idx = tiles.findIndex((tl) => tl.matches(activeSel));\n      if (idx < 0) return false;\n      const cols = (getComputedStyle(grid).gridTemplateColumns || \"\").split(\" \").length || 1;\n      const rowEnd = tiles[Math.min(tiles.length - 1, Math.floor(idx / cols) * cols + (cols - 1))];\n      if (controls.previousElementSibling !== rowEnd) rowEnd.after(controls);\n      return true;\n    }\n    function syncFilterStrengthUI(im) {\n      const active = im && im.__filter;\n      const placed = !!active && placeControls(ui2.filterTiles, ui2.filterCtrls, \".nsv2-bgr-tile\", '[data-model=\"' + (im && im.__filter) + '\"]');\n      ui2.filterCtrls.hidden = !placed || !filterSteps.sync(!!active);\n      const v2 = im && im.__filterStrength != null ? im.__filterStrength : 100;\n      ui2.filterStrength.range.value = String(v2);\n      ui2.filterStrength.num.value = String(v2);\n      const duo = active === \"duotone\";\n      ui2.filterDuoRow.hidden = !duo;\n      if (duo) {\n        const c2 = im && im.__filterColors || { a: \"#003087\", b: \"#00c5ff\" };\n        ui2.duoShadow.dataset.c = c2.a;\n        ui2.duoShadow.style.background = c2.a;\n        ui2.duoHighlight.dataset.c = c2.b;\n        ui2.duoHighlight.style.background = c2.b;\n      }\n    }\n    function applyDuoColors() {\n      const im = filterObject;\n      if (!im || im.__filter !== \"duotone\") return;\n      im.__filterColors = { a: ui2.duoShadow.dataset.c, b: ui2.duoHighlight.dataset.c };\n      im.__filterCS = true;\n      editor.restageImage(im);\n    }\n    const duoChipClick = (chip) => () => {\n      cpick.open({\n        anchor: chip,\n        value: chip.dataset.c,\n        designColors: collectDesignColors(),\n        palette: DEFAULT_PALETTE,\n        onChange: (hex3) => {\n          chip.dataset.c = hex3;\n          chip.style.background = hex3;\n          applyDuoColors();\n        }\n      });\n    };\n    ui2.duoShadow.addEventListener(\"click\", duoChipClick(ui2.duoShadow));\n    ui2.duoHighlight.addEventListener(\"click\", duoChipClick(ui2.duoHighlight));\n    function applyFilterStrength(v2) {\n      const im = filterObject;\n      if (!im || !im.__filter) return;\n      im.__filterStrength = Math.max(0, Math.min(100, Math.round(v2)));\n      editor.restageImage(im);\n    }\n    ui2.filterStrength.range.addEventListener(\"input\", () => {\n      ui2.filterStrength.num.value = ui2.filterStrength.range.value;\n      applyFilterStrength(parseFloat(ui2.filterStrength.range.value));\n    });\n    ui2.filterStrength.num.addEventListener(\"change\", () => {\n      applyFilterStrength(parseFloat(ui2.filterStrength.num.value) || 100);\n      syncFilterStrengthUI(filterObject);\n    });\n    ui2.filterTiles.addEventListener(\"click\", async (e24) => {\n      const tile = e24.target.closest(\".nsv2-bgr-tile\");\n      if (!tile || tile.classList.contains(\"is-loading\") || !filterObject) return;\n      if (filterSteps.tap(tile)) return syncFilterStrengthUI(filterObject);\n      const im = filterObject;\n      const key = tile.dataset.model;\n      const legacy = im.__filter && !im.__filterCS;\n      im.__filter = key === \"original\" ? null : key;\n      im.__filterStrength = 100;\n      im.__filterCS = true;\n      syncFilterStrengthUI(im);\n      if (legacy) await normalizeLegacyFilter(im);\n      else editor.restageImage(im);\n      markFilterTiles();\n    });\n    let recolorObject = null;\n    function liveRecolorObject() {\n      if (!recolorObject) return null;\n      const objs = editor.canvas.getObjects();\n      if (objs.includes(recolorObject)) return recolorObject;\n      const want = recolorObject.__bgr && recolorObject.__bgr.imgixUrl;\n      const imgs = objs.filter((o2) => o2.isType && o2.isType(\"image\"));\n      recolorObject = imgs.find((o2) => want && o2.__bgr && o2.__bgr.imgixUrl === want) || (imgs.length === 1 ? imgs[0] : null);\n      return recolorObject;\n    }\n    let paneBeforeRecolor = null;\n    let recolorSwatches = [];\n    let recolorSelected = null;\n    function closeRecolor() {\n      recolorObject = null;\n      openPane(paneBeforeRecolor === \"recolor\" ? null : paneBeforeRecolor || null);\n    }\n    function recolorReplFor(im) {\n      return (im.__recolorRepl || []).slice();\n    }\n    function markRecolorUI() {\n      const im = liveRecolorObject();\n      const repl = im ? recolorReplFor(im) : [];\n      ui2.recolorSrcRow.querySelectorAll(\".nsv2-swatch\").forEach((sw) => {\n        sw.classList.toggle(\"is-active\", sw.dataset.c === recolorSelected);\n        try {\n          const r2 = (Array.isArray(repl) ? repl : []).find((x2) => x2 && x2.targetColor === sw.dataset.c) || null;\n          if (r2 && r2.mode === \"transparent\") {\n            sw.classList.add(\"nsv2-swatch--transparent\");\n            sw.style.background = \"\";\n          } else {\n            sw.classList.remove(\"nsv2-swatch--transparent\");\n            sw.style.background = r2 && r2.mode === \"recolor\" && r2.newColor || sw.dataset.c;\n          }\n          sw.classList.toggle(\"is-replaced\", !!r2);\n        } catch (e24) {\n        }\n      });\n      const cur = repl.find((r2) => r2.targetColor === recolorSelected) || null;\n      ui2.recolorToLabel.textContent = recolorSelected ? \"Change \" + nearestColorName(recolorSelected) + \" to\" : \"Change to\";\n      const curHex = cur && cur.mode === \"recolor\" && cur.newColor ? cur.newColor.toLowerCase() : null;\n      for (const grid of [ui2.recolorGrid, ui2.recolorAllGrid, ui2.recolorDesignGrid]) {\n        grid.querySelectorAll(\".nsv2-swatch\").forEach((sw) => {\n          const swHex = (cssToSolidHex(sw.dataset.c || \"\") || \"\").toLowerCase();\n          sw.classList.toggle(\"is-active\", !!curHex && swHex === curHex);\n        });\n      }\n      ui2.recolorTransparent.classList.toggle(\"is-active\", !!cur && cur.mode === \"transparent\");\n      if (cur && cur.mode === \"transparent\") {\n        ui2.recolorCurrent.className = \"nsv2-swatch nsv2-swatch--transparent is-active\";\n        ui2.recolorCurrent.style.background = \"\";\n      } else {\n        ui2.recolorCurrent.className = \"nsv2-swatch is-active\";\n        ui2.recolorCurrent.style.background = curHex || recolorSelected || \"#ffffff\";\n      }\n    }\n    function renderRecolorDesignColors() {\n      const frag = document.createDocumentFragment();\n      for (const c2 of collectDesignColors().slice(0, 14)) {\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\";\n        sw.dataset.c = c2;\n        sw.style.background = c2;\n        frag.appendChild(sw);\n      }\n      ui2.recolorDesignGrid.replaceChildren(frag);\n      ui2.recolorDesignLabel.hidden = ui2.recolorDesignGrid.hidden = !frag.childElementCount && true;\n      ui2.recolorDesignLabel.hidden = ui2.recolorDesignGrid.hidden = ui2.recolorDesignGrid.childElementCount === 0;\n    }\n    function renderRecolorSources() {\n      ui2.recolorSrcRow.innerHTML = \"\";\n      for (const s3 of recolorSwatches) {\n        const sw = document.createElement(\"button\");\n        sw.type = \"button\";\n        sw.className = \"nsv2-swatch\";\n        sw.dataset.c = s3.hex.toLowerCase();\n        sw.style.background = s3.hex;\n        sw.title = nearestColorName(s3.hex) + \" \\xB7 \" + s3.coveragePercent + \"%\";\n        ui2.recolorSrcRow.appendChild(sw);\n      }\n      markRecolorUI();\n    }\n    function openRecolor(im) {\n      if (activePane !== \"recolor\") paneBeforeRecolor = activePane;\n      recolorObject = im;\n      openPane(\"recolor\");\n      recolorSwatches = detectImageColors(editor.recolorBaseElement(im));\n      recolorSelected = recolorSwatches.length ? recolorSwatches[0].hex.toLowerCase() : null;\n      renderRecolorDesignColors();\n      renderRecolorSources();\n    }\n    ui2.colorReplaceBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      activePane === \"recolor\" ? closeRecolor() : openRecolor(im);\n    });\n    ui2.recolorBackBtn.addEventListener(\"click\", closeRecolor);\n    ui2.recolorSrcRow.addEventListener(\"click\", (e24) => {\n      const sw = e24.target.closest(\".nsv2-swatch\");\n      if (!sw) return;\n      recolorSelected = sw.dataset.c;\n      markRecolorUI();\n    });\n    async function applyRecolorChoice(mode2, newColor) {\n      const im = liveRecolorObject();\n      if (!im || !recolorSelected) return;\n      const repl = recolorReplFor(im).filter((r2) => r2.targetColor !== recolorSelected);\n      const cur = recolorReplFor(im).find((r2) => r2.targetColor === recolorSelected);\n      const same = cur && (mode2 === \"transparent\" ? cur.mode === \"transparent\" : cur.mode === \"recolor\" && cur.newColor === newColor);\n      if (!same) {\n        repl.push(\n          mode2 === \"transparent\" ? { targetColor: recolorSelected, mode: \"transparent\" } : { targetColor: recolorSelected, mode: \"recolor\", newColor }\n        );\n      }\n      const palette = recolorSwatches.map((s3) => s3.hex);\n      await withObjBusy(im, async () => editor.setImageRecolor(im, repl, palette));\n      markRecolorUI();\n    }\n    const recolorSwatchClick = (e24) => {\n      const sw = e24.target.closest(\".nsv2-swatch\");\n      if (!sw || !sw.dataset.c) return;\n      const hex3 = cssToSolidHex(sw.dataset.c);\n      if (hex3) applyRecolorChoice(\"recolor\", hex3.toLowerCase());\n    };\n    ui2.recolorGrid.addEventListener(\"click\", recolorSwatchClick);\n    ui2.recolorAllGrid.addEventListener(\"click\", recolorSwatchClick);\n    ui2.recolorDesignGrid.addEventListener(\"click\", recolorSwatchClick);\n    ui2.recolorTransparent.addEventListener(\"click\", () => applyRecolorChoice(\"transparent\"));\n    ui2.recolorCustomBtn.addEventListener(\"click\", () => ui2.recolorCustomInput.click());\n    ui2.recolorSeeAll.addEventListener(\"click\", () => {\n      const showAll = ui2.recolorAllGrid.hidden;\n      if (showAll && !ui2.recolorAllGrid.childElementCount) fillGradedPalette(ui2.recolorAllGrid);\n      ui2.recolorAllGrid.hidden = !showAll;\n      ui2.recolorGrid.hidden = showAll;\n      ui2.recolorSeeAll.textContent = showAll ? \"Show less\" : \"See all\";\n      markRecolorUI();\n    });\n    ui2.recolorDropperBtn.addEventListener(\"click\", async () => {\n      try {\n        const r2 = await openEyeDropper();\n        const hex3 = r2 && r2.sRGBHex ? cssToSolidHex(r2.sRGBHex) : null;\n        if (hex3) applyRecolorChoice(\"recolor\", hex3.toLowerCase());\n      } catch (_2) {\n      }\n    });\n    ui2.recolorCustomInput.addEventListener(\"input\", () => {\n      applyRecolorChoice(\"recolor\", ui2.recolorCustomInput.value.toLowerCase());\n    });\n    ui2.recolorResetBtn.addEventListener(\"click\", async () => {\n      const im = liveRecolorObject();\n      if (!im) return;\n      await withObjBusy(im, async () => editor.setImageRecolor(im, null));\n      markRecolorUI();\n    });\n    function nudgeActive(dx, dy, commit) {\n      const active = editor.canvas.getActiveObject();\n      if (!active || active.__locked) return false;\n      active.set({ left: active.left + dx, top: active.top + dy });\n      active.setCoords();\n      editor.canvas.requestRenderAll();\n      if (commit) editor.canvas.fire(\"object:modified\", { target: active });\n      else ui2.qa.hidden = true;\n      return true;\n    }\n    ui2.nudgeChip.addEventListener(\"click\", () => openPane(activePane === \"nudge\" ? null : \"nudge\"));\n    {\n      const DIR = { up: [0, -1], down: [0, 1], left: [-1, 0], right: [1, 0] };\n      const STEP = 5, HOLD_MS = 90;\n      let holdT = 0, repeatT = 0, moved = false;\n      const stop = () => {\n        clearTimeout(holdT);\n        clearInterval(repeatT);\n        holdT = 0;\n        repeatT = 0;\n        if (moved) {\n          moved = false;\n          const a2 = editor.canvas.getActiveObject();\n          if (a2) editor.canvas.fire(\"object:modified\", { target: a2 });\n        }\n      };\n      Object.entries(ui2.nudgeBtns).forEach(([dir, b2]) => {\n        const [dx, dy] = DIR[dir];\n        b2.addEventListener(\"pointerdown\", (e24) => {\n          e24.preventDefault();\n          stop();\n          nudgeActive(dx * STEP, dy * STEP, true);\n          holdT = setTimeout(() => {\n            repeatT = setInterval(() => {\n              if (nudgeActive(dx * STEP, dy * STEP, false)) moved = true;\n              else stop();\n            }, HOLD_MS);\n          }, 350);\n        });\n        [\"pointerup\", \"pointercancel\", \"pointerleave\"].forEach((ev) => b2.addEventListener(ev, stop));\n        b2.addEventListener(\"contextmenu\", (e24) => e24.preventDefault());\n      });\n    }\n    function hideSpop() {\n      ui2.spop.hidden = true;\n      ui2.spacingBtn.classList.remove(\"is-on\");\n    }\n    function syncSpop() {\n      const t2 = editor.activeText();\n      if (!t2) return;\n      ui2.lineSp.wrap.hidden = t2.textLines.length < 2;\n      const cs2 = Math.round(t2.charSpacing || 0);\n      const lh = Math.round((t2.lineHeight || 1.16) * 100) / 100;\n      ui2.letterSp.range.value = String(cs2);\n      ui2.letterSp.num.value = String(cs2);\n      ui2.lineSp.range.value = String(lh);\n      ui2.lineSp.num.value = String(lh);\n    }\n    ui2.spacingBtn.addEventListener(\"click\", () => {\n      if (!ui2.spop.hidden) return hideSpop();\n      const t2 = editor.activeText();\n      if (!t2) return;\n      syncSpop();\n      ui2.spop.hidden = false;\n      ui2.spacingBtn.classList.add(\"is-on\");\n      const br2 = ui2.spacingBtn.getBoundingClientRect();\n      const ar2 = ui2.area.getBoundingClientRect();\n      const w2 = ui2.spop.offsetWidth;\n      const x2 = Math.min(Math.max(8, br2.left - ar2.left - w2 / 2 + br2.width / 2), ui2.area.clientWidth - w2 - 8);\n      ui2.spop.style.transform = \"translate(\" + x2 + \"px, \" + (br2.bottom - ar2.top + 8) + \"px)\";\n    });\n    const applyLetter = (v2) => {\n      const n2 = Math.min(800, Math.max(-200, parseFloat(v2) || 0));\n      ui2.letterSp.range.value = String(n2);\n      ui2.letterSp.num.value = String(n2);\n      editor.setTextProp({ charSpacing: n2 });\n    };\n    const applyLine = (v2) => {\n      const n2 = Math.min(2.5, Math.max(0.75, parseFloat(v2) || 1.16));\n      ui2.lineSp.range.value = String(n2);\n      ui2.lineSp.num.value = String(Math.round(n2 * 100) / 100);\n      editor.setTextProp({ lineHeight: n2 });\n    };\n    ui2.letterSp.range.addEventListener(\"input\", () => applyLetter(ui2.letterSp.range.value));\n    ui2.letterSp.num.addEventListener(\"change\", () => applyLetter(ui2.letterSp.num.value));\n    ui2.lineSp.range.addEventListener(\"input\", () => applyLine(ui2.lineSp.range.value));\n    ui2.lineSp.num.addEventListener(\"change\", () => applyLine(ui2.lineSp.num.value));\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.spop.hidden && !ui2.spop.contains(e24.target) && !ui2.spacingBtn.contains(e24.target)) hideSpop();\n    });\n    let paneBeforeCrop = null;\n    function endCropUI() {\n      ui2.cropBar.hidden = true;\n      if (activePane === \"crop\") openPane(paneBeforeCrop === \"crop\" ? null : paneBeforeCrop || null);\n    }\n    function markCropRatios(key) {\n      ui2.cropRatios.querySelectorAll(\".nsv2-crop-tile\").forEach((tile) => {\n        tile.classList.toggle(\"is-active\", tile.dataset.ratio === key);\n      });\n    }\n    let cropRatioKey = \"free\";\n    function cropRatioNumber() {\n      if (cropRatioKey === \"free\") return null;\n      if (cropRatioKey === \"orig\") {\n        const im = editor._crop && editor._crop.img;\n        const el2 = im && (im._originalElement || im._element);\n        return el2 ? (el2.naturalWidth || el2.width) / (el2.naturalHeight || el2.height) : null;\n      }\n      const [rw, rh] = cropRatioKey.split(\":\").map(Number);\n      return rw / rh;\n    }\n    ui2.cropBtn.addEventListener(\"click\", () => {\n      if (editor._crop) return cancelCrop();\n      if (!editor.startCrop()) return;\n      ui2.cropBar.hidden = false;\n      paneBeforeCrop = activePane;\n      openPane(\"crop\");\n      cropRatioKey = \"free\";\n      markCropRatios(\"free\");\n      ui2.cropRotate.range.value = \"0\";\n      ui2.cropRotate.num.value = \"0\";\n      ui2.cropScale.range.value = \"100\";\n      ui2.cropScale.num.value = \"100\";\n    });\n    ui2.cropApplyBtn.addEventListener(\"click\", () => {\n      editor.applyCrop();\n      endCropUI();\n      syncSelection();\n    });\n    const cancelCrop = () => {\n      editor.cancelCrop();\n      endCropUI();\n    };\n    ui2.cropCancelBtn.addEventListener(\"click\", cancelCrop);\n    ui2.cropBackBtn.addEventListener(\"click\", cancelCrop);\n    ui2.revertBtn.addEventListener(\"click\", async () => {\n      const im = editor.activeImage();\n      if (!im) return;\n      await withObjBusy(im, async () => {\n        const first = im.__aiEdit && im.__aiEdit.originalUploadReference;\n        if (first) {\n          const orig = im.__aiEdit.originalUpload || {};\n          const fileName = orig.fileName || decodeURIComponent(String(first).split(\"/\").pop().split(\"?\")[0] || \"image.png\");\n          im.__bgr = { status: \"ready\", imgixUrl: first, fileName, isVector: !!orig.isVector, versions: {}, model: null };\n          im.__originalSrc = hostedDisplayUrl(first);\n          im.__fileName = fileName;\n          im.__aiEdit = null;\n        }\n        await editor.revertImage();\n      });\n      syncSelection();\n      showToast(\"Reverted\", { label: \"Undo\", onAction: () => {\n        editor.undo();\n        syncSelection();\n      } });\n    });\n    ui2.beforeSheetDone = () => {\n      if (activePane !== \"crop\" || !editor._crop) return true;\n      editor.applyCrop();\n      endCropUI();\n      syncSelection();\n      return false;\n    };\n    ui2.beforeSheetClose = () => {\n      if (activePane !== \"crop\" || !editor._crop) return true;\n      cancelCrop();\n      return false;\n    };\n    ui2.root.addEventListener(\n      \"pointerdown\",\n      (e24) => {\n        if (!editor._crop) return;\n        const t2 = e24.target;\n        if (t2.closest(\".nsv2-cropbar\")) return;\n        if (t2.closest('[data-pane=\"crop\"]')) return;\n        if (t2.closest(\".nsv2-sheet-done\")) return;\n        if (ui2.cropBtn.contains(t2)) return;\n        if (t2.closest(\".nsv2-topbar\") || t2.closest(\".nsv2-rail\") || t2.closest(\".nsv2-panel\") || t2.closest(\".nsv2-ctxbar\") || t2.closest(\".nsv2-ctx-more-panel\")) {\n          cancelCrop();\n        }\n      },\n      true\n    );\n    ui2.cropRatios.addEventListener(\"click\", (e24) => {\n      const tile = e24.target.closest(\".nsv2-crop-tile\");\n      if (!tile || !editor._crop) return;\n      const key = tile.dataset.ratio;\n      cropRatioKey = key;\n      markCropRatios(key);\n      const { img, rect } = editor._crop;\n      if (key === \"free\") {\n        editor._crop.ratioLocked = false;\n        cv.requestRenderAll();\n        return;\n      }\n      let ratio;\n      if (key === \"orig\") {\n        const el2 = img._originalElement || img._element;\n        ratio = (el2.naturalWidth || el2.width) / (el2.naturalHeight || el2.height);\n      } else {\n        const [rw, rh] = key.split(\":\").map(Number);\n        ratio = rw / rh;\n      }\n      const maxW = img.getScaledWidth();\n      const maxH = img.getScaledHeight();\n      let w2 = maxW, h2 = w2 / ratio;\n      if (h2 > maxH) {\n        h2 = maxH;\n        w2 = h2 * ratio;\n      }\n      rect.set({ scaleX: 1, scaleY: 1, width: w2, height: h2, left: img.left, top: img.top });\n      editor._crop.ratioLocked = true;\n      rect.setCoords();\n      editor._syncCropClip();\n      cv.requestRenderAll();\n    });\n    const applyCropRotate = (v2) => {\n      const n2 = Math.min(180, Math.max(-180, parseFloat(v2) || 0));\n      ui2.cropRotate.range.value = String(n2);\n      ui2.cropRotate.num.value = String(Math.round(n2 * 10) / 10);\n      editor.setCropRotation(n2);\n    };\n    const applyCropScale = (v2) => {\n      const n2 = Math.min(300, Math.max(10, parseFloat(v2) || 100));\n      ui2.cropScale.range.value = String(n2);\n      ui2.cropScale.num.value = String(Math.round(n2));\n      editor.setCropScale(n2);\n    };\n    ui2.cropScale.range.addEventListener(\"input\", () => applyCropScale(ui2.cropScale.range.value));\n    ui2.cropScale.num.addEventListener(\"change\", () => applyCropScale(ui2.cropScale.num.value));\n    ui2.cropRotate.range.addEventListener(\"input\", () => applyCropRotate(ui2.cropRotate.range.value));\n    ui2.cropRotate.num.addEventListener(\"change\", () => applyCropRotate(ui2.cropRotate.num.value));\n    ui2.cropRotateReset.addEventListener(\"click\", () => applyCropRotate(0));\n    function hideRpop() {\n      ui2.rpop.hidden = true;\n    }\n    const radiusTarget = () => {\n      const sh = activeElShape();\n      if (sh) return { type: \"shape\", obj: sh };\n      const im = editor.activeImage();\n      return im ? { type: \"image\", obj: im } : null;\n    };\n    const applyRadius = (v2) => {\n      const n2 = Math.min(100, Math.max(0, parseInt(v2, 10) || 0));\n      ui2.radiusSp.range.value = String(n2);\n      ui2.radiusSp.num.value = String(n2);\n      const t2 = radiusTarget();\n      if (!t2) return;\n      if (t2.type === \"shape\") editor.setElRound(t2.obj, n2);\n      else editor.setImageRadius(n2);\n    };\n    function openRadiusUI(btn) {\n      const t2 = radiusTarget();\n      if (!t2) return;\n      const cur = t2.type === \"shape\" ? Math.round(t2.obj.__el.round || 0) : t2.obj.__radius || 0;\n      if (isMobileView()) {\n        if (mtrayKind === \"radius\") return closeMtray();\n        openMtray(\"radius\", (scroll) => {\n          const row = ui2.sliderRow(\"Corner radius\", 0, 100, 1, cur);\n          row.range.addEventListener(\"input\", () => {\n            applyRadius(row.range.value);\n            row.num.value = row.range.value;\n          });\n          row.num.addEventListener(\"change\", () => {\n            applyRadius(row.num.value);\n            row.range.value = row.num.value;\n          });\n          row.wrap.classList.add(\"nsv2-mtray-sliderrow\");\n          scroll.appendChild(row.wrap);\n        });\n        return;\n      }\n      if (!ui2.rpop.hidden) return hideRpop();\n      ui2.radiusSp.range.value = String(cur);\n      ui2.radiusSp.num.value = String(cur);\n      ui2.rpop.hidden = false;\n      placeSpop(ui2.rpop, btn);\n    }\n    ui2.radiusBtn.addEventListener(\"click\", () => openRadiusUI(ui2.radiusBtn));\n    ui2.radiusSp.range.addEventListener(\"input\", () => applyRadius(ui2.radiusSp.range.value));\n    ui2.radiusSp.num.addEventListener(\"change\", () => applyRadius(ui2.radiusSp.num.value));\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.rpop.hidden && !ui2.rpop.contains(e24.target) && !ui2.radiusBtn.contains(e24.target) && !ui2.elRoundBtn.contains(e24.target)) hideRpop();\n    });\n    const cpick = buildColorPicker(ui2.root);\n    ui2.root.addEventListener(\"click\", (e24) => {\n      const input = e24.target.closest('input[type=\"color\"]');\n      if (!input) return;\n      e24.preventDefault();\n      cpick.open({\n        anchor: input,\n        value: input.value,\n        designColors: collectDesignColors(),\n        palette: DEFAULT_PALETTE,\n        // custom-+ buttons already sit INSIDE a swatch view \u2014 go straight to\n        // the spectrum; everything else (gradient stops etc.) opens the Canva\n        // swatch-first view (Owen 9-09).\n        view: input.dataset.spectrumDirect ? \"spectrum\" : \"swatches\",\n        // Color|Gradient tabs (Owen 9-09 video): text-color custom picks carry\n        // the pane's gradient section into the sheet (move-on-open pattern)\n        gradient: colorTarget === \"text\" && input === ui2.customColorInput ? { nodes: [ui2.gradsLabel, ui2.gradGrid, ui2.gradEdit] } : null,\n        onChange: (hex3) => {\n          input.value = hex3;\n          input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n        }\n      });\n    });\n    ui2.panel.addEventListener(\"scroll\", () => cpick.close(), true);\n    listen(window, \"resize\", () => cpick.close());\n    let chat = null;\n    let chatParked = false;\n    function chatBaseFor(im) {\n      let b2 = composedSrc(im);\n      if (/^(blob|data):/.test(String(b2))) b2 = hostedDisplayUrl(im.__bgr.imgixUrl);\n      return b2;\n    }\n    function refreshChatBase(im) {\n      if (!chat || chat.mode !== \"edit\" || chat.im !== im || chat.turns.length) return;\n      const b2 = chatBaseFor(im);\n      if (b2 === chat.baseUrl) return;\n      chat.baseUrl = b2;\n      renderThread();\n    }\n    const createThread = { turns: [], versions: [], sel: -1 };\n    let aiTick = null;\n    cleanups.push(() => {\n      if (aiTick) {\n        clearInterval(aiTick);\n        aiTick = null;\n      }\n    });\n    let aiBusyT0 = 0;\n    function paintHint() {\n      const hint = ui2.aiThread.querySelector(\".nsv2-ai-busy-hint\");\n      if (hint && chat) {\n        const t2 = chat.turns[chat.turns.length - 1];\n        hint.textContent = (chat.mode === \"create\" && !(t2 && t2.refine) ? \"Usually 15\\u201325 seconds\" : \"Usually 10\\u201320 seconds\") + \" \\xB7 \" + Math.round((Date.now() - aiBusyT0) / 1e3) + \"s\";\n      }\n    }\n    const msg = (cls, text) => {\n      const d2 = document.createElement(\"div\");\n      d2.className = \"nsv2-ai-msg \" + cls + \" w3_bg\";\n      if (text != null) d2.textContent = text;\n      return d2;\n    };\n    const bot = (text) => {\n      const d2 = msg(\"nsv2-ai-bot\");\n      d2.innerHTML = '<span class=\"nsv2-ai-avatar\">' + icons.ai + '</span><span class=\"nsv2-ai-bot-txt\"></span>';\n      d2.querySelector(\".nsv2-ai-bot-txt\").textContent = text;\n      return d2;\n    };\n    const you = (text) => {\n      const d2 = msg(\"nsv2-ai-you\");\n      const b2 = document.createElement(\"span\");\n      b2.className = \"nsv2-ai-you-bubble\";\n      b2.textContent = text;\n      d2.appendChild(b2);\n      return d2;\n    };\n    const skeleton = (n2) => {\n      const g2 = msg(\"nsv2-ai-grid is-\" + n2 + \" is-skel\");\n      for (let i2 = 0; i2 < n2; i2++) g2.appendChild(Object.assign(document.createElement(\"div\"), { className: \"nsv2-ai-tile is-skeleton\" }));\n      return g2;\n    };\n    function aiPill(label, onTap) {\n      const b2 = document.createElement(\"button\");\n      b2.type = \"button\";\n      b2.className = \"nsv2-ai-pill\";\n      b2.textContent = label;\n      b2.addEventListener(\"click\", onTap);\n      return b2;\n    }\n    function aiTile(entry, picked, plain) {\n      const b2 = document.createElement(\"button\");\n      b2.type = \"button\";\n      b2.className = \"nsv2-ai-tile\" + (picked ? \" is-picked\" : \"\") + (plain ? \" is-plain\" : \"\");\n      b2.dataset.url = entry.url;\n      b2.dataset.name = entry.fileName || \"ai-image.png\";\n      if (entry.prompt) b2.title = entry.prompt;\n      const img = document.createElement(\"img\");\n      img.src = entry.thumbnailUrl || entry.url;\n      img.loading = \"lazy\";\n      img.addEventListener(\"load\", () => {\n        const th = ui2.aiThread;\n        if (th.scrollHeight - th.scrollTop - th.clientHeight < 160) th.scrollTop = th.scrollHeight;\n      });\n      b2.appendChild(img);\n      return b2;\n    }\n    function renderThread() {\n      if (!chat) return;\n      const th = ui2.aiThread;\n      th.innerHTML = \"\";\n      if (chat.mode === \"edit\") {\n        th.appendChild(msg(\"nsv2-pane-label nsv2-ai-cap\", \"Original\"));\n        const card = msg(\"nsv2-ai-img-card is-loading\" + (chat.versions.length ? \" is-pickable\" : \"\") + (chat.versions.length && chat.sel < 0 ? \" is-sel\" : \"\"));\n        const img = document.createElement(\"img\");\n        img.alt = \"\";\n        img.onload = img.onerror = () => card.classList.remove(\"is-loading\");\n        img.src = chat.baseUrl;\n        if (img.complete && img.naturalWidth) card.classList.remove(\"is-loading\");\n        card.appendChild(img);\n        if (chat.versions.length) {\n          card.title = \"Start the next edit from the original\";\n          card.addEventListener(\"click\", () => select(-1));\n        }\n        th.appendChild(card);\n        if (!chat.turns.length) {\n          th.appendChild(bot(\"What should change? Tell me, or start with a quick edit.\"));\n          const pills = msg(\"nsv2-ai-pills\");\n          AI_EDIT_CHIPS.slice(0, 4).forEach((c2) => pills.appendChild(aiPill(c2, () => send(c2))));\n          th.appendChild(pills);\n        }\n      } else {\n        th.appendChild(bot(\"What should we create? Describe it, or start with one of these.\"));\n        if (!chat.turns.length) {\n          const pills = msg(\"nsv2-ai-pills\");\n          AI_CREATE_STARTERS.forEach((c2) => pills.appendChild(aiPill(c2, () => send(c2))));\n          th.appendChild(pills);\n          const hist = aiHistory();\n          if (hist.length) {\n            th.appendChild(msg(\"nsv2-pane-label\", \"Recently generated\"));\n            const g2 = msg(\"nsv2-ai-recent\");\n            hist.slice(0, 12).forEach((r2) => {\n              const t2 = aiTile(r2, false, true);\n              t2.addEventListener(\"click\", () => adoptResult(r2));\n              g2.appendChild(t2);\n            });\n            th.appendChild(g2);\n          }\n        }\n      }\n      chat.turns.forEach((t2, ti2) => {\n        th.appendChild(you(t2.prompt));\n        if (t2.status === \"busy\") {\n          th.appendChild(skeleton(chat.mode === \"create\" && !t2.refine ? AI_BATCH : 1));\n          const b2 = msg(\"nsv2-ai-busy\");\n          b2.innerHTML = '<span class=\"nsv2-ai-busy-txt\"></span><span class=\"nsv2-ai-busy-hint\"></span>';\n          b2.querySelector(\".nsv2-ai-busy-txt\").textContent = chat.mode === \"create\" && !t2.refine ? \"Creating your options\\u2026\" : \"Working on your edit\\u2026\";\n          th.appendChild(b2);\n        } else if (t2.status === \"stopped\") {\n          th.appendChild(bot(\"Stopped.\"));\n        } else if (t2.status === \"error\") {\n          const e24 = msg(\"nsv2-ai-error\", t2.error + \" \");\n          const again = document.createElement(\"button\");\n          again.type = \"button\";\n          again.className = \"nsv2-ai-link\";\n          again.textContent = \"Try again\";\n          again.addEventListener(\"click\", () => send(t2.prompt, { fresh: t2.fresh }));\n          e24.appendChild(again);\n          th.appendChild(e24);\n        } else {\n          th.appendChild(bot(chat.mode === \"create\" ? t2.refine ? \"Here\\u2019s the refined version.\" : \"Here are a few options. Tap one to pick it.\" : \"Here\\u2019s your edit.\"));\n          const g2 = msg(\"nsv2-ai-grid is-\" + Math.min(t2.results.length, 4));\n          const v2 = t2.ver != null ? chat.versions[t2.ver] : null;\n          const selected = t2.ver != null && t2.ver === chat.sel;\n          t2.results.forEach((r2) => {\n            const tile = aiTile({ ...r2, prompt: t2.prompt }, selected && !!v2 && v2.url === r2.url, chat.mode === \"create\" && !t2.refine);\n            tile.addEventListener(\"click\", () => pick(t2, r2));\n            g2.appendChild(tile);\n          });\n          th.appendChild(g2);\n          const row = msg(\"nsv2-ai-actions\");\n          if (selected) {\n            const use = document.createElement(\"button\");\n            use.type = \"button\";\n            use.className = \"nsv2-cta nsv2-ai-use\";\n            use.innerHTML = \"<span></span>\";\n            use.querySelector(\"span\").textContent = chat.mode === \"edit\" ? \"Apply to image\" : \"Add to canvas\";\n            use.addEventListener(\"click\", useVersion);\n            row.appendChild(use);\n          }\n          if (row.childNodes.length) th.appendChild(row);\n        }\n      });\n      paintHint();\n      renderBasis();\n      const reduce = window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n      th.scrollTo({ top: th.scrollHeight, behavior: reduce ? \"auto\" : \"smooth\" });\n    }\n    function setPlaceholder() {\n      if (!chat) return;\n      ui2.aiInput.placeholder = chat.mode === \"edit\" ? \"Describe what you want to change\" : chat.sel >= 0 ? \"Describe a change\\u2026\" : \"Describe the art you want\";\n    }\n    function renderBasis() {\n      if (!chat) return;\n      const el2 = ui2.aiBasis;\n      el2.innerHTML = \"\";\n      const n2 = chat.versions.length;\n      const show = chat.mode === \"edit\" ? n2 > 0 : chat.sel >= 0;\n      el2.hidden = !show;\n      setPlaceholder();\n      if (!show) return;\n      const v2 = chat.sel >= 0 ? chat.versions[chat.sel] : null;\n      const thumb = document.createElement(\"img\");\n      thumb.alt = \"\";\n      thumb.src = v2 ? v2.url : chat.baseUrl;\n      const txt = document.createElement(\"div\");\n      txt.className = \"nsv2-ai-ctx-txt\";\n      txt.innerHTML = \"<b></b><span></span>\";\n      txt.querySelector(\"b\").textContent = chat.mode === \"edit\" ? v2 ? \"Editing this version\" : \"Editing the original\" : \"Refining this one\";\n      txt.querySelector(\"span\").textContent = chat.mode === \"edit\" ? \"Type a change below, or apply it as is.\" : \"Type a change below, or add it to the canvas as is.\";\n      el2.append(thumb, txt);\n      if (chat.mode === \"create\") {\n        const x2 = document.createElement(\"button\");\n        x2.type = \"button\";\n        x2.className = \"nsv2-icon-btn nsv2-ai-ctx-x\";\n        x2.title = \"New idea\";\n        x2.setAttribute(\"aria-label\", \"New idea \\u2014 describe something else\");\n        x2.innerHTML = icons.close;\n        x2.addEventListener(\"click\", () => select(-1));\n        el2.appendChild(x2);\n      }\n    }\n    async function hostForEdit(v2) {\n      if (v2.hosted) return v2.hosted;\n      const blob = await (await fetch(v2.url)).blob();\n      const safe = (v2.name || \"ai-image.png\").replace(/[^A-Za-z0-9._-]+/g, \"_\");\n      const up = await uploadFileToS3(new File([blob], safe, { type: blob.type || \"image/png\" }));\n      v2.hosted = hostedDisplayUrl(up.imgixUrl);\n      return v2.hosted;\n    }\n    function select(sel) {\n      if (!chat || chat.busy) return;\n      chat.sel = sel;\n      renderThread();\n    }\n    function pick(turn, r2) {\n      if (!chat || chat.busy || turn.ver == null) return;\n      const v2 = chat.versions[turn.ver];\n      v2.url = r2.url;\n      v2.name = r2.fileName || v2.name;\n      chat.sel = turn.ver;\n      renderThread();\n    }\n    function adoptResult(r2) {\n      if (!chat || chat.busy) return;\n      chat.turns.push({ prompt: r2.prompt || \"Recently generated\", status: \"done\", results: [r2], ver: chat.versions.length });\n      chat.versions.push({ url: r2.url, name: r2.fileName, prompts: [r2.prompt || \"\"], turn: chat.turns.length - 1 });\n      chat.sel = chat.versions.length - 1;\n      renderThread();\n    }\n    function syncSend() {\n      ui2.aiSend.classList.toggle(\"is-ready\", !!(ui2.aiInput.value || \"\").trim());\n      ui2.aiInput.style.height = \"auto\";\n      ui2.aiInput.style.height = Math.min(ui2.aiInput.scrollHeight, 132) + \"px\";\n    }\n    function setBusy(on2) {\n      clearInterval(aiTick);\n      aiTick = null;\n      ui2.aiSend.hidden = on2;\n      ui2.aiStop.hidden = !on2;\n      ui2.aiThread.classList.toggle(\"is-busy\", on2);\n      if (on2) {\n        aiBusyT0 = Date.now();\n        paintHint();\n        aiTick = setInterval(paintHint, 1e3);\n      }\n    }\n    async function send(promptRaw, opts2 = {}) {\n      if (!chat || chat.busy) return;\n      const prompt = String(promptRaw != null ? promptRaw : ui2.aiInput.value || \"\").trim();\n      if (!prompt) return;\n      if (!canUseAi()) return askDialog(\"Daily AI limit reached \\u2014 try again tomorrow.\", { cancel: null });\n      ui2.aiInput.value = \"\";\n      syncSend();\n      ui2.aiFootErr.hidden = true;\n      const turn = { prompt, status: \"busy\", results: [], ver: null, fresh: !!opts2.fresh };\n      chat.turns.push(turn);\n      chat.busy = true;\n      chat.ctrl = new AbortController();\n      setBusy(true);\n      renderThread();\n      const live = () => chat && chat.turns.includes(turn);\n      try {\n        if (chat.mode === \"edit\") {\n          const from = chat.sel;\n          const source = from < 0 ? chat.baseUrl : chat.versions[from].url;\n          const lineage = from < 0 ? [] : chat.versions[from].prompts.slice();\n          const url = await aiEdit(source, prompt, lineage, chat.ctrl.signal);\n          consumeAi();\n          await waitForRender(url);\n          if (!live()) return;\n          turn.results = [{ url }];\n          chat.versions.push({ url, prompts: lineage.concat(prompt), turn: chat.turns.indexOf(turn) });\n          turn.ver = chat.versions.length - 1;\n          chat.sel = turn.ver;\n        } else if (chat.sel >= 0 && !opts2.fresh) {\n          turn.refine = true;\n          renderThread();\n          const from = chat.versions[chat.sel];\n          const source = await hostForEdit(from);\n          if (!live()) return;\n          const lineage = (from.chain || []).slice();\n          const url = await aiEdit(source, prompt, lineage, chat.ctrl.signal);\n          consumeAi();\n          await waitForRender(url);\n          if (!live()) return;\n          turn.results = [{ url, fileName: \"ai-refine.png\" }];\n          chat.versions.push({ url, hosted: url, name: \"ai-refine-\" + Date.now() + \".png\", prompts: [prompt], chain: lineage.concat(prompt), turn: chat.turns.indexOf(turn) });\n          turn.ver = chat.versions.length - 1;\n          chat.sel = turn.ver;\n        } else {\n          const items = await aiCreate(prompt, { fresh: !!opts2.fresh, signal: chat.ctrl.signal });\n          consumeAi();\n          if (!live()) return;\n          const shown = new Set(chat.turns.flatMap((t2) => t2.results.map((r2) => r2.url)));\n          const fresh = items.filter((it2) => !shown.has(it2.url));\n          if (!fresh.length) {\n            turn.status = \"error\";\n            turn.error = opts2.fresh ? \"No new options came back \\u2014 add a detail and try again.\" : \"Nothing came back \\u2014 try rewording it.\";\n            return;\n          }\n          turn.results = fresh;\n          aiHistoryAdd(fresh, prompt);\n          chat.versions.push({ url: fresh[0].url, name: fresh[0].fileName, prompts: [prompt], turn: chat.turns.indexOf(turn) });\n          turn.ver = chat.versions.length - 1;\n          chat.sel = turn.ver;\n        }\n        turn.status = \"done\";\n      } catch (err) {\n        if (!live()) return;\n        if (chat.ctrl && chat.ctrl.signal.aborted) {\n          turn.status = \"stopped\";\n        } else {\n          console.error(\"studio-v2: ai chat failed\", err);\n          turn.status = \"error\";\n          turn.error = err && err.aiRefused ? \"The AI couldn\\u2019t do that one \\u2014 try rewording it.\" : \"That didn\\u2019t come back \\u2014 try again.\";\n        }\n      } finally {\n        if (chat) {\n          chat.busy = false;\n          chat.ctrl = null;\n          setBusy(false);\n          renderThread();\n          if (chatParked && turn.status !== \"stopped\") {\n            const ok = turn.status === \"done\";\n            showToast(ok ? chat.mode === \"edit\" ? \"Your AI edit is ready\" : \"Your AI results are ready\" : \"That AI run didn\\u2019t come back\", { label: \"View\", onAction: () => unparkChat() }, ok ? 8e3 : 6e3);\n          }\n        }\n      }\n    }\n    async function applyEditVersion(im, resultUrl, count) {\n      const ctrl = new AbortController();\n      const timer = setTimeout(() => ctrl.abort(), 45e3);\n      let blob;\n      try {\n        blob = await (await fetch(resultUrl, { signal: ctrl.signal })).blob();\n      } finally {\n        clearTimeout(timer);\n      }\n      const base = (im.__bgr && im.__bgr.fileName || \"design\").replace(/\\.[a-z0-9]+$/i, \"\").replace(/[^A-Za-z0-9_-]+/g, \"_\").slice(-40);\n      const up = await uploadBlobAs(base + \"-ai-edit____image_\" + Date.now() + \"_\" + Math.floor(Math.random() * 1e4) + \".png\", blob, \"image/png\");\n      const prevOrig = im.__aiEdit && im.__aiEdit.originalUploadReference || im.__bgr && im.__bgr.imgixUrl || \"\";\n      const prevUp = im.__aiEdit && im.__aiEdit.originalUpload || (im.__bgr ? { fileName: im.__bgr.fileName || \"\", isVector: !!im.__bgr.isVector } : null);\n      await loadImageWithRetry(hostedDisplayUrl(up.imgixUrl));\n      await withObjBusy(im, async () => {\n        im.__bgr = { status: \"ready\", imgixUrl: up.imgixUrl, fileName: up.fileName, isVector: false, versions: {}, model: null };\n        im.__originalSrc = hostedDisplayUrl(up.imgixUrl);\n        im.__fileName = up.fileName;\n        im.__aiEdit = { count, originalUploadReference: prevOrig, originalUpload: prevUp };\n        im.__superRes = false;\n        await editor.adoptNewSource(im, composedSrc(im));\n      });\n      addRecentUpload(up.imgixUrl, up.fileName);\n      if (opts.customerId) {\n        try {\n          const crc = await crc32Blob(blob);\n          await registerUpload(opts.customerId, { url: up.imgixUrl, fileName: up.fileName, crc, variantTitle: \"\" });\n        } catch (err) {\n          console.error(\"studio-v2: ai edit saveData failed\", err);\n        }\n      }\n      syncSelection();\n    }\n    function placingPill(text) {\n      const p2 = document.createElement(\"div\");\n      p2.className = \"nsv2-placing-pill\";\n      p2.textContent = text;\n      ui2.area.appendChild(p2);\n      return p2;\n    }\n    async function placeAiResult(url, name) {\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      const pill = placingPill(\"Adding image to your canvas\\u2026\");\n      try {\n        const blob = await (await fetch(url)).blob();\n        const safe = (name || \"ai-image.png\").replace(/[^A-Za-z0-9._-]+/g, \"_\");\n        const up = await uploadFileToS3(new File([blob], safe, { type: blob.type || \"image/png\" }));\n        const img = await editor.addImageFromUrl(hostedDisplayUrl(up.imgixUrl), safe);\n        img.__bgr = { status: \"ready\", imgixUrl: up.imgixUrl, fileName: up.fileName, isVector: false, versions: {}, model: null };\n        img.__aiCreated = true;\n        addRecentUpload(up.imgixUrl, safe);\n        trackAdd(\"ai_create\");\n        syncSelection();\n        autoRemoveBg(img);\n      } catch (err) {\n        console.error(\"studio-v2: ai place failed\", err);\n        pill.classList.add(\"is-error\");\n        pill.textContent = \"Couldn\\u2019t add that image \\u2014 try again.\";\n        setTimeout(() => pill.remove(), 2600);\n        throw err;\n      } finally {\n        if (!pill.classList.contains(\"is-error\")) pill.remove();\n      }\n    }\n    async function autoRemoveBg(im) {\n      try {\n        let m = ninjaAiEligible(im.__bgr) ? NINJA_BGR_MODELS[0] : BGR_MODELS[0];\n        const url = await (m.ninja ? ninjaAiRemove(im.__bgr.imgixUrl, { fileName: im.__bgr.fileName }).then((c2) => {\n          if (c2[0].modelId) (im.__bgr.ninjaModels = im.__bgr.ninjaModels || {}).n1 = c2[0].modelId;\n          return loadImageWithRetry(c2[0].url);\n        }, (err) => {\n          if (!ninjaAiUnavailable(err)) throw err;\n          m = BGR_MODELS[0];\n          return loadImageWithRetry(candidateUrl(im.__bgr.imgixUrl, m, DISPLAY_W));\n        }) : loadImageWithRetry(candidateUrl(im.__bgr.imgixUrl, m, DISPLAY_W))).then(rejectEmptyRemoval).then((u2) => rejectMisframedRender(u2, im.__originalSrc));\n        if (!editor.canvas.getObjects().includes(im)) return;\n        im.__bgr.versions[m.key] = url;\n        (im.__bgrValidated = im.__bgrValidated || {})[m.key] = url;\n        await applyBgrModel(im, m.key);\n        syncSelection();\n        showToast(\"Background removed\", {\n          label: \"Keep background\",\n          onAction: async () => {\n            if (!editor.canvas.getObjects().includes(im)) return;\n            await applyBgrModel(im, \"original\");\n            syncSelection();\n          }\n        });\n      } catch (err) {\n        console.warn(\"studio-v2: ai auto bg-remove skipped\", err);\n      }\n    }\n    async function useVersion() {\n      if (!chat || chat.busy || chat.sel < 0) return;\n      const v2 = chat.versions[chat.sel];\n      const mode2 = chat.mode;\n      const im = chat.im;\n      chat.busy = true;\n      setBusy(true);\n      ui2.aiThread.classList.add(\"is-using\");\n      ui2.aiFootErr.hidden = true;\n      const useBtn = ui2.aiThread.querySelector(\".nsv2-ai-use\");\n      const useLabel = useBtn && useBtn.querySelector(\"span\");\n      const idleText = useLabel ? useLabel.textContent : \"\";\n      if (useBtn) {\n        useBtn.classList.add(\"is-busy\");\n        useBtn.setAttribute(\"aria-busy\", \"true\");\n        if (useLabel) useLabel.textContent = mode2 === \"edit\" ? \"Applying\\u2026\" : \"Adding\\u2026\";\n      }\n      try {\n        if (mode2 === \"edit\") {\n          if (!editor.canvas.getObjects().includes(im)) throw new Error(\"image gone\");\n          await applyEditVersion(im, v2.url, v2.prompts.length);\n          chat.applied = true;\n        } else {\n          await placeAiResult(v2.url, v2.name);\n        }\n        closeChat(true);\n        if (mode2 === \"edit\") showToast(\"Edit applied\", { label: \"Undo\", onAction: () => {\n          editor.undo();\n          syncSelection();\n        } });\n        else if (ui2.toast.hidden) showToast(\"Added to your canvas\", { label: \"Undo\", onAction: () => {\n          editor.undo();\n          syncSelection();\n        } });\n      } catch (err) {\n        console.error(\"studio-v2: ai use failed\", err);\n        if (chat) {\n          ui2.aiFootErr.textContent = mode2 === \"edit\" ? \"Couldn\\u2019t apply that version \\u2014 please try again.\" : \"Couldn\\u2019t add that image \\u2014 please try again.\";\n          ui2.aiFootErr.hidden = false;\n        }\n      } finally {\n        if (chat) {\n          chat.busy = false;\n          setBusy(false);\n        }\n        ui2.aiThread.classList.remove(\"is-using\");\n        if (useBtn) {\n          useBtn.classList.remove(\"is-busy\");\n          useBtn.removeAttribute(\"aria-busy\");\n          if (useLabel) useLabel.textContent = idleText;\n        }\n      }\n    }\n    const aiSheetHead = makeSheetHead({ title: \"Create with AI\", onClose: () => closeChat(false), onDone: () => closeChat(false) });\n    ui2.aiDrawer.insertBefore(aiSheetHead.el, ui2.aiDrawer.firstChild);\n    cleanups.push(attachSwipeDismiss(aiSheetHead.handle, ui2.aiDrawer, () => closeChat(false), \"translate\"));\n    let aiHideT = 0;\n    function openChat(mode2, im) {\n      if (!toolAllowed(\"ai\")) return;\n      if (chat && chatParked && chat.mode === mode2 && (mode2 === \"create\" || chat.im === im)) {\n        unparkChat();\n        return;\n      }\n      if (chat && chat.busy) return;\n      if (chat) closeChat(true);\n      closePanel();\n      if (mode2 === \"edit\") {\n        const baseUrl = chatBaseFor(im);\n        chat = { mode: mode2, im, baseUrl, turns: [], versions: [], sel: -1, busy: false, ctrl: null, applied: false };\n        ui2.aiTitle.textContent = \"Edit with AI\";\n      } else {\n        chat = { mode: \"create\", im: null, baseUrl: null, turns: createThread.turns, versions: createThread.versions, sel: createThread.sel, busy: false, ctrl: null, applied: false };\n        ui2.aiTitle.textContent = \"Create with AI\";\n      }\n      aiSheetHead.set({ title: ui2.aiTitle.textContent });\n      ui2.aiInput.value = \"\";\n      syncSend();\n      ui2.aiFootErr.hidden = true;\n      setBusy(false);\n      clearTimeout(aiHideT);\n      ui2.aiDrawer.classList.remove(\"is-closing\");\n      ui2.aiDrawer.hidden = false;\n      ui2.root.classList.add(\"is-ai-open\");\n      ui2.toolBtns.ai.classList.toggle(\"is-active\", mode2 === \"create\");\n      renderThread();\n      if (!isMobileView()) ui2.aiInput.focus();\n    }\n    async function closeChat(force) {\n      if (!chat) return;\n      const unsaved = chat.mode === \"edit\" && chat.versions.length && !chat.applied;\n      if (!force && unsaved && !await askDialog(\"Leave the AI Editor? Your edit hasn\\u2019t been applied.\", { ok: \"Leave\", cancel: \"Stay\" })) return;\n      if (!chat) return;\n      if (chat.ctrl) chat.ctrl.abort();\n      if (chat.mode === \"create\") {\n        createThread.turns = chat.turns;\n        createThread.versions = chat.versions;\n        createThread.sel = chat.sel;\n      }\n      chat = null;\n      chatParked = false;\n      clearInterval(aiTick);\n      aiTick = null;\n      hideAiDrawer();\n      ui2.root.classList.remove(\"is-ai-open\");\n      ui2.toolBtns.ai.classList.remove(\"is-active\");\n    }\n    function parkChat() {\n      if (!chat || chatParked) return;\n      chatParked = true;\n      hideAiDrawer();\n      ui2.root.classList.remove(\"is-ai-open\");\n      ui2.toolBtns.ai.classList.remove(\"is-active\");\n    }\n    function unparkChat() {\n      if (!chat || !chatParked) return false;\n      chatParked = false;\n      closePanel();\n      clearTimeout(aiHideT);\n      ui2.aiDrawer.classList.remove(\"is-closing\");\n      ui2.aiDrawer.hidden = false;\n      ui2.root.classList.add(\"is-ai-open\");\n      ui2.toolBtns.ai.classList.toggle(\"is-active\", chat.mode === \"create\");\n      return true;\n    }\n    function hideAiDrawer() {\n      clearTimeout(aiHideT);\n      if (!isSheetLayout()) {\n        ui2.aiDrawer.classList.remove(\"is-closing\");\n        ui2.aiDrawer.hidden = true;\n        return;\n      }\n      ui2.aiDrawer.classList.add(\"is-closing\");\n      const done = () => {\n        clearTimeout(aiHideT);\n        ui2.aiDrawer.removeEventListener(\"animationend\", done);\n        if (ui2.aiDrawer.classList.contains(\"is-closing\")) {\n          ui2.aiDrawer.classList.remove(\"is-closing\");\n          ui2.aiDrawer.hidden = true;\n        }\n      };\n      ui2.aiDrawer.addEventListener(\"animationend\", done);\n      aiHideT = setTimeout(done, 420);\n    }\n    ui2.toolBtns.ai.addEventListener(\"click\", () => chat && chat.mode === \"create\" && !chatParked ? closeChat(false) : openChat(\"create\"));\n    ui2.aiEditBtn.addEventListener(\"click\", () => {\n      const im = editor.activeImage();\n      if (!im || !im.__bgr || im.__bgr.status !== \"ready\") return;\n      openChat(\"edit\", im);\n    });\n    ui2.qaAi.addEventListener(\"click\", () => ui2.aiEditBtn.click());\n    ui2.aiClose.addEventListener(\"click\", () => closeChat(false));\n    ui2.aiSend.addEventListener(\"click\", () => send());\n    ui2.aiStop.addEventListener(\"click\", () => {\n      if (chat && chat.ctrl) chat.ctrl.abort();\n    });\n    ui2.aiInput.addEventListener(\"input\", syncSend);\n    ui2.aiInput.addEventListener(\"keydown\", (e24) => {\n      if (e24.key === \"Enter\" && !e24.shiftKey && !isMobileView()) {\n        e24.preventDefault();\n        send();\n      }\n    });\n    ui2.aiDrawer.addEventListener(\"keydown\", (e24) => {\n      if (e24.key === \"Escape\" && chat && !chatParked) {\n        e24.preventDefault();\n        closeChat(false);\n      }\n    });\n    const cv = editor.canvas;\n    let pasteAtPoint = null;\n    function hideMenu() {\n      ui2.menu.hidden = true;\n    }\n    const menuHead = makeSheetHead({ title: \"More\", onClose: () => hideMenu(), done: false });\n    ui2.menu.insertBefore(menuHead.el, ui2.menu.firstChild);\n    function openMenu(x2, y2) {\n      const mAct = cv.getActiveObject();\n      const hasSel = !!mAct;\n      ui2.menuPaste.disabled = !editor.hasClipboard();\n      ui2.menuCopy.hidden = !hasSel;\n      ui2.menuDup.hidden = !hasSel;\n      ui2.menuDel.hidden = !hasSel;\n      ui2.menuGroup.hidden = !editor.activeSelection();\n      ui2.menuUngroup.hidden = !(mAct && mAct.isType && mAct.isType(\"group\") && !mAct.__el);\n      ui2.alignWrap.hidden = !hasSel;\n      ui2.alignWrap.classList.remove(\"is-open\");\n      ui2.menu.querySelectorAll('[data-act^=\"layer:\"], [data-act^=\"flip:\"], [data-act=\"lock\"]').forEach((b2) => {\n        b2.hidden = !hasSel;\n      });\n      const lockA = editor.canvas.getActiveObject();\n      ui2.menuLock.querySelector(\".nsv2-menu-lab > span\").textContent = lockA && lockA.__locked ? \"Unlock\" : \"Lock\";\n      ui2.menu.querySelectorAll(\":scope > .nsv2-menu-div\").forEach((d2) => {\n        d2.hidden = !hasSel;\n      });\n      ui2.menu.hidden = false;\n      const mw = ui2.menu.offsetWidth, mh = ui2.menu.offsetHeight;\n      const px = Math.max(8, Math.min(Math.max(8, x2), ui2.area.clientWidth - mw - 8));\n      const py = Math.max(8, Math.min(Math.max(8, y2), ui2.area.clientHeight - mh - 8));\n      ui2.menu.style.transform = \"translate(\" + px + \"px, \" + py + \"px)\";\n    }\n    const alignSub = ui2.menu.querySelector(\".nsv2-menu-sub\");\n    const alignSubMenu = alignSub && alignSub.querySelector(\".nsv2-menu--sub\");\n    if (alignSubMenu) {\n      alignSub.querySelector(\":scope > .nsv2-menu-item\").addEventListener(\"click\", () => {\n        if (!isMobileView()) return;\n        const open = alignSub.classList.toggle(\"is-open\");\n        if (open) alignSubMenu.scrollIntoView({ block: \"nearest\" });\n      });\n      alignSub.addEventListener(\"mouseenter\", () => {\n        if (isMobileView()) return;\n        alignSubMenu.style.left = \"\";\n        alignSubMenu.style.right = \"\";\n        alignSubMenu.style.top = \"\";\n        const a2 = ui2.area.getBoundingClientRect();\n        const row = alignSub.getBoundingClientRect();\n        const mw = alignSubMenu.offsetWidth, mh = alignSubMenu.offsetHeight;\n        if (row.right - 6 + mw > a2.right - 8) {\n          alignSubMenu.style.left = \"auto\";\n          alignSubMenu.style.right = \"calc(100% - 6px)\";\n        }\n        let top = -6;\n        const over = row.top + top + mh - (a2.bottom - 8);\n        if (over > 0) top -= over;\n        if (row.top + top < a2.top + 8) top = a2.top + 8 - row.top;\n        alignSubMenu.style.top = Math.round(top) + \"px\";\n      });\n    }\n    function positionQa() {\n      const o2 = cv.getActiveObject();\n      if (!o2 || editor._crop || editor._dragChrome || editor._gesture) {\n        ui2.qa.hidden = true;\n        if (editor._crop || editor._dragChrome) hideMenu();\n        return;\n      }\n      ui2.qa.hidden = false;\n      ui2.qa.classList.toggle(\"is-locked\", !!o2.__locked);\n      ui2.qaAi.hidden = !(o2.isType && o2.isType(\"image\") && !o2.__el) || !!o2.__base;\n      ui2.qaDup.hidden = !!o2.__base;\n      ui2.qaDel.hidden = !!o2.__base;\n      const single = editor._boardObjects().length < 2;\n      ui2.qaUp.hidden = single;\n      ui2.qaDown.hidden = single;\n      const br2 = o2.getBoundingRect();\n      const z2 = cv.getZoom();\n      const vpt = cv.viewportTransform;\n      const cRect = cv.upperCanvasEl.getBoundingClientRect();\n      const aRect = ui2.area.getBoundingClientRect();\n      const offX = cRect.left - aRect.left;\n      const offY = cRect.top - aRect.top;\n      const cx = offX + (br2.left + br2.width / 2) * z2 + vpt[4];\n      const R3 = 18;\n      const pad = o2.padding || 0;\n      let topBound = offY + br2.top * z2 + vpt[5] - pad;\n      let bottomBound = offY + (br2.top + br2.height) * z2 + vpt[5] + pad;\n      const mtrCtl = o2.controls && o2.controls.mtr;\n      if (mtrCtl) {\n        const knobHome = bottomBound + 31 + 15;\n        const areaH = ui2.area.clientHeight;\n        const wasFlipped = !!mtrCtl.__nsFlipped;\n        const flip = wasFlipped ? knobHome > areaH - 40 : knobHome > areaH - 8;\n        if (flip !== wasFlipped) {\n          mtrCtl.__nsFlipped = flip;\n          mtrCtl.y = flip ? -0.5 : 0.5;\n          mtrCtl.offsetY = flip ? -(31 + ui2.qa.offsetHeight + 16) : 31;\n          o2.setCoords();\n          cv.requestRenderAll();\n        }\n      }\n      const flipped = !!(mtrCtl && mtrCtl.__nsFlipped);\n      const mtr = o2.oCoords && o2.oCoords.mtr;\n      if (mtr && !flipped) {\n        topBound = Math.min(topBound, offY + mtr.y - R3);\n        bottomBound = Math.max(bottomBound, offY + mtr.y + R3);\n      }\n      const w2 = ui2.qa.offsetWidth, h2 = ui2.qa.offsetHeight;\n      const x2 = Math.min(Math.max(8, cx - w2 / 2), ui2.area.clientWidth - w2 - 8);\n      const minY = 56;\n      const maxY = ui2.area.clientHeight - h2 - 8;\n      const GAP = 16;\n      let y2 = topBound - h2 - GAP;\n      if (y2 < minY) y2 = bottomBound + GAP;\n      if (y2 > maxY) y2 = Math.max(minY, topBound - h2 - GAP);\n      y2 = Math.min(Math.max(minY, y2), maxY);\n      ui2.qa.style.transform = \"translate(\" + x2 + \"px, \" + y2 + \"px)\";\n    }\n    editor.canvas.on(\"before:render\", () => {\n      editor.canvas.__mtrScreen = null;\n    });\n    editor.canvas.on(\"after:render\", () => {\n      const m = editor.canvas.__mtrScreen;\n      if (!m) {\n        if (!ui2.rotKnob.hidden) ui2.rotKnob.hidden = true;\n        return;\n      }\n      const cr2 = editor.canvas.upperCanvasEl.getBoundingClientRect();\n      const ar2 = ui2.area.getBoundingClientRect();\n      ui2.rotKnob.style.left = cr2.left - ar2.left + m.left + \"px\";\n      ui2.rotKnob.style.top = cr2.top - ar2.top + m.top + \"px\";\n      ui2.rotKnob.classList.toggle(\"is-hot\", !!m.hot);\n      if (ui2.rotKnob.hidden) ui2.rotKnob.hidden = false;\n    });\n    editor.on(\"selection\", positionQa);\n    editor.on(\"zoom\", positionQa);\n    editor.on(\"gesture\", (on2) => {\n      ui2.root.classList.toggle(\"is-gesturing\", !!on2);\n      if (on2) hideMenu();\n      positionQa();\n    });\n    editor.on(\"history\", positionQa);\n    cv.on(\"object:moving\", () => {\n      ui2.qa.hidden = true;\n      hideMenu();\n    });\n    [\"object:scaling\", \"object:rotating\", \"object:resizing\"].forEach(\n      (ev) => cv.on(ev, () => {\n        ui2.qa.classList.add(\"is-quiet\");\n        hideMenu();\n      })\n    );\n    cv.on(\"object:modified\", () => {\n      ui2.qa.classList.remove(\"is-quiet\");\n      positionQa();\n    });\n    cv.on(\"mouse:up\", () => positionQa());\n    ui2.qaDown.addEventListener(\"click\", () => editor.layerDown());\n    ui2.qaUp.addEventListener(\"click\", () => editor.layerUp());\n    ui2.qaDup.addEventListener(\"click\", () => editor.duplicateActive());\n    ui2.qaDel.addEventListener(\"click\", () => editor.deleteActive());\n    ui2.qaMore.addEventListener(\"click\", () => {\n      if (!ui2.menu.hidden) return hideMenu();\n      const qr2 = ui2.qa.getBoundingClientRect();\n      const ar2 = ui2.area.getBoundingClientRect();\n      openMenu(qr2.right - ar2.left - 220, qr2.bottom - ar2.top + 8);\n    });\n    cv.on(\"contextmenu\", (opt) => {\n      const e24 = opt.e;\n      if (editor._crop) return;\n      const pt2 = cv.getScenePoint ? cv.getScenePoint(e24) : null;\n      let target2 = opt.target;\n      if (!target2 && pt2) {\n        target2 = [...cv.getObjects()].reverse().find((o2) => !o2.excludeFromExport && o2.containsPoint && o2.containsPoint(pt2));\n      }\n      const ar2 = ui2.area.getBoundingClientRect();\n      if (!target2) {\n        cv.discardActiveObject();\n        cv.requestRenderAll();\n        syncSelection();\n        if (!editor.hasClipboard()) {\n          hideMenu();\n          return;\n        }\n        pasteAtPoint = pt2;\n        openMenu(e24.clientX - ar2.left + 4, e24.clientY - ar2.top + 4);\n        return;\n      }\n      pasteAtPoint = null;\n      cv.setActiveObject(target2);\n      cv.requestRenderAll();\n      syncSelection();\n      positionQa();\n      openMenu(e24.clientX - ar2.left + 4, e24.clientY - ar2.top + 4);\n    });\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.menu.hidden && !ui2.menu.contains(e24.target) && !ui2.qaMore.contains(e24.target)) hideMenu();\n    });\n    ui2.qaLock.addEventListener(\"click\", () => {\n      const a2 = editor.canvas.getActiveObject();\n      if (a2) editor.setLocked(a2, false);\n    });\n    ui2.menu.addEventListener(\"click\", async (e24) => {\n      const item = e24.target.closest(\".nsv2-menu-item\");\n      if (!item || !item.dataset.act) return;\n      const act = item.dataset.act;\n      if (act === \"copy\") await editor.copyActive();\n      else if (act === \"paste\") {\n        await editor.paste(pasteAtPoint);\n        pasteAtPoint = null;\n      } else if (act === \"duplicate\") await editor.duplicateActive();\n      else if (act === \"group\") editor.groupSelection();\n      else if (act === \"ungroup\") editor.ungroupSelection();\n      else if (act === \"delete\") editor.deleteActive();\n      else if (act === \"layer:front\") editor.layerToFront();\n      else if (act === \"layer:up\") editor.layerUp();\n      else if (act === \"layer:down\") editor.layerDown();\n      else if (act === \"layer:back\") editor.layerToBack();\n      else if (act === \"lock\") {\n        const a2 = editor.canvas.getActiveObject();\n        if (a2) editor.setLocked(a2, !a2.__locked);\n      } else if (act === \"flip:h\") editor.flip(\"h\");\n      else if (act === \"flip:v\") editor.flip(\"v\");\n      else if (act.startsWith(\"align:\")) editor.alignToPage(act.slice(6));\n      hideMenu();\n    });\n    const onKeydown = (e24) => {\n      if (!ui2.root.isConnected) return;\n      const fresh = editor.canvas.getActiveObject();\n      if (fresh && fresh.isEditing && fresh.__freshEdit && (e24.metaKey || e24.ctrlKey) && !e24.shiftKey && e24.key.toLowerCase() === \"z\") {\n        e24.preventDefault();\n        try {\n          fresh.exitEditing();\n        } catch (err) {\n        }\n        editor.undo();\n        syncSelection();\n        return;\n      }\n      const tag = (e24.target.tagName || \"\").toLowerCase();\n      if (tag === \"input\" || tag === \"textarea\" || e24.target.isContentEditable) return;\n      const active = editor.canvas.getActiveObject();\n      if (active && active.isEditing) return;\n      if (editor._crop) {\n        if (e24.key === \"Enter\") {\n          e24.preventDefault();\n          editor.applyCrop();\n          endCropUI();\n          syncSelection();\n        } else if (e24.key === \"Escape\") {\n          e24.preventDefault();\n          editor.cancelCrop();\n          endCropUI();\n        }\n        return;\n      }\n      const mod = e24.metaKey || e24.ctrlKey;\n      if (mod && e24.key.toLowerCase() === \"z\") {\n        e24.preventDefault();\n        if (e24.shiftKey) editor.redo();\n        else editor.undo();\n        syncSelection();\n      } else if (mod && e24.key.toLowerCase() === \"y\") {\n        e24.preventDefault();\n        editor.redo();\n        syncSelection();\n      } else if (mod && e24.key.toLowerCase() === \"a\") {\n        e24.preventDefault();\n        editor.selectAll();\n        syncSelection();\n      } else if (mod && e24.key.toLowerCase() === \"c\" && active) {\n        e24.preventDefault();\n        editor.copyActive();\n      } else if (mod && e24.key.toLowerCase() === \"x\" && active) {\n        e24.preventDefault();\n        editor.copyActive();\n        editor.deleteActive();\n        syncSelection();\n      } else if (mod && e24.key.toLowerCase() === \"v\" && editor.hasClipboard()) {\n        e24.preventDefault();\n        editor.paste();\n      } else if (mod && e24.key.toLowerCase() === \"d\" && active) {\n        e24.preventDefault();\n        editor.duplicateActive();\n      } else if (mod && e24.key.toLowerCase() === \"g\" && active) {\n        e24.preventDefault();\n        if (e24.shiftKey) editor.ungroupSelection();\n        else editor.groupSelection();\n        syncSelection();\n      } else if (mod && (e24.key === \"=\" || e24.key === \"+\")) {\n        e24.preventDefault();\n        zoomAnimateKeepCenter(editor.userZoom * 1.2);\n      } else if (mod && e24.key === \"-\") {\n        e24.preventDefault();\n        zoomAnimateKeepCenter(editor.userZoom / 1.2);\n      } else if (mod && e24.key === \"0\") {\n        e24.preventDefault();\n        zoomAnimateKeepCenter(1);\n      } else if (mod && e24.key === \"1\") {\n        e24.preventDefault();\n        zoomAnimateKeepCenter(1 / editor.fitScale);\n      } else if (e24.key === \" \" && !e24.repeat) {\n        e24.preventDefault();\n        beginPanMode();\n      } else if (active && (e24.key === \"]\" || e24.key === \"}\")) {\n        e24.preventDefault();\n        e24.shiftKey ? editor.layerToFront() : editor.layerUp();\n      } else if (active && (e24.key === \"[\" || e24.key === \"{\")) {\n        e24.preventDefault();\n        e24.shiftKey ? editor.layerToBack() : editor.layerDown();\n      } else if (active && e24.shiftKey && !mod && e24.key.toLowerCase() === \"h\") {\n        e24.preventDefault();\n        editor.flip(\"h\");\n      } else if (active && e24.shiftKey && !mod && e24.key.toLowerCase() === \"v\") {\n        e24.preventDefault();\n        editor.flip(\"v\");\n      } else if (e24.key === \"Delete\" || e24.key === \"Backspace\") {\n        if (active) {\n          e24.preventDefault();\n          editor.deleteActive();\n        }\n      } else if (e24.key.startsWith(\"Arrow\")) {\n        if (!active || active.__locked) return;\n        e24.preventDefault();\n        const step = e24.shiftKey ? 10 : 1;\n        nudgeActive(\n          e24.key === \"ArrowLeft\" ? -step : e24.key === \"ArrowRight\" ? step : 0,\n          e24.key === \"ArrowUp\" ? -step : e24.key === \"ArrowDown\" ? step : 0,\n          true\n        );\n      } else if (e24.key === \"Escape\") {\n        const tr2 = editor.canvas._currentTransform;\n        if (tr2 && tr2.target && tr2.original) {\n          e24.preventDefault();\n          const o2 = tr2.original;\n          tr2.target.set({\n            left: o2.left,\n            top: o2.top,\n            scaleX: o2.scaleX,\n            scaleY: o2.scaleY,\n            angle: o2.angle,\n            skewX: o2.skewX,\n            skewY: o2.skewY,\n            flipX: o2.flipX,\n            flipY: o2.flipY\n          });\n          tr2.target.setCoords();\n          if (tr2.target.__shape) editor._shapeApply(tr2.target);\n          editor.canvas._currentTransform = null;\n          editor._snapGuides = null;\n          editor._snapTargets = null;\n          if (editor._restoreDragChrome) editor._restoreDragChrome();\n          editor.canvas.requestRenderAll();\n          return;\n        }\n        editor.canvas.discardActiveObject();\n        editor.canvas.requestRenderAll();\n        hideMenu();\n      }\n    };\n    let panHeld = false, panDrag = null;\n    function beginPanMode() {\n      if (panHeld) return;\n      panHeld = true;\n      ui2.root.classList.add(\"is-panning\");\n      editor.canvas.skipTargetFind = true;\n    }\n    function endPanMode() {\n      if (!panHeld) return;\n      panHeld = false;\n      panDrag = null;\n      ui2.root.classList.remove(\"is-panning\", \"is-pan-drag\");\n      editor.canvas.skipTargetFind = false;\n      editor.canvas.requestRenderAll();\n    }\n    const onKeyup = (e24) => {\n      if (e24.key === \" \") endPanMode();\n    };\n    const onPanDown = (e24) => {\n      if (!panHeld || e24.button !== 0) return;\n      e24.preventDefault();\n      e24.stopPropagation();\n      const s3 = ui2.boardScroll;\n      panDrag = { x: e24.clientX, y: e24.clientY, sl: s3.scrollLeft, st: s3.scrollTop };\n      ui2.root.classList.add(\"is-pan-drag\");\n    };\n    const onPanMove = (e24) => {\n      if (!panDrag) return;\n      e24.preventDefault();\n      editor.beginGesture();\n      const s3 = ui2.boardScroll;\n      s3.scrollLeft = panDrag.sl - (e24.clientX - panDrag.x);\n      s3.scrollTop = panDrag.st - (e24.clientY - panDrag.y);\n      editor.canvas.calcOffset();\n    };\n    const onPanUp = () => {\n      if (panDrag) {\n        panDrag = null;\n        ui2.root.classList.remove(\"is-pan-drag\");\n      }\n    };\n    ui2.boardScroll.addEventListener(\"pointerdown\", onPanDown, true);\n    listen(window, \"pointermove\", onPanMove, true);\n    listen(window, \"pointerup\", onPanUp, true);\n    listen(window, \"blur\", endPanMode);\n    const onPaste = (e24) => {\n      if (!ui2.root.isConnected || !e24.clipboardData) return;\n      const act = editor.canvas.getActiveObject();\n      const files = [];\n      for (const f2 of Array.from(e24.clipboardData.files || [])) if (/^image\\//.test(f2.type)) files.push(f2);\n      if (!files.length) for (const it2 of Array.from(e24.clipboardData.items || [])) {\n        if (it2.kind === \"file\" && /^image\\//.test(it2.type)) {\n          const f2 = it2.getAsFile();\n          if (f2) files.push(f2);\n        }\n      }\n      if (files.length && act && act.isEditing && act.__freshEdit) {\n        try {\n          act.exitEditing();\n        } catch (err) {\n        }\n      } else {\n        const tag = (e24.target && e24.target.tagName || \"\").toLowerCase();\n        if (tag === \"input\" || tag === \"textarea\" || e24.target && e24.target.isContentEditable) return;\n        if (act && act.isEditing) return;\n      }\n      if (!files.length) return;\n      e24.preventDefault();\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      files.forEach((f2, i2) => {\n        const ext = (f2.type.split(\"/\")[1] || \"png\").replace(\"jpeg\", \"jpg\").replace(/[^a-z0-9]/gi, \"\");\n        const name = f2.name && f2.name !== \"image.png\" ? f2.name : \"pasted-\" + Date.now() + (i2 ? \"-\" + i2 : \"\") + \".\" + ext;\n        addUpload(new File([f2], name, { type: f2.type }));\n      });\n    };\n    listen(document, \"paste\", onPaste);\n    listen(document, \"keyup\", onKeyup);\n    listen(document, \"keydown\", onKeydown);\n    const dropVeil = document.createElement(\"div\");\n    dropVeil.className = \"nsv2-dropveil\";\n    dropVeil.hidden = true;\n    dropVeil.innerHTML = '<div class=\"nsv2-dropveil-card\"><span class=\"nsv2-dropveil-ic\">' + icons.uploads + '</span><div class=\"nsv2-dropveil-title\">Drop your file(s)</div><div class=\"nsv2-dropveil-sub\">anywhere to add them to your design</div></div>';\n    ui2.root.appendChild(dropVeil);\n    let dragDepth = 0;\n    const hideVeil = () => {\n      dragDepth = 0;\n      dropVeil.hidden = true;\n    };\n    const dragHasFiles = (e24) => e24.dataTransfer && Array.from(e24.dataTransfer.types || []).includes(\"Files\");\n    ui2.root.addEventListener(\"dragenter\", (e24) => {\n      if (!dragHasFiles(e24)) return;\n      e24.preventDefault();\n      if (!kindAllowed(\"image\")) return;\n      dragDepth++;\n      dropVeil.hidden = false;\n    });\n    ui2.root.addEventListener(\"dragover\", (e24) => {\n      if (!dragHasFiles(e24)) return;\n      e24.preventDefault();\n    });\n    ui2.root.addEventListener(\"dragleave\", (e24) => {\n      if (!dragHasFiles(e24)) return;\n      if (--dragDepth <= 0) hideVeil();\n    });\n    ui2.root.addEventListener(\"drop\", (e24) => {\n      if (!dragHasFiles(e24)) return;\n      e24.preventDefault();\n      hideVeil();\n      if (!kindAllowed(\"image\")) return refuse(\"image\");\n      Array.from(e24.dataTransfer && e24.dataTransfer.files || []).forEach(intake);\n    });\n    const layerRowObj = /* @__PURE__ */ new WeakMap();\n    function layerObjects() {\n      return editor.canvas.getObjects().filter((o2) => !o2.excludeFromExport).reverse();\n    }\n    function renderLayers() {\n      if (activePane !== \"layers\") return;\n      const objs = layerObjects();\n      ui2.layersEmpty.hidden = !!objs.length;\n      const frag = document.createDocumentFragment();\n      const active = editor.canvas.getActiveObject();\n      const activeSet = new Set(\n        active ? active.isType && active.isType(\"activeselection\") && active.getObjects ? active.getObjects() : [active] : []\n      );\n      const layerPreview = (o2) => {\n        const prev = document.createElement(\"img\");\n        prev.className = \"nsv2-layer-prev\";\n        prev.alt = \"\";\n        try {\n          const maxDim = Math.max(o2.getScaledWidth(), o2.getScaledHeight());\n          prev.src = o2.toDataURL({ format: \"png\", multiplier: Math.min(1, 150 / Math.max(1, maxDim)) });\n        } catch (e24) {\n        }\n        return prev;\n      };\n      const addRow = (o2, depth) => {\n        const isGroup = o2.isType && o2.isType(\"group\") && !o2.__el;\n        const row = document.createElement(\"div\");\n        row.className = \"nsv2-layer-row\" + (depth ? \" nsv2-layer-row--child\" : \"\") + (activeSet.has(o2) ? \" is-active\" : \"\");\n        row.draggable = depth === 0 && !(window.matchMedia && window.matchMedia(\"(pointer: coarse)\").matches);\n        if (depth) row.style.marginLeft = 26 * depth + \"px\";\n        const grip = document.createElement(\"span\");\n        grip.className = \"nsv2-layer-grip\";\n        grip.innerHTML = icons.grip;\n        row.append(grip);\n        if (o2.__locked) {\n          const lk = document.createElement(\"button\");\n          lk.type = \"button\";\n          lk.className = \"nsv2-layer-lockic\";\n          lk.innerHTML = icons.lock;\n          lk.title = \"Unlock\";\n          row.append(lk);\n        }\n        const well = document.createElement(\"span\");\n        well.className = \"nsv2-layer-well\" + (editor._boardBg ? \"\" : \" nsv2-layer-well--checker\");\n        if (editor._boardBg) well.style.background = editor._boardBg;\n        well.appendChild(layerPreview(o2));\n        row.append(well);\n        const tools = document.createElement(\"div\");\n        tools.className = \"nsv2-layer-tools\";\n        if (isGroup) {\n          const open = o2.__layersOpen !== false;\n          const chev = document.createElement(\"button\");\n          chev.type = \"button\";\n          chev.className = \"nsv2-layer-chev\" + (open ? \" is-open\" : \"\");\n          chev.innerHTML = icons.chevronRight;\n          chev.title = open ? \"Collapse group\" : \"Expand group\";\n          tools.appendChild(chev);\n        }\n        if (!o2.__base) {\n          const opts2 = document.createElement(\"button\");\n          opts2.type = \"button\";\n          opts2.className = \"nsv2-layer-opts\";\n          opts2.innerHTML = icons.dotsV;\n          opts2.title = \"Options\";\n          tools.appendChild(opts2);\n        }\n        row.appendChild(tools);\n        layerRowObj.set(row, o2);\n        frag.appendChild(row);\n        if (isGroup && o2.__layersOpen !== false) {\n          for (const c2 of [...o2.getObjects()].reverse()) addRow(c2, depth + 1);\n        }\n      };\n      for (const o2 of objs) addRow(o2, 0);\n      ui2.layersList.replaceChildren(frag);\n    }\n    let layersTimer = null;\n    const layersChanged = () => {\n      if (activePane !== \"layers\") return;\n      clearTimeout(layersTimer);\n      layersTimer = setTimeout(renderLayers, 180);\n    };\n    editor.canvas.on(\"object:added\", layersChanged);\n    editor.canvas.on(\"object:removed\", layersChanged);\n    editor.canvas.on(\"object:modified\", layersChanged);\n    editor.on(\"selection\", layersChanged);\n    ui2.layersList.addEventListener(\"click\", (e24) => {\n      const lockBtn = e24.target.closest(\".nsv2-layer-lockic\");\n      if (lockBtn) {\n        const lrow = lockBtn.closest(\".nsv2-layer-row\");\n        const lo2 = lrow && layerRowObj.get(lrow);\n        if (lo2) editor.setLocked(lo2, false);\n        return;\n      }\n      const chev = e24.target.closest(\".nsv2-layer-chev\");\n      if (chev) {\n        const grow = chev.closest(\".nsv2-layer-row\");\n        const g2 = grow && layerRowObj.get(grow);\n        if (g2) {\n          g2.__layersOpen = g2.__layersOpen === false;\n          renderLayers();\n        }\n        return;\n      }\n      const optsBtn = e24.target.closest(\".nsv2-layer-opts\");\n      if (optsBtn) {\n        const orow = optsBtn.closest(\".nsv2-layer-row\");\n        const o3 = orow && layerRowObj.get(orow);\n        if (o3) {\n          editor.canvas.setActiveObject(o3);\n          editor.canvas.requestRenderAll();\n          syncSelection();\n          const rr2 = optsBtn.getBoundingClientRect();\n          const ar2 = ui2.area.getBoundingClientRect();\n          openMenu(rr2.right - ar2.left - 220, rr2.bottom - ar2.top + 6);\n        }\n        return;\n      }\n      const row = e24.target.closest(\".nsv2-layer-row\");\n      const o2 = row && layerRowObj.get(row);\n      if (!o2) return;\n      editor.canvas.setActiveObject(o2);\n      editor.canvas.requestRenderAll();\n      syncSelection();\n      renderLayers();\n    });\n    let dragLayerRow = null;\n    ui2.layersList.addEventListener(\"dragstart\", (e24) => {\n      dragLayerRow = e24.target.closest(\".nsv2-layer-row\");\n      if (dragLayerRow) {\n        dragLayerRow.classList.add(\"is-dragging\");\n        e24.dataTransfer.effectAllowed = \"move\";\n        try {\n          e24.dataTransfer.setData(\"text/plain\", \"layer\");\n        } catch (err) {\n        }\n      }\n    });\n    ui2.layersList.addEventListener(\"dragover\", (e24) => {\n      if (!dragLayerRow) return;\n      e24.preventDefault();\n      const over = e24.target.closest(\".nsv2-layer-row\");\n      if (!over || over === dragLayerRow) return;\n      const r2 = over.getBoundingClientRect();\n      if (e24.clientY < r2.top + r2.height / 2) over.before(dragLayerRow);\n      else over.after(dragLayerRow);\n    });\n    ui2.layersList.addEventListener(\"drop\", (e24) => e24.preventDefault());\n    ui2.layersList.addEventListener(\"dragend\", () => {\n      if (!dragLayerRow) return;\n      dragLayerRow.classList.remove(\"is-dragging\");\n      dragLayerRow = null;\n      applyLayerOrder();\n    });\n    let touchRow = null, touchPid = null;\n    ui2.layersList.addEventListener(\"pointerdown\", (e24) => {\n      if (e24.pointerType === \"mouse\") return;\n      const grip = e24.target.closest && e24.target.closest(\".nsv2-layer-grip\");\n      const row = grip && grip.closest(\".nsv2-layer-row\");\n      if (!row || row.classList.contains(\"nsv2-layer-row--child\")) return;\n      touchRow = row;\n      touchPid = e24.pointerId;\n      row.classList.add(\"is-dragging\");\n      row.style.pointerEvents = \"none\";\n      try {\n        row.setPointerCapture(e24.pointerId);\n      } catch (err) {\n      }\n      e24.preventDefault();\n    });\n    const touchDragMove = (e24) => {\n      if (!touchRow || e24.pointerId !== touchPid) return;\n      e24.preventDefault();\n      const el2 = document.elementFromPoint(e24.clientX, e24.clientY);\n      const over = el2 && el2.closest && el2.closest(\".nsv2-layer-row:not(.nsv2-layer-row--child)\");\n      if (!over || over === touchRow || !ui2.layersList.contains(over)) return;\n      const r2 = over.getBoundingClientRect();\n      if (e24.clientY < r2.top + r2.height / 2) over.before(touchRow);\n      else over.after(touchRow);\n    };\n    const touchDragEnd = (e24) => {\n      if (!touchRow || e24.pointerId !== touchPid) return;\n      touchRow.classList.remove(\"is-dragging\");\n      touchRow.style.pointerEvents = \"\";\n      touchRow = null;\n      touchPid = null;\n      applyLayerOrder();\n    };\n    ui2.layersList.addEventListener(\"pointermove\", touchDragMove);\n    ui2.layersList.addEventListener(\"pointerup\", touchDragEnd);\n    ui2.layersList.addEventListener(\"pointercancel\", touchDragEnd);\n    function applyLayerOrder() {\n      const rows = [...ui2.layersList.children];\n      const n2 = rows.length;\n      let moved = false;\n      const topRows = rows.filter((r2) => !r2.classList.contains(\"nsv2-layer-row--child\"));\n      const nTop = topRows.length;\n      topRows.forEach((row, i2) => {\n        const o2 = layerRowObj.get(row);\n        if (!o2) return;\n        const target2 = nTop - 1 - i2;\n        if (editor.canvas.getObjects().indexOf(o2) !== target2) {\n          editor.canvas.moveObjectTo(o2, target2);\n          moved = true;\n        }\n      });\n      if (moved) {\n        editor.canvas.requestRenderAll();\n        editor.canvas.fire(\"object:modified\", {});\n      }\n    }\n    function syncHistory() {\n      ui2.undoBtn.disabled = !editor.canUndo;\n      ui2.redoBtn.disabled = !editor.canRedo;\n    }\n    editor.on(\"history\", syncHistory);\n    ui2.undoBtn.addEventListener(\"click\", () => editor.undo());\n    ui2.redoBtn.addEventListener(\"click\", () => editor.redo());\n    syncHistory();\n    ui2.ctxSelGroup.addEventListener(\"click\", (e24) => {\n      const a2 = e24.target.closest(\"[data-align-pos]\");\n      if (a2) return editor.alignSelection(a2.dataset.alignPos);\n      const d2 = e24.target.closest(\"[data-dist-axis]\");\n      if (d2) editor.distributeSelection(d2.dataset.distAxis);\n    });\n    const ENTRY_KEY = \"nsv2Entry\";\n    try {\n      if (!sessionStorage.getItem(ENTRY_KEY)) {\n        let entry = null;\n        const explicit = new URLSearchParams(window.location.search).get(\"from\");\n        if (explicit && /^\\/(?!\\/)/.test(explicit)) entry = explicit;\n        else if (document.referrer) {\n          const r2 = new URL(document.referrer);\n          if (r2.origin === window.location.origin && r2.pathname !== window.location.pathname) entry = r2.pathname + r2.search;\n        }\n        if (entry) sessionStorage.setItem(ENTRY_KEY, entry);\n      }\n    } catch (e24) {\n    }\n    const brandHome = !opts.onHome;\n    if (brandHome) {\n      const icon = opts.homeIcon || \"https://ninjatransfers.com/cdn/shop/files/Ninja_Transfers_Head_2x_37a0a33c-929c-4dcf-be28-034b8e4c5682.png?width=96\";\n      ui2.homeBtn.classList.add(\"nsv2-home-btn--brand\");\n      ui2.homeBtn.title = \"Ninja Transfers home\";\n      ui2.homeBtn.setAttribute(\"aria-label\", \"Ninja Transfers home\");\n      ui2.homeBtn.innerHTML = '<img src=\"' + icon.replace(/\"/g, \"&quot;\") + '\" width=\"28\" height=\"28\" alt=\"\" decoding=\"async\">';\n    }\n    ui2.homeBtn.addEventListener(\"click\", () => {\n      track(\"exit\");\n      if (opts.onHome) return opts.onHome();\n      if (brandHome) {\n        window.location.href = \"/\";\n        return;\n      }\n      let entry = null;\n      try {\n        entry = sessionStorage.getItem(ENTRY_KEY);\n      } catch (e24) {\n      }\n      window.location.href = entry || \"/\";\n    });\n    let customSize = false;\n    const dispW = () => fmtNum(fromIn(editor.designWIn));\n    const dispH = () => fmtNum(fromIn(editor.designHIn));\n    const presetKey = (w2, h2) => {\n      const k2 = w2 + \"x\" + h2;\n      return [...ui2.sizeSel.options].some((o2) => o2.value === k2) ? k2 : \"\";\n    };\n    function syncCanvasSize() {\n      ui2.sizeW.value = dispW();\n      ui2.sizeH.value = dispH();\n      const key = presetKey(dispW(), dispH());\n      const custom = customSize || !key;\n      ui2.sizeSel.value = custom ? \"custom\" : key;\n      ui2.sizeCustom.hidden = !custom;\n    }\n    function applyCanvasSize() {\n      const clamp = (v2, prev) => {\n        const n2 = parseFloat(v2);\n        return isNaN(n2) ? prev : Math.min(board.max, Math.max(board.min, n2));\n      };\n      editor.setCanvasSize(toIn(clamp(ui2.sizeW.value, fromIn(editor.designWIn))), toIn(clamp(ui2.sizeH.value, fromIn(editor.designHIn))));\n      syncCanvasSize();\n    }\n    ui2.sizeW.addEventListener(\"change\", applyCanvasSize);\n    ui2.sizeH.addEventListener(\"change\", applyCanvasSize);\n    ui2.sizeSel.addEventListener(\"change\", () => {\n      if (ui2.sizeSel.value === \"custom\") {\n        customSize = true;\n        syncCanvasSize();\n        ui2.sizeW.focus();\n        return;\n      }\n      customSize = false;\n      const [w2, h2] = ui2.sizeSel.value.split(\"x\").map(parseFloat);\n      editor.setCanvasSize(toIn(w2), toIn(h2));\n      syncCanvasSize();\n    });\n    editor.on(\"canvassize\", () => {\n      syncCanvasSize();\n      if (editor.lastCanvasFit && editor.lastCanvasFit.scaled) {\n        editor.lastCanvasFit = null;\n        showFitNotice(\"Design scaled to fit the new canvas size.\", false);\n      }\n    });\n    syncCanvasSize();\n    let fitNoticeT = 0;\n    function showFitNotice(msg2, withAction) {\n      clearTimeout(fitNoticeT);\n      ui2.fitAlertMsg.textContent = msg2;\n      ui2.fitAlertAct.hidden = !withAction;\n      ui2.fitAlert.classList.toggle(\"is-stacked\", !ui2.bgAlert.hidden);\n      ui2.fitAlert.hidden = false;\n      if (!withAction) fitNoticeT = setTimeout(() => {\n        ui2.fitAlert.hidden = true;\n      }, 3200);\n    }\n    ui2.fitAlertAct.addEventListener(\"click\", () => {\n      editor.fitContentToBoard();\n      ui2.fitAlert.hidden = true;\n    });\n    ui2.fitAlertX.addEventListener(\"click\", () => {\n      ui2.fitAlert.hidden = true;\n    });\n    let toastT = 0, toastOnAct = null;\n    function showToast(msg2, act, ms2 = 4500) {\n      clearTimeout(toastT);\n      ui2.toastMsg.textContent = msg2;\n      toastOnAct = act && act.onAction ? act.onAction : null;\n      ui2.toastAct.textContent = act && act.label ? act.label : \"\";\n      ui2.toastAct.hidden = !toastOnAct;\n      ui2.toast.classList.toggle(\"is-stacked\", !ui2.bgAlert.hidden || !ui2.fitAlert.hidden);\n      ui2.toast.hidden = false;\n      toastT = setTimeout(() => {\n        ui2.toast.hidden = true;\n      }, ms2);\n    }\n    ui2.toastAct.addEventListener(\"click\", () => {\n      const f2 = toastOnAct;\n      ui2.toast.hidden = true;\n      clearTimeout(toastT);\n      if (f2) f2();\n    });\n    ui2.toastX.addEventListener(\"click\", () => {\n      ui2.toast.hidden = true;\n      clearTimeout(toastT);\n    });\n    editor.on(\"deleted\", (d2) => {\n      const n2 = d2 && d2.count ? d2.count : 1;\n      showToast(n2 > 1 ? n2 + \" elements deleted\" : \"Deleted\", { label: \"Undo\", onAction: () => {\n        editor.undo();\n        syncSelection();\n      } });\n    });\n    async function confirmOverhangBeforeExport() {\n      if (!editor.contentOverhang()) return true;\n      const r2 = await askDialog(\"Part of your design is outside the canvas and won\\u2019t print.\", { ok: \"Fit to canvas\", cancel: \"Export anyway\" });\n      if (r2 === true) editor.fitContentToBoard();\n      return true;\n    }\n    function syncCanvasBg() {\n      const c2 = editor.boardBg;\n      ui2.bgSwatch.classList.toggle(\"has-color\", !!c2);\n      ui2.bgSwatch.style.background = c2 || \"\";\n      if (!c2) ui2.bgAlert.hidden = true;\n      else if (!bgAlertShown) {\n        bgAlertShown = true;\n        ui2.bgAlert.hidden = false;\n      }\n      if (c2) ui2.bgColorInput.value = c2;\n    }\n    ui2.bgBtn.addEventListener(\"click\", (e24) => {\n      if (e24.target === ui2.bgColorInput) {\n        e24.preventDefault();\n      }\n      if (activePane === \"color\" && colorTarget === \"canvasBg\") return closeColors();\n      colorTarget = \"canvasBg\";\n      openColors();\n    });\n    ui2.bgColorInput.addEventListener(\"input\", () => {\n      editor.setCanvasBackground(ui2.bgColorInput.value);\n      syncCanvasBg();\n    });\n    let bgAlertShown = false;\n    ui2.bgAlert.querySelector(\".nsv2-bg-alert-x\").addEventListener(\"click\", () => {\n      ui2.bgAlert.hidden = true;\n    });\n    ui2.bgClear.addEventListener(\"click\", () => {\n      editor.setCanvasBackground(null);\n      syncCanvasBg();\n    });\n    editor.on(\"canvasbg\", syncCanvasBg);\n    editor.on(\"canvasbg\", () => {\n      if (activePane === \"layers\") renderLayers();\n    });\n    syncCanvasBg();\n    const captureCenter = () => {\n      const s3 = ui2.boardScroll;\n      return {\n        fx: s3.scrollWidth > s3.clientWidth ? (s3.scrollLeft + s3.clientWidth / 2) / s3.scrollWidth : 0.5,\n        fy: s3.scrollHeight > s3.clientHeight ? (s3.scrollTop + s3.clientHeight / 2) / s3.scrollHeight : 0.5\n      };\n    };\n    const restoreCenter = ({ fx, fy }) => {\n      const s3 = ui2.boardScroll;\n      const bw = editor.designW * editor.fitScale * editor.userZoom;\n      const bh = editor.designH * editor.fitScale * editor.userZoom;\n      s3.scrollLeft = bw <= s3.clientWidth ? (s3.scrollWidth - s3.clientWidth) / 2 : fx * s3.scrollWidth - s3.clientWidth / 2;\n      s3.scrollTop = bh <= s3.clientHeight ? (s3.scrollHeight - s3.clientHeight) / 2 : fy * s3.scrollHeight - s3.clientHeight / 2;\n      editor.canvas.calcOffset();\n    };\n    const zoomKeepCenter = (fn2) => {\n      const c2 = captureCenter();\n      fn2();\n      restoreCenter(c2);\n    };\n    const zoomAnimateKeepCenter = (targetUserZoom) => {\n      const c2 = captureCenter();\n      editor.animateZoom(targetUserZoom, () => restoreCenter(c2));\n    };\n    const frameCoalesce = () => {\n      let raf = 0, fn2 = null;\n      return (f2) => {\n        fn2 = f2;\n        if (!raf) raf = requestAnimationFrame(() => {\n          raf = 0;\n          const g2 = fn2;\n          fn2 = null;\n          if (g2) g2();\n        });\n      };\n    };\n    const sliderFrame = frameCoalesce();\n    const zoomCtl = (() => {\n      const row = ui2.sliderRow(\"Zoom\", 1, 400, 1, editor.zoomPercent);\n      row.wrap.classList.add(\"nsv2-mtray-sliderrow\");\n      const stepBtn = (txt, factor) => {\n        const b2 = document.createElement(\"button\");\n        b2.type = \"button\";\n        b2.className = \"nsv2-zoom-step\";\n        b2.textContent = txt;\n        b2.title = factor > 1 ? \"Zoom in\" : \"Zoom out\";\n        b2.addEventListener(\"click\", () => zoomAnimateKeepCenter(editor.userZoom * factor));\n        return b2;\n      };\n      row.range.before(stepBtn(\"\\u2212\", 1 / 1.2));\n      row.range.after(stepBtn(\"+\", 1.2));\n      const fit = document.createElement(\"button\");\n      fit.type = \"button\";\n      fit.className = \"nsv2-zoom-fitbtn\";\n      fit.innerHTML = icons.expand;\n      fit.title = \"Fit\";\n      const sync = () => {\n        row.range.min = String(Math.max(1, Math.round(editor.fitScale * 25)));\n        row.range.max = String(Math.max(2, Math.round(editor.fitScale * 400)));\n        row.range.value = String(editor.zoomPercent);\n        row.num.value = String(editor.zoomPercent);\n      };\n      row.range.addEventListener(\"input\", () => {\n        const v2 = row.range.valueAsNumber;\n        sliderFrame(() => {\n          zoomKeepCenter(() => editor.setZoomPercent(v2));\n          row.num.value = String(editor.zoomPercent);\n        });\n      });\n      row.num.addEventListener(\"change\", () => {\n        const p2 = parseFloat(row.num.value) || editor.zoomPercent;\n        zoomAnimateKeepCenter(p2 / 100 / editor.fitScale);\n      });\n      fit.addEventListener(\"click\", () => zoomAnimateKeepCenter(1));\n      editor.on(\"zoom\", sync);\n      sync();\n      ui2.zoom.append(row.wrap, fit);\n      const barEl = () => document.getElementById(\"PBarNextFrameWrapper\");\n      const barCovers = (bar) => {\n        const cs2 = getComputedStyle(bar);\n        return cs2.display !== \"none\" && cs2.visibility !== \"hidden\" && parseFloat(cs2.opacity) > 0;\n      };\n      const liftAbovePreviewBar = () => {\n        const bar = barEl();\n        const r2 = bar && barCovers(bar) ? bar.getBoundingClientRect() : null;\n        const overlap = r2 && r2.height > 0 ? ui2.area.getBoundingClientRect().bottom - r2.top : 0;\n        ui2.zoom.style.bottom = overlap > 2 ? Math.round(overlap + 12) + \"px\" : \"\";\n        return !!bar;\n      };\n      let barWatched = null;\n      const watchBar = () => {\n        const bar = barEl();\n        if (!bar || bar === barWatched) return !!bar;\n        barWatched = bar;\n        if (window.ResizeObserver) {\n          const ro2 = new ResizeObserver(liftAbovePreviewBar);\n          ro2.observe(bar);\n          cleanups.push(() => ro2.disconnect());\n        }\n        if (window.MutationObserver) {\n          const mo2 = new MutationObserver(liftAbovePreviewBar);\n          mo2.observe(bar, { attributes: true, childList: true, subtree: true });\n          cleanups.push(() => mo2.disconnect());\n        }\n        listen(bar, \"transitionend\", liftAbovePreviewBar);\n        return true;\n      };\n      listen(window, \"resize\", liftAbovePreviewBar);\n      liftAbovePreviewBar();\n      watchBar();\n      if (window.MutationObserver) {\n        const arrival = new MutationObserver(() => {\n          if (barEl() && watchBar()) liftAbovePreviewBar();\n        });\n        arrival.observe(document.body, { childList: true });\n        cleanups.push(() => arrival.disconnect());\n      }\n      return { row, fit, home: () => ui2.zoom.append(row.wrap, fit) };\n    })();\n    function fillZoomTray(scroll) {\n      scroll.append(zoomCtl.row.wrap, zoomCtl.fit);\n    }\n    zoomCtlHome = () => zoomCtl.home();\n    const openZoomTray = () => {\n      if (mtrayKind === \"zoom\") return closeMtray();\n      openMtray(\"zoom\", fillZoomTray);\n    };\n    {\n      const scroll = ui2.boardScroll;\n      scroll.addEventListener(\"touchstart\", (e24) => {\n        if (e24.touches.length !== 1) return;\n        let target2 = null;\n        try {\n          const f2 = editor.canvas.findTarget(e24);\n          target2 = f2 && typeof f2 === \"object\" ? \"target\" in f2 ? f2.target : null : f2;\n        } catch (err) {\n        }\n        const sc2 = ui2.boardScroll;\n        const zoomedIn = sc2.scrollWidth > sc2.clientWidth + 1 || sc2.scrollHeight > sc2.clientHeight + 1;\n        const act = editor.canvas.getActiveObject();\n        const isActive = target2 && act && (target2 === act || act.getObjects && act.getObjects().includes(target2));\n        editor.canvas.allowTouchScrolling = !(target2 && (!zoomedIn || isActive));\n      }, { capture: true, passive: true });\n      const sceneAt = (clientX, clientY) => {\n        const cr2 = editor.canvas.upperCanvasEl.getBoundingClientRect();\n        const scale = editor.fitScale * editor.userZoom;\n        return {\n          x: (clientX - cr2.left - editor.apronX) / scale,\n          y: (clientY - cr2.top - editor.apronY) / scale\n        };\n      };\n      const pinScene = (scene, clientX, clientY) => {\n        const r2 = scroll.getBoundingClientRect();\n        const cr2 = editor.canvas.upperCanvasEl.getBoundingClientRect();\n        const scale = editor.fitScale * editor.userZoom;\n        const contLeft = cr2.left - r2.left + scroll.scrollLeft;\n        const contTop = cr2.top - r2.top + scroll.scrollTop;\n        const bw = editor.designW * scale;\n        const bh = editor.designH * scale;\n        const wantX = contLeft + editor.apronX + scene.x * scale - (clientX - r2.left);\n        const wantY = contTop + editor.apronY + scene.y * scale - (clientY - r2.top);\n        scroll.scrollLeft = bw <= scroll.clientWidth ? (scroll.scrollWidth - scroll.clientWidth) / 2 : wantX;\n        scroll.scrollTop = bh <= scroll.clientHeight ? (scroll.scrollHeight - scroll.clientHeight) / 2 : wantY;\n        editor.canvas.calcOffset();\n      };\n      let pinch0 = null;\n      const spread = (e24) => {\n        const [a2, b2] = e24.touches;\n        return Math.hypot(a2.clientX - b2.clientX, a2.clientY - b2.clientY);\n      };\n      const mid = (e24) => {\n        const [a2, b2] = e24.touches;\n        return { x: (a2.clientX + b2.clientX) / 2, y: (a2.clientY + b2.clientY) / 2 };\n      };\n      scroll.addEventListener(\"touchstart\", (e24) => {\n        if (e24.touches.length === 2) {\n          const m = mid(e24);\n          pinch0 = { d: spread(e24), z: editor.userZoom, scene: sceneAt(m.x, m.y) };\n        }\n      }, { passive: true });\n      const pinchFrame = frameCoalesce();\n      scroll.addEventListener(\"touchmove\", (e24) => {\n        if (e24.touches.length === 2 && pinch0 && pinch0.d > 0) {\n          e24.preventDefault();\n          editor.beginGesture();\n          const target2 = Math.min(4, Math.max(0.25, pinch0.z * (spread(e24) / pinch0.d)));\n          const m = mid(e24);\n          const anchor = pinch0.scene;\n          pinchFrame(() => {\n            editor._cancelZoomAnim();\n            if (Math.abs(target2 - editor.userZoom) > 4e-3) {\n              editor.userZoom = target2;\n              editor._applyZoom();\n            }\n            pinScene(anchor, m.x, m.y);\n          });\n        }\n      }, { passive: false });\n      const wheelFrame = frameCoalesce();\n      let wheelDelta = 0, wheelPt = null;\n      scroll.addEventListener(\"wheel\", (e24) => {\n        if (!(e24.ctrlKey || e24.metaKey)) return;\n        e24.preventDefault();\n        editor.beginGesture();\n        const unit = e24.deltaMode === 1 ? 16 : e24.deltaMode === 2 ? 400 : 1;\n        wheelDelta += e24.deltaY * unit;\n        wheelPt = { x: e24.clientX, y: e24.clientY };\n        wheelFrame(() => {\n          const dy = wheelDelta;\n          wheelDelta = 0;\n          if (!dy || !wheelPt) return;\n          editor._cancelZoomAnim();\n          const scene = sceneAt(wheelPt.x, wheelPt.y);\n          const target2 = Math.min(4, Math.max(0.25, editor.userZoom * Math.exp(-dy * 15e-4)));\n          if (Math.abs(target2 - editor.userZoom) < 5e-4) return;\n          editor.userZoom = target2;\n          editor._applyZoom();\n          pinScene(scene, wheelPt.x, wheelPt.y);\n        });\n      }, { passive: false });\n      const endPinch = (e24) => {\n        if (!e24.touches || e24.touches.length < 2) pinch0 = null;\n      };\n      scroll.addEventListener(\"touchend\", endPinch);\n      scroll.addEventListener(\"touchcancel\", endPinch);\n      let lastTap = null;\n      scroll.addEventListener(\"touchend\", (e24) => {\n        if (e24.touches.length || e24.changedTouches.length !== 1) {\n          lastTap = null;\n          return;\n        }\n        const t2 = e24.changedTouches[0];\n        let target2 = null;\n        try {\n          const f2 = editor.canvas.findTarget(e24);\n          target2 = f2 && typeof f2 === \"object\" ? \"target\" in f2 ? f2.target : null : f2;\n        } catch (err) {\n        }\n        if (target2) {\n          lastTap = null;\n          return;\n        }\n        const now = Date.now();\n        if (lastTap && now - lastTap.t < 320 && Math.hypot(t2.clientX - lastTap.x, t2.clientY - lastTap.y) < 30) {\n          lastTap = null;\n          const scene = sceneAt(t2.clientX, t2.clientY);\n          const atFit = Math.abs(editor.userZoom - 1) < 0.05;\n          editor.animateZoom(atFit ? 1 / editor.fitScale : 1, () => pinScene(scene, t2.clientX, t2.clientY));\n        } else {\n          lastTap = { t: now, x: t2.clientX, y: t2.clientY };\n        }\n      });\n    }\n    const VIEW_KEY = \"nsv2ViewPrefs\";\n    const GR = gridRange();\n    let viewPrefs = { grid: false, gridSizeIn: toIn(GR.def), rulers: false };\n    try {\n      Object.assign(viewPrefs, JSON.parse(localStorage.getItem(VIEW_KEY) || \"{}\"));\n    } catch (e24) {\n    }\n    const saveViewPrefs = () => {\n      try {\n        localStorage.setItem(VIEW_KEY, JSON.stringify(viewPrefs));\n      } catch (e24) {\n      }\n    };\n    function syncGridUI() {\n      ui2.gridToggle.classList.toggle(\"is-on\", viewPrefs.grid);\n      ui2.gridToggle.setAttribute(\"aria-pressed\", String(viewPrefs.grid));\n      ui2.gridBtn.classList.toggle(\"is-on\", viewPrefs.grid);\n      ui2.rulerBtn.classList.toggle(\"is-on\", viewPrefs.rulers);\n      ui2.gridSize.range.value = String(fmtNum(fromIn(viewPrefs.gridSizeIn)));\n      ui2.gridSize.num.value = String(fmtNum(fromIn(viewPrefs.gridSizeIn)));\n    }\n    function applyViewPrefs() {\n      editor.setGrid({ on: viewPrefs.grid, sizeIn: viewPrefs.gridSizeIn });\n      ui2.rulerX.hidden = ui2.rulerY.hidden = ui2.rulerCorner.hidden = !viewPrefs.rulers;\n      ui2.root.classList.toggle(\"nsv2-rulers-on\", viewPrefs.rulers);\n      editor.fitToContainer();\n      drawRulers();\n      saveViewPrefs();\n    }\n    function placeGridRow() {\n      const inSheet = isMobileView() && ui2.gridBtn.closest(\".nsv2-canvas-pane\");\n      if (inSheet && viewPrefs.grid) {\n        if (ui2.gridSize.wrap.parentElement !== ui2.ctxCanvasGroup) ui2.ctxCanvasGroup.appendChild(ui2.gridSize.wrap);\n      } else if (ui2.gridSize.wrap.parentElement !== ui2.gridPop) {\n        ui2.gridPop.appendChild(ui2.gridSize.wrap);\n      }\n    }\n    ui2.gridBtn.addEventListener(\"click\", () => {\n      if (isMobileView() && ui2.gridBtn.closest(\".nsv2-canvas-pane\")) {\n        ui2.gridPop.hidden = true;\n        viewPrefs.grid = !viewPrefs.grid;\n        syncGridUI();\n        applyViewPrefs();\n        placeGridRow();\n        return;\n      }\n      if (!ui2.gridPop.hidden) return ui2.gridPop.hidden = true;\n      syncGridUI();\n      ui2.gridPop.hidden = false;\n      const br2 = ui2.gridBtn.getBoundingClientRect();\n      const ar2 = ui2.area.getBoundingClientRect();\n      const w2 = ui2.gridPop.offsetWidth;\n      const x2 = Math.min(Math.max(8, br2.left - ar2.left - w2 / 2 + br2.width / 2), ui2.area.clientWidth - w2 - 8);\n      ui2.gridPop.style.transform = \"translate(\" + x2 + \"px, \" + (br2.bottom - ar2.top + 8) + \"px)\";\n    });\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.gridPop.hidden && !ui2.gridPop.contains(e24.target) && !ui2.gridBtn.contains(e24.target)) ui2.gridPop.hidden = true;\n    });\n    ui2.gridToggle.addEventListener(\"click\", () => {\n      viewPrefs.grid = !viewPrefs.grid;\n      syncGridUI();\n      applyViewPrefs();\n    });\n    ui2.rulerBtn.addEventListener(\"click\", () => {\n      viewPrefs.rulers = !viewPrefs.rulers;\n      syncGridUI();\n      applyViewPrefs();\n    });\n    const applyGridSize = (v2) => {\n      viewPrefs.gridSizeIn = toIn(Math.max(GR.min, Math.min(GR.max, roundStep(parseFloat(v2) || GR.def, GR.step))));\n      syncGridUI();\n      applyViewPrefs();\n    };\n    ui2.gridSize.range.addEventListener(\"input\", () => applyGridSize(ui2.gridSize.range.value));\n    ui2.gridSize.num.addEventListener(\"change\", () => applyGridSize(ui2.gridSize.num.value));\n    syncGridUI();\n    editor.on(\"canvaspane\", placeGridRow);\n    function drawRulers() {\n      if (!viewPrefs.rulers) return;\n      const dpr = window.devicePixelRatio || 1;\n      const sRect = ui2.boardScroll.getBoundingClientRect();\n      const aRect = ui2.area.getBoundingClientRect();\n      const cRect = editor.canvas.upperCanvasEl.getBoundingClientRect();\n      const scale = editor.canvas.getZoom();\n      const apronX = editor.apronX;\n      const apronY = editor.apronY;\n      const setup = (cv2, wPx, hPx, left, top2) => {\n        cv2.style.left = left + \"px\";\n        cv2.style.top = top2 + \"px\";\n        cv2.style.width = wPx + \"px\";\n        cv2.style.height = hPx + \"px\";\n        cv2.width = Math.max(1, Math.round(wPx * dpr));\n        cv2.height = Math.max(1, Math.round(hPx * dpr));\n        const ctx = cv2.getContext(\"2d\");\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n        ctx.clearRect(0, 0, wPx, hPx);\n        ctx.strokeStyle = \"#94a3b8\";\n        ctx.fillStyle = \"#64748b\";\n        ctx.lineWidth = 1;\n        ctx.font = \"9.5px system-ui, sans-serif\";\n        return ctx;\n      };\n      const R3 = 22;\n      const sTopRaw = sRect.top - aRect.top;\n      const sLeft = sRect.left - aRect.left;\n      const barBottom = isMobileView() ? 0 : ui2.ctxbar.offsetHeight || 0;\n      const top = Math.max(sTopRaw, barBottom);\n      ui2.rulerCorner.style.left = sLeft + \"px\";\n      ui2.rulerCorner.style.top = top + \"px\";\n      const inchPx = toIn(1) * 50 * scale;\n      const steps = rulerSteps();\n      let labelIn = steps.slice(0, -1).find((s22) => s22 * inchPx >= 34) || steps[steps.length - 1];\n      let minorIn = labelIn / 4;\n      if (minorIn * inchPx < 7) minorIn = labelIn / 2;\n      if (minorIn * inchPx < 7) minorIn = labelIn;\n      {\n        const wPx = sRect.width;\n        const ctx = setup(ui2.rulerX, wPx, R3, sLeft, top);\n        const originX = cRect.left - sRect.left + apronX;\n        const maxIn = fromIn(editor.designWIn);\n        for (let v2 = 0; v2 <= maxIn + 1e-6; v2 += minorIn) {\n          const x2 = originX + v2 * inchPx;\n          if (x2 < R3 - 4 || x2 > wPx + 4) continue;\n          const whole = Math.abs(v2 / labelIn - Math.round(v2 / labelIn)) < 1e-6;\n          ctx.beginPath();\n          ctx.moveTo(Math.round(x2) + 0.5, whole ? 8 : 15);\n          ctx.lineTo(Math.round(x2) + 0.5, R3);\n          ctx.stroke();\n          if (whole) ctx.fillText(String(Math.round(v2)), x2 + 3, 10);\n        }\n      }\n      {\n        const hPx = Math.max(1, sRect.height - (top - sTopRaw));\n        const ctx = setup(ui2.rulerY, R3, hPx, sLeft, top);\n        const originY = cRect.top - aRect.top - top + apronY;\n        const maxIn = fromIn(editor.designHIn);\n        for (let v2 = 0; v2 <= maxIn + 1e-6; v2 += minorIn) {\n          const y2 = originY + v2 * inchPx;\n          if (y2 < R3 - 4 || y2 > hPx + 4) continue;\n          const whole = Math.abs(v2 / labelIn - Math.round(v2 / labelIn)) < 1e-6;\n          ctx.beginPath();\n          ctx.moveTo(whole ? 8 : 15, Math.round(y2) + 0.5);\n          ctx.lineTo(R3, Math.round(y2) + 0.5);\n          ctx.stroke();\n          if (whole) {\n            ctx.save();\n            ctx.translate(9, y2 + 3);\n            ctx.rotate(-Math.PI / 2);\n            ctx.fillText(String(Math.round(v2)), 0, 0);\n            ctx.restore();\n          }\n        }\n      }\n    }\n    editor.on(\"zoom\", drawRulers);\n    editor.on(\"canvassize\", drawRulers);\n    listen(window, \"resize\", drawRulers);\n    queueMicrotask(applyViewPrefs);\n    const clientToScene = (e24) => {\n      const r2 = editor.canvas.upperCanvasEl.getBoundingClientRect();\n      const vpt = editor.canvas.viewportTransform;\n      return { x: (e24.clientX - r2.left - vpt[4]) / vpt[0], y: (e24.clientY - r2.top - vpt[5]) / vpt[3] };\n    };\n    const findTargetAt = (e24) => {\n      const f2 = editor.canvas.findTarget ? editor.canvas.findTarget(e24) : null;\n      if (!f2 || typeof f2 !== \"object\") return f2 || null;\n      return \"target\" in f2 ? f2.target || null : f2.isType ? f2 : null;\n    };\n    const guidePrev = document.createElement(\"div\");\n    guidePrev.className = \"nsv2-guide-preview\";\n    guidePrev.hidden = true;\n    ui2.area.appendChild(guidePrev);\n    const guideBadge = document.createElement(\"div\");\n    guideBadge.className = \"nsv2-guide-badge\";\n    guideBadge.hidden = true;\n    ui2.area.appendChild(guideBadge);\n    function positionGuideBadge(axis, e24, t2) {\n      const a2 = ui2.area.getBoundingClientRect();\n      guideBadge.textContent = (Math.round(t2 / 50 * 1e3) / 1e3).toFixed(3).replace(/0+$/, \"\").replace(/\\.$/, \"\") + '\"';\n      guideBadge.hidden = false;\n      const rul = (axis === \"v\" ? ui2.rulerX : ui2.rulerY).getBoundingClientRect();\n      if (axis === \"v\") {\n        guideBadge.style.left = Math.round(e24.clientX - a2.left + 4) + \"px\";\n        guideBadge.style.top = Math.round(rul.height ? rul.top - a2.top : 2) + \"px\";\n      } else {\n        guideBadge.style.left = Math.round((rul.width ? rul.left - a2.left : 2) + 2) + \"px\";\n        guideBadge.style.top = Math.round(e24.clientY - a2.top - 20) + \"px\";\n      }\n    }\n    function positionGuidePreview(axis, e24) {\n      const a2 = ui2.area.getBoundingClientRect();\n      guidePrev.hidden = false;\n      if (axis === \"v\") {\n        guidePrev.style.cssText = \"left:\" + Math.round(e24.clientX - a2.left) + \"px;top:0;width:1px;height:100%\";\n      } else {\n        guidePrev.style.cssText = \"top:\" + Math.round(e24.clientY - a2.top) + \"px;left:0;height:1px;width:100%\";\n      }\n      guidePrev.hidden = false;\n    }\n    function guideDragLoop(axis, existingIndex) {\n      document.body.style.cursor = axis === \"v\" ? \"col-resize\" : \"row-resize\";\n      ui2.area.classList.add(axis === \"v\" ? \"is-guide-drag-v\" : \"is-guide-drag-h\");\n      const move = (e24) => {\n        const p2 = clientToScene(e24);\n        const t2 = axis === \"v\" ? p2.x : p2.y;\n        positionGuidePreview(axis, e24);\n        positionGuideBadge(axis, e24, t2);\n        if (existingIndex != null) editor.moveGuide(axis, existingIndex, t2);\n        e24.preventDefault();\n      };\n      const up = (e24) => {\n        window.removeEventListener(\"pointermove\", move);\n        window.removeEventListener(\"pointerup\", up);\n        guidePrev.hidden = true;\n        guideBadge.hidden = true;\n        document.body.style.cursor = \"\";\n        ui2.area.classList.remove(\"is-guide-drag-v\", \"is-guide-drag-h\");\n        const p2 = clientToScene(e24);\n        const t2 = axis === \"v\" ? p2.x : p2.y;\n        const max = axis === \"v\" ? editor.designW : editor.designH;\n        const onBoard = t2 >= 0 && t2 <= max;\n        if (existingIndex != null) {\n          if (!onBoard) editor.removeGuide(axis, existingIndex);\n          else {\n            editor.moveGuide(axis, existingIndex, t2);\n            editor._record();\n          }\n        } else if (onBoard) {\n          editor.addGuide(axis, t2);\n        }\n      };\n      listen(window, \"pointermove\", move);\n      listen(window, \"pointerup\", up);\n    }\n    ui2.rulerX.addEventListener(\"pointerdown\", (e24) => {\n      e24.preventDefault();\n      guideDragLoop(\"h\", null);\n    });\n    ui2.rulerY.addEventListener(\"pointerdown\", (e24) => {\n      e24.preventDefault();\n      guideDragLoop(\"v\", null);\n    });\n    editor.canvas.upperCanvasEl.addEventListener(\n      \"pointerdown\",\n      (e24) => {\n        const z2 = editor.canvas.getZoom() || 1;\n        const hit = editor.hitGuide(clientToScene(e24), 8 / z2);\n        if (!hit) return;\n        const target2 = findTargetAt(e24);\n        if (target2 && hit.d > 4 / z2) return;\n        e24.preventDefault();\n        e24.stopPropagation();\n        guideDragLoop(hit.axis, hit.i);\n      },\n      true\n    );\n    editor.canvas.upperCanvasEl.addEventListener(\"mousemove\", (e24) => {\n      if (e24.buttons) return;\n      const z2 = editor.canvas.getZoom() || 1;\n      const hit = editor.hitGuide(clientToScene(e24), 8 / z2);\n      let axis = null;\n      if (hit) {\n        const target2 = findTargetAt(e24);\n        if (!target2 || hit.d <= 4 / z2) axis = hit.axis;\n      }\n      ui2.area.classList.toggle(\"is-guide-hover-v\", axis === \"v\");\n      ui2.area.classList.toggle(\"is-guide-hover-h\", axis === \"h\");\n    });\n    editor.canvas.upperCanvasEl.addEventListener(\"mouseleave\", () => {\n      ui2.area.classList.remove(\"is-guide-hover-v\", \"is-guide-hover-h\");\n    });\n    ui2.boardScroll.addEventListener(\"scroll\", () => {\n      editor.beginGesture();\n      drawRulers();\n      editor.canvas.calcOffset();\n      positionQa();\n    });\n    const USE_PRODUCTS = opts.useProducts || [\n      { title: \"DTF Transfers\", url: \"/products/dtf-transfers\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/DTF-by-size.png\" },\n      { title: \"UV DTF PermaStickers\\u2122\", url: \"/products/uv-dtf-stickers-decals-by-size\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/UV-by-size-hero-v4-1.jpg\" },\n      { title: \"Transfer Stickers\", url: \"/products/transfer-stickers-by-size\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/transfer-stickersninja-transfers-551688.jpg\" },\n      { title: \"Spangle Transfers\", url: \"/products/spangle-transfers\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/DTF_Spangle_Transfers_579ce79c-f7e0-4ad4-a21e-96c57347c601.png\" },\n      { title: \"3D Puff Transfers\", url: \"/products/3d-puff-transfers\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/3d_Puff_Transfer_2700f976-338f-45e1-8cbb-21e2e08ac09e.png\" },\n      { title: \"3D Glitter Puff\", url: \"/products/3d-glitter-puff-transfers\", img: \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/Glitter_puff_Transfers.png\" }\n    ];\n    let useModalBuilt = false;\n    function openUseModal() {\n      if (!useModalBuilt) {\n        useModalBuilt = true;\n        const frag = document.createDocumentFragment();\n        for (const p2 of USE_PRODUCTS) {\n          const tile = document.createElement(\"button\");\n          tile.type = \"button\";\n          tile.className = \"nsv2-use-tile\";\n          tile.innerHTML = '<img loading=\"lazy\" src=\"' + p2.img + (p2.img.includes(\"?\") ? \"&\" : \"?\") + 'width=180\" alt=\"\"><span>' + p2.title + \"</span>\";\n          tile.addEventListener(\"click\", () => chooseUseProduct(p2, tile));\n          frag.appendChild(tile);\n        }\n        ui2.useGrid.appendChild(frag);\n      }\n      ui2.useBusy.hidden = true;\n      ui2.useGrid.hidden = false;\n      ui2.useModal.hidden = false;\n    }\n    function closeUseModal() {\n      ui2.useModal.hidden = true;\n    }\n    async function chooseUseProduct(product, tile) {\n      if (!ui2.useBusy.hidden) return;\n      await confirmOverhangBeforeExport();\n      ui2.useGrid.querySelectorAll(\".nsv2-use-tile\").forEach((t2) => t2.classList.toggle(\"is-picked\", t2 === tile));\n      ui2.useBusy.hidden = false;\n      try {\n        const result = await exportAndUpload(editor, { customerId: opts.customerId });\n        trackUse();\n        try {\n          localStorage.removeItem(DRAFT_KEY);\n        } catch (e24) {\n        }\n        window.location.href = product.url + result.handoffQuery;\n      } catch (err) {\n        console.error(\"studio-v2: Use Design failed\", err);\n        diagFail(\"export_fail\", err);\n        ui2.useBusy.textContent = \"Something went wrong \\u2014 try again\";\n        setTimeout(() => {\n          ui2.useBusy.hidden = true;\n          ui2.useBusy.textContent = \"Preparing your design\\u2026\";\n        }, 2500);\n      }\n    }\n    ui2.useClose.addEventListener(\"click\", closeUseModal);\n    ui2.useModal.addEventListener(\"click\", (e24) => {\n      if (e24.target === ui2.useModal && ui2.useBusy.hidden) closeUseModal();\n    });\n    ui2.useBtn.addEventListener(\"click\", async () => {\n      if (!editor.canvas.getObjects().length) return;\n      if (typeof opts.onUseDesign === \"function\") {\n        if (ui2.useBtn.classList.contains(\"is-busy\")) return;\n        await confirmOverhangBeforeExport();\n        ui2.useBtn.classList.add(\"is-busy\");\n        const label = ui2.useBtn.querySelector(\"span\");\n        const prev = label.textContent;\n        label.textContent = \"Saving\\u2026\";\n        try {\n          const exportOpts = { customerId: opts.customerId };\n          const all = editor.canvas.getObjects();\n          const base = baseImg ? all.find((o2) => o2.__base) : null;\n          const wantPx = base && baseImg.pxW > 0 ? Math.round(baseImg.pxW * editor.designW / Math.max(1, base.getScaledWidth())) : 0;\n          if (wantPx) exportOpts.targetPx = Math.max(600, Math.min(9e3, wantPx));\n          const out = await exportAndUpload(editor, exportOpts);\n          if (baseImg) {\n            out.baseUrl = baseImg.url;\n            out.textCount = all.filter((o2) => !o2.__base).length;\n          }\n          if (wantPx && out.exportPx > 0) out.artScale = out.exportPx / wantPx;\n          if (base && opts.returnTextObjects === true) {\n            try {\n              out.textObjects = textObjectsOut(base);\n            } catch (err) {\n              console.warn(\"studio-v2: text objects hand-back failed\", err);\n            }\n          }\n          if (base && opts.returnTextLayer === true) {\n            try {\n              const tl = await textLayerOut(base);\n              if (tl) out.textLayer = tl;\n            } catch (err) {\n              console.warn(\"studio-v2: text layer render failed\", err);\n            }\n          }\n          trackUse();\n          await opts.onUseDesign(out);\n          label.textContent = prev;\n        } catch (err) {\n          console.error(\"studio-v2: Use Design failed\", err);\n          diagFail(\"export_fail\", err);\n          label.textContent = \"Try again\";\n          setTimeout(() => label.textContent = prev, 2500);\n        } finally {\n          ui2.useBtn.classList.remove(\"is-busy\");\n        }\n        return;\n      }\n      openUseModal();\n    });\n    ui2.designNameInput.hidden = chromeHidden(\"name\");\n    const PARKED_KEY = \"nsv2ParkedSave\";\n    let savesInFlight = 0;\n    listen(window, \"beforeunload\", (e24) => {\n      if (!savesInFlight) return;\n      e24.preventDefault();\n      e24.returnValue = \"\";\n    });\n    async function parkSaveAndLogin() {\n      if (ui2.saveBtn.classList.contains(\"is-busy\")) return;\n      if (!editor.canvas.getObjects().length) return;\n      ui2.saveBtn.classList.add(\"is-busy\");\n      savesInFlight++;\n      const label = ui2.saveBtn.querySelector(\"span\");\n      const prev = label.textContent;\n      label.textContent = \"Saving\\u2026\";\n      try {\n        const name = ui2.designNameInput.value.trim() || \"Untitled design\";\n        const parked = await uploadDesignArtifacts(editor, { name });\n        savesInFlight--;\n        localStorage.setItem(PARKED_KEY, JSON.stringify(parked));\n        try {\n          localStorage.setItem(DRAFT_KEY, editor.designJSON());\n        } catch (e24) {\n        }\n        label.textContent = \"Sign in to finish\\u2026\";\n        gotoLogin(\"designs\");\n      } catch (err) {\n        savesInFlight = Math.max(0, savesInFlight - 1);\n        console.error(\"studio-v2: parked save failed\", err);\n        diagFail(\"save_fail\", err);\n        label.textContent = \"Try again\";\n        setTimeout(() => label.textContent = prev, 2500);\n        ui2.saveBtn.classList.remove(\"is-busy\");\n      }\n    }\n    try {\n      const rp = sessionStorage.getItem(RETURN_PANE_KEY);\n      if (rp) {\n        sessionStorage.removeItem(RETURN_PANE_KEY);\n        setTimeout(() => openPane(rp), 600);\n      }\n    } catch (e24) {\n    }\n    if (!registry) {\n      try {\n        const parked = JSON.parse(localStorage.getItem(PARKED_KEY) || \"null\");\n        if (parked && parked.stateUrl) {\n          if (parked.name) ui2.designNameInput.value = parked.name;\n          setTimeout(() => {\n            if (!editor.canvas.getObjects().length) {\n              loadDesignFromUrl(editor, parked.stateUrl).catch((err) => console.warn(\"studio-v2: parked restore failed\", err));\n            }\n          }, 800);\n        }\n      } catch (e24) {\n      }\n    }\n    if (registry) {\n      try {\n        const raw = localStorage.getItem(PARKED_KEY);\n        if (raw) {\n          localStorage.removeItem(PARKED_KEY);\n          const parked = JSON.parse(raw);\n          registerParked(registry, parked).then(() => {\n            adoptSave({ fileName: parked.fileName, name: parked.name });\n            noteSessionSave({ previewUrl: parked.previewUrl, fileName: parked.fileName });\n            const label = ui2.saveBtn.querySelector(\"span\");\n            const prev = label.textContent;\n            label.textContent = \"Saved \\u2713\";\n            setTimeout(() => label.textContent = prev, 2500);\n          }).catch((err) => console.error(\"studio-v2: parked save registration failed\", err));\n          setTimeout(() => {\n            if (!editor.canvas.getObjects().length && parked.stateUrl) {\n              loadDesignFromUrl(editor, parked.stateUrl).catch((err) => console.warn(\"studio-v2: parked restore failed\", err));\n            }\n          }, 800);\n        }\n      } catch (e24) {\n      }\n    }\n    let currentSave = null;\n    function adoptSave(meta) {\n      currentSave = meta ? { fileName: meta.fileName, name: meta.name || \"\" } : null;\n      if (meta && meta.name) ui2.designNameInput.value = meta.name;\n      try {\n        if (currentSave) localStorage.setItem(SAVE_KEY, JSON.stringify(currentSave));\n        else localStorage.removeItem(SAVE_KEY);\n      } catch (e24) {\n      }\n    }\n    const currentName = () => ui2.designNameInput.value.trim() || \"Untitled design\";\n    const copyName = (n2) => /\\scopy$/.test(n2) ? n2 : n2 + \" copy\";\n    async function doSave(overwrite, nameOverride) {\n      ui2.savePop.hidden = true;\n      if (ui2.saveBtn.classList.contains(\"is-busy\")) return;\n      ui2.saveBtn.classList.add(\"is-busy\");\n      savesInFlight++;\n      const label = ui2.saveBtn.querySelector(\"span\");\n      const prev = label.textContent;\n      label.textContent = \"Saving\\u2026\";\n      let pendingName = \"\";\n      try {\n        if (nameOverride) ui2.designNameInput.value = nameOverride;\n        const name = currentName();\n        const replaced = overwrite && currentSave ? currentSave.fileName : null;\n        const result = await saveDesign(editor, {\n          registry,\n          name,\n          prevFileName: replaced,\n          onState: (art) => {\n            pendingName = art.fileName;\n            notePendingSave(art.fileName);\n          }\n          // card appears NOW; the print file follows\n        });\n        adoptSave({ fileName: result.fileName, name });\n        noteSessionSave(result, replaced);\n        label.textContent = \"Saved \\u2713\";\n        setTimeout(() => label.textContent = prev, 2e3);\n        return true;\n      } catch (err) {\n        if (pendingName) dropPendingSave(pendingName);\n        console.error(\"studio-v2: save failed\", err);\n        diagFail(\"save_fail\", err);\n        label.textContent = \"Try again\";\n        setTimeout(() => label.textContent = prev, 2500);\n        return false;\n      } finally {\n        savesInFlight = Math.max(0, savesInFlight - 1);\n        ui2.saveBtn.classList.remove(\"is-busy\");\n      }\n    }\n    const closeFileMenu = () => {\n      ui2.fileMenu.hidden = true;\n      ui2.fileBtn.classList.remove(\"is-open\");\n    };\n    function syncFileMenu() {\n      const hasObjects = editor.canvas.getObjects().length > 0;\n      ui2.fileNew.disabled = !hasObjects;\n      ui2.fileOpen.disabled = !registry;\n      ui2.fileSave.disabled = !hasObjects;\n      ui2.fileSaveAs.disabled = !registry || !hasObjects;\n      ui2.fileDup.disabled = !registry || !hasObjects;\n      ui2.fileSignIn.hidden = !!registry;\n    }\n    ui2.fileBtn.addEventListener(\"click\", () => {\n      const open = ui2.fileMenu.hidden;\n      if (open) {\n        syncFileMenu();\n        try {\n          const n2 = diagCount();\n          ui2.fileBuild.textContent = \"Build \" + (window.NinjaStudio && window.NinjaStudio.version || \"dev\") + (n2 ? \" \\xB7 \" + n2 + \" errors\" : \"\");\n        } catch (e24) {\n        }\n      }\n      ui2.fileMenu.hidden = !open;\n      ui2.fileBtn.classList.toggle(\"is-open\", open);\n    });\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.fileMenu.hidden && !ui2.fileWrap.contains(e24.target)) closeFileMenu();\n    });\n    function clearToNewDesign() {\n      editor.canvas.discardActiveObject();\n      editor.canvas.getObjects().slice().forEach((o2) => editor.canvas.remove(o2));\n      editor.setCanvasBackground(null);\n      adoptSave(null);\n      ui2.designNameInput.value = \"\";\n      try {\n        localStorage.removeItem(DRAFT_KEY);\n      } catch (e24) {\n      }\n      editor.canvas.renderAll();\n      syncSelection();\n    }\n    ui2.fileNew.addEventListener(\"click\", async () => {\n      closeFileMenu();\n      if (!editor.canvas.getObjects().length) return clearToNewDesign();\n      if (registry) {\n        const choice = await askDialog(\n          currentSave ? \"Save changes to \\u201C\" + (currentSave.name || \"Untitled design\") + \"\\u201D before starting a new one?\" : \"Save your current design before starting a new one?\",\n          { ok: currentSave ? \"Save\" : \"Save & new\", alt: \"Discard\" }\n        );\n        if (!choice) return;\n        if (choice === true) {\n          let overwrite = false;\n          let name;\n          if (currentSave) {\n            const how = await askDialog(\"Update \\u201C\" + (currentSave.name || \"Untitled design\") + \"\\u201D or save as a new design?\", {\n              ok: \"Update\",\n              alt: \"Save as new\"\n            });\n            if (!how) return;\n            if (how === true) overwrite = true;\n            else {\n              name = await askName(\"Save as\", { value: copyName(currentName()), ok: \"Save & new\" });\n              if (name == null) return;\n            }\n          } else {\n            name = await askName(\"Name your design\", { value: currentName(), ok: \"Save & new\" });\n            if (name == null) return;\n          }\n          const ok = await doSave(overwrite, name);\n          if (!ok) return;\n        }\n      } else if (!await askDialog(\"Start a new design? Your current canvas will be replaced.\", { ok: \"New design\" })) {\n        return;\n      }\n      clearToNewDesign();\n    });\n    ui2.fileOpen.addEventListener(\"click\", () => {\n      closeFileMenu();\n      openPane(\"designs\");\n    });\n    ui2.fileSignIn.addEventListener(\"click\", () => {\n      closeFileMenu();\n      gotoLogin();\n    });\n    ui2.uploadsSignin.hidden = !!opts.customerId || !!opts.persistRegistry;\n    ui2.uploadsSigninBtn.addEventListener(\"click\", () => gotoLogin(\"uploads\"));\n    ui2.fileSave.addEventListener(\"click\", () => {\n      closeFileMenu();\n      ui2.saveBtn.click();\n    });\n    ui2.fileSaveAs.addEventListener(\"click\", async () => {\n      closeFileMenu();\n      if (ui2.saveBtn.classList.contains(\"is-busy\")) return;\n      const name = await askName(\"Save as\", { value: copyName(currentName()), ok: \"Save copy\" });\n      if (name != null) doSave(false, name);\n    });\n    const OUTLINE_MODE_KEY = \"nsv2OutlineTracksScale\";\n    const syncOutlineMode = () => ui2.fileOutlineMode.classList.toggle(\"is-on\", !!editor.outlineTracksScale);\n    try {\n      const stored = localStorage.getItem(OUTLINE_MODE_KEY);\n      editor.setOutlineTracksScale(stored == null ? true : stored === \"1\");\n    } catch (e24) {\n      editor.setOutlineTracksScale(true);\n    }\n    syncOutlineMode();\n    ui2.fileOutlineMode.addEventListener(\"click\", () => {\n      editor.setOutlineTracksScale(!editor.outlineTracksScale);\n      try {\n        localStorage.setItem(OUTLINE_MODE_KEY, editor.outlineTracksScale ? \"1\" : \"0\");\n      } catch (e24) {\n      }\n      syncOutlineMode();\n    });\n    ui2.fileDup.addEventListener(\"click\", async () => {\n      closeFileMenu();\n      if (ui2.saveBtn.classList.contains(\"is-busy\")) return;\n      const name = await askName(\"Duplicate design\", { value: copyName(currentName()), ok: \"Duplicate\" });\n      if (name != null) doSave(false, name);\n    });\n    ui2.saveBtn.addEventListener(\"click\", async () => {\n      if (ui2.saveBtn.classList.contains(\"is-busy\")) return;\n      if (!editor.canvas.getObjects().length) return;\n      if (!registry) {\n        const name = await askName(\"Name your design\", { value: currentName(), ok: \"Save & sign in\" });\n        if (name == null) return;\n        ui2.designNameInput.value = name;\n        return parkSaveAndLogin();\n      }\n      if (!currentSave) {\n        const name = await askName(\"Name your design\", { value: currentName(), ok: \"Save\" });\n        if (name == null) return;\n        return doSave(false, name);\n      }\n      if (!ui2.savePop.hidden) return ui2.savePop.hidden = true;\n      ui2.saveUpdateBtn.textContent = \"Update \\u201C\" + (currentSave.name || \"Untitled design\") + \"\\u201D\";\n      ui2.savePop.hidden = false;\n    });\n    ui2.saveUpdateBtn.addEventListener(\"click\", () => doSave(true));\n    ui2.saveNewBtn.addEventListener(\"click\", async () => {\n      ui2.savePop.hidden = true;\n      const name = await askName(\"Save as a new design\", { value: copyName(currentName()), ok: \"Save copy\" });\n      if (name != null) doSave(false, name);\n    });\n    listen(document, \"pointerdown\", (e24) => {\n      if (!ui2.savePop.hidden && !ui2.saveWrap.contains(e24.target)) ui2.savePop.hidden = true;\n    }, true);\n    const bootState = opts.designState || (() => {\n      try {\n        return new URLSearchParams(window.location.search).get(\"ds_state\");\n      } catch (e24) {\n        return null;\n      }\n    })();\n    if (bootState) {\n      let trusted = false;\n      try {\n        const u2 = new URL(bootState, window.location.href);\n        trusted = u2.protocol === \"https:\" && (isBucketHost(u2.host) || u2.host === cfg.imgixHost);\n      } catch (e24) {\n      }\n      if (trusted) {\n        withBootVeil(\n          loadDesignFromUrl(editor, bootState.split(cfg.imgixHost).join(cfg.s3Host), modeSanitize).then((meta) => {\n            if (!lastStripped) adoptSave(meta);\n            trackOpenSaved();\n          }).catch((err) => console.error(\"studio-v2: boot design load failed\", err))\n        );\n      } else {\n        console.warn(\"studio-v2: ds_state ignored (untrusted host)\", bootState);\n      }\n    }\n    function withBootVeil(loadPromise) {\n      const veil = document.createElement(\"div\");\n      veil.className = \"nsv2-boot-veil\";\n      veil.innerHTML = '<span class=\"nsv2-boot-spin\"></span>';\n      ui2.area.appendChild(veil);\n      const lift = () => {\n        veil.classList.add(\"is-out\");\n        setTimeout(() => veil.remove(), 300);\n      };\n      Promise.race([\n        Promise.resolve(loadPromise).then(() => editor.whenRestoreSettled()),\n        new Promise((r2) => setTimeout(r2, 5e3))\n      ]).then(lift, lift);\n    }\n    let draftTimer = null;\n    editor.on(\"history\", () => {\n      clearTimeout(draftTimer);\n      draftTimer = setTimeout(() => {\n        try {\n          if (editor.canvas.getObjects().some((o2) => !o2.__base)) localStorage.setItem(DRAFT_KEY, editor.designJSON());\n          else localStorage.removeItem(DRAFT_KEY);\n        } catch (e24) {\n        }\n      }, 1500);\n    });\n    let bootRestored = false;\n    const TEXT_OBJECTS_V2 = 1;\n    const hostText = hostTextObjects();\n    if (!bootState && !hostText) {\n      try {\n        const draft = localStorage.getItem(DRAFT_KEY);\n        if (draft && !editor.canvas.getObjects().length) {\n          const data = JSON.parse(draft);\n          bootRestored = true;\n          withBootVeil(loadDesignData(editor, modeSanitize(data)).then(repointBaseToHost).catch((err) => console.warn(\"studio-v2: draft restore failed\", err)));\n          try {\n            const meta = JSON.parse(localStorage.getItem(SAVE_KEY) || \"null\");\n            if (meta && meta.fileName) adoptSave(meta);\n          } catch (e24) {\n          }\n        }\n      } catch (e24) {\n      }\n    }\n    async function repointBaseToHost() {\n      if (!baseImg) return;\n      const base = editor.canvas.getObjects().find((o2) => o2.__base);\n      if (!base) return;\n      const want = baseDisplayUrl(baseImg.url);\n      const el2 = base._originalElement || base._element;\n      const have = el2 && el2.src || (typeof base.getSrc === \"function\" ? base.getSrc() : \"\") || \"\";\n      if (have === want) return;\n      await editor.replaceImageSource(base, want);\n      editor.canvas.discardActiveObject();\n      editor.canvas.requestRenderAll();\n      editor.resetHistory();\n      syncSelection();\n    }\n    function baseDisplayUrl(src) {\n      if (!/^https?:/.test(src)) return src;\n      let u2;\n      try {\n        u2 = new URL(src);\n      } catch (e24) {\n        return src;\n      }\n      if (u2.host.indexOf(\"imgix\") === -1) return hostedDisplayUrl(src);\n      [\"dpr\", \"q\", \"auto\", \"h\"].forEach((k2) => u2.searchParams.delete(k2));\n      u2.searchParams.set(\"fm\", \"png\");\n      u2.searchParams.set(\"fit\", \"max\");\n      u2.searchParams.set(\"w\", String(DISPLAY_W));\n      return u2.toString();\n    }\n    async function placeBaseImage() {\n      const bare = baseImg.url.split(\"?\")[0];\n      const name = baseImg.name || bare.split(\"/\").pop();\n      const img = await editor.addImageFromUrl(baseDisplayUrl(baseImg.url), name);\n      img.__bgr = { status: \"ready\", imgixUrl: bare, fileName: name, isVector: false, versions: {}, model: null };\n      const s3 = 0.58 * Math.min(editor.designW / Math.max(1, img.width), editor.designH / Math.max(1, img.height));\n      img.set({ scaleX: s3, scaleY: s3, left: editor.designW / 2, top: editor.designH / 2 });\n      editor.setBase(img);\n      editor.canvas.discardActiveObject();\n      editor.canvas.requestRenderAll();\n      editor.resetHistory();\n      syncSelection();\n    }\n    function textObjectsOut(base) {\n      const snap = JSON.parse(editor._snapshot());\n      const c2 = base.getCenterPoint();\n      return {\n        v: TEXT_OBJECTS_V2,\n        board: { w: editor.designW, h: editor.designH },\n        base: { cx: c2.x, cy: c2.y, w: base.getScaledWidth(), h: base.getScaledHeight(), index: snap.objects.findIndex((o2) => o2.__base) },\n        objects: snap.objects.filter((o2) => !o2.__base)\n      };\n    }\n    const TEXT_LAYER_MAX_PX2 = 16e6;\n    async function textLayerOut(base) {\n      const objs = editor._boardObjects().filter((o2) => !o2.__base);\n      if (!objs.length || !(baseImg.pxW > 0)) return null;\n      const bw = base.getScaledWidth(), bh = base.getScaledHeight(), bc2 = base.getCenterPoint();\n      const f2 = baseImg.pxW / Math.max(1e-6, bw);\n      const artL = bc2.x - bw / 2, artT = bc2.y - bh / 2;\n      const ink = editor._inkBounds(objs);\n      const L2 = Math.max(0, Math.min(artL, ink.left)), T2 = Math.max(0, Math.min(artT, ink.top));\n      const R3 = Math.min(editor.designW, Math.max(artL + bw, ink.left + ink.width)), B2 = Math.min(editor.designH, Math.max(artT + bh, ink.top + ink.height));\n      const x0 = Math.floor((L2 - artL) * f2), y0 = Math.floor((T2 - artT) * f2);\n      const W2 = Math.ceil((R3 - artL) * f2) - x0, H2 = Math.ceil((B2 - artT) * f2) - y0;\n      if (W2 <= 0 || H2 <= 0) return null;\n      const c2 = editor.canvas;\n      const all = c2.getObjects();\n      const bi2 = all.indexOf(base);\n      const below = objs.filter((o2) => all.indexOf(o2) < bi2);\n      const active = c2.getActiveObject();\n      const prevBg = c2.backgroundColor;\n      const vis = new Map(all.map((o2) => [o2, o2.visible]));\n      c2.discardActiveObject();\n      c2.backgroundColor = \"\";\n      const z2 = c2.getZoom();\n      const pass = async (show, scale) => {\n        for (const o2 of all) o2.visible = vis.get(o2) && show.includes(o2);\n        c2.renderAll();\n        const dataUrl = c2.toDataURL({\n          format: \"png\",\n          quality: 1,\n          // same board crop as exportPng: board (x, y) sits at apron + (x, y) \u00D7 zoom\n          left: editor.apronX + (artL + x0 / f2) * z2,\n          top: editor.apronY + (artT + y0 / f2) * z2,\n          // +\u00BC px: fabric truncates the scaled size, and W / f \u00D7 f lands a hair under W in floats\n          width: (W2 + 0.25 / scale) / f2 * z2,\n          height: (H2 + 0.25 / scale) / f2 * z2,\n          multiplier: f2 * scale / z2\n        });\n        const blob = await (await fetch(dataUrl)).blob();\n        if (!blob || !blob.size) throw new Error(\"empty text layer\");\n        return blob;\n      };\n      try {\n        let lastErr = null;\n        for (const scale of [1, Math.min(1, Math.sqrt(TEXT_LAYER_MAX_PX2 / (W2 * H2)))]) {\n          try {\n            const blob = await pass(objs.filter((o2) => !below.includes(o2)), scale);\n            const belowBlob = below.length ? await pass(below, scale) : null;\n            return { v: 1, blob, belowBlob, width: Math.floor(W2 * scale + 0.25), height: Math.floor(H2 * scale + 0.25), scale, offset: { x: -x0, y: -y0 }, pxW: Math.round(bw * f2), pxH: Math.round(bh * f2) };\n          } catch (err) {\n            lastErr = err;\n          }\n          if (scale < 1) break;\n        }\n        throw lastErr || new Error(\"text layer failed\");\n      } finally {\n        for (const [o2, v2] of vis) o2.visible = v2;\n        c2.backgroundColor = prevBg;\n        if (active) c2.setActiveObject(active);\n        c2.renderAll();\n      }\n    }\n    function hostTextObjects() {\n      const t2 = opts.textObjects;\n      if (!baseImg || !t2 || t2.v !== TEXT_OBJECTS_V2 || !Array.isArray(t2.objects) || !t2.objects.length) return null;\n      if (!t2.board || !(t2.board.w > 0) || !(t2.board.h > 0) || !t2.base || !(t2.base.w > 0)) return null;\n      return t2;\n    }\n    async function restoreHostText(t2) {\n      const base = editor.canvas.getObjects().find((o2) => o2.__base);\n      if (!base) return;\n      const same = t2.board.w === editor.designW && t2.board.h === editor.designH;\n      const k2 = same ? 1 : Math.min(editor.designW / t2.board.w, editor.designH / t2.board.h);\n      const map = (x2, y2) => same ? { x: x2, y: y2 } : { x: editor.designW / 2 + (x2 - t2.board.w / 2) * k2, y: editor.designH / 2 + (y2 - t2.board.h / 2) * k2 };\n      const bc2 = map(t2.base.cx, t2.base.cy);\n      const s3 = base.scaleX * t2.base.w * k2 / Math.max(1e-6, base.getScaledWidth());\n      base.set({ scaleX: s3, scaleY: s3 });\n      base.setCoords();\n      const now = base.getCenterPoint();\n      base.set({ left: base.left + bc2.x - now.x, top: base.top + bc2.y - now.y });\n      base.setCoords();\n      const snap = JSON.parse(editor._snapshot());\n      const baseJson = snap.objects.find((o2) => o2.__base);\n      const objs = t2.objects.filter((o2) => o2 && typeof o2 === \"object\" && !o2.__base).map((o2) => {\n        if (same) return o2;\n        const p2 = map(o2.left || 0, o2.top || 0);\n        return Object.assign({}, o2, { left: p2.x, top: p2.y, scaleX: (o2.scaleX == null ? 1 : o2.scaleX) * k2, scaleY: (o2.scaleY == null ? 1 : o2.scaleY) * k2 });\n      });\n      const i2 = Math.max(0, Math.min(objs.length, t2.base.index | 0));\n      snap.objects = objs.slice(0, i2).concat([baseJson], objs.slice(i2));\n      await loadDesignData(editor, modeSanitize(snap));\n      editor.canvas.discardActiveObject();\n      editor.canvas.requestRenderAll();\n      syncSelection();\n    }\n    if (baseImg && !bootState && !bootRestored) {\n      withBootVeil(placeBaseImage().then(() => hostText && restoreHostText(hostText).catch((err) => console.warn(\"studio-v2: host text restore failed\", err))).catch((err) => console.error(\"studio-v2: base image failed to load\", err)));\n    }\n    if (mode) {\n      const solo = [...mode.tools].filter((t2) => TOOL_KIND[t2]);\n      if (solo.length === 1 && ui2.root.clientWidth >= 768) openPane(solo[0]);\n    }\n    try {\n      (window.NinjaStudio || (window.NinjaStudio = {})).__editor = editor;\n    } catch (e24) {\n    }\n    installDiagnostics();\n    track(\"open_\" + surface);\n    const warmGlyphs = () => prewarmGlyphEngine();\n    if (\"requestIdleCallback\" in window) requestIdleCallback(warmGlyphs, { timeout: 8e3 });\n    else setTimeout(warmGlyphs, 4e3);\n    const shell = installShell({\n      host,\n      root: ui2.root,\n      ui: ui2,\n      editor,\n      api: {\n        openPane,\n        closePanel,\n        getActivePane: () => activePane,\n        discardSelection: () => {\n          editor.canvas.discardActiveObject();\n          editor.canvas.requestRenderAll();\n          syncSelection();\n        },\n        openMoreMenu: () => {\n          const o2 = editor.canvas.getActiveObject();\n          if (!o2) return;\n          const ar2 = ui2.area.getBoundingClientRect();\n          openMenu(ar2.width / 2 - 112, ar2.height - 320);\n        },\n        openZoomTray,\n        toolAllowed\n        // mode gate for the stripe's Layers chip\n      }\n    });\n    return {\n      editor,\n      addText: (family) => {\n        if (!kindAllowed(\"text\")) return refuse(\"text\");\n        const t2 = editor.addText(family || currentFamily);\n        trackAdd(\"text_add\");\n        return t2;\n      },\n      destroy() {\n        for (const [t2, ty, fn2, o2] of tracked.splice(0)) t2.removeEventListener(ty, fn2, o2);\n        for (const fn2 of cleanups.splice(0)) {\n          try {\n            fn2();\n          } catch (e24) {\n          }\n        }\n        endPanMode();\n        shell.destroy();\n        editor.destroy();\n        ui2.root.remove();\n        host.classList.remove(\"nsv2-host\");\n      }\n    };\n  }\n  return __toCommonJS(src_exports);\n})();\nNinjaStudio.version='20261104-005529';\n"],
  "mappings": "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,QAAS,OAAQ,MAAM,EACzC,OAAO,OAAO,QAAS,UAAW,UAAU,EAC5C,SAAS,OAAO,OAAQ,SAAU,MAAM,EACxC,KAAK,OAAO,OAAQ,QAAS,SAAU,MAAO,aAAc,YAAa,OAAQ,OAAQ,YAAa,IAAK,QAAS,KAAM,KAAM,KAAM,QAAS,UAAW,WAAY,UAAW,QAAS,IAAI,EAC9L,MAAM,KAAO,GAAG,MAAO,WAAW,EAClC,YAAK,OAAO,KAAM,MAAO,SAAU,IAAI,EACvC,KAAK,OAAO,OAAQ,IAAI,EACxB,KAAK,YAAY,IAAI,EACd,CACL,KACA,OACA,QACA,QACA,OACA,SACA,QACA,SACA,QACA,QACA,gBACA,QACA,cACA,WACA,SACA,QACA,QACA,QACA,MACA,MACA,QACA,WACA,eACA,gBACA,eACA,MACA,SACA,aACA,QACA,OACA,QACA,SACA,MACA,SACA,SACA,OACA,YACA,YACA,UACA,QACA,SACA,SACA,QACA,SACA,SACA,WACA,QACA,gBACA,WACA,UACA,KACA,SACA,MACA,WACA,SACA,WACA,eACA,UACA,aACA,WACA,SACA,SACA,YACA,SACA,UACA,WACA,SACA,SACA,aACA,YACA,cACA,iBACA,YACA,aACA,YACA,YACA,gBACA,kBACA,iBACA,YACA,YACA,aACA,aACA,iBACA,kBACA,WACA,WACA,YACA,YACA,UACA,QACA,QACA,WACA,WACA,WACA,aACA,OACA,MACA,MACA,OACA,QACA,SACA,SACA,WACA,aACA,WACA,YACA,aACA,aACA,WACA,YACA,aACA,aACA,cACA,aACA,cACA,QACA,WACA,SACA,YACA,eACA,aACA,YACA,eACA,YACA,aACA,UACA,aACA,WACA,cACA,QACA,QACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,SACA,QACA,OACA,QACA,SACA,OACA,UACA,SACA,WACA,SACA,QACA,QACA,SACA,QACA,UACA,WACA,QACA,OACA,OACA,WACA,WACA,YACA,YACA,UACA,UACA,cACA,UACA,UACA,UACA,WACA,QACA,UACA,UACA,SACA,OACA,SACA,UACA,OACA,MACA,YACA,eACA,cACA,eACA,gBACA,YACA,eACA,cACA,mBACA,kBACA,mBACA,eACA,kBACA,iBACA,mBACA,gBACA,UACA,aACA,WACA,YACA,SACA,UACA,eACA,iBACA,WACA,cACA,YACA,gBACA,YACA,WACA,UACA,QACA,SACA,SACA,WACA,UACA,WACA,UACA,WACA,UACA,aACA,KACA,OACA,aACA,cACA,YACA,eACA,QACA,UACA,SACA,QACA,SACA,QACA,OACA,SACA,cACA,aACA,UACA,YACA,iBACA,mBACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,eACA,aACA,aACA,WACA,SACA,YACA,cACA,YACA,QACA,UACA,aACA,UACA,QACA,WACA,SACA,WACA,WACA,YACA,UACA,aACA,SACA,OACA,SACA,KACA,SACA,OACA,KACA,SACA,WACA,UACA,YACA,eACA,QACA,SACA,QACA,WACA,SACA,OACA,OACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,gBACA,UACA,QACA,UACA,gBACA,WACA,UACA,QACA,aACA,cACA,WACA,aACA,MACA,YACA,SACA,KACA,GAAI,IACJ,KACA,OACA,KACA,MACA,MACA,OACA,KACA,SACA,UACA,QACA,QACA,UACA,YACA,SACF,CACF,CAGA,IAAI,UAAY,GAAK,IACjB,SAAW,IACX,UAAY,IAChB,SAAS,aAAa,IAAK,CACzB,MAAM,GAAK,OAAO,KAAO,EAAE,EAC3B,MAAI,CAAC,WAAW,KAAK,EAAE,GAAK,GAAG,QAAQ,IAAI,SAAS,IAAM,GAAW,GAC9D,GAAG,QAAQ,sBAAuB,KAAO,QAAQ,CAC1D,CACA,SAAS,iBAAiB,IAAK,CAE7B,OADa,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,MAAM,EAAE,KAAK,IAAI,SAAS,EACrD,qBAAuB,SACvC,CACA,IAAI,UAAY,KAChB,SAAS,UAAW,CAClB,GAAI,UAAW,OAAO,UACtB,UAAY,IAAI,WAAW,GAAG,E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",
  "names": []
}
