{
  "version": 3,
  "sources": ["/cdn/shop/t/1064/assets/np-wear.js?auto=format%2Ccompress"],
  "sourcesContent": ["/* np-wear.js \u2014 \"See this on a: Patch | Hat | Polo\" garment mockups for the AI proof (staging concept, 2026-09-16).\n   Photo bases: Port Authority BTU unstructured twill cap + K420 pique polo (white, cut out from the Ninja Blanks product shots);\n   the garment is tinted to ANY colour on a canvas (multiply keeps the folds, a 10% screen pass keeps them readable on dark colours)\n   and the patch's transparent render sits on a fixed placement per garment.\n   window.NPWear.render(host, { garment: 'hat'|'polo', color: '#hex', patch: <alpha PNG url>, patchRatio: h/w, onReady }) */\n(function () {\n  'use strict';\n  var A = window.NP_WEAR || {}; /* { hat: url, polo: url } from the section liquid; falls back to relative files for the local draft */\n  /* C224e (Justin 2026-09-16, \"reference the Ninja Size Helper app to make this work even better and help with aligning the patch to the\n     garment\"): the store's custom app (admin \u2192 Apps \u2192 Ninja Size Helper \u2192 Zones) keeps garments + print zones as metaobjects\n     size_helper_garment { name, image, display_order } and size_helper_zone { garment, placement, zx zy zw zh (% of the image), mw mh (the\n     zone's real size in inches), fx fy (the focal point as % OF THE ZONE BOX), focal_point_on }. The section liquid emits them as window.NP_WEAR_ZONES; when present\n     they are the source of truth \u2014 their PNGs are the Ninja Size Guide kind (opaque white backdrop, SEMI-TRANSPARENT fabric), coloured by\n     painting the colour BEHIND them, and the patch is placed true to size at the zone's pixels-per-inch, centred on the focal point. */\n  var Z = window.NP_WEAR_ZONES || null;\n  /* setZones(data): a host that fetches the Size Helper data at runtime (ninjatransfers.com reads it from the ninjapatches app) hands it\n     over here; the garment catalog rebuilds on the next call. The ninjapatches theme emits the data inline instead. */\n  function setZones(data) { Z = (data && data.garments) ? data : null; catalogCache = null; }\n  function num(v) { var n = parseFloat(v); return isFinite(n) ? n : 0; }\n  var BASES = {\n    /* refIn = the real-world width the base photo spans (inches), so a patch can be drawn true to its ordered size; minW/maxW clamp the fraction */\n    hat:  { src: A.hat  || 'np-wear-cap.webp',  refIn: 8.2, place: { cx: 0.50, cy: 0.50, w: 0.34, maxH: 0.25, minW: 0.14, maxW: 0.46 } },\n    polo: { src: A.polo || 'np-wear-polo.webp', refIn: 26,  place: { cx: 0.645, cy: 0.33, w: 0.15, maxH: 0.12, minW: 0.07, maxW: 0.30 } }\n  };\n  /* per-patch-type garment rules (Justin 2026-09-16: the crewneck \"should ONLY be available on tackle twill as the only option \u2014 the\n     other patch types can just get the hat and the polo\"). The surface tells the module its type key; garments whose name looks like a\n     crewneck / sweatshirt are Tackle Twill only, and on Tackle Twill they are the only offer. */\n  var ctx = { typeKey: '', tall: false }, TW_ONLY = /crew|sweat/i;\n  /* C512 (Justin 2026-10-26, \"hide the hat as an option once its more than 2.5 inches tall \u2014 just default to the left chest at that\n     point\"): hosts pass the CHOSEN patch height (inches, 0 = no size picked yet); above HAT_MAX_H the hat leaves the catalog and the\n     host moves a customer who was looking at the hat to leftChest() */\n  var HAT_MAX_H = 2.5, HAT_RE = /hat|cap/i;\n  function setContext(o) {\n    var k = (o && typeof o.typeKey === 'string') ? o.typeKey : '', h = o && +o.patchH > 0 ? +o.patchH : 0, tall = h > HAT_MAX_H;\n    if (k !== ctx.typeKey || tall !== ctx.tall) { ctx.typeKey = k; ctx.tall = tall; catalogCache = null; }\n  }\n  var catalogCache = null;\n  function catalog() {\n    /* the garments the control offers: every Size Helper garment that has an image and at least one zone (in display order), then the\n       built-in photo bases for any garment family the app does not cover yet (so the demo always has a hat and a polo) */\n    if (catalogCache) return catalogCache;\n    if (/keychain|key-?ring/i.test(ctx.typeKey || '')) { catalogCache = []; return []; } /* Justin 2026-09-16: \"for PVC keychains we dont need any garment options as thats not a patch\" \u2014 no garments, the hosts hide the bar */\n    var list = [];\n    if (Z && Z.garments && Z.garments.length) {\n      Z.garments.slice().sort(function (a, b) { return num(a.order) - num(b.order); }).forEach(function (g) {\n        if (!g || !g.image || !g.handle) return;\n        var zones = (Z.zones || []).filter(function (z) { return z && z.garment === g.handle && num(z.zw) > 0 && num(z.zh) > 0 && num(z.mw) > 0 && num(z.mh) > 0; })\n          .map(function (z) { return { placement: String(z.placement || 'Front'), zx: num(z.zx) / 100, zy: num(z.zy) / 100, zw: num(z.zw) / 100, zh: num(z.zh) / 100, mw: num(z.mw), mh: num(z.mh), fx: num(z.fx) / 100, fy: num(z.fy) / 100, focal: (z.focal === true || z.focal === 'true' || z.focal == null) && num(z.fx) > 0 && num(z.fy) > 0 }; });\n        if (!zones.length) return;\n        list.push({ key: 'nsh:' + g.handle, label: String(g.name || g.handle), src: g.image, kind: 'tile', zones: zones });\n      });\n    }\n    var isTW = /tackle/i.test(ctx.typeKey || '');\n    var twOnly = list.filter(function (g) { return TW_ONLY.test(g.label); }), rest = list.filter(function (g) { return !TW_ONLY.test(g.label); });\n    if (isTW && twOnly.length) { catalogCache = twOnly; return twOnly; } /* Tackle Twill: the crewneck and nothing else */\n    list = rest; /* every other type never sees the crewneck */\n    var has = function (re) { return list.some(function (g) { return re.test(g.label) || re.test(g.key); }); }, noFB = !!window.NP_WEAR_NO_FALLBACK; /* a host without Size Helper data can opt out of the generic photo bases \u2014 then no garments = no bar (ninjatransfers.com until it has a token) */\n    if (!noFB && !has(/hat|cap/i)) list.push({ key: 'hat', label: 'Hat', src: BASES.hat.src, kind: 'photo', base: BASES.hat });\n    if (!noFB && !has(/polo|shirt/i)) list.push({ key: 'polo', label: 'Polo', src: BASES.polo.src, kind: 'photo', base: BASES.polo });\n    if (ctx.tall) list = list.filter(function (g) { return !(HAT_RE.test(g.label) || HAT_RE.test(g.key)); }); /* C512: too tall for a hat */\n    catalogCache = list; return list;\n  }\n  function garment(key) { var g = null; catalog().forEach(function (x) { if (x.key === key) g = x; }); return g || null; }\n  function isHat(key) { return HAT_RE.test(String(key || '')); }\n  /* C512: where a customer looking at the hat goes once the hat is gone \u2014 the first garment with a Left Chest zone (the Size Helper\n     polo), else the built-in polo photo, whose fixed placement is the left chest; null when the type offers neither (Tackle Twill) */\n  function leftChest() {\n    var hit = null;\n    catalog().forEach(function (g) {\n      if (hit) return;\n      if (g.kind === 'tile') { (g.zones || []).forEach(function (z) { if (!hit && /left\\s*chest/i.test(z.placement)) hit = { key: g.key, placement: z.placement }; }); }\n      else if (g.key === 'polo') hit = { key: g.key, placement: '' };\n    });\n    return hit;\n  }\n  var cache = {};\n  function loadImg(src, cb) {\n    if (cache[src] && cache[src].complete && cache[src].naturalWidth) return cb(cache[src]);\n    var im = cache[src] || new Image(); cache[src] = im; im.crossOrigin = 'anonymous';\n    im.addEventListener('load', function () { cb(im); }, { once: true });\n    im.addEventListener('error', function () { cb(null); }, { once: true });\n    if (!im.src) im.src = src;\n  }\n  function loadBase(g, cb) { var b = BASES[g]; if (!b) return cb(null); loadImg(b.src, cb); }\n  /* the Size Helper PNG kind: paint the colour behind, the semi-transparent fabric takes it, the opaque backdrop stays white.\n     The PNGs are 2000\u00B2 with the garment in the middle, so the tile is CROPPED to the fabric's bounding box (+ padding) \u2014 the crop is\n     scanned once per image (alpha < 250 = fabric) and every zone/focal fraction is remapped into crop space. */\n  var cropCache = {};\n  function garmentCrop(img, src) {\n    if (cropCache[src]) return cropCache[src];\n    var W = img.naturalWidth, H = img.naturalHeight, S = 200, r = Math.min(1, S / Math.max(W, H)), w = Math.max(1, Math.round(W * r)), h = Math.max(1, Math.round(H * r));\n    var crop = { x: 0, y: 0, w: 1, h: 1 };\n    try {\n      var c = document.createElement('canvas'); c.width = w; c.height = h; var x = c.getContext('2d'); x.drawImage(img, 0, 0, w, h);\n      var d = x.getImageData(0, 0, w, h).data, x0 = w, y0 = h, x1 = -1, y1 = -1;\n      for (var yy = 0; yy < h; yy++) for (var xx = 0; xx < w; xx++) { if (d[(yy * w + xx) * 4 + 3] < 250) { if (xx < x0) x0 = xx; if (xx > x1) x1 = xx; if (yy < y0) y0 = yy; if (yy > y1) y1 = yy; } }\n      if (x1 > x0 && y1 > y0 && (x1 - x0) < w * 0.98) {\n        var pad = Math.max(x1 - x0, y1 - y0) * 0.12, side = Math.max(x1 - x0, y1 - y0) + pad * 2; /* square crop around the garment */\n        var cx = (x0 + x1) / 2, cy = (y0 + y1) / 2, left = Math.max(0, Math.min(w - side, cx - side / 2)), top = Math.max(0, Math.min(h - side, cy - side / 2)); side = Math.min(side, w, h);\n        crop = { x: left / w, y: top / h, w: side / w, h: side / h };\n      }\n    } catch (e) {}\n    cropCache[src] = crop; return crop;\n  }\n  function tintBehind(img, color, crop) {\n    var W = img.naturalWidth, H = img.naturalHeight, sx = crop.x * W, sy = crop.y * H, sw = crop.w * W, sh = crop.h * H;\n    var c = document.createElement('canvas'); c.width = Math.round(sw); c.height = Math.round(sh);\n    var x = c.getContext('2d');\n    x.fillStyle = (color && !/^#?f{6}$/i.test(color)) ? color : '#ffffff'; x.fillRect(0, 0, c.width, c.height);\n    x.drawImage(img, sx, sy, sw, sh, 0, 0, c.width, c.height);\n    return c;\n  }\n  function tint(img, color) {\n    var c = document.createElement('canvas'); c.width = img.naturalWidth; c.height = img.naturalHeight;\n    var x = c.getContext('2d');\n    x.drawImage(img, 0, 0);\n    if (color && !/^#?f{6}$/i.test(color)) {\n      var m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color), L = m ? (0.2126 * parseInt(m[1], 16) + 0.7152 * parseInt(m[2], 16) + 0.0722 * parseInt(m[3], 16)) / 255 : 0.5;\n      x.globalCompositeOperation = 'multiply'; x.fillStyle = color; x.fillRect(0, 0, c.width, c.height);\n      /* the darker the colour, the more of the white shot's folds we screen back in (a pure multiply crushes black to a silhouette) */\n      x.globalCompositeOperation = 'screen'; x.globalAlpha = Math.min(0.22, 0.04 + 0.16 * Math.pow(1 - L, 3)); x.drawImage(img, 0, 0); x.globalAlpha = 1; /* black \u2248 0.20, navy \u2248 0.17, red \u2248 0.12 \u2014 enough fold to read, colours stay true */\n      x.globalCompositeOperation = 'destination-in'; x.drawImage(img, 0, 0);\n      x.globalCompositeOperation = 'source-over';\n    }\n    return c;\n  }\n  function render(host, o) {\n    if (!host) return;\n    var G = garment(o.garment) || garment(o.garment === 'polo' ? 'polo' : 'hat') || catalog()[0]; if (!G) return;\n    var g = G.key, kind = G.kind, cls = g.replace(/[^a-z0-9]+/gi, '-');\n    var ratio = (o.patchRatio && isFinite(o.patchRatio) && o.patchRatio > 0) ? o.patchRatio : 1;\n    host.classList.add('np-wear-host');\n    var wrap = host.querySelector('.np-wear');\n    if (!wrap || wrap.getAttribute('data-g') !== g) { host.innerHTML = '<div class=\"np-wear np-wear--' + cls + ' np-wear--' + kind + '\" data-g=\"' + g + '\"><div class=\"np-wear__base\"></div><img class=\"np-wear__patch\" crossorigin=\"anonymous\" alt=\"Your patch on a ' + G.label + '\"></div>'; wrap = host.querySelector('.np-wear'); }\n    var patchEl = wrap.querySelector('.np-wear__patch');\n    /* C224q (Justin 2026-09-16 \"if the image isnt ready on the mockup can we have a loading animation until its ready\"): the host spins\n       until the garment is tinted AND the patch copy is drawn \u2014 a re-render with the same patch already on screen does not flash */\n    var already = !!(o.patch && patchEl.getAttribute('src') === o.patch && patchEl.complete && patchEl.naturalWidth > 0);\n    if (!already) host.classList.add('is-loading');\n    var settle = function () { host.classList.remove('is-loading'); };\n    loadImg(G.src, function (img) {\n      if (!img) { wrap.classList.add('is-missing'); settle(); return; }\n      var aw = img.naturalWidth, ah = img.naturalHeight; var crop = kind === 'tile' ? garmentCrop(img, G.src) : { x: 0, y: 0, w: 1, h: 1 };\n      wrap.style.aspectRatio = Math.round(aw * crop.w) + '/' + Math.round(ah * crop.h);\n      var baseBox = wrap.querySelector('.np-wear__base'); baseBox.innerHTML = ''; baseBox.appendChild(kind === 'tile' ? tintBehind(img, o.color || '#ffffff', crop) : tint(img, o.color || '#ffffff'));\n      /* place(r): size + position the patch box for aspect r (h/w). Runs once with the host's ratio and again with the loaded copy's\n         own aspect \u2014 the trimmed copy is the truth (a letterboxed render's box is not the patch) */\n      var place = function (ratio) {\n        var info = { kind: kind, label: G.label, over: false, ppi: 0, placement: '', maxIn: null, shownIn: null };\n        var w, h, left, top;\n        if (kind === 'tile') {\n          /* Size Helper zone: fractions of the image; the zone is mw \u00D7 mh inches, so ppi = zone px / mw; centre on the focal point */\n          var zn = null; G.zones.forEach(function (z) { if (o.placement && z.placement.toLowerCase() === String(o.placement).toLowerCase()) zn = z; }); zn = zn || G.zones[0];\n          var ppi = (zn.zw * aw) / zn.mw; info.ppi = ppi; info.placement = zn.placement; info.maxIn = [zn.mw, zn.mh];\n          /* no size chosen \u2192 the LARGEST patch the zone's max print area allows at this aspect (Justin 2026-09-16: \"carry over the max print\n             area sizes so if its 5x3 it should do a circle at 3x3 or square at 3x3\") \u2014 a wordmark on the crewneck's 12\u00D714 front fills 12\" */\n          var wIn = o.patchIn > 0 ? o.patchIn : Math.min(zn.mw, zn.mh / ratio), hIn = wIn * ratio; info.maxFit = !(o.patchIn > 0);\n          if (wIn > zn.mw || hIn > zn.mh) { var k = Math.min(zn.mw / wIn, zn.mh / hIn); wIn *= k; hIn *= k; info.over = true; }\n          info.shownIn = [wIn, hIn];\n          w = (wIn * ppi) / aw; h = (hIn * ppi) / ah;\n          /* FX/FY are percentages OF THE ZONE BOX (the app's blue dot; 50/50 = the zone centre), not of the image */\n          var cx = zn.zx + (zn.focal ? zn.fx : 0.5) * zn.zw, cy = zn.zy + (zn.focal ? zn.fy : 0.5) * zn.zh;\n          left = Math.max(zn.zx, Math.min(zn.zx + zn.zw - w, cx - w / 2)); top = Math.max(zn.zy, Math.min(zn.zy + zn.zh - h, cy - h / 2));\n          /* image fractions \u2192 crop fractions */\n          left = (left - crop.x) / crop.w; top = (top - crop.y) / crop.h; w = w / crop.w; h = h / crop.h;\n        } else {\n          var b = G.base, p = b.place;\n          w = p.w; if (o.patchIn > 0 && b.refIn) w = Math.max(p.minW, Math.min(p.maxW, o.patchIn / b.refIn)); /* true to the ordered width when known */\n          h = w * ratio * (aw / ah); if (h > p.maxH) { h = p.maxH; w = h / ratio * (ah / aw); }\n          left = p.cx - w / 2; top = p.cy - h / 2; info.ppi = aw / b.refIn; info.shownIn = [w * aw / info.ppi, h * ah / info.ppi];\n        }\n        patchEl.style.left = (left * 100).toFixed(2) + '%'; patchEl.style.top = (top * 100).toFixed(2) + '%';\n        patchEl.style.width = (w * 100).toFixed(2) + '%'; patchEl.style.height = (h * 100).toFixed(2) + '%';\n        if (o.onReady) o.onReady(wrap, info);\n      };\n      var ownRatio = function () { return (patchEl.naturalWidth > 0 && patchEl.naturalHeight > 0) ? patchEl.naturalHeight / patchEl.naturalWidth : 0; };\n      var loaded = function () { settle(); var r2 = ownRatio(); place(r2 > 0 ? r2 : ratio); };\n      if (o.patch && patchEl.getAttribute('src') !== o.patch) patchEl.src = o.patch;\n      patchEl.hidden = !o.patch;\n      if (o.patch && patchEl.complete && patchEl.naturalWidth > 0) { loaded(); }\n      else { place(ratio); if (o.patch) { patchEl.onload = loaded; patchEl.onerror = settle; } } /* no patch yet = the host is still cutting it; it re-renders when the cut lands */\n    });\n  }\n  /* one flat PNG of the garment + patch (for the zoom lightbox / a share). Returns null when the patch image is cross-origin tainted. */\n  function composite(wrap) {\n    try {\n      var base = wrap.querySelector('.np-wear__base canvas'), patch = wrap.querySelector('.np-wear__patch');\n      if (!base) return null;\n      var c = document.createElement('canvas'); c.width = base.width; c.height = base.height; var x = c.getContext('2d');\n      x.drawImage(base, 0, 0);\n      if (patch && !patch.hidden && patch.naturalWidth) {\n        var l = parseFloat(patch.style.left) / 100 * c.width, t = parseFloat(patch.style.top) / 100 * c.height, w = parseFloat(patch.style.width) / 100 * c.width, h = parseFloat(patch.style.height) / 100 * c.height;\n        var sc = Math.min(w / patch.naturalWidth, h / patch.naturalHeight), dw = patch.naturalWidth * sc, dh = patch.naturalHeight * sc;\n        x.shadowColor = 'rgba(0,0,0,.35)'; x.shadowBlur = 6; x.shadowOffsetY = 3;\n        x.drawImage(patch, l + (w - dw) / 2, t + (h - dh) / 2, dw, dh);\n      }\n      return c.toDataURL('image/png');\n    } catch (e) { return null; }\n  }\n  /* erodeAlpha: peel `px` pixels off every alpha edge, then give the new edge a soft 1px ring. Kills the backdrop-tinted fringe a flood\n     cut leaves around a patch (Justin 2026-09-16: \"still showing a little white around it\") \u2014 at a 1024px render 2px is invisible. */\n  function erodeAlpha(c, px) {\n    /* depth-based defringe: map every opaque pixel's distance from the alpha edge (BFS, up to 12), read the median luminance per depth,\n       and peel every ring that is still lighter than the patch's own border (the ring 10 deep) by more than 40 \u2014 the backdrop blend band\n       of any width \u2014 at least `px`, at most 8. The new edge ring is dimmed toward the border colour and half-transparent so no light\n       seam survives on a dark garment (Justin 2026-09-16 \"im still seeing this white line\"). */\n    var x = c.getContext('2d'), W = c.width, H = c.height, id = x.getImageData(0, 0, W, H), d = id.data, N = W * H, MAXD = 12;\n    var depth = new Int8Array(N); for (var i = 0; i < N; i++) depth[i] = d[i * 4 + 3] > 8 ? -1 : -2; /* -2 transparent, -1 opaque unvisited */\n    var q = [], head = 0;\n    for (var j = 0; j < N; j++) { if (depth[j] !== -1) continue; var xj = j % W, yj = (j - xj) / W; if ((xj > 0 && depth[j - 1] === -2) || (xj < W - 1 && depth[j + 1] === -2) || (yj > 0 && depth[j - W] === -2) || (yj < H - 1 && depth[j + W] === -2) || xj === 0 || yj === 0 || xj === W - 1 || yj === H - 1) { depth[j] = 0; q.push(j); } }\n    while (head < q.length) { var k = q[head++], dk = depth[k]; if (dk >= MAXD) continue; var xk = k % W, yk = (k - xk) / W, nb = [xk > 0 ? k - 1 : -1, xk < W - 1 ? k + 1 : -1, yk > 0 ? k - W : -1, yk < H - 1 ? k + W : -1]; for (var n = 0; n < 4; n++) { var m = nb[n]; if (m >= 0 && depth[m] === -1) { depth[m] = dk + 1; q.push(m); } } }\n    var lumAt = []; for (var dd = 0; dd <= MAXD; dd++) lumAt.push([]);\n    var rgbDeep = [0, 0, 0], nDeep = 0;\n    for (var t = 0; t < N; t++) { var dt = depth[t]; if (dt < 0) continue; if ((t & 3) === 0) { var o = t * 4; lumAt[dt].push(0.299 * d[o] + 0.587 * d[o + 1] + 0.114 * d[o + 2]); if (dt >= 8) { rgbDeep[0] += d[o]; rgbDeep[1] += d[o + 1]; rgbDeep[2] += d[o + 2]; nDeep++; } } }\n    var med = function (arr) { if (!arr.length) return 0; arr.sort(function (p1, p2) { return p1 - p2; }); return arr[arr.length >> 1]; };\n    var lum = lumAt.map(med), border = lum[10] || lum[8] || lum[MAXD] || 0;\n    var P = Math.min(8, Math.max(2, px)); /* peel depths 0..P-1 */\n    for (var dp = P; dp < 8; dp++) { if (lumAt[dp].length && lum[dp] > border + 40) P = dp + 1; else break; }\n    if (nDeep) { rgbDeep[0] /= nDeep; rgbDeep[1] /= nDeep; rgbDeep[2] /= nDeep; }\n    for (var u = 0; u < N; u++) {\n      var du = depth[u]; if (du < 0) continue;\n      var ou = u * 4;\n      if (du < P) { d[ou + 3] = 0; }\n      else if (du === P) { d[ou + 3] = Math.min(d[ou + 3], 120); if (nDeep) { d[ou] = Math.round((d[ou] + rgbDeep[0]) / 2); d[ou + 1] = Math.round((d[ou + 1] + rgbDeep[1]) / 2); d[ou + 2] = Math.round((d[ou + 2] + rgbDeep[2]) / 2); } }\n    }\n    x.putImageData(id, 0, 0);\n    return P;\n  }\n  /* defringe(url, cb): the same peel applied to an existing transparent copy (the PDP's own cut or the alpha re-host); cb(dataUrl|null) */\n  /* trimAlpha: crop a transparent copy to its alpha bounding box (+2% air). The Sensei renders are letterboxed studio frames\n     (1376\u00D7768 with the lettering in one band), so an untrimmed copy placed in a 12\" box showed 9\" of letters and a lot of nothing\n     (Justin 2026-09-16 \"that is not 12 inches wide\"). After the trim the copy's own aspect IS the patch's aspect. */\n  function trimAlpha(c) {\n    var W = c.width, H = c.height, d = c.getContext('2d').getImageData(0, 0, W, H).data, x0 = W, y0 = H, x1 = -1, y1 = -1;\n    for (var y = 0; y < H; y++) for (var x = 0; x < W; x++) { if (d[(y * W + x) * 4 + 3] > 16) { if (x < x0) x0 = x; if (x > x1) x1 = x; if (y < y0) y0 = y; if (y > y1) y1 = y; } }\n    if (x1 < 0) return c;\n    var pad = Math.max(2, Math.round(Math.max(x1 - x0, y1 - y0) * 0.02));\n    x0 = Math.max(0, x0 - pad); y0 = Math.max(0, y0 - pad); x1 = Math.min(W - 1, x1 + pad); y1 = Math.min(H - 1, y1 + pad);\n    if (x0 === 0 && y0 === 0 && x1 === W - 1 && y1 === H - 1) return c;\n    var o = document.createElement('canvas'); o.width = x1 - x0 + 1; o.height = y1 - y0 + 1;\n    o.getContext('2d').drawImage(c, x0, y0, o.width, o.height, 0, 0, o.width, o.height);\n    return o;\n  }\n  /* floodBackdrop (C224s, replaces C224r's colour-only interior pass, which hollowed out white letter fills \u2014 Justin 2026-09-16\n     \"when the design has white in it its removing it\"): the enclosed studio strip is only ever fenced off by a THIN highlight line,\n     and the 2 px edge peel has just removed that fence \u2014 so flood inward from the transparent outside, through flat, grey,\n     backdrop-toned pixels only (lum within \u221232/+12 of the studio backdrop, saturation \u2264 18, gradient < 5.5). A white fill behind a\n     stitched outline is unreachable from the outside and survives untouched, whatever its shade. Skipped when the flood wants more\n     than 20% of the copy (a patch whose own fill is studio grey). */\n  function floodBackdrop(c, ref) {\n    if (!ref) return;\n    var x = c.getContext('2d'), W = c.width, H = c.height, id = x.getImageData(0, 0, W, H), d = id.data, N = W * H;\n    var lum = new Float32Array(N); for (var i = 0; i < N; i++) lum[i] = 0.299 * d[i * 4] + 0.587 * d[i * 4 + 1] + 0.114 * d[i * 4 + 2];\n    var ok = function (p) {\n      var o = p * 4; if (d[o + 3] < 16) return false;\n      var r = d[o], g = d[o + 1], b = d[o + 2], l = lum[p];\n      if (Math.max(r, g, b) - Math.min(r, g, b) > 18 || l < ref.lum - 32 || l > ref.lum + 12) return false;\n      var px = p % W, py = (p - px) / W;\n      var gr = Math.max(px > 0 ? Math.abs(l - lum[p - 1]) : 0, px < W - 1 ? Math.abs(l - lum[p + 1]) : 0, py > 0 ? Math.abs(l - lum[p - W]) : 0, py < H - 1 ? Math.abs(l - lum[p + W]) : 0);\n      return gr < 5.5;\n    };\n    var seen = new Uint8Array(N), q = [], kept = 0;\n    for (var s = 0; s < N; s++) {\n      if (d[s * 4 + 3] < 16) continue; kept++;\n      var sx = s % W, sy = (s - sx) / W;\n      var edge = sx === 0 || sy === 0 || sx === W - 1 || sy === H - 1 || d[(s - 1) * 4 + 3] < 16 || d[(s + 1) * 4 + 3] < 16 || d[(s - W) * 4 + 3] < 16 || d[(s + W) * 4 + 3] < 16;\n      if (edge && ok(s)) { seen[s] = 1; q.push(s); }\n    }\n    var head = 0;\n    while (head < q.length) { var p2 = q[head++], px2 = p2 % W, py2 = (p2 - px2) / W, nb = [px2 > 0 ? p2 - 1 : -1, px2 < W - 1 ? p2 + 1 : -1, py2 > 0 ? p2 - W : -1, py2 < H - 1 ? p2 + W : -1]; for (var n = 0; n < 4; n++) { var m = nb[n]; if (m >= 0 && !seen[m] && ok(m)) { seen[m] = 1; q.push(m); } } }\n    if (!q.length || q.length > kept * 0.2) return;\n    for (var k = 0; k < q.length; k++) d[q[k] * 4 + 3] = 0;\n    x.putImageData(id, 0, 0);\n  }\n  /* dropSpecks: the studio backdrop has fabric texture; the flood leaves specks of it behind, and a speck in a far corner drags the\n     copy's bounding box out to the whole frame. Keep only components that are at least 0.4% of the copy's opaque area (\u2265 40 px). */\n  function dropSpecks(c) {\n    var x = c.getContext('2d'), W = c.width, H = c.height, id = x.getImageData(0, 0, W, H), d = id.data, N = W * H;\n    var lab = new Int32Array(N), areas = [0], total = 0, q = [];\n    for (var s = 0; s < N; s++) {\n      if (d[s * 4 + 3] < 16 || lab[s]) continue;\n      var L = areas.length; areas.push(0); lab[s] = L; q.length = 0; q.push(s); var head = 0;\n      while (head < q.length) { var p = q[head++]; areas[L]++; var px = p % W, py = (p - px) / W; var nb = [px > 0 ? p - 1 : -1, px < W - 1 ? p + 1 : -1, py > 0 ? p - W : -1, py < H - 1 ? p + W : -1]; for (var n = 0; n < 4; n++) { var m = nb[n]; if (m >= 0 && !lab[m] && d[m * 4 + 3] >= 16) { lab[m] = L; q.push(m); } } }\n      total += areas[L];\n    }\n    if (areas.length < 3) return;\n    var min = Math.max(40, total * 0.004), any = false;\n    for (var t2 = 0; t2 < N; t2++) { var lb = lab[t2]; if (lb && areas[lb] < min) { d[t2 * 4 + 3] = 0; any = true; } }\n    if (any) x.putImageData(id, 0, 0);\n  }\n  /* backdropOf(url, cb): the studio square's border colour (mean of its edge pixels) \u2192 {r,g,b,lum}; null when it cannot be read */\n  function backdropOf(url, cb) {\n    if (!url) return cb(null);\n    loadImg(url, function (img) {\n      if (!img) return cb(null);\n      try {\n        var sc = Math.min(1, 400 / Math.max(img.naturalWidth, img.naturalHeight)), W = Math.max(2, Math.round(img.naturalWidth * sc)), H = Math.max(2, Math.round(img.naturalHeight * sc));\n        var c = document.createElement('canvas'); c.width = W; c.height = H; var x = c.getContext('2d'); x.drawImage(img, 0, 0, W, H);\n        var d = x.getImageData(0, 0, W, H).data, r = 0, g = 0, b = 0, n = 0, acc = function (px) { var o = px * 4; if (d[o + 3] < 200) return; r += d[o]; g += d[o + 1]; b += d[o + 2]; n++; };\n        for (var i = 0; i < W; i++) { acc(i); acc((H - 1) * W + i); } for (var j = 1; j < H - 1; j++) { acc(j * W); acc(j * W + W - 1); }\n        if (!n) return cb(null);\n        r /= n; g /= n; b /= n; cb({ r: r, g: g, b: b, lum: 0.299 * r + 0.587 * g + 0.114 * b });\n      } catch (e) { cb(null); }\n    });\n  }\n  var defringeCache = {};\n  /* defringe(url, cb, refUrl): the last mile for every transparent copy before it goes on a garment \u2014 edge peel, then the outside-in\n     backdrop flood (needs the opaque render `refUrl` for the backdrop colour), specks, trim to the alpha box. Cached per copy. */\n  function defringe(url, cb, refUrl) {\n    var key = url + '|' + (refUrl || '');\n    if (defringeCache[key]) return cb(defringeCache[key]);\n    var img = new Image(); img.crossOrigin = 'anonymous';\n    img.onload = function () {\n      backdropOf(refUrl, function (ref) {\n        try {\n          var MAX = 1200, sc = Math.min(1, MAX / Math.max(img.naturalWidth, img.naturalHeight));\n          var c = document.createElement('canvas'); c.width = Math.max(1, Math.round(img.naturalWidth * sc)); c.height = Math.max(1, Math.round(img.naturalHeight * sc));\n          c.getContext('2d').drawImage(img, 0, 0, c.width, c.height);\n          erodeAlpha(c, 2);\n          floodBackdrop(c, ref); /* after the peel: the thin fence is gone, the strip is reachable */\n          dropSpecks(c);\n          var out = trimAlpha(c).toDataURL('image/png'); defringeCache[key] = out; cb(out);\n        } catch (e) { cb(null); }\n      });\n    };\n    img.onerror = function () { cb(null); };\n    img.src = url;\n  }\n  /* cutFlat: a transparent copy of a render that sits on a FLAT studio backdrop (the Patch Sensei white square) \u2014 flood from the\n     borders eating only backdrop-coloured pixels, so the textured patch edge stops the flood. cb(dataUrl|null). */\n  function cutFlat(url, cb) {\n    var img = new Image(); img.crossOrigin = 'anonymous';\n    img.onload = function () {\n      try {\n        var MAX = 1000, sc = Math.min(1, MAX / Math.max(img.naturalWidth, img.naturalHeight));\n        var W = Math.max(1, Math.round(img.naturalWidth * sc)), H = Math.max(1, Math.round(img.naturalHeight * sc));\n        var c = document.createElement('canvas'); c.width = W; c.height = H; var x = c.getContext('2d'); x.drawImage(img, 0, 0, W, H);\n        var id = x.getImageData(0, 0, W, H), d = id.data, N = W * H;\n        var rs = 0, gs = 0, bs = 0, n = 0, acc = function (px) { var o = px * 4; rs += d[o]; gs += d[o + 1]; bs += d[o + 2]; n++; };\n        for (var i = 0; i < W; i++) { acc(i); acc((H - 1) * W + i); } for (var j = 1; j < H - 1; j++) { acc(j * W); acc(j * W + W - 1); }\n        var br = rs / n, bg = gs / n, bb = bs / n, TOL = 34;\n        var seen = new Uint8Array(N), stack = [];\n        var near = function (px) { var o = px * 4; return Math.abs(d[o] - br) < TOL && Math.abs(d[o + 1] - bg) < TOL && Math.abs(d[o + 2] - bb) < TOL; };\n        for (var i2 = 0; i2 < W; i2++) { stack.push(i2, (H - 1) * W + i2); } for (var j2 = 1; j2 < H - 1; j2++) { stack.push(j2 * W, j2 * W + W - 1); }\n        while (stack.length) { var px = stack.pop(); if (seen[px] || !near(px)) continue; seen[px] = 1; var xx = px % W, yy = (px - xx) / W; if (xx > 0) stack.push(px - 1); if (xx < W - 1) stack.push(px + 1); if (yy > 0) stack.push(px - W); if (yy < H - 1) stack.push(px + W); }\n        var any = false;\n        for (var k = 0; k < N; k++) { if (seen[k]) { d[k * 4 + 3] = 0; any = true; } }\n        if (!any) { cb(null); return; }\n        x.putImageData(id, 0, 0);\n        erodeAlpha(c, 2); /* peel the backdrop-tinted fringe */\n        dropSpecks(c);\n        cb(trimAlpha(c).toDataURL('image/png'));\n      } catch (e) { cb(null); }\n    };\n    img.onerror = function () { cb(null); };\n    img.src = url;\n  }\n  window.NPWear = { render: render, composite: composite, cutFlat: cutFlat, defringe: defringe, catalog: catalog, garment: garment, setContext: setContext, setZones: setZones, isHat: isHat, leftChest: leftChest, BASES: BASES };\n})();\n"],
  "mappings": "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",
  "names": ["ratio", "px"]
}
