{
  "version": 3,
  "sources": ["/cdn/shop/t/1064/assets/bysize-v4.js?auto=format%2Ccompress"],
  "sourcesContent": ["(() => {\n  // src/store.js\n  var state = {\n    status: \"empty\",\n    // empty | uploading | uploaded\n    mode: \"single\",\n    // single | multi\n    // rows carry NO price \u2014 unit/total live in state.pricing.rows (pricing is\n    // the sole writer there; sizing renders its cells from it, matched by\n    // fileId + row index). File dims: widthIn/heightIn canonical; the ported\n    // pipeline's inW/inH are stamped as aliases at record creation.\n    files: [],\n    // [{ id, name, type, s3Url, imgixUrl, widthIn, heightIn, rows: [{ w, h, qty, variantId, mode }], designNote }]\n    activeFileId: null,\n    // which file the page preview/tools show; null => files[0]\n    // LIVE TAB SEMANTICS (Owen 2026-07-07, ported from bySize_popular.js):\n    // custom and popular rows are SEPARATE persistent lists (row.mode tags\n    // them; missing mode reads as 'custom'). sizeTab picks which list renders,\n    // prices, previews and CHECKS OUT \u2014 active-tab-only at add-to-cart\n    // (deliberate delta: live's edited-both-tabs cross-add quirk NOT ported).\n    sizeTab: \"custom\",\n    // custom | popular \u2014 written by sizing on tab switch\n    precut: false,\n    designNotes: \"\",\n    cartQty: 0,\n    // cumulative DTF/UV qty already in cart (tier input); seeded from cfg.cartQty at boot (main.js)\n    family: \"dtf\",\n    // dtf | uv | sticker | precut | puff | cling \u2014 set once at boot from cfg\n    options: {},\n    // family option selections, e.g. { shape:'circle', finish:'gloss' } (empty for dtf)\n    pricing: { model: \"cumulative\", rows: [], total: 0, tier: null },\n    // written ONLY by pricing; rows: [{fileId,w,h,qty,unit,total}]\n    gangHandoffUrl: \"\"\n    // last gang-too-small upload's url; the uploader's DTF-by-Size button passes it (?file=). Cleared on reset.\n  };\n  var listeners = /* @__PURE__ */ new Set();\n  function getState() {\n    return state;\n  }\n  function update(patch) {\n    Object.assign(state, patch);\n    emit(patch);\n  }\n  function subscribe(fn) {\n    listeners.add(fn);\n    return () => listeners.delete(fn);\n  }\n  function emit(patch) {\n    for (const fn of listeners) fn(state, patch);\n  }\n  function reset() {\n    update({\n      status: \"empty\",\n      mode: \"single\",\n      files: [],\n      activeFileId: null,\n      precut: false,\n      designNotes: \"\",\n      options: {},\n      gangHandoffUrl: \"\",\n      pricing: { model: state.pricing.model, rows: [], total: 0, tier: null }\n    });\n    announce(\"reset\", {});\n  }\n  function announce(name, detail) {\n    document.dispatchEvent(new CustomEvent(`bsv4:${name}`, { detail, bubbles: false }));\n  }\n\n  // src/config.js\n  function parseImgixMatrix(dsl) {\n    const out = {};\n    if (!dsl || typeof dsl !== \"string\") return out;\n    for (const line of dsl.split(\"\\n\")) {\n      const ci = line.indexOf(\":\");\n      if (ci < 1) continue;\n      const ext = line.slice(0, ci).trim().toLowerCase();\n      if (!ext) continue;\n      const entry = {};\n      for (const seg of line.slice(ci + 1).split(\";\")) {\n        const ei = seg.indexOf(\"=\");\n        if (ei < 1) continue;\n        const k = seg.slice(0, ei).trim();\n        let v = seg.slice(ei + 1).trim();\n        if (v === \"true\") v = true;\n        else if (v === \"false\") v = false;\n        entry[k] = v;\n      }\n      if (Object.keys(entry).length) out[ext] = entry;\n    }\n    return out;\n  }\n  function parsePopularCaps(dsl) {\n    const out = [];\n    if (!dsl || typeof dsl !== \"string\") return out;\n    for (const line of dsl.split(\"\\n\")) {\n      const ci = line.indexOf(\":\");\n      if (ci < 1) continue;\n      const size = line.slice(0, ci).trim().toLowerCase();\n      const sm = size.match(/^(\\d+(?:\\.\\d+)?)\\s*x\\s*(\\d+(?:\\.\\d+)?)$/);\n      if (!sm) continue;\n      const caps = { w: parseFloat(sm[1]), h: parseFloat(sm[2]) };\n      for (const seg of line.slice(ci + 1).split(\",\")) {\n        const ei = seg.indexOf(\"=\");\n        if (ei < 1) continue;\n        const k = seg.slice(0, ei).trim();\n        const v = parseFloat(seg.slice(ei + 1));\n        if (k === \"max_w\" && !isNaN(v)) caps.maxW = v;\n        if (k === \"max_h\" && !isNaN(v)) caps.maxH = v;\n      }\n      out.push(caps);\n    }\n    return out;\n  }\n  function readConfig() {\n    const el = document.getElementById(\"bsv4-config\");\n    const cfg7 = el ? JSON.parse(el.textContent) : {};\n    if (cfg7.preview) {\n      cfg7.preview.imgix = parseImgixMatrix(cfg7.preview.imgixMatrix);\n      const _j = cfg7.preview.imgix.jpg;\n      if (_j) {\n        const _rOrder = String(_j.order || \"\").replace(\"[imgIx]\", \"[imgIx]fm=png&\");\n        for (const _e of [\"webp\", \"heic\", \"avif\", \"psd\", \"gif\", \"bmp\"]) {\n          if (!cfg7.preview.imgix[_e]) cfg7.preview.imgix[_e] = { ..._j, order: _rOrder };\n        }\n      }\n      cfg7.preview.imgixSingle = cfg7.preview.imgixMatrixSingle ? parseImgixMatrix(cfg7.preview.imgixMatrixSingle) : null;\n      const _sj = cfg7.preview.imgixSingle && cfg7.preview.imgixSingle.jpg;\n      if (_sj) {\n        const _sOrder = String(_sj.order || \"\").replace(\"[imgIx]\", \"[imgIx]fm=png&\");\n        for (const _e of [\"webp\", \"heic\", \"avif\", \"psd\", \"gif\", \"bmp\"]) {\n          if (!cfg7.preview.imgixSingle[_e]) cfg7.preview.imgixSingle[_e] = { ..._sj, order: _sOrder };\n        }\n      }\n    }\n    if (Array.isArray(cfg7.sizing)) {\n      for (const s of cfg7.sizing) s.popular = parsePopularCaps(s.popularCaps);\n    }\n    if (!cfg7.imgixParams || !Object.keys(cfg7.imgixParams).length) {\n      cfg7.imgixParams = cfg7.preview ? cfg7.preview.imgix : {};\n    }\n    return cfg7;\n  }\n\n  // src/ported/pipeline.js\n  var API_URL = \"https://hpz51rjda5.execute-api.us-east-1.amazonaws.com/production\";\n  var IMGIX_HOST = \"ninjauploads-production.imgix.net\";\n  var S3_HOST = \"ninja-services-production-ninjauploadss3bucket-zks2mguobhe4.s3.amazonaws.com\";\n  function buildUploadName(fileName) {\n    const nameOnly = fileName.split(\".\")[0].toLowerCase().replace(/[^a-z0-9]/gi, \"-\").replace(/-+/g, \"-\").replace(/^-|-$/g, \"\");\n    const extension = /\\.[a-z0-9]{1,5}$/i.test(fileName) ? fileName.split(\".\").pop() : \"png\";\n    return `${nameOnly}____image_${Date.now()}_${Math.floor(Math.random() * 1e3)}.${extension}`;\n  }\n  async function getPresignedUploadUrl(fileName, fileType) {\n    const res = await fetch(\n      `${API_URL}/uploads/getPresignedUploadUrl?file_name=${encodeURIComponent(fileName)}&file_type=${encodeURIComponent(fileType)}`\n    );\n    if (!res.ok) throw new Error(`presign failed (${res.status})`);\n    return res.json();\n  }\n  function putToS3(presignedUrl, file, onProgress, onXhr) {\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      xhr.open(\"PUT\", presignedUrl);\n      xhr.upload.onprogress = (e) => {\n        if (e.lengthComputable && onProgress) onProgress(e.loaded / e.total);\n      };\n      xhr.onload = () => xhr.status === 200 ? resolve() : reject(new Error(`S3 PUT ${xhr.status}`));\n      xhr.onerror = () => reject(new Error(\"S3 PUT network error\"));\n      xhr.onabort = () => reject(Object.assign(new Error(\"upload cancelled\"), { name: \"AbortError\" }));\n      if (onXhr) onXhr(xhr);\n      xhr.send(file);\n    });\n  }\n  var crcTable;\n  function crc32Buf(buf) {\n    if (!crcTable) {\n      crcTable = new Int32Array(256);\n      for (let n = 0; n < 256; n++) {\n        let c = n;\n        for (let k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;\n        crcTable[n] = c;\n      }\n    }\n    let crc = -1;\n    for (let i = 0; i < buf.length; i++) crc = crc >>> 8 ^ crcTable[(crc ^ buf[i]) & 255];\n    return crc ^ -1;\n  }\n  async function crc32Hex(file) {\n    const buf = new Uint8Array(await file.arrayBuffer());\n    return (crc32Buf(buf) >>> 0).toString(16);\n  }\n  function saveFileToUser({ customerId, productId, fileRecord, gangsheet }) {\n    if (!customerId) return;\n    const { inW, inH, imgixUrl, uploadName, crc } = fileRecord;\n    if (!crc || !uploadName || !inW || !inH || !imgixUrl) return;\n    fetch(`${API_URL}/uploads/saveData`, {\n      method: \"POST\",\n      body: JSON.stringify([\n        {\n          variant_title: `${inW}x${inH}`,\n          file: imgixUrl,\n          customer_id: customerId,\n          file_name: uploadName,\n          file_crc: crc,\n          product_id: productId,\n          // Gang-sheet upload flow tags saves as gang sheets so they categorize\n          // right + surface in the gang-only Previous Designs picker (cfg.gangSheet).\n          gangsheet: !!gangsheet\n        }\n      ])\n    }).catch(() => {\n    });\n  }\n  var PRINT_DPI = 300;\n  var ntmLoading = null;\n  function ensureNTMeasure() {\n    if (typeof window === \"undefined\") return Promise.resolve(null);\n    if (window.NTMeasure) return Promise.resolve(window.NTMeasure);\n    if (!ntmLoading) {\n      ntmLoading = new Promise((resolve) => {\n        const sib = document.querySelector('script[src*=\"bysize-v4\"]');\n        if (!sib || !sib.src) {\n          resolve(null);\n          return;\n        }\n        const s = document.createElement(\"script\");\n        s.src = sib.src.split(\"?\")[0].replace(/[^/]+$/, \"nt-measure.js\");\n        s.onload = () => resolve(window.NTMeasure || null);\n        s.onerror = () => resolve(null);\n        document.head.appendChild(s);\n      });\n    }\n    return ntmLoading;\n  }\n  async function resolveDimensions(fileRecord, previewParams, opts) {\n    const NTM = await ensureNTMeasure();\n    const m = NTM ? await NTM.measure({\n      imgixUrl: fileRecord.imgixUrl,\n      ext: fileRecord.ext,\n      s3Key: fileRecord.uploadName,\n      // Gang sheets quote at full sheet size via the detect service (no imgix\n      // render clamp on large sheets) \u2014 see nt-measure.js pageBox branch.\n      pageBox: !!(opts && opts.pageBox)\n    }) : null;\n    if (!m) {\n      if (!NTM) {\n        console.error(\"bysize-v4: NTMeasure missing and self-heal load failed\");\n      }\n      return {\n        pxW: PRINT_DPI,\n        pxH: PRINT_DPI,\n        inW: \"1.00\",\n        inH: \"1.00\",\n        measureFailed: true\n      };\n    }\n    return {\n      pxW: m.pxW,\n      pxH: m.pxH,\n      inW: m.inW.toFixed(2),\n      inH: m.inH.toFixed(2),\n      measureFailed: false,\n      // render cap (nt-measure.js IMGIX_MAX_PX): true source px + whether the render was clamped\n      clamped: !!m.clamped,\n      srcPxW: m.srcPxW || 0,\n      srcPxH: m.srcPxH || 0\n    };\n  }\n  function applyRenderCap(record) {\n    if (!record || !record.clamped || record.bigFile) return false;\n    record.bigFile = true;\n    record.bgRemove = false;\n    record.superRes = false;\n    const p = record.params || {};\n    if (!/^(ai|eps|pdf|svg)$/i.test(record.ext || \"\") && typeof p.order === \"string\" && /\\[imgix\\]/i.test(p.order)) {\n      record.params = { ...p, order: \"[BOTH_S3]\" };\n    }\n    return true;\n  }\n\n  // src/ported/bgr.js\n  var BGR_MODELS = [\n    // imgixServed: imgix produces this removal from URL PARAMS, so the\n    // full-resolution ORDER url can reproduce it \u2014 no Lambda-hosted file needed,\n    // and crucially NO `w=2000` cap on what production prints (see\n    // applyBgrProps). As of 2026-07-29 that is ALL THREE models (\"mirror imgix\",\n    // Owen): imgix's bg-remove-model=3 IS fal-Ideogram \u2014 the same model the\n    // Lambda preview calls \u2014 so gram's production file is the untouched order\n    // url + the param, exactly like ix/pc, at full print resolution.\n    // \u26A0 gram's PREVIEW stays on the Lambda (small input, ~10s flat \u2014 see\n    // bg-removal-multi.js callBgRemoval). Its modelParam here feeds the\n    // PRODUCTION stamp and the engine-absent candidateUrl fallback only; that\n    // fallback renders model 3 cold on the full source (measured 45.8s at 25MP),\n    // acceptable for a rare fallback, never for the main picker path.\n    // \u26A0 Same-model contract: Lambda 'gram' and bg-remove-model=3 are both\n    // fal-Ideogram; if either side ever changes vendor, change both.\n    // \u26A0 ORDER IS THE PICKER'S SLOT ORDER and must match the engine's\n    // SLOT_ORDER in bg-removal-multi.js (['ix','pc','gram']): paintSlots uses\n    // THIS array while candidates are pending and the engine's res.all once the\n    // run lands. When the two disagreed (this array once read ix,gram,pc) the\n    // tiles visibly RESORTED mid-load and \"Option 2\" changed vendor identity\n    // (Owen 2026-07-30: tiles only collapse on a fail, never resort).\n    // \u26A0 gram reverted OFF imgixServed 2026-07-29: imgix does not compose trim\n    // with bg-remove-model=3 (full-frame output = wrong print size; measured\n    // 1902/2406/4000px across the three models on one source). gram production\n    // = the Lambda-hosted PNG + trim=colorUnlessAlpha (trim composes correctly\n    // on a plain alpha asset \u2014 Owen's pipeline). Re-add modelParam: 3 +\n    // imgixServed ONLY after imgix's composition fix is verified trimmed.\n    { key: \"ix\", label: \"IX\", modelParam: null, imgixServed: true },\n    { key: \"pc\", label: \"PC\", modelParam: 4, imgixServed: true },\n    { key: \"gram\", label: \"Gram\", modelParam: null }\n  ];\n  function candidateUrl(bareImgixUrl, model2) {\n    const base = `${bareImgixUrl.split(\"?\")[0]}?trim=colorUnlessAlpha&fm=png&w=2000&bg-remove=true`;\n    return model2.modelParam ? `${base}&bg-remove-model=${model2.modelParam}` : base;\n  }\n  var BGR_VERSION_PROP_LABELS = {\n    ix: \"_IX Version\",\n    gram: \"_Gram Version\",\n    pc: \"_PC Version\"\n  };\n  function applyBgrProps(properties, file) {\n    if (window.NtBgrStockProvider?.props(properties, file)) return properties;\n    if (!file.bgRemove || !file.bgrVersions || !file.bgrModel) return properties;\n    const chosen = file.bgrVersions[file.bgrModel];\n    if (!chosen) return properties;\n    const isVectorSource = /\\.(?:svg|eps|pdf|ai)(?:[?#]|$)/i.test(\n      file.uploadName || file.s3Url || \"\"\n    );\n    const model2 = BGR_MODELS.find((m) => m.key === file.bgrModel);\n    if (model2 && model2.imgixServed) {\n      if (model2.modelParam) {\n        for (const k of [\"Upload (Vector Files Preferred)\", \"_cartImg\"]) {\n          const v = properties[k];\n          if (typeof v === \"string\" && /[?&]bg-remove=true/.test(v) && !/[?&]bg-remove-model=/.test(v)) {\n            properties[k] = `${v}&bg-remove-model=${model2.modelParam}`;\n          }\n        }\n        if (model2.key === \"gram\") {\n          const up = properties[\"Upload (Vector Files Preferred)\"];\n          if (typeof up === \"string\" && /[?&]bg-remove-model=3/.test(up)) {\n            try {\n              new Image().src = `${up}${up.includes(\"?\") ? \"&\" : \"?\"}w=64`;\n            } catch (_) {\n            }\n          }\n        }\n      }\n    } else if (!isVectorSource) {\n      const sep = chosen.includes(\"?\") ? \"&\" : \"?\";\n      const sr = file.superRes ? \"&upscale=true\" : \"\";\n      properties[\"Upload (Vector Files Preferred)\"] = `${chosen}${sep}trim=colorUnlessAlpha&trim-tol=10${sr}`;\n      properties[\"_cartImg\"] = `${chosen}${sep}trim=colorUnlessAlpha&trim-tol=10&auto=compress&q=50&h=150`;\n    }\n    properties[\"_BG Removal Service\"] = BGR_MODELS.find((m) => m.key === file.bgrModel)?.label || file.bgrModel;\n    for (const m of BGR_MODELS) {\n      if (m.key === file.bgrModel) continue;\n      const url = file.bgrVersions[m.key];\n      if (url) properties[BGR_VERSION_PROP_LABELS[m.key]] = url;\n    }\n    return properties;\n  }\n\n  // src/ported/treat-props.js\n  var VECTOR_RE = /\\.(svg|eps|pdf|ai)(?:[?#]|$)/i;\n  var UPLOAD_KEY = \"Upload (Vector Files Preferred)\";\n  var ORIG_KEY = \"_Original Image\";\n  var PAINTED_RE = /[?&](duotone|monochrome)=/;\n  function applyPaintProps(properties, file) {\n    const paint = file.ntPaint;\n    if (!paint) return;\n    properties[\"_Ink Paint\"] = `${paint.color} (${paint.mode})`;\n    if (VECTOR_RE.test(String(file.uploadName || file.s3Url || \"\"))) return;\n    if (paint.hostedUrl) {\n      if (!properties[ORIG_KEY]) properties[ORIG_KEY] = file.originalUploadReference || file.s3Url;\n      properties[UPLOAD_KEY] = `${paint.hostedUrl}?trim=colorUnlessAlpha`;\n      properties[\"_cartImg\"] = `${paint.hostedUrl}?trim=colorUnlessAlpha&fm=png&auto=compress&q=50&h=150`;\n      return;\n    }\n    if (!paint.params) return;\n    const appendTo = (key) => {\n      const u = String(properties[key] || \"\");\n      if (!u || u.indexOf(\"imgix\") === -1 || PAINTED_RE.test(u)) return;\n      properties[key] = u + (u.indexOf(\"?\") > -1 ? \"&\" : \"?\") + paint.params;\n    };\n    appendTo(UPLOAD_KEY);\n    appendTo(\"_cartImg\");\n  }\n\n  // src/ported/film-paint.js\n  var paintMap = null;\n  function initFilmPaint(cfg7) {\n    paintMap = cfg7 && cfg7.filmPaint && typeof cfg7.filmPaint === \"object\" ? cfg7.filmPaint : null;\n  }\n  function pickedFilm() {\n    try {\n      return typeof window !== \"undefined\" && typeof window.__bsv4Opt2 === \"function\" ? window.__bsv4Opt2() || null : null;\n    } catch (e) {\n      return null;\n    }\n  }\n  function rgbOf(hex) {\n    const m = /^#?([0-9a-f]{6})$/i.exec(String(hex || \"\").trim());\n    if (!m) return null;\n    const n = parseInt(m[1], 16);\n    return [n >> 16 & 255, n >> 8 & 255, n & 255];\n  }\n  var hexOf = (c) => c.map((v) => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, \"0\")).join(\"\");\n  function filmPaintParams() {\n    if (!paintMap) return \"\";\n    const film = pickedFilm();\n    const p = film && paintMap[film];\n    const rgb = p && rgbOf(p.hex);\n    if (!rgb) return \"\";\n    const [r, g, b] = rgb;\n    const shaded = p.mode === \"shaded\";\n    const lo = shaded ? hexOf([r * 0.62, g * 0.62, b * 0.62]) : hexOf(rgb);\n    const hi = shaded ? hexOf([r + (255 - r) * 0.3, g + (255 - g) * 0.3, b + (255 - b) * 0.3]) : lo;\n    const alpha = p.alpha != null && p.alpha !== \"\" && isFinite(+p.alpha) ? Math.max(0, Math.min(100, Math.round(+p.alpha))) : 100;\n    if (!alpha) return \"\";\n    return `duotone=${lo},${hi}&duotone-alpha=${alpha}`;\n  }\n  function withFilmPaint(url) {\n    const q = filmPaintParams();\n    if (!q || !url || typeof url !== \"string\" || url.indexOf(\"imgix\") === -1 || /[?&]duotone=/.test(url)) return url;\n    return url + (url.indexOf(\"?\") > -1 ? \"&\" : \"?\") + q;\n  }\n\n  // src/ported/cart-payload.js\n  function isValidOrderRef(v) {\n    if (v === null || v === void 0) return false;\n    let s = String(v).trim();\n    if (!s) return false;\n    s = s.replace(/^previously\\s+on\\s+order\\s*#?\\s*/i, \"\").trim();\n    if (!s) return false;\n    return /^[A-Z]{2,4}-?\\d{4,}$/i.test(s);\n  }\n  function parseOrderString(imgIxURL, s3URL, order, selectedOptions = \"\") {\n    const result = { imgIx: false, imgIx_params: \"\", s3: false, s3_params: \"\" };\n    selectedOptions = (selectedOptions || \"\").replace(/^[?&]+/, \"\");\n    const normalizePart = (part) => part.replace(/^(\\[(?:imgIx|s3|both_imgix|both_s3)\\])([^?].+)/i, \"$1?$2\");\n    const buildUrl = (baseURL, rawParams, appendSelected) => {\n      let url = baseURL;\n      if (rawParams) url += rawParams;\n      if (appendSelected && selectedOptions) {\n        url += (rawParams.includes(\"?\") ? \"&\" : \"?\") + selectedOptions;\n      }\n      return url;\n    };\n    (order || \"\").split(\"&&\").forEach((rawPart) => {\n      const part = normalizePart(rawPart.trim());\n      const match = part.match(/\\[(imgIx|s3|both_imgix|both_s3)\\](\\?[^\\s]*)?/i);\n      if (!match) return;\n      const key = match[1].toLowerCase();\n      const rawParams = (match[2] || \"\").trim();\n      if (key === \"imgix\") {\n        result.imgIx = true;\n        result.imgIx_params = buildUrl(imgIxURL, rawParams, true);\n      } else if (key === \"s3\") {\n        result.s3 = true;\n        result.s3_params = buildUrl(s3URL, rawParams, false);\n      } else if (key === \"both_imgix\") {\n        result.imgIx = true;\n        result.s3 = true;\n        result.imgIx_params = buildUrl(imgIxURL, rawParams, true);\n        result.s3_params = buildUrl(imgIxURL, rawParams, true);\n      } else if (key === \"both_s3\") {\n        result.imgIx = true;\n        result.s3 = true;\n        result.imgIx_params = buildUrl(s3URL, rawParams, false);\n        result.s3_params = buildUrl(s3URL, rawParams, false);\n      }\n    });\n    return result;\n  }\n  function productionUpload(file) {\n    if (!file || !file.params || !file.params.order) return \"\";\n    const it = buildItem(file, { w: 1, h: 1, qty: 1, variantId: 0 }, { dryRun: true });\n    return it && it.properties && it.properties[\"Upload (Vector Files Preferred)\"] || \"\";\n  }\n  function toggleParams(file) {\n    if (!file.bgRemove && !file.superRes) return null;\n    let p = \"\";\n    if (file.bgRemove) p += \"&bg-remove=true\";\n    if (file.superRes) p += \"&upscale=true\";\n    return p;\n  }\n  var attribution = { designType: false, orderName: \"\", photoId: \"\" };\n  function setAttribution({ designType, orderName, photoId }) {\n    if (designType !== void 0) attribution.designType = designType;\n    if (orderName !== void 0) attribution.orderName = orderName;\n    if (photoId !== void 0) attribution.photoId = photoId;\n  }\n  function buildItem(file, row, { designNote, precut, popupSource, dryRun }) {\n    const properties = {};\n    const options = toggleParams(file) || file.currentOptions || \"\";\n    const orderProperty = parseOrderString(file.imgixUrl, file.s3Url, file.params.order, options);\n    if (orderProperty.imgIx) {\n      properties[\"Upload (Vector Files Preferred)\"] = orderProperty.imgIx_params || \"\";\n      if (!dryRun && attribution.designType && isValidOrderRef(attribution.photoId)) {\n        properties[\"design re-used\"] = `${attribution.photoId}`;\n        attribution.designType = false;\n        attribution.orderName = \"\";\n      }\n      if (!dryRun && attribution.designType === 1 && isValidOrderRef(attribution.orderName)) {\n        properties[\"design re-used\"] = `previously on order # ${attribution.orderName}`;\n        attribution.designType = false;\n        attribution.orderName = \"\";\n      }\n    }\n    const reorderRef = String(file.reorderOf || \"\").replace(/^#/, \"\").trim();\n    if (isValidOrderRef(reorderRef)) properties._reorder = `Design previously used on #${reorderRef}`;\n    if (orderProperty.s3) {\n      if (file.isReadyToPress === \"Yes\") {\n        properties[\"Upload (Vector Files Preferred)\"] = orderProperty.s3_params || \"\";\n      } else if (file.originalUploadReference) {\n        properties[\"_Original Image\"] = file.originalUploadReference;\n      } else {\n        properties[\"_Original Image\"] = orderProperty.s3_params || \"\";\n      }\n    }\n    properties[\"_cartImg\"] = withFilmPaint(`${file.imgixUrl}?${file.params.cart}${toggleParams(file) || file.currentOptions || \"\"}${file.rotate90 ? \"&rot=90\" : \"\"}`);\n    if (row.gang) {\n      const U = \"Upload (Vector Files Preferred)\";\n      const g = { \"_Terms Accepted\": \"Yes\" };\n      if (properties[U]) g[U] = properties[U];\n      if (properties._cartImg) g._cartImg = properties._cartImg.replace(/&bg-remove(?:-model)?=[^&]*/g, \"\");\n      if (properties._reorder) g._reorder = properties._reorder;\n      if (file.rotate90) g[\"_Rotate\"] = \"90\\xB0\";\n      if (file.renderedFrom) {\n        const rf = file.renderedFrom;\n        const fmt = (v) => String(Math.round(Number(v) * 100) / 100);\n        g[U] = rf.s3Url;\n        g[\"_Rendered Sheet\"] = orderProperty.s3_params || file.s3Url;\n        g[\"_orig_size\"] = `${fmt(rf.w)}x${fmt(rf.h)}`;\n        g[\"_final_size\"] = `${file.inW}x${file.inH}`;\n      }\n      return { id: row.variantId, quantity: row.qty, properties: g };\n    }\n    properties[\"Remove Background\"] = file.bgRemove ? \"Yes\" : \"No\";\n    properties[\"Super Resolution\"] = file.superRes ? \"Yes\" : \"No\";\n    Object.assign(properties, window.__bsv4ItemProps && window.__bsv4ItemProps(file, row) || {});\n    if (designNote) properties[\"Design Notes\"] = designNote;\n    if (row.dpiWarn) properties[\"DPI Warning\"] = \"Yes\";\n    if (row.mode === \"popular\") properties[\"_pop size\"] = \"Yes\";\n    if (precut) properties[\"Precut\"] = \"Yes\";\n    properties[\"_width\"] = String(row.w);\n    properties[\"_height\"] = String(row.h);\n    if ((row.w > 22 || row.h > 22) && !properties[\"_Gang Sheet\"]) properties[\"_By Size\"] = \"Oversized\";\n    if (file.isReadyToPress === \"Yes\") properties[\"_Ready to Press\"] = \"Yes\";\n    if (file.isRtpAiEdit === \"Yes\") properties[\"_Ready to Press with AI Edit\"] = \"Yes\";\n    if (file.isDesignStudio === \"Yes\") properties[\"_Design Studio\"] = \"Yes\";\n    if (file.addText && file.addText.layers && file.addText.layers.length) properties[\"_Text Added\"] = \"Yes\";\n    if (file.isAIImage) properties[\"AI Created\"] = \"Yes\";\n    if (file.isAIEdit) {\n      properties[\"AI Edit\"] = \"Yes\";\n      if (file.aiEditCount) properties[\"_AI Edit Count\"] = String(file.aiEditCount);\n    }\n    if (file.ntOrderProps) Object.assign(properties, file.ntOrderProps);\n    if (popupSource) properties[\"_popup_source\"] = \"dtf_popup\";\n    applyBgrProps(properties, file);\n    if (file.ntBgrProvider === \"ninja_ai\") properties._cartImg = withFilmPaint(properties._cartImg);\n    applyPaintProps(properties, file);\n    if (typeof window.__bsv4FinalArtwork === \"function\") {\n      const artwork = window.__bsv4FinalArtwork(file, row);\n      if (artwork != null) {\n        const valid = (value) => {\n          if (typeof value !== \"string\" || !value) return false;\n          try {\n            const url = new URL(value);\n            return url.protocol === \"https:\" && !url.username && !url.password && !url.hash;\n          } catch (_) {\n            return false;\n          }\n        };\n        if (!valid(artwork.uploadUrl) || !valid(artwork.cartImageUrl)) {\n          throw new Error(\"Finish preparing your artwork, then try again.\");\n        }\n        properties[\"Upload (Vector Files Preferred)\"] = artwork.uploadUrl;\n        properties._cartImg = artwork.cartImageUrl;\n      }\n    }\n    if (row.unlocked && window.__bsv4Stretch) window.__bsv4Stretch(properties, file, row);\n    return { id: row.variantId, quantity: row.qty, properties };\n  }\n\n  // src/ported/ai-edit.js\n  async function nbEdit(imageUrl, promptText, falKey, signal) {\n    const resp = await fetch(\"https://ruhg140mmf.execute-api.us-east-1.amazonaws.com/\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        model: \"gram-edit-45g\",\n        // codenamed request token (vendor-scrub Phase 4)\n        imageUrl,\n        prompt: promptText,\n        transparency: \"AUTO\"\n      }),\n      signal\n    });\n    if (!resp.ok) {\n      const txt = await resp.text().catch(() => \"\");\n      throw new Error(`AI edit request failed (${resp.status}): ${txt.slice(0, 200)}`);\n    }\n    const data = await resp.json();\n    if (!data || !data.url) throw new Error(\"AI edit response missing url\");\n    return data.url + (data.url.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + \"cs=strip\";\n  }\n\n  // src/uploader.js\n  var STUDIO_EXPORT_RE = /^design-studio-\\d{13}-\\d+/;\n  var EXT_MIME = {\n    png: \"image/png\",\n    jpg: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    ai: \"application/postscript\",\n    eps: \"application/postscript\",\n    pdf: \"application/pdf\",\n    tif: \"image/tiff\",\n    tiff: \"image/tiff\",\n    svg: \"image/svg+xml\",\n    webp: \"image/webp\",\n    heic: \"image/heic\",\n    heif: \"image/heif\",\n    avif: \"image/avif\",\n    psd: \"image/vnd.adobe.photoshop\",\n    gif: \"image/gif\",\n    bmp: \"image/bmp\",\n    jfif: \"image/jpeg\"\n    // JFIF is JPEG \u2014 normalized to jpg (rides the jpg path)\n  };\n  var MAX_BYTES = 5368709120;\n  var IMGIX_RENDER_EXTS = /^(webp|heic|heif|avif|psd|gif|bmp)$/;\n  var IMGIX_MAX_BYTES = 104857600;\n  var DEFAULT_MAX_FILES = 25;\n  var cfg;\n  var els;\n  var seq = 0;\n  var announcingStore = false;\n  var tabEventsWired = false;\n  var aiShimsInstalled = false;\n  var addAnotherGate = null;\n  function setAddAnotherGate(fn) {\n    addAnotherGate = fn;\n  }\n  function installAiHandoffShims() {\n    if (aiShimsInstalled) return;\n    aiShimsInstalled = true;\n    const w = window;\n    const toEntry = (d) => {\n      const url = String(d && (d.fileURL || d.url) || \"\").split(\"?\")[0];\n      if (!url) return null;\n      return {\n        url,\n        name: d && d.name || url.split(\"/\").pop(),\n        isAIImage: d && d.isAIImage || void 0,\n        isAIEdit: d && d.isAIEdit || void 0,\n        isDesignStudio: d && d.isDesignStudio || void 0,\n        isReadyToPress: d && d.isReadyToPress || void 0,\n        isRtpAiEdit: d && d.isRtpAiEdit || void 0\n      };\n    };\n    if (typeof w.getPresignedUploadUrl !== \"function\") {\n      w.getPresignedUploadUrl = getPresignedUploadUrl;\n    }\n    if (typeof w.nbEditRequest !== \"function\" && cfg && cfg.falKey) {\n      w.nbEditRequest = (imageUrl, promptText) => nbEdit(imageUrl, promptText, cfg.falKey);\n    }\n    if (!w.__dtfutFetchPatched && typeof w.fetch === \"function\") {\n      w.__dtfutFetchPatched = true;\n      const origFetch = w.fetch;\n      w.fetch = function(url, options) {\n        try {\n          const urlStr = typeof url === \"string\" ? url : url && url.url || \"\";\n          if (urlStr.indexOf(\"getGenerativeAiUploads.php\") !== -1) {\n            return origFetch.apply(this, arguments).then(\n              (resp) => resp.clone().json().then((data) => {\n                const capped = Array.isArray(data) ? data.slice(0, 3) : [];\n                if (capped.length > 0) w.__dtfutSkipNewAIGeneration = true;\n                return new Response(JSON.stringify(capped), {\n                  status: resp.status,\n                  headers: { \"Content-Type\": \"application/json\" }\n                });\n              }).catch(() => resp)\n            );\n          }\n          if (w.__dtfutSkipNewAIGeneration && urlStr.indexOf(\"postBatchGenerativeAiUpload.php\") !== -1) {\n            w.__dtfutSkipNewAIGeneration = false;\n            return Promise.resolve(\n              new Response(\"[]\", { status: 200, headers: { \"Content-Type\": \"application/json\" } })\n            );\n          }\n        } catch (e) {\n        }\n        return origFetch.apply(this, arguments);\n      };\n    }\n    if (typeof w.createFileObjectFromUrl !== \"function\") {\n      w.createFileObjectFromUrl = (url) => ({\n        name: String(url || \"\").split(\"?\")[0].split(\"/\").pop() || \"ai-image.png\",\n        fileURL: url\n      });\n    }\n    if (typeof w.singleFileManageByURL !== \"function\") {\n      w.singleFileManageByURL = (detail) => {\n        const e = toEntry(detail);\n        if (!e) return;\n        if (addAnotherGate && addAnotherGate({ entries: [e] })) return;\n        intakeFromUrls([e]);\n      };\n    }\n    if (typeof w.multiFilesManageByURL !== \"function\") {\n      w.multiFilesManageByURL = (files) => {\n        const entries = (files || []).map(toEntry).filter(Boolean);\n        if (!entries.length) return;\n        if (addAnotherGate && addAnotherGate({ entries })) return;\n        intakeFromUrls(entries);\n      };\n    }\n    if (typeof w.uploadFile !== \"function\") {\n      w.uploadFile = (file) => {\n        if (!file) return;\n        queueMicrotask(() => {\n          if (w.isAIImage) {\n            file.isAIImage = true;\n            w.isAIImage = false;\n          }\n          if (addAnotherGate && addAnotherGate({ files: [file] })) return;\n          intake([file]);\n        });\n      };\n    }\n    if (typeof w.manageFiles !== \"function\") {\n      w.manageFiles = (files) => {\n        if (!files || !files.length) return;\n        if (addAnotherGate && addAnotherGate({ files })) return;\n        intake(files);\n      };\n    }\n  }\n  function setSource(src) {\n    if (!els || !els.box) return;\n    for (const pill of els.box.querySelectorAll(\"[data-bsv4-source]\")) {\n      pill.classList.toggle(\"is-active\", pill.dataset.bsv4Source === src);\n    }\n    const titleEl = els.box.querySelector(\"[data-bsv4-title]\");\n    const activePill = els.box.querySelector(`[data-bsv4-source=\"${src}\"]`);\n    if (titleEl && activePill && activePill.dataset.bsv4TitleText) {\n      titleEl.textContent = activePill.dataset.bsv4TitleText;\n    }\n    const panelSrc = src === \"studio\" ? \"upload\" : src;\n    for (const panel of els.box.querySelectorAll(\"[data-bsv4-panel]\")) {\n      panel.hidden = panel.dataset.bsv4Panel !== panelSrc;\n    }\n    announce(\"source-changed\", { source: src });\n    if (src === \"ai\") {\n      document.dispatchEvent(\n        new CustomEvent(\"dtfut:tab-change\", { detail: { name: \"ai\" }, bubbles: true })\n      );\n    }\n  }\n  function initUploader(root2, config) {\n    cfg = config;\n    const box = root2.querySelector('[data-bsv4-block=\"upload_box\"]');\n    if (!box || !cfg.uploadBox) return;\n    if (box.dataset.bsv4UploaderBound === \"1\") return;\n    box.dataset.bsv4UploaderBound = \"1\";\n    els = {\n      root: root2,\n      box,\n      zone: box.querySelector(\"[data-bsv4-dropzone]\"),\n      input: box.querySelector(\"[data-bsv4-file-input]\")\n    };\n    if (!els.zone || !els.input) return;\n    els.ehead = box.querySelector(\"[data-bsv4-ehead]\");\n    els.esub = box.querySelector(\"[data-bsv4-esub]\");\n    els.dhead = els.zone.querySelector(\".bsv4-uploader__headline:not(.bsv4-uploader__ehead)\");\n    els.dhint = els.zone.querySelector(\".bsv4-uploader__hint:not(.bsv4-uploader__esub)\");\n    const errClose = box.querySelector(\"[data-bsv4-errclose]\");\n    if (errClose) errClose.addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      clearZoneError();\n    });\n    installCancelHook();\n    const entries = cfg.uploadBox.entries || {};\n    for (const [source, on] of [\n      [\"previous\", entries.previousDesigns],\n      [\"ai\", entries.aiCreate],\n      [\"studio\", entries.designStudio]\n    ]) {\n      const pill = box.querySelector(`[data-bsv4-source=\"${source}\"]`);\n      if (pill) pill.hidden = on === false;\n    }\n    els.input.accept = allowedExts().map((e) => `.${e}`).join(\",\");\n    els.input.multiple = resolveIntakeCap(cfg) > 1;\n    els.zone.addEventListener(\"click\", () => els.input.click());\n    box.addEventListener(\"click\", (e) => {\n      const pill = e.target.closest(\"[data-bsv4-source]\");\n      if (!pill) return;\n      e.preventDefault();\n      const src = pill.dataset.bsv4Source;\n      setSource(src);\n      if (e.isTrusted && src === \"upload\" && root2.dataset.state === \"empty\" && els.zone.offsetParent !== null) {\n        els.input.click();\n      }\n    });\n    els.zone.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        els.input.click();\n      }\n    });\n    els.zone.addEventListener(\"dragover\", (e) => {\n      e.preventDefault();\n      clearZoneError();\n      els.zone.classList.add(\"is-dragover\");\n    });\n    els.zone.addEventListener(\"dragleave\", () => els.zone.classList.remove(\"is-dragover\"));\n    els.zone.addEventListener(\"drop\", (e) => {\n      e.preventDefault();\n      els.zone.classList.remove(\"is-dragover\");\n      if (e.dataTransfer && e.dataTransfer.files.length) intake(e.dataTransfer.files);\n    });\n    els.input.addEventListener(\"change\", () => {\n      if (els.input.files.length) intake(els.input.files);\n    });\n    initPageDrop();\n    box.addEventListener(\"paste\", (e) => {\n      const pasted = e.clipboardData && e.clipboardData.files;\n      if (pasted && pasted.length) {\n        e.preventDefault();\n        intake(pasted);\n      }\n    });\n    const addZone = root2.querySelector(\"[data-bsv4-add-zone]\");\n    if (addZone && addZone.dataset.bsv4UploaderBound !== \"1\") {\n      addZone.dataset.bsv4UploaderBound = \"1\";\n      addZone.addEventListener(\"click\", () => els.input.click());\n      addZone.addEventListener(\"dragover\", (e) => {\n        e.preventDefault();\n        addZone.classList.add(\"is-dragover\");\n      });\n      addZone.addEventListener(\"dragleave\", () => addZone.classList.remove(\"is-dragover\"));\n      addZone.addEventListener(\"drop\", (e) => {\n        e.preventDefault();\n        addZone.classList.remove(\"is-dragover\");\n        if (e.dataTransfer && e.dataTransfer.files.length) intake(e.dataTransfer.files);\n      });\n    }\n    installAiHandoffShims();\n    if (!tabEventsWired) {\n      tabEventsWired = true;\n      document.addEventListener(\"bsv4:files-received\", () => setSource(\"upload\"));\n    }\n    if (!announcingStore) {\n      announcingStore = true;\n      let known = getState().files.map((f) => f.id);\n      subscribe((state2, patch) => {\n        if (patch.status === \"empty\" && els) {\n          els.zone.classList.remove(\"is-dragover\");\n          clearZoneError();\n        }\n        if (!(\"files\" in patch)) return;\n        const ids = state2.files.map((f) => f.id);\n        for (const f of state2.files) {\n          if (!known.includes(f.id)) announce(\"file-added\", { id: f.id, name: f.name });\n        }\n        for (const id of known) {\n          if (!ids.includes(id)) announce(\"file-removed\", { id });\n        }\n        known = ids;\n      });\n    }\n  }\n  var pageDropWired = false;\n  var pageDropActive = false;\n  function isFileDrag(e) {\n    const types = e.dataTransfer && e.dataTransfer.types;\n    if (!types) return false;\n    for (const t of types) if (t === \"Files\") return true;\n    return false;\n  }\n  function showDropScreen() {\n    if (document.querySelector(\".bsv4-dropscreen\")) return;\n    const el = document.createElement(\"div\");\n    el.className = \"bsv4-dropscreen\";\n    const plural = els && els.input && els.input.multiple;\n    el.innerHTML = `<div class=\"bsv4-dropscreen__inner\"><div class=\"bsv4-dropscreen__glyph w3_bg\" aria-hidden=\"true\"></div><div class=\"bsv4-dropscreen__title\">Drop your file${plural ? \"(s)\" : \"\"}</div><div class=\"bsv4-dropscreen__sub\">anywhere to upload</div></div>`;\n    document.body.appendChild(el);\n  }\n  function clearDropScreen() {\n    const el = document.querySelector(\".bsv4-dropscreen\");\n    if (el) el.remove();\n    pageDropActive = false;\n  }\n  function initPageDrop() {\n    if (pageDropWired) return;\n    pageDropWired = true;\n    document.addEventListener(\n      \"dragover\",\n      (e) => {\n        if (!isFileDrag(e)) return;\n        e.preventDefault();\n        const st = getState();\n        const overlayOk = st.status === \"empty\" || cfg.gangAutosize && st.status === \"uploaded\" && st.mode !== \"multi\" && st.files.length;\n        if (overlayOk && !pageDropActive) {\n          pageDropActive = true;\n          showDropScreen();\n        }\n      },\n      true\n    );\n    document.addEventListener(\n      \"dragleave\",\n      (e) => {\n        if (!e.relatedTarget) clearDropScreen();\n      },\n      true\n    );\n    document.addEventListener(\"dragend\", clearDropScreen, true);\n    document.addEventListener(\n      \"drop\",\n      (e) => {\n        if (isFileDrag(e)) e.preventDefault();\n        const dropRobust = cfg.gangAutosize && isFileDrag(e) && getState().status === \"empty\";\n        const active = pageDropActive || dropRobust;\n        clearDropScreen();\n        if (!active) return;\n        e.stopImmediatePropagation();\n        const files = e.dataTransfer && e.dataTransfer.files;\n        if (!files || !files.length) return;\n        const st2 = getState();\n        if (cfg.gangAutosize && st2.status === \"uploaded\" && st2.mode !== \"multi\" && st2.files.length) {\n          if (window.__bsv4RightsGate && window.__bsv4RightsGate()) return;\n          if (addAnotherGate && addAnotherGate({ files })) return;\n        }\n        intake(files);\n      },\n      true\n    );\n  }\n  function resolveIntakeCap(config) {\n    const c = config || {};\n    const entryOn = c.uploadBox && c.uploadBox.entries ? c.uploadBox.entries.multiupload !== false : true;\n    if (!c.modal || !entryOn) return 1;\n    const n = Number(c.modal.maxFiles);\n    return Number.isFinite(n) && n > 0 ? n : DEFAULT_MAX_FILES;\n  }\n  function fileIntakeError(file, exts) {\n    const ext = String((file && file.name || \"\").split(\".\").pop() || \"\").toLowerCase();\n    const okExt = exts.includes(ext);\n    const okMime = exts.some((e) => {\n      const mime = EXT_MIME[e];\n      return mime && file.type && file.type.indexOf(mime) !== -1;\n    });\n    if (!okExt && !okMime) {\n      return exts.length ? `File type not supported. Allowed: ${exts.map((e) => e.toUpperCase()).join(\", \")}` : \"File type not supported.\";\n    }\n    if (file.size > MAX_BYTES) return \"File must be 5 GB or less\";\n    if (IMGIX_RENDER_EXTS.test(ext) && file.size > IMGIX_MAX_BYTES)\n      return \"That file is too large to process \\u2014 please upload a version under 100 MB (export as PNG or TIFF).\";\n    return null;\n  }\n  function allowedExts() {\n    const list = cfg && cfg.uploadBox && Array.isArray(cfg.uploadBox.fileTypes) ? cfg.uploadBox.fileTypes : [];\n    return list.map((e) => String(e).toLowerCase().replace(/^\\./, \"\")).filter(Boolean);\n  }\n  function dtfHandoffExts() {\n    const suggest = cfg && Array.isArray(cfg.dtfSuggestTypes) ? cfg.dtfSuggestTypes : [];\n    const gang = allowedExts();\n    return suggest.map((e) => String(e).toLowerCase().replace(/^\\./, \"\")).filter((e) => e && !gang.includes(e));\n  }\n  async function intake(fileList) {\n    if (!els) return;\n    if (getState().status === \"uploading\" && getState().mode !== \"multi\") return;\n    let files = Array.from(fileList);\n    els.input.value = \"\";\n    const cap = resolveIntakeCap(cfg);\n    const existing = getState().files.length;\n    if (cap === 1 && existing + files.length > 1) {\n      surfaceUploadError(activeUploadZone(), \"single\", {\n        msg: existing ? \"This product takes one design at a time \\u2014 remove the current design first.\" : \"This product takes one design at a time \\u2014 only the first file was kept.\"\n      });\n      files = files.slice(0, Math.max(0, 1 - existing));\n      if (!files.length) return;\n    } else if (existing + files.length > cap) {\n      const skipped = existing + files.length - cap;\n      surfaceUploadError(activeUploadZone(), \"limit\", { count: existing + files.length, cap, skipped });\n      files = files.slice(0, cap - existing);\n      if (!files.length) return;\n    }\n    const exts = allowedExts();\n    const dtfExtras = dtfHandoffExts();\n    const accepted = [];\n    const dtfProbe = [];\n    let typeRejected = false;\n    let typeExt = \"\";\n    let otherReject = null;\n    for (const file of files) {\n      const err = fileIntakeError(file, exts);\n      if (err) {\n        const ext = String((file && file.name || \"\").split(\".\").pop() || \"\").toLowerCase();\n        if (cfg.gangSheet && dtfExtras.includes(ext) && file.size <= MAX_BYTES) {\n          dtfProbe.push(file);\n          continue;\n        }\n        if (/not supported/i.test(err)) {\n          typeRejected = true;\n          if (!typeExt) typeExt = \".\" + ext;\n        } else otherReject = err;\n        announce(\"file-rejected\", { name: file.name, error: err });\n        continue;\n      }\n      accepted.push(file);\n    }\n    if (accepted.some((f) => /\\.tga$/i.test(f.name))) {\n      let r;\n      try {\n        if (!window.NtTga) await new Promise((ok, no) => document.head.appendChild(Object.assign(document.createElement(\"script\"), { src: cfg.tgaJs, onload: ok, onerror: no })));\n        r = await window.NtTga.convertAll(accepted, announce);\n      } catch (e) {\n        r = { files: accepted.filter((f) => !/\\.tga$/i.test(f.name)), err: \"TGA upload failed \\u2014 please upload a PNG.\" };\n      }\n      accepted.splice(0, accepted.length, ...r.files);\n      if (r.err && !otherReject) otherReject = r.err;\n    }\n    if (!cfg.gangSheet) {\n      if (typeRejected) surfaceUploadError(activeUploadZone(), \"type\", { ext: typeExt });\n      else if (otherReject) surfaceUploadError(activeUploadZone(), \"other\", { msg: otherReject });\n    }\n    const probeInBatch = cfg.gangIntent ? dtfProbe : [];\n    if (!cfg.gangIntent) for (const f of dtfProbe) uploadOne(f, { wrongType: true });\n    if (!accepted.length && !probeInBatch.length) return;\n    clearZoneError();\n    update({\n      status: \"uploading\",\n      mode: getState().mode === \"multi\" || accepted.length + probeInBatch.length > 1 || getState().files.length ? \"multi\" : \"single\"\n    });\n    announce(\"files-received\", { count: accepted.length + probeInBatch.length });\n    ldlReset();\n    activeBatches++;\n    try {\n      await Promise.all([...accepted.map((file) => uploadOne(file)), ...probeInBatch.map((file) => uploadOne(file, { wrongType: true }))]);\n    } finally {\n      activeBatches--;\n    }\n    settleBatch();\n  }\n  function settleBatch() {\n    if (activeBatches > 0) return;\n    const state2 = getState();\n    if (state2.files.length) {\n      update({ status: \"uploaded\" });\n      announce(\"upload-complete\", { count: state2.files.length });\n      if (state2.mode === \"multi\") ldlDone();\n      if (window.matchMedia(\"(max-width: 999px)\").matches) scrollToTop();\n    } else {\n      ldlDone();\n      update({ status: \"empty\", mode: \"single\" });\n    }\n  }\n  function scrollToTop() {\n    const startY = window.pageYOffset;\n    if (startY <= 0) return;\n    window.scrollTo({ top: 0, behavior: \"smooth\" });\n    setTimeout(() => {\n      if (window.pageYOffset >= startY - 4) window.scrollTo(0, 0);\n    }, 350);\n  }\n  function landPending(record, fix, id, name) {\n    record.fixPending = fix;\n    ldlReport(id, 0.95);\n    update({ files: [...getState().files, record] });\n    const detail = { id, name, ...fix, s3: record.s3Url, imgix: record.imgixUrl, inW: record.inW, inH: record.inH, uploadName: record.uploadName };\n    announce(\"file-needs-fix\", detail);\n    announce(\"file-failed\", { ...detail, landed: true });\n  }\n  async function markSingle(fileId, opts) {\n    opts = opts || {};\n    const rec = (getState().files || []).find((f) => f.id === fileId);\n    const single = cfg && cfg.preview && cfg.preview.imgixSingle;\n    if (!rec || !cfg.gangSheet || !single) return false;\n    const params = single[rec.ext] || single.png;\n    if (!params) return false;\n    rec.params = params;\n    rec.single = true;\n    rec.sheet = false;\n    rec.sheetOrig = null;\n    rec.fixPending = null;\n    rec.fixPreview = null;\n    rec.rows = [];\n    rec.autosized = false;\n    rec.rotate90 = false;\n    const autoBgr = !!params.bgRemoverDefault && cfg.preview.bgRemove !== false && !cfg.treat && !cfg.autoBgRemoveOff;\n    if (autoBgr && !rec.hasAlpha && VECTOR_ALPHA_EXTS.test(rec.ext)) rec.hasAlpha = await hasTransparentCornersRemote(rec.imgixUrl);\n    rec.bgRemove = autoBgr && !rec.hasAlpha;\n    rec.superRes = false;\n    const IMGIX_PX = 8192;\n    const isVec = VECTOR_ALPHA_EXTS.test(rec.ext);\n    const big = isVec ? Number(rec.inW) * 72 > IMGIX_PX || Number(rec.inH) * 72 > IMGIX_PX : Number(rec.pxW) > IMGIX_PX || Number(rec.pxH) > IMGIX_PX;\n    if (opts.sheet) {\n      rec.sheet = true;\n      rec.sheetOrig = { w: Number(rec.inW) || 0, h: Number(rec.inH) || 0 };\n      if (!isVec) rec.params = { ...params, order: \"[BOTH_S3]\" };\n      rec.bgRemove = false;\n      if (big) rec.bigFile = true;\n      if (Number(opts.w) > 0 && Number(opts.h) > 0) {\n        rec.inW = Number(opts.w);\n        rec.inH = Number(opts.h);\n      } else if (!big) {\n        const dims = await resolveDimensions(rec, params.preview, { pageBox: false });\n        Object.assign(rec, dims);\n      }\n    } else if (big) {\n      if (!isVec) rec.params = { ...params, order: \"[BOTH_S3]\" };\n      rec.bigFile = true;\n      rec.bgRemove = false;\n    } else {\n      const dims = await resolveDimensions(rec, params.preview, { pageBox: false });\n      Object.assign(rec, dims);\n    }\n    if (rec.inW != null) rec.widthIn = Number(rec.inW);\n    if (rec.inH != null) rec.heightIn = Number(rec.inH);\n    update({ files: [...getState().files] });\n    announce(\"file-uploaded\", { id: rec.id, name: rec.name, inW: rec.inW, inH: rec.inH, s3Url: rec.s3Url, imgixUrl: rec.imgixUrl, uploadName: rec.uploadName, single: true, sheet: !!rec.sheet });\n    saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: rec, gangsheet: false });\n    return true;\n  }\n  async function replaceFileFromUrl(fileId, entry) {\n    const files = getState().files.filter((f) => f.id !== fileId);\n    const old = getState().files.find((f) => f.id === fileId);\n    if (!files.length) update({ files: [], status: \"empty\", mode: \"single\" });\n    else update({ files });\n    announce(\"rows-changed\", {});\n    if (old) announce(\"file-removed\", { id: old.id, name: old.name });\n    return intakeFromUrls([entry]);\n  }\n  async function uploadBlob(file, onProgress, onXhr) {\n    if (!file.type) {\n      const ext = String((file.name || \"\").split(\".\").pop() || \"\").toLowerCase();\n      file = new File([file], file.name, { type: EXT_MIME[ext] || \"application/octet-stream\" });\n    }\n    const uploadName = buildUploadName(file.name);\n    const presign = await getPresignedUploadUrl(uploadName, file.type);\n    if (!presign || !presign.url) throw new Error(\"presign unavailable\");\n    await putToS3(presign.url, file, onProgress, onXhr);\n    const crc = await crc32Hex(file);\n    return {\n      uploadName,\n      crc,\n      s3Url: presign.sourceUrl,\n      imgixUrl: `https://${IMGIX_HOST}/${uploadName}`\n    };\n  }\n  var ldlFracs = /* @__PURE__ */ new Map();\n  var ldlCancelled = false;\n  var activeBatches = 0;\n  var ldlT0 = 0;\n  var ldlEta = 0;\n  var ldlTarget = 0;\n  var ldlShown = 0;\n  var ldlDriver = 0;\n  var ldlBgr = false;\n  var ldlXfers = 0;\n  var activeXhrs = /* @__PURE__ */ new Set();\n  function ldlReset() {\n    ldlFracs.clear();\n    ldlCancelled = false;\n    ldlBgr = false;\n    ldlXfers = 0;\n    ldlT0 = Date.now();\n    ldlEta = ldlTarget = ldlShown = 0;\n    clearInterval(ldlDriver);\n    ldlDriver = setInterval(() => {\n      const tail = ldlFracs.size && ldlXfers === 0 && ldlTarget >= 90;\n      const cap = tail || ldlTarget >= 95 ? 99 : ldlTarget;\n      const step = tail && ldlShown >= 88 ? Math.max(0.02, (99 - ldlShown) * 0.012) : Math.max(0.3, (cap - ldlShown) * 0.12);\n      ldlShown = Math.min(ldlShown + step, cap);\n      ldlWrite(Math.round(ldlShown));\n    }, 120);\n    ldlWrite(0);\n  }\n  function ldlDone() {\n    clearInterval(ldlDriver);\n    ldlShown = ldlTarget = 100;\n    ldlWrite(100);\n  }\n  document.addEventListener(\"bsv4:preview-ready\", ldlDone);\n  function ldlReport(id, frac) {\n    ldlFracs.set(id, Math.max(ldlFracs.get(id) || 0, frac));\n    let sum = 0;\n    for (const v of ldlFracs.values()) sum += v;\n    ldlTarget = Math.round(sum / ldlFracs.size * 100);\n  }\n  function ldlWrite(pct) {\n    if (!els || !els.root) return;\n    let eta = \"\";\n    const tp = ldlTarget;\n    if (ldlFracs.size && ldlXfers === 0 && tp >= 50 && pct < 100) {\n      eta = ldlBgr ? \"Removing background\\u2026\" : \"Preparing preview\\u2026\";\n    } else if (ldlT0 && tp >= 3 && tp <= 90) {\n      const remain = (Date.now() - ldlT0) / tp * (100 - tp) / 1e3;\n      ldlEta = ldlEta ? ldlEta * 0.6 + remain * 0.4 : remain;\n      if (ldlEta > 8) {\n        eta = ldlEta > 90 ? `about ${Math.round(ldlEta / 60)}m left` : `about ${Math.ceil(ldlEta / 5) * 5}s left`;\n      }\n    }\n    for (const node of els.root.querySelectorAll(\"[data-bsv4-upprog]\")) {\n      node.textContent = `${pct}%`;\n    }\n    for (const node of els.root.querySelectorAll(\"[data-bsv4-upeta]\")) {\n      node.textContent = eta;\n    }\n    for (const bar of els.root.querySelectorAll(\".bsv4-preview__ringbar\")) {\n      bar.style.strokeDashoffset = 427.26 * (1 - Math.max(pct, 3) / 100);\n    }\n  }\n  function installCancelHook() {\n    window.resetLoading = () => {\n      ldlCancelled = true;\n      for (const x of activeXhrs) {\n        try {\n          x.abort();\n        } catch (e) {\n        }\n      }\n      activeXhrs.clear();\n    };\n  }\n  function blobUrlFor(file) {\n    try {\n      return /\\.(png|jpe?g|svg)$/i.test(file.name || \"\") ? URL.createObjectURL(file) : null;\n    } catch (e) {\n      return null;\n    }\n  }\n  var ALPHA_CORNER_EXTS = /^(png|webp|tif)$/;\n  var VECTOR_ALPHA_EXTS = /^(ai|eps|pdf|svg)$/;\n  function cornersTransparent(source) {\n    try {\n      const c = document.createElement(\"canvas\");\n      c.width = 64;\n      c.height = 64;\n      const x = c.getContext(\"2d\");\n      x.drawImage(source, 0, 0, 64, 64);\n      const d = x.getImageData(0, 0, 64, 64).data;\n      const a = (px, py) => d[(py * 64 + px) * 4 + 3];\n      return a(0, 0) < 16 && a(63, 0) < 16 && a(0, 63) < 16 && a(63, 63) < 16;\n    } catch (e) {\n      return false;\n    }\n  }\n  async function hasTransparentCorners(file) {\n    try {\n      const bmp = await createImageBitmap(file);\n      const r = cornersTransparent(bmp);\n      if (bmp.close) bmp.close();\n      return r;\n    } catch (e) {\n      return false;\n    }\n  }\n  function hasTransparentCornersRemote(imgixUrl) {\n    return new Promise((resolve) => {\n      try {\n        const im = new Image();\n        im.crossOrigin = \"anonymous\";\n        im.onload = () => resolve(cornersTransparent(im));\n        im.onerror = () => resolve(false);\n        im.src = `${String(imgixUrl).split(\"?\")[0]}?fm=png&w=64`;\n      } catch (e) {\n        resolve(false);\n      }\n    });\n  }\n  async function gangAutosize(record, ext) {\n    const w = Number(record.widthIn);\n    const h = Number(record.heightIn);\n    if (!(w > 0)) return \"skip\";\n    if (w >= 21.5 && w <= 22.5) return \"skip\";\n    if (cfg.gangRotate && h >= 21.5 && h <= 22.5) {\n      record.rotate90 = true;\n      const sInW = record.inW, sPxW = record.pxW;\n      record.inW = record.inH;\n      record.inH = sInW;\n      record.pxW = record.pxH;\n      record.pxH = sPxW;\n      record.widthIn = Number(record.inW);\n      record.heightIn = Number(record.inH);\n      return \"skip\";\n    }\n    record.needsBuilder = true;\n    record.overWidth = w > 22.5;\n    return \"handoff\";\n  }\n  async function pdfPageInches(file) {\n    try {\n      if (!file || typeof file.slice !== \"function\" || !file.size) return null;\n      const HEAD = 8 * 1024 * 1024, TAIL = 2 * 1024 * 1024;\n      const decode = async (blob) => new TextDecoder(\"latin1\").decode(new Uint8Array(await blob.arrayBuffer()));\n      const inches = (x0, y0, x1, y1, uu) => {\n        const w = Math.abs(x1 - x0) * uu / 72, h = Math.abs(y1 - y0) * uu / 72;\n        return w > 0 && h > 0 && isFinite(w) && isFinite(h) ? { inW: w, inH: h } : null;\n      };\n      const parse = (txt) => {\n        let scope = txt;\n        const pm = txt.match(/\\/Type\\s*\\/Page[\\s/>\\]]/);\n        if (pm) {\n          const end = txt.indexOf(\"endobj\", pm.index);\n          const sub = txt.slice(pm.index, end > pm.index ? end : txt.length);\n          if (/\\/MediaBox/.test(sub)) scope = sub;\n        }\n        const mb = scope.match(/\\/MediaBox\\s*\\[\\s*([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)\\s*\\]/);\n        if (mb) {\n          const uuMatch = scope.match(/\\/UserUnit\\s+([\\d.]+)/);\n          const uu = uuMatch ? parseFloat(uuMatch[1]) : 1;\n          const box = inches(+mb[1], +mb[2], +mb[3], +mb[4], uu > 0 && isFinite(uu) ? uu : 1);\n          const rot = scope.match(/\\/Rotate\\s+(-?\\d+)/);\n          if (box && rot) {\n            const d = (parseInt(rot[1], 10) % 360 + 360) % 360;\n            if (d === 90 || d === 270) return { inW: box.inH, inH: box.inW };\n          }\n          return box;\n        }\n        const bb = txt.match(/%%HiResBoundingBox:\\s*([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)/) || txt.match(/%%BoundingBox:\\s*([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)\\s+([\\d.\\-]+)/);\n        if (bb) return inches(+bb[1], +bb[2], +bb[3], +bb[4], 1);\n        return null;\n      };\n      let r = parse(await decode(file.size > HEAD ? file.slice(0, HEAD) : file));\n      if (!r && file.size > HEAD) r = parse(await decode(file.slice(Math.max(0, file.size - TAIL))));\n      return r;\n    } catch (e) {\n      return null;\n    }\n  }\n  async function pdfPageInchesFromUrl(url) {\n    try {\n      if (!url) return null;\n      const r = await fetch(url);\n      if (!r.ok) return null;\n      return await pdfPageInches(await r.blob());\n    } catch (e) {\n      return null;\n    }\n  }\n  async function pngPixels(blob) {\n    try {\n      if (!blob || typeof blob.slice !== \"function\" || !blob.size) return null;\n      const b = new Uint8Array(await blob.slice(0, 24).arrayBuffer());\n      if (b.length < 24) return null;\n      const SIG = [137, 80, 78, 71, 13, 10, 26, 10];\n      for (let i = 0; i < 8; i++) if (b[i] !== SIG[i]) return null;\n      if (b[12] !== 73 || b[13] !== 72 || b[14] !== 68 || b[15] !== 82) return null;\n      const dv = new DataView(b.buffer);\n      const w = dv.getUint32(16), h = dv.getUint32(20);\n      if (!(w > 0) || !(h > 0) || w > 2e5 || h > 2e5) return null;\n      return { pxW: w, pxH: h };\n    } catch (_) {\n      return null;\n    }\n  }\n  async function rasterPixels(blob) {\n    try {\n      if (!blob || !blob.size || typeof createImageBitmap !== \"function\") return null;\n      const bmp = await createImageBitmap(blob);\n      const out = bmp.width > 0 && bmp.height > 0 ? { pxW: bmp.width, pxH: bmp.height } : null;\n      if (bmp.close) bmp.close();\n      return out;\n    } catch (_) {\n      return null;\n    }\n  }\n  async function pngPixelsFromUrl(url) {\n    try {\n      if (!url) return null;\n      const r = await fetch(url);\n      if (!r.ok) return null;\n      return await pngPixels(await r.blob());\n    } catch (_) {\n      return null;\n    }\n  }\n  async function rasterPixelsFromUrl(url) {\n    try {\n      if (!url) return null;\n      const r = await fetch(url);\n      if (!r.ok) return null;\n      return await rasterPixels(await r.blob());\n    } catch (_) {\n      return null;\n    }\n  }\n  async function uploadOne(file, opts = {}) {\n    const id = `f-${++seq}`;\n    const localUrl = blobUrlFor(file);\n    announce(\"upload-started\", { id, name: file.name, localUrl });\n    ldlReport(id, 0);\n    const alphaProbe = ALPHA_CORNER_EXTS.test((file.name.split(\".\").pop() || \"\").toLowerCase()) ? hasTransparentCorners(file) : Promise.resolve(false);\n    try {\n      ldlXfers++;\n      const up = await uploadBlob(\n        file,\n        (frac) => {\n          ldlReport(id, frac * 0.9);\n        },\n        (xhr) => activeXhrs.add(xhr)\n      );\n      ldlXfers = Math.max(0, ldlXfers - 1);\n      if (ldlCancelled) return;\n      const { uploadName, crc } = up;\n      const rawExt = (file.name.split(\".\").pop() || \"\").toLowerCase();\n      let ext = rawExt === \"jpeg\" || rawExt === \"jfif\" ? \"jpg\" : rawExt === \"tiff\" ? \"tif\" : rawExt === \"heif\" ? \"heic\" : rawExt;\n      if (!(cfg.imgixParams || {})[ext]) ext = \"png\";\n      const params = (cfg.imgixParams || {})[ext] || {};\n      const hasAlpha = await alphaProbe;\n      const autoBgr = !!params.bgRemoverDefault && cfg.preview?.bgRemove !== false && !cfg.treat && // puff Recolor pages: palette must see full colors\n      !cfg.autoBgRemoveOff;\n      const probing = autoBgr && !hasAlpha && VECTOR_ALPHA_EXTS.test(ext);\n      const remoteProbe = probing ? hasTransparentCornersRemote(up.imgixUrl) : Promise.resolve(false);\n      if (params.preview) {\n        remoteProbe.then((remoteAlpha2) => {\n          const bgR = autoBgr && !hasAlpha && !remoteAlpha2;\n          new Image().src = bgR && !window.NtBgrStockProvider?.active() ? candidateUrl(up.imgixUrl, BGR_MODELS[0]) : `${up.imgixUrl}?${params.preview}`;\n        });\n      }\n      const record = {\n        id,\n        fresh: 1,\n        // uploaded from the customer's device on this visit (a delete here also leaves My Designs)\n        name: file.name,\n        uploadName,\n        ext,\n        s3Url: up.s3Url,\n        imgixUrl: up.imgixUrl,\n        crc,\n        params,\n        hasAlpha,\n        // The matrix's per-type default only applies when the preview block's\n        // Background Remove toggle is on \u2014 a merchant turning the feature OFF\n        // must not get silently bg-removed art with the control hidden.\n        // Already-transparent art (hasAlpha) defaults OFF too \u2014 see the\n        // alpha-corner probe above (vectors: corrected after remoteProbe below).\n        bgRemove: autoBgr && !hasAlpha,\n        superRes: false,\n        // (record.bgRemove feeds the loader's honest tail copy)\n        // Attribution riders (cart-payload.js:126-129 stamps from these): the\n        // AI shims tag the File object (manageFiles direct, uploadFile via the\n        // one-shot window-flag consume above).\n        isAIImage: file.isAIImage || void 0,\n        isAIEdit: file.isAIEdit || void 0,\n        isDesignStudio: STUDIO_EXPORT_RE.test(uploadName) ? \"Yes\" : void 0,\n        studioReuse: STUDIO_EXPORT_RE.test(uploadName),\n        rows: []\n      };\n      if (record.bgRemove && !probing) ldlBgr = true;\n      const [dims, remoteAlpha] = await Promise.all([\n        resolveDimensions(record, params.preview, { pageBox: cfg.gangSheet }),\n        remoteProbe\n      ]);\n      if (remoteAlpha) {\n        record.hasAlpha = true;\n        record.bgRemove = false;\n      }\n      if (record.bgRemove && probing) ldlBgr = true;\n      Object.assign(record, dims);\n      if (!cfg.gangSheet) applyRenderCap(record);\n      if (cfg.gangSheet && (ext === \"pdf\" || ext === \"ai\" || ext === \"eps\")) {\n        const pg = await pdfPageInches(file);\n        if (pg) {\n          record.inW = pg.inW.toFixed(2);\n          record.inH = pg.inH.toFixed(2);\n          record.pxW = Math.round(pg.inW * 300);\n          record.pxH = Math.round(pg.inH * 300);\n        }\n      }\n      if (cfg.gangSheet && cfg.gangAutosize && ext === \"png\") {\n        const pp = await pngPixels(file);\n        if (pp) {\n          record.inW = (pp.pxW / 300).toFixed(2);\n          record.inH = (pp.pxH / 300).toFixed(2);\n          record.pxW = pp.pxW;\n          record.pxH = pp.pxH;\n        }\n      }\n      if (cfg.gangSheet && cfg.gangIntent && /^(jpg|webp|gif|bmp)$/.test(ext)) {\n        const rp = await rasterPixels(file);\n        if (rp) {\n          record.inW = (rp.pxW / 300).toFixed(2);\n          record.inH = (rp.pxH / 300).toFixed(2);\n          record.pxW = rp.pxW;\n          record.pxH = rp.pxH;\n        }\n      }\n      if (record.inW != null) record.widthIn = Number(record.inW);\n      if (record.inH != null) record.heightIn = Number(record.inH);\n      if (cfg.gangSheet && opts.wrongType) {\n        const small = Number.isFinite(record.widthIn) && Number.isFinite(record.heightIn) && record.widthIn < 21.5 && record.heightIn < 22;\n        const inBand = Number.isFinite(record.widthIn) && record.widthIn >= 21.5 && record.widthIn <= 22.5;\n        if (cfg.gangIntent && !inBand) {\n          landPending(record, { error: \"type\", dtf: small, w: record.widthIn, h: record.heightIn }, id, file.name);\n          saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet && !small });\n          return;\n        }\n        if (cfg.gangIntent && inBand) {\n        } else {\n          ldlDone();\n          update({ status: \"empty\", mode: \"single\", gangHandoffUrl: small ? record.s3Url || record.imgixUrl : \"\" });\n          announce(\"file-rejected\", { id, name: file.name, error: \"type\", dtf: small, w: record.widthIn, h: record.heightIn, url: small ? record.s3Url || record.imgixUrl : void 0, s3: record.s3Url, imgix: record.imgixUrl });\n          saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet && !small });\n          return;\n        }\n      }\n      if (cfg.gangSheet && cfg.gangAutosize) {\n        const res = await gangAutosize(record, ext);\n        if (res === \"handoff\") {\n          if (cfg.gangIntent) {\n            landPending(record, { error: \"gang-builder\", over: !!record.overWidth, w: record.widthIn, h: record.heightIn }, id, file.name);\n            saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet });\n            return;\n          }\n          ldlDone();\n          update({ status: \"empty\", mode: \"single\", gangHandoffUrl: record.s3Url || record.imgixUrl });\n          announce(\"file-failed\", { id, name: file.name, error: \"gang-builder\", over: !!record.overWidth, w: record.widthIn, h: record.heightIn, s3: record.s3Url, imgix: record.imgixUrl });\n          saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet });\n          return;\n        }\n      }\n      const gangMaxH = Number(window.__bsv4GangMaxH) || 0;\n      const tooTall = cfg.gangSheet && gangMaxH > 0 && Number.isFinite(record.heightIn) && record.heightIn > gangMaxH;\n      if (cfg.gangSheet && !record.autosized && (Number.isFinite(record.widthIn) && (record.widthIn < 21.5 || record.widthIn > 22.5) || tooTall)) {\n        const w = record.widthIn, h = record.heightIn;\n        const small = Number.isFinite(h) && Number.isFinite(w) && w < 21.5 && h < 22;\n        if (cfg.gangIntent) {\n          landPending(record, { error: \"gang-size\", w, h, dtf: small, tooTall: !!tooTall }, id, file.name);\n          saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet && !small });\n          return;\n        }\n        ldlDone();\n        update({ status: \"empty\", mode: \"single\", gangHandoffUrl: small ? record.s3Url || record.imgixUrl : \"\" });\n        announce(\"file-failed\", { id, name: file.name, error: \"gang-size\", w, h, dtf: small, url: small ? record.s3Url || record.imgixUrl : void 0, s3: record.s3Url, imgix: record.imgixUrl });\n        saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet && !small });\n        return;\n      }\n      ldlReport(id, 0.95);\n      if (ldlCancelled) return;\n      update({ files: [...getState().files, record] });\n      announce(\"file-uploaded\", { id, name: file.name, inW: record.inW, inH: record.inH, s3Url: record.s3Url, imgixUrl: record.imgixUrl, uploadName: record.uploadName, autosized: !!record.autosized, rotated: !!record.rotate90, dpiWarn: !!record.autoDpiWarn, singleDesign: !!record.autoSingleDesign, blobs: record.autoBlobs });\n      saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: record, gangsheet: cfg.gangSheet });\n    } catch (err) {\n      if (err && err.name === \"AbortError\") return;\n      showError(`${file.name}: ${err.message || \"upload failed\"} \\u2014 please try again.`);\n      announce(\"file-failed\", { id, name: file.name, error: String(err && err.message) });\n    } finally {\n      if (localUrl) setTimeout(() => URL.revokeObjectURL(localUrl), 6e4);\n    }\n  }\n  async function saveIntakeToUser(record, entry, gangsheet) {\n    if (!cfg.customerId || entry.isReadyToPress === \"Yes\" || record.isDesignStudio) return;\n    const clean = String(record.s3Url || \"\").split(\"?\")[0];\n    if (clean.indexOf(S3_HOST) === -1 || clean.indexOf(\"/rtp-mirror/\") > -1) return;\n    try {\n      const cached = sessionStorage.getItem(\"mdDesignCache_\" + cfg.customerId);\n      if (cached && cached.indexOf(record.uploadName) > -1) return;\n    } catch (_) {\n    }\n    try {\n      const r = await fetch(clean);\n      if (!r.ok) return;\n      const crc = await crc32Hex(await r.blob());\n      saveFileToUser({ customerId: cfg.customerId, productId: cfg.productId, fileRecord: { ...record, crc }, gangsheet });\n    } catch (_) {\n    }\n  }\n  async function intakeFromUrls(entries) {\n    if (!els) return;\n    if (!entries.length) return;\n    if (getState().status === \"uploading\" && getState().mode !== \"multi\") return;\n    const ownHost = (u) => {\n      try {\n        return /(^|\\.)(amazonaws\\.com|imgix\\.net)$/.test(new URL(u).hostname);\n      } catch (_) {\n        return false;\n      }\n    };\n    const outside = entries.filter((e) => !ownHost(e.url));\n    if (outside.length) {\n      entries = entries.filter((e) => ownHost(e.url));\n      const files = (await Promise.all(outside.map(async (e) => {\n        try {\n          const res = await fetch(e.url);\n          if (!res.ok) throw new Error(\"HTTP \" + res.status);\n          const blob = await res.blob();\n          const name = e.name || String(e.url).split(\"?\")[0].split(\"/\").pop() || \"design.png\";\n          const file = new File([blob], name, { type: blob.type || \"image/png\" });\n          if (e.isAIImage) file.isAIImage = true;\n          if (e.isAIEdit) file.isAIEdit = true;\n          return file;\n        } catch (err) {\n          console.warn(\"[bsv4] external design handoff failed:\", err && err.message);\n          return null;\n        }\n      }))).filter(Boolean);\n      if (files.length) await intake(files);\n      if (!entries.length) return;\n    }\n    const cap = resolveIntakeCap(cfg);\n    const room = cap - getState().files.length;\n    if (entries.length > room) {\n      showError(\n        cap === 1 ? \"This product takes one design at a time \\u2014 only the first selection was kept.\" : `Maximum ${cap} designs per order \\u2014 ${entries.length - Math.max(0, room)} selection(s) skipped.`\n      );\n      entries = entries.slice(0, Math.max(0, room));\n      if (!entries.length) return;\n    }\n    if (entries.length === 1 && entries[0].orderName) {\n      setAttribution({ designType: 1, orderName: entries[0].orderName });\n    }\n    update({\n      status: \"uploading\",\n      mode: getState().mode === \"multi\" || entries.length > 1 || getState().files.length ? \"multi\" : \"single\"\n    });\n    announce(\"files-received\", { count: entries.length, source: \"previous-designs\" });\n    ldlReset();\n    activeBatches++;\n    try {\n      await Promise.all(\n        entries.map(async (entry) => {\n          const id = `f-${++seq}`;\n          const urlBg = /bg-remove=true/i.test(String(entry.url || \"\"));\n          const urlSr = /upscale=true/i.test(String(entry.url || \"\"));\n          const clean = entry.url.split(\"?\")[0];\n          const uploadName = clean.split(\"/\").pop();\n          const rawExt = (uploadName.split(\".\").pop() || \"\").toLowerCase();\n          let ext = rawExt === \"jpeg\" || rawExt === \"jfif\" ? \"jpg\" : rawExt === \"tiff\" ? \"tif\" : rawExt === \"heif\" ? \"heic\" : rawExt;\n          if (!(cfg.imgixParams || {})[ext]) ext = \"png\";\n          announce(\"upload-started\", { id, name: entry.name || uploadName });\n          ldlReport(id, 0.5);\n          try {\n            let params = (cfg.imgixParams || {})[ext] || {};\n            if (entry.isReadyToPress === \"Yes\") {\n              params = { ...params, order: \"[S3]\" };\n            }\n            const reuseImgix = clean.split(S3_HOST).join(IMGIX_HOST);\n            const wouldDefaultOn = entry.bgRemove !== true && !urlBg && !!params.bgRemoverDefault && !cfg.autoBgRemoveOff;\n            const hasAlpha = wouldDefaultOn && (ALPHA_CORNER_EXTS.test(ext) || VECTOR_ALPHA_EXTS.test(ext)) && entry.isReadyToPress !== \"Yes\" ? await hasTransparentCornersRemote(reuseImgix) : false;\n            const record = {\n              id,\n              name: entry.name || uploadName,\n              uploadName,\n              ext,\n              s3Url: clean.split(IMGIX_HOST).join(S3_HOST),\n              imgixUrl: reuseImgix,\n              crc: null,\n              params,\n              hasAlpha,\n              isReadyToPress: entry.isReadyToPress,\n              // gang-upload-intent (2026-10-08): a server-corrected gang sheet is fed\n              // back in as the upload; the customer's ORIGINAL ({ key, s3Url, w, h })\n              // rides along so cart-payload can keep it as the Upload property.\n              renderedFrom: entry.renderedFrom || void 0,\n              isRtpAiEdit: entry.isRtpAiEdit,\n              isDesignStudio: entry.isDesignStudio || (STUDIO_EXPORT_RE.test(uploadName) ? \"Yes\" : void 0),\n              studioReuse: !entry.isDesignStudio && STUDIO_EXPORT_RE.test(uploadName),\n              isAIImage: entry.isAIImage,\n              isAIEdit: entry.isAIEdit,\n              // the past order this design is re-bought from -> _reorder on every line\n              reorderOf: entry.orderName || void 0,\n              // Same merchant-toggle guard as fresh uploads; RTP files stay\n              // untransformed (raw S3 order contract \u2014 never re-treat them).\n              bgRemove: (\n                // treat (puff Recolor) + the \"disable default bg remove\" account\n                // tag both suppress only the AUTO default; an explicit carried\n                // removal (entry.bgRemove / URL param) still wins.\n                // Gang pages never carry a removal onto a whole sheet (a My Designs\n                // URL with bg-remove=true ran a removal on the sheet, re-sized it and\n                // put bg-remove on the cart thumb). Singles: markSingle recomputes it.\n                !cfg.gangSheet && (entry.bgRemove === true || urlBg || !!params.bgRemoverDefault && !cfg.treat && !cfg.autoBgRemoveOff && !hasAlpha) && entry.isReadyToPress !== \"Yes\" && cfg.preview?.bgRemove !== false\n              ),\n              superRes: (entry.superRes === true || urlSr) && entry.isReadyToPress !== \"Yes\",\n              rows: []\n            };\n            if (record.params.preview && entry.isReadyToPress !== \"Yes\") {\n              new Image().src = record.bgRemove && !window.NtBgrStockProvider?.active() ? candidateUrl(record.imgixUrl, BGR_MODELS[0]) : `${record.imgixUrl}?${record.params.preview}`;\n            }\n            Object.assign(record, await resolveDimensions(record, record.params.preview, { pageBox: cfg.gangSheet }));\n            if (!cfg.gangSheet) applyRenderCap(record);\n            if (cfg.gangSheet && (ext === \"pdf\" || ext === \"ai\" || ext === \"eps\")) {\n              const pg = await pdfPageInchesFromUrl(record.s3Url);\n              if (pg) {\n                record.inW = pg.inW.toFixed(2);\n                record.inH = pg.inH.toFixed(2);\n                record.pxW = Math.round(pg.inW * 300);\n                record.pxH = Math.round(pg.inH * 300);\n              }\n            }\n            if (cfg.gangSheet && cfg.gangAutosize && ext === \"png\") {\n              const pp = await pngPixelsFromUrl(record.s3Url);\n              if (pp) {\n                record.inW = (pp.pxW / 300).toFixed(2);\n                record.inH = (pp.pxH / 300).toFixed(2);\n                record.pxW = pp.pxW;\n                record.pxH = pp.pxH;\n              }\n            }\n            if (cfg.gangSheet && cfg.gangIntent && /^(jpg|webp|gif|bmp)$/.test(ext)) {\n              const rp = await rasterPixelsFromUrl(record.s3Url);\n              if (rp) {\n                record.inW = (rp.pxW / 300).toFixed(2);\n                record.inH = (rp.pxH / 300).toFixed(2);\n                record.pxW = rp.pxW;\n                record.pxH = rp.pxH;\n              }\n            }\n            if (record.inW != null) record.widthIn = Number(record.inW);\n            if (record.inH != null) record.heightIn = Number(record.inH);\n            if (cfg.gangSheet && cfg.gangAutosize) {\n              const resA = await gangAutosize(record, ext);\n              if (resA === \"handoff\") {\n                if (cfg.gangIntent) {\n                  landPending(record, { error: \"gang-builder\", over: !!record.overWidth, w: record.widthIn, h: record.heightIn }, id, record.name);\n                  saveIntakeToUser(record, entry, cfg.gangSheet);\n                  return;\n                }\n                ldlDone();\n                update({ status: \"empty\", mode: \"single\", gangHandoffUrl: record.s3Url || record.imgixUrl });\n                announce(\"file-failed\", { id, name: record.name, error: \"gang-builder\", over: !!record.overWidth, w: record.widthIn, h: record.heightIn, s3: record.s3Url, imgix: record.imgixUrl });\n                saveIntakeToUser(record, entry, cfg.gangSheet);\n                return;\n              }\n            }\n            const gangMaxHR = Number(window.__bsv4GangMaxH) || 0;\n            const tooTallR = cfg.gangSheet && gangMaxHR > 0 && Number.isFinite(record.heightIn) && record.heightIn > gangMaxHR;\n            if (cfg.gangSheet && !record.autosized && (Number.isFinite(record.widthIn) && (record.widthIn < 21.5 || record.widthIn > 22.5) || tooTallR)) {\n              const w = record.widthIn, h = record.heightIn;\n              const small = Number.isFinite(h) && Number.isFinite(w) && w < 21.5 && h < 22;\n              if (cfg.gangIntent) {\n                landPending(record, { error: \"gang-size\", w, h, dtf: small, tooTall: !!tooTallR }, id, record.name);\n                saveIntakeToUser(record, entry, cfg.gangSheet && !small);\n                return;\n              }\n              ldlDone();\n              update({ status: \"empty\", mode: \"single\", gangHandoffUrl: small ? record.s3Url || record.imgixUrl : \"\" });\n              announce(\"file-failed\", { id, name: record.name, error: \"gang-size\", w, h, dtf: small, url: small ? record.s3Url || record.imgixUrl : void 0, s3: record.s3Url, imgix: record.imgixUrl });\n              saveIntakeToUser(record, entry, cfg.gangSheet && !small);\n              return;\n            }\n            ldlReport(id, 0.95);\n            if (ldlCancelled) return;\n            update({ files: [...getState().files, record] });\n            announce(\"file-uploaded\", { id, name: record.name, inW: record.inW, inH: record.inH, s3Url: record.s3Url, imgixUrl: record.imgixUrl, uploadName: record.uploadName, autosized: !!record.autosized, rotated: !!record.rotate90, dpiWarn: !!record.autoDpiWarn, singleDesign: !!record.autoSingleDesign, blobs: record.autoBlobs });\n            saveIntakeToUser(record, entry, cfg.gangSheet);\n          } catch (err) {\n            showError(`${entry.name || uploadName}: ${err.message || \"could not load design\"}`);\n            announce(\"file-failed\", { id, name: entry.name || uploadName, error: String(err && err.message) });\n          }\n        })\n      );\n    } finally {\n      activeBatches--;\n    }\n    settleBatch();\n  }\n  function activeUploadZone() {\n    if (!els) return null;\n    const modalAdd = els.root && els.root.querySelector(\"[data-bsv4-modal-addfile]\");\n    if (getState().mode === \"multi\" && modalAdd && modalAdd.offsetParent !== null) return modalAdd;\n    const add = els.root && els.root.querySelector(\"[data-bsv4-add-another]\");\n    if (getState().status !== \"empty\" && add && add.offsetParent !== null) return add;\n    return els.zone;\n  }\n  function fileTypesSentence() {\n    const list = allowedExts();\n    if (!list.length) return \"That file type is not supported.\";\n    const labels = [];\n    const used = /* @__PURE__ */ new Set();\n    for (const e of list) {\n      if (used.has(e)) continue;\n      if (e === \"jpg\" || e === \"jpeg\" || e === \"jfif\") {\n        labels.push(\"JPG / JPEG\");\n        used.add(\"jpg\");\n        used.add(\"jpeg\");\n        used.add(\"jfif\");\n      } else if (e === \"tif\" || e === \"tiff\") {\n        labels.push(\"TIF / TIFF\");\n        used.add(\"tif\");\n        used.add(\"tiff\");\n      } else if (e === \"heic\" || e === \"heif\") {\n        labels.push(\"HEIC / HEIF\");\n        used.add(\"heic\");\n        used.add(\"heif\");\n      } else {\n        labels.push(e.toUpperCase());\n        used.add(e);\n      }\n    }\n    const last = labels.pop();\n    const joined = labels.length ? `${labels.join(\", \")} and ${last}` : last;\n    return `We accept the following file types: ${joined}`;\n  }\n  var errCardTimer = null;\n  function showUploadErrorCard(zone, message) {\n    if (!zone) return;\n    clearTimeout(errCardTimer);\n    const prev = zone.querySelector(\":scope > .bsv4-uperr\");\n    if (prev) prev.remove();\n    zone.classList.add(\"bsv4-uperr-host\");\n    const card = document.createElement(\"div\");\n    card.className = \"bsv4-uperr\";\n    card.setAttribute(\"role\", \"alert\");\n    card.innerHTML = '<span class=\"bsv4-uperr__circle\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"30\" height=\"30\" fill=\"none\" stroke=\"#e5484d\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7.5v5.5\"/><path d=\"M12 16.4v.1\"/></svg></span><p class=\"bsv4-uperr__head\">Couldn\\u2019t upload your files</p><p class=\"bsv4-uperr__msg\"></p><button type=\"button\" class=\"bsv4-uperr__dismiss\">Dismiss</button>';\n    card.querySelector(\".bsv4-uperr__msg\").textContent = message;\n    const close = () => {\n      clearTimeout(errCardTimer);\n      card.remove();\n      zone.classList.remove(\"bsv4-uperr-host\");\n    };\n    card.addEventListener(\"click\", (e) => e.stopPropagation());\n    card.querySelector(\".bsv4-uperr__dismiss\").addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      close();\n    });\n    zone.appendChild(card);\n    errCardTimer = setTimeout(close, 4e3);\n  }\n  function showError(msg) {\n    surfaceUploadError(activeUploadZone(), \"other\", { msg });\n  }\n  function surfaceUploadError(zone, kind, data) {\n    data = data || {};\n    const onMain = els && zone === els.zone;\n    let title;\n    let parts;\n    let msg;\n    if (kind === \"type\") {\n      title = \"File not supported\";\n      msg = fileTypesSentence();\n      parts = data.ext ? [{ b: true, t: data.ext + \" \" }, { t: \"isn\\u2019t a supported file type. Please use one of the formats below.\" }] : [{ t: \"That file type is not supported. Please use one of the formats below.\" }];\n    } else if (kind === \"limit\") {\n      title = \"Too many files\";\n      msg = `Maximum ${data.cap} designs per order \\u2014 ${data.skipped} file(s) skipped.`;\n      parts = [{ b: true, t: `${data.count} files` }, { t: ` selected \\u2014 the limit is ${data.cap}. Remove a few and try again.` }];\n    } else if (kind === \"single\") {\n      title = \"One file at a time\";\n      msg = data.msg;\n      parts = [{ t: data.msg }];\n    } else {\n      title = \"Couldn\\u2019t upload\";\n      msg = data.msg;\n      parts = [{ t: data.msg }];\n    }\n    if (onMain) showZoneError(title, parts);\n    else showUploadErrorCard(zone, msg);\n  }\n  function showZoneError(title, parts) {\n    if (!els || !els.ehead || !els.esub) return;\n    els.ehead.textContent = title;\n    els.esub.textContent = \"\";\n    for (const p of parts) {\n      const t = document.createTextNode(p.t);\n      if (p.b) {\n        const b = document.createElement(\"b\");\n        b.appendChild(t);\n        els.esub.appendChild(b);\n      } else {\n        els.esub.appendChild(t);\n      }\n    }\n    if (els.dhead) els.dhead.hidden = true;\n    if (els.dhint) els.dhint.hidden = true;\n    els.ehead.hidden = false;\n    els.esub.hidden = false;\n    els.zone.classList.add(\"is-error\");\n  }\n  function clearZoneError() {\n    if (!els || !els.zone.classList.contains(\"is-error\")) return;\n    els.zone.classList.remove(\"is-error\");\n    if (els.ehead) els.ehead.hidden = true;\n    if (els.esub) els.esub.hidden = true;\n    if (els.dhead) els.dhead.hidden = false;\n    if (els.dhint) els.dhint.hidden = false;\n  }\n\n  // src/preview.js\n  var NINJA_GIF = \"https://cdn.shopify.com/s/files/1/0558/0265/8899/files/Ninja-Running-Loop-200x-200-cleaned.gif?v=1758717834\";\n  var STATUS = [\n    \"Sharpening the katana\\u2026\",\n    \"Tightening the headband\\u2026\",\n    \"Tossing a smoke bomb\\u2026\",\n    \"Nunchucking your enemies\\u2026\",\n    \"Loading at ninja speed\\u2026\",\n    \"Consulting the scrolls\\u2026\",\n    \"Polishing the shuriken\\u2026\",\n    \"Dusting off the ancient scrolls\\u2026\",\n    \"Unsheathing the pixels\\u2026\"\n  ];\n  var cfg2;\n  var stagePending = null;\n  var filmBound = false;\n  var stageCanvas = null;\n  var stageDocBound = false;\n  function initPreview(root2, config) {\n    if (config) cfg2 = config;\n    const block = root2.querySelector('[data-bsv4-block=\"upload_preview\"]');\n    if (!block || !cfg2 || !cfg2.preview) return;\n    if (block.dataset.bsv4PreviewInit === \"1\") return;\n    block.dataset.bsv4PreviewInit = \"1\";\n    const box = block.querySelector(\".bsv4-preview\");\n    const canvas = block.querySelector(\"[data-bsv4-canvas]\");\n    const tools = block.querySelector(\"[data-bsv4-bgr-host]\");\n    if (!box || !canvas) return;\n    stageCanvas = canvas;\n    if (!stageDocBound) {\n      stageDocBound = true;\n      document.addEventListener(\"bsv4:upload-started\", (e) => {\n        const d = e.detail || {};\n        if (!d.localUrl || getState().mode !== \"single\" || !stageCanvas) return;\n        const loader = stageCanvas.querySelector(\".bsv4-preview__loading\");\n        if (!loader || loader.querySelector(\".bsv4-preview__loading-art\")) return;\n        const img = document.createElement(\"img\");\n        img.className = \"bsv4-preview__loading-art\";\n        img.alt = \"\";\n        img.style.cssText = \"position:absolute;inset:0;margin:auto;width:auto;height:auto;max-width:98cqw;max-height:98cqh;object-fit:contain\";\n        img.src = d.localUrl;\n        loader.prepend(img);\n      });\n    }\n    box.classList.toggle(\"bsv4-preview--no-bgr\", !cfg2.preview.bgRemove);\n    box.classList.toggle(\"bsv4-preview--no-upscale\", !cfg2.preview.upscale);\n    box.classList.toggle(\"bsv4-preview--no-aiedit\", !cfg2.preview.aiEdit);\n    box.classList.toggle(\"bsv4-preview--glitter\", !!cfg2.glitter);\n    const zoom = document.createElement(\"dialog\");\n    zoom.className = \"bsv4-zoom\";\n    zoom.setAttribute(\"data-bsv4-zoom\", \"\");\n    zoom.setAttribute(\"aria-label\", \"Zoomed design preview\");\n    zoom.innerHTML = cfg2 && cfg2.glitter ? `<button class=\"bsv4-zoom__close\">Close</button><span class=\"bsv4-zoom__stage\"><img alt=\"\"><span class=\"bsv4-preview__glitter\" aria-hidden=\"true\"></span></span>` : `<button class=\"bsv4-zoom__close\">Close</button><img alt=\"\">`;\n    block.appendChild(zoom);\n    zoom.addEventListener(\"click\", () => zoom.close());\n    canvas.addEventListener(\"click\", (e) => {\n      const file = activeFile(getState());\n      if (!file) return;\n      if (e.target.closest(\"[data-bsv4-file-delete]\")) {\n        if ((file.rows || []).length > 1) confirmRemove(() => deleteFile(file));\n        else deleteFile(file);\n      } else if (e.target.closest(\"[data-bsv4-zoom-open]\") || e.target.matches(\".bsv4-preview__art img\")) {\n        const img = zoom.querySelector(\"img\");\n        img.alt = file.name || \"\";\n        swapImage(img, previewUrl(file), zoom);\n        zoom.showModal();\n      }\n    });\n    if (!filmBound) {\n      filmBound = true;\n      document.addEventListener(\"bsv4:opt2-changed\", () => update({}));\n    }\n    subscribe((state2) => {\n      const file = activeFile(state2);\n      if (tools && tools.dataset.bsv4BgrFor && (!file || tools.dataset.bsv4BgrFor !== file.id)) {\n        tools.innerHTML = \"\";\n        delete tools.dataset.bsv4BgrFor;\n      }\n      if (!file || !file.imgixUrl) {\n        stagePending = null;\n        if (state2.status === \"uploading\") {\n          if (!canvas.querySelector(\".bsv4-preview__loading\")) {\n            canvas.innerHTML = \"\";\n            canvas.appendChild(buildStageLoader());\n          }\n        } else {\n          canvas.innerHTML = \"\";\n        }\n        return;\n      }\n      const url = previewUrl(file);\n      if (!canvas.querySelector(\".bsv4-preview__art\")) {\n        if (stagePending !== url) {\n          stagePending = url;\n          let loader = canvas.querySelector(\".bsv4-preview__loading\");\n          if (!loader) {\n            canvas.innerHTML = \"\";\n            loader = buildStageLoader();\n            canvas.appendChild(loader);\n          }\n          loader.classList.remove(\"is-done\");\n          const pre = new Image();\n          pre.onload = pre.onerror = () => {\n            if (stagePending !== url) return;\n            announce(\"preview-ready\");\n            loader.classList.add(\"is-done\");\n            setTimeout(() => {\n              if (stagePending !== url) return;\n              stagePending = null;\n              buildArt(canvas);\n              const ph = canvas.querySelector(\".bsv4-preview__frame img\");\n              if (pre.naturalWidth) {\n                pre.alt = file.name || \"\";\n                ph.replaceWith(pre);\n                const fr = canvas.querySelector(\".bsv4-preview__frame\");\n                if (fr && pre.naturalHeight) {\n                  fr.style.setProperty(\"--bsv4-ar\", (pre.naturalWidth / pre.naturalHeight).toFixed(4));\n                }\n                if (fr && cfg2 && cfg2.glitter) fr.style.setProperty(\"--bsv4-art\", `url(\"${url}\")`);\n              } else {\n                ph.alt = file.name || \"\";\n                swapImage(ph, url, canvas.querySelector(\".bsv4-preview__frame\"));\n              }\n              const d = activeDims(file);\n              setDim(canvas.querySelector(\"[data-bsv4-dim-w]\"), d.w);\n              setDim(canvas.querySelector(\"[data-bsv4-dim-h]\"), d.h);\n            }, 220);\n          };\n          pre.src = url;\n        }\n        return;\n      }\n      const img = canvas.querySelector(\"img\");\n      img.alt = file.name || \"\";\n      swapImage(img, url, canvas.querySelector(\".bsv4-preview__frame\"));\n      const dims = activeDims(file);\n      setDim(canvas.querySelector(\"[data-bsv4-dim-w]\"), dims.w);\n      setDim(canvas.querySelector(\"[data-bsv4-dim-h]\"), dims.h);\n    });\n    initMobileTabs(root2, box);\n  }\n  function buildArt(canvas) {\n    canvas.innerHTML = `\n<figure class=\"bsv4-preview__art\">\n<span class=\"bsv4-preview__actions\">\n<button type=\"button\" data-bsv4-file-delete aria-label=\"Delete design\" title=\"Delete design\">\n<svg viewBox=\"0 0 24 24\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\"><path fill=\"currentColor\" fill-rule=\"nonzero\" d=\"m4.015 5.494h-.253c-.413 0-.747-.335-.747-.747s.334-.747.747-.747h5.253v-1c0-.535.474-1 1-1h4c.526 0 1 .465 1 1v1h5.254c.412 0 .746.335.746.747s-.334.747-.746.747h-.254v15.435c0 .591-.448 1.071-1 1.071-2.873 0-11.127 0-14 0-.552 0-1-.48-1-1.071zm14.5 0h-13v15.006h13zm-4.25 2.506c-.414 0-.75.336-.75.75v8.5c0 .414.336.75.75.75s.75-.336.75-.75v-8.5c0-.414-.336-.75-.75-.75zm-4.5 0c-.414 0-.75.336-.75.75v8.5c0 .414.336.75.75.75s.75-.336.75-.75v-8.5c0-.414-.336-.75-.75-.75zm3.75-4v-.5h-3v.5z\"/></svg>\n</button>\n<button type=\"button\" data-bsv4-zoom-open aria-label=\"Zoom design\" title=\"Zoom\">\n<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m21 21-4.35-4.35M11 8v6M8 11h6\"/></svg>\n</button>\n</span>\n<span class=\"bsv4-preview__frame\">\n<span class=\"bsv4-preview__dim bsv4-preview__dim--w\" data-bsv4-dim-w hidden><i></i></span>\n<span class=\"bsv4-preview__dim bsv4-preview__dim--h\" data-bsv4-dim-h hidden><i></i></span>\n<img alt=\"\">${cfg2 && cfg2.glitter ? '<span class=\"bsv4-preview__glitter\" aria-hidden=\"true\"></span>' : \"\"}\n</span>\n</figure>`;\n  }\n  function initMobileTabs(root2, box) {\n    const guide = root2.querySelector('[data-bsv4-block=\"size_guide\"]');\n    const body = box.querySelector(\".bsv4-preview__body\");\n    const tabs = box.querySelector(\"[data-bsv4-mobtabs]\");\n    if (!guide || !body || !tabs) return;\n    const home = { parent: guide.parentNode, next: guide.nextSibling };\n    const mq = window.matchMedia(\"(max-width: 999px)\");\n    const setView = (view) => {\n      box.dataset.bsv4Mobview = view === \"guide\" ? \"guide\" : \"customize\";\n      tabs.querySelectorAll(\"[data-bsv4-mobtab]\").forEach((b) => {\n        b.classList.toggle(\"is-active\", b.dataset.bsv4Mobtab === box.dataset.bsv4Mobview);\n      });\n    };\n    const place = () => {\n      if (mq.matches) {\n        if (guide.parentNode !== box) box.insertBefore(guide, body.nextSibling);\n        if (!box.dataset.bsv4Mobview) setView(\"customize\");\n      } else if (guide.parentNode === box) {\n        home.parent.insertBefore(guide, home.next);\n      }\n    };\n    tabs.addEventListener(\"click\", (e) => {\n      const btn = e.target.closest(\"[data-bsv4-mobtab]\");\n      if (btn) setView(btn.dataset.bsv4Mobtab);\n    });\n    mq.addEventListener(\"change\", place);\n    place();\n  }\n  function buildStageLoader() {\n    const card = document.createElement(\"div\");\n    card.className = \"bsv4-preview__loading\";\n    card.setAttribute(\"role\", \"status\");\n    card.innerHTML = '<span class=\"bsv4-preview__ring\" aria-hidden=\"true\"><svg viewBox=\"0 0 150 150\"><circle cx=\"75\" cy=\"75\" r=\"68\" fill=\"none\" stroke=\"#fff\" stroke-width=\"7\"/><circle class=\"bsv4-preview__ringbar\" cx=\"75\" cy=\"75\" r=\"68\" fill=\"none\" stroke=\"#019aff\" stroke-width=\"7\" stroke-linecap=\"round\" stroke-dasharray=\"427.26\"/></svg><img class=\"bsv4-preview__loading-ninja\" alt=\"\" width=\"200\" height=\"200\"></span><span class=\"bsv4-preview__pill bsv4-preview__lpill\"><small><span class=\"bsv4-preview__lfull\">We\\u2019re making sure your upload is perfect for printing</span><span class=\"bsv4-preview__lshort\">Making sure your upload prints perfectly</span></small><span class=\"bsv4-preview__lrow\"><span class=\"bsv4-preview__ltxt\"><b><span>0%</span> Uploading</b><i> - </i><em class=\"bsv4-preview__lstatus\"></em></span><button type=\"button\">cancel</button></span></span>';\n    card.querySelector(\".bsv4-preview__ringbar\").style.strokeDashoffset = 414.44;\n    card.querySelector(\"img\").src = NINJA_GIF;\n    card.querySelector(\"b span\").setAttribute(\"data-bsv4-upprog\", \"\");\n    const stat = card.querySelector(\".bsv4-preview__lstatus\");\n    let sIdx = 0;\n    stat.textContent = STATUS[0];\n    const rotor = setInterval(() => {\n      if (!card.isConnected) return clearInterval(rotor);\n      sIdx = (sIdx + 1) % STATUS.length;\n      stat.textContent = STATUS[sIdx];\n    }, 2400);\n    card.querySelector(\"button\").addEventListener(\"click\", () => {\n      if (getState().status === \"uploading\") window.resetLoading?.();\n      else reset();\n    });\n    return card;\n  }\n  function setDim(el, val) {\n    if (!el) return;\n    el.hidden = val == null;\n    if (val != null && el.firstElementChild) el.firstElementChild.textContent = `${val}\"`;\n  }\n  function activeFile(state2) {\n    return state2.activeFileId && state2.files.find((f) => f.id === state2.activeFileId) || state2.files[0] || null;\n  }\n  function activeDims(file) {\n    if (file.fixPreview && file.fixPreview.w > 0 && file.fixPreview.h > 0) return { w: fmtIn(file.fixPreview.w), h: fmtIn(file.fixPreview.h) };\n    const tab = getState().sizeTab === \"popular\" ? \"popular\" : \"custom\";\n    const rows = (file.rows || []).filter((r) => (r.mode || \"custom\") === tab && r.w > 0);\n    const row = rows[rows.length - 1];\n    const w = row ? row.w : file.widthIn != null ? file.widthIn : file.inW;\n    const h = row ? row.h : file.heightIn != null ? file.heightIn : file.inH;\n    return { w: fmtIn(w), h: fmtIn(h) };\n  }\n  function fmtIn(v) {\n    const n = parseFloat(v);\n    return Number.isFinite(n) ? n.toFixed(2) : null;\n  }\n  function normalizeExt(file) {\n    const raw = (file.ext || file.type || (file.name || \"\").split(\".\").pop() || \"\").toLowerCase();\n    return raw === \"jpeg\" || raw === \"jfif\" ? \"jpg\" : raw === \"tiff\" ? \"tif\" : raw === \"heif\" ? \"heic\" : raw;\n  }\n  function paramsFor(file, previewCfg) {\n    if (file.params && Object.keys(file.params).length) return file.params;\n    return previewCfg && previewCfg.imgix && previewCfg.imgix[normalizeExt(file)] || {};\n  }\n  function buildPreviewUrl(file, params) {\n    if (file.bgRemove && file.bgrModel) {\n      const pers = file.bgrVersions && file.bgrVersions[file.bgrModel];\n      const disp = file.bgrDisplay && file.bgrDisplay[file.bgrModel];\n      if (file.superRes) {\n        const b = disp && disp[0] === \"h\" ? disp : pers;\n        if (b && !/[?&]bg-remove=/.test(b)) {\n          const base = pers && pers[0] === \"h\" ? pers : b.split(\"?\")[0];\n          return `${base}${base.includes(\"?\") ? \"&\" : \"?\"}trim=colorUnlessAlpha&trim-tol=10&upscale=true`;\n        }\n        if (b) return `${b}${b.includes(\"?\") ? \"&\" : \"?\"}upscale=true`;\n      }\n      if (disp || pers) return disp || pers;\n    }\n    const url = file.imgixUrl;\n    if (!url || /^(data|blob):/.test(url)) return url;\n    if (file.bgRemove && !window.NtBgrStockProvider?.active()) {\n      const c = candidateUrl(url, BGR_MODELS[0]);\n      return file.superRes ? `${c}&upscale=true` : c;\n    }\n    const parts = [];\n    if (params.preview) parts.push(params.preview);\n    if (file.superRes) parts.push(\"upscale=true\");\n    if (file.rotate90) parts.push(\"rot=90\");\n    return parts.length ? `${url}?${parts.join(\"&\")}` : url;\n  }\n  function previewUrl(file) {\n    const fp = file.filmPreview;\n    if (fp && fp.displayUrl && fp.key && fp.key === (window.__bsv4FilmKey || \"\")) return fp.displayUrl;\n    return previewUrlRaw(file);\n  }\n  function previewUrlRaw(file) {\n    if (file.fixPreview && file.fixPreview.url) return file.fixPreview.url;\n    if (file.ntEdges && file.ntEdges.displayUrl) return file.ntEdges.displayUrl;\n    const paint = file.ntPaint;\n    if (file.ntShowOriginal) {\n      if (paint && paint.originalUrl) return paint.originalUrl;\n      return buildPreviewUrl(file, paramsFor(file, cfg2 && cfg2.preview));\n    }\n    if (paint && paint.displayUrl) return paint.displayUrl;\n    return buildPreviewUrl(file, paramsFor(file, cfg2 && cfg2.preview));\n  }\n  function originalUrl(file) {\n    const url = file.imgixUrl;\n    if (!url || /^(data|blob):/.test(url)) return url || \"\";\n    const p = paramsFor(file, cfg2 && cfg2.preview);\n    return p.preview ? `${url}?${p.preview}` : url;\n  }\n  var swapState = /* @__PURE__ */ new WeakMap();\n  function swapImage(img, url, host2) {\n    if (!img || !url) return;\n    let st = swapState.get(img);\n    if (!st) swapState.set(img, st = { pending: null, wait: null });\n    st.painted = img.getAttribute(\"src\") || null;\n    const settle = () => {\n      if (st.wait) {\n        st.wait.remove();\n        st.wait = null;\n      }\n    };\n    if (url === st.painted) {\n      st.pending = null;\n      settle();\n      return;\n    }\n    if (url === st.pending) return;\n    st.pending = url;\n    if (!st.painted) img.style.visibility = \"hidden\";\n    if (host2 && !st.wait) {\n      st.wait = document.createElement(\"span\");\n      st.wait.className = \"bsv4-preview__imgwait\";\n      st.wait.setAttribute(\"aria-hidden\", \"true\");\n      st.wait.innerHTML = '<span class=\"bsv4-preview__loading-spin\"></span>';\n      host2.appendChild(st.wait);\n    }\n    const pre = new Image();\n    pre.onload = () => {\n      if (st.pending !== url) return;\n      img.src = url;\n      img.style.visibility = \"\";\n      if (host2 && pre.naturalHeight) {\n        host2.style.setProperty(\"--bsv4-ar\", (pre.naturalWidth / pre.naturalHeight).toFixed(4));\n      }\n      if (host2 && cfg2 && cfg2.glitter) {\n        host2.style.setProperty(\"--bsv4-art\", `url(\"${url}\")`);\n      }\n      st.painted = url;\n      st.pending = null;\n      settle();\n    };\n    pre.onerror = () => {\n      if (st.pending !== url) return;\n      st.tries = st.tryUrl === url ? st.tries + 1 : (st.tryUrl = url, 1);\n      if (st.tries <= 4) {\n        setTimeout(() => {\n          if (st.pending !== url) return;\n          pre.src = \"\";\n          pre.src = url;\n        }, 1e3 * 2 ** st.tries);\n        return;\n      }\n      st.pending = null;\n      settle();\n    };\n    pre.src = url;\n  }\n  var confirmDlg = null;\n  var confirmYes = null;\n  function confirmRemove(onYes) {\n    if (!confirmDlg) {\n      confirmDlg = document.createElement(\"dialog\");\n      confirmDlg.className = \"bsv4-confirm\";\n      confirmDlg.setAttribute(\"aria-label\", \"Remove file confirmation\");\n      confirmDlg.innerHTML = `<button class=\"bsv4-confirm__x\" data-bsv4-confirm-no aria-label=\"Close\">&times;</button><h3 class=\"bsv4-confirm__title\">Remove File?</h3><p class=\"bsv4-confirm__body\">Are you sure you would like to remove this file?</p><div class=\"bsv4-confirm__actions\"><button class=\"bsv4-btn bsv4-btn--primary\" data-bsv4-confirm-yes>Remove File</button><button class=\"bsv4-btn bsv4-confirm__cancel\" data-bsv4-confirm-no>Cancel</button></div>`;\n      document.querySelector(\"[data-bsv4-root]\").appendChild(confirmDlg);\n      confirmDlg.addEventListener(\"click\", (e) => {\n        if (e.target.closest(\"[data-bsv4-confirm-yes]\")) {\n          confirmDlg.close();\n          if (confirmYes) confirmYes();\n        } else if (e.target === confirmDlg || e.target.closest(\"[data-bsv4-confirm-no]\")) {\n          confirmDlg.close();\n        }\n      });\n    }\n    confirmYes = onYes;\n    confirmDlg.showModal();\n  }\n  function deleteFile(file) {\n    const files = getState().files.filter((f) => f.id !== file.id);\n    if (!files.length) {\n      reset();\n    } else {\n      update({ files });\n    }\n    announce(\"rows-changed\", {});\n    announce(\"file-removed\", { id: file.id, name: file.name });\n    announce(\"file-deleted\", { fresh: !!file.fresh, key: file.uploadName });\n  }\n\n  // src/ported/sizing-math.js\n  function bandOpt2() {\n    try {\n      return typeof window !== \"undefined\" && typeof window.__bsv4Opt2 === \"function\" ? window.__bsv4Opt2() || null : null;\n    } catch (e) {\n      return null;\n    }\n  }\n  function ladderFor(cfg7, file) {\n    const sheet = cfg7 && Array.isArray(cfg7.sheetVariants) && cfg7.sheetVariants.length ? cfg7.sheetVariants : null;\n    return file && file.sheet && sheet ? sheet : cfg7 && cfg7.variants || [];\n  }\n  function matchCustomVariant(variants, widthIn, heightIn) {\n    let area = parseFloat(widthIn) * parseFloat(heightIn);\n    if (!(area >= 1)) area = 1;\n    area = Math.ceil(area);\n    const opt2 = bandOpt2();\n    let customs = variants.filter((v) => v.isCustom && (!opt2 || !v.option2 || v.option2 === opt2));\n    if (!opt2) {\n      const first = (customs.find((v) => v.option2) || {}).option2;\n      if (first) customs = customs.filter((v) => !v.option2 || v.option2 === first);\n    }\n    if (!customs.length) return null;\n    const highestMax = Math.max(...customs.map((v) => v.maxIn));\n    if (area > highestMax) {\n      return customs.reduce((max, cur) => cur.maxIn > max.maxIn ? cur : max);\n    }\n    const lowestMin = Math.min(...customs.map((v) => v.minIn));\n    if (area < lowestMin) {\n      return customs.reduce((min, cur) => cur.minIn < min.minIn ? cur : min);\n    }\n    return customs.slice().reverse().find((v) => area >= v.minIn && area <= v.maxIn) || null;\n  }\n  function parsePopularDims(option1) {\n    const m = /^([\\d.]+)\\s*(?:in(?:ch(?:es)?)?|[\\^\"])?\\s*x\\s*([\\d.]+)/i.exec((option1 || \"\").trim());\n    return m ? { w: parseFloat(m[1]), h: parseFloat(m[2]) } : null;\n  }\n  function containFit(designW, designH, boxW, boxH) {\n    const maxW = parseFloat(boxW);\n    const maxH = parseFloat(boxH);\n    if (!maxW || !maxH || !designW || !designH) return { w: maxW, h: maxH };\n    const aspect = designW / designH;\n    let w = maxW;\n    let h = w / aspect;\n    if (h > maxH) {\n      h = maxH;\n      w = h * aspect;\n    }\n    return { w: parseFloat(w.toFixed(2)), h: parseFloat(h.toFixed(2)) };\n  }\n  function clampToMax(w, h, maxW, maxH, rule) {\n    w = parseFloat(w);\n    h = parseFloat(h);\n    if (!Number.isFinite(w) || !Number.isFinite(h) || !(w > 0) || !(h > 0)) return null;\n    if (rule) {\n      let s = 1;\n      let reason = null;\n      const short = Math.min(w, h);\n      const long = Math.max(w, h);\n      if (rule.shortMax > 0 && short > rule.shortMax) {\n        s = rule.shortMax / short;\n        reason = \"short\";\n      }\n      if (rule.longMax > 0 && long * s > rule.longMax) {\n        s = rule.longMax / long;\n        reason = \"long\";\n      }\n      if (rule.areaMax > 0 && w * h * s * s > rule.areaMax) {\n        s = Math.sqrt(rule.areaMax / (w * h));\n        reason = \"area\";\n      }\n      if (!reason) return { w, h, clamped: false };\n      return {\n        w: Math.floor(w * s * 100) / 100,\n        h: Math.floor(h * s * 100) / 100,\n        clamped: true,\n        reason\n      };\n    }\n    if (w <= maxW && h <= maxH) return { w, h, clamped: false };\n    const scale = Math.min(maxW / w, maxH / h);\n    return {\n      w: parseFloat((w * scale).toFixed(2)),\n      h: parseFloat((h * scale).toFixed(2)),\n      clamped: true\n    };\n  }\n  function lockedCounterpart(editedValue, editedAxis, designW, designH) {\n    const ratio = editedAxis === \"w\" ? designH / designW : designW / designH;\n    return parseFloat((editedValue * ratio).toFixed(2));\n  }\n  function parseTiers(tiers2) {\n    return tiers2.map((t, i) => {\n      const label = String(t.qty).replace(/\\s|pcs?/gi, \"\");\n      let min;\n      let max;\n      if (label.includes(\"+\")) {\n        min = parseInt(label, 10);\n        max = 1e6;\n      } else if (label.includes(\"-\")) {\n        const [a, b] = label.split(\"-\");\n        min = parseInt(a, 10);\n        max = parseInt(b, 10);\n      } else {\n        min = max = parseInt(label, 10);\n      }\n      const next = tiers2[i + 1];\n      return { index: i + 1, min, max, off: t.pct || 0, nextOff: next ? next.pct || 0 : null };\n    });\n  }\n  function tierFor(parsedTiers2, totalQty) {\n    return parsedTiers2.find((t) => totalQty >= t.min && totalQty <= t.max) || null;\n  }\n  function unitsToNextTier(tier, pageQty2, cartQty) {\n    const state2 = cartQty + pageQty2;\n    if (pageQty2 === 1) return tier.max + 2 - state2;\n    if (tier.max - state2 === 0) return 1;\n    return tier.max - state2 + 1;\n  }\n  var DPI_WARN_MIN = 100;\n  function effectiveDpi(pxW, pxH, inW, inH) {\n    const area = inW * inH;\n    if (!(area > 0) || !(pxW > 0) || !(pxH > 0)) return Infinity;\n    return Math.sqrt(pxW * pxH / area);\n  }\n  function discounted(unitPrice, offPct) {\n    const cents = Math.round((parseFloat(unitPrice) || 0) * 100);\n    const off = (window.__bsv4TierExactCents ? Math.round : Math.floor)(cents * (offPct || 0) / 100);\n    return (cents - off) / 100;\n  }\n  var round2 = (n) => parseFloat((Number(n) || 0).toFixed(2));\n  function resolveUnit(row, variants) {\n    const direct = parseFloat(row.price);\n    if (Number.isFinite(direct) && direct > 0) return direct;\n    const list = Array.isArray(variants) ? variants : [];\n    if (row.variantId != null) {\n      const v = list.find((x) => x.id === row.variantId);\n      if (v) return parseFloat(v.price) || 0;\n    }\n    const hasBands = list.some((v) => v.isCustom);\n    if (!hasBands) {\n      if (row.popularKey) {\n        const byKey = list.find((v) => v.isPopular && v.option1 === row.popularKey);\n        if (byKey) return parseFloat(byKey.price) || 0;\n      }\n      for (const v of list) {\n        if (!v.isPopular) continue;\n        const dims = parsePopularDims(v.option1);\n        if (dims && dims.w === row.w && dims.h === row.h) return parseFloat(v.price) || 0;\n      }\n    }\n    const custom = matchCustomVariant(list, row.w, row.h);\n    return custom ? parseFloat(custom.price) || 0 : 0;\n  }\n\n  // src/sizing.js\n  var cfg3;\n  var sectionRoot;\n  var instances = [];\n  var docBound = false;\n  var rowSeq = 0;\n  var debounces = /* @__PURE__ */ new Map();\n  var pendingInputs = /* @__PURE__ */ new Set();\n  function seedFit(d, lim, max) {\n    let w = parseFloat(d.w);\n    let h = parseFloat(d.h);\n    if (Number.isFinite(w) && Number.isFinite(h) && w > 0 && h > 0) {\n      const up = Math.max((lim.minW || 0) / w, (lim.minH || 0) / h);\n      if (Number.isFinite(up) && up > 1) {\n        w = parseFloat((w * up).toFixed(2));\n        h = parseFloat((h * up).toFixed(2));\n      }\n    }\n    return clampToMax(w, h, max.maxW, max.maxH, lim.rule) || { w, h };\n  }\n  function resolveLimits(instanceCfg, globalLimits) {\n    const g = globalLimits || {};\n    const num = (v) => {\n      const n = typeof v === \"string\" && v.trim() !== \"\" ? parseFloat(v) : v;\n      return typeof n === \"number\" && Number.isFinite(n) && n > 0 ? n : null;\n    };\n    const minIn = num(g.minIn) ?? 0.25;\n    const maxIn = num(g.maxIn) ?? 22;\n    const i = instanceCfg || {};\n    if (g.noLimits) {\n      return {\n        minW: num(i.minW) ?? minIn,\n        maxW: Infinity,\n        minH: num(i.minH) ?? minIn,\n        maxH: Infinity,\n        minQty: num(i.minQty) ?? num(g.minQty) ?? 1,\n        // longMax (2026-10-21): the longest side we print \u2014 emitted by the section on the gang pages\n        // (upload_box \"Longest sheet (in)\", 360 = the 30 ft tier); absent elsewhere = no length cap.\n        rule: { shortMax: num(i.maxW) ?? maxIn, areaMax: num(g.areaMax) ?? Infinity, longMax: num(g.longMax) ?? Infinity }\n      };\n    }\n    return {\n      minW: num(i.minW) ?? minIn,\n      maxW: num(i.maxW) ?? maxIn,\n      minH: num(i.minH) ?? minIn,\n      maxH: num(i.maxH) ?? maxIn,\n      minQty: num(i.minQty) ?? num(g.minQty) ?? 1\n    };\n  }\n  function limFor(inst, file) {\n    const lim = inst && inst.lim;\n    if (!lim || !lim.rule || !cfg3 || !cfg3.limits || !cfg3.limits.noLimits) return lim;\n    const top = topBandMax(ladderFor(cfg3, file));\n    if (!(top > 0) || top === lim.rule.areaMax) return lim;\n    return { ...lim, rule: { ...lim.rule, areaMax: top } };\n  }\n  function topBandMax(variants) {\n    let m = 0;\n    for (const v of variants || []) if (v && v.isCustom && v.maxIn > m) m = v.maxIn;\n    return m || null;\n  }\n  function ruleErr(fit, rule) {\n    return fit.reason === \"short\" ? `${rule.shortMax}\" max on the shorter side` : fit.reason === \"long\" ? `${rule.longMax}\" max on the longer side` : `exceeds largest size (${rule.areaMax} sq in)`;\n  }\n  function normSizeKey(s) {\n    return String(s || \"\").toLowerCase().replace(/[\"\\s]/g, \"\");\n  }\n  function parsePopularList(text) {\n    const out = [];\n    for (const line of String(text || \"\").split(\"\\n\")) {\n      const i = line.indexOf(\":\");\n      const keyRaw = i >= 0 ? line.slice(0, i) : line;\n      const desc = i >= 0 ? line.slice(i + 1).trim() : \"\";\n      const m = normSizeKey(keyRaw).match(/^(\\d+(?:\\.\\d+)?)x(\\d+(?:\\.\\d+)?)$/);\n      if (!m) continue;\n      out.push({ value: `${m[1]}\" x ${m[2]}\"`, w: parseFloat(m[1]), h: parseFloat(m[2]), desc });\n    }\n    return out;\n  }\n  function popularCapFor(popular, w, h) {\n    if (!Array.isArray(popular)) return null;\n    return popular.find((c) => c.w === w && c.h === h) || null;\n  }\n  function effectiveMax(lim, cap) {\n    return {\n      maxW: Math.min(lim.maxW, cap && Number.isFinite(cap.maxW) ? cap.maxW : Infinity),\n      maxH: Math.min(lim.maxH, cap && Number.isFinite(cap.maxH) ? cap.maxH : Infinity),\n      rule: lim.rule\n    };\n  }\n  function computeLockedDims(value, axis, aspectW, aspectH, lim) {\n    let val = parseFloat(value);\n    if (!Number.isFinite(val) || val <= 0) return null;\n    let err = null;\n    const minEdit = axis === \"w\" ? lim.minW : lim.minH;\n    const maxEdit = axis === \"w\" ? lim.maxW : lim.maxH;\n    if (minEdit && val < minEdit) {\n      val = minEdit;\n      err = `${minEdit}\" minimum`;\n    }\n    if (val > maxEdit) {\n      val = maxEdit;\n      err = `${maxEdit}\" max`;\n    }\n    const other = lockedCounterpart(val, axis, aspectW, aspectH);\n    let w = axis === \"w\" ? val : other;\n    let h = axis === \"w\" ? other : val;\n    const minOther = axis === \"w\" ? lim.minH : lim.minW;\n    const maxOther = axis === \"w\" ? lim.maxH : lim.maxW;\n    const counter = axis === \"w\" ? h : w;\n    if (counter > maxOther) {\n      const fit = clampToMax(w, h, lim.maxW, lim.maxH);\n      w = fit.w;\n      h = fit.h;\n      err = `${maxOther}\" max`;\n    } else if (minOther && counter < minOther) {\n      const scale = minOther / counter;\n      w = parseFloat((w * scale).toFixed(2));\n      h = parseFloat((h * scale).toFixed(2));\n      err = `${minOther}\" minimum`;\n      const fit = clampToMax(w, h, lim.maxW, lim.maxH);\n      if (fit && fit.clamped) {\n        w = fit.w;\n        h = fit.h;\n      }\n    }\n    if (lim.rule) {\n      const fit = clampToMax(w, h, Infinity, Infinity, lim.rule);\n      if (fit && fit.clamped) {\n        w = fit.w;\n        h = fit.h;\n        err = ruleErr(fit, lim.rule);\n      }\n    }\n    return { w, h, err };\n  }\n  function fileDims(file) {\n    return {\n      w: parseFloat(file.inW ?? file.widthIn) || 0,\n      h: parseFloat(file.inH ?? file.heightIn) || 0\n    };\n  }\n  function fileAspect(file) {\n    if (typeof window.__bsv4AspectOverride === \"function\") {\n      try {\n        const o = window.__bsv4AspectOverride(file);\n        if (o && o.w > 0 && o.h > 0) return { w: o.w, h: o.h };\n      } catch (e) {\n      }\n    }\n    if (file.pxW && file.pxH) return { w: file.pxW, h: file.pxH };\n    const d = fileDims(file);\n    return { w: d.w || 1, h: d.h || 1 };\n  }\n  function fileExt(file) {\n    return (file.ext || file.type || \"\").toLowerCase();\n  }\n  function initSizing(root2, config) {\n    cfg3 = config;\n    sectionRoot = root2;\n    instances = [];\n    const entries = Array.isArray(cfg3.sizing) ? cfg3.sizing : [];\n    if (!entries.length) return;\n    if (cfg3.limits && cfg3.limits.noLimits && !(cfg3.limits.areaMax > 0)) {\n      cfg3.limits.areaMax = topBandMax(cfg3.variants);\n    }\n    root2.querySelectorAll('[data-bsv4-block=\"size_inputs\"]').forEach((el, i) => {\n      const settings = entries[Math.min(i, entries.length - 1)];\n      const inst = {\n        el,\n        settings,\n        lim: resolveLimits(settings, cfg3.limits),\n        rows: el.querySelector(\"[data-bsv4-rows]\"),\n        template: el.querySelector(\"[data-bsv4-row-template]\"),\n        tab: \"custom\"\n      };\n      if (!inst.rows || !inst.template) return;\n      instances.push(inst);\n    });\n    if (!instances.length) return;\n    if (instances[0].settings && instances[0].settings.popularOnly) {\n      if (getState().sizeTab !== \"popular\") update({ sizeTab: \"popular\" });\n    }\n    if (root2.dataset.bsv4SizingBound !== \"1\") {\n      root2.dataset.bsv4SizingBound = \"1\";\n      root2.addEventListener(\"input\", onInput);\n      root2.addEventListener(\"change\", onChange);\n      root2.addEventListener(\"click\", onClick);\n      root2.addEventListener(\"focusout\", onFieldSettle);\n      root2.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" && e.target.matches && e.target.matches(\"[data-bsv4-w], [data-bsv4-h], [data-bsv4-qty]\")) {\n          e.preventDefault();\n          e.target.blur();\n        }\n      });\n      const selectAll = (e) => {\n        if (e.target.matches && e.target.matches(\"[data-bsv4-w], [data-bsv4-h], [data-bsv4-qty]\")) {\n          e.target.select();\n        }\n      };\n      root2.addEventListener(\"focusin\", selectAll);\n      root2.addEventListener(\"click\", selectAll);\n      window.addEventListener(\n        \"scroll\",\n        (e) => {\n          if (!sectionRoot || sectionRoot.dataset.bsv4CddOpen !== \"1\") return;\n          if (e.target instanceof Element && e.target.closest(\"[data-bsv4-color-menu]\")) return;\n          const menu = sectionRoot.querySelector(\"[data-bsv4-color-menu]:not([hidden])\");\n          if (!menu) {\n            sectionRoot.dataset.bsv4CddOpen = \"\";\n            return;\n          }\n          const btn = menu.parentElement.querySelector(\"[data-bsv4-color-open]\");\n          const br = btn.getBoundingClientRect();\n          if (br.bottom < 0 || br.top > window.innerHeight) {\n            menu.hidden = true;\n            sectionRoot.dataset.bsv4CddOpen = \"\";\n            return;\n          }\n          placeColorMenu(menu, btn);\n        },\n        true\n      );\n      window.addEventListener(\"resize\", () => closeColorMenus());\n    }\n    if (!docBound) {\n      docBound = true;\n      document.addEventListener(\"bsv4:file-uploaded\", onFileUploaded);\n      document.addEventListener(\"bsv4:opt2-changed\", onOpt2Changed);\n      document.addEventListener(\"bsv4:price-changed\", () => syncAll());\n      subscribe(() => syncAll());\n    }\n    loadMoreVariants();\n    syncAll();\n  }\n  function onOpt2Changed() {\n    const files = getState().files || [];\n    let touched = false;\n    for (const file of files) {\n      for (const row of file.rows || []) {\n        if (row.gang || row.mode === \"popular\") continue;\n        const v = matchCustomVariant(ladderFor(cfg3, file), row.w, row.h);\n        const id = v ? v.id : null;\n        if (id !== row.variantId) {\n          row.variantId = id;\n          touched = true;\n        }\n      }\n    }\n    if (touched) update({ files: [...files] });\n  }\n  function onFileUploaded(e) {\n    const file = getState().files.find((f) => f.id === e.detail.id);\n    if (!file) return;\n    if (cfg3.gangSheet && !file.single) return;\n    const popularOnly = instances[0] && instances[0].settings && instances[0].settings.popularOnly;\n    if (!popularOnly && getState().sizeTab !== \"custom\") update({ sizeTab: \"custom\" });\n    if (popularOnly && getState().sizeTab !== \"popular\") update({ sizeTab: \"popular\" });\n    const tileRows = sectionRoot.querySelector(\n      `[data-bsv4-tile=\"${file.id}\"] [data-bsv4-tile-rows]`\n    );\n    const d = fileDims(file);\n    if (popularOnly) {\n      const row = addRow(file, { w: d.w, h: d.h }, tileRows || void 0, void 0, \"popular\");\n      const inst0 = instances[0];\n      const cmsFirst = parsePopularList(inst0 && inst0.settings && inst0.settings.popularDescs)[0];\n      const firstVariant = (cfg3.variants || []).find((v) => v.isPopular);\n      const firstKey = cmsFirst ? cmsFirst.value : firstVariant && firstVariant.option1;\n      if (row && firstKey) {\n        const box = parsePopularDims(firstKey);\n        row.popularKey = firstKey;\n        if (box) {\n          const a = fileAspect(file);\n          const fit = containFit(a.w, a.h, box.w, box.h);\n          row.w = fit.w;\n          row.h = fit.h;\n        }\n        if (!(inst0 && inst0.settings && inst0.settings.rowOption)) {\n          const pv = (cfg3.variants || []).find((v) => v.isPopular && v.option1 === firstKey);\n          row.variantId = pv ? pv.id : null;\n        }\n        commit();\n      }\n      return;\n    }\n    addRow(file, { w: d.w, h: d.h }, tileRows || void 0);\n  }\n  function instanceFor(el) {\n    return el && instances.find((inst) => inst.el.contains(el)) || null;\n  }\n  function addRow(file, dims, container, via, modeOverride) {\n    const inst = via || instanceFor(container) || instances[0];\n    if (!inst) return null;\n    const mode = modeOverride === \"popular\" || modeOverride === \"custom\" ? modeOverride : getState().sizeTab === \"popular\" ? \"popular\" : \"custom\";\n    let row;\n    if (mode === \"popular\") {\n      row = {\n        id: `r-${++rowSeq}`,\n        fileId: file.id,\n        mode,\n        w: 0,\n        h: 0,\n        qty: inst.lim.minQty,\n        variantId: null\n      };\n    } else {\n      const flim = limFor(inst, file);\n      const max = effectiveMax(flim, null);\n      const clamped = seedFit(dims, flim, max);\n      const variant = matchCustomVariant(ladderFor(cfg3, file), clamped.w, clamped.h);\n      row = {\n        id: `r-${++rowSeq}`,\n        fileId: file.id,\n        mode,\n        w: clamped.w,\n        h: clamped.h,\n        qty: inst.lim.minQty,\n        variantId: variant ? variant.id : null\n      };\n    }\n    file.rows.push(row);\n    if (container) renderRow(file, row, container);\n    commit();\n    return row;\n  }\n  var POPULAR_DESC_UV = {\n    '1\" x 1\"': \"Small Logo / Lid Dot\",\n    '2\" x 2\"': \"Cup / Bottle Logo\",\n    '3\" x 3\"': \"Tumbler Logo\",\n    '4\" x 4\"': \"Tumbler / Bottle Front\",\n    '5\" x 5\"': \"Laptop / Cooler Decal\",\n    '6\" x 6\"': \"Box / Case Branding\",\n    '7\" x 7\"': \"Equipment Label\",\n    '8\" x 8\"': \"Window / Wall Decal\",\n    '9\" x 9\"': \"Large Equipment Decal\",\n    '10\" x 10\"': \"Signage / Cornhole\",\n    '11\" x 11\"': \"Large Signage Decal\",\n    '22\" x 24\"': \"Max Sheet / Multi-Decal\"\n  };\n  var POPULAR_DESC = {\n    '2\" x 2\"': \"Tag Print / Neck Label\",\n    '3\" x 3\"': \"Small Tag/Sleeve Icon\",\n    '4\" x 2\"': \"Name Label/Small Chest Text\",\n    '4\" x 4\"': \"Left-Chest Logo\",\n    '5\" x 3\"': \"Small Badge Logo\",\n    '5\" x 5\"': \"Small Chest/Youth Print\",\n    '6\" x 6\"': \"Std Left-Chest/Youth\",\n    '7\" x 7\"': \"Small Front (Adult)\",\n    '8\" x 8\"': \"Medium Front Print\",\n    '9\" x 9\"': \"Large Chest/Med Front\",\n    '9\" x 11\"': \"Vertical Front/Youth\",\n    '10\" x 10\"': \"Standard Adult Front\",\n    '11\" x 5\"': \"Chest Banner/Sleeve\",\n    '11\" x 11\"': \"Adult Full Front\",\n    '11\" x 14\"': \"Tall Front/Jersey\",\n    '12\" x 17\"': \"Oversized Front/Hoodie\"\n  };\n  function famDescMap() {\n    const fam = getState().family;\n    return fam === \"uv\" ? POPULAR_DESC_UV : fam === \"dtf\" ? POPULAR_DESC : {};\n  }\n  function appendVariantSizes(select) {\n    const famMap = famDescMap();\n    const have = new Set([...select.options].map((o) => o.value));\n    for (const v of cfg3.variants || []) {\n      if (!v.isPopular || have.has(v.option1)) continue;\n      have.add(v.option1);\n      const opt = document.createElement(\"option\");\n      opt.value = v.option1;\n      const desc = famMap[v.option1];\n      opt.textContent = desc ? `${v.option1} - ${desc}` : v.option1;\n      opt.dataset.orig = opt.textContent;\n      select.appendChild(opt);\n    }\n  }\n  function loadMoreVariants() {\n    const pages = Math.max(cfg3.variantPages || 1, cfg3.sheetVariantPages || 1);\n    for (let p = 2; p <= pages; p++) {\n      fetch(`${location.pathname}?section_id=${cfg3.variantSection || cfg3.sheetVariantSection}&page=${p}`).then((r) => r.text()).then((html) => {\n        const el = new DOMParser().parseFromString(html, \"text/html\").getElementById(\"bsv4-config\");\n        const page = JSON.parse(el.textContent);\n        if (p <= (cfg3.variantPages || 1)) cfg3.variants.push(...page.variants || []);\n        if (Array.isArray(cfg3.sheetVariants) && p <= (cfg3.sheetVariantPages || 1)) cfg3.sheetVariants.push(...page.sheetVariants || []);\n        sectionRoot.querySelectorAll(\"[data-bsv4-vsizes]\").forEach(appendVariantSizes);\n        if (cfg3.limits && cfg3.limits.noLimits) {\n          const top = topBandMax(cfg3.variants);\n          if (top > (cfg3.limits.areaMax || 0)) {\n            cfg3.limits.areaMax = top;\n            for (const inst of instances) if (inst.lim && inst.lim.rule) inst.lim.rule.areaMax = top;\n          }\n        }\n      }).catch(console.error);\n    }\n  }\n  function renderRow(file, row, container) {\n    const inst = instanceFor(container) || instances[0];\n    if (!inst) return null;\n    const node = inst.template.content.firstElementChild.cloneNode(true);\n    node.dataset.bsv4RowId = row.id;\n    const select = node.querySelector(\"[data-bsv4-popular]\");\n    if (select) {\n      select.innerHTML = \"\";\n      const ph = document.createElement(\"option\");\n      ph.value = \"\";\n      ph.textContent = \"Select a popular size\";\n      ph.disabled = true;\n      ph.selected = true;\n      select.appendChild(ph);\n      const famMap = famDescMap();\n      const cmsList = parsePopularList(inst.settings && inst.settings.popularDescs);\n      if (cmsList.length) {\n        for (const en of cmsList) {\n          const opt = document.createElement(\"option\");\n          opt.value = en.value;\n          const desc = en.desc || famMap[en.value];\n          opt.textContent = desc ? `${en.value} - ${desc}` : en.value;\n          opt.dataset.orig = opt.textContent;\n          select.appendChild(opt);\n        }\n      } else {\n        select.dataset.bsv4Vsizes = \"1\";\n        appendVariantSizes(select);\n      }\n    }\n    applyTabToNode(node, row.mode || \"custom\");\n    syncRowDom(node, file, row);\n    container.appendChild(node);\n    return node;\n  }\n  function syncAll() {\n    if (!instances.length) return;\n    const state2 = getState();\n    const tab = state2.sizeTab === \"popular\" ? \"popular\" : \"custom\";\n    for (const inst of instances) {\n      inst.el.querySelectorAll(\"[data-bsv4-size-tab]\").forEach((t) => {\n        t.classList.toggle(\"is-active\", t.dataset.bsv4SizeTab === tab);\n      });\n      const intro = inst.el.querySelector(\".bsv4-sizing__intro\");\n      if (intro) applyTabToNode(intro, tab);\n    }\n    const valid = /* @__PURE__ */ new Set();\n    for (const file of state2.files) {\n      for (const row of file.rows) {\n        if (!row.id) row.id = `r-${++rowSeq}`;\n        valid.add(row.id);\n      }\n    }\n    sectionRoot.querySelectorAll(\"[data-bsv4-row-id]\").forEach((n) => {\n      if (!valid.has(n.dataset.bsv4RowId)) n.remove();\n    });\n    const tiled = /* @__PURE__ */ new Set();\n    if (state2.mode === \"multi\" && state2.files.length) {\n      sectionRoot.querySelectorAll(\"[data-bsv4-tile] [data-bsv4-row-id]\").forEach((n) => {\n        tiled.add(n.dataset.bsv4RowId);\n      });\n    } else {\n      sectionRoot.querySelectorAll(\"[data-bsv4-tile] [data-bsv4-row-id]\").forEach((n) => n.remove());\n    }\n    for (const inst of instances) {\n      const keep = /* @__PURE__ */ new Set();\n      let cursor = null;\n      for (const file of state2.files) {\n        for (const row of file.rows) {\n          if (tiled.has(row.id)) continue;\n          let node = inst.rows.querySelector(`[data-bsv4-row-id=\"${row.id}\"]`);\n          if (node) syncRowDom(node, file, row);\n          else node = renderRow(file, row, inst.rows);\n          keep.add(node);\n          const expected = cursor ? cursor.nextElementSibling : inst.rows.firstElementChild;\n          if (node !== expected) inst.rows.insertBefore(node, expected);\n          cursor = node;\n        }\n      }\n      inst.rows.querySelectorAll(\"[data-bsv4-row-id]\").forEach((n) => {\n        if (!keep.has(n)) n.remove();\n      });\n    }\n    if (state2.mode === \"multi\") {\n      for (const file of state2.files) {\n        const host2 = sectionRoot.querySelector(\n          `[data-bsv4-tile=\"${file.id}\"] [data-bsv4-tile-rows]`\n        );\n        if (!host2) continue;\n        const firstRow = host2.querySelector(\"[data-bsv4-row-id]\");\n        if (!firstRow) continue;\n        let cursor = firstRow.previousElementSibling;\n        for (const row of file.rows) {\n          const node = host2.querySelector(`[data-bsv4-row-id=\"${row.id}\"]`);\n          if (!node) continue;\n          const expected = cursor ? cursor.nextElementSibling : host2.firstElementChild;\n          if (node !== expected) host2.insertBefore(node, expected);\n          cursor = node;\n        }\n      }\n    }\n    sectionRoot.querySelectorAll(\"[data-bsv4-row-id]\").forEach((n) => {\n      if (state2.mode === \"multi\" && n.closest(\"[data-bsv4-tile]\")) return;\n      const id = n.dataset.bsv4RowId;\n      let mode = \"custom\";\n      for (const file of state2.files) {\n        const row = (file.rows || []).find((r) => r.id === id);\n        if (row) {\n          mode = row.mode || \"custom\";\n          break;\n        }\n      }\n      const off = mode !== tab;\n      n.classList.toggle(\"is-disabled\", off);\n      n.querySelectorAll(\"input, select, button\").forEach((el) => {\n        el.disabled = off;\n      });\n    });\n    sectionRoot.querySelectorAll(\"[data-bsv4-tile] [data-bsv4-row-id]\").forEach((n) => {\n      const id = n.dataset.bsv4RowId;\n      for (const file of state2.files) {\n        const row = (file.rows || []).find((r) => r.id === id);\n        if (row) {\n          syncRowDom(n, file, row);\n          projectPrice(n, file, row);\n          break;\n        }\n      }\n    });\n  }\n  function fmtIn2(n) {\n    const num = parseFloat(n);\n    return Number.isFinite(num) ? String(parseFloat(num.toFixed(2))) : String(n);\n  }\n  function syncRowDom(node, file, row) {\n    const wEl = node.querySelector(\"[data-bsv4-w]\");\n    const hEl = node.querySelector(\"[data-bsv4-h]\");\n    const qEl = node.querySelector(\"[data-bsv4-qty]\");\n    const fmt2 = (n) => {\n      const x = parseFloat(n);\n      return Number.isFinite(x) && x > 0 ? x.toFixed(2) : n;\n    };\n    const lockEl = node.querySelector(\"[data-bsv4-lock]\");\n    if (lockEl) {\n      const ok = !!(window.__bsv4CanUnlock && window.__bsv4CanUnlock(file));\n      if (!ok) row.unlocked = false;\n      lockEl.hidden = !ok;\n      lockEl.setAttribute(\"aria-pressed\", row.unlocked ? \"true\" : \"false\");\n    }\n    if (wEl && !pendingInputs.has(wEl)) wEl.value = fmt2(row.w);\n    if (hEl && !pendingInputs.has(hEl)) hEl.value = fmt2(row.h);\n    if (qEl && !pendingInputs.has(qEl)) qEl.value = row.qty;\n    const colorSel = node.querySelector(\"[data-bsv4-color]\");\n    if (colorSel) {\n      colorSel.value = row.color || \"\";\n      const lbl = node.querySelector(\"[data-bsv4-color-label]\");\n      if (lbl) lbl.textContent = row.color || lbl.dataset.ph || (lbl.dataset.ph = lbl.textContent);\n      const dot = node.querySelector(\"[data-bsv4-colordot]\");\n      if (dot) {\n        const key = row.color || \"\";\n        if (dot.dataset.bsv4DotFor !== key) {\n          dot.dataset.bsv4DotFor = key;\n          while (dot.firstChild) dot.removeChild(dot.firstChild);\n          if (key) dot.appendChild(swatchChip(key));\n        }\n      }\n    }\n    const select = node.querySelector(\"[data-bsv4-popular]\");\n    if (select) {\n      select.value = row.mode === \"popular\" && row.popularKey ? row.popularKey : \"\";\n      for (const opt of select.options) {\n        if (!opt.dataset.orig) continue;\n        let label = opt.dataset.orig;\n        if (cfg3.smartSizing && opt.value === select.value && row.mode === \"popular\" && row.w > 0 && row.h > 0) {\n          const parts = opt.dataset.orig.split(\"-\");\n          const desc = parts.length > 1 ? ` -${parts.slice(1).join(\"-\")}` : \"\";\n          label = `${fmtIn2(row.w)}\" x ${fmtIn2(row.h)}\"${desc}`;\n        }\n        if (opt.textContent !== label) opt.textContent = label;\n      }\n    }\n    const smart = node.querySelector(\"[data-bsv4-smart]\");\n    if (smart) {\n      smart.hidden = !(cfg3.smartSizing && row.mode === \"popular\" && row.popularKey);\n    }\n    const removeBtn = node.querySelector(\"[data-bsv4-row-remove]\");\n    if (removeBtn) removeBtn.classList.toggle(\"is-lone-hidden\", (file.rows || []).length <= 1);\n    const unsetPopular = row.mode === \"popular\" && !row.popularKey;\n    const ext = fileExt(file);\n    const raster = ext === \"png\" || ext === \"jpg\" || ext === \"jpeg\";\n    const eff = unsetPopular || !raster ? Infinity : effectiveDpi(file.pxW, file.pxH, row.w, row.h);\n    const warn = (file.superRes ? eff * 4 : eff) < DPI_WARN_MIN;\n    row.dpiWarn = warn;\n    const dpiEl = node.querySelector(\"[data-bsv4-dpi]\");\n    if (dpiEl) {\n      const upClears = warn && !file.superRes && !!(file.params || {}).superRes && eff * 4 >= DPI_WARN_MIN;\n      const dpiState = warn ? upClears ? \"link\" : \"plain\" : \"\";\n      if (dpiEl._bsv4Dpi !== dpiState) {\n        dpiEl._bsv4Dpi = dpiState;\n        dpiEl.innerHTML = warn ? '<svg width=\"13\" height=\"13\" viewBox=\"0 0 16 16\" style=\"vertical-align:-1px\"><circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#fa0\"/><path d=\"M8 3.5v5M8 12v.1\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg> Artwork may lose clarity at this size. ' : \"\";\n        if (upClears) {\n          const up = document.createElement(\"button\");\n          up.type = \"button\";\n          up.className = \"bsv4-dpi-up\";\n          up.textContent = \"Upscale for Free\";\n          dpiEl.append(up);\n        } else if (warn) {\n          dpiEl.append(\"Choose a smaller size.\");\n        }\n      }\n      dpiEl.hidden = !warn;\n    }\n    projectPrice(node, file, row);\n  }\n  function projectPrice(node, file, row) {\n    const priceEl = node.querySelector(\"[data-bsv4-row-price]\");\n    const totalEl = node.querySelector(\"[data-bsv4-row-total]\");\n    const discEl = node.querySelector(\"[data-bsv4-row-disc]\");\n    if (row.mode === \"popular\" && !row.popularKey) {\n      if (priceEl) priceEl.innerHTML = \"&mdash;\";\n      if (totalEl) totalEl.innerHTML = \"&mdash;\";\n      if (discEl) discEl.textContent = \"\";\n      return;\n    }\n    const pricing = getState().pricing;\n    const rows = pricing && pricing.rows || [];\n    let entry = rows.find((r) => r.rowId === row.id);\n    if (!entry) {\n      const mine = rows.filter((r) => r.fileId === file.id);\n      const byIndex = mine[file.rows.indexOf(row)];\n      if (byIndex && byIndex.rowId == null) entry = byIndex;\n    }\n    if (!entry) return;\n    const struck = entry.off > 0 && entry.orig > entry.unit;\n    if (priceEl && Number.isFinite(entry.unit)) {\n      priceEl.textContent = \"\";\n      if (struck && Number.isFinite(entry.orig)) {\n        const was = document.createElement(\"s\");\n        was.className = \"bsv4-row__was\";\n        was.textContent = `$${entry.orig.toFixed(2)}`;\n        priceEl.appendChild(was);\n      }\n      priceEl.appendChild(document.createTextNode(`$${entry.unit.toFixed(2)}`));\n      const ea = document.createElement(\"small\");\n      ea.textContent = \" ea\";\n      priceEl.appendChild(ea);\n    }\n    if (totalEl && Number.isFinite(entry.total)) {\n      totalEl.textContent = \"\";\n      if (struck && Number.isFinite(entry.origTotal)) {\n        const was = document.createElement(\"s\");\n        was.className = \"bsv4-row__was\";\n        was.textContent = `$${entry.origTotal.toFixed(2)}`;\n        totalEl.appendChild(was);\n      }\n      totalEl.appendChild(document.createTextNode(`$${entry.total.toFixed(2)}`));\n    }\n    if (discEl) discEl.textContent = entry.off > 0 ? `${entry.off}% off` : \"\";\n  }\n  function applyTabToNode(node, tab) {\n    node.querySelectorAll(\"[data-bsv4-mode-custom]\").forEach((el) => {\n      el.hidden = tab !== \"custom\";\n    });\n    node.querySelectorAll(\"[data-bsv4-mode-popular]\").forEach((el) => {\n      el.hidden = tab !== \"popular\";\n    });\n  }\n  function ensureModeRow(file, tab) {\n    if ((file.rows || []).some((r) => (r.mode || \"custom\") === tab)) return null;\n    const inst = instances[0];\n    if (!inst) return null;\n    let row;\n    if (tab === \"popular\") {\n      row = {\n        id: `r-${++rowSeq}`,\n        fileId: file.id,\n        mode: \"popular\",\n        w: 0,\n        h: 0,\n        qty: inst.lim.minQty,\n        variantId: null\n      };\n    } else {\n      const d = fileDims(file);\n      const flim = limFor(inst, file);\n      const max = effectiveMax(flim, null);\n      const clamped = seedFit(d, flim, max);\n      const variant = matchCustomVariant(ladderFor(cfg3, file), clamped.w, clamped.h);\n      row = {\n        id: `r-${++rowSeq}`,\n        fileId: file.id,\n        mode: \"custom\",\n        w: clamped.w,\n        h: clamped.h,\n        qty: inst.lim.minQty,\n        variantId: variant ? variant.id : null\n      };\n    }\n    file.rows.push(row);\n    return row;\n  }\n  function setSizeTab(tab) {\n    const primary = instances[0];\n    if (tab === \"popular\" && !(primary && primary.settings && primary.settings.popularEnabled)) return;\n    if (getState().sizeTab === tab) return;\n    const state2 = getState();\n    for (const file of state2.files) ensureModeRow(file, tab);\n    update({ files: state2.files, sizeTab: tab });\n    announce(\"rows-changed\", {});\n  }\n  function findRow(target) {\n    const node = target.closest(\"[data-bsv4-row-id]\");\n    if (!node) return {};\n    const id = node.dataset.bsv4RowId;\n    for (const file of getState().files) {\n      const row = file.rows.find((r) => r.id === id);\n      if (row) return { node, file, row };\n    }\n    return { node };\n  }\n  function onInput(e) {\n    const { node, file, row } = findRow(e.target);\n    if (!row) return;\n    if (e.target.matches(\"[data-bsv4-w], [data-bsv4-h]\")) {\n      const axis = e.target.matches(\"[data-bsv4-w]\") ? \"w\" : \"h\";\n      pendingInputs.add(e.target);\n      debounce(`${row.id}-${axis}`, 300, () => {\n        if (document.activeElement !== e.target) pendingInputs.delete(e.target);\n        applyDimensionEdit(node, file, row, e.target);\n      });\n    } else if (e.target.matches(\"[data-bsv4-qty]\")) {\n      pendingInputs.add(e.target);\n      debounce(`${row.id}-q`, 300, () => {\n        if (document.activeElement !== e.target) pendingInputs.delete(e.target);\n        const inst = instanceFor(node) || instances[0];\n        row.qty = Math.max(inst.lim.minQty, parseInt(e.target.value, 10) || inst.lim.minQty);\n        if (!pendingInputs.has(e.target)) e.target.value = row.qty;\n        commit();\n      });\n    }\n  }\n  function onFieldSettle(e) {\n    const t = e.target;\n    if (!t.matches || !t.matches(\"[data-bsv4-w], [data-bsv4-h], [data-bsv4-qty]\")) return;\n    if (!pendingInputs.has(t)) return;\n    pendingInputs.delete(t);\n    const { node, file, row } = findRow(t);\n    if (!row) return;\n    if (t.matches(\"[data-bsv4-qty]\")) {\n      cancelDebounce(`${row.id}-q`);\n      const inst = instanceFor(node) || instances[0];\n      row.qty = Math.max(inst.lim.minQty, parseInt(t.value, 10) || inst.lim.minQty);\n      t.value = row.qty;\n      commit();\n    } else {\n      const axis = t.matches(\"[data-bsv4-w]\") ? \"w\" : \"h\";\n      cancelDebounce(`${row.id}-${axis}`);\n      applyDimensionEdit(node, file, row, t);\n    }\n  }\n  function applyDimensionEdit(node, file, row, editedInput) {\n    const inst = instanceFor(node) || instances[0];\n    const axis = editedInput.matches(\"[data-bsv4-w]\") ? \"w\" : \"h\";\n    const errEl = node.querySelector(\"[data-bsv4-row-err]\");\n    if (errEl) errEl.hidden = true;\n    const cap = Number.isFinite(row.capW) || Number.isFinite(row.capH) ? { maxW: row.capW, maxH: row.capH } : null;\n    const max = effectiveMax(limFor(inst, file), cap);\n    const a = fileAspect(file);\n    const lim = { minW: inst.lim.minW, maxW: max.maxW, minH: inst.lim.minH, maxH: max.maxH, rule: max.rule };\n    const out = row.unlocked && window.__bsv4FreeDims ? window.__bsv4FreeDims(editedInput.value, axis, row, lim) : computeLockedDims(editedInput.value, axis, a.w, a.h, lim);\n    if (!out) {\n      syncRowDom(node, file, row);\n      return;\n    }\n    if (out.err && errEl) flagErr(errEl, out.err, pendingInputs.has(editedInput));\n    row.w = out.w;\n    row.h = out.h;\n    const variant = matchCustomVariant(ladderFor(cfg3, file), out.w, out.h);\n    row.variantId = variant ? variant.id : null;\n    syncRowDom(node, file, row);\n    commit();\n  }\n  function onChange(e) {\n    if (e.target.matches(\"[data-bsv4-color]\")) {\n      const { node: node2, file: file2, row: row2 } = findRow(e.target);\n      if (!row2) return;\n      const inst2 = instanceFor(node2) || instances[0];\n      const rowOpt2 = inst2.settings && inst2.settings.rowOption;\n      row2.color = e.target.value || null;\n      if (row2.mode === \"popular\" && row2.popularKey) {\n        const v = (cfg3.variants || []).find(\n          (x) => x.isPopular && x.option1 === row2.popularKey && (!rowOpt2 || x.option2 === row2.color)\n        );\n        row2.variantId = v ? v.id : null;\n      }\n      syncRowDom(node2, file2, row2);\n      commit();\n      return;\n    }\n    if (!e.target.matches(\"[data-bsv4-popular]\")) return;\n    const { node, file, row } = findRow(e.target);\n    if (!row) return;\n    const inst = instanceFor(node) || instances[0];\n    const value = e.target.value;\n    if (!value) return;\n    const box = parsePopularDims(value);\n    if (!box) return;\n    row.mode = \"popular\";\n    row.popularKey = value;\n    const cap = popularCapFor(inst.settings && inst.settings.popular, box.w, box.h);\n    if (cap) {\n      row.capW = cap.maxW;\n      row.capH = cap.maxH;\n    } else {\n      delete row.capW;\n      delete row.capH;\n    }\n    const a = fileAspect(file);\n    const fit = containFit(a.w, a.h, box.w, box.h);\n    const max = effectiveMax(inst.lim, cap);\n    const clamped = clampToMax(fit.w, fit.h, max.maxW, max.maxH, max.rule) || fit;\n    row.w = clamped.w;\n    row.h = clamped.h;\n    const rowOpt = inst.settings && inst.settings.rowOption;\n    const hasBands = (cfg3.variants || []).some((v) => v.isCustom);\n    const pricingVariant = hasBands ? matchCustomVariant(ladderFor(cfg3, file), row.w, row.h) : rowOpt ? row.color ? (cfg3.variants || []).find((v) => v.isPopular && v.option1 === value && v.option2 === row.color) : null : (cfg3.variants || []).find((v) => v.isPopular && v.option1 === value);\n    row.variantId = pricingVariant ? pricingVariant.id : null;\n    syncRowDom(node, file, row);\n    commit();\n  }\n  function closeColorMenus(except) {\n    let anyOpen = false;\n    sectionRoot.querySelectorAll(\"[data-bsv4-color-menu]:not([hidden])\").forEach((m) => {\n      if (m !== except) m.hidden = true;\n      else anyOpen = true;\n    });\n    if (sectionRoot) sectionRoot.dataset.bsv4CddOpen = anyOpen ? \"1\" : \"\";\n  }\n  function placeColorMenu(menu, btn) {\n    const br = btn.getBoundingClientRect();\n    menu.style.left = `${Math.round(br.left)}px`;\n    menu.style.top = `${Math.round(br.bottom + 4)}px`;\n    menu.style.minWidth = `${Math.round(br.width)}px`;\n  }\n  function swatchChip(key) {\n    const chip = document.createElement(\"span\");\n    chip.className = \"bsv4-cdd__chip\";\n    const src = sectionRoot.querySelector(\n      `[data-bsv4-swatch-for=\"${typeof CSS !== \"undefined\" && CSS.escape ? CSS.escape(key) : key}\"]`\n    );\n    if (src) {\n      const img = src.querySelector(\"img\");\n      if (img && img.getAttribute(\"src\")) {\n        chip.style.backgroundImage = `url(\"${img.getAttribute(\"src\")}\")`;\n        chip.style.backgroundSize = \"cover\";\n      } else {\n        let bg = \"\";\n        src.querySelectorAll(\"*\").forEach((n) => {\n          if (bg) return;\n          const b = getComputedStyle(n).backgroundColor;\n          if (b && b !== \"rgba(0, 0, 0, 0)\" && b !== \"transparent\") bg = b;\n        });\n        chip.style.background = bg || \"#fff\";\n      }\n    }\n    return chip;\n  }\n  function onColorMenuClick(e) {\n    const openBtn = e.target.closest(\"[data-bsv4-color-open]\");\n    if (openBtn) {\n      const wrap = openBtn.parentElement;\n      const menu = wrap.querySelector(\"[data-bsv4-color-menu]\");\n      if (!menu) return true;\n      if (menu.hidden && !menu.dataset.bsv4SwFilled) {\n        menu.dataset.bsv4SwFilled = \"1\";\n        menu.querySelectorAll(\"[data-bsv4-color-pick]\").forEach((opt) => {\n          opt.querySelector(\".bsv4-cdd__sw\").appendChild(swatchChip(opt.getAttribute(\"data-bsv4-color-pick\")));\n        });\n      }\n      closeColorMenus(menu);\n      const opening = menu.hidden;\n      if (opening) {\n        placeColorMenu(menu, openBtn);\n      }\n      menu.hidden = !opening;\n      sectionRoot.dataset.bsv4CddOpen = opening ? \"1\" : \"\";\n      return true;\n    }\n    const pick = e.target.closest(\"[data-bsv4-color-pick]\");\n    if (pick) {\n      const wrap = pick.closest(\".bsv4-row__field--color\");\n      const sel = wrap.querySelector(\"[data-bsv4-color]\");\n      sel.value = pick.getAttribute(\"data-bsv4-color-pick\");\n      sel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      closeColorMenus();\n      return true;\n    }\n    closeColorMenus();\n    return false;\n  }\n  function onClick(e) {\n    if (onColorMenuClick(e)) return;\n    const tab = e.target.closest(\"[data-bsv4-size-tab]\");\n    if (tab) {\n      setSizeTab(tab.dataset.bsv4SizeTab);\n      return;\n    }\n    if (e.target.closest(\"[data-bsv4-goto-popular]\")) {\n      setSizeTab(\"popular\");\n      return;\n    }\n    const add = e.target.closest(\"[data-bsv4-add-size]\");\n    if (add) {\n      const state2 = getState();\n      const file2 = state2.files.find((f) => f.id === state2.activeFileId) || state2.files[0];\n      if (file2) {\n        const d = fileDims(file2);\n        addRow(file2, { w: d.w, h: d.h }, void 0, instanceFor(add));\n      }\n      return;\n    }\n    const { node, file, row } = findRow(e.target);\n    if (!row) return;\n    if (node.classList.contains(\"is-disabled\")) {\n      const field = e.target.closest(\".bsv4-row__field\");\n      setSizeTab(row.mode || \"custom\");\n      const el = field && field.querySelector(\"input, select\");\n      if (el && !el.disabled) {\n        el.focus();\n        if (el.tagName === \"INPUT\") el.select();\n      }\n      return;\n    }\n    if (e.target.closest(\".bsv4-dpi-up\")) {\n      const sr = sectionRoot.querySelector(\n        `[data-bsv4-bgr-for=\"${file.id}\"] [data-bsv4-toggle-sr]`\n      );\n      if (sr && !sr.checked) {\n        sr.click();\n      } else if (!file.superRes) {\n        file.superRes = true;\n        update({ files: [...getState().files] });\n      }\n      return;\n    }\n    if (e.target.closest(\"[data-bsv4-lock]\")) {\n      row.unlocked = !row.unlocked;\n      const wIn = node.querySelector(\"[data-bsv4-w]\");\n      if (!row.unlocked && wIn) applyDimensionEdit(node, file, row, wIn);\n      else {\n        syncRowDom(node, file, row);\n        commit();\n      }\n      return;\n    }\n    const step = e.target.closest(\"[data-bsv4-step]\");\n    if (step) {\n      const [axis, dir] = step.dataset.bsv4Step.split(\":\");\n      const delta = dir === \"+\" ? 1 : -1;\n      if (axis === \"q\") {\n        const inst = instanceFor(node) || instances[0];\n        row.qty = Math.max(inst.lim.minQty, row.qty + delta);\n        const qEl = node.querySelector(\"[data-bsv4-qty]\");\n        if (qEl) qEl.value = row.qty;\n        commit();\n      } else {\n        const input = node.querySelector(axis === \"w\" ? \"[data-bsv4-w]\" : \"[data-bsv4-h]\");\n        if (!input) return;\n        input.value = (parseFloat(input.value || 0) + delta * 0.25).toFixed(2);\n        input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n      }\n    } else if (e.target.closest(\"[data-bsv4-row-remove]\")) {\n      file.rows = file.rows.filter((r) => r.id !== row.id);\n      node.remove();\n      const state2 = getState();\n      if (!file.rows.length && state2.files.length === 1 && state2.files[0].id === file.id) {\n        update({ files: [], status: \"empty\", mode: \"single\" });\n        announce(\"rows-changed\", { totalQty: 0 });\n        return;\n      }\n      commit();\n    }\n  }\n  function flagErr(el, msg, sticky) {\n    el.textContent = msg;\n    el.hidden = false;\n    el.classList.remove(\"is-fading\");\n    clearTimeout(el.__bsv4ErrT);\n    if (sticky) return;\n    el.__bsv4ErrT = setTimeout(() => {\n      el.classList.add(\"is-fading\");\n      el.__bsv4ErrT = setTimeout(() => {\n        el.hidden = true;\n        el.classList.remove(\"is-fading\");\n      }, 400);\n    }, 1800);\n  }\n  function debounce(key, ms, fn) {\n    clearTimeout(debounces.get(key));\n    debounces.set(key, setTimeout(fn, ms));\n  }\n  function cancelDebounce(key) {\n    clearTimeout(debounces.get(key));\n    debounces.delete(key);\n  }\n  function commit() {\n    update({ files: [...getState().files] });\n    announce(\"rows-changed\", { totalQty: pageQty() });\n  }\n  function refitRowsToAspect(file, prevPx, bg) {\n    const inst = instances[0];\n    if (!inst) return;\n    const a = fileAspect(file);\n    const scaleW = prevPx && prevPx.w > 0 && file.pxW > 0 ? file.pxW / prevPx.w : null;\n    const ext = bg && bg.adopt ? fileDims(file) : null;\n    const ceil = bg && bg.ceilPx && bg.ceilPx.w > 0 && bg.ceilPx.h > 0 ? { w: bg.ceilPx.w / 300, h: bg.ceilPx.h / 300 } : null;\n    for (const row of file.rows || []) {\n      if (row.unlocked && row.mode !== \"popular\") continue;\n      if (row.mode === \"popular\" && row.popularKey) {\n        const box = parsePopularDims(row.popularKey);\n        if (!box) continue;\n        const cap = Number.isFinite(row.capW) || Number.isFinite(row.capH) ? { maxW: row.capW, maxH: row.capH } : null;\n        const max = effectiveMax(limFor(inst, file), cap);\n        const fit = containFit(a.w, a.h, box.w, box.h);\n        const clamped = clampToMax(fit.w, fit.h, max.maxW, max.maxH, max.rule) || fit;\n        row.w = clamped.w;\n        row.h = clamped.h;\n      } else {\n        const out = ext ? seedFit(ext, inst.lim, effectiveMax(inst.lim, null)) : computeLockedDims(scaleW ? +(row.w * scaleW).toFixed(2) : row.w, \"w\", a.w, a.h, inst.lim);\n        if (!out) continue;\n        if (ext && ceil) {\n          const s = Math.min(1, ceil.w / out.w, ceil.h / out.h);\n          if (s < 1) {\n            out.w = +(out.w * s).toFixed(2);\n            out.h = +(out.h * s).toFixed(2);\n          }\n        }\n        row.w = out.w;\n        row.h = out.h;\n        const v = matchCustomVariant(ladderFor(cfg3, file), row.w, row.h);\n        if (v) row.variantId = v.id;\n      }\n    }\n  }\n  function pageQty() {\n    return getState().files.reduce(\n      (sum, f) => sum + f.rows.reduce((s, r) => s + (r.qty || 0), 0),\n      0\n    );\n  }\n\n  // src/pricing.js\n  var cfg4;\n  var els2;\n  var tiers;\n  var parsedTiers;\n  var model;\n  var run = 0;\n  var lastWrite = null;\n  var teardown = null;\n  var viewAllOpen = false;\n  var yieldToMain = () => typeof scheduler !== \"undefined\" && scheduler.yield ? scheduler.yield() : new Promise((r) => setTimeout(r, 0));\n  var resolveUnit2 = resolveUnit;\n  function deriveVariantTiers(variants) {\n    if (!Array.isArray(variants) || !variants.length) return null;\n    const out = [];\n    for (const v of variants) {\n      const label = String(v.option1 || \"\").trim();\n      if (!/^\\d+(?:\\s*-\\s*\\d+|\\s*\\+)?(?:\\s*pcs?)?$/i.test(label)) return null;\n      const price = parseFloat(v.price);\n      if (!Number.isFinite(price)) return null;\n      out.push({ qty: label, price });\n    }\n    const base = out[0].price;\n    return out.map((t) => ({\n      qty: t.qty,\n      pct: base > 0 ? Math.max(0, Math.round((1 - t.price / base) * 100)) : 0,\n      price: t.price\n    }));\n  }\n  function computePricing({ files, cartQty, tiers: tierEntries, variants, sheetVariants, model: mdl, activeRowId: activeRowId2 }) {\n    const sheetIds = new Set((files || []).filter((f) => f && f.sheet).map((f) => f.id));\n    const ladder = (fileId) => sheetVariants && sheetVariants.length && sheetIds.has(fileId) ? sheetVariants : variants;\n    const parsed = parseTiers(tierEntries || []);\n    const flat = [];\n    for (const f of files || []) {\n      for (const r of f.rows || []) flat.push({ fileId: f.id, row: r });\n    }\n    const pageQty2 = flat.reduce((s, e) => s + (e.row.qty || 0), 0);\n    if (mdl === \"per-design\") {\n      const rows2 = flat.map(({ fileId, row }) => {\n        const t = tierFor(parsed, Math.max(row.qty || 0, 1));\n        const unit = t ? round2(tierEntries[t.index - 1].price) : 0;\n        return {\n          fileId,\n          rowId: row.id,\n          w: row.w,\n          h: row.h,\n          qty: row.qty,\n          unit,\n          total: round2(unit * (row.qty || 0)),\n          orig: unit,\n          origTotal: round2(unit * (row.qty || 0)),\n          off: 0\n        };\n      });\n      const total2 = round2(rows2.reduce((s, r) => s + r.total, 0));\n      const last = flat.length ? tierFor(parsed, Math.max(flat[flat.length - 1].row.qty || 0, 1)) : null;\n      const rawTier2 = last ? { qty: tierEntries[last.index - 1].qty, pct: tierEntries[last.index - 1].pct || 0 } : null;\n      return {\n        pricing: { model: \"per-design\", rows: rows2, total: total2, tier: rawTier2 },\n        pageQty: pageQty2,\n        totalQty: pageQty2,\n        activeTier: last,\n        activeBase: null\n      };\n    }\n    if (mdl === \"per-line\") {\n      const rows2 = flat.map(({ fileId, row }) => {\n        const t = tierFor(parsed, Math.max(row.qty || 0, 1));\n        const off2 = t ? t.off : 0;\n        const orig = round2(resolveUnit2(row, ladder(fileId)));\n        const unit = round2(discounted(orig, off2));\n        return {\n          fileId,\n          rowId: row.id,\n          w: row.w,\n          h: row.h,\n          qty: row.qty,\n          unit,\n          total: round2(unit * (row.qty || 0)),\n          orig,\n          origTotal: round2(orig * (row.qty || 0)),\n          off: off2\n        };\n      });\n      const total2 = round2(rows2.reduce((s, r) => s + r.total, 0));\n      const activeEntry = flat.length ? activeRowId2 && flat.find((e) => e.row.id === activeRowId2) || flat[flat.length - 1] : null;\n      const active2 = activeEntry ? tierFor(parsed, Math.max(activeEntry.row.qty || 0, 1)) : null;\n      const rawTier2 = active2 ? { qty: tierEntries[active2.index - 1].qty, pct: tierEntries[active2.index - 1].pct || 0 } : null;\n      return {\n        pricing: { model: \"per-line\", rows: rows2, total: total2, tier: rawTier2 },\n        pageQty: pageQty2,\n        totalQty: pageQty2,\n        activeTier: active2,\n        activeQty: activeEntry ? activeEntry.row.qty || 0 : 0,\n        activeBase: activeEntry ? resolveUnit2(activeEntry.row, variants) : null\n      };\n    }\n    const totalQty = pageQty2 + (cartQty || 0);\n    const active = flat.length ? tierFor(parsed, Math.max(totalQty, 1)) : null;\n    const off = active ? active.off : 0;\n    const rows = flat.map(({ fileId, row }) => {\n      const orig = round2(resolveUnit2(row, ladder(fileId)));\n      const unit = round2(discounted(orig, off));\n      return {\n        fileId,\n        rowId: row.id,\n        w: row.w,\n        h: row.h,\n        qty: row.qty,\n        unit,\n        total: round2(unit * (row.qty || 0)),\n        orig,\n        origTotal: round2(orig * (row.qty || 0)),\n        off\n      };\n    });\n    const total = round2(rows.reduce((s, r) => s + r.total, 0));\n    const rawTier = active ? { qty: tierEntries[active.index - 1].qty, pct: tierEntries[active.index - 1].pct || 0 } : null;\n    return {\n      pricing: { model: \"cumulative\", rows, total, tier: rawTier },\n      pageQty: pageQty2,\n      totalQty,\n      activeTier: active,\n      // Tier-table reference row = the line item the customer is EDITING\n      // (Owen 2026-07-10, modal parity): the last-focused row wins; fall back\n      // to the newest row (the old behavior) when nothing was touched or the\n      // focused row was deleted.\n      activeBase: flat.length ? (() => {\n        const e = activeRowId2 && flat.find((x) => x.row.id === activeRowId2) || flat[flat.length - 1];\n        return resolveUnit2(e.row, ladder(e.fileId));\n      })() : null\n    };\n  }\n  var activeRowId = null;\n  function initPricing(root2, config) {\n    cfg4 = config || {};\n    if (!root2.dataset.bsv4PricingFocusBound) {\n      root2.dataset.bsv4PricingFocusBound = \"1\";\n      root2.addEventListener(\"focusin\", (e) => {\n        const node = e.target.closest && e.target.closest(\"[data-bsv4-row-id]\");\n        if (!node || node.dataset.bsv4RowId === activeRowId) return;\n        activeRowId = node.dataset.bsv4RowId;\n        project();\n      });\n    }\n    if (!cfg4.pricingTable) return;\n    const block = root2 && root2.querySelector('[data-bsv4-block=\"price_table\"]');\n    if (!block || block.dataset.bsv4PricingInit === \"1\") return;\n    block.dataset.bsv4PricingInit = \"1\";\n    if (teardown) teardown();\n    els2 = { lists: [], viewAlls: [] };\n    const pageList = block.querySelector(\"[data-bsv4-tiers]\");\n    if (pageList) els2.lists.push(pageList);\n    const railHost = root2.querySelector(\"[data-bsv4-pricing-rail]\");\n    if (railHost && pageList) {\n      let railList = railHost.querySelector(\"[data-bsv4-tiers]\");\n      if (!railList) {\n        const wrap = document.createElement(\"div\");\n        wrap.className = \"bsv4-pricing\";\n        wrap.appendChild(pageList.cloneNode(true));\n        railHost.appendChild(wrap);\n        railList = wrap.querySelector(\"[data-bsv4-tiers]\");\n      }\n      railHost.hidden = false;\n      els2.lists.push(railList);\n    }\n    for (const list of els2.lists) {\n      const existing = list.querySelector(\".bsv4-pricing__va\");\n      if (existing) {\n        els2.viewAlls.push(existing);\n        continue;\n      }\n      const va = document.createElement(\"button\");\n      va.type = \"button\";\n      va.className = \"bsv4-pricing__va\";\n      va.hidden = true;\n      va.innerHTML = '<span class=\"bsv4-pricing__va-chev\" aria-hidden=\"true\"></span><span class=\"bsv4-pricing__va-text\">View All</span>';\n      va.addEventListener(\"click\", () => {\n        viewAllOpen = !viewAllOpen;\n        project();\n      });\n      const firstTier = list.querySelector(\"[data-bsv4-tier]\");\n      if (firstTier) firstTier.parentElement.insertBefore(va, firstTier);\n      else list.appendChild(va);\n      els2.viewAlls.push(va);\n    }\n    model = \"cumulative\";\n    tiers = cfg4.tiers || [];\n    if ((cfg4.pricingTable.tierSource || \"settings\") === \"variants\") {\n      const host2 = block.querySelector(\".bsv4-pricing\") || block;\n      host2.setAttribute(\"data-bsv4-tier-source\", \"variants\");\n      const derived = deriveVariantTiers(cfg4.variants);\n      if (derived) {\n        model = \"per-design\";\n        tiers = derived;\n        renderTierRows(derived);\n      }\n    }\n    if (model === \"cumulative\" && (cfg4.pricingTable.tierScope || \"cumulative\") === \"per_line\") {\n      model = \"per-line\";\n    }\n    parsedTiers = parseTiers(tiers);\n    const ctl = new AbortController();\n    const unsub = subscribe((_state, patch) => {\n      if (patch && patch.pricing === lastWrite && Object.keys(patch).length === 1) return;\n      project();\n    });\n    document.addEventListener(\"bsv4:rows-changed\", () => project(), { signal: ctl.signal });\n    document.addEventListener(\n      \"bsv4:cart-qty-refreshed\",\n      (e) => {\n        cfg4.cartQty = e.detail.count;\n        project();\n      },\n      { signal: ctl.signal }\n    );\n    teardown = () => {\n      unsub();\n      ctl.abort();\n    };\n    project();\n  }\n  function renderTierRows(derived) {\n    for (const list of els2.lists) renderTierRowsInto(list, derived);\n  }\n  function renderTierRowsInto(list, derived) {\n    const wrap = list && list.querySelector(\"[data-bsv4-tier-rows]\");\n    if (!wrap) return;\n    wrap.textContent = \"\";\n    derived.forEach((t, i) => {\n      const row = document.createElement(\"div\");\n      row.className = \"bsv4-pricing__row\";\n      row.setAttribute(\"data-bsv4-tier\", String(i + 1));\n      row.setAttribute(\"role\", \"row\");\n      const qty = document.createElement(\"span\");\n      qty.className = \"bsv4-pricing__qty\";\n      qty.setAttribute(\"role\", \"cell\");\n      qty.textContent = /pc/i.test(t.qty) ? t.qty : `${t.qty} pcs`;\n      const price = document.createElement(\"span\");\n      price.className = \"bsv4-pricing__price\";\n      price.setAttribute(\"role\", \"cell\");\n      const amt = document.createElement(\"b\");\n      amt.setAttribute(\"data-bsv4-tier-price\", \"\");\n      amt.textContent = \"\\u2014\";\n      const ea = document.createElement(\"span\");\n      ea.className = \"bsv4-pricing__ea\";\n      ea.hidden = true;\n      ea.textContent = \"ea\";\n      price.append(amt, ea);\n      const off = document.createElement(\"span\");\n      off.className = \"bsv4-pricing__off\";\n      off.setAttribute(\"role\", \"cell\");\n      off.textContent = t.pct ? `${t.pct}% off` : \"\\xA0\";\n      const msg = document.createElement(\"span\");\n      msg.className = \"bsv4-pricing__msg\";\n      msg.setAttribute(\"data-bsv4-tier-msg\", \"\");\n      msg.setAttribute(\"role\", \"cell\");\n      msg.hidden = true;\n      row.append(qty, price, off, msg);\n      wrap.appendChild(row);\n    });\n  }\n  function setMsg(el, parts) {\n    el.textContent = \"\";\n    for (const p of parts) {\n      if (typeof p === \"string\") {\n        el.append(p);\n      } else {\n        const b = document.createElement(\"b\");\n        b.textContent = p.b;\n        el.append(b);\n      }\n    }\n  }\n  async function project() {\n    const runId = ++run;\n    const state2 = getState();\n    if (cfg4.gangSheet && !(state2.files || []).some((f) => f.single)) return;\n    const cartQty = state2.cartQty || cfg4.cartQty || 0;\n    const files = state2.files.filter((f) => !cfg4.gangSheet || f.single).map((f) => ({\n      ...f,\n      rows: (f.rows || []).filter((r) => r.w > 0)\n    }));\n    const sheetOnly = files.length > 0 && files.every((f) => f.sheet);\n    const result = computePricing({\n      files,\n      cartQty: sheetOnly ? 0 : cartQty,\n      tiers: sheetOnly ? [] : tiers,\n      variants: cfg4.variants,\n      sheetVariants: cfg4.sheetVariants,\n      model,\n      activeRowId\n    });\n    await yieldToMain();\n    if (runId !== run) return;\n    if (JSON.stringify(result.pricing) !== JSON.stringify(state2.pricing)) {\n      lastWrite = result.pricing;\n      update({ pricing: result.pricing });\n      announce(\"price-changed\", { total: result.pricing.total, tier: result.pricing.tier });\n    }\n    const tier = result.activeTier;\n    let msgParts = null;\n    if (result.pricing.rows.length && tier) {\n      if (tier.nextOff === null) {\n        msgParts = model === \"cumulative\" ? [`You've beat the video game and reached the `, { b: \"Maximum Cumulative Discount!\" }] : [`You've reached the `, { b: \"maximum discount\" }, `!`];\n      } else if (model === \"per-design\") {\n        const lastQty = result.pricing.rows[result.pricing.rows.length - 1].qty || 0;\n        msgParts = [\"Add \", { b: String(tier.max - lastQty + 1) }, ` more to reach ${tier.nextOff}% off.`];\n      } else if (model === \"per-line\") {\n        const need = tier.max - Math.max(result.activeQty || 0, 0) + 1;\n        msgParts = [\"Add \", { b: String(need) }, ` more of this size to reach ${tier.nextOff}% off.`];\n      } else {\n        const need = unitsToNextTier(tier, result.pageQty, cartQty);\n        msgParts = [\"Add \", { b: String(need) }, ` of this design or your next upload to reach ${tier.nextOff}% off savings.`];\n      }\n    }\n    for (let li = 0; li < els2.lists.length; li++) {\n      const list = els2.lists[li];\n      const viewAll = els2.viewAlls[li];\n      const foldBelow = tier ? tier.index : 0;\n      const foldable = foldBelow > 1;\n      if (viewAll) {\n        viewAll.hidden = !foldable;\n        const txt = viewAll.querySelector(\".bsv4-pricing__va-text\");\n        if (txt) txt.textContent = viewAllOpen ? \"hide\" : \"View All\";\n        viewAll.classList.toggle(\"is-open\", viewAllOpen);\n      }\n      const rows = list.querySelectorAll(\"[data-bsv4-tier]\");\n      rows.forEach((row, i) => {\n        const t = parsedTiers[i];\n        if (!t) return;\n        row.hidden = foldable && !viewAllOpen && t.index < foldBelow;\n        const active = !!tier && t.index === tier.index;\n        row.classList.toggle(\"is-active\", active);\n        const cell = row.querySelector(\"[data-bsv4-tier-price]\");\n        if (cell) {\n          let amt = null;\n          if (model === \"per-design\") {\n            amt = `$${round2(tiers[i].price).toFixed(2)}`;\n          } else if (result.activeBase != null && result.activeBase > 0) {\n            amt = `$${discounted(result.activeBase, t.off).toFixed(2)}`;\n          }\n          cell.textContent = amt || \"\\u2014\";\n          const ea = row.querySelector(\".bsv4-pricing__ea\");\n          if (ea) ea.hidden = !amt;\n        }\n        const msgEl = row.querySelector(\"[data-bsv4-tier-msg]\");\n        if (msgEl) {\n          if (active && msgParts) {\n            setMsg(msgEl, msgParts);\n            msgEl.hidden = false;\n          } else {\n            msgEl.hidden = true;\n          }\n        }\n      });\n    }\n  }\n\n  // src/cart.js\n  var cfg5;\n  var els3;\n  var busy = false;\n  function initCart(root2, config) {\n    cfg5 = config;\n    els3 = {\n      root: root2,\n      btn: root2.querySelector(\"[data-bsv4-checkout]\"),\n      err: root2.querySelector(\"[data-bsv4-cart-err]\"),\n      // ALL precut checkboxes (Builder Pro plan \u00A7D): the page CTA card AND the\n      // modal rail card both carry data-bsv4-precut \u2014 every instance binds,\n      // and the store projection keeps them in lockstep.\n      precuts: [...root2.querySelectorAll(\"[data-bsv4-precut]\")],\n      // anchored to the WRAPPER class, not a .bsv4-cta ancestor \u2014 the notes\n      // card moved to the Step-1 preview (Owen 2026-07-16) and the wrapper\n      // travels with it\n      notes: () => root2.querySelector('.bsv4-cta__notes .nt-design-note textarea[name=\"properties[Design Notes]\"]')\n    };\n    if (!els3.btn) return;\n    els3.btnLabel = els3.btn.textContent;\n    const rewards = root2.querySelector(\"[data-bsv4-rewards]\");\n    if (rewards) {\n      const pct = parseFloat(rewards.dataset.bsv4TierPct) || 2;\n      const amtEl = rewards.querySelector(\"[data-bsv4-reward-amt]\");\n      subscribe(() => {\n        const s = getState(), p = s.pricing || {};\n        const q = s.precut ? (p.rows || []).reduce((n, r) => n + (r.qty || 0), 0) : 0;\n        const amt = `$${(((p.total || 0) + q * (+cfg5.precutFee || 0)) * pct / 100).toFixed(2)}`;\n        if (amtEl && amtEl.textContent !== amt) amtEl.textContent = amt;\n      });\n    }\n    if (els3.precuts.length) {\n      for (const cb of els3.precuts) {\n        cb.addEventListener(\"change\", () => update({ precut: cb.checked }));\n      }\n      const each = root2.querySelector(\".bsv4-cta__precut-each\");\n      const info = root2.querySelector(\".bsv4-cta__precut-info\");\n      const fee = Number(cfg5.precutFee) || 0;\n      if (each && fee) each.textContent = `$${fee.toFixed(2)} each`;\n      subscribe((state2, patch) => {\n        if (!(\"precut\" in patch)) return;\n        for (const cb of els3.precuts) {\n          if (cb.checked !== state2.precut) cb.checked = state2.precut;\n        }\n        if (each && fee) {\n          each.hidden = !state2.precut;\n          if (info) info.style.display = state2.precut ? \"none\" : \"\";\n        }\n      });\n    }\n    els3.btn.addEventListener(\"click\", () => addToCart());\n    setAddAnotherGate(maybeCommitThenIntake);\n    const addAnother = root2.querySelector(\"[data-bsv4-add-another]\");\n    const addInput = root2.querySelector(\"[data-bsv4-add-input]\");\n    if (addAnother && addInput) {\n      const mainInput = root2.querySelector(\"[data-bsv4-file-input]\");\n      if (mainInput && mainInput.accept) addInput.accept = mainInput.accept;\n      const zoneReady = () => !busy && getState().status !== \"uploading\";\n      addAnother.addEventListener(\"click\", () => {\n        if (zoneReady()) addInput.click();\n      });\n      addAnother.addEventListener(\"keydown\", (e) => {\n        if ((e.key === \"Enter\" || e.key === \" \") && zoneReady()) {\n          e.preventDefault();\n          addInput.click();\n        }\n      });\n      addInput.addEventListener(\"change\", () => {\n        const files = Array.from(addInput.files || []);\n        addInput.value = \"\";\n        if (files.length) addAnotherFlow(() => intake(files));\n      });\n      addAnother.addEventListener(\"dragover\", (e) => {\n        e.preventDefault();\n        addAnother.classList.add(\"is-dragover\");\n      });\n      addAnother.addEventListener(\"dragleave\", () => addAnother.classList.remove(\"is-dragover\"));\n      addAnother.addEventListener(\"drop\", (e) => {\n        e.preventDefault();\n        addAnother.classList.remove(\"is-dragover\");\n        const files = Array.from(e.dataTransfer && e.dataTransfer.files || []);\n        if (files.length && zoneReady()) addAnotherFlow(() => intake(files));\n      });\n    }\n  }\n  async function addAnotherFlow(run2) {\n    const ok = await addToCart({ stayAndReset: true });\n    if (!ok) return;\n    try {\n      await run2();\n    } catch (_) {\n    }\n  }\n  function maybeCommitThenIntake({ files, entries }) {\n    if (busy) return true;\n    const state2 = getState();\n    if (state2.status !== \"uploaded\" || state2.mode === \"multi\" || !state2.files.length) return false;\n    addAnotherFlow(() => entries ? intakeFromUrls(entries) : intake(files));\n    return true;\n  }\n  async function showCartConfirm(committed) {\n    try {\n      const c2 = await fetch(\"/cart.js\", { cache: \"no-store\" }).then((r) => r.json());\n      const n = c2 && Number(c2.item_count);\n      if (Number.isFinite(n) && n > 0) {\n        const setAll = (sel, fn) => document.querySelectorAll(sel).forEach(fn);\n        const sn = String(n);\n        setAll(\"[data-header-cart-count]\", (elm) => {\n          elm.textContent = sn;\n          elm.setAttribute(\"data-count\", sn);\n        });\n        if (typeof c2.total_price === \"number\") {\n          const money = `$${(c2.total_price / 100).toFixed(2)}`;\n          setAll(\"[data-header-cart-total]\", (elm) => {\n            elm.textContent = money;\n          });\n        }\n      }\n    } catch (_) {\n    }\n    const el = document.createElement(\"div\");\n    el.className = \"bsv4-cartok\";\n    el.setAttribute(\"role\", \"status\");\n    const c = committed || {};\n    const price = typeof c.total === \"number\" && c.total > 0 ? `$${c.total.toFixed(2)}` : \"\";\n    const K = \"bsv4-cartok__\";\n    el.innerHTML = `<div class=\"${K}head\"><span class=\"${K}check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 12.5l5.5 5.5L20 6.5\"/></svg></span><strong>Added to cart</strong><button type=\"button\" class=\"${K}x\" aria-label=\"Close\">&times;</button></div>` + (c.name ? `<div class=\"${K}body\">${c.thumb ? `<img class=\"${K}thumb\" src=\"${c.thumb}\" alt=\"\">` : \"\"}<span class=\"${K}meta\"><strong class=\"${K}name\"></strong><span class=\"${K}qty\">Qty ${c.qty || 1}</span></span>${price ? `<strong class=\"${K}price\">${price}</strong>` : \"\"}</div>` : \"\");\n    const nameEl = el.querySelector(\".bsv4-cartok__name\");\n    if (nameEl) nameEl.textContent = c.name || \"\";\n    (els3.root || document.body).appendChild(el);\n    requestAnimationFrame(() => el.classList.add(\"is-in\"));\n    const dismiss = () => {\n      el.classList.remove(\"is-in\");\n      setTimeout(() => el.remove(), 300);\n    };\n    let timer = setTimeout(dismiss, 4e3);\n    el.addEventListener(\"mouseenter\", () => clearTimeout(timer));\n    el.addEventListener(\"mouseleave\", () => {\n      clearTimeout(timer);\n      timer = setTimeout(dismiss, 1500);\n    });\n    el.querySelector(`.${K}x`).addEventListener(\"click\", () => {\n      clearTimeout(timer);\n      dismiss();\n    });\n  }\n  async function addToCart(opts = {}) {\n    if (busy) return false;\n    if (getState().status === \"uploading\") return false;\n    hideErr();\n    if (typeof window.__bsv4PrepareSheets === \"function\" && (getState().files || []).some((f) => f && f.sheet)) {\n      const btn = els3.btn;\n      const label = btn ? btn.textContent : \"\";\n      busy = true;\n      if (btn) {\n        btn.disabled = true;\n        btn.textContent = \"Preparing your print-ready sheet\\u2026\";\n      }\n      let ok = false;\n      try {\n        ok = await window.__bsv4PrepareSheets();\n      } catch (e) {\n        ok = false;\n      }\n      busy = false;\n      if (btn) {\n        btn.disabled = false;\n        btn.textContent = els3.btnLabel || label;\n      }\n      if (!ok) {\n        showErr(\"We couldn't prepare your gang sheet for print. Please try again, or upload a new file.\");\n        return false;\n      }\n    }\n    if (typeof window.__bsv4PrepareBig === \"function\" && (getState().files || []).some((f) => f && f.bigFile && !f.sheet)) {\n      const btn = els3.btn;\n      const label = btn ? btn.textContent : \"\";\n      busy = true;\n      if (btn) {\n        btn.disabled = true;\n        btn.textContent = \"Preparing your print file\\u2026\";\n      }\n      let ok = false;\n      try {\n        ok = await window.__bsv4PrepareBig();\n      } catch (e) {\n        ok = false;\n      }\n      busy = false;\n      if (btn) {\n        btn.disabled = false;\n        btn.textContent = els3.btnLabel || label;\n      }\n      if (!ok) {\n        showErr(\"We couldn't prepare your print file. Please try again, or upload a new file.\");\n        return false;\n      }\n    }\n    const state2 = getState();\n    const noteEl = els3.notes();\n    const noteBox = noteEl && noteEl.closest(\".nt-design-note\");\n    const stageNotes = !!els3.root.querySelector(\"[data-bsv4-notes]\");\n    const noteOpen = stageNotes || !noteBox || noteBox.getAttribute(\"data-collapsed\") === \"false\";\n    const designNote = noteEl && noteOpen ? noteEl.value.trim() : \"\";\n    const popupSource = readPopupAttribution();\n    const rowOpt = cfg5 && Array.isArray(cfg5.sizing) && cfg5.sizing[0] && cfg5.sizing[0].rowOption;\n    if (rowOpt) {\n      const noColor = state2.files.find(\n        (f) => (f.rows || []).some(\n          (r) => (r.mode || \"custom\") === \"popular\" && r.w > 0 && r.variantId == null\n        )\n      );\n      if (noColor) {\n        showErr(`Please pick a ${String(rowOpt).split(\" \").pop().toLowerCase()} for each size.`);\n        const scope = state2.mode === \"multi\" && els3.root.querySelector(`[data-bsv4-tile=\"${noColor.id}\"]`) || els3.root;\n        const btn = scope.querySelector(\".bsv4-cdd__btn\");\n        if (btn) {\n          btn.focus();\n          btn.scrollIntoView({ block: \"center\" });\n        }\n        return false;\n      }\n    }\n    if (window.__bsv4CartGate) {\n      let gate = window.__bsv4CartGate(state2);\n      if (gate === false) return false;\n      if (gate && typeof gate.then === \"function\") {\n        busy = true;\n        els3.btn.disabled = true;\n        els3.btn.textContent = \"Adding\\u2026\";\n        try {\n          gate = await gate;\n        } catch (_) {\n          gate = true;\n        }\n        busy = false;\n        els3.btn.disabled = false;\n        els3.btn.textContent = els3.btnLabel || \"Add to Cart\";\n        if (gate === false) return false;\n      }\n    }\n    const items = [];\n    const pairs = [];\n    const skipped = [];\n    for (const file of state2.files) {\n      const note = (file.designNote || designNote || \"\").trim();\n      if (!file.params || !file.params.order) {\n        const png = ((cfg5 || {}).imgixParams || {}).png || {};\n        file.params = {\n          ...png,\n          ...file.params || {},\n          order: file.params && file.params.order || png.order || \"\",\n          cart: file.params && file.params.cart || png.cart || \"\"\n        };\n      }\n      for (const row of file.rows) {\n        if (!Number.isFinite(row.variantId) || !Number.isFinite(row.qty) || row.qty < 1) {\n          skipped.push(row.id);\n          continue;\n        }\n        const item = buildItem(file, row, { designNote: note, precut: state2.precut, popupSource });\n        items.push(item);\n        pairs.push({ item, file, row });\n      }\n    }\n    if (typeof window.__bsv4FinalizeItems === \"function\" && pairs.some((p) => p.file && p.file.ntEdges)) {\n      const label = els3.btn ? els3.btn.textContent : \"\";\n      busy = true;\n      els3.btn.disabled = true;\n      els3.btn.textContent = \"Preparing your print file\\u2026\";\n      let ok = false;\n      try {\n        ok = await window.__bsv4FinalizeItems(pairs);\n      } catch (e) {\n        ok = false;\n      }\n      busy = false;\n      els3.btn.disabled = false;\n      els3.btn.textContent = els3.btnLabel || label;\n      if (!ok) {\n        showErr(\"We couldn't prepare your print file. Please try again, or set Edges back to Original.\");\n        return false;\n      }\n    }\n    if (items.some(\n      (it) => !it.properties[\"Upload (Vector Files Preferred)\"] && !it.properties[\"_Original Image\"]\n    )) {\n      showErr(\"We couldn't attach your artwork file. Please re-upload this design and try again.\");\n      return false;\n    }\n    if (!items.length) {\n      if (!state2.files.length) {\n        showErr(\"Upload a design and pick a size first.\");\n      } else {\n        showErr(\"Pick a size to continue \\u2014 enter a custom size or select a popular size.\");\n        const scope = state2.mode === \"multi\" && els3.root.querySelector(\"[data-bsv4-tile]\") || els3.root;\n        const sel = scope.querySelector(\"[data-bsv4-popular]\");\n        if (sel && !sel.value) sel.focus();\n      }\n      return false;\n    }\n    busy = true;\n    els3.btn.disabled = true;\n    els3.btn.textContent = \"Adding\\u2026\";\n    try {\n      const res = await fetch(window.Shopify.routes.root + \"cart/add.js\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ items, attributes: \"\" })\n      });\n      let data = null;\n      try {\n        data = await res.json();\n      } catch (_) {\n        throw new Error(\"cart responded with a non-JSON page\");\n      }\n      if (!res.ok || data && data.status && data.status >= 400) {\n        throw new Error(data && (data.description || data.message) || `cart error ${res.status}`);\n      }\n      fireGa4(popupSource);\n      announce(\"added-to-cart\", { items: items.length });\n      if (opts.stayAndReset) {\n        const committed = {\n          name: state2.files[0] && state2.files[0].name || \"Your design\",\n          // _cartImg is on every payload item (Gate-1 captures) \u2014 no fallback.\n          thumb: items[0] && items[0].properties && items[0].properties[\"_cartImg\"] || \"\",\n          qty: items.reduce((n, it) => n + it.quantity, 0),\n          // payload always sets quantity\n          total: (state2.pricing?.rows || []).reduce((n, r) => n + (r.total || 0), 0) || null\n        };\n        await refreshCartQty();\n        reset();\n        showCartConfirm(committed);\n        if (noteEl) noteEl.value = \"\";\n        busy = false;\n        els3.btn.disabled = false;\n        els3.btn.textContent = els3.btnLabel || \"Add to Cart\";\n      } else {\n        window.location.href = \"/cart\";\n      }\n      return true;\n    } catch (err) {\n      showErr(\"Something went wrong adding to your cart \\u2014 please try again.\");\n      announce(\"cart-error\", { error: String(err && err.message) });\n      busy = false;\n      els3.btn.disabled = false;\n      els3.btn.textContent = els3.btnLabel || \"Add to Cart\";\n      return false;\n    }\n  }\n  async function refreshCartQty() {\n    try {\n      const res = await fetch(`${location.pathname}?view=itemsInCart__cumulative`).then((r) => r.json());\n      const count = res ? Number(res.count) : NaN;\n      if (Number.isFinite(count)) {\n        update({ cartQty: count });\n        announce(\"cart-qty-refreshed\", { count });\n      }\n    } catch (_) {\n    }\n  }\n  function readPopupAttribution() {\n    try {\n      return sessionStorage.getItem(\"dtf_popup_attribution\");\n    } catch (_) {\n      return null;\n    }\n  }\n  function fireGa4(popupAttrib) {\n    if (!popupAttrib) return;\n    try {\n      sessionStorage.removeItem(\"dtf_popup_attribution\");\n      const age = Date.now() - parseInt(popupAttrib, 10);\n      if (age <= 3e5 && typeof window.gtag === \"function\") {\n        window.gtag(\"event\", \"dtf_popup_add_to_cart\", {\n          popup_version: \"v1\",\n          popup_environment: window.Shopify?.theme?.role === \"main\" ? \"production\" : \"staging\",\n          device_type: window.innerWidth <= 767 ? \"mobile\" : \"desktop\",\n          time_to_conversion_ms: age,\n          popup_source: \"dtf_popup\"\n        });\n      }\n    } catch (_) {\n    }\n  }\n  function errEls() {\n    return [els3.err, els3.root.querySelector(\"[data-bsv4-modal-err]\")].filter(Boolean);\n  }\n  function showErr(msg) {\n    for (const el of errEls()) {\n      el.textContent = msg;\n      el.hidden = false;\n    }\n  }\n  function hideErr() {\n    for (const el of errEls()) el.hidden = true;\n  }\n\n  // src/modal.js\n  var cfg6;\n  var els4;\n  var announcedClosed = true;\n  var docBound2 = false;\n  function capState(fileCount, maxFiles) {\n    const max = Number.isFinite(maxFiles) && maxFiles > 0 ? maxFiles : Infinity;\n    return {\n      atCap: fileCount >= max,\n      remaining: max === Infinity ? Infinity : Math.max(0, max - fileCount)\n    };\n  }\n  function initModal(root2, config) {\n    cfg6 = config;\n    const wrap = root2.querySelector('[data-bsv4-block=\"multi_upload\"]');\n    if (!wrap || !cfg6.modal) return;\n    if (wrap.dataset.bsv4ModalBound === \"1\") return;\n    wrap.dataset.bsv4ModalBound = \"1\";\n    const dialog = wrap.querySelector(\"[data-bsv4-modal]\");\n    if (!dialog) return;\n    els4 = {\n      root: root2,\n      wrap,\n      dialog,\n      tiles: dialog.querySelector(\"[data-bsv4-tiles]\"),\n      tileTemplate: dialog.querySelector(\"[data-bsv4-tile-template]\"),\n      subtotal: dialog.querySelector(\"[data-bsv4-modal-subtotal]\"),\n      savingsRow: dialog.querySelector(\"[data-bsv4-modal-savings]\"),\n      savingsAmt: dialog.querySelector(\"[data-bsv4-modal-savings-amt]\"),\n      total: dialog.querySelector(\"[data-bsv4-modal-total]\"),\n      addMore: dialog.querySelector(\"[data-bsv4-modal-addfile]\"),\n      capMsg: dialog.querySelector(\"[data-bsv4-modal-cap]\"),\n      checkout: dialog.querySelector(\"[data-bsv4-modal-checkout]\"),\n      err: dialog.querySelector(\"[data-bsv4-modal-err]\"),\n      // Shared page element this block cooperates with (established hosting\n      // exception \u2014 the uploader owns it; we only click it):\n      fileInput: root2.querySelector(\"[data-bsv4-file-input]\")\n    };\n    if (cfg6.modal.footerCtaText && els4.checkout) {\n      els4.checkout.textContent = cfg6.modal.footerCtaText;\n    }\n    if (els4.capMsg && Number.isFinite(cfg6.modal.maxFiles)) {\n      els4.capMsg.textContent = `Maximum ${cfg6.modal.maxFiles} designs per order`;\n    }\n    const precutCard = dialog.querySelector(\"[data-bsv4-modal-precut]\");\n    if (precutCard && !cfg6.precutEnabled) precutCard.hidden = true;\n    els4.precutEach = dialog.querySelector(\"[data-bsv4-precut-each]\");\n    els4.precutSum = dialog.querySelector(\"[data-bsv4-precut-sum]\");\n    const fee = Number(cfg6.precutFee) || 0;\n    if (fee && els4.precutEach) {\n      els4.precutEach.textContent = `$${fee.toFixed(2)} each`;\n      els4.precutEach.hidden = false;\n    }\n    dialog.addEventListener(\"cancel\", (e) => e.preventDefault());\n    dialog.addEventListener(\"close\", onDialogClosed);\n    for (const btn of dialog.querySelectorAll(\"[data-bsv4-view]\")) {\n      btn.addEventListener(\"click\", () => {\n        const large = btn.dataset.bsv4View === \"large\";\n        dialog.classList.toggle(\"bsv4-modal--large\", large);\n        for (const b of dialog.querySelectorAll(\"[data-bsv4-view]\")) {\n          b.classList.toggle(\"is-active\", b === btn);\n        }\n      });\n    }\n    els4.lightbox = dialog.querySelector(\"[data-bsv4-lightbox]\");\n    els4.lightboxImg = dialog.querySelector(\"[data-bsv4-lightbox-img]\");\n    els4.lightbox?.addEventListener(\"click\", () => {\n      els4.lightbox.close();\n      els4.lightboxImg.src = \"\";\n    });\n    if (els4.addMore) {\n      if (!els4.fileInput) els4.addMore.hidden = true;\n      const browse = () => {\n        if (capState(getState().files.length, cfg6.modal.maxFiles).atCap) return;\n        els4.fileInput.click();\n      };\n      els4.addMore.addEventListener(\"click\", browse);\n      els4.addMore.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          browse();\n        }\n      });\n      els4.addMore.addEventListener(\"dragover\", (e) => {\n        e.preventDefault();\n        els4.addMore.classList.add(\"is-dragover\");\n      });\n      els4.addMore.addEventListener(\"dragleave\", () => els4.addMore.classList.remove(\"is-dragover\"));\n      els4.addMore.addEventListener(\"drop\", (e) => {\n        e.preventDefault();\n        els4.addMore.classList.remove(\"is-dragover\");\n        if (capState(getState().files.length, cfg6.modal.maxFiles).atCap) return;\n        if (!els4.fileInput || !e.dataTransfer?.files?.length) return;\n        els4.fileInput.files = e.dataTransfer.files;\n        els4.fileInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      });\n    }\n    els4.checkout?.addEventListener(\"click\", () => addToCart());\n    dialog.querySelector(\"[data-bsv4-modal-upcancel]\")?.addEventListener(\"click\", () => {\n      window.resetLoading?.();\n    });\n    els4.tiles.addEventListener(\"click\", onTileClick);\n    els4.tiles.addEventListener(\"change\", onTileTabChange);\n    if (cfg6.modal.perFileNotes) els4.tiles.addEventListener(\"input\", onNoteInput);\n    subscribe(sync);\n    if (!docBound2) {\n      docBound2 = true;\n      document.addEventListener(\"bsv4:upload-started\", onUploadStarted);\n    }\n    sync();\n  }\n  var localArt = /* @__PURE__ */ new Map();\n  function onUploadStarted(e) {\n    const d = e.detail || {};\n    if (d.id && d.localUrl) localArt.set(d.id, d.localUrl);\n    if (!els4 || getState().mode !== \"multi\") return;\n    addPendingTile(d);\n    if (!els4.dialog.open) openDialog();\n  }\n  function addPendingTile({ id, name, localUrl }) {\n    if (!id || els4.tiles.querySelector(`[data-bsv4-pending=\"${id}\"]`)) return;\n    const tile = document.createElement(\"section\");\n    tile.className = \"bsv4-tile bsv4-tile--pending\";\n    tile.setAttribute(\"data-bsv4-pending\", id);\n    tile.setAttribute(\"aria-busy\", \"true\");\n    tile.innerHTML = '<aside class=\"bsv4-tile__side\"><figure class=\"bsv4-tile__hero\"><img class=\"bsv4-tile__thumb\" alt=\"\" width=\"200\" height=\"200\"></figure></aside><div class=\"bsv4-tile__main\"><p class=\"bsv4-tile__pending-name\"></p><span class=\"bsv4-skel\"></span><span class=\"bsv4-skel\"></span><span class=\"bsv4-skel\"></span></div>';\n    const img = tile.querySelector(\"img\");\n    img.src = localUrl || NINJA_GIF;\n    if (!localUrl) img.classList.add(\"bsv4-tile__thumb--pending\");\n    tile.querySelector(\"p\").textContent = name || \"Uploading\\u2026\";\n    els4.tiles.appendChild(tile);\n  }\n  function clearPendingTiles() {\n    for (const t of [...els4.tiles.querySelectorAll(\"[data-bsv4-pending]\")]) t.remove();\n  }\n  function sync() {\n    const files = getState().files;\n    const mode = getState().mode;\n    if (getState().status !== \"uploading\") clearPendingTiles();\n    const pending = els4.tiles.querySelector(\"[data-bsv4-pending]\") !== null;\n    if (files.length && mode === \"multi\") {\n      for (const tile of [...els4.tiles.querySelectorAll(\"[data-bsv4-tile]\")]) {\n        if (!files.some((f) => f.id === tile.dataset.bsv4Tile)) tile.remove();\n      }\n      for (const file of files) {\n        const tileEl = els4.tiles.querySelector(`[data-bsv4-tile=\"${file.id}\"]`);\n        if (!tileEl) {\n          buildTile(file);\n          continue;\n        }\n        const thumb = tileEl.querySelector(\"[data-bsv4-tile-thumb]\");\n        if (thumb) swapImage(thumb, thumbUrl(file), tileEl.querySelector(\".bsv4-tile__hero\"));\n      }\n      if (!els4.dialog.open) openDialog();\n      queueMicrotask(adoptTileRows);\n    } else if (!files.length && !pending) {\n      for (const tile of [...els4.tiles.querySelectorAll(\"[data-bsv4-tile]\")]) tile.remove();\n      if (els4.dialog.open) closeDialog();\n    }\n    refreshChrome(files);\n  }\n  function buildTile(file) {\n    const tile = els4.tileTemplate.content.firstElementChild.cloneNode(true);\n    tile.dataset.bsv4Tile = file.id;\n    for (const radio of tile.querySelectorAll(\"[data-bsv4-tiletab]\")) {\n      radio.name = `bsv4-tt-${file.id}`;\n    }\n    const thumb = tile.querySelector(\"[data-bsv4-tile-thumb]\");\n    if (thumb) {\n      thumb.alt = file.name || \"\";\n      const target = thumbUrl(file);\n      const local = localArt.get(file.id);\n      const orig = originalUrl(file);\n      const instant = local || orig;\n      if (instant && instant !== target) {\n        const fallback = local && orig !== target ? orig : \"\";\n        thumb.onerror = () => {\n          const src = thumb.getAttribute(\"src\");\n          if (src !== instant && src !== fallback) {\n            thumb.onerror = null;\n            return;\n          }\n          if (src === local && fallback) {\n            thumb.src = fallback;\n            return;\n          }\n          thumb.removeAttribute(\"src\");\n          thumb.style.visibility = \"hidden\";\n          thumb.onerror = null;\n        };\n        thumb.src = instant;\n      }\n      swapImage(thumb, target, tile.querySelector(\".bsv4-tile__hero\"));\n    }\n    const name = tile.querySelector(\"[data-bsv4-tile-name]\");\n    if (name) name.textContent = file.name || \"\";\n    const note = tile.querySelector(\"[data-bsv4-tile-note]\");\n    if (note) {\n      if (cfg6.modal.perFileNotes) {\n        if (file.designNote) {\n          note.value = file.designNote;\n          const open2 = tile.querySelector(\"[data-bsv4-tile-note-open]\");\n          if (open2) open2.checked = true;\n        }\n      } else {\n        (note.closest(\".bsv4-tile__note\") || note).remove();\n      }\n    }\n    const pend = els4.tiles.querySelector(`[data-bsv4-pending=\"${file.id}\"]`);\n    if (pend) pend.replaceWith(tile);\n    else els4.tiles.appendChild(tile);\n    const host2 = rowsHost(tile);\n    for (const row of file.rows) {\n      if (!host2) continue;\n      const node = row.id ? els4.root.querySelector(`[data-bsv4-row-id=\"${row.id}\"]`) : null;\n      if (node) host2.appendChild(node);\n      else {\n        try {\n          renderRow(file, row, host2);\n        } catch (err) {\n          console.warn(\"bsv4 modal: shared row component unavailable\", err);\n        }\n      }\n    }\n    applyTileDim(tile);\n    announce(\"tile-created\", { id: file.id, fileId: file.id, tileEl: tile });\n  }\n  function rowsHost(tile) {\n    return tile.querySelector(\"[data-bsv4-tile-rows]\");\n  }\n  function tileTab(tile) {\n    const pop = tile.querySelector('[data-bsv4-tiletab][value=\"popular\"]');\n    return pop && pop.checked ? \"popular\" : \"custom\";\n  }\n  function applyTileDim(tile) {\n    const file = getState().files.find((f) => f.id === tile.dataset.bsv4Tile);\n    if (!file) return;\n    const tab = tileTab(tile);\n    for (const n of tile.querySelectorAll(\"[data-bsv4-row-id]\")) {\n      const row = (file.rows || []).find((r) => r.id === n.dataset.bsv4RowId);\n      const off = (row && row.mode || \"custom\") !== tab;\n      n.classList.toggle(\"is-disabled\", off);\n      n.querySelectorAll(\"input, select, button\").forEach((el) => {\n        el.disabled = off;\n      });\n    }\n  }\n  function applyAllTileDims() {\n    for (const tile of els4.tiles.querySelectorAll(\"[data-bsv4-tile]\")) applyTileDim(tile);\n  }\n  function activateTileTab(tile, file, mode) {\n    const radio = tile.querySelector(`[data-bsv4-tiletab][value=\"${mode}\"]`);\n    if (radio && !radio.checked) radio.checked = true;\n    if (!(file.rows || []).some((r) => (r.mode || \"custom\") === mode)) {\n      const w = parseFloat(file.widthIn ?? file.inW);\n      const h = parseFloat(file.heightIn ?? file.inH);\n      try {\n        addRow(file, { w, h }, rowsHost(tile), void 0, mode);\n      } catch (err) {\n        console.warn(\"bsv4 modal: shared row component unavailable\", err);\n      }\n    }\n    applyTileDim(tile);\n  }\n  function adoptTileRows() {\n    if (getState().mode !== \"multi\") return;\n    for (const file of getState().files) {\n      const tile = els4.tiles.querySelector(`[data-bsv4-tile=\"${file.id}\"]`);\n      if (!tile) continue;\n      const host2 = rowsHost(tile);\n      if (!host2) continue;\n      for (const row of file.rows || []) {\n        if (!row.id) continue;\n        const node = els4.root.querySelector(`[data-bsv4-row-id=\"${row.id}\"]`);\n        if (node && !host2.contains(node)) host2.appendChild(node);\n      }\n    }\n    applyAllTileDims();\n  }\n  function onTileClick(e) {\n    const tile = e.target.closest(\"[data-bsv4-tile]\");\n    if (!tile) return;\n    const fileId = tile.dataset.bsv4Tile;\n    const file = getState().files.find((f) => f.id === fileId);\n    if (!file) return;\n    const dimmed = e.target.closest(\"[data-bsv4-row-id]\");\n    if (dimmed && dimmed.classList.contains(\"is-disabled\")) {\n      e.stopPropagation();\n      const row = (file.rows || []).find((r) => r.id === dimmed.dataset.bsv4RowId);\n      activateTileTab(tile, file, row && row.mode || \"custom\");\n      const field = e.target.closest(\".bsv4-row__field\");\n      const el = field && field.querySelector(\"input, select\");\n      if (el && !el.disabled) {\n        el.focus();\n        if (el.tagName === \"INPUT\") el.select();\n      }\n      return;\n    }\n    if (e.target.closest(\"[data-bsv4-tile-add]\")) {\n      const mode = tileTab(tile);\n      const w = parseFloat(file.widthIn ?? file.inW);\n      const h = parseFloat(file.heightIn ?? file.inH);\n      try {\n        addRow(file, { w, h }, rowsHost(tile), void 0, mode);\n      } catch (err) {\n        console.warn(\"bsv4 modal: shared row component unavailable\", err);\n      }\n    } else if (e.target.closest(\"[data-bsv4-tile-goto-popular]\")) {\n      activateTileTab(tile, file, \"popular\");\n    } else if (e.target.closest(\"[data-bsv4-tile-zoom]\")) {\n      if (els4.lightbox && els4.lightboxImg) {\n        els4.lightboxImg.alt = file.name || \"\";\n        swapImage(els4.lightboxImg, thumbUrl(file), els4.lightbox);\n        els4.lightbox.showModal();\n      }\n    } else if (e.target.closest(\"[data-bsv4-tile-remove]\")) {\n      const doRemove = () => {\n        const gone = getState().files.find((f) => f.id === fileId);\n        if (gone) announce(\"file-deleted\", { fresh: !!gone.fresh, key: gone.uploadName });\n        const files = getState().files.filter((f) => f.id !== fileId);\n        if (!files.length) {\n          reset();\n        } else {\n          update({ files });\n        }\n        announce(\"file-removed\", { id: fileId });\n        announce(\"rows-changed\", {});\n      };\n      const target = getState().files.find((f) => f.id === fileId);\n      if ((target && target.rows || []).length > 1) confirmRemove(doRemove);\n      else doRemove();\n    }\n  }\n  function onTileTabChange(e) {\n    if (e.target.matches(\"[data-bsv4-tile-note-open]\")) {\n      const tile2 = e.target.closest(\"[data-bsv4-tile]\");\n      const file2 = tile2 && getState().files.find((f) => f.id === tile2.dataset.bsv4Tile);\n      if (!file2) return;\n      const note = tile2.querySelector(\"[data-bsv4-tile-note]\");\n      file2.designNote = e.target.checked && note ? note.value.trim() : \"\";\n      return;\n    }\n    if (!e.target.matches(\"[data-bsv4-tiletab]\") || !e.target.checked) return;\n    const tile = e.target.closest(\"[data-bsv4-tile]\");\n    const file = tile && getState().files.find((f) => f.id === tile.dataset.bsv4Tile);\n    if (!file) return;\n    activateTileTab(tile, file, e.target.value === \"popular\" ? \"popular\" : \"custom\");\n  }\n  function onNoteInput(e) {\n    if (!e.target.matches(\"[data-bsv4-tile-note]\")) return;\n    const tile = e.target.closest(\"[data-bsv4-tile]\");\n    const file = tile && getState().files.find((f) => f.id === tile.dataset.bsv4Tile);\n    if (file) file.designNote = e.target.value.trim();\n  }\n  function refreshChrome(files) {\n    const cap = capState(files.length, cfg6.modal.maxFiles);\n    if (els4.addMore && !els4.addMore.hidden) {\n      els4.addMore.classList.toggle(\"is-capped\", cap.atCap);\n      els4.addMore.setAttribute(\"aria-disabled\", cap.atCap ? \"true\" : \"false\");\n    }\n    if (els4.capMsg) els4.capMsg.hidden = !cap.atCap;\n    const precutFee = Number(cfg6.precutFee) || 0;\n    let precutQty = 0;\n    for (const f of files) for (const r of f.rows || []) precutQty += Number(r.qty) || 0;\n    if (els4.precutSum) {\n      els4.precutSum.textContent = `+$${(precutFee * precutQty).toFixed(2)}`;\n      els4.precutSum.hidden = !(precutFee && precutQty);\n    }\n    const pricing = getState().pricing || {};\n    const rows = Array.isArray(pricing.rows) ? pricing.rows : [];\n    const hasRows = rows.length > 0;\n    const total = pricing.total || 0;\n    const origSum = rows.reduce((s, r) => s + (Number.isFinite(r.origTotal) ? r.origTotal : r.total || 0), 0);\n    const savings = Math.max(0, origSum - total);\n    const precutCost = getState().precut ? precutFee * precutQty : 0;\n    if (els4.subtotal) els4.subtotal.textContent = hasRows ? `$${origSum.toFixed(2)}` : \"\\u2014\";\n    if (els4.total) els4.total.textContent = hasRows ? `$${(total + precutCost).toFixed(2)}` : \"\\u2014\";\n    if (els4.savingsRow) {\n      const show = hasRows && savings > 4e-3;\n      els4.savingsRow.hidden = !show;\n      if (show && els4.savingsAmt) els4.savingsAmt.textContent = `\\u2212$${savings.toFixed(2)}`;\n    }\n  }\n  function thumbUrl(file) {\n    try {\n      return previewUrl(file);\n    } catch (_) {\n      return file.imgixUrl || \"\";\n    }\n  }\n  function openDialog() {\n    if (!els4.dialog.open) {\n      els4.dialog.show();\n      announcedClosed = false;\n      announce(\"modal-opened\", { files: getState().files.length });\n      els4.dialog.scrollIntoView({ block: \"start\" });\n    }\n  }\n  function closeDialog() {\n    if (els4.dialog.open) els4.dialog.close();\n    onDialogClosed();\n  }\n  function onDialogClosed() {\n    if (!announcedClosed) {\n      announcedClosed = true;\n      announce(\"dialog-closed\", { files: getState().files.length });\n    }\n  }\n\n  // src/designs.js\n  var wired = false;\n  function initDesigns(root2, config) {\n    if (!root2.querySelector('[data-bsv4-panel=\"previous\"] :is(.md-container, [data-alv2-open])')) return;\n    if (wired) return;\n    wired = true;\n    (function wireColsPicker() {\n      const panel = root2.querySelector('[data-bsv4-panel=\"previous\"]');\n      if (!panel || panel.querySelector(\".dtfut__cols\") === null) return;\n      const syncActiveCol = (cols) => {\n        for (const b of panel.querySelectorAll(\".dtfut__cols-btn\")) {\n          b.classList.toggle(\"is-active\", b.getAttribute(\"data-dtfut-cols\") === cols);\n        }\n      };\n      const isMobile = window.matchMedia && window.matchMedia(\"(max-width: 749px)\").matches;\n      const initialCols = isMobile ? \"2\" : \"4\";\n      panel.setAttribute(\"data-cols\", initialCols);\n      syncActiveCol(initialCols);\n      const mobileCols = panel.querySelector(\".dtfut__cols--mobile\");\n      const filtersRow = panel.querySelector(\".md-filters__row\");\n      if (mobileCols && filtersRow && !filtersRow.contains(mobileCols)) {\n        filtersRow.appendChild(mobileCols);\n      }\n      panel.addEventListener(\"click\", (e) => {\n        const btn = e.target.closest(\".dtfut__cols-btn\");\n        if (!btn) return;\n        const cols = btn.getAttribute(\"data-dtfut-cols\");\n        if (!cols) return;\n        panel.setAttribute(\"data-cols\", cols);\n        syncActiveCol(cols);\n      });\n    })();\n    (function wireNoResults() {\n      const panel = root2.querySelector('[data-bsv4-panel=\"previous\"]');\n      const search = panel && panel.querySelector(\".md-search-input\");\n      const grid = panel && panel.querySelector(\".md-grid\");\n      if (!panel || !search || !grid) return;\n      const refresh = () => {\n        const hasQuery = search.value.trim().length > 0;\n        const hasCard = grid.querySelector(\".md-card\") !== null;\n        panel.setAttribute(\"data-dtfut-empty-search\", hasQuery && !hasCard ? \"true\" : \"false\");\n      };\n      search.addEventListener(\"input\", refresh);\n      new MutationObserver(refresh).observe(grid, { childList: true });\n      refresh();\n    })();\n    (function wireZeroDesignsHide() {\n      const apply = (count) => {\n        const hide = count === 0;\n        const pill = root2.querySelector('[data-bsv4-source=\"previous\"]');\n        if (pill) pill.hidden = hide;\n        for (const link of root2.querySelectorAll('[data-bsv4-addlink=\"previous\"]')) {\n          link.hidden = hide;\n        }\n        const panel = root2.querySelector('[data-bsv4-panel=\"previous\"]');\n        if (hide && panel && !panel.hidden) setSource(\"upload\");\n      };\n      window.addEventListener(\"nt-md-count\", (e) => {\n        if (e.detail && typeof e.detail.count === \"number\") apply(e.detail.count);\n      });\n      if (document.body.getAttribute(\"data-md-has-designs\") === \"0\") apply(0);\n    })();\n    document.addEventListener(\"bsv4:source-changed\", (e) => {\n      if (!e.detail || e.detail.source !== \"previous\") return;\n      const md = document.querySelector('[data-bsv4-panel=\"previous\"] .md-container');\n      if (md && typeof md.__mdRenderNow === \"function\") {\n        md.__mdRenderNow();\n        announce(\"designs-opened\", {});\n      }\n    });\n    document.addEventListener(\"md-picker:use-designs\", (e) => {\n      if (window.__bsv4StudioPick || window.__studioPickActive) return;\n      const items = e.detail && e.detail.items || [];\n      const entries = items.map((it) => {\n        const raw = String(it.file || \"\");\n        const url = raw.split(\"?\")[0];\n        return url ? {\n          url,\n          name: it.fileName || url.split(\"/\").pop(),\n          orderName: it.orderName || void 0,\n          // AI multi-select dispatches isAIImage:true through this same\n          // event (ai-chat-sandbox.js:1253-1260) \u2014 carry the attribution\n          // flags so cart-payload stamps them (audit 2026-07-09).\n          isAIImage: it.isAIImage || void 0,\n          isAIEdit: it.isAIEdit || void 0,\n          isReadyToPress: it.isReadyToPress || void 0,\n          isRtpAiEdit: it.isRtpAiEdit || void 0,\n          // Purchased designs' saved URLs carry the toggle params the\n          // order was placed with (parseOrderString appends them) \u2014\n          // read them BEFORE the query strip so a bg-removed reorder\n          // lands bg-removed again (Owen 2026-07-22; intakeFromUrls\n          // used to hard-set false and the background came back).\n          bgRemove: /bg-remove=true/i.test(raw) || void 0,\n          superRes: /upscale=true/i.test(raw) || void 0\n        } : null;\n      }).filter(Boolean);\n      if (!entries.length) return;\n      if (maybeCommitThenIntake({ entries })) return;\n      setSource(\"upload\");\n      intakeFromUrls(entries);\n    });\n  }\n\n  // src/addmore-popups.js\n  var wired2 = false;\n  var openRef = null;\n  function openPicker(mode) {\n    if (openRef) openRef(mode);\n  }\n  function initAddmorePopups(root2) {\n    if (wired2) return;\n    const dlg = root2.querySelector(\"[data-bsv4-pickdlg]\");\n    if (!dlg || typeof dlg.showModal !== \"function\") {\n      for (const link of root2.querySelectorAll(\"[data-bsv4-addlink]\")) link.hidden = true;\n      return;\n    }\n    wired2 = true;\n    if (dlg.parentElement !== root2) root2.appendChild(dlg);\n    const host2 = dlg.querySelector(\"[data-bsv4-pickdlg-host]\");\n    let adopted = null;\n    (function ensureModalLinks() {\n      const zone = root2.querySelector(\"[data-bsv4-modal-addfile]\");\n      if (!zone || zone.querySelector(\"[data-bsv4-addlink]\")) return;\n      const p = document.createElement(\"p\");\n      p.className = \"bsv4-cta__addmore-links\";\n      for (const [mode, label] of [\n        [\"previous\", \"Choose a previously uploaded design\"],\n        [\"ai\", \"Create with AI\"]\n      ]) {\n        const b = document.createElement(\"button\");\n        b.type = \"button\";\n        b.setAttribute(\"data-bsv4-addlink\", mode);\n        b.textContent = label;\n        if (mode === \"ai\") {\n          const or = document.createElement(\"span\");\n          or.textContent = \" or \";\n          p.appendChild(or);\n        }\n        p.appendChild(b);\n      }\n      const sub = zone.querySelector(\".bsv4-cta__addmore-sub\");\n      if (sub && sub.parentNode === zone) sub.after(p);\n      else zone.appendChild(p);\n    })();\n    for (const [mode, sel] of [\n      [\"previous\", '[data-bsv4-panel=\"previous\"]'],\n      [\"ai\", '[data-bsv4-panel=\"ai\"]']\n    ]) {\n      if (!root2.querySelector(sel)) {\n        for (const link of root2.querySelectorAll(`[data-bsv4-addlink=\"${mode}\"]`)) {\n          link.hidden = true;\n        }\n      }\n    }\n    function open2(mode) {\n      const node = root2.querySelector(`[data-bsv4-panel=\"${mode === \"ai\" ? \"ai\" : \"previous\"}\"]`);\n      if (!node || adopted) return;\n      adopted = { node, parent: node.parentNode, next: node.nextSibling };\n      host2.appendChild(node);\n      node.hidden = false;\n      dlg.setAttribute(\"aria-label\", mode === \"ai\" ? \"Create a design with AI\" : \"Your previous designs\");\n      dlg.showModal();\n      if (mode === \"previous\") {\n        const md = node.querySelector(\".md-container\");\n        if (md && typeof md.__mdRenderNow === \"function\") md.__mdRenderNow();\n        announce(\"designs-opened\", { via: \"add-another\" });\n      } else {\n        if (typeof window.__bsv4AiActivate === \"function\") window.__bsv4AiActivate();\n        else injectAiAssets(node);\n        const chat = node.querySelector(\".ai-chat\");\n        if (chat) chat.dispatchEvent(new CustomEvent(\"ai-chat:reset\"));\n        document.dispatchEvent(\n          new CustomEvent(\"dtfut:tab-change\", { detail: { name: \"ai\" }, bubbles: true })\n        );\n      }\n    }\n    function restore() {\n      if (!adopted) return;\n      const { node, parent, next } = adopted;\n      node.hidden = true;\n      if (parent) parent.insertBefore(node, next);\n      adopted = null;\n      const zoom = dlg.querySelector(\"#ai-pop-zoom-modal\");\n      if (zoom) document.body.appendChild(zoom);\n      window.__studioPickActive = false;\n      window.__bsv4StudioPick = false;\n    }\n    function injectAiAssets(panel) {\n      const chat = panel.querySelector(\".ai-chat\");\n      const reveal = () => {\n        if (chat) {\n          chat.classList.add(\"ai-chat--ready\");\n          chat.style.opacity = \"\";\n        }\n        panel.style.opacity = \"\";\n      };\n      let pending = 0;\n      const one = () => {\n        if (--pending <= 0) reveal();\n      };\n      for (const attr of [\"data-bsv4-ai-css\", \"data-bsv4-ai-css2\", \"data-bsv4-ai-js\"]) {\n        const url = panel.getAttribute(attr);\n        if (!url) continue;\n        if (attr === \"data-bsv4-ai-js\") {\n          if (!document.querySelector(`script[src=\"${url}\"]`)) {\n            const s = document.createElement(\"script\");\n            s.src = url;\n            document.head.appendChild(s);\n          }\n          continue;\n        }\n        let l = document.querySelector(`link[href=\"${url}\"]`);\n        if (!l) {\n          l = document.createElement(\"link\");\n          l.rel = \"stylesheet\";\n          l.href = url;\n          document.head.appendChild(l);\n        }\n        if (!l.sheet) {\n          pending++;\n          l.addEventListener(\"load\", one, { once: true });\n          l.addEventListener(\"error\", one, { once: true });\n        }\n      }\n      if (pending === 0) reveal();\n      else setTimeout(reveal, 3e3);\n    }\n    document.addEventListener(\n      \"click\",\n      (e) => {\n        const link = e.target.closest && e.target.closest(\"[data-bsv4-addlink]\");\n        if (link && root2.contains(link)) {\n          e.preventDefault();\n          e.stopPropagation();\n          open2(link.dataset.bsv4Addlink);\n          return;\n        }\n        if (dlg.open && e.target === dlg) dlg.close();\n        if (dlg.open) {\n          const zoom = document.getElementById(\"ai-pop-zoom-modal\");\n          if (zoom && !dlg.contains(zoom)) dlg.appendChild(zoom);\n        }\n      },\n      true\n    );\n    dlg.addEventListener(\"close\", restore);\n    openRef = open2;\n    const closeBtn = dlg.querySelector(\"[data-bsv4-pickdlg-close]\");\n    if (closeBtn) closeBtn.addEventListener(\"click\", () => dlg.close());\n    document.addEventListener(\"md-picker:use-designs\", () => {\n      if (dlg.open) dlg.close();\n    });\n    document.addEventListener(\"bsv4:files-received\", () => {\n      if (dlg.open) dlg.close();\n    });\n    document.addEventListener(\"bsv4:added-to-cart\", () => {\n      if (dlg.open) dlg.close();\n    });\n  }\n\n  // src/handoffs.js\n  var STASH_KEY = \"dtf:pending-ai-uploads:v1\";\n  function initHandoffs() {\n    rehydrateStash();\n    consumeParams();\n  }\n  function rehydrateStash() {\n    try {\n      const raw = sessionStorage.getItem(STASH_KEY);\n      if (!raw) return;\n      const parsed = JSON.parse(raw);\n      const items = parsed && Array.isArray(parsed.items) ? parsed.items : null;\n      if (!items || !items.length) return;\n      sessionStorage.removeItem(STASH_KEY);\n      const u = new URL(window.location.href);\n      if (u.searchParams.get(\"file\") || u.searchParams.get(\"my_designs_selection\")) return;\n      if (items.length === 1) {\n        const url = items[0] && (items[0].file || items[0].url);\n        if (!url) return;\n        u.searchParams.set(\"file\", url);\n      } else {\n        const payload = items.map((it, i) => ({\n          id: `ai-stash-${Date.now()}-${i}`,\n          name: it && it.fileName || `ai-image-${i + 1}.png`,\n          fileURL: it && (it.file || it.url)\n        })).filter((e) => !!e.fileURL);\n        if (!payload.length) return;\n        u.searchParams.set(\"my_designs_selection\", JSON.stringify(payload));\n      }\n      window.location.replace(u.toString());\n    } catch (_) {\n    }\n  }\n  function getParam(name) {\n    return new URLSearchParams(window.location.search).get(name);\n  }\n  function dropParams(...names) {\n    const u = new URL(window.location.href);\n    for (const n of names) u.searchParams.delete(n);\n    history.replaceState(null, \"\", u.toString());\n  }\n  async function consumeParams() {\n    const ordertype = getParam(\"ordertype\");\n    const reorderName = ordertype ? getParam(\"order_name\") || \"\" : \"\";\n    if (ordertype) {\n      setAttribution({ designType: 1, orderName: reorderName });\n    }\n    const src = getParam(\"src\");\n    if (src === \"dtf_popup\") sessionStorage.setItem(\"dtf_popup_attribution\", String(Date.now()));\n    else if (src) sessionStorage.removeItem(\"dtf_popup_attribution\");\n    if (src) dropParams(\"src\");\n    const selRaw = getParam(\"my_designs_selection\");\n    if (selRaw) {\n      dropParams(\"my_designs_selection\");\n      let sel = [];\n      try {\n        sel = JSON.parse(decodeURIComponent(selRaw));\n      } catch (_) {\n        sel = [];\n      }\n      if (Array.isArray(sel) && sel.length) {\n        await intakeFromUrls(\n          sel.map((it) => ({ url: it.fileURL, name: it.name, orderName: it.orderName }))\n        );\n        return;\n      }\n    }\n    let fileURL = getParam(\"file\");\n    if (!fileURL) return;\n    fileURL = fileURL.replace(\"#\", \"%23\").split(\"?\")[0];\n    const flags = {};\n    if (getParam(\"rtp\") === \"Y\") flags.isReadyToPress = \"Yes\";\n    if (getParam(\"pwe\") === \"Y\") flags.isRtpAiEdit = \"Yes\";\n    if (getParam(\"_design_studio\") === \"Yes\") {\n      flags.isDesignStudio = \"Yes\";\n      window.__bsv4StudioHandoff = true;\n    }\n    if (getParam(\"ai_edit\") === \"Y\") flags.isAIEdit = true;\n    if (getParam(\"ai_created\") === \"Y\") flags.isAIImage = true;\n    dropParams(\"file\", \"rtp\", \"pwe\", \"_design_studio\", \"ai_edit\", \"ai_created\", \"order_name\", \"ordertype\", \"orderFileWidth\", \"orderFileHeight\");\n    let ownHost = false;\n    try {\n      ownHost = /(^|\\.)(amazonaws\\.com|imgix\\.net)$/.test(new URL(fileURL).hostname);\n    } catch (_) {\n    }\n    if (ownHost) {\n      await intakeFromUrls([{ url: fileURL, ...flags, orderName: reorderName || void 0 }]);\n    } else {\n      try {\n        const blob = await fetch(fileURL).then((r) => r.blob());\n        const name = fileURL.split(\"/\").pop() || \"design.png\";\n        const file = new File([blob], name, { type: blob.type || \"image/png\" });\n        if (flags.isAIImage) file.isAIImage = true;\n        if (flags.isAIEdit) file.isAIEdit = true;\n        await intake([file]);\n      } catch (err) {\n        console.warn(\"[bsv4] external file handoff failed:\", err && err.message);\n      }\n    }\n  }\n\n  // src/integrations.js\n  function initIntegrations(root2) {\n    wireCountdown(root2);\n    wireBackdropClose(root2);\n    wireBfcacheResync(root2);\n    wireReviewCommas(root2);\n    document.addEventListener(\"bsv4:file-uploaded\", () => window.refreshGRTUpsellBlocks?.());\n  }\n  function wireReviewCommas(root2) {\n    const cell = root2.querySelector(\".bsv4__meta-rating\");\n    if (!cell) return;\n    const format = () => {\n      const walker = document.createTreeWalker(cell, NodeFilter.SHOW_TEXT);\n      let node;\n      while (node = walker.nextNode()) {\n        const m = node.nodeValue.match(/\\b(\\d{4,})\\b/);\n        if (m) {\n          const withCommas = Number(m[1]).toLocaleString(\"en-US\");\n          if (withCommas !== m[1]) node.nodeValue = node.nodeValue.replace(m[1], withCommas);\n        }\n      }\n    };\n    format();\n    const mo = new MutationObserver(() => format());\n    mo.observe(cell, { childList: true, characterData: true, subtree: true });\n  }\n  function wireBackdropClose(root2) {\n    for (const dialog of root2.querySelectorAll(\"dialog\")) {\n      if (dialog.closest('[data-bsv4-block=\"multi_upload\"]')) continue;\n      dialog.addEventListener(\"click\", (e) => {\n        if (e.target !== dialog) return;\n        dialog.close();\n        document.dispatchEvent(new CustomEvent(\"bsv4:dialog-closed\"));\n      });\n    }\n  }\n  function wireBfcacheResync(root2) {\n    window.addEventListener(\"pageshow\", async (e) => {\n      if (!e.persisted) return;\n      try {\n        const res = await fetch(`${location.pathname}?view=itemsInCart__cumulative`).then((r) => r.json());\n        const count = res ? Number(res.count) : NaN;\n        if (Number.isFinite(count)) {\n          root2.__bsv4cfg && (root2.__bsv4cfg.cartQty = count);\n          update({ cartQty: count });\n          document.dispatchEvent(new CustomEvent(\"bsv4:cart-qty-refreshed\", { detail: { count } }));\n        }\n      } catch (_) {\n      }\n    });\n  }\n  function wireCountdown(root2) {\n    const perk = root2.querySelector(\"[data-bsv4-countdown]\");\n    const textEl = perk && perk.querySelector(\"[data-bsv4-countdown-text]\");\n    if (!perk || !textEl || !textEl.textContent.includes(\"[\")) return;\n    const template = textEl.textContent;\n    const cardRow = root2.querySelector(\"[data-bsv4-cdcard]\");\n    const cardTitle = cardRow && cardRow.querySelector(\"[data-bsv4-cd-title]\");\n    const cardSub = cardRow && cardRow.querySelector(\"[data-bsv4-cd-sub]\");\n    perk.hidden = true;\n    const wire = (attempt = 0) => {\n      const h = document.querySelector(\".headerCountdown\") || document;\n      const dateEl = [...h.querySelectorAll(\"date\")].find((el) => el.textContent.trim());\n      const timeEl = h.querySelector(\".grt-time-box time\") || h.querySelector(\"time\");\n      if (!dateEl && !timeEl) {\n        if (attempt < 5) setTimeout(() => wire(attempt + 1), 1e3 * (attempt + 1));\n        return;\n      }\n      const apply = () => {\n        const rawDate = dateEl ? dateEl.textContent.trim() : \"\";\n        const date = rawDate.includes(\",\") ? rawDate.split(\",\").slice(1).join(\",\").trim() : rawDate;\n        const digits = timeEl ? timeEl.textContent.replace(/[A-Za-z]/g, \"\").replace(/\\s+/g, \"\") : \"\";\n        const parts = digits.split(\":\").filter(Boolean);\n        const time = parts.length >= 2 ? `${parseInt(parts[0], 10)}h ${parseInt(parts[1], 10)}m` : \"\";\n        perk.hidden = !date && !time;\n        if (!perk.hidden) {\n          textEl.innerHTML = template.replace(\"[DATE]\", `<strong class=\"bsv4-perks__hl\">${date}</strong>`).replace(\"[TIME]\", `<strong class=\"bsv4-perks__hl\">${time}</strong>`);\n        }\n        if (cardRow) {\n          const timeFull = parts.length >= 3 ? `${parseInt(parts[0], 10)}h ${parseInt(parts[1], 10)}m ${parseInt(parts[2], 10)}s` : time;\n          if (date || time) {\n            if (cardTitle) {\n              const seg = (cardRow.dataset.tplTitle || \"Order in [TIME]\").split(\"[TIME]\");\n              const t = document.createElement(\"span\");\n              t.className = \"bsv4-perks__cd-time\";\n              t.textContent = timeFull;\n              cardTitle.replaceChildren(seg[0] || \"\", t, seg.slice(1).join(\"[TIME]\"));\n            }\n            if (cardSub) cardSub.textContent = (cardRow.dataset.tplSub || \"For Fastest Delivery [DATE]\").replace(\"[DATE]\", date);\n          }\n        }\n      };\n      apply();\n      if (timeEl) {\n        new MutationObserver(apply).observe(timeEl, { characterData: true, childList: true, subtree: true });\n      }\n    };\n    wire();\n    document.addEventListener(\"nt-geo:changed\", () => setTimeout(wire, 0));\n  }\n\n  // src/ga-bridge.js\n  var UPLOAD_TAB_MAP = {\n    upload: \"upload\",\n    previous: \"previous_designs\",\n    ai: \"create_ai\",\n    studio: \"design_studio\"\n  };\n  var OPEN_SETTLE_MS = 250;\n  var COMMIT_MS = 600;\n  var carouselFired = false;\n  var openFired = false;\n  var proceeded = false;\n  var openTimer = null;\n  var lastCommitted = {};\n  var commitTimers = {};\n  function environment() {\n    return window.Shopify && Shopify.theme && Shopify.theme.role === \"main\" ? \"production\" : \"staging\";\n  }\n  function fire(name, params) {\n    if (typeof window.gtag === \"undefined\") return;\n    params = params || {};\n    params.environment = environment();\n    params.device_type = window.innerWidth <= 767 ? \"mobile\" : \"desktop\";\n    window.gtag(\"event\", name, params);\n  }\n  function uploadIndex(el) {\n    const tile = el.closest && el.closest(\"[data-bsv4-tile]\");\n    if (!tile || !tile.parentElement) return void 0;\n    return [...tile.parentElement.children].indexOf(tile);\n  }\n  function inModal(el) {\n    return !!(el.closest && el.closest(\"[data-bsv4-modal]\"));\n  }\n  var gaApi = { fire, uploadIndex, inModal };\n  function initGaBridge(root2) {\n    if (window.__bsv4GaBridge) return;\n    window.__bsv4GaBridge = true;\n    document.addEventListener(\n      \"click\",\n      (e) => {\n        const t = e.target;\n        if (!t || !t.closest || !root2.contains(t)) return;\n        if (t.matches('input[type=\"file\"]')) return;\n        if (inModal(t)) {\n          if (t.closest(\"[data-bsv4-modal-checkout]\")) {\n            proceeded = true;\n            fire(\"multiupload_proceed_checkout\", {});\n          } else if (t.closest(\"[data-bsv4-tile-remove]\")) {\n            fire(\"multiupload_delete_upload\", { upload_index: uploadIndex(t) });\n          } else if (t.closest(\"[data-bsv4-edit-open]\")) {\n            fire(\"multiupload_edit_ai_click\", { upload_index: uploadIndex(t) });\n          } else if (t.closest(\".bsv4-tile__add\")) {\n            fire(\"multiupload_add_size_click\", { upload_index: uploadIndex(t) });\n          }\n          return;\n        }\n        if (t.closest(\"[data-bsv4-video-open]\")) {\n          fire(\"dtf_pdp_video_play\", {});\n          return;\n        }\n        const source = t.closest(\"[data-bsv4-source]\");\n        if (source) {\n          const key = source.getAttribute(\"data-bsv4-source\");\n          fire(\"dtf_pdp_upload_tab_click\", { tab: UPLOAD_TAB_MAP[key] || key });\n          return;\n        }\n        if (!carouselFired && t.closest(\"[data-bsv4-gal-prev], [data-bsv4-gal-next], [data-bsv4-thumb]\")) {\n          carouselFired = true;\n          fire(\"dtf_pdp_carousel_interact\", {});\n          return;\n        }\n        const addlink = t.closest(\"[data-bsv4-addlink]\");\n        if (addlink) {\n          fire(\n            addlink.getAttribute(\"data-bsv4-addlink\") === \"ai\" ? \"dtf_pdp_add_design_ai_click\" : \"dtf_pdp_add_design_previous_click\",\n            {}\n          );\n          return;\n        }\n        if (t.closest(\"[data-bsv4-add-another]\")) {\n          fire(\"dtf_pdp_add_design_upload_click\", {});\n          return;\n        }\n        if (t.closest(\".nt-design-note__header\")) {\n          fire(\"dtf_pdp_note_toggle\", {});\n          return;\n        }\n        if (t.closest(\"[data-bsv4-checkout]\")) {\n          fire(\"dtf_pdp_proceed_checkout\", {});\n          return;\n        }\n        const sizeTab = t.closest(\"[data-bsv4-size-tab]\");\n        if (sizeTab) {\n          fire(\"dtf_pdp_size_tab_switch\", {\n            tab: sizeTab.getAttribute(\"data-bsv4-size-tab\")\n          });\n        }\n      },\n      true\n    );\n    document.addEventListener(\n      \"change\",\n      (e) => {\n        const t = e.target;\n        if (!t || !t.closest || !root2.contains(t)) return;\n        if (!inModal(t)) {\n          if (t.matches(\"[data-bsv4-precut]\")) fire(\"dtf_pdp_precut_toggle\", {});\n          return;\n        }\n        if (t.matches(\"[data-bsv4-tiletab]\")) {\n          if (t.checked)\n            fire(\"multiupload_size_tab_switch\", {\n              tab: t.value,\n              upload_index: uploadIndex(t)\n            });\n        } else if (t.matches(\"[data-bsv4-popular]\")) {\n          if (t.value)\n            fire(\"multiupload_popular_size_select\", {\n              size: t.value.trim(),\n              upload_index: uploadIndex(t)\n            });\n        } else if (t.matches(\"[data-bsv4-toggle-bgr]\")) {\n          fire(\"multiupload_remove_bg_toggle\", {\n            state: t.checked ? \"on\" : \"off\",\n            upload_index: uploadIndex(t)\n          });\n        } else if (t.matches(\"[data-bsv4-toggle-sr]\")) {\n          fire(\"multiupload_upscale_toggle\", {\n            state: t.checked ? \"on\" : \"off\",\n            upload_index: uploadIndex(t)\n          });\n        } else if (t.matches(\"[data-bsv4-w], [data-bsv4-h], [data-bsv4-qty]\")) {\n          commitField(t);\n        }\n      },\n      true\n    );\n    document.addEventListener(\n      \"input\",\n      (e) => {\n        const t = e.target;\n        if (!t || !t.closest || !root2.contains(t) || !inModal(t)) return;\n        if (!t.matches(\"[data-bsv4-w], [data-bsv4-h], [data-bsv4-qty]\")) return;\n        const idx = uploadIndex(t);\n        const key = (t.matches(\"[data-bsv4-qty]\") ? \"qty:\" : \"sz:\") + idx + \":\" + (t.matches(\"[data-bsv4-w]\") ? \"w\" : \"h\");\n        clearTimeout(commitTimers[key]);\n        commitTimers[key] = setTimeout(() => commitField(t), COMMIT_MS);\n      },\n      true\n    );\n    function commitField(t) {\n      const idx = uploadIndex(t);\n      if (idx === void 0) return;\n      if (t.matches(\"[data-bsv4-qty]\")) {\n        const qty = parseInt(t.value, 10);\n        if (isNaN(qty) || lastCommitted[\"qty:\" + idx] === qty) return;\n        lastCommitted[\"qty:\" + idx] = qty;\n        fire(\"multiupload_qty_change\", { qty, upload_index: idx });\n      } else {\n        const dim = t.matches(\"[data-bsv4-w]\") ? \"width\" : \"height\";\n        const num = parseFloat(t.value);\n        const key = \"sz:\" + idx + \":\" + dim;\n        if (isNaN(num) || lastCommitted[key] === num) return;\n        lastCommitted[key] = num;\n        fire(\"multiupload_custom_size_edit\", {\n          dimension: dim,\n          size_value: num,\n          upload_index: idx\n        });\n      }\n    }\n    const dialog = root2.querySelector(\"[data-bsv4-modal]\");\n    if (dialog) {\n      const onOpenChange = () => {\n        if (dialog.open) {\n          if (openTimer || openFired) return;\n          openTimer = setTimeout(() => {\n            openTimer = null;\n            if (!dialog.open || openFired) return;\n            openFired = true;\n            proceeded = false;\n            fire(\"multiupload_modal_open\", {});\n          }, OPEN_SETTLE_MS);\n        } else {\n          if (openTimer) {\n            clearTimeout(openTimer);\n            openTimer = null;\n          }\n          if (openFired && !proceeded) fire(\"multiupload_abandon\", {});\n          openFired = false;\n          proceeded = false;\n        }\n      };\n      new MutationObserver(onOpenChange).observe(dialog, {\n        attributes: true,\n        attributeFilter: [\"open\"]\n      });\n    }\n  }\n\n  // src/studio.js\n  var root;\n  var host;\n  var open = false;\n  function initStudio(rootEl) {\n    root = rootEl;\n    host = root.querySelector(\"[data-bsv4-studio-host]\");\n    if (!host) return;\n    if (!window.__ensureV0Css) {\n      window.__ensureV0Css = (cb) => {\n        ensureStyles();\n        if (typeof cb === \"function\") cb();\n      };\n    }\n    document.addEventListener(\"bsv4:source-changed\", (e) => {\n      const src = e.detail && e.detail.source;\n      if (src === \"studio\") openStudio();\n      else if (open) closeStudio();\n    });\n  }\n  function ensureStyles() {\n    if (document.querySelector('link[rel=\"stylesheet\"][href*=\"v0-styles\"]')) return;\n    const link = document.createElement(\"link\");\n    link.rel = \"stylesheet\";\n    link.href = host && host.dataset && host.dataset.bsv4V0css || \"\";\n    if (!link.href) {\n      const anyAsset = document.querySelector('link[href*=\"/assets/\"], script[src*=\"/assets/\"]');\n      if (anyAsset) {\n        const src = anyAsset.href || anyAsset.src;\n        link.href = src.replace(/\\/assets\\/[^/?]+.*/, \"/assets/v0-styles.css\");\n      }\n    }\n    if (link.href) document.head.appendChild(link);\n  }\n  function openStudio() {\n    if (window.__ensureV0Js && !window.__v0JsLoaded) {\n      window.__ensureV0Js(() => openStudio());\n      return;\n    }\n    const editorOverlay = document.querySelector(\".customTabelPopup__overlay-editor\");\n    const introOverlay = document.querySelector(\".customTabelPopup__overlay-modal\");\n    if (!editorOverlay) return;\n    ensureStyles();\n    editorOverlay.__inlineParent = host;\n    if (editorOverlay.parentNode !== host) host.appendChild(editorOverlay);\n    editorOverlay.classList.add(\"studio-inline\");\n    editorOverlay.classList.remove(\"studio-embedded\");\n    editorOverlay.style.display = \"block\";\n    if (introOverlay) introOverlay.style.display = \"none\";\n    const swatch = document.querySelector(\".transparent-swatch.canvas-color-swatch\");\n    if (swatch) {\n      try {\n        swatch.click();\n      } catch (_) {\n      }\n    }\n    const prevBtn = document.getElementById(\"prev-designs-btn\");\n    if (prevBtn && !prevBtn.__bsv4Wired) {\n      prevBtn.__bsv4Wired = true;\n      prevBtn.__spdInit = true;\n      prevBtn.style.display = \"\";\n      prevBtn.addEventListener(\"click\", () => {\n        window.__studioPickActive = true;\n        window.__bsv4StudioPick = true;\n        if (document.querySelector(\"[data-alv2-modal]\") && window.NTArtworkLibrary && window.NTArtworkLibrary.open) {\n          window.NTArtworkLibrary.open();\n          return;\n        }\n        openPicker(\"previous\");\n      });\n      if (!window.__bsv4StudioAlv2Cleanup) {\n        window.__bsv4StudioAlv2Cleanup = true;\n        document.addEventListener(\"alv2:modal-closed\", () => {\n          setTimeout(() => {\n            window.__bsv4StudioPick = false;\n          }, 0);\n        });\n      }\n    }\n    host.hidden = false;\n    root.querySelector(\".bsv4-uploader__zone\")?.setAttribute(\"data-bsv4-studio-hidden\", \"\");\n    open = true;\n    if (window.matchMedia && window.matchMedia(\"(max-width: 749px)\").matches) {\n      window.__dtfMobileZoomTarget = 38;\n      setZoomWhenReady(38);\n    }\n  }\n  function closeStudio() {\n    const editorOverlay = document.querySelector(\".customTabelPopup__overlay-editor\");\n    if (editorOverlay) editorOverlay.style.display = \"none\";\n    host.hidden = true;\n    root.querySelector(\".bsv4-uploader__zone\")?.removeAttribute(\"data-bsv4-studio-hidden\");\n    open = false;\n  }\n  function setZoomWhenReady(targetPct, tries = 0) {\n    if (typeof window.setStudioZoom !== \"function\") {\n      if (tries > 150) return;\n      setTimeout(() => setZoomWhenReady(targetPct, tries + 1), 100);\n      return;\n    }\n    try {\n      window.setStudioZoom(targetPct);\n    } catch (_) {\n    }\n    let attempts = 0;\n    const iv = setInterval(() => {\n      attempts++;\n      const display = document.getElementById(\"zoom-display\");\n      const current = display && parseInt((display.textContent || \"\").replace(\"%\", \"\"), 10);\n      if (current && current !== targetPct) {\n        try {\n          window.setStudioZoom(targetPct);\n        } catch (_) {\n        }\n      }\n      if (attempts > 15) clearInterval(iv);\n    }, 100);\n  }\n\n  // src/gallery.js\n  function initGallery(root2) {\n    const gal = root2.querySelector(\"[data-bsv4-gallery]\");\n    if (!gal) return;\n    const slides = [...gal.querySelectorAll(\"[data-bsv4-slide]\")];\n    const thumbs = [...gal.querySelectorAll(\"[data-bsv4-thumb]\")];\n    let index = 0;\n    const show = (i) => {\n      index = (i + slides.length) % slides.length;\n      slides.forEach((s, n) => s.classList.toggle(\"is-active\", n === index));\n      thumbs.forEach((t, n) => t.classList.toggle(\"is-active\", n === index));\n      thumbs[index]?.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior: \"smooth\" });\n      const v = gal.querySelector(\"[data-bsv4-slide] video\");\n      if (v) slides[index].contains(v) ? v.play().catch(() => {\n      }) : v.pause();\n      [1, slides.length - 1].forEach((d) => {\n        const s = slides[(index + d) % slides.length];\n        if (s && s.loading === \"lazy\") s.loading = \"eager\";\n      });\n    };\n    gal.addEventListener(\"click\", (e) => {\n      const thumb = e.target.closest(\"[data-bsv4-thumb]\");\n      if (thumb) show(parseInt(thumb.dataset.bsv4Thumb, 10));\n      else if (e.target.closest(\"[data-bsv4-gal-prev]\")) show(index - 1);\n      else if (e.target.closest(\"[data-bsv4-gal-next]\")) show(index + 1);\n    });\n    const stage = gal.querySelector(\".bsv4-gallery__stage\") || gal;\n    let swipeX = 0, swipeY = 0;\n    stage.addEventListener(\"touchstart\", (e) => {\n      swipeX = e.touches[0].clientX;\n      swipeY = e.touches[0].clientY;\n    }, { passive: true });\n    stage.addEventListener(\"touchend\", (e) => {\n      const dx = e.changedTouches[0].clientX - swipeX;\n      const dy = e.changedTouches[0].clientY - swipeY;\n      if (Math.abs(dx) >= 40 && Math.abs(dx) > Math.abs(dy) * 1.5) show(index + (dx < 0 ? 1 : -1));\n    }, { passive: true });\n    const card = root2.querySelector(\"[data-bsv4-video-open]\");\n    const dialog = root2.querySelector(\"[data-bsv4-video-dialog]\");\n    if (card && dialog) {\n      card.addEventListener(\"click\", () => {\n        dialog.showModal();\n        dialog.querySelector(\"video\")?.play().catch(() => {\n        });\n      });\n      const close = () => {\n        dialog.querySelector(\"video\")?.pause();\n        dialog.close();\n      };\n      dialog.querySelector(\"[data-bsv4-video-close]\").addEventListener(\"click\", close);\n      dialog.addEventListener(\"click\", (e) => {\n        if (e.target === dialog) close();\n      });\n    }\n  }\n\n  // src/size-guide.js\n  function containFit2(w, h, capW, capH) {\n    w = parseFloat(w);\n    h = parseFloat(h);\n    capW = parseFloat(capW);\n    capH = parseFloat(capH);\n    if (!(w > 0) || !(h > 0) || !(capW > 0) || !(capH > 0)) return null;\n    const scale = Math.min(capW / w, capH / h);\n    return { w: round22(w * scale), h: round22(h * scale) };\n  }\n  function fitLabel(fit) {\n    return fit ? `${fit.w}\" x ${fit.h}\"` : \"\";\n  }\n  function round22(n) {\n    return Number(n.toFixed(2));\n  }\n  function designDims(file) {\n    const rows = file.rows || [];\n    const row = rows[rows.length - 1];\n    const w = row && row.w != null ? row.w : file.widthIn != null ? file.widthIn : file.inW;\n    const h = row && row.h != null ? row.h : file.heightIn != null ? file.heightIn : file.inH;\n    return { w, h };\n  }\n  function initSizeGuide(root2, cfg7) {\n    const block = root2.querySelector('[data-bsv4-block=\"size_guide\"]');\n    if (!block || !cfg7 || !cfg7.sizeGuide) return;\n    if (block.dataset.bsv4SizeGuideInit === \"1\") return;\n    block.dataset.bsv4SizeGuideInit = \"1\";\n    const garments = cfg7.sizeGuide.garments || [];\n    const tiles = Array.from(block.querySelectorAll(\"[data-bsv4-sg-tile]\")).map((el, i) => {\n      const g = garments[i] || {};\n      return {\n        el,\n        capW: parseFloat(el.dataset.bsv4SgCapW != null ? el.dataset.bsv4SgCapW : g.capW),\n        capH: parseFloat(el.dataset.bsv4SgCapH != null ? el.dataset.bsv4SgCapH : g.capH),\n        label: el.querySelector(\"[data-bsv4-sg-label]\"),\n        design: el.querySelector(\"[data-bsv4-sg-design]\")\n      };\n    });\n    if (!tiles.length) return;\n    for (const t of tiles) {\n      if (!t.design) continue;\n      t.design.addEventListener(\"load\", () => {\n        t.design.hidden = false;\n      });\n      t.design.addEventListener(\"error\", () => {\n        t.design.hidden = true;\n      });\n    }\n    const custom = block.querySelector(\"[data-bsv4-sg-custom]\");\n    const customWrap = custom && custom.closest(\".bsv4-size-guide__swatch--custom\");\n    function applyColor(color, isCustom) {\n      for (const t of tiles) t.el.style.backgroundColor = color;\n      if (customWrap) customWrap.classList.toggle(\"is-active\", isCustom);\n      if (isCustom) {\n        for (const r of block.querySelectorAll(\"[data-bsv4-sg-swatch]\")) r.checked = false;\n      }\n    }\n    block.addEventListener(\"change\", (e) => {\n      const sw = e.target.closest && e.target.closest(\"[data-bsv4-sg-swatch]\");\n      if (sw && sw.checked) applyColor(sw.value, false);\n    });\n    if (custom) custom.addEventListener(\"input\", () => applyColor(custom.value, true));\n    subscribe((state2) => {\n      const file = activeFile(state2);\n      if (!file || !file.imgixUrl) {\n        for (const t of tiles) {\n          if (t.design) {\n            t.design.hidden = true;\n            t.design.removeAttribute(\"src\");\n          }\n        }\n        return;\n      }\n      const dims = designDims(file);\n      const url = previewUrl(file);\n      for (const t of tiles) {\n        const fit = containFit2(dims.w, dims.h, t.capW, t.capH);\n        if (!fit) continue;\n        if (t.label) t.label.textContent = fitLabel(fit);\n        if (t.design) {\n          if (t.design.getAttribute(\"src\") !== url) {\n            t.design.hidden = true;\n            t.design.src = url;\n          }\n        }\n      }\n    });\n  }\n\n  // src/main.js\n  var perksMq = window.matchMedia(\"(max-width: 720px)\");\n  var perksOutMq = window.matchMedia(\"(min-width: 1000px)\");\n  var perksRoot = null;\n  function placePerks(root2) {\n    perksRoot = root2;\n    const perks = root2.querySelector(\".bsv4-perks:not(.bsv4-perks--static)\");\n    const zone = root2.querySelector(\".bsv4-uploader__zone\");\n    if (!perks || !zone) return;\n    const card = zone.closest('[data-bsv4-block=\"upload_box\"]');\n    const mode = root2.dataset.bsv4Perks || \"auto\";\n    const out = mode === \"out\" || mode !== \"in\" && root2.dataset.bsv4Ab === \"b\";\n    if (perksOutMq.matches && card && out) {\n      if (perks.previousElementSibling !== card) card.after(perks);\n      perks.classList.add(\"bsv4-perks--inup\", \"bsv4-perks--out\");\n    } else {\n      if (perks.previousElementSibling !== zone) zone.after(perks);\n      perks.classList.add(\"bsv4-perks--inup\");\n      perks.classList.remove(\"bsv4-perks--out\");\n    }\n  }\n  try {\n    perksOutMq.addEventListener(\"change\", () => {\n      if (perksRoot) placePerks(perksRoot);\n    });\n  } catch (x) {\n  }\n  function collapseEmptyMount() {\n    for (const c of document.querySelectorAll(\".shopify-section.mount-app .container--vertical-space\")) {\n      const blk = c.querySelector(\".shopify-app-block\");\n      const empty = !blk || !Array.from(blk.children).some((k) => !/^(LINK|SCRIPT|STYLE)$/.test(k.tagName));\n      if (perksMq.matches && empty) {\n        c.style.setProperty(\"margin\", \"0\", \"important\");\n        c.style.setProperty(\"padding\", \"0\", \"important\");\n      } else {\n        c.style.removeProperty(\"margin\");\n        c.style.removeProperty(\"padding\");\n      }\n    }\n  }\n  try {\n    perksMq.addEventListener(\"change\", collapseEmptyMount);\n  } catch (x) {\n  }\n  var desktopToolsMq = window.matchMedia(\"(min-width: 1000px)\");\n  function syncDesktopTools(root2) {\n    const prev = root2.querySelector(\".bsv4-preview\");\n    if (!prev || prev.dataset.bsv4DesktopTools !== \"classic\") return;\n    const apply = (flip) => {\n      prev.classList.toggle(\"bsv4-preview--stagetools\", !desktopToolsMq.matches);\n      if (!flip) return;\n      if (typeof window.__bsv4ToolsModeFlip === \"function\") window.__bsv4ToolsModeFlip();\n      if (typeof window.__bsv4PlacePins === \"function\") window.__bsv4PlacePins();\n    };\n    apply(false);\n    try {\n      desktopToolsMq.addEventListener(\"change\", () => apply(true));\n    } catch (x) {\n    }\n  }\n  var stickBands = null;\n  function syncStickTop(root2) {\n    if (!stickBands) {\n      stickBands = Array.from(document.querySelectorAll(\".shopify-section, header\")).filter((el) => {\n        if (root2.contains(el)) return false;\n        const p = getComputedStyle(el).position;\n        return p === \"sticky\" || p === \"fixed\";\n      });\n      if (!stickBands.length) return;\n    }\n    const rects = stickBands.map((el) => {\n      const r = el.getBoundingClientRect();\n      const t = parseFloat(getComputedStyle(el).top);\n      return Number.isFinite(t) ? { top: t, bottom: t + r.height, height: r.height, width: r.width } : r;\n    }).filter((r) => r.height > 0 && r.bottom < window.innerHeight * 0.5 && r.width > window.innerWidth * 0.5).sort((a, b) => a.top - b.top);\n    let bottom = 0;\n    for (const r of rects) {\n      if (r.top <= bottom + 1 && r.bottom > bottom) bottom = r.bottom;\n    }\n    if (bottom > 0) root2.style.setProperty(\"--bsv4-stick-top\", `${Math.round(bottom) + 24}px`);\n  }\n  function initStickTop(root2) {\n    syncStickTop(root2);\n    const resync = () => syncStickTop(root2);\n    window.addEventListener(\"resize\", resync);\n    if (typeof ResizeObserver !== \"undefined\" && stickBands && stickBands.length) {\n      const ro = new ResizeObserver(resync);\n      stickBands.forEach((el) => ro.observe(el));\n    }\n  }\n  window.__bsv4 = { getState, update, subscribe, announce };\n  window.__bsv4.gangRow = function(spec) {\n    const st = getState();\n    const files = st.files || [];\n    const file = files.find((f) => f.id === st.activeFileId) || files[0];\n    if (!file) return;\n    if (file.single) return;\n    if (!spec || spec.variantId == null) {\n      file.rows = [];\n      update({ files: [...files], pricing: { model: st.pricing.model, rows: [], total: 0, tier: null } });\n    } else {\n      const qty = spec.qty || 1;\n      const unit = Number(spec.unit) || 0;\n      const total = unit * qty;\n      const rowId = \"gang-\" + file.id;\n      file.rows = [{ id: rowId, mode: \"custom\", gang: true, w: spec.w, h: spec.h, qty, variantId: spec.variantId }];\n      update({\n        files: [...files],\n        pricing: {\n          model: \"gang\",\n          total,\n          tier: null,\n          rows: [{ rowId, fileId: file.id, w: spec.w, h: spec.h, qty, unit, total }]\n        }\n      });\n    }\n    announce(\"rows-changed\", {});\n    announce(\"price-changed\", { total: getState().pricing.total, tier: null });\n  };\n  window.__bsv4.setFixPreview = function(fileId, spec) {\n    const st = getState();\n    const files = st.files || [];\n    const file = files.find((f) => f.id === fileId) || null;\n    if (!file) return;\n    file.fixPreview = spec && spec.url ? { url: String(spec.url), w: Number(spec.w) || 0, h: Number(spec.h) || 0 } : null;\n    update({ files: [...files] });\n  };\n  window.__bsv4.markSingle = function(fileId, opts) {\n    return markSingle(fileId, opts);\n  };\n  window.__bsv4.setGangUpscale = function(on) {\n    const st = getState();\n    const files = st.files || [];\n    const file = files.find((f) => f.id === st.activeFileId) || files[0];\n    if (!file) return;\n    file.superRes = !!on;\n    update({ files: [...files] });\n  };\n  window.__bsv4Bridge = {\n    getState,\n    update,\n    subscribe,\n    announce,\n    uploadBlob,\n    intakeFromUrls,\n    replaceFileFromUrl,\n    // gang-upload-intent: swap a fixPending file for its corrected render\n    markSingle,\n    // gang-bysize: size/price a landed single design inline with the by-size modules\n    previewUrl,\n    artworkUrl: (file) => file?.ntBgrProvider === \"ninja_ai\" && file.bgRemove ? window.NtBgrStockProvider?.artworkUrl(file) : previewUrl(file),\n    showError,\n    previewUrlRaw,\n    // film chunk: the unpainted source it bakes from\n    resolveDimensions,\n    saveFileToUser,\n    // My Designs save \u2014 the Add Text chunk applies uploads of its own\n    nbEdit,\n    refitRowsToAspect,\n    IMGIX_HOST,\n    S3_HOST,\n    gaApi,\n    productionUpload,\n    // soft edges: the URL production prints (dry-run buildItem) = the bake/check source\n    addToCart\n    // assets/nt-login-keep-cart.js: a logged-out login click adds the pending designs first (Justin 10-26)\n  };\n  window.__bsv4Rev = false ? \"dev-unbuilt\" : \"r20261103-073331.9dc67eaf+\";\n  if (!window.__bsv4AnchorWired) {\n    window.__bsv4AnchorWired = true;\n    document.addEventListener(\"click\", (e) => {\n      const a = e.target.closest && e.target.closest(\"[data-bsv4-scrollto]\");\n      if (!a) return;\n      e.preventDefault();\n      const want = (a.getAttribute(\"data-bsv4-scrollto\") || \"\").toLowerCase();\n      if (!want) return;\n      for (const h of document.querySelectorAll(\"h1, h2, h3, h4\")) {\n        if ((h.textContent || \"\").toLowerCase().includes(want)) {\n          const t = h.closest(\".shopify-section\") || h;\n          const targetY = Math.max(0, t.getBoundingClientRect().top + window.pageYOffset - 90);\n          const startY = window.pageYOffset;\n          const dist = targetY - startY;\n          const dur = Math.min(900, Math.max(350, Math.abs(dist) * 0.22));\n          const t0 = performance.now();\n          let doneAt = 0;\n          const step = (now) => {\n            const p = Math.min(1, (now - t0) / dur);\n            window.scrollTo(0, startY + dist * (1 - Math.pow(1 - p, 3)));\n            if (p < 1) requestAnimationFrame(step);\n            else doneAt = now;\n          };\n          requestAnimationFrame(step);\n          setTimeout(() => {\n            if (!doneAt) window.scrollTo(0, targetY);\n          }, dur + 250);\n          return;\n        }\n      }\n    });\n  }\n  function boot(root2) {\n    if (!root2 || root2.dataset.bsv4Booted === \"1\") return;\n    root2.dataset.bsv4Booted = \"1\";\n    const cfg7 = readConfig();\n    if (cfg7.family) update({ family: cfg7.family });\n    if (cfg7.cartQty) update({ cartQty: Number(cfg7.cartQty) || 0 });\n    subscribe((state2) => {\n      root2.dataset.state = state2.status;\n      root2.dataset.mode = state2.mode;\n    });\n    const safe = (name, fn) => {\n      try {\n        fn();\n      } catch (err) {\n        console.error(`bsv4: ${name} init failed`, err);\n      }\n    };\n    safe(\"uploader\", () => initUploader(root2, cfg7));\n    safe(\"desktop-tools\", () => syncDesktopTools(root2));\n    safe(\"perks\", () => placePerks(root2));\n    safe(\"mount\", collapseEmptyMount);\n    safe(\"sticktop\", () => initStickTop(root2));\n    safe(\"film-paint\", () => initFilmPaint(cfg7));\n    safe(\"preview\", () => initPreview(root2, cfg7));\n    safe(\"modal\", () => initModal(root2, cfg7));\n    safe(\"sizing\", () => initSizing(root2, cfg7));\n    safe(\"pricing\", () => initPricing(root2, cfg7));\n    safe(\"cart\", () => initCart(root2, cfg7));\n    safe(\"designs\", () => initDesigns(root2, cfg7));\n    safe(\"addmore-popups\", () => initAddmorePopups(root2));\n    const bgrSrc = root2.dataset.bsv4Bgrjs;\n    if (window.__bsv4BgrBoot) {\n      safe(\"bgr\", () => window.__bsv4BgrBoot());\n    } else if (bgrSrc && !window.__bsv4BgrWired) {\n      window.__bsv4BgrWired = true;\n      const fetchBgrChunk = () => {\n        const s = document.createElement(\"script\");\n        s.setAttribute(\"data-bsv4-bgrchunk\", \"\");\n        s.onerror = () => {\n          s.remove();\n          wireBgrChunk();\n        };\n        s.src = bgrSrc;\n        document.body.appendChild(s);\n      };\n      const wireBgrChunk = () => {\n        const un = subscribe((state2) => {\n          if (state2.status !== \"uploading\" && !state2.files.length) return;\n          un();\n          fetchBgrChunk();\n        });\n      };\n      wireBgrChunk();\n    }\n    window.__bsv4Bridge.cfg = cfg7;\n    const editSrc = root2.dataset.bsv4Editjs;\n    if (window.__bsv4EditBoot) {\n      safe(\"edit\", () => window.__bsv4EditBoot());\n    } else if (cfg7.falKey && editSrc && !window.__bsv4EditWired) {\n      window.__bsv4EditWired = true;\n      const fetchChunk = () => {\n        const s = document.createElement(\"script\");\n        s.setAttribute(\"data-bsv4-editchunk\", \"\");\n        s.onerror = () => {\n          s.remove();\n          wireChunk();\n        };\n        s.src = editSrc;\n        document.body.appendChild(s);\n      };\n      const wireChunk = () => {\n        const un = subscribe((state2) => {\n          if (!state2.files.length) return;\n          un();\n          fetchChunk();\n        });\n      };\n      wireChunk();\n    }\n    const treatSrc = root2.dataset.bsv4Treatjs;\n    if (window.__bsv4TreatBoot) {\n      safe(\"treat\", () => window.__bsv4TreatBoot());\n    } else if (treatSrc && !window.__bsv4TreatWired) {\n      window.__bsv4TreatWired = true;\n      const fetchTreatChunk = () => {\n        const s = document.createElement(\"script\");\n        s.setAttribute(\"data-bsv4-treatchunk\", \"\");\n        s.onerror = () => {\n          s.remove();\n          wireTreatChunk();\n        };\n        s.src = treatSrc;\n        document.body.appendChild(s);\n      };\n      const wireTreatChunk = () => {\n        const un = subscribe((state2) => {\n          if (state2.status !== \"uploading\" && !state2.files.length) return;\n          un();\n          fetchTreatChunk();\n        });\n      };\n      wireTreatChunk();\n    }\n    const edgesSrc = root2.dataset.bsv4Edgesjs;\n    if (window.__bsv4EdgesBoot) {\n      safe(\"edges\", () => window.__bsv4EdgesBoot());\n    } else if (edgesSrc && !window.__bsv4EdgesWired) {\n      window.__bsv4EdgesWired = true;\n      const fetchEdgesChunk = () => {\n        const s = document.createElement(\"script\");\n        s.setAttribute(\"data-bsv4-edgeschunk\", \"\");\n        s.onerror = () => {\n          s.remove();\n          wireEdgesChunk();\n        };\n        s.src = edgesSrc;\n        document.body.appendChild(s);\n      };\n      const wireEdgesChunk = () => {\n        const un = subscribe((state2) => {\n          if (state2.status !== \"uploading\" && !state2.files.length) return;\n          un();\n          fetchEdgesChunk();\n        });\n      };\n      wireEdgesChunk();\n    }\n    const filmSrc = root2.dataset.bsv4Filmjs;\n    if (window.__bsv4FilmBoot) {\n      safe(\"film\", () => window.__bsv4FilmBoot());\n    } else if (filmSrc && !window.__bsv4FilmWired) {\n      window.__bsv4FilmWired = true;\n      const fetchFilmChunk = () => {\n        const s = document.createElement(\"script\");\n        s.onerror = () => {\n          s.remove();\n          wireFilmChunk();\n        };\n        s.src = filmSrc;\n        document.body.appendChild(s);\n      };\n      const wireFilmChunk = () => {\n        const un = subscribe((state2) => {\n          if (state2.status !== \"uploading\" && !state2.files.length) return;\n          un();\n          fetchFilmChunk();\n        });\n      };\n      wireFilmChunk();\n    }\n    if (!window.__bsv4CalcWired) {\n      window.__bsv4CalcWired = true;\n      document.addEventListener(\n        \"click\",\n        (e) => {\n          const trg = e.target.closest && e.target.closest(\"a.pricingTable, ._price-calc-link, .openPriceCalculator\");\n          if (!trg) return;\n          const r = document.querySelector(\"[data-bsv4-root]\");\n          const calcSrc = r && r.dataset.bsv4Calcjs;\n          if (!r || !calcSrc) return;\n          e.preventDefault();\n          e.stopPropagation();\n          if (window.__bsv4CalcBoot) return void window.__bsv4CalcBoot(true);\n          if (window.__bsv4CalcFetching) return;\n          window.__bsv4CalcFetching = true;\n          const s = document.createElement(\"script\");\n          s.onerror = () => {\n            s.remove();\n            window.__bsv4CalcFetching = false;\n          };\n          s.src = calcSrc;\n          document.body.appendChild(s);\n        },\n        true\n      );\n    }\n    const qrTrg = root2.querySelector(\"[data-bsv4-qr-open]\");\n    if (qrTrg)\n      qrTrg.addEventListener(\"click\", () => {\n        if (window.__bsv4QrBoot) return void window.__bsv4QrBoot(true);\n        if (window.__bsv4QrFetching) return;\n        const qrSrc = root2.dataset.bsv4Qrjs;\n        if (!qrSrc) return;\n        window.__bsv4QrFetching = true;\n        const s = document.createElement(\"script\");\n        s.onerror = () => {\n          s.remove();\n          window.__bsv4QrFetching = false;\n        };\n        s.src = qrSrc;\n        document.body.appendChild(s);\n      });\n    safe(\"studio\", () => initStudio(root2, cfg7));\n    safe(\"gallery\", () => initGallery(root2, cfg7));\n    safe(\"size-guide\", () => initSizeGuide(root2, cfg7));\n    safe(\"integrations\", () => initIntegrations(root2, cfg7));\n    safe(\"ga-bridge\", () => initGaBridge(root2));\n    safe(\"handoffs\", () => initHandoffs());\n    announce(\"boot\", { version: cfg7.version || \"v5\", family: cfg7.family || \"dtf\" });\n  }\n  boot(document.querySelector(\"[data-bsv4-root]\"));\n  document.addEventListener(\"shopify:section:load\", (e) => {\n    const root2 = e.target && e.target.querySelector && e.target.querySelector(\"[data-bsv4-root]\");\n    if (root2) boot(root2);\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
