{
  "version": 3,
  "sources": ["/cdn/shop/t/1064/assets/reorder-lp.js?auto=format%2Ccompress"],
  "sourcesContent": ["/* Reorder landing page \u2014 shared behaviour for the reorder-* sections.\n *\n * The page is reached from the \"Reorder this design\" link in the Klaviyo order\n * confirmation email:\n *\n *   /pages/my-design?file=<url-encoded artwork URL>&from=<original product handle>\n *\n * or from an order reference, which looks the design up in the customer's own orders and\n * makes the main button an exact reorder (see \"order links\" below):\n *\n *   /pages/my-design?reorder=NT-2208023&item=2\n *\n * Every section renders complete in Liquid. This file does three jobs and nothing else:\n *   1. put the customer's artwork into the hero and into every product tile\n *   2. stamp ?file= onto anchors that are already in the DOM\n *   3. promote the product they already bought to the primary CTA\n *\n * It is deliberately document-wide rather than per-section, so any combination of the\n * reorder-* sections works on its own \u2014 Aidan can delete the hero, reorder the bands, or\n * drop the grid onto another page and nothing breaks.\n */\n(function () {\n  'use strict';\n\n  function params() {\n    return new URLSearchParams(window.location.search);\n  }\n\n  /* Relay ?file= EXACTLY as it arrives.\n   *\n   * There used to be an imgix -> S3 host swap here for .ai/.eps/.pdf/.psd, copied from\n   * snippets/my-designs-panel.liquid:1324-1336. It was wrong for this page. The Klaviyo\n   * order-confirmation template (QQuPf5) always rewrites uploads TO the imgix host, even\n   * when the original is a raw S3 file \u2014 its own comment says so deliberately. Rewriting\n   * it back would make this page disagree with the link the customer was actually sent.\n   * Whatever the email put in ?file= is already the correct URL.\n   */\n  function destinationFile(url) {\n    return url;\n  }\n\n  /* Everything the email put on the link rides along to the product page: the UTMs Klaviyo\n     appends, nt_link, and preview_theme_id \u2014 without which a tile clicked while previewing a\n     sandbox theme silently drops the customer onto the live theme (ported from\n     my-designs-panel.liquid:1375). Anything the page drops here is attribution the reorder\n     never gets credited with, so the rule is carry it unless it actively breaks something.\n     Two things do:\n       - `view` is dropped. bySize__js.liquid:37-42 reads it as a template switch and rebuilds\n         the URL as ?variant=<view> via href.substring(0, indexOf('?')) \u2014 which throws away the\n         whole query string, ?file= included. Forwarding it would lose the artwork.\n       - params this page sets itself win. file and nt_tile are already on `path`, so the\n         `has` check stops an inbound param of the same name from shadowing the artwork we\n         resolved. */\n  /* reorder/item/line name an order to reorder; on a product page they mean nothing, and the\n     My Orders link puts its own on the path. */\n  var DROP_PARAMS = { view: 1, reorder: 1, item: 1, line: 1 };\n\n  function buildDestinationUrl(path, qs) {\n    var url = new URL(path, window.location.origin);\n    qs.forEach(function (value, key) {\n      if (DROP_PARAMS[key]) return;\n      if (url.searchParams.has(key)) return;\n      url.searchParams.set(key, value);\n    });\n    return url.pathname + url.search;\n  }\n\n  function productUrl(handle, file, qs) {\n    return buildDestinationUrl(\n      '/products/' + handle +\n        '?file=' + encodeURIComponent(destinationFile(file)) +\n        '&nt_tile=' + encodeURIComponent(handle),\n      qs\n    );\n  }\n\n  /* The artwork is served by imgix, so we can ask it for a display-sized copy instead of\n     pulling the full print-resolution file. Applies to what we DISPLAY only \u2014 the URL we\n     hand to the product page stays exactly as the email sent it. */\n  function display(url, w) {\n    /* MEDIUM tier (imgix audit 2026-09-11): every caller shares ONE w=600\n       string (the design library's), keeping the stored toggles\n       (bg-remove / upscale). `w` is ignored on purpose: 900/700/240 were three\n       renders of the same design per landing, plus auto=format variants. */\n    if (!/(^|\\.)imgix\\.net\\//.test(url)) return url;\n    var bare = url.split('?')[0];\n    var vec = /\\.(ai|eps|pdf|svg)$/i.test(bare);\n    var keep = [];\n    try { new URL(url).searchParams.forEach(function (v, k) { if (/^(bg-remove|bg-remove-model|upscale|cs|trim-tol)$/.test(k)) keep.push(k + '=' + v); }); } catch (e) {}\n    return bare + (vec ? '?fm=png&auto=compress&q=50&w=600' : '?trim=colorUnlessAlpha&fm=png&auto=compress&q=50&w=600') + (keep.length ? '&' + keep.join('&') : '');\n  }\n\n  /* ---- quad slots ----------------------------------------------------------------\n   * The print area on each mockup is four corners, placed by hand in\n   * dev/reorder-slots.html. Four corners describe a plane seen at an angle; a rotate/skew\n   * pair does not, which is why decals used to sit on a truck door like a sticker on a\n   * photo. Turning the quad into a matrix3d has to happen here rather than in CSS because\n   * the translation terms are in pixels and so depend on the tile's rendered width.\n   */\n  function solve(A, b) {\n    var n = b.length, i, r, c;\n    for (i = 0; i < n; i++) {\n      var piv = i;\n      for (r = i + 1; r < n; r++) if (Math.abs(A[r][i]) > Math.abs(A[piv][i])) piv = r;\n      var tA = A[i]; A[i] = A[piv]; A[piv] = tA;\n      var tb = b[i]; b[i] = b[piv]; b[piv] = tb;\n      if (Math.abs(A[i][i]) < 1e-12) return null;\n      for (r = i + 1; r < n; r++) {\n        var f = A[r][i] / A[i][i];\n        for (c = i; c < n; c++) A[r][c] -= f * A[i][c];\n        b[r] -= f * b[i];\n      }\n    }\n    var x = new Array(n);\n    for (i = n - 1; i >= 0; i--) {\n      var sum = b[i];\n      for (c = i + 1; c < n; c++) sum -= A[i][c] * x[c];\n      x[i] = sum / A[i][i];\n    }\n    return x;\n  }\n\n  function applyQuad(span) {\n    var raw = span.getAttribute('data-rlp-quad');\n    if (!raw) return;\n    var pts = raw.split(',').map(function (pair) {\n      var n = pair.trim().split(/\\s+/).map(Number);\n      return [n[0], n[1]];\n    });\n    if (pts.length !== 4 || pts.some(function (p) { return isNaN(p[0]) || isNaN(p[1]); })) return;\n\n    var shot = span.parentNode;\n    var W = shot.clientWidth, H = shot.clientHeight;\n    if (!W || !H) return;\n\n    var px = pts.map(function (p) { return [p[0] / 100 * W, p[1] / 100 * H]; });\n    var xs = px.map(function (p) { return p[0]; }), ys = px.map(function (p) { return p[1]; });\n    var bx = Math.min.apply(null, xs), by = Math.min.apply(null, ys);\n    var QW = Math.max(1, Math.max.apply(null, xs) - bx);\n    var QH = Math.max(1, Math.max.apply(null, ys) - by);\n\n    /* Solve the rect -> quad homography in the span's own box, so the artwork inside keeps\n       its aspect ratio before the plane distorts it. */\n    var src = [[0, 0], [QW, 0], [QW, QH], [0, QH]];\n    var A = [], b = [];\n    for (var i = 0; i < 4; i++) {\n      var sx = src[i][0], sy = src[i][1];\n      var dx = px[i][0] - bx, dy = px[i][1] - by;\n      A.push([sx, sy, 1, 0, 0, 0, -sx * dx, -sy * dx]); b.push(dx);\n      A.push([0, 0, 0, sx, sy, 1, -sx * dy, -sy * dy]); b.push(dy);\n    }\n    var m = solve(A, b);\n    if (!m) return;\n\n    span.style.width = QW + 'px';\n    span.style.height = QH + 'px';\n    span.style.left = bx + 'px';\n    span.style.top = by + 'px';\n    span.style.transform = 'matrix3d(' + m[0] + ',' + m[3] + ',0,' + m[6] + ',' +\n      m[1] + ',' + m[4] + ',0,' + m[7] + ',0,0,1,0,' + m[2] + ',' + m[5] + ',0,1)';\n  }\n\n  function applyQuads() {\n    [].slice.call(document.querySelectorAll('[data-rlp-quad]')).forEach(applyQuad);\n  }\n\n  /* Paint an <img> only once the artwork has actually decoded, so a dead link leaves the\n     placeholder in place instead of painting a broken image. */\n  function paint(img, src) {\n    if (!img) return;\n    var probe = new Image();\n    probe.onload = function () {\n      img.src = src;\n      img.hidden = false;\n      var ph = img.parentNode && img.parentNode.querySelector('[data-rlp-ph]');\n      if (ph) ph.hidden = true;\n    };\n    probe.src = src;\n  }\n\n  /* ---- contrast ------------------------------------------------------------------\n   * imgix will report an image's dominant colours as JSON, so we can choose a garment\n   * colour that the customer's artwork will actually read against: dark art gets a light\n   * shirt, light art gets a dark one. One small request, and the page never depends on\n   * it \u2014 if it fails, every tile keeps the first colour in its own list.\n   */\n  function luminance(hex) {\n    var h = hex.replace('#', '');\n    if (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];\n    var n = parseInt(h, 16);\n    var c = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map(function (v) {\n      v /= 255;\n      return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n    });\n    return 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n  }\n\n  function contrastRatio(a, b) {\n    var la = luminance(a), lb = luminance(b);\n    return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n  }\n\n  function hexToRgb(hex) {\n    var h = hex.replace('#', '');\n    if (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];\n    var n = parseInt(h, 16);\n    return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n  }\n\n  function rgbDistance(a, b) {\n    var x = hexToRgb(a), y = hexToRgb(b);\n    return Math.sqrt(Math.pow(x[0]-y[0], 2) + Math.pow(x[1]-y[1], 2) + Math.pow(x[2]-y[2], 2));\n  }\n\n  /* Aidan, 2026-09-02: \"if the image contains white and the background or border is white\n   * then it should be a different colour, and not contrast with any of the colours.\"\n   *\n   * Two separate requirements, and they pull against each other:\n   *   1. SEPARATION. White in the artwork \u2014 or a white die-cut border \u2014 vanishes on a white\n   *      substrate. So if the design carries white, the substrate must not be near-white.\n   *   2. NO CLASH. The substrate must not be a colour the artwork already uses, or the\n   *      design stops reading as a separate object printed on top of it.\n   * Maximum contrast alone satisfies neither: it lands on black every time.\n   */\n  function chooseSubstrate(options, artColours, hasWhite) {\n    var MIN_SEPARATION = 60;   /* rgb distance before two colours read as the same */\n    var scored = options.map(function (c) {\n      var nearestArt = artColours.length\n        ? Math.min.apply(null, artColours.map(function (a) { return rgbDistance(c, a); }))\n        : 999;\n      return { hex: c, nearestArt: nearestArt, lum: luminance(c) };\n    });\n\n    var ok = scored.filter(function (o) {\n      if (o.nearestArt < MIN_SEPARATION) return false;          /* clashes with the artwork */\n      if (hasWhite && o.lum > 0.62) return false;               /* white would disappear */\n      return true;\n    });\n    if (!ok.length) ok = scored.filter(function (o) { return !hasWhite || o.lum <= 0.62; });\n    if (!ok.length) ok = scored;\n\n    /* Among what is left, the one that sits furthest from every colour in the artwork \u2014\n       a clean separation rather than the most violent contrast. */\n    ok.sort(function (a, b) { return b.nearestArt - a.nearestArt; });\n    return ok[0].hex;\n  }\n\n  /* Content-aware backdrop and cut line.\n   *\n   * The substrate rule above only helps where there IS a substrate to recolour \u2014 the tee.\n   * A die-cut sticker sits on a fixed backdrop with a white cut line around it, so a white\n   * design disappears twice over: into the backdrop and into its own outline. Both have to\n   * respond to the artwork.\n   */\n  function applyContrastSurfaces(artColours, hasWhite) {\n    var light = hasWhite;\n    if (!light && artColours && artColours.length) {\n      var avg = artColours.reduce(function (a, c) { return a + luminance(c); }, 0) / artColours.length;\n      /* Raised from 0.55 with the pixel threshold above, and for the same reason. imgix\n         reports DOMINANT colours, so a design with one pale colour among five averaged\n         its way over 0.55 and flipped every surface dark. */\n      light = avg > 0.72;\n    }\n    [].slice.call(document.querySelectorAll('.rlpg-shot')).forEach(function (shot) {\n      if (light) {\n        /* a slate backdrop and a charcoal cut line, so white reads as white */\n        shot.style.setProperty('--dc1', '#6b7280');\n        shot.style.setProperty('--dc2', '#4b5563');\n        shot.style.setProperty('--dc3', '#374151');\n        shot.style.setProperty('--cut', '#2b3138');\n      } else {\n        shot.style.removeProperty('--dc1');\n        shot.style.removeProperty('--dc2');\n        shot.style.removeProperty('--dc3');\n        shot.style.removeProperty('--cut');\n      }\n      shot.setAttribute('data-rlp-artlight', light ? '1' : '0');\n    });\n\n    /* The hero panel is the first thing they see, so it matters most. */\n    [].slice.call(document.querySelectorAll('[data-rlp-artpanel]')).forEach(function (panel) {\n      if (light) {\n        panel.style.setProperty('--art-bg', '#2f363d');\n        panel.style.setProperty('--art-check', '#3d454e');\n        panel.style.setProperty('--art-edge', '#7c8794');\n      } else {\n        panel.style.removeProperty('--art-bg');\n        panel.style.removeProperty('--art-check');\n        panel.style.removeProperty('--art-edge');\n      }\n      panel.setAttribute('data-rlp-artlight', light ? '1' : '0');\n    });\n  }\n\n  function applyColours(artColours, hasWhite) {\n    artColours = artColours || [];\n    applyContrastSurfaces(artColours, hasWhite);\n    [].slice.call(document.querySelectorAll('[data-rlp-recolour]')).forEach(function (shot) {\n      var options = shot.getAttribute('data-rlp-recolour').split(',')\n        .map(function (s) { return s.trim(); }).filter(Boolean);\n      if (!options.length) return;\n      var pick = artColours.length ? chooseSubstrate(options, artColours, hasWhite) : options[0];\n      var fill = shot.querySelector('[data-rlp-fill]');\n      if (fill) fill.style.setProperty('--fill', pick);\n      shot.setAttribute('data-rlp-picked', pick);\n    });\n  }\n\n  /* Does the artwork actually contain white, and how much?\n   *\n   * This is not the same question as \"is the artwork light\". The Warrior Elite logo is\n   * mostly purple \u2014 light-on-average says no \u2014 but it carries white lettering that vanishes\n   * on a white backdrop. imgix's palette only reports DOMINANT colours, so white inside a\n   * purple logo never shows up there. The only reliable answer is the pixels, and imgix\n   * serves them with access-control-allow-origin:*, so canvas can read them.\n   */\n  function measureArtwork(src, cb) {\n    var im = new Image();\n    im.crossOrigin = 'anonymous';\n    im.onload = function () {\n      try {\n        var n = 96, cv = document.createElement('canvas');\n        cv.width = n; cv.height = n;\n        var g = cv.getContext('2d');\n        g.drawImage(im, 0, 0, n, n);\n        var d = g.getImageData(0, 0, n, n).data;\n        var opaque = 0, white = 0, lumSum = 0;\n        for (var i = 0; i < d.length; i += 4) {\n          if (d[i + 3] < 40) continue;\n          opaque++;\n          var r = d[i], gg = d[i + 1], b = d[i + 2];\n          var l = (0.2126 * r + 0.7152 * gg + 0.0722 * b) / 255;\n          lumSum += l;\n          /* bright AND near-neutral \u2014 coloured brights are not the problem */\n          if (l > 0.82 && (Math.max(r, gg, b) - Math.min(r, gg, b)) < 34) white++;\n        }\n        if (!opaque) return cb(null);\n        cb({ whiteShare: white / opaque, avgLum: lumSum / opaque });\n      } catch (e) { cb(null); }\n    };\n    im.onerror = function () { cb(null); };\n    im.src = src;\n  }\n\n  function recolour(file) {\n    /* Paint the fallback immediately so nothing waits on the network. */\n    applyColours(null, false);\n    if (!/(^|\\.)imgix\\.net\\//.test(file)) return;\n    var url = file + (file.indexOf('?') > -1 ? '&' : '?') + 'palette=json&colors=6';\n    fetch(url, { mode: 'cors' })\n      .then(function (r) { return r.ok ? r.json() : null; })\n      .then(function (j) {\n        if (!j) return;\n        var cols = (j.colors || []).map(function (c) { return c.hex; }).filter(Boolean);\n        var d = j.dominant_colors || {};\n        ['vibrant', 'vibrant_light', 'vibrant_dark', 'muted', 'muted_light', 'muted_dark']\n          .forEach(function (k) { if (d[k] && d[k].hex) cols.push(d[k].hex); });\n        if (!cols.length) return;\n        /* A die-cut border is white and so is a lot of artwork \u2014 either way, if white is in\n           there it needs something other than white behind it. */\n        /* Ask the pixels, not the palette.\n         *\n         * The bar used to be 4% near-white or 0.62 average luminance, which is barely any\n         * white at all \u2014 a design with cyan lettering and one white truck in it tripped it,\n         * and every surface then flipped to its dark treatment: slate checker behind the\n         * hero artwork, charcoal cut line on the stickers. Aidan, 2026-09-02, on exactly\n         * that artwork: \"there's no need to make it darker for this artwork.\"\n         *\n         * The question is not \"is there any white in here\", it is \"is this design so\n         * white-dominated that a white backdrop or a white cut line would swallow it\".\n         * That needs white to be most of the design, not a detail in it. A white detail\n         * inside a coloured design is defined by the colour around it and reads fine. */\n        measureArtwork(display(file, 240), function (m) {\n          var hasWhite = m ? (m.whiteShare > 0.30 || m.avgLum > 0.78)\n                           : cols.some(function (c) { return luminance(c) > 0.75; });\n          applyColours(cols, hasWhite);\n        });\n      })\n      .catch(function () { /* fallback colour already painted */ });\n  }\n\n  /* ---- patch tile: don't wipe over a hole -------------------------------------------\n   * The patch tile's before/after wipe is CSS, so it starts on schedule. Its two layers\n   * are lazy images, so they don't. Aidan hit the result on live 2026-09-08: scroll the\n   * tile into view and the wipe is already running against a layer that hasn't downloaded,\n   * so the tile sits on flat artwork looking frozen until the 71 KB patch lands.\n   *\n   * Layer order cannot fix this by itself \u2014 whichever image is missing, the wipe is\n   * passing over a hole. So the animation is held behind .is-ready and only starts once\n   * both layers have actually decoded.\n   *\n   * A failed image counts as done rather than hanging. A broken layer should leave the tile\n   * static, which is what it already is, not wedge the other one forever.\n   */\n  function startPatchWipe() {\n    [].slice.call(document.querySelectorAll('.rlpg-patchgen')).forEach(function (gen) {\n      var imgs = [].slice.call(gen.querySelectorAll('img'));\n      if (!imgs.length) return;\n      var left = imgs.length;\n      var done = function () { if (--left === 0) gen.classList.add('is-ready'); };\n      imgs.forEach(function (img) {\n        if (img.complete && img.naturalWidth) { done(); return; }\n        img.addEventListener('load', done, { once: true });\n        img.addEventListener('error', done, { once: true });\n      });\n    });\n  }\n\n  /* ---- order links: ?reorder=NT-\u2026&item=N ----------------------------------------------\n   * The same link shape as the My Orders reorder deep link (Justin 2026-10-12), so one\n   * order reference drives both pages:\n   *\n   *   /pages/my-design?reorder=NT-2208023&item=2\n   *\n   * reorder accepts NT-2208023, 2208023 or #NT-2208023. item=N is Shopify's Nth line of the\n   * order \u2014 every line, transfers, blanks, JTL and supplies alike, in Shopify's order \u2014 the\n   * same count the My Orders deep link uses since 3660f1ce (Justin 2026-10-13), so one link\n   * means the same line on both pages. line=<Shopify line item id> is the exact\n   * alternative. No item = the whole order, shown with its first line that carries a design.\n   *\n   * There is no order API on the storefront, so the design is read from the customer's own\n   * My Orders HTML: the rows snippets/order-line-items.liquid renders, 48 orders a page,\n   * following its .ao-next-url pager until the order turns up. Only the signed-in owner's\n   * orders are in that HTML, so nobody can view someone else's order by editing the number.\n   * Measured 2026-10-12 on NT-2208023: first page, about 1s.\n   */\n  var lookupSeq = 0;\n\n  function orderRef(qs) {\n    var raw = (qs.get('reorder') || '').trim();\n    var key = raw.toLowerCase().replace(/^#/, '').replace(/\\s+/g, '');\n    if (/^\\d+$/.test(key)) key = 'nt-' + key;\n    if (!key || !/^[a-z0-9-]+$/.test(key)) return null;\n    var item = parseInt(qs.get('item'), 10);\n    return {\n      raw: raw.replace(/^#/, ''),\n      key: key,   /* matches data-order-id, which is order.name | handleize */\n      item: item > 0 ? item : null,\n      line: (qs.get('line') || '').replace(/\\D/g, '') || null\n    };\n  }\n\n  function reorderUrl(ref, qs) {\n    return buildDestinationUrl('/pages/welcome?tab=my-orders&reorder=' + encodeURIComponent(ref.raw) +\n      (ref.item ? '&item=' + ref.item : ref.line ? '&line=' + ref.line : ''), qs);\n  }\n\n  /* The design is the line's upload property, read from the same hidden JSON the Reorder\n     buttons add to the cart, so the page shows the file that would actually be reordered.\n     Not the thumbnail: that is a resized _cartImg copy. */\n  function uploadFrom(textarea) {\n    var props = {};\n    try { props = JSON.parse(((textarea && textarea.value) || '').trim() || '{}'); } catch (e) { props = {}; }\n    var file = null;\n    Object.keys(props).forEach(function (k) {\n      if (!file && /^_?upload\\b/i.test(k.trim()) && typeof props[k] === 'string' && props[k]) file = props[k];\n    });\n    return file;\n  }\n\n  function cleanFile(file) {\n    if (file && file.indexOf('https%3A%2F%2F') === 0) file = decodeURIComponent(file);\n    return file ? file.replace(/&amp;/g, '&') : null;\n  }\n\n  /* Every line of one order, in Shopify's order (snippets/all-orders-row.liquid). Built from\n     the order's own data rather than the \"view all\" list, because a ONE-line order renders\n     no per-line list at all \u2014 reading only that list found nothing on the most common kind\n     of order. Three parallel sources, all from `for li in order.line_items` in that snippet:\n       - data-lineitem-ids on the order's Reorder button: the line ids, the list item=N counts\n       - .all-orders__reorder-wrap .ao-propitems: each line's reorder JSON, same order\n       - .ao-line-item (multi-line orders only): per-line name, and the preview thumb\n     An order whose Reorder is hidden (cancelled, sample-only, broken preview) has no button\n     and no propitems, so it falls back to the line list, or the thumb strip for one line. */\n  function readOrderRow(row) {\n    var main = row.querySelector('.all-orders__reorder-btn');\n    var ids = main ? String(main.getAttribute('data-lineitem-ids') || '').split(',').filter(Boolean) : [];\n    var propitems = [].slice.call(row.querySelectorAll('.all-orders__reorder-wrap .ao-propitems'));\n    var listed = [].slice.call(row.querySelectorAll('.ao-line-item'));\n    var stripThumbs = [].slice.call(row.querySelectorAll('.ao-thumb-strip img.ao-preview-thumb'));\n    var productEl = row.querySelector('.all-orders__order-product');\n    var n = ids.length || listed.length || (stripThumbs.length ? 1 : 0);\n    var lines = [];\n    for (var i = 0; i < n; i++) {\n      var li = listed[i] || null;\n      var liBtn = li && li.querySelector('.ao-li-reorder-btn');\n      var file = uploadFrom(propitems[i]) || uploadFrom(li && li.querySelector('.ao-li-propdata'));\n      var thumb = li ? li.querySelector('img.ao-preview-thumb') : (n === 1 ? stripThumbs[0] : null);\n      if (!file && thumb) file = thumb.getAttribute('data-preview-src');\n      var nameEl = li && li.querySelector('.ao-li-name');\n      lines.push({\n        id: ids[i] || (liBtn && liBtn.getAttribute('data-lineitem-id')) || null,\n        name: nameEl ? nameEl.textContent.trim() : (n === 1 && productEl ? productEl.textContent.trim() : ''),\n        file: cleanFile(file),\n        canReorder: !!main\n      });\n    }\n    return lines;\n  }\n\n  function findOrderLine(ref, cb) {\n    var pages = 0;\n    (function step(url) {\n      if (!url || pages++ >= 60) { cb(null); return; }\n      fetch(url, { credentials: 'same-origin', headers: { 'Accept': 'text/html' } })\n        .then(function (r) { return r.ok ? r.text() : ''; })\n        .then(function (html) {\n          var doc = new DOMParser().parseFromString(html, 'text/html');\n          /* desktop row only: the -m mobile twin repeats the same lines */\n          var row = doc.querySelector('.ao-order-row[data-order-id=\"' + ref.key + '\"]');\n          if (row) {\n            var lines = readOrderRow(row);\n            var hit = null;\n            if (ref.line) lines.forEach(function (l) { if (!hit && l.id === ref.line) hit = l; });\n            else if (ref.item) hit = lines[ref.item - 1] || null;\n            else lines.forEach(function (l) { if (!hit && l.file) hit = l; });\n            cb(hit);\n            return;\n          }\n          var next = doc.querySelector('.ao-next-url');\n          step(next ? next.getAttribute('data-next-url') : null);\n        })\n        .catch(function () { cb(null); });\n    })('/pages/my-orders');\n  }\n\n  function init() {\n    /* Before the ?file= guard below. Not because the tile is visible without a design \u2014\n       measured 2026-09-08, it is not: no file means the whole [data-rlp-main] block is\n       hidden and the empty state shows instead. It sits here because this tile's animation\n       has nothing to do with the customer's artwork, so it should not be entangled with\n       the early return that exists to stop artwork work. */\n    startPatchWipe();\n\n    var qs = params();\n    /* Un-escape &amp; back to &. Measured 2026-09-03: 2.8% of recent uploads (168 of 5,942)\n       have the HTML-escaped form stored in the Shopify line-item property, e.g.\n       \"?trim=colorUnlessAlpha&amp;bg-remove=true\". imgix then reads the parameter as\n       \"amp;bg-remove\" and silently skips it, so the customer's reorder shows the design\n       WITHOUT the background removal they paid for. Bad data upstream, not something this\n       page or the email created \u2014 repaired here because the page is the last thing that\n       touches the URL before imgix sees it.\n\n       Safe to do blindly: all 166 occurrences sit in the query string and ZERO are in the\n       filename, so there is no real \"&amp;\" in a name to mangle. \"&amp;\" is never valid\n       inside a query string anyway. */\n    var file = (qs.get('file') || '').replace(/&amp;/g, '&') || null;\n    /* Take the first comma-separated token. A templating system that emits a LIST where a\n       single value was meant produces \"handle,handle\" or, seen 2026-09-03,\n       \"indoor-floor-graphics,https://ninjatransfers\" \u2014 which matches no tile, so the page\n       silently fell back to the default product. Klaviyo can do this, so the page absorbs\n       it rather than depending on the email being perfect. Also strip anything that is not\n       a valid Shopify handle character, so a stray fragment can never reach a URL. */\n    var from = (qs.get('from') || '').split(',')[0].trim().toLowerCase()\n                 .replace(/[^a-z0-9-]/g, '');\n\n    /* Preview fallback. The page is a draft, so the theme editor is the only thing that\n       renders it \u2014 and the editor gives no way to edit the preview URL. The hero section\n       has a \"Test artwork URL\" field for that. A real ?file= always wins. */\n    if (!file) {\n      var tf = document.querySelector('[data-rlp-testfile]');\n      if (tf) {\n        var v = (tf.getAttribute('data-rlp-testfile') || '').trim();\n        if (v) file = v;\n      }\n    }\n\n    var ref = orderRef(qs);\n    var seq = ++lookupSeq;\n\n    /* ?reorder= with no ?file=: the design comes from the order itself (see findOrderLine).\n       Order data is only visible to its owner, so a signed-out visitor goes to log in and\n       comes straight back to this same URL. The card shows while the lookup runs so the\n       page does not flash the \"could not find\" state first. */\n    if (!file && ref) {\n      var gate = document.querySelector('[data-rlp-customer]');\n      if (gate && gate.getAttribute('data-rlp-customer') !== '1') {\n        window.location.replace('/customer_authentication/login?return_to=' +\n          encodeURIComponent(window.location.pathname + window.location.search));\n        return;\n      }\n      showMain(true);\n      [].slice.call(document.querySelectorAll('[data-rlp-ph]')).forEach(function (el) {\n        el.textContent = 'Finding your design\u2026';\n      });\n      findOrderLine(ref, function (line) {\n        if (seq !== lookupSeq) return;   /* a newer init (theme editor reload) owns the page */\n        if (!line || !line.file) { showMain(false); return; }\n        render(line.file, from, qs, ref, line);\n      });\n      return;\n    }\n\n    if (!file) { showMain(false); return; }\n    render(file, from, qs, ref, null);\n  }\n\n  function showMain(on) {\n    [].slice.call(document.querySelectorAll('[data-rlp-main]')).forEach(function (el) { el.hidden = !on; });\n    [].slice.call(document.querySelectorAll('[data-rlp-empty]')).forEach(function (el) { el.hidden = on; });\n  }\n\n  /* `line` is the order line findOrderLine resolved, or null when ?file= supplied the design. */\n  function render(file, from, qs, ref, line) {\n    showMain(true);\n\n    /* ---- hero artwork ---- */\n    [].slice.call(document.querySelectorAll('[data-rlp-art]')).forEach(function (img) {\n      paint(img, display(file, 900));\n    });\n\n    applyQuads();\n    /* Tiles are fluid, so the pixel terms in each matrix have to be recomputed on resize. */\n    if (!window.__rlpQuadResize) {\n      window.__rlpQuadResize = true;\n      var t = null;\n      window.addEventListener('resize', function () {\n        clearTimeout(t); t = setTimeout(applyQuads, 120);\n      });\n    }\n\n    /* ---- the customer's design, composited onto each product photo ---- */\n    [].slice.call(document.querySelectorAll('[data-rlp-tile-art]')).forEach(function (img) {\n      paint(img, display(file, 700));\n    });\n\n    /* ---- filename line ---- */\n    [].slice.call(document.querySelectorAll('[data-rlp-filename]')).forEach(function (el) {\n      el.textContent = decodeURIComponent(String(file).split('?')[0].split('/').pop() || '');\n    });\n\n    /* ---- stamp every tile ---- */\n    var tiles = [].slice.call(document.querySelectorAll('[data-rlp-tile][data-handle]'));\n    tiles.forEach(function (tile) {\n      tile.href = productUrl(tile.getAttribute('data-handle'), file, qs);\n    });\n\n    /* ---- tiles that leave this store ----\n     * The patch tile goes to ninjapatches.com, which is a different Shopify store, so\n     * productUrl() cannot build its link \u2014 there is no local product and no handle.\n     * The destination is a whole URL set in the editor and the artwork is appended to it.\n     *\n     * destinationFile(), not display(): the display helper adds w= and auto=format to\n     * shrink what THIS page paints, and the receiving tool needs the print-resolution\n     * original. Same rule the product tiles follow.\n     *\n     * An existing ?file= on the configured URL wins, so a hardcoded test artwork in the\n     * editor field still works when no design is in the address bar.\n     */\n    [].slice.call(document.querySelectorAll('[data-rlp-extlink]')).forEach(function (tile) {\n      var base = (tile.getAttribute('data-rlp-extlink') || '').trim();\n      if (!base) return;\n      var url;\n      try { url = new URL(base, window.location.origin); } catch (e) { return; }\n      if (!url.searchParams.has('file')) url.searchParams.set('file', destinationFile(file));\n      tile.href = url.toString();\n    });\n\n    /* ---- promote the product they already bought, matched on HANDLE not name ---- */\n    /* Three separate live products are all titled \"DTF Transfers By Size\":\n       dtf-transfers (the flagship, and the tile on this page), plus\n       dtf-transfers-by-size-v2 and dtf-transfers-by-size-power. All three run the\n       same v4 engine and are priced the same (Aidan, 2026-09-03), so a reorder lands\n       on the flagship whichever one they bought from. Without this, an order carrying\n       either of the other two failed to match: the CTA fell back and the DTF tile\n       stayed in the grid, offering the customer what they had just bought.\n\n       Aliased here rather than in the Klaviyo template so the rule sits next to the\n       tile list it depends on \u2014 the email passes product.handle through untouched and\n       has no lookup table to drift out of sync.\n\n       This is a GROUP, not a lookup table, on purpose. The first version mapped each\n       handle to a hardcoded destination \u2014 which stored \"who is the DTF tile\" in two\n       places, here and in the template. The moment the tile changed, this went stale\n       and silently stopped matching, which is exactly what happened on 2026-09-03.\n       Listing the equivalents and resolving against the tiles actually on the page\n       keeps ONE source of truth: the template. Swap the tile in the editor and this\n       follows on its own. To cover another product family, add a row. */\n    var EQUIVALENT = [\n      ['dtf-transfers', 'dtf-transfers-by-size-v2', 'dtf-transfers-by-size-power']\n    ];\n    if (from) {\n      for (var g = 0; g < EQUIVALENT.length; g++) {\n        if (EQUIVALENT[g].indexOf(from) === -1) continue;\n        for (var t = 0; t < tiles.length; t++) {\n          var th = tiles[t].getAttribute('data-handle');\n          if (EQUIVALENT[g].indexOf(th) !== -1) { from = th; break; }\n        }\n        break;\n      }\n    }\n\n    var lead = null;\n    if (from) {\n      for (var i = 0; i < tiles.length; i++) {\n        if (tiles[i].getAttribute('data-handle') === from) { lead = tiles[i]; break; }\n      }\n      if (lead) lead.hidden = true;\n    }\n\n    var ctas = [].slice.call(document.querySelectorAll('[data-rlp-primary]'));\n\n    /* A link that names an order reorders THAT order: the button is the My Orders deep\n       link (sections/my-orders-content.liquid, aoReorderDeepLink), which presses the\n       line's own Reorder button \u2014 same cart lines, notes and print-ready file as a real\n       click. When the order is known NOT to be reorderable there (My Orders hides Reorder\n       for cancelled, sample-only or broken-preview orders, so the deep link would land on a\n       button that is not there), the button is the product-page link instead. */\n    function orderCta(cta, l) {\n      if (l && !l.canReorder) { productCta(cta); return; }\n      cta.hidden = false;\n      cta.href = reorderUrl(ref, qs);\n      var rlabel = cta.querySelector('[data-rlp-primary-label]');\n      if (rlabel) {\n        rlabel.textContent = !(ref.item || ref.line) ? 'Reorder this order'\n          : (l && l.name) ? 'Reorder ' + l.name : 'Reorder this design';\n      }\n    }\n\n    function productCta(cta) {\n      cta.hidden = false;\n      /* Only ever point at a handle that IS a tile on this page. Using `from` raw meant\n         an unknown value went straight into the CTA href, so a typo or a retired handle\n         in the email sent every recipient to a 404 \u2014 and nothing on the page looked\n         wrong, so it would ship unnoticed. `lead` is set only when `from` matched a\n         real tile, so falling through to the first tile keeps the button valid. */\n      var handle = (lead && lead.getAttribute('data-handle')) ||\n                   (tiles[0] && tiles[0].getAttribute('data-handle')) ||\n                   cta.getAttribute('data-fallback-handle');\n      if (!handle) return;\n      cta.href = productUrl(handle, file, qs);\n\n      var label = cta.querySelector('[data-rlp-primary-label]');\n      if (!label) return;\n      var name = lead ? (lead.querySelector('[data-rlp-tile-name]') || {}).textContent : '';\n      if (!name) name = cta.getAttribute('data-fallback-name') || '';\n      name = (name || '').trim();\n      if (name) label.textContent = (cta.getAttribute('data-prefix') || '').trim() + ' ' + name;\n    }\n\n    ctas.forEach(function (cta) { if (ref) orderCta(cta, line); else productCta(cta); });\n\n    /* ?file= AND ?reorder=: the design came from the link, so the order was never looked\n       up and nothing has confirmed the deep link will find it. If it cannot \u2014 another\n       account, Reorder hidden on that order, a bad line id from a template \u2014 the customer\n       lands on My Orders with nothing added and no message. So for a signed-in customer,\n       check in the background: found and reorderable keeps the exact reorder (and gains the\n       product name); anything else falls back to the product-page link this page used\n       before order links existed. Signed out there is nothing to check yet; the deep link\n       sends them to log in, which is usually the right account. */\n    if (ref && !line) {\n      var gate = document.querySelector('[data-rlp-customer]');\n      if (gate && gate.getAttribute('data-rlp-customer') === '1') {\n        var seq = lookupSeq;\n        findOrderLine(ref, function (found) {\n          if (seq !== lookupSeq) return;\n          ctas.forEach(function (cta) {\n            if (found && found.canReorder) orderCta(cta, found); else productCta(cta);\n          });\n        });\n      }\n    }\n\n    /* ---- pick a product colour that contrasts with the artwork ---- */\n    recolour(file);\n\n    /* ---- {count} in the grid note ---- */\n    [].slice.call(document.querySelectorAll('[data-rlp-count]')).forEach(function (el) {\n      /* Scoped to the group the note sits in. Counting document-wide reported 15 in a group\n         of 10 once the grid was split into transfers / other / specialty. */\n      var scope = el.closest('.rlpg') || document;\n      var own = [].slice.call(scope.querySelectorAll('[data-rlp-tile]'));\n      var shown = own.filter(function (t) { return !t.hidden; });\n      var tpl = el.getAttribute('data-rlp-count-template') || el.textContent;\n      el.setAttribute('data-rlp-count-template', tpl);\n      var text = tpl.replace('{count}', String(shown.length));\n      if (shown.length === own.length) text = text.replace(' other ', ' ');\n      el.textContent = text;\n    });\n  }\n\n  /* ---- dev bar --------------------------------------------------------------------\n   * Add ?dev=1 to the page URL to get a strip for trying different customer artwork:\n   * a set of real uploads covering the shapes that break layouts (tall, wide, banner,\n   * tiny, opaque, white-on-white), plus a field for pasting any artwork URL.\n   *\n   * Gated on ?dev=1 so a customer can never see it, and the preset list lives in its own\n   * asset (reorder-testdesigns.json) so it is one file to delete before this ever goes\n   * anywhere near live.\n   */\n  function devBar() {\n    if (params().get('dev') !== '1') return;\n    if (document.querySelector('[data-rlp-devbar]')) return;\n\n    var bar = document.createElement('div');\n    bar.setAttribute('data-rlp-devbar', '');\n    bar.style.cssText = 'position:sticky;top:0;z-index:99999;background:#111315;color:#fff;' +\n      'padding:10px 14px;font:13px/1.4 system-ui,sans-serif;display:flex;gap:8px;' +\n      'flex-wrap:wrap;align-items:center';\n\n    var tag = document.createElement('strong');\n    tag.textContent = 'Test artwork:';\n    tag.style.cssText = 'margin-right:4px';\n    bar.appendChild(tag);\n\n    function go(url) {\n      var qs = params();\n      qs.set('file', url);\n      qs.set('dev', '1');\n      window.location.search = qs.toString();\n    }\n\n    function button(label, url) {\n      var el = document.createElement('button');\n      el.type = 'button';\n      el.textContent = label;\n      var current = params().get('file') === url;\n      el.style.cssText = 'cursor:pointer;border:1px solid ' + (current ? '#019AFF' : '#3a4048') +\n        ';background:' + (current ? '#019AFF' : '#1d2228') + ';color:#fff;border-radius:999px;' +\n        'padding:5px 12px;font:600 12px system-ui,sans-serif';\n      el.addEventListener('click', function () { go(url); });\n      return el;\n    }\n\n    var input = document.createElement('input');\n    input.type = 'url';\n    input.placeholder = 'paste any artwork URL and press enter';\n    input.style.cssText = 'flex:1;min-width:240px;border:1px solid #3a4048;background:#1d2228;' +\n      'color:#fff;border-radius:6px;padding:6px 10px;font:12px system-ui,sans-serif';\n    input.addEventListener('keydown', function (e) {\n      if (e.key === 'Enter' && input.value.trim()) go(input.value.trim());\n    });\n\n    document.body.insertBefore(bar, document.body.firstChild);\n\n    var src = document.querySelector('[data-rlp-testdesigns]');\n    fetch((src && src.getAttribute('data-rlp-testdesigns')) || '/assets/reorder-testdesigns.json')\n      .then(function (r) { return r.ok ? r.json() : []; })\n      .then(function (list) {\n        list.forEach(function (d) { bar.appendChild(button(d.label, d.url)); });\n        bar.appendChild(input);\n      })\n      .catch(function () { bar.appendChild(input); });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () { init(); devBar(); });\n  } else {\n    init();\n    devBar();\n  }\n  /* Theme editor re-renders a section without a page load. */\n  document.addEventListener('shopify:section:load', init);\n})();\n"],
  "mappings": "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",
  "names": ["t"]
}
