{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/wdi-studio-app.js?b=7"],
  "sourcesContent": ["/* Wow Design Lab \u2014 application shell (<wdi-design-studio>). Layout, product browser, tools, contextual\n   properties, history, saving, roster, review + submit. Rendering lives in wdi-studio-editor, data rules in\n   wdi-studio-core, artwork + templates in wdi-studio-art (optional module). */\nimport * as Core from 'wdi-studio-core';\nimport { Editor, FONTS, textAspect, contrast, garmentSVG } from 'wdi-studio-editor';\n\nconst INKS = ['#FFFFFF', '#111214', '#EB0000', '#8B1C26', '#1F2842', '#1F4FA3', '#F2B705', '#1F5C3A', '#4A2C80', '#F4B9CA', '#9B9CA0', '#C0C0C0'];\nconst ACCEPT = { 'image/png': 1, 'image/jpeg': 1, 'image/webp': 1, 'image/svg+xml': 1 };\nconst h = (t, a = {}, ...kids) => { const e = document.createElement(t); for (const k in a) { const v = a[k]; if (v == null || v === false) continue; if (k === 'class') e.className = v; else if (k.startsWith('on')) e.addEventListener(k.slice(2), v); else if (k === 'html') e.innerHTML = v; else e.setAttribute(k, v === true ? '' : v); } kids.flat(9).forEach(c => c != null && c !== false && e.append(c.nodeType ? c : document.createTextNode(c))); return e; };\nconst debounce = (f, ms) => { let t; return (...a) => { clearTimeout(t); t = setTimeout(() => f(...a), ms); }; };\nconst esc = s => String(s).replace(/[<>&\"]/g, c => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', '\"': '&quot;' }[c]));\nconst plural = (n, one, many) => `${n} ${n === 1 ? one : many}`;\nconst ICON = {\n  product: '<path d=\"M8 3 4 5 2 9l3 1.5V21h14V10.5L22 9l-2-4-4-2c0 1.7-1.8 3-4 3S8 4.7 8 3Z\"/>',\n  upload: '<path d=\"M12 16V4M7 9l5-5 5 5M4 16v4h16v-4\"/>',\n  text: '<path d=\"M5 6V4h14v2M12 4v16M9 20h6\"/>',\n  art: '<path d=\"m12 3 2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 16.6 6.6 19.5l1.2-6L3.3 9.3l6.1-.7Z\"/>',\n  templates: '<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2\"/><path d=\"M3.5 9h17M9 9v11.5\"/>',\n  roster: '<path d=\"M8 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2.5 20c.6-3.5 2.8-5 5.5-5s4.9 1.5 5.5 5M15 6h6M15 10h6M17 14h4\"/>',\n  sizes: '<path d=\"M4 7h16M4 12h16M4 17h10\"/>'\n};\nconst icon = k => h('span', { class: 'wds2-rail__i', 'aria-hidden': 'true', html: `<svg viewBox=\"0 0 24 24\">${ICON[k]}</svg>` });\n\n/* Original artwork is kept untouched in IndexedDB (survives reloads; sent to the quote server when enabled). */\nconst idb = {\n  db: null,\n  open() { return this.db || (this.db = new Promise((res, rej) => { const r = indexedDB.open('wdi-studio', 1); r.onupgradeneeded = () => r.result.createObjectStore('originals'); r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); })); },\n  async put(k, v) { try { const d = await this.open(); await new Promise((res, rej) => { const t = d.transaction('originals', 'readwrite'); t.objectStore('originals').put(v, k); t.oncomplete = res; t.onerror = rej; }); } catch (e) {} },\n  async get(k) { try { const d = await this.open(); return await new Promise((res, rej) => { const r = d.transaction('originals').objectStore('originals').get(k); r.onsuccess = () => res(r.result); r.onerror = rej; }); } catch (e) { return null; } }\n};\nasync function previewOf(file) {\n  const url = await new Promise(r => { const fr = new FileReader(); fr.onload = () => r(fr.result); fr.readAsDataURL(file); });\n  const img = await new Promise((res, rej) => { const i = new Image(); i.onload = () => res(i); i.onerror = rej; i.src = url; });\n  const w = img.naturalWidth || 1000, hh = img.naturalHeight || 1000;\n  if (file.type === 'image/svg+xml' || Math.max(w, hh) <= 1600) return { preview: url, w, h: hh };\n  const s = 1600 / Math.max(w, hh); const c = document.createElement('canvas'); c.width = Math.round(w * s); c.height = Math.round(hh * s);\n  c.getContext('2d').drawImage(img, 0, 0, c.width, c.height);\n  return { preview: c.toDataURL(file.type === 'image/jpeg' ? 'image/jpeg' : 'image/png', .9), w, h: hh };\n}\n/** Share links only ever show this: a PNG of the artwork, at most 1600 px (SVGs are rasterised). */\nasync function rasterPreview(src) {\n  const img = await new Promise((res, rej) => { const i = new Image(); if (/^https?:/.test(src)) i.crossOrigin = 'anonymous'; i.onload = () => res(i); i.onerror = rej; i.src = src; });\n  const w = img.naturalWidth || 1000, hh = img.naturalHeight || 1000, sc = Math.min(1, 1600 / Math.max(w, hh));\n  const c = document.createElement('canvas'); c.width = Math.max(1, Math.round(w * sc)); c.height = Math.max(1, Math.round(hh * sc));\n  c.getContext('2d').drawImage(img, 0, 0, c.width, c.height);\n  return new Promise(r => c.toBlob(r, 'image/png'));\n}\n\nclass Studio extends HTMLElement {\n  async connectedCallback() {\n    if (this._init) return; this._init = true;\n    const app = this.querySelector('[data-studio-app]'); this.app = app;\n    if (!window.Konva) { app.innerHTML = '<p class=\"wds2-loading\">The Design Lab could not load. Please refresh the page.</p>'; return; }\n    try {\n      const base = await (await fetch(this.dataset.catalog)).json();\n      let garments = []; try { garments = JSON.parse(this.querySelector('script[data-garments]')?.textContent || '[]'); } catch (e) {}\n      this.catalog = new Core.Catalog(Core.mergeCatalog(base, garments));\n    } catch (e) { app.innerHTML = '<p class=\"wds2-loading\">The Design Lab could not load its product list. Please refresh.</p>'; return; }\n    try { const ph = JSON.parse(this.querySelector('script[data-photos]')?.textContent || '[]'); for (const x of ph) { const pr = this.catalog.byId[x.p]; if (pr) (pr.photos = pr.photos || {})[x.k] = { src: x.src.startsWith('//') ? 'https:' + x.src : x.src, tint: !!x.tint }; } } catch (e) {}\n    try { this.art = await import('wdi-studio-art'); await this.art.ready?.(); } catch (e) { this.art = null; }\n    this.store = new Core.LocalStore(); this.server = new Core.ServerStore(this.dataset.endpoint);\n    this.pricing = new Core.Pricing({ enabled: this.dataset.pricing === 'on', endpoint: this.dataset.pricingEndpoint || this.dataset.endpoint });\n    const saved = this.store.load();\n    this.project = saved && saved.schema === Core.SCHEMA && !Core.validateProject(this.catalog, saved).length ? saved : Core.newProject(this.catalog, (new URLSearchParams(location.search).get('product')) || 'gildan-5000');\n    const sharedId = new URLSearchParams(location.search).get('design');\n    if (sharedId && this.server.enabled) {\n      try {\n        const shared = await this.server.loadShared(sharedId);\n        for (const a of Object.values(shared.assets || {})) { a.preview = a.url; delete a.url; }\n        const copy = { ...shared, id: Core.uid('p_'), createdAt: Date.now(), updatedAt: Date.now() };\n        if (!Core.validateProject(this.catalog, copy).length) { this.project = copy; this._sharedOpened = true; }\n      } catch (e) { this._sharedFailed = true; }\n    }\n    this.history = new Core.History(); this.history.push(this.project);\n    this.tab = null; this.rosterPreview = -1;\n    try { this.started = sessionStorage.getItem('wdi_lab_started') === '1'; } catch (e) { this.started = false; }\n    this.build(app);\n    this.editor = new Editor(this.stageEl, this.catalog, { onChange: () => this.changed(), onSelect: el => this.onSelect(el), onHint: hint => this.showHint(hint), art: this.art ? el => this.art.svgFor(el) : null });\n    await this.editor.setProject(this.project);\n    this.renderAll();\n    this.form = this.querySelector('form[data-studio-form]');\n    if (this._sharedOpened) this.toast('Opened a shared design. Your changes are saved as your own copy.');\n    else if (this._sharedFailed) this.toast('That design link has expired or could not be opened.');\n  }\n  get item() { return Core.activeItem(this.project); }\n  /* ---------------- layout ---------------- */\n  build(app) {\n    app.innerHTML = '';\n    this.viewSeg = h('div', { class: 'wds2-seg', role: 'tablist', 'aria-label': 'Garment view' });\n    this.undoBtn = h('button', { type: 'button', class: 'wds2-ib', 'aria-label': 'Undo', title: 'Undo (Ctrl+Z)', onclick: () => this.undo() }, '\u21B6');\n    this.redoBtn = h('button', { type: 'button', class: 'wds2-ib', 'aria-label': 'Redo', title: 'Redo (Ctrl+Shift+Z)', onclick: () => this.redo() }, '\u21B7');\n    const zoom = h('div', { class: 'wds2-zoom' }, h('button', { type: 'button', class: 'wds2-ib', 'aria-label': 'Zoom out', onclick: () => this.editor.setZoom(this.editor.zoom - .25) }, '\u2212'), h('button', { type: 'button', class: 'wds2-ib', 'aria-label': 'Zoom in', onclick: () => this.editor.setZoom(this.editor.zoom + .25) }, '+'));\n    this.saveBtn = h('button', { type: 'button', class: 'wdi-btn wdi-btn--secondary wds2-btn', onclick: () => this.save(true) }, 'Save');\n    this.shareBtn = this.server.enabled ? h('button', { type: 'button', class: 'wdi-btn wdi-btn--secondary wds2-btn', onclick: () => this.share() }, 'Share') : null;\n    const top = h('div', { class: 'wds2-top' }, h('div', { class: 'wds2-top__l' }, this.viewSeg, h('span', { class: 'wds2-top__tools' }, this.undoBtn, this.redoBtn, zoom)), h('div', { class: 'wds2-top__r' }, this.saveBtn, this.shareBtn, h('button', { type: 'button', class: 'wdi-btn wdi-btn--primary wds2-btn', onclick: () => this.openReview() }, 'Get a quote')));\n    const tabs = [['product', 'Product'], ['upload', 'Upload'], ['text', 'Text'], ...(this.art ? [...(this.art.showArt === false ? [] : [['art', 'Add Art']]), ...(this.art.showTemplates === false ? [] : [['templates', 'Templates']])] : []), ['roster', 'Names & #s'], ['sizes', 'Sizes & Qty']];\n    this.tabBtns = {};\n    const rail = h('nav', { class: 'wds2-rail', 'aria-label': 'Design tools' }, ...tabs.map(([k, l]) => (this.tabBtns[k] = h('button', { type: 'button', class: 'wds2-rail__b', 'aria-pressed': 'false', onclick: () => (k === 'product' ? this.openBrowser('change') : this.setTab(this.tab === k ? null : k)) }, icon(k), h('span', {}, l)))));\n    this.panel = h('section', { class: 'wds2-panel', 'aria-live': 'polite' });\n    this.stageEl = h('div', { class: 'wds2-canvas' });\n    this.hintEl = h('div', { class: 'wds2-hint', hidden: true });\n    this.locBar = h('div', { class: 'wds2-locs', 'aria-label': 'Print areas' });\n    this.priceEl = h('div', { class: 'wds2-price', hidden: true });\n    this.garmentBar = h('div', { class: 'wds2-gbar' });\n    this.noticeEl = h('div', { class: 'wds2-notice', hidden: true, role: 'status' });\n    this.quickFile = h('input', { type: 'file', accept: Object.keys(ACCEPT).join(','), class: 'wds2-file', multiple: true, 'aria-hidden': 'true', tabindex: '-1', onchange: e => { [...e.target.files].forEach(f => this.addFile(f)); e.target.value = ''; } });\n    this.startEl = this.buildStart();\n    const stage = h('div', { class: 'wds2-stage' }, this.garmentBar, this.noticeEl, h('div', { class: 'wds2-canvaswrap' }, this.stageEl, this.startEl, this.hintEl), this.locBar, h('p', { class: 'wds2-note' }, 'Preview only \u2014 we send a proof for approval before production.'), this.quickFile);\n    this.props = h('aside', { class: 'wds2-props', 'aria-label': 'Selected item' });\n    this.toastEl = h('div', { class: 'wds2-toast', role: 'status', hidden: true });\n    this.browser = h('dialog', { class: 'wds2-pb', 'aria-labelledby': 'WdsPbT' });\n    this.browser.addEventListener('close', () => this.tabBtns.product?.setAttribute('aria-pressed', 'false'));\n    this.browser.addEventListener('click', e => { if (e.target === this.browser) this.browser.close(); });\n    app.append(top, h('div', { class: 'wds2-body' }, rail, this.panel, stage, this.props), this.priceEl, this.toastEl, this.browser);\n    document.addEventListener('keydown', e => this.key(e));\n  }\n  buildStart() {\n    const go = fn => () => { this.markStarted(); fn(); };\n    const opts = [\n      ['upload', 'Upload my logo', 'PNG, JPG, SVG or WebP', go(() => this.quickFile.click())],\n      ['text', 'Add text', 'Team names, dates, slogans', go(() => { this.setTab('text'); setTimeout(() => this.panel.querySelector('input')?.focus(), 60); })],\n      ...(this.art ? [...(this.art.showArt === false ? [] : [['art', 'Browse artwork', 'Ready-made art you can recolor', go(() => this.setTab('art'))]]), ...(this.art.showTemplates === false ? [] : [['templates', 'Start with a template', 'Complete designs to customize', go(() => this.setTab('templates'))]])] : []),\n      ['product', 'Choose a different product', 'Tees, hoodies, sweatpants, polos, jackets, hats', go(() => this.openBrowser('change'))]\n    ];\n    return h('div', { class: 'wds2-start', role: 'dialog', 'aria-label': 'Get started' },\n      h('p', { class: 'wds2-start__k' }, 'What would you like to create?'),\n      h('div', { class: 'wds2-start__opts' }, ...opts.map(([k, t, s, fn]) => h('button', { type: 'button', class: 'wds2-start__o', onclick: fn }, icon(k), h('span', {}, h('strong', {}, t), h('small', {}, s))))),\n      h('button', { type: 'button', class: 'wds2-start__skip', onclick: () => { this.markStarted(); this.renderEmpty(); } }, 'Just let me look around'));\n  }\n  markStarted() { this.started = true; try { sessionStorage.setItem('wdi_lab_started', '1'); } catch (e) {} this.renderEmpty(); }\n  renderEmpty() { if (this.startEl) this.startEl.hidden = this.started || this.project.elements.length > 0; }\n  renderAll() { this.renderEmpty(); this.renderViews(); this.renderTabs(); this.renderPanel(); this.renderGarmentBar(); this.renderLocBar(); this.onSelect(this.selectedEl()); this.updateHistBtns(); this.updatePrice(); }\n  selectedEl() { return this.editor && this.project.elements.find(e => e.id === this.editor.selected) || null; }\n  setTab(k) { this.tab = k; if (k) this.markStarted(); this.renderTabs(); this.renderPanel(); }\n  renderTabs() {\n    for (const [k, b] of Object.entries(this.tabBtns)) b.setAttribute('aria-pressed', String(k === this.tab || (k === 'product' && this.browser?.open)));\n    this.app.classList.toggle('is-drawer', !!this.tab); this.classList.toggle('wds2-sheet-open', !!this.tab);\n    for (const b of this.viewSeg.children) b.setAttribute('aria-selected', String(b.dataset.view === this.editor?.side));\n  }\n  renderViews() {\n    const views = this.catalog.views(this.item.productId);\n    this.viewSeg.innerHTML = '';\n    for (const v of views) {\n      const n = this.project.elements.filter(e => e.side === v && !e.hidden).length;\n      this.viewSeg.append(h('button', { type: 'button', role: 'tab', class: 'wds2-seg__b', 'data-view': v, 'aria-selected': String(v === this.editor?.side), onclick: () => this.setSide(v) }, Core.viewLabel(v).replace(' sleeve', ' sleeve'), n ? h('span', { class: 'wds2-seg__n', 'aria-label': `${n} design${n > 1 ? 's' : ''}` }, String(n)) : null));\n    }\n    this.viewSeg.classList.toggle('is-4', views.length > 2);\n  }\n  async setSide(s) { await this.editor.setSide(s); this.renderTabs(); this.renderLocBar(); }\n  toast(m, ms = 3200) { this.toastEl.textContent = m; this.toastEl.hidden = false; clearTimeout(this._tt); this._tt = setTimeout(() => (this.toastEl.hidden = true), ms); }\n  showHint(x) { this.hintEl.hidden = false; this.hintEl.textContent = `${x.w}\" \u00D7 ${x.h}\" \u00B7 ${x.location}${x.over ? ' \u2014 larger than this print area' : ''}`; this.hintEl.classList.toggle('is-warn', !!x.over); clearTimeout(this._ht); this._ht = setTimeout(() => (this.hintEl.hidden = true), 1600); }\n\n  /* ---------------- garments bar ---------------- */\n  renderGarmentBar() {\n    const it = this.item; const bar = this.garmentBar; bar.innerHTML = '';\n    const chips = h('div', { class: 'wds2-gbar__items', role: 'tablist', 'aria-label': 'Garments in this project' }, ...this.project.items.map(x => {\n      const pr = this.catalog.product(x.productId); const q = Core.itemQty(x); const on = x.id === it.id;\n      return h('div', { class: 'wds2-gchip' + (on ? ' is-on' : '') },\n        h('button', { type: 'button', role: 'tab', 'aria-selected': String(on), class: 'wds2-gchip__b', title: `${pr.name}`, onclick: () => this.activate(x.id) },\n          h('span', { class: 'wds2-gchip__img', html: garmentSVG(this.catalog, x.productId, x.colorId) }),\n          h('span', { class: 'wds2-gchip__t' }, h('strong', {}, `${pr.name}`), h('small', {}, `${this.catalog.colors[x.colorId].label}${q ? ` \u00B7 ${q} pcs` : ''}`))),\n        this.project.items.length > 1 ? h('button', { type: 'button', class: 'wds2-x', 'aria-label': `Remove ${pr.name} ${this.catalog.colors[x.colorId].label}`, onclick: () => { Core.removeItem(this.catalog, this.project, x.id); this.changed(true); this.toast('Garment removed. Your design is unchanged.'); } }, '\u00D7') : null);\n    }));\n    const pr = this.catalog.product(it.productId);\n    const colorBtn = h('button', { type: 'button', class: 'wds2-gbar__color', 'aria-expanded': String(!!this._colorOpen), onclick: e => { const pop = colorPop; pop.hidden = !pop.hidden; this._colorOpen = !pop.hidden; e.currentTarget.setAttribute('aria-expanded', String(!pop.hidden)); } },\n      h('span', { class: 'wds2-dot', style: `--c:${this.catalog.colorHex(it.colorId)};--c2:${this.catalog.colorHex2(it.colorId)}` }), h('span', {}, this.catalog.colors[it.colorId].label), h('span', { class: 'wds2-caret', 'aria-hidden': 'true' }));\n    const colorPop = h('div', { class: 'wds2-pop', hidden: !this._colorOpen },\n      h('p', { class: 'wds2-k' }, `${pr.name} colors`),\n      h('div', { class: 'wds2-colors', role: 'radiogroup', 'aria-label': 'Garment color' }, ...this.catalog.colorIds(pr.id).map(c => h('button', { type: 'button', role: 'radio', class: 'wds2-sw', style: `--c:${this.catalog.colorHex(c)};--c2:${this.catalog.colorHex2(c)}`, 'aria-checked': String(c === it.colorId), title: this.catalog.colorLabel(pr.id, c), 'aria-label': this.catalog.colorLabel(pr.id, c), onclick: () => { it.colorId = c; this._colorOpen = true; this.changed(true); } }))),\n      h('p', { class: 'wds2-help' }, `${this.catalog.colorLabel(pr.id, it.colorId)} \u00B7 Colors on screen are approximate. Final garment colors and availability are confirmed before production.`), h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm wds2-pop__done', onclick: () => { this._colorOpen = false; colorPop.hidden = true; colorBtn.setAttribute('aria-expanded', 'false'); } }, 'Done'));\n    bar.append(chips, h('div', { class: 'wds2-gbar__acts' },\n      h('div', { class: 'wds2-gbar__colorwrap' }, colorBtn, colorPop),\n      h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm', onclick: () => this.openBrowser('change') }, 'Change product'),\n      this.project.items.length < Core.LIMITS.maxItems ? h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm wds2-chip--add', onclick: () => this.openBrowser('add') }, '+ Add garment') : null));\n    // elements that this garment cannot show (e.g. sleeve art on a hat)\n    const hidden = this.project.elements.filter(e => e.hidden);\n    this.noticeEl.hidden = !hidden.length;\n    if (hidden.length) this.noticeEl.textContent = `${plural(hidden.length, 'design element isn\u2019t', 'design elements aren\u2019t')} available on the ${pr.name} (${[...new Set(hidden.map(e => { const p = Object.values(e.byProduct || {}).find(x => x && !x.hidden); return p ? Core.viewLabel(p.side) : 'another area'; }))].join(', ')}). ${hidden.length > 1 ? 'They\u2019re' : 'It\u2019s'} kept for your other garments.`;\n  }\n  async activate(itemId) {\n    if (itemId === this.project.activeItem) return;\n    const r = Core.setActiveItem(this.catalog, this.project, itemId);\n    await this.changed(true); this.reportFit(r, null);\n  }\n  reportFit(r, label) {\n    const parts = [];\n    if (r.resized.length) parts.push(`${plural(r.resized.length, 'design was', 'designs were')} resized to fit`);\n    if (r.moved.length) parts.push(`${plural(r.moved.length, 'design was', 'designs were')} moved to a matching print area`);\n    if (r.hidden.length) parts.push(`${plural(r.hidden.length, 'design isn\u2019t', 'designs aren\u2019t')} available on this garment \u2014 kept for your others`);\n    if (label) this.toast(parts.length ? `${label}. ${parts.join('; ')}.` : `${label} \u2014 your design carried over.`, parts.length ? 5200 : 3000);\n    else if (parts.length) this.toast(parts.join('; ') + '.', 5200);\n  }\n\n  /* ---------------- product browser ---------------- */\n  openBrowser(mode) {\n    this.markStarted();\n    this.pb = { mode, cat: 'all', q: '', detail: null, color: null, side: 'front' };\n    this.renderBrowser(); if (!this.browser.open) this.browser.showModal(); this.renderTabs();\n    setTimeout(() => this.browser.querySelector('.wds2-pb__search input')?.focus(), 30);\n  }\n  renderBrowser() {\n    const pb = this.pb, d = this.browser; const it = this.item;\n    const prevScroll = d.querySelector('.wds2-pb__main')?.scrollTop || 0;\n    d.innerHTML = '';\n    const title = pb.mode === 'add' ? 'Add another garment' : 'Choose your product';\n    const search = h('label', { class: 'wds2-pb__search' }, h('span', { class: 'wds2-sr' }, 'Search products'), h('input', { type: 'search', value: pb.q, placeholder: 'Search t-shirts, hoodies, joggers\u2026', oninput: e => { pb.q = e.target.value; pb.detail = null; this.renderBrowserList(); } }));\n    const head = h('div', { class: 'wds2-pb__head' }, h('div', {}, h('h2', { id: 'WdsPbT' }, title), h('p', {}, pb.mode === 'add' ? 'Same design, another style \u2014 each garment keeps its own color and sizes.' : 'Your design comes with you when you switch.')), search, h('button', { type: 'button', class: 'wds2-x wds2-x--lg', 'aria-label': 'Close', onclick: () => d.close() }, '\u00D7'));\n    const cats = [['all', 'All products', this.catalog.products.length], ...this.catalog.categories().map(c => [c.id, c.label, this.catalog.products.filter(p => p.category === c.id).length])];\n    this.pbNav = h('nav', { class: 'wds2-pb__cats', 'aria-label': 'Categories' }, ...cats.map(([id, l, n]) => h('button', { type: 'button', 'aria-pressed': String(pb.cat === id), onclick: () => { pb.cat = id; pb.detail = null; pb.q = ''; d.querySelector('.wds2-pb__search input').value = ''; this.renderBrowserList(); this.syncCats(); } }, h('span', {}, l), h('small', {}, String(n)))));\n    this.pbMain = h('div', { class: 'wds2-pb__main' });\n    d.append(head, h('div', { class: 'wds2-pb__body' }, this.pbNav, this.pbMain));\n    this.renderBrowserList(); this.pbMain.scrollTop = prevScroll;\n  }\n  syncCats() { [...this.pbNav.children].forEach(b => b.setAttribute('aria-pressed', String(b.onclick && false))); const pb = this.pb; [...this.pbNav.children].forEach((b, i) => b.setAttribute('aria-pressed', String((i === 0 ? 'all' : this.catalog.categories()[i - 1].id) === pb.cat && !pb.q))); }\n  renderBrowserList() {\n    const pb = this.pb, m = this.pbMain; m.innerHTML = '';\n    if (pb.detail) { this.renderBrowserDetail(); return; }\n    this.syncCats?.();\n    const list = this.catalog.search(pb.q, pb.q ? 'all' : pb.cat);\n    const cur = this.item.productId;\n    if (!list.length) { m.append(h('div', { class: 'wds2-pb__empty' }, h('p', {}, h('strong', {}, 'No matching products.')), h('p', {}, 'We can source many more styles \u2014 mention what you\u2019re looking for in your quote request.'))); return; }\n    const groups = pb.q || pb.cat !== 'all' ? [[null, list]] : this.catalog.categories().map(c => [c.label, list.filter(p => p.category === c.id)]).filter(g => g[1].length);\n    for (const [label, ps] of groups) {\n      if (label) m.append(h('h3', { class: 'wds2-pb__grp' }, label));\n      m.append(h('div', { class: 'wds2-pb__grid' }, ...ps.map(p => {\n        const cids = this.catalog.colorIds(p.id); const col = cids.includes(this.item.colorId) ? this.item.colorId : (cids.includes('black') ? 'black' : cids[0]);\n        return h('button', { type: 'button', class: 'wds2-card' + (p.id === cur && pb.mode === 'change' ? ' is-on' : ''), onclick: () => { pb.detail = p.id; pb.color = col; pb.side = 'front'; this.renderBrowserList(); m.scrollTop = 0; } },\n          h('span', { class: 'wds2-card__img', html: garmentSVG(this.catalog, p.id, col) }),\n          p.id === cur && pb.mode === 'change' ? h('span', { class: 'wds2-card__badge' }, 'Current') : null,\n          h('span', { class: 'wds2-card__t' }, h('small', {}, this.catalog.categoryLabel(p.category)), h('strong', {}, p.name)),\n          h('span', { class: 'wds2-card__sw', 'aria-label': `${cids.length} colors` }, ...cids.slice(0, 9).map(c => h('i', { style: `--c:${this.catalog.colorHex(c)};--c2:${this.catalog.colorHex2(c)}` })), cids.length > 9 ? h('em', {}, `+${cids.length - 9}`) : null),\n          h('span', { class: 'wds2-card__meta' }, `${cids.length} colors`));\n      })));\n    }\n  }\n  renderBrowserDetail() {\n    const pb = this.pb, m = this.pbMain, p = this.catalog.product(pb.detail); const cids = this.catalog.colorIds(p.id);\n    const views = this.catalog.views(p.id);\n    const prev = h('div', { class: 'wds2-pbd__img', html: garmentSVG(this.catalog, p.id, pb.color, pb.side) });\n    const flip = h('div', { class: 'wds2-pbd__flip' }, ...['front', 'back'].map(s => h('button', { type: 'button', 'aria-pressed': String(pb.side === s), onclick: () => { pb.side = s; this.renderBrowserList(); } }, s === 'front' ? 'Front' : 'Back')));\n    const areas = Object.values(this.catalog.locations(p.id)).map(l => l.label.replace(/ \\(.*\\)/, '')); const uniq = [...new Set(areas)];\n    const embOnly = p.decoration && !p.decoration.includes('print');\n    const apply = async kind => {\n      this.browser.close();\n      if (kind === 'add') {\n        const { item, report } = Core.addItem(this.catalog, this.project, p.id, pb.color);\n        await this.changed(true); this.reportFit(report, `Added the ${p.name} in ${this.catalog.colors[item.colorId].label}`);\n        if (Core.itemQty(this.project.items[0]) || this.project.items.length > 1) this.setTab('sizes');\n      } else {\n        const r = Core.switchProduct(this.catalog, this.project, p.id, pb.color);\n        await this.changed(true); this.reportFit(r, `Switched to the ${p.name}`);\n      }\n    };\n    const isCurrent = pb.mode === 'change' && p.id === this.item.productId;\n    m.append(h('div', { class: 'wds2-pbd' },\n      h('button', { type: 'button', class: 'wds2-pbd__back', onclick: () => { pb.detail = null; this.renderBrowserList(); } }, `\u2190 ${pb.q ? 'Search results' : pb.cat === 'all' ? 'All products' : this.catalog.categoryLabel(pb.cat)}`),\n      h('div', { class: 'wds2-pbd__grid' },\n        h('div', {}, prev, flip, h('p', { class: 'wds2-help', style: 'text-align:center' }, 'Illustration \u2014 on-screen colors are approximate. Final colors and availability are confirmed before production.')),\n        h('div', { class: 'wds2-pbd__info' },\n          h('p', { class: 'wds2-k', style: 'margin-top:0' }, this.catalog.categoryLabel(p.category)),\n          h('h3', {}, p.name), h('p', { class: 'wds2-pbd__blurb' }, p.blurb),\n          false ? h('ul', { class: 'wds2-pbd__feat' }, ...p.features.map(f => h('li', {}, f))) : null,\n          h('p', { class: 'wds2-k' }, `Color \u2014 ${this.catalog.colorLabel(p.id, pb.color)}`),\n          h('div', { class: 'wds2-colors', role: 'radiogroup', 'aria-label': 'Color' }, ...cids.map(c => h('button', { type: 'button', role: 'radio', class: 'wds2-sw', style: `--c:${this.catalog.colorHex(c)};--c2:${this.catalog.colorHex2(c)}`, 'aria-checked': String(c === pb.color), title: this.catalog.colorLabel(p.id, c), 'aria-label': this.catalog.colorLabel(p.id, c), onclick: () => { pb.color = c; this.renderBrowserList(); } }))),\n          h('p', { class: 'wds2-k' }, 'Sizes'), h('div', { class: 'wds2-pbd__sizes' }, ...p.sizes.map(s => h('span', {}, s))),\n          h('p', { class: 'wds2-k' }, 'Decoration areas'), h('p', { class: 'wds2-pbd__areas' }, uniq.join(' \u00B7 ')),\n          views.includes('left_sleeve') ? null : h('p', { class: 'wds2-help' }, 'No sleeve decoration on this item.'),\n          embOnly ? h('p', { class: 'wds2-warn' }, 'Best with embroidery. We\u2019ll confirm the right method for your design.') : null,\n          h('div', { class: 'wds2-pbd__acts' },\n            pb.mode === 'add'\n              ? h('button', { type: 'button', class: 'wdi-btn wdi-btn--primary wds2-btn', onclick: () => apply('add') }, 'Add to my project')\n              : h('button', { type: 'button', class: 'wdi-btn wdi-btn--primary wds2-btn', onclick: () => (isCurrent && pb.color === this.item.colorId ? this.browser.close() : apply('change')) }, isCurrent ? 'Use this color' : 'Use this garment'),\n            pb.mode === 'change' && !isCurrent && this.project.items.length < Core.LIMITS.maxItems ? h('button', { type: 'button', class: 'wdi-btn wdi-btn--secondary wds2-btn', onclick: () => apply('add') }, 'Add as another garment') : null),\n          h('p', { class: 'wds2-help' }, 'Your artwork, text, names and numbers come with you. Each garment keeps its own placement, color and sizes.')))));\n  }\n\n  /* ---------------- tool panels ---------------- */\n  renderPanel() {\n    const p = this.panel; p.innerHTML = '';\n    if (!this.tab) return;\n    const close = h('button', { type: 'button', class: 'wds2-panel__x', 'aria-label': 'Close panel', onclick: () => this.setTab(null) }, '\u00D7');\n    const builders = { upload: () => this.panelUpload(), text: () => this.panelText(), roster: () => this.panelRoster(), sizes: () => this.panelSizes(),\n      art: () => this.art.panelArt(this, h), templates: () => this.art.panelTemplates(this, h) };\n    p.append(close, ...(builders[this.tab] || (() => []))());\n  }\n  panelUpload() {\n    const inp = h('input', { type: 'file', accept: Object.keys(ACCEPT).join(','), class: 'wds2-file', id: 'wds2-file', multiple: true, onchange: e => { [...e.target.files].forEach(f => this.addFile(f)); e.target.value = ''; } });\n    const drop = h('label', { class: 'wds2-drop', for: 'wds2-file' }, h('strong', {}, 'Upload your artwork'), h('span', {}, 'PNG, JPG, SVG or WebP \u00B7 up to 25 MB'), h('small', {}, 'A transparent PNG or a vector SVG gives the cleanest result.'));\n    drop.addEventListener('dragover', e => { e.preventDefault(); drop.classList.add('is-over'); }); drop.addEventListener('dragleave', () => drop.classList.remove('is-over'));\n    drop.addEventListener('drop', e => { e.preventDefault(); drop.classList.remove('is-over'); [...e.dataTransfer.files].forEach(f => this.addFile(f)); });\n    const assets = Object.entries(this.project.assets);\n    return [h('h3', { class: 'wds2-h' }, 'Add your logo or artwork'), inp, drop,\n      assets.length ? h('p', { class: 'wds2-k' }, 'Your uploads \u2014 tap to add again') : null,\n      assets.length ? h('div', { class: 'wds2-thumbs' }, ...assets.map(([id, a]) => h('button', { type: 'button', class: 'wds2-thumb', title: a.name, onclick: () => this.placeAsset(id) }, a.preview ? h('img', { src: a.preview, alt: a.name }) : h('span', {}, a.name)))) : null,\n      h('p', { class: 'wds2-help' }, 'Your original files are kept exactly as uploaded. PDF and AI files: email them to us after you request your quote.')];\n  }\n  async addFile(file) {\n    this.markStarted();\n    if (!ACCEPT[file.type]) { this.toast(file.type === 'application/pdf' ? 'PDF support is coming soon \u2014 please upload a PNG, JPG or SVG for now.' : 'Please upload a PNG, JPG, SVG or WebP file.'); return; }\n    if (file.size > Core.LIMITS.maxAssetBytes) { this.toast('That file is over 25 MB.'); return; }\n    if (Object.keys(this.project.assets).length >= Core.LIMITS.maxAssets) { this.toast('You can use up to 12 uploads in one design.'); return; }\n    try {\n      const { preview, w, h: hh } = await previewOf(file);\n      const id = Core.uid('a_'); this.project.assets[id] = { name: file.name.slice(0, 80), mime: file.type, bytes: file.size, w, h: hh, preview };\n      await idb.put(id, file);\n      this.placeAsset(id);\n    } catch (e) { this.toast('We could not read that file. Please try another.'); }\n  }\n  /** Free print area on the current view, else the first one. */\n  freeLocation(side, prefer) {\n    const locs = Object.keys(this.catalog.locations(this.item.productId, side));\n    if (prefer && locs.includes(prefer)) return prefer;\n    const used = this.project.elements.filter(e => e.side === side && !e.hidden).map(e => e.location);\n    return locs.find(l => !used.includes(l)) || locs[0];\n  }\n  placeAsset(assetId) {\n    const a = this.project.assets[assetId]; const side = this.editor.side;\n    const loc = this.freeLocation(side);\n    const el = Core.addElement(this.catalog, this.project, { type: 'image', side, location: loc, assetId, aspect: (a.w || 1) / (a.h || 1) });\n    Core.placeAt(this.catalog, this.project, el, loc); this.changed(true, el.id);\n  }\n  /** Generic insert used by the art + template module. */\n  async insertElement(el, { loc, side, select = true, commit = true } = {}) {\n    side = side || el.side || this.editor.side; if (side !== this.editor.side) await this.editor.setSide(side);\n    const target = this.freeLocation(side, loc);\n    const e = Core.addElement(this.catalog, this.project, { ...el, side, location: target });\n    if (el.cx == null) Core.placeAt(this.catalog, this.project, e, target);\n    if (commit) await this.changed(true, select ? e.id : null);\n    return e;\n  }\n  panelText() {\n    const inp = h('input', { type: 'text', class: 'wds2-in', maxlength: Core.LIMITS.maxTextLen, placeholder: 'Type your text', 'aria-label': 'Text' });\n    const add = () => { const v = inp.value.trim(); if (v) { this.addText(v); inp.value = ''; } };\n    inp.addEventListener('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); add(); } });\n    const views = this.catalog.views(this.item.productId);\n    return [h('h3', { class: 'wds2-h' }, 'Add text'), h('div', { class: 'wds2-row' }, inp, h('button', { type: 'button', class: 'wdi-btn wdi-btn--primary wds2-btn', onclick: add }, 'Add')),\n      h('p', { class: 'wds2-k' }, 'Quick start'),\n      h('div', { class: 'wds2-chips' },\n        h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('TEAM NAME', { side: 'front', loc: 'full_front' }) }, 'Team name'),\n        h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('NAME', { side: 'back', loc: 'upper_back', roster: 'name' }) }, 'Name on back'),\n        h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('00', { side: 'back', loc: 'numbers', roster: 'number', font: 'athletic' }) }, 'Number on back'),\n        views.includes('left_sleeve') ? h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('NAME', { side: 'left_sleeve', loc: 'left_sleeve', roster: 'name' }) }, 'Name on sleeve') : null,\n        h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('EST. 2026', { side: 'front', loc: 'left_chest', font: 'classic' }) }, 'Small chest text')),\n      h('p', { class: 'wds2-help' }, 'Select text on the garment to change the font, color, outline, spacing or curve.')];\n  }\n  async addText(value, o = {}) {\n    this.markStarted();\n    const views = this.catalog.views(this.item.productId);\n    if (o.side && views.includes(o.side) && o.side !== this.editor.side) { await this.editor.setSide(o.side); this.renderTabs(); }\n    const side = this.editor.side; const locs = this.catalog.locations(this.item.productId, side);\n    const loc = o.loc && locs[o.loc] ? o.loc : Object.keys(locs)[0];\n    const fill = contrast(this.catalog.colorHex(this.item.colorId), '#FFFFFF') > 2.5 ? '#FFFFFF' : '#111214';\n    const text = { value, font: o.font || 'block', fontLabel: (FONTS.find(f => f.id === (o.font || 'block')) || {}).label, fill, stroke: '', spacing: 0, curve: 0 };\n    const el = Core.addElement(this.catalog, this.project, { type: 'text', side, location: loc, text, roster: o.roster || null, aspect: textAspect(text) });\n    Core.placeAt(this.catalog, this.project, el, loc); this.changed(true, el.id);\n  }\n  panelRoster() {\n    const rows = this.project.roster; const sizes = this.catalog.product(this.item.productId).sizes;\n    const table = h('div', { class: 'wds2-roster' }, h('div', { class: 'wds2-roster__h' }, h('span', {}, 'Name'), h('span', {}, '#'), h('span', {}, 'Size'), h('span', {})),\n      ...rows.map((r, i) => h('div', { class: 'wds2-roster__r' },\n        h('input', { class: 'wds2-in', value: r.name || '', maxlength: Core.LIMITS.maxNameLen, 'aria-label': `Name ${i + 1}`, oninput: e => { r.name = e.target.value; this.rosterChanged(); } }),\n        h('input', { class: 'wds2-in', value: r.number || '', maxlength: 3, inputmode: 'numeric', 'aria-label': `Number ${i + 1}`, oninput: e => { r.number = e.target.value.replace(/[^0-9]/g, ''); e.target.value = r.number; this.rosterChanged(); } }),\n        h('select', { class: 'wds2-in', 'aria-label': `Size ${i + 1}`, onchange: e => { r.size = e.target.value; this.rosterChanged(); } }, h('option', { value: '' }, '\u2014'), ...sizes.map(s => h('option', { value: s, selected: r.size === s }, s))),\n        h('button', { type: 'button', class: 'wds2-x', 'aria-label': 'Remove row', onclick: () => { rows.splice(i, 1); this.rosterChanged(true); } }, '\u00D7'))));\n    const paste = h('textarea', { class: 'wds2-in', rows: 3, placeholder: 'Paste from a spreadsheet: Name, Number, Size \u2014 one person per line' });\n    const hasName = this.project.elements.some(e => e.roster === 'name'), hasNum = this.project.elements.some(e => e.roster === 'number');\n    const preview = h('select', { class: 'wds2-in', 'aria-label': 'Preview person', onchange: e => { this.rosterPreview = +e.target.value; this.editor.rosterRow = rows[this.rosterPreview] || null; this.editor.render(); } },\n      h('option', { value: -1 }, 'Show placeholder text'), ...rows.map((r, i) => h('option', { value: i, selected: i === this.rosterPreview }, `${r.name || '\u2014'} ${r.number || ''}`)));\n    const multi = this.project.items.length > 1;\n    return [h('h3', { class: 'wds2-h' }, 'Names & numbers'),\n      h('p', { class: 'wds2-help' }, 'Same design for everyone, personalized per person. Each line becomes one garment with its own name and number.'),\n      !hasName || !hasNum ? h('div', { class: 'wds2-chips' }, !hasName ? h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('NAME', { side: 'back', loc: 'upper_back', roster: 'name' }) }, '+ Name on back') : null, !hasNum ? h('button', { type: 'button', class: 'wds2-chip', onclick: () => this.addText('00', { side: 'back', loc: 'numbers', roster: 'number', font: 'athletic' }) }, '+ Number on back') : null) : null,\n      table, h('button', { type: 'button', class: 'wds2-add', onclick: () => { if (rows.length < Core.LIMITS.maxRoster) { rows.push({ name: '', number: '', size: '' }); this.rosterChanged(true); } } }, '+ Add person'),\n      h('details', { class: 'wds2-paste' }, h('summary', {}, 'Paste a list'), paste, h('button', { type: 'button', class: 'wds2-chip', onclick: () => { const add = paste.value.split(/\\r?\\n/).map(l => l.split(/\\t|,/).map(s => s.trim())).filter(c => c[0] || c[1]).slice(0, Core.LIMITS.maxRoster - rows.length).map(([name = '', number = '', size = '']) => ({ name: name.slice(0, Core.LIMITS.maxNameLen), number: number.replace(/[^0-9]/g, '').slice(0, 3), size: sizes.includes(size.toUpperCase()) ? size.toUpperCase() : '' })); rows.push(...add); paste.value = ''; this.rosterChanged(true); this.toast(`Added ${add.length} people.`); } }, 'Add to list')),\n      multi ? h('p', { class: 'wds2-help' }, `Sizes from this list fill in the ${this.catalog.product(this.item.productId).name} you\u2019re editing.`) : null,\n      rows.length ? h('label', { class: 'wds2-k' }, 'Preview on the garment', preview) : null];\n  }\n  rosterChanged(rerender) {\n    if (this.project.roster.some(r => r.size)) { const c = {}; this.project.roster.forEach(r => { if (r.size) c[r.size] = (c[r.size] || 0) + 1; }); this.item.sizes = c; }\n    this.saveSoon(); this.commitSoon(); if (rerender) this.renderPanel(); this.renderGarmentBar(); if (this.rosterPreview >= 0) { this.editor.rosterRow = this.project.roster[this.rosterPreview] || null; this.editor.render(); }\n  }\n  panelSizes() {\n    const blocks = this.project.items.map(it => { const pr = this.catalog.product(it.productId);\n      return h('div', { class: 'wds2-sizeblock' + (it.id === this.item.id ? ' is-on' : '') }, h('p', { class: 'wds2-sizeblock__h' }, h('span', { class: 'wds2-gchip__img', html: garmentSVG(this.catalog, it.productId, it.colorId) }), h('span', {}, h('strong', {}, `${pr.name} ${pr.name}`), h('small', {}, this.catalog.colorLabel(pr.id, it.colorId)))),\n        h('div', { class: 'wds2-sizes' }, ...pr.sizes.map(s => h('label', { class: 'wds2-size' }, h('span', {}, s), h('input', { type: 'number', min: 0, max: 10000, inputmode: 'numeric', value: it.sizes[s] || '', placeholder: '0', 'aria-label': `${pr.name} ${s} quantity`, oninput: e => { const v = Math.max(0, Math.min(10000, parseInt(e.target.value) || 0)); if (v) it.sizes[s] = v; else delete it.sizes[s]; this.totalEl.textContent = Core.totalQty(this.project); this.saveSoon(); this.commitSoon(); this.updatePrice(); this.renderGarmentBar(); } })))));\n    });\n    this.totalEl = h('strong', {}, String(Core.totalQty(this.project)));\n    return [h('h3', { class: 'wds2-h' }, 'Sizes & quantities'), ...blocks, h('p', { class: 'wds2-total' }, 'Total pieces: ', this.totalEl),\n      this.project.roster.some(r => r.size) ? h('p', { class: 'wds2-help' }, 'Sizes are filled in from your names & numbers list.') : null,\n      h('button', { type: 'button', class: 'wds2-add', onclick: () => this.openBrowser('add') }, '+ Add another garment with this design'),\n      h('button', { type: 'button', class: 'wdi-btn wdi-btn--primary wds2-btn wds2-full', onclick: () => this.openReview() }, 'Review & get a quote')];\n  }\n  renderLocBar() {\n    const el = this.selectedEl(); const locs = this.catalog.locations(this.item.productId, this.editor.side);\n    this.locBar.innerHTML = '';\n    this.locBar.append(h('span', { class: 'wds2-locs__k' }, el ? 'Move to:' : 'Print areas:'), ...Object.entries(locs).map(([id, l]) => h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm', 'aria-pressed': String(!!el && el.location === id), disabled: !el || el.locked, title: `${l.in[0]}\" \u00D7 ${l.in[1]}\" max`, onclick: () => { Core.placeAt(this.catalog, this.project, el, id); this.changed(true, el.id); } }, l.label)));\n  }\n  /* ---------------- contextual properties ---------------- */\n  onSelect(el) { this.app.classList.toggle('is-props', !!el); this.renderProps(el); }\n  renderProps(el) {\n    const p = this.props; p.innerHTML = ''; this.renderLocBar();\n    if (!el) return;\n    const it = this.item; const g = Core.geometry(this.catalog, it.productId, el); const garmentHex = this.catalog.colorHex(it.colorId);\n    const commit = (rerender = true) => { this.changed(rerender, el.id); };\n    const title = el.type === 'text' ? 'Text' : el.type === 'art' ? (el.artLabel || 'Artwork') : ((this.project.assets[el.assetId] || {}).name || 'Your artwork');\n    const warns = this.warningsFor(el, g, garmentHex);\n    const slider = (label, min, max, step, val, fn) => h('label', { class: 'wds2-slider' }, h('span', {}, label), h('input', { type: 'range', min, max, step, value: val, oninput: e => fn(+e.target.value, false), onchange: e => fn(+e.target.value, true) }));\n    const sec = (k, ...kids) => h('div', { class: 'wds2-psec' }, h('p', { class: 'wds2-k' }, k), ...kids);\n    const sizeRow = sec('Size & rotation',\n      slider(`Size \u00B7 about ${g ? g.inches.w : '?'}\" \u00D7 ${g ? g.inches.h : '?'}\"`, .1, 1.3, .01, el.w, (v, done) => { el.w = v; this.editor.render(); if (done) commit(); }),\n      slider(`Rotate \u00B7 ${Math.round(el.rot || 0)}\u00B0`, -180, 180, 1, el.rot > 180 ? el.rot - 360 : el.rot || 0, (v, done) => { el.rot = v; this.editor.render(); if (done) commit(); }));\n    const ib = (label, fn, extra = {}) => h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm', onclick: fn, ...extra }, label);\n    const align = sec('Align & layer', h('div', { class: 'wds2-acts2' },\n      ib('Center \u2194', () => { el.cx = .5; commit(); }), ib('Center \u2195', () => { el.cy = .5; commit(); }), ib('Straighten', () => { el.rot = 0; commit(); }),\n      ib('Bring forward', () => this.order(el, 1)), ib('Send back', () => this.order(el, -1))));\n    const views = this.catalog.views(it.productId).filter(v => v !== el.side);\n    const moveTo = h('select', { class: 'wds2-in wds2-in--sm', 'aria-label': 'Move to another view', onchange: e => { const v = e.target.value; if (!v) return; Core.placeAt(this.catalog, this.project, el, Object.keys(this.catalog.locations(it.productId, v))[0]); this.editor.setSide(v).then(() => { this.renderTabs(); this.changed(true, el.id); }); } }, h('option', { value: '' }, 'Move to\u2026'), ...views.map(v => h('option', { value: v }, Core.viewLabel(v))));\n    const actions = h('div', { class: 'wds2-acts' },\n      ib('Duplicate', () => { const c = { ...JSON.parse(JSON.stringify(el)), id: Core.uid('e_'), cx: Math.min(.9, el.cx + .08), cy: Math.min(.9, el.cy + .08), locked: false, byProduct: {} }; this.project.elements.push(c); this.changed(true, c.id); }),\n      ib(el.locked ? 'Unlock' : 'Lock', () => { el.locked = !el.locked; commit(); }, { 'aria-pressed': String(!!el.locked) }),\n      moveTo,\n      h('button', { type: 'button', class: 'wds2-chip wds2-chip--sm wds2-chip--danger', onclick: () => this.remove(el) }, 'Delete'));\n    p.append(h('div', { class: 'wds2-props__head' }, h('h3', { class: 'wds2-h' }, title), h('button', { type: 'button', class: 'wds2-x', 'aria-label': 'Deselect', onclick: () => this.editor.select(null) }, '\u00D7')), ...warns.map(w => h('p', { class: 'wds2-warn' }, w)));\n    if (el.type === 'text') {\n      const t = el.text; const reAspect = () => { el.aspect = textAspect(t); };\n      p.append(sec('Text', h('input', { class: 'wds2-in', value: t.value, maxlength: Core.LIMITS.maxTextLen, 'aria-label': 'Text', oninput: e => { t.value = e.target.value || ' '; reAspect(); this.editor.render(); }, onchange: () => commit() })),\n        sec('Font', h('div', { class: 'wds2-fonts' }, ...FONTS.map(f => h('button', { type: 'button', class: 'wds2-font', style: `font-family:${f.family};font-weight:${f.style === 'bold' ? 800 : (/^[0-9]+$/.test(f.style) ? f.style : 400)}`, 'aria-pressed': String(t.font === f.id), onclick: () => { t.font = f.id; t.fontLabel = f.label; reAspect(); commit(); } }, f.label)))),\n        sec('Color', h('div', { class: 'wds2-colors' }, ...INKS.map(c => h('button', { type: 'button', role: 'radio', class: 'wds2-sw wds2-sw--sm', style: `--c:${c}`, 'aria-checked': String(t.fill === c), 'aria-label': Core.inkName(c), onclick: () => { t.fill = c; commit(); } })), h('input', { type: 'color', class: 'wds2-pick', value: /^#[0-9a-f]{6}$/i.test(t.fill) ? t.fill : '#ffffff', 'aria-label': 'Custom color', onchange: e => { t.fill = e.target.value; commit(); } }))),\n        sec('Effects',\n          h('label', { class: 'wds2-check' }, h('input', { type: 'checkbox', checked: !!t.stroke, onchange: e => { t.stroke = e.target.checked ? (contrast(t.fill, '#111214') > 4 ? '#111214' : '#FFFFFF') : ''; commit(); } }), ' Outline'),\n          slider('Letter spacing', -2, 10, .5, t.spacing || 0, (v, done) => { t.spacing = v; reAspect(); this.editor.render(); if (done) commit(); }),\n          slider('Curve', -1, 1, .05, t.curve || 0, (v, done) => { t.curve = v; reAspect(); this.editor.render(); if (done) commit(); })),\n        sec('Personalize', h('select', { class: 'wds2-in wds2-in--sm', 'aria-label': 'Personalize per person', onchange: e => { el.roster = e.target.value || null; commit(); } }, h('option', { value: '' }, 'Same for everyone'), h('option', { value: 'name', selected: el.roster === 'name' }, 'Use each person\u2019s name'), h('option', { value: 'number', selected: el.roster === 'number' }, 'Use each person\u2019s number'))));\n    }\n    if (el.type === 'art' && this.art) p.append(...this.art.propsArt(this, h, el, sec));\n    p.append(sizeRow, align, actions);\n  }\n  /** Friendly production notes \u2014 never a promise that something can (or can't) be made. */\n  warningsFor(el, g, garmentHex) {\n    const warns = [];\n    if (!g) return warns;\n    if (el.type === 'image') { const a = this.project.assets[el.assetId]; if (a && a.mime !== 'image/svg+xml') { const dpi = Math.round(a.w / g.inches.w); if (dpi < 150) warns.push(`This image may print blurry at ${g.inches.w}\" wide (about ${dpi} dpi). A larger or vector file works best \u2014 or ask us to clean it up.`); } }\n    if (el.type === 'text' && contrast(el.text.fill, garmentHex) < 1.8 && !el.text.stroke) warns.push('This text color may be hard to see on this garment. Try another color or add an outline.');\n    if (g.w > g.loc.w + 1 || g.h > g.loc.h * 1.01) warns.push(`This design is larger than the ${g.loc.label.toLowerCase()} print area (${g.loc.in[0]}\" \u00D7 ${g.loc.in[1]}\"). We\u2019ll confirm the final size with your proof.`);\n    return warns;\n  }\n  order(el, dir) { const a = this.project.elements, i = a.indexOf(el), j = i + dir; if (j < 0 || j >= a.length) return; a.splice(i, 1); a.splice(j, 0, el); this.changed(true, el.id); }\n  remove(el) { this.project.elements = this.project.elements.filter(e => e.id !== el.id); this.editor.select(null); this.changed(true); }\n  /* ---------------- state ---------------- */\n  async changed(rerender = true, selectId) {\n    this.project.updatedAt = Date.now();\n    this.history.push(this.project); this.updateHistBtns(); this.saveSoon();\n    if (rerender) { await this.editor.setProject(this.project); if (selectId) this.editor.select(selectId); else this.onSelect(this.selectedEl()); }\n    if (['sizes', 'roster', 'upload'].includes(this.tab)) this.renderPanel();\n    this.renderViews(); this.renderTabs(); this.renderGarmentBar(); this.renderLocBar(); this.renderEmpty(); this.updatePrice();\n  }\n  commitSoon = debounce(() => { this.history.push(this.project); this.updateHistBtns(); }, 500);\n  saveSoon = debounce(() => this.save(false), 700);\n  save(explicit) {\n    const r = this.store.save(this.project);\n    if (explicit) this.toast(r.ok ? (r.partial ? 'Saved on this device (large artwork will need re-adding if this browser is cleared).' : 'Saved on this device. Come back anytime \u2014 your design will be here.') : 'Could not save on this device.');\n  }\n  /** Upload originals (untouched) and a PNG preview of each artwork once; remember the keys. */\n  async ensureUploaded() {\n    for (const [id, a] of Object.entries(this.project.assets)) {\n      if (!a.remoteKey) { const blob = await idb.get(id); if (blob) a.remoteKey = await this.server.uploadAsset(blob, a.name); }\n      if (!a.previewKey && a.preview) { const pv = await rasterPreview(a.preview); a.previewKey = await this.server.uploadAsset(pv, a.name.replace(/\\.[a-z0-9]+$/i, '') + '-preview.png'); }\n    }\n    this.save(false);\n  }\n  async share() {\n    try { await this.ensureUploaded(); const r = await this.server.saveProject(this.project, this.project.editToken); Object.assign(this.project, { serverId: r.id }, r.editToken ? { editToken: r.editToken } : {}); this.save(false);\n      await navigator.clipboard?.writeText(r.shareUrl).catch(() => {}); this.toast('Share link copied. It shows the preview only \u2014 never your contact details or original files.'); }\n    catch (e) { this.toast('Sharing is not available right now.'); }\n  }\n  updateHistBtns() { this.undoBtn.disabled = !this.history.canUndo(); this.redoBtn.disabled = !this.history.canRedo(); }\n  async undo() { const p = this.history.undo(this.project); if (p) { this.project = p; await this.editor.setProject(p); this.editor.select(null); this.renderAll(); this.saveSoon(); } }\n  async redo() { const p = this.history.redo(this.project); if (p) { this.project = p; await this.editor.setProject(p); this.editor.select(null); this.renderAll(); this.saveSoon(); } }\n  async refresh() { await this.editor.setProject(this.project); this.editor.select(null); this.renderAll(); this.saveSoon(); }\n  key(e) {\n    if (!this.isConnected || this.querySelector('dialog[open]')) return;\n    const typing = /INPUT|TEXTAREA|SELECT/.test(e.target.tagName);\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'z' && !typing) { e.preventDefault(); e.shiftKey ? this.redo() : this.undo(); return; }\n    if (e.key === 'Escape' && !typing) { if (this.selectedEl()) this.editor.select(null); else if (this.tab) this.setTab(null); return; }\n    const el = this.selectedEl(); if (!el || typing) return;\n    if (e.key === 'Delete' || e.key === 'Backspace') { e.preventDefault(); this.remove(el); return; }\n    const d = { ArrowLeft: [-1, 0], ArrowRight: [1, 0], ArrowUp: [0, -1], ArrowDown: [0, 1] }[e.key];\n    if (d && !el.locked) { e.preventDefault(); const st = e.shiftKey ? .05 : .01; el.cx += d[0] * st; el.cy += d[1] * st; this.editor.render(); this.commitSoon(); this.saveSoon(); }\n  }\n  async updatePrice() {\n    if (!this.pricing.enabled) { this.priceEl.hidden = true; return; }\n    const est = await this.pricing.estimate(Core.handoff(this.catalog, this.project));\n    if (!est.available) { this.priceEl.hidden = true; return; }\n    this.priceEl.hidden = false; this.priceEl.innerHTML = `<span>Estimated</span> <strong>${esc(est.perItem)}</strong> each \u00B7 <strong>${esc(est.total)}</strong> total <small>${esc(est.note || 'Final price confirmed with your quote.')}</small>`;\n  }\n  /* ---------------- review & submit ---------------- */\n  async openReview() {\n    if (!this.project.elements.length) { this.toast('Add artwork or text to your design first.'); this.setTab('upload'); return; }\n    const dlg = this.querySelector('dialog[data-review]'); const box = dlg.querySelector('[data-mockups]'); box.innerHTML = '<p class=\"wds2-help\">Creating your previews\u2026</p>'; dlg.showModal();\n    this.mockups = [];\n    try {\n      for (const it of this.project.items) for (const s of this.catalog.views(it.productId)) {\n        if (!Core.elementsOn(this.catalog, this.project, it, s).length) continue;\n        const url = await this.editor.exportSide(it, s, it.id === this.item.id ? 900 : 600); this.mockups.push({ item: it.id, side: s, url });\n      }\n      box.innerHTML = ''; this.mockups.forEach(m => { const it = this.project.items.find(x => x.id === m.item); const pr = this.catalog.product(it.productId); box.append(h('figure', {}, h('img', { src: m.url, alt: `${pr.name} ${Core.viewLabel(m.side)} preview` }), h('figcaption', {}, `${pr.name} \u00B7 ${this.catalog.colors[it.colorId].label} \u00B7 ${Core.viewLabel(m.side)}`))); });\n    } catch (e) { box.innerHTML = '<p class=\"wds2-help\">Previews could not be created in this browser \u2014 your design details are still included.</p>'; }\n    const s = Core.summarize(this.catalog, this.project);\n    const dl = dlg.querySelector('[data-summary]'); dl.innerHTML = '';\n    [['Garments', s.garments], ['Front', s.front], ['Back', s.back], ['Left sleeve', s.left], ['Right sleeve', s.right], ...(this.project.items.length > 1 ? [['Per garment', s.detail]] : []), ['Clipart & templates', s.clipart], ['Your files', s.uploads], ['Names & numbers', s.roster], ['Total pieces', String(s.total || 'Not specified')]]\n      .filter(([k, v]) => !(['Left sleeve', 'Right sleeve', 'Clipart & templates'].includes(k) && v === 'None')).forEach(([k, v]) => dl.append(h('div', {}, h('dt', {}, k), h('dd', {}, v))));\n    const set = (n, v) => { const i = this.form.querySelector(`[name=\"contact[${n}]\"]`); if (i) i.value = v; };\n    set('Design ID', 'WDS-' + this.project.id.slice(2, 10).toUpperCase()); set('Garments', s.garments); set('Front design', s.front); set('Back design', s.back); set('Left sleeve design', s.left); set('Right sleeve design', s.right);\n    set('Design details by garment', s.detail); set('Clipart & templates', s.clipart); set('Uploaded files', s.uploads); set('Total pieces', String(s.total || 'Not specified')); set('Names & numbers', s.roster);\n    set('Mockup previews', this.server.enabled ? 'Attached' : `${this.mockups.length} preview image(s) created in the customer's browser. They attach automatically once secure uploads are switched on.`);\n    this.form.onsubmit = e => this.submit(e);\n  }\n  async submit(e) {\n    const f = this.form; let bad = null;\n    ['[name=\"contact[name]\"]', '[name=\"contact[email]\"]', '[name=\"contact[How did you hear about Wow Design Ink?]\"]'].forEach(sel => { const i = f.querySelector(sel); i.value = i.value.trim(); const ok = i.checkValidity() && i.value !== ''; i.setAttribute('aria-invalid', String(!ok)); if (!ok && !bad) bad = i; });\n    f.querySelector('[data-wds-err]').hidden = !bad; if (bad) { e.preventDefault(); bad.focus(); return; }\n    this.save(false);\n    if (!this.server.enabled) return; // Shopify contact form posts normally\n    e.preventDefault();\n    const btn = f.querySelector('[type=submit]'); btn.disabled = true; btn.textContent = 'Sending\u2026';\n    try {\n      await this.ensureUploaded();\n      const mock = []; for (const m of this.mockups) { const blob = await (await fetch(m.url)).blob(); mock.push({ item: m.item, side: m.side, key: await this.server.uploadAsset(blob, `mockup-${m.side}.png`) }); }\n      const fd = Object.fromEntries(new FormData(f)); const contact = { name: fd['contact[name]'], email: fd['contact[email]'], organization: fd['contact[Organization]'] || '', neededBy: fd['contact[Desired completion date]'] || '', heardAbout: fd['contact[How did you hear about Wow Design Ink?]'], notes: [fd['contact[Project details]'] || '', ...['Preferred brand or style', 'Fabric preference', 'Fit preference'].filter(k => fd[`contact[${k}]`]).map(k => `${k}: ${fd[`contact[${k}]`]}`)].filter(Boolean).join('\\n') };\n      const s = Core.summarize(this.catalog, this.project);\n      await this.server.submitQuote({ contact, project: Core.stripLocal(this.project), ...(this.project.serverId ? { projectId: this.project.serverId } : {}), summary: { garments: s.garments, front: s.front, back: s.back, left: s.left, right: s.right, detail: s.detail, clipart: s.clipart, uploads: s.uploads, roster: s.roster, total: s.total }, mockups: mock, turnstileToken: fd['cf-turnstile-response'] || '' });\n      f.closest('dialog').close(); this.querySelector('[data-done]').hidden = false; this.querySelector('[data-done]').scrollIntoView({ behavior: 'smooth' });\n    } catch (err) { btn.disabled = false; btn.textContent = 'Request my quote'; f.querySelector('[data-wds-err]').hidden = false; f.querySelector('[data-wds-err]').textContent = err.userMessage || 'Something went wrong sending your design. Please try again, or contact us.'; }\n  }\n}\nif (!customElements.get('wdi-design-studio')) customElements.define('wdi-design-studio', Studio);\n"],
  "mappings": "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",
  "names": ["pr", "s"]
}
