{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/tn-motor.js?x=27149"],
  "sourcesContent": ["/* GEGENEREERD door scripts/bouw-motor.py uit overdracht/productmatrix/Productcel2.dc.html. Niet met de hand wijzigen. */\n/* Tice Nits productmotor: kleine runtime voor de sjabloontaal van het canvas\n   (sc-for, sc-if, {{pad}}, onClick/onInput/onChange/onFocus). De logica komt letterlijk uit\n   Productcel2.dc.html; dit bestand vervangt enkel de canvas-runtime en voegt opladen en\n   winkelmand toe. Gegenereerd samen met assets/tn-motor.js door scripts/bouw-motor.py. */\n(function () {\n  'use strict';\n\n  /* ---------- sjabloon compileren ---------- */\n  var VOID = { img: 1, input: 1, br: 1, hr: 1, source: 1, meta: 1, link: 1 };\n  var BOOL = { checked: 1, disabled: 1, selected: 1, hidden: 1, readonly: 1, required: 1 };\n  var EVENTS = { onclick: 'click', oninput: 'input', onchange: 'change', onfocus: 'focus' };\n\n  function esc(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n  }\n  function lookup(scope, path) {\n    var parts = path.trim().split('.');\n    var head = parts[0], cur, i;\n    for (i = scope.length - 1; i >= 0; i--) { if (scope[i] && Object.prototype.hasOwnProperty.call(scope[i], head)) { cur = scope[i][head]; break; } }\n    for (i = 1; i < parts.length && cur !== undefined && cur !== null; i++) cur = cur[parts[i]];\n    return cur;\n  }\n  function interp(str) {\n    var out = [], re = /\\{\\{([^}]+)\\}\\}/g, last = 0, m;\n    while ((m = re.exec(str))) { if (m.index > last) out.push(str.slice(last, m.index)); out.push({ p: m[1] }); last = re.lastIndex; }\n    if (last < str.length) out.push(str.slice(last));\n    return out;\n  }\n  /* ---------- foto's via het Shopify-CDN in de juiste breedte ----------\n     Een <img> met hint-sizes en een Shopify-bestands-URL krijgt ?width= en een srcset.\n     Dezelfde breedtes staan in sections/tn-product.liquid (eerste foto, server-side). */\n  var CDN_RE = /^(https:)?\\/\\/cdn\\.shopify\\.com\\/s\\/files\\/[^?#]+\\.(jpe?g|png|webp|gif)$/i;\n  var CDN_W = [160, 240, 320, 480, 640, 800, 960, 1200];\n  function cdnImg(url) {\n    if (!CDN_RE.test(url)) return null;\n    return { src: url + '?width=800', srcset: CDN_W.map(function (w) { return url + '?width=' + w + ' ' + w + 'w'; }).join(', ') };\n  }\n\n  function single(parts) { return parts.length === 1 && typeof parts[0] === 'object' ? parts[0].p : null; }\n  function evalParts(parts, scope) {\n    var s = '';\n    for (var i = 0; i < parts.length; i++) {\n      if (typeof parts[i] === 'string') s += parts[i];\n      else { var v = lookup(scope, parts[i].p); s += (v === undefined || v === null || v === false) ? '' : v; }\n    }\n    return s;\n  }\n\n  /* ---------- vertaling (FR/EN): enkel wat de klant leest ----------\n     assets/tn-motor-i18n.js zet window.TN_I18N (niet op NL). Tekst en placeholder/aria-label/title/alt gaan door\n     TN_I18N.tr(); value, src en klassen nooit. Wat de klant zelf typt (SKIP) vertalen we niet. */\n  var TA = { placeholder: 1, 'aria-label': 1, title: 1, alt: 1 };\n  var SKIP = { 'f.txt': 1, 'm.line1': 1, 'm.line2': 1, romanValue: 1, 'c.a': 1, 'c.b': 1 };\n  function evalT(parts, scope) {\n    var I = window.TN_I18N, s = evalParts(parts, scope), i, w, own = false;\n    if (!I || !I.tr || !s) return s;\n    for (i = 0; i < parts.length; i++) if (typeof parts[i] === 'object' && SKIP[parts[i].p.trim()]) own = true;\n    if (!own) { w = I.tr(s); if (w !== null) return w; }\n    if (parts.length < 2 && !own) return s;\n    var out = '';\n    for (i = 0; i < parts.length; i++) {\n      if (typeof parts[i] === 'string') { w = I.tr(parts[i]); out += w !== null ? w : parts[i]; continue; }\n      var v = lookup(scope, parts[i].p);\n      if (v === undefined || v === null || v === false) continue;\n      if (typeof v === 'string' && !SKIP[parts[i].p.trim()]) { w = I.tr(v); out += w !== null ? w : v; } else out += v;\n    }\n    return out;\n  }\n\n  function compile(node) {\n    if (node.nodeType === 3) {\n      var parts = interp(node.nodeValue);\n      return function (scope, ctx) { return esc(evalT(parts, scope)); };\n    }\n    if (node.nodeType !== 1) return function () { return ''; };\n    var tag = node.tagName.toLowerCase();\n    var kids = [].map.call(node.childNodes, compile);\n    function inner(scope, ctx) { var s = ''; for (var i = 0; i < kids.length; i++) s += kids[i](scope, ctx); return s; }\n\n    if (tag === 'sc-for') {\n      var lp = single(interp(node.getAttribute('list'))), as = node.getAttribute('as');\n      return function (scope, ctx) {\n        var list = lookup(scope, lp) || [], s = '';\n        for (var i = 0; i < list.length; i++) { var o = {}; o[as] = list[i]; o.index = i; scope.push(o); s += inner(scope, ctx); scope.pop(); }\n        return s;\n      };\n    }\n    if (tag === 'sc-if') {\n      var vp = single(interp(node.getAttribute('value')));\n      return function (scope, ctx) { var v = lookup(scope, vp); return (v && v !== 'false') ? inner(scope, ctx) : ''; };\n    }\n    var sizes = tag === 'img' ? node.getAttribute('hint-sizes') : null;\n    var attrs = [].map.call(node.attributes, function (a) {\n      var n = a.name.toLowerCase();\n      if (n.indexOf('hint-') === 0) return null;\n      if (EVENTS[n]) return { ev: EVENTS[n], p: single(interp(a.value)) };\n      return { n: a.name, parts: interp(a.value) };\n    }).filter(Boolean);\n    return function (scope, ctx) {\n      var s = '<' + tag;\n      for (var i = 0; i < attrs.length; i++) {\n        var a = attrs[i];\n        if (a.ev) {\n          var fn = lookup(scope, a.p);\n          if (typeof fn === 'function') { ctx.handlers.push(fn); s += ' data-tnh-' + a.ev + '=\"' + (ctx.handlers.length - 1) + '\"'; }\n        } else if (BOOL[a.n.toLowerCase()]) {\n          var bv = a.parts.length === 1 && typeof a.parts[0] === 'object' ? lookup(scope, a.parts[0].p) : a.parts.join('');\n          if (bv && bv !== 'false') s += ' ' + a.n;\n        } else {\n          var av = TA[a.n.toLowerCase()] ? evalT(a.parts, scope) : evalParts(a.parts, scope);\n          if (a.n.toLowerCase() === 'src' && av === '') continue;\n          var ci = sizes && a.n.toLowerCase() === 'src' ? cdnImg(av) : null;\n          if (ci) { s += ' src=\"' + esc(ci.src) + '\" srcset=\"' + esc(ci.srcset) + '\" sizes=\"' + esc(sizes) + '\"'; continue; }\n          s += ' ' + a.n + '=\"' + esc(av) + '\"';\n        }\n      }\n      s += '>';\n      if (VOID[tag]) return s;\n      return s + inner(scope, ctx) + '</' + tag + '>';\n    };\n  }\n\n  /* ---------- DOM bijwerken zonder invoervelden te verstoren ---------- */\n  function syncAttrs(from, to) {\n    var i, a;\n    for (i = from.attributes.length - 1; i >= 0; i--) { a = from.attributes[i]; if (!to.hasAttribute(a.name)) from.removeAttribute(a.name); }\n    for (i = 0; i < to.attributes.length; i++) { a = to.attributes[i]; if (from.getAttribute(a.name) !== a.value) from.setAttribute(a.name, a.value); }\n  }\n  function morph(from, to) {\n    var fc = from.firstChild, tc = to.firstChild, nf, nt;\n    while (tc) {\n      nt = tc.nextSibling; nf = fc ? fc.nextSibling : null;\n      if (!fc) { from.appendChild(tc); }\n      else if (fc.nodeType === tc.nodeType && fc.nodeName === tc.nodeName) {\n        if (fc.nodeType === 3) { if (fc.nodeValue !== tc.nodeValue) fc.nodeValue = tc.nodeValue; }\n        else {\n          syncAttrs(fc, tc);\n          var name = fc.nodeName;\n          if (name === 'INPUT') {\n            if (document.activeElement !== fc) { if (fc.value !== tc.value) fc.value = tc.value; }\n            fc.checked = tc.hasAttribute('checked');\n          } else if (name === 'TEXTAREA') {\n            // waarde blijft van de gebruiker\n          } else if (name === 'IMG') {\n            // src is al gesynchroniseerd\n          } else morph(fc, tc);\n        }\n      } else { from.replaceChild(tc, fc); }\n      fc = nf; tc = nt;\n    }\n    while (fc) { nf = fc.nextSibling; from.removeChild(fc); fc = nf; }\n  }\n\n  /* ---------- basisklasse zoals het canvas ---------- */\n  function DCLogic(props) { this.props = props || {}; this.state = {}; }\n  DCLogic.prototype.setState = function (p) {\n    Object.assign(this.state, typeof p === 'function' ? p(this.state) : p);\n    this.__render && this.__render();\n  };\n  DCLogic.prototype.forceUpdate = function () { this.__render && this.__render(); };\n\n  /* ---------- mounten ---------- */\n  function mount(root, Component, props, TEMPLATE) {\n    var holder = document.createElement('template');\n    holder.innerHTML = TEMPLATE;\n    var kids = [].map.call(holder.content.childNodes, compile);\n    var inst = new Component(props);\n    var ctx = { handlers: [] };\n    var busy = false, again = false;\n\n    function paint() {\n      if (busy) { again = true; return; }\n      busy = true;\n      do {\n        again = false;\n        var vals = inst.renderVals();\n        ctx.handlers = [];\n        var html = '';\n        for (var i = 0; i < kids.length; i++) html += kids[i]([vals], ctx);\n        var next = document.createElement('div');\n        next.innerHTML = html;\n        morph(root, next);\n        if (inst.afterRender) inst.afterRender(root);\n      } while (again);\n      busy = false;\n    }\n    inst.__render = paint;\n    inst.__root = root;\n\n    root.addEventListener('click', function (e) { var t = e.target.closest('[data-tnh-click]'); if (t && root.contains(t)) { var fn = ctx.handlers[+t.getAttribute('data-tnh-click')]; if (fn) fn(e); } });\n    root.addEventListener('input', function (e) { var t = e.target.closest('[data-tnh-input]'); if (t) { var fn = ctx.handlers[+t.getAttribute('data-tnh-input')]; if (fn) fn(e); } });\n    root.addEventListener('change', function (e) { var t = e.target.closest('[data-tnh-change]'); if (t) { var fn = ctx.handlers[+t.getAttribute('data-tnh-change')]; if (fn) fn(e); } });\n    root.addEventListener('focusin', function (e) { var t = e.target.closest('[data-tnh-focus]'); if (t) { var fn = ctx.handlers[+t.getAttribute('data-tnh-focus')]; if (fn) fn(e); } });\n\n    paint();\n    if (inst.componentDidMount) inst.componentDidMount();\n    return inst;\n  }\n\n  window.TNMotor = { DCLogic: DCLogic, mount: mount, cdnImg: cdnImg };\n})();\n\n(function () {\n\"use strict\";\nconst DCLogic = window.TNMotor.DCLogic;\nconst TNB = (id) => (window.TN_MOTOR_ASSETS || {})[id] || \"\";\nconst TNT = (x) => (window.TN_I18N && window.TN_I18N.t ? window.TN_I18N.t(x) : x);\nconst P0 = {};\nconst T = [['Wit', '#FFFFFF'], ['Cr\u00E8me', '#E5D7C5'], ['Geel', '#FDDA24'], ['Oranje', '#FF5F00'], ['Rood', '#CB333B'], ['Bordeaux', '#9B2743'], ['Lichtroze', '#FABBCB'], ['Oud roze', '#BE7C82'], ['Felroze', '#DA1884'], ['Lila', '#A69DE9'], ['Lichtblauw', '#76B9E7'], ['Felblauw', '#00629B'], ['Donkerblauw', '#002F6C'], ['Lichtgroen', '#43B02A'], ['Olijfgroen', '#6F7D3A'], ['Donkergroen', '#117B34'], ['Bruin', '#6B4226'], ['Grijs', '#C7C9C7'], ['Zwart', '#000000']];\nconst FONTS = [['din', 'DIN Condensed', \"'TN DIN Condensed',sans-serif\", 0.42], ['narrow', 'Arial Narrow', \"'TN Arial Narrow','Archivo Narrow',sans-serif\", 0.48], ['wink', 'Wink Script', \"'TN Wink Script',cursive\", 0.52], ['courier', 'Courier New', \"'TN Courier New',monospace\", 0.6], ['brittany', 'Brittany Signature', \"'TN Brittany Signature',cursive\", 0.55]];\nconst NARROW = \"'TN Arial Narrow','Archivo Narrow',sans-serif\";\nconst HAND = \"'TN Brittany Signature',cursive\";\nconst KINDN = { tekst: 'Tekst', namen: '(Totem)namen', logo: 'Logo', ontwerp: 'Eigen ontwerp', lijn: 'Lijntekening', kleur: 'Ingekleurde tekening', kaart: 'Geboortekaartje' };\nconst fmt = (n) => (n === null || n === undefined || isNaN(n)) ? '[prijs]' : '\u20AC' + Number(n).toFixed(2).replace('.', ',');\nconst plus = (n) => (n === null || n === undefined) ? '[prijs]' : (n ? '+ ' + fmt(n) : 'inbegrepen');\nconst roman = (n) => { const v = [[1000,'M'],[900,'CM'],[500,'D'],[400,'CD'],[100,'C'],[90,'XC'],[50,'L'],[40,'XL'],[10,'X'],[9,'IX'],[5,'V'],[4,'IV'],[1,'I']]; let s = ''; n = Math.max(0, Math.floor(n)); for (const [a, r] of v) { while (n >= a) { s += r; n -= a; } } return s; };\nconst LIJN0 = TNB(\"c54a313230c9b7485e618a26d3aaf0b3\");\nconst KLEUR0 = TNB(\"704862a9875f6308656d622f591171bc\");\nconst HELP = { good: TNB(\"7b1abbf28690de20e18d2bd3c8f81768\"), bad: TNB(\"362d7ee3bfdd555e4df73cccc2db895e\"), goodList: ['Scherp en bij daglicht', 'Alle hoofden volledig in beeld', 'Van dichtbij, gezichten goed zichtbaar', 'Bijgesneden tot wat erop moet'], badList: ['Wazig of in het donker', 'Een hoofd half buiten beeld', 'Van ver, met veel achtergrond', 'Een zonnebril of hand voor het gezicht'] };\nconst lum = (hex) => { const h = hex.replace('#', ''); const r = parseInt(h.substr(0, 2), 16), g = parseInt(h.substr(2, 2), 16), b = parseInt(h.substr(4, 2), 16); return (0.299 * r + 0.587 * g + 0.114 * b) / 255; };\n// draadlook: satijnsteek-strepen over de borduurkleur\nconst stitch = (hex) => { const light = lum(hex) > 0.55; const a = light ? 'rgba(0,0,0,.16)' : 'rgba(255,255,255,.2)'; return 'background-color: ' + hex + '; background-image: repeating-linear-gradient(118deg, ' + a + ' 0 .55px, rgba(0,0,0,0) .55px 1.5px)'; };\nlet CV = null;\nconst emWidth = (txt, fam, fb) => {\n  try { if (!CV) CV = document.createElement('canvas').getContext('2d'); CV.font = '100px ' + fam; const w = CV.measureText(txt).width / 100; if (w > 0) return w; } catch (e) {}\n  return Math.max(1, txt.length) * fb;\n};\nclass Component extends DCLogic {\nconstructor(props) {\nsuper(props);\nconst P = (props && props.cfg) || P0;\nconst z0 = {};\n(P.defaultZones || []).forEach((id) => { z0[id] = { kind: (P.zoneDefaults && P.zoneDefaults[id]) || (P.kinds ? P.kinds[0] : 'tekst'), text: '', up: false, under: false, underText: '' }; });\nthis.state = { model: P.models ? P.models[0].id : null, variant: P.variants ? (P.defaultVariant || 0) : null, color: P.defaultColor || 0, gcolors: [P.defaultColor || 0], size: null, qty: {}, later: false, lqty: {}, method: P.methods ? P.methods[0][0] : null, uploaded: false, style: P.defaultStyle || 'lijn', thread: null, text1: '', text2: '', font: 'narrow', date: '', sep: ' \u00B7 ', logoKind: 'een', zones: z0, esz: {}, pos: null, side: P.startSide || 'voor', ex: {}, exText: {}, exKind: {}, exUp: {}, extrasOk: false, open: 0, peek: -1, view: 'live', photo: 0, help: false, finder: false, mode: 'usual', gender: 'Vrouw', usual: 'M', between: false, widthA: 55, exF: null, exI: 0, realSrc: null, nudge: false };\n}\ncomponentDidMount() { try { if (document.fonts) { document.fonts.ready.then(() => this.forceUpdate()); document.fonts.addEventListener('loadingdone', () => this.forceUpdate()); } } catch (e) {} }\ncfg() { return this.props.cfg || P0; }\nszList(m) { const P = this.cfg(); if (P.sizesByVariant && P.variants) { const v = P.variants[m.variant]; if (v && P.sizesByVariant[v[0]]) return P.sizesByVariant[v[0]]; } const c = P.colors && (P.colors[m.color] || P.colors[0]); if (P.sizes && P.sizesByColor && c && P.sizesByColor[c[0]]) return P.sizes.filter((z) => P.sizesByColor[c[0]].indexOf(z) > -1); return P.sizes; }\nsfOf(m) { const P = this.cfg(); if (P.sizeFinderByVariant && P.variants) { const v = P.variants[m.variant]; if (v && P.sizeFinderByVariant[v[0]]) return P.sizeFinderByVariant[v[0]]; } return P.sizeFinder; }\nmainId() { const P = this.cfg(); return P.source === 'foto' ? 'foto' : P.source === 'tekst' ? 'tekst' : P.source === 'datum' ? 'datum' : P.source === 'hand' ? 'hand' : P.source === 'logo' ? 'logo' : 'vrij'; }\nposList(m) { const P = this.cfg(); return P.zones.filter((z) => !(m.style === 'kleur' && P.source === 'foto' && (z.noKleur || (z.view === 'achter' && !z.kleurOk)))); }\nexList(m) {\n  const P = this.cfg(); const z = P.zones.find((q) => q.id === (m.pos || (P.zones[0] && P.zones[0].id)));\n  const mainBack = z && z.view === 'achter';\n  return (P.extras || []).filter((x) => { if (x.notOn && z && x.notOn.indexOf(z.id) > -1) return false; if (x.onlyWhen && z && x.onlyWhen.indexOf(z.id) === -1) return false; if (x.onlyIf === 'front' && (P.source === 'vrij' || mainBack)) return false; if (x.onlyIf === 'back' && (P.source === 'vrij' || !mainBack)) return false; if (x.type === 'onder' && P.source === 'foto' && m.style === 'kleur' && x.noKleur) return false; return true; });\n}\nstepIds() {\n  const P = this.cfg(); const ids = [this.mainId()];\n  // stap Kleur enkel als er iets te kiezen valt (kleur, variant, model, maat, methode of groep)\n  if (P.group || P.colors.length > 1 || P.variants || (P.models && P.models.length > 1) || P.sizes || P.methods) ids.unshift('kleur');\n  if (P.source !== 'vrij' && P.zones.length > 1) ids.push('plaats');\n  if ((P.extras || []).length) ids.push('extra');\n  if (P.group) ids.push('aantal');\n  ids.push('kwijt');\n  return ids;\n}\nqtySum(m) { let t = 0; Object.values(m.qty || {}).forEach((v) => { t += Number(v) || 0; }); return t; }\nlaterSum(m) { let t = 0; Object.values(m.lqty || {}).forEach((v) => { t += Number(v) || 0; }); return t; }\ngroupTotal(m) { return m.later ? this.laterSum(m) : this.qtySum(m); }\nactiveZones(m) { const P = this.cfg(); return P.zones.filter((z) => m.zones && m.zones[z.id]); }\nextraValid(m, x) {\n  if (!m.ex[x.id]) return true;\n  const k = m.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst');\n  if (x.type === 'zone') return k === 'tekst' ? !!m.exText[x.id] : !!m.exUp[x.id];\n  if (x.type === 'mouw') return k !== 'tekst' || !!m.exText[x.id];\n  if (x.type === 'onder' || x.type === 'namen') return !!m.exText[x.id] || x.type === 'namen';\n  return true;\n}\ndone(m, id) {\n  const P = this.cfg();\n  if (id === 'kleur') { if (P.group) return (m.gcolors || []).length > 0; const SL = this.szList(m); if (SL) return !!m.size && SL.indexOf(m.size) > -1; return true; }\n  if (id === 'foto') return m.uploaded && (m.style === 'kleur' || !!m.thread);\n  if (id === 'tekst') return !!m.text1 && !!m.thread;\n  if (id === 'datum') return !!m.date && !!m.thread;\n  if (id === 'hand') return m.uploaded && !!m.thread;\n  if (id === 'logo') return m.uploaded && (m.logoKind !== 'een' || !!m.thread);\n  if (id === 'vrij') { const a = this.activeZones(m); if (!a.length) return false; const needThread = a.some((z) => m.zones[z.id].kind !== 'kleur'); if (needThread && !m.thread) return false; return a.every((z) => { const v = m.zones[z.id]; if (v.under && !v.underText) return false; return (v.kind === 'tekst' || v.kind === 'namen') ? !!v.text : !!v.up; }); }\n  if (id === 'plaats') return !!m.pos;\n  if (id === 'extra') return m.extrasOk && this.exList(m).every((x) => this.extraValid(m, x));\n  if (id === 'aantal') return this.groupTotal(m) >= P.group.min;\n  return false;\n}\ngo(patch, k) {\n  const m = Object.assign({}, this.state, patch);\n  const ids = this.stepIds();\n  let peek = -1;\n  if (k < ids.length - 1 && this.done(m, ids[k])) { for (let i = k + 1; i < ids.length; i++) { if (i === ids.length - 1 || !this.done(m, ids[i])) { peek = i; break; } } }\n  this.setState(Object.assign({}, patch, { open: k, peek: peek, nudge: false }));\n}\nromanOf(s) { if (!s.date) return ''; const p = s.date.split('-'); if (p.length !== 3) return ''; return [roman(+p[2]), roman(+p[1]), roman(+p[0])].join(s.sep); }\nrenderVals() {\nconst P = this.cfg();\nconst s = this.state;\nconst ids = this.stepIds();\nconst noGSz = !!P.group && (P.group.sizes || []).length <= 1; if (noGSz && s.later) s.later = false;\nif (P.variants && !this.variantOk(s.variant)) s.variant = this.firstVariant();\nif (!P.group && !this.colorOk(s.color, s.variant)) s.color = this.firstColor(s.variant);\nconst idx = (id) => ids.indexOf(id);\nconst sel = 'background: #22302A; color: #F5F1E8; border: 1.5px solid #22302A';\nconst unsel = 'background: #FFFFFF; color: #22302A; border: 1.5px solid #D9D3C7';\nconst ring = (on, hex) => 'background: ' + hex + '; border: 2px solid ' + (on ? '#22302A' : 'rgba(0,0,0,.12)') + '; box-shadow: ' + (on ? '0 0 0 3px #F5F1E8, 0 0 0 5px #A84E30' : 'none');\nconst model = P.models ? (P.models.find((o) => o.id === s.model) || P.models[0]) : null;\nconst imgs = (model ? model.imgs : P.imgs) || {};\nconst backs = (model ? model.back : P.back) || {};\nconst cur = P.colors[s.color] || P.colors[0];\nconst dark = lum(cur[1]) < 0.5;\nconst ADVICE = { 'Wit': ['Zwart', 'Donkerblauw', 'Donkergroen', 'Bordeaux'], 'Naturel': ['Bruin', 'Donkergroen', 'Donkerblauw', 'Bordeaux'], 'Cr\u00E8me': ['Bruin', 'Donkergroen', 'Donkerblauw'], 'Sand': ['Bruin', 'Donkergroen', 'Donkerblauw', 'Wit'], 'Zand': ['Bruin', 'Donkergroen', 'Donkerblauw', 'Wit'], 'Kobaltblauw': ['Wit', 'Cr\u00E8me', 'Geel'], 'Olijfgroen': ['Cr\u00E8me', 'Wit', 'Bruin'], 'Stone': ['Bruin', 'Donkergroen', 'Donkerblauw'], 'Grey Fog': ['Donkerblauw', 'Donkergroen', 'Bruin', 'Zwart'],\n 'Zacht roze': ['Bordeaux', 'Wit', 'Donkerblauw', 'Oud roze'], 'Roze': ['Bordeaux', 'Wit', 'Donkerblauw'], 'Oud roze': ['Wit', 'Bordeaux', 'Cr\u00E8me'], 'Fel roze': ['Wit', 'Lichtroze', 'Bordeaux'], 'Bordeaux': ['Wit', 'Cr\u00E8me', 'Lichtroze', 'Oud roze'], 'Donkerrood': ['Wit', 'Cr\u00E8me', 'Lichtroze'], 'Rood': ['Wit', 'Cr\u00E8me', 'Zwart'], 'Rood (vintage)': ['Cr\u00E8me', 'Wit', 'Lichtroze'],\n 'Sky blauw': ['Donkerblauw', 'Wit', 'Felblauw'], 'Lichtblauw': ['Donkerblauw', 'Wit', 'Felblauw'], 'Aqua Groen': ['Donkergroen', 'Donkerblauw', 'Wit'], 'Mint': ['Donkergroen', 'Donkerblauw', 'Wit'], 'Nordic Blauw': ['Wit', 'Cr\u00E8me', 'Donkerblauw'], 'Nordic blauw': ['Wit', 'Cr\u00E8me', 'Donkerblauw'], 'Grijsblauw': ['Wit', 'Cr\u00E8me', 'Donkerblauw'], 'Denim': ['Wit', 'Cr\u00E8me', 'Lichtblauw'], 'Blauw (vintage)': ['Wit', 'Cr\u00E8me', 'Donkerblauw'],\n 'Royaal Blauw': ['Wit', 'Cr\u00E8me', 'Geel', 'Lichtblauw'], 'Navy': ['Wit', 'Cr\u00E8me', 'Lichtblauw', 'Oud roze'], 'Navy blauw': ['Wit', 'Cr\u00E8me', 'Lichtblauw', 'Oud roze'], 'Groen (forest)': ['Wit', 'Cr\u00E8me', 'Geel'], 'Groen (dark forest)': ['Wit', 'Cr\u00E8me', 'Geel'], 'Flessengroen': ['Wit', 'Cr\u00E8me', 'Geel'], 'Groen': ['Wit', 'Cr\u00E8me', 'Geel'],\n 'Kaki': ['Cr\u00E8me', 'Wit', 'Bruin', 'Zwart'], 'Olive': ['Cr\u00E8me', 'Wit', 'Bruin'], 'Legergroen': ['Cr\u00E8me', 'Wit', 'Bruin'], 'Mosgroen': ['Cr\u00E8me', 'Wit', 'Bruin'], 'Saliegroen': ['Wit', 'Cr\u00E8me', 'Donkergroen'], 'Lichtgroen': ['Wit', 'Donkergroen', 'Cr\u00E8me'], 'Groen (vintage)': ['Cr\u00E8me', 'Wit', 'Bruin'],\n 'Lichtgrijs': ['Zwart', 'Donkerblauw', 'Bordeaux', 'Wit'], 'Grijs': ['Zwart', 'Donkerblauw', 'Wit'], 'Mid grijs': ['Zwart', 'Wit', 'Donkerblauw'], 'Grijs gem\u00EAleerd': ['Zwart', 'Wit', 'Donkerblauw'], 'Donkergrijs': ['Wit', 'Cr\u00E8me', 'Geel'], 'Antraciet': ['Wit', 'Cr\u00E8me', 'Geel'],\n 'Zwart': ['Wit', 'Cr\u00E8me', 'Geel', 'Grijs'], 'Geel': ['Donkerblauw', 'Zwart', 'Bruin'], 'Mosterdgeel': ['Donkerblauw', 'Zwart', 'Bruin'], 'Oranje': ['Wit', 'Donkerblauw', 'Cr\u00E8me'], 'Lila': ['Wit', 'Donkerblauw', 'Lichtroze'], 'Paars': ['Wit', 'Cr\u00E8me', 'Lichtroze'], 'Bruin': ['Cr\u00E8me', 'Wit', 'Oud roze'], 'Cognac': ['Cr\u00E8me', 'Wit'], 'Camel': ['Cr\u00E8me', 'Wit', 'Bruin'], 'Taupe': ['Cr\u00E8me', 'Wit', 'Bruin'],\n 'Groen met wit': ['Lichtgroen', 'Zwart', 'Donkergroen'], 'Rood met wit': ['Rood', 'Zwart', 'Donkerblauw'], 'Wit met zwart': ['Zwart', 'Rood', 'Donkerblauw'], 'Kaki met zwart': ['Cr\u00E8me', 'Zwart', 'Wit'], 'Navy & wit': ['Wit', 'Cr\u00E8me'], 'Zwart & wit': ['Wit', 'Cr\u00E8me'] };\nconst advList = (P.advice && P.advice[cur[0]]) || ADVICE[cur[0]] || (dark ? ['Wit', 'Cr\u00E8me', 'Geel'] : ['Zwart', 'Donkerblauw', 'Bordeaux']);\nconst advised = advList[0];\nconst thread = s.thread || advised;\nconst TT = P.extraThreads ? P.extraThreads.reduce((acc, x) => { const i = x[2] ? acc.findIndex((t) => t[0] === x[2]) : -1; const c = acc.slice(); c.splice(i > -1 ? i : c.length, 0, [x[0], x[1]]); return c; }, T) : T; // extraThreads: [naam, hex, voor welke kleur]\nconst tHex = (TT.find((t) => t[0] === thread) || TT[0])[1];\nconst LIJN = P.lijn || LIJN0;\nconst KAART = P.kaartLijn || 'https://cdn.shopify.com/s/files/1/0659/1981/1848/files/tn-motor-geboortekaartje-guus.png?v=1792587445'; // geboortekaartje: altijd het ontwerp van Guus\nconst KLEURIMG = P.kleurImg || KLEUR0;\nconst isSwatch = P.preview === 'staal';\nconst isVrij = P.source === 'vrij';\nconst szIdx = (z) => (s.esz && s.esz[z.id] !== undefined) ? s.esz[z.id] : (z.sizeDefault !== undefined ? z.sizeDefault : 1);\nconst szOf = (z) => (z && z.sizes) ? z.sizes[Math.min(szIdx(z), z.sizes.length - 1)] : null;\nconst cmTxt = (n) => String(n).replace('.', ',');\nconst szLabel = (o) => o[0] + ' \u00B7 ' + cmTxt(o[1]) + (o[2] ? ' \u00D7 ' + cmTxt(o[2]) : '') + ' cm';\nconst curZ = P.zones.find((q) => q.id === (s.pos || (P.zones[0] && P.zones[0].id)));\nconst exL = this.exList(s);\n// ---------- prijs ----------\nlet base = P.price; let noBase = base === null || base === undefined;\nif (P.variants) { const vp = P.variants[s.variant] ? P.variants[s.variant][1] : null; noBase = vp === null || vp === undefined; base = vp; }\nif (P.methods) { const mp = (P.methods.find((x) => x[0] === s.method) || P.methods[0])[1]; base = mp; noBase = mp === null || mp === undefined; }\nif (noBase) base = 0;\nif (model && model.extra) base += model.extra;\nconst lines = []; this._paid = [];\nlet unit = base;\nconst label0 = P.lineTitle + (P.variants && !P.variantHidden ? ' \u00B7 ' + P.variants[s.variant][0] : '') + (P.group ? '' : (P.colors.length > 1 ? ' \u00B7 ' + cur[0] : '') + (P.sizes && s.size ? ' \u00B7 ' + s.size : '')) + (model && P.models.length > 1 ? ' \u00B7 ' + model.label : '');\nlines.push({ label: label0, price: noBase ? '[prijs]' : fmt(base) + (P.group ? ' / stuk' : '') });\nlet unk = false;\nconst addP = (label, p) => { (this._paid = this._paid || []).push({ label, p }); if (p === null || p === undefined) { unk = true; lines.push({ label, price: '[prijs]' }); } else { unit += p; lines.push({ label, price: p ? '+ ' + fmt(p) : 'inbegrepen' }); } };\nif (P.source === 'foto' && s.style === 'kleur' && P.kleurPrice !== undefined && P.styles) addP(P.kleurLabel || 'Ingekleurde tekening', P.kleurPrice);\nif (!isVrij && s.pos && curZ && curZ.price !== 0 && curZ.price !== undefined) addP(curZ.label, curZ.price);\nif (!isVrij && curZ && szOf(curZ)) lines.push({ label: 'Grootte: ' + szLabel(szOf(curZ)).toLowerCase(), price: '' });\nif (P.source === 'logo') lines.push({ label: 'Borduurkleur: ' + (s.logoKind === 'meer' ? 'meerdere kleuren, zoals in het logo' : s.logoKind === 'logo1' ? '\u00E9\u00E9n kleur, zoals in het logo' : (s.thread ? s.thread.toLowerCase() + ' draad' : 'nog kiezen')), price: '' });\nif (isVrij) {\n  this.activeZones(s).forEach((z, i) => { const p = i === 0 ? z.p1 : z.p2; const v = s.zones[z.id]; addP(z.label + ': ' + ((P.kindLabels && P.kindLabels[v.kind]) || KINDN[v.kind]).toLowerCase() + (szOf(z) ? ' \u00B7 ' + szLabel(szOf(z)).toLowerCase() : ''), p); if (v.kind === 'kleur') addP('Ingekleurde tekening (' + z.label.toLowerCase() + ')', P.kleurPrice); if (P.kindPrices && P.kindPrices[v.kind]) addP(((P.kindLabels && P.kindLabels[v.kind]) || KINDN[v.kind]) + ' (' + z.label.toLowerCase() + ')', P.kindPrices[v.kind]); if (P.kindPrices && P.kindPrices[v.kind] === 5) this._paid[this._paid.length - 1].h = 'tn-addon-lijn-logo'; if (v.under) addP('Tekst onder de borduring: ' + (v.underText || '...'), 3); });\n}\nexL.forEach((x) => { if (!s.ex[x.id]) return; const k = s.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst'); const t = s.exText[x.id]; addP(x.label + (x.type === 'zone' ? ': ' + KINDN[k].toLowerCase() : '') + (t && x.type !== 'zone' && k === 'tekst' ? ': ' + t : ''), x.price); if (x.type === 'zone' && k === 'kleur') addP('Ingekleurde tekening (extra borduring)', P.kleurPrice); });\nconst qty = P.group ? this.groupTotal(s) : 1;\n// meerprijs per kleur (cfg.colorExtra, bv. Donkergrijs +2, beslissing 20 okt): zit al in de Shopify-variant, dus geen add-on\nconst CX = P.colorExtra || {}; let cxTotal = 0;\nif (!P.group && CX[cur[0]]) { unit += CX[cur[0]]; lines.push({ label: 'Kleur ' + cur[0], price: '+ ' + fmt(CX[cur[0]]) }); }\nif (P.group) (s.gcolors || []).forEach((ci) => { const c = P.colors[ci]; const e = c && CX[c[0]]; if (!e) return; const n = s.later ? (Number((s.lqty || {})[ci]) || 0) : Object.keys(s.qty || {}).filter((k) => k.split('|')[0] === String(ci)).reduce((a, k) => a + (Number(s.qty[k]) || 0), 0); if (n) { cxTotal += e * n; lines.push({ label: c[0] + ' (per stuk)', price: '+ ' + fmt(e) }); } });\n// groepen: geen totaal voor alle stuks, het aantal zie je in de winkelmand (Louise 23 okt)\nconst total = unit * (P.group ? Math.max(qty, 0) : 1) + cxTotal;\nconst priceLabel = (noBase || unk) ? (P.group ? '[prijs] / stuk' : '[prijs]') : (P.group ? fmt(unit) + ' / stuk' : fmt(total));\nconst totalLabel = P.group ? 'Prijs' : 'Totaal';\n// ---------- stappen ----------\nconst TITLES = { kleur: P.kleurTitle || 'Kleur en maat', foto: P.fotoTitle || (P.styles ? 'Foto en stijl' : 'Foto en borduurkleur'), tekst: P.tekstTitle || 'Jouw tekst', datum: 'Jouw datum', hand: 'Jouw handschrift', logo: 'Jouw logo', vrij: P.vrijTitle || 'Wat en waar?', plaats: P.plaatsTitle || 'Waar komt het?', extra: 'Extra borduringen', aantal: noGSz ? 'Aantallen' : 'Aantallen en maten', kwijt: 'Wil je nog iets kwijt?' };\nconst MISS = { kleur: P.group ? 'kies een kleur' : (P.sizes ? 'kies je ' + (P.sizeTitle || 'maat').toLowerCase() : 'kies je kleur'), foto: s.uploaded ? 'kies je borduurkleur' : 'laad je foto op', tekst: s.text1 ? 'kies je borduurkleur' : 'vul je tekst in', datum: s.date ? 'kies je borduurkleur' : 'vul je datum in', hand: s.uploaded ? 'kies je borduurkleur' : 'laad je handschrift op', logo: s.uploaded ? 'kies je borduurkleur' : 'laad je logo op', vrij: 'kies wat en waar', plaats: 'kies waar het komt', extra: \"bevestig je extra borduringen\", aantal: 'vul je aantallen in (min. ' + (P.group ? P.group.min : 0) + ' stuks)' };\nconst posZ = P.zones.find((z) => z.id === s.pos);\nconst gcNames = (s.gcolors || []).map((i) => (P.colors[i] || [''])[0]);\nconst sums = {\n  kleur: P.group ? gcNames.join(', ') : ((P.colors.length > 1 ? cur[0] : '') + (P.sizes && s.size ? ' \u00B7 ' + s.size : '') + (P.variants && !P.variantHidden ? ' \u00B7 ' + P.variants[s.variant][0] : '')),\n  foto: this.done(s, 'foto') ? 'Opgeladen \u00B7 ' + (ids.indexOf('plaats') === -1 && curZ && curZ.sizes && curZ.sizes.length > 1 && szOf(curZ) ? szOf(curZ)[0].toLowerCase() + ' \u00B7 ' : '') + (s.style === 'kleur' ? 'ingekleurde tekening' : thread.toLowerCase() + ' draad') : (s.uploaded ? 'Opgeladen' : ''),\n  tekst: s.text1 ? '\"' + s.text1 + (s.text2 ? ' / ' + s.text2 : '') + '\"' : '',\n  datum: s.date ? this.romanOf(s) : '', hand: s.uploaded ? 'Opgeladen \u00B7 ' + thread.toLowerCase() + ' draad' : '', logo: s.uploaded ? 'Logo opgeladen' : '',\n  vrij: this.activeZones(s).map((z) => z.short || z.label).join(', '), plaats: posZ ? posZ.label : '',\n  extra: s.extrasOk ? (exL.filter((x) => s.ex[x.id]).map((x) => x.short || x.label).join(', ') || 'geen') : '',\n  aantal: P.group ? (this.groupTotal(s) ? this.groupTotal(s) + ' stuks' + (s.later ? ', maten later' : '') : '') : '', kwijt: 'optioneel'\n};\nconst mainK = this.mainId();\nconst anyText = isVrij && this.activeZones(s).some((z) => (s.zones[z.id].kind === 'tekst' || s.zones[z.id].kind === 'namen'));\nconst fontStep = ((mainK === 'tekst' || mainK === 'datum') && !P.spotify && !P.noFonts) || anyText;\nconst threadStep = ['tekst', 'datum', 'hand'].indexOf(mainK) > -1 || (mainK === 'foto' && s.style !== 'kleur') || (mainK === 'logo' && s.logoKind === 'een') || (isVrij && this.activeZones(s).some((z) => s.zones[z.id].kind !== 'kleur'));\nconst steps = ids.map((id, i) => {\n  const isOpen = s.open === i || s.peek === i, ok = this.done(s, id);\n  const missing = ids.slice(0, i).filter((q, j) => q !== 'kwijt' && !this.done(s, q)).map((q) => MISS[q]);\n  return { wrap: '', open: isOpen, exp: isOpen ? 'true' : 'false', title: TITLES[id], num: ok && !isOpen ? '\u2713' : String(i + 1),\n    numStyle: ok || isOpen ? 'background: #3F5A42; color: #fff' : 'background: #E4DED2; color: #55605A',\n    sum: isOpen ? '' : sums[id], showChg: ok && !isOpen && id !== 'kwijt', headStyle: '',\n    hasWarn: isOpen && missing.length > 0 && (s.nudge || s.open === i), warn: 'Vergeet niet: ' + missing.join(', ') + '.',\n    isKleur: id === 'kleur', isFoto: id === 'foto', isTekst: id === 'tekst', isDatum: id === 'datum', isHand: id === 'hand', isLogo: id === 'logo', isVrij: id === 'vrij', isPlaats: id === 'plaats', isExtra: id === 'extra', isAantal: id === 'aantal', isKwijt: id === 'kwijt',\n    showFont: id === mainK && fontStep, showThread: id === mainK && threadStep, showSize: id === mainK && !isVrij && ids.indexOf('plaats') === -1 && !!(curZ && curZ.sizes && curZ.sizes.length > 1),\n    toggle: () => { if (!isOpen) { this.setState({ open: i, peek: -1, nudge: true }); return; } if (s.open === i) this.setState({ open: s.peek, peek: -1 }); else this.setState({ peek: -1 }); } };\n});\nconst kB = idx(mainK);\n// ---------- kleur, model, maat ----------\nconst colors = P.colors.map((c, i) => { const on = P.group ? (s.gcolors || []).indexOf(i) > -1 : i === s.color; return { name: c[0], multi: P.group && on, pressed: on ? 'true' : 'false', style: ring(on, c[1]), pick: () => {\n  if (P.group) { let g = (s.gcolors || []).slice(); const at = g.indexOf(i); if (at > -1) { g.splice(at, 1); this.go({ gcolors: g, color: g.length ? g[g.length - 1] : s.color }, 0); return; } if (at === -1) g.push(i); this.go({ gcolors: g, color: i, exF: null, exI: 0 }, 0); return; }\n  this.go({ color: i, exF: null, exI: 0 }, 0); } }; }).filter((c, i) => (P.group ? this.groupColorOk(i, s) : this.colorOk(i, s.variant)));\nconst sizes = (this.szList(s) || []).map((z) => ({ label: (P.sizeLabels && P.sizeLabels[z]) || z, pressed: z === s.size ? 'true' : 'false', style: z === s.size ? sel : unsel, pick: () => this.go({ size: z }, 0) }));\nconst models = (P.models || []).map((o) => ({ label: o.label + (o.extra ? ' (+ ' + fmt(o.extra) + ')' : ''), pressed: o.id === s.model ? 'true' : 'false', style: o.id === s.model ? sel : unsel, pick: () => this.go(this.modelPatch(o.id), 0) }));\nconst variants = (P.variants || []).map((o, i) => ({ label: o[0] + (P.variantNoPrice ? '' : ' \u00B7 ' + fmt(o[1])), pressed: i === s.variant ? 'true' : 'false', style: i === s.variant ? sel : unsel, pick: () => this.go(Object.assign({ variant: i, size: null }, this.colorOk(s.color, i) ? {} : { color: this.firstColor(i) }), 0) })).filter((o, i) => this.variantOk(i));\nconst methods = (P.methods || []).map((o) => ({ label: o[0] + ' \u00B7 vanaf ' + fmt(o[1] + ((model && model.extra) || 0)) + ' / stuk', pressed: o[0] === s.method ? 'true' : 'false', style: o[0] === s.method ? sel : unsel, pick: () => this.go({ method: o[0] }, 0) }));\n// aantallen (groepen)\nconst gsz = P.group ? P.group.sizes : [];\nconst dotS = (hex) => 'width: 18px; height: 18px; border-radius: 50%; flex-shrink: 0; box-shadow: inset 0 0 0 1.5px rgba(0,0,0,.18); background: ' + hex;\n// maten per kleur (cfg.sizesByColor, bv. fleecetrui: 3XL enkel in Zwart en Navy)\nconst gszOf = (c) => (P.sizesByColor && P.sizesByColor[c[0]]) ? gsz.filter((z) => P.sizesByColor[c[0]].indexOf(z) > -1) : gsz;\nconst qtyRows = (s.gcolors || []).map((ci) => { const c = P.colors[ci]; let t = 0; gszOf(c).forEach((z) => { t += Number(s.qty[ci + '|' + z]) || 0; });\n  return { name: c[0], dot: dotS(c[1]), total: t, cells: gszOf(c).map((z) => ({ label: z, value: s.qty[ci + '|' + z] || '', aria: 'Aantal ' + c[0] + ' in maat ' + z, onInput: (e) => this.go({ qty: Object.assign({}, s.qty, { [ci + '|' + z]: Number(e.target.value) || 0 }) }, idx('aantal')) })) }; });\nconst laterRows = (s.gcolors || []).map((ci) => { const c = P.colors[ci]; return { name: c[0], dot: dotS(c[1]), value: s.lqty[ci] || '', aria: 'Aantal in ' + c[0], onInput: (e) => this.go({ lqty: Object.assign({}, s.lqty, { [ci]: Number(e.target.value) || 0 }) }, idx('aantal')) }; });\nconst gt = P.group ? this.groupTotal(s) : 0;\n// ---------- draad, lettertype ----------\nconst threads = TT.map(([n, h]) => ({ name: n + (advList.indexOf(n) > -1 ? ' (aanbevolen)' : ''), advised: advList.indexOf(n) > -1, pressed: n === s.thread ? 'true' : 'false', style: ring(n === s.thread, h), pick: () => this.go({ thread: n }, kB) }));\nconst fontObj = FONTS.find((f) => f[0] === s.font) || FONTS[1];\nconst fontTxt = (() => { const t = [s.text1].concat(Object.values(s.zones || {}).map((v) => v && (v.kind === 'tekst' || v.kind === 'namen') ? v.text : ''), Object.values(s.exText || {})).map((x) => String(x || '').trim()).find((x) => x); return t || (P.sampleText && !/[\\/\u2026]/.test(P.sampleText) ? P.sampleText : 'Lies'); })();\nconst FONTPX = { din: 19, narrow: 18, wink: 18, courier: 15, brittany: 24 };\nconst fonts = FONTS.filter((f) => !(P.noCourier && f[0] === 'courier')).map(([id, label, fam, fb]) => ({ label, txt: fontTxt, pressed: id === s.font ? 'true' : 'false', style: '', sample: 'font-family: ' + fam + '; font-size: ' + Math.max(13, Math.min(FONTPX[id] || 18, Math.floor(150 / emWidth(fontTxt, fam, fb)))) + 'px', pick: () => this.go({ font: id }, kB) }));\nconst curSizes = (curZ && curZ.sizes ? curZ.sizes : []).map((o, i) => ({ label: szLabel(o), pressed: i === szIdx(curZ) ? 'true' : 'false', style: i === szIdx(curZ) ? sel : unsel, pick: () => this.go({ esz: Object.assign({}, s.esz, { [curZ.id]: i }) }, idx('plaats') > -1 ? idx('plaats') : kB) }));\n// ---------- preview ----------\nconst AR = (() => { const p = String(P.aspect || '600 / 800').split('/'); return (parseFloat(p[0]) || 3) / (parseFloat(p[1]) || 4); })();\nconst k0 = P.k || 1;\nconst romanTxt = s.date ? this.romanOf(s) : this.romanOf({ date: '2023-06-15', sep: s.sep });\nconst geoOf = (z0) => Object.assign({}, z0, (model && model.geo && model.geo[z0.id]) || {});\nconst textEmCm = (z) => z.textEm || (z.cm <= 5 ? z.cm * 0.42 : z.cm <= 13 ? 3.0 : z.cm * 0.5); // grote plaats: kort woord vult de breedte (Louise 23 okt)\nconst fitText = (z, wPct, lns, fam, fb) => { let emw = 0; lns.forEach((l) => { if (l) emw = Math.max(emw, emWidth(l, fam, fb)); }); emw = Math.max(emw, 1.2); const cap = textEmCm(z) * (z.kz || k0); return Math.min(wPct / emw, cap); };\nconst textCss = (fam, fs, hex) => 'font-family: ' + fam + '; font-size: ' + fs.toFixed(2) + 'cqw; color: transparent; -webkit-background-clip: text; background-clip: text; ' + stitch(hex);\nconst markFor = (z0, kind, data) => {\n  const z = geoOf(z0);\n  let maxCm = (data && data.cm) ? data.cm : z.cm;\n  if (kind === 'kleur') maxCm = Math.min(maxCm, z.maxKleurCm || 12);\n  // gekozen grootte met een hoogte (bv. pet Klein 5 \u00D7 3 cm): een tekening (vierkant) of logo (1,6 : 1) mag niet hoger worden dan die hoogte\n  const capH = (data && data.cmH) || z.cmH; // zone met maximale hoogte (bv. omslag van de muts, 30 okt 2026)\n  if (capH && (kind === 'lijn' || kind === 'kleur' || kind === 'logo')) maxCm = Math.min(maxCm, capH * (kind === 'logo' ? 1.6 : 1));\n  const wPct = maxCm * (z.kz || k0);\n  const cx = data && data.cx !== undefined ? data.cx : z.cx;\n  const o = { style: 'left: ' + cx + '%; top: ' + z.cy + '%; width: ' + wPct.toFixed(2) + '%; transform: translate(-50%, -50%)' + (z.rot ? ' rotate(' + z.rot + 'deg)' : ''), isMask: false, isImg: false, isLogo: false, isText: false, isHart: false, isHond: false, isKat: false, hex: tHex, line1: '', line2: '', hasLine2: false, maskStyle: '', logoStyle: '', textStyle: '', textStyle2: '', src: '', h: wPct * AR };\n  if (kind === 'lijn' || kind === 'spotify') { const url = kind === 'spotify' ? P.spotify : (data && data.lijn) || LIJN; const ar = kind === 'spotify' ? (P.spotifyAr || 4) : 1; o.isMask = true; o.maskStyle = 'width: 100%; aspect-ratio: ' + ar + ' / 1; ' + stitch(tHex) + '; -webkit-mask: url(' + url + ') center / contain no-repeat; mask: url(' + url + ') center / contain no-repeat'; o.h = wPct * AR / ar; }\n  else if (kind === 'kleur') { o.isImg = true; o.src = P.kleurImg || KLEURIMG; }\n  else if (kind === 'logo' || kind === 'ontwerp') { o.isLogo = true; o.logoTxt = kind === 'ontwerp' ? 'JOUW ONTWERP' : 'JOUW LOGO'; o.h = wPct * AR / 1.6; o.logoStyle = 'display: grid; place-items: center; width: 100%; aspect-ratio: 1.6; border-radius: 6px; font-weight: 800; letter-spacing: .06em; font-size: ' + (wPct * 0.12).toFixed(2) + 'cqw; ' + (data && data.multi ? 'background: conic-gradient(#C2603E, #E5B33A, #86A681, #3F6E9A, #C2603E); color: #fff' : 'border: 2px dashed ' + tHex + '; color: ' + tHex); }\n  else if (kind === 'hart' || kind === 'hond' || kind === 'kat') { o.isHart = kind === 'hart'; o.isHond = kind === 'hond'; o.isKat = kind === 'kat'; o.style = 'left: ' + cx + '%; top: ' + z.cy + '%; width: ' + (3.2 * (z.kz || k0)).toFixed(2) + '%; transform: translate(-50%, -50%)'; }\n  else { const l1 = (data && data.l1) || ''; const l2 = (data && data.l2) || ''; const fam = data && data.hand ? HAND : data && data.narrow ? NARROW : fontObj[2]; const fb = data && data.hand ? 0.55 : fontObj[3];\n    let fs = fitText(z, wPct, [l1, l2], fam, fb);\n    // hoogte van de gekozen grootte (bv. pet Middel 7,5 \u00D7 4,5 cm): twee regels moeten samen binnen die hoogte passen\n    if (data && data.cmH) fs = Math.min(fs, data.cmH * (z.kz || k0) / ((l2 ? 2 : 1) * 1.15));\n    o.isText = true; o.line1 = l1; o.line2 = l2; o.hasLine2 = !!l2; o.textStyle = textCss(fam, fs, tHex); o.textStyle2 = o.textStyle; o.h = fs * (l2 ? 2.2 : 1.15) * AR;\n    o.style = 'left: ' + cx + '%; top: ' + z.cy + '%; transform: translate(-50%, -50%)' + (z.rot ? ' rotate(' + z.rot + 'deg)' : ''); }\n  if (data && data.sample) o.style += '; opacity: .6';\n  return o;\n};\n// tekst onder de borduring: net onder wat zichtbaar geborduurd is (de tekening heeft witrand), letters in verhouding met\n// de gekozen grootte, en met een vlakhoogte (pet: max. 6 cm) samen gecentreerd binnen dat vlak; past het niet, dan wordt de borduring kleiner (20 okt, Louise)\nconst underMark = (z0, main, txt, fit) => { const z = geoOf(z0); const kz = z.kz || k0; const cmV = kz * AR;\n  const padB = (main.isMask || main.isImg) ? main.h * 0.1 : 0; const visH = Math.max(main.h - 2 * padB, cmV);\n  const fsCm = Math.max(0.7, Math.min(1.3, (visH / cmV) * 0.22));\n  const wCm = Math.min(z.cm, Math.max((fit && fit.cm) || z.cm, 5));\n  const fs = Math.min(wCm * kz / emWidth(txt, NARROW, 0.48), fsCm * kz);\n  const gap = 0.25 * cmV, tH = fs * AR;\n  // zonder vlakhoogte (dekentje, trui, handdoek...): ruimere afstand onder de volle borduring, zoals vroeger (20 okt, Louise)\n  let top = z.cy + main.h / 2 + Math.max(1.0, gap) + tH / 2;\n  const cyTxt = 'top: ' + z.cy + '%';\n  if (fit && fit.zoneH && main.style.indexOf(cyTxt) > -1) {\n    const room = fit.zoneH * cmV - gap - tH; const sc = visH > room ? Math.max(room, visH * 0.5) / visH : 1;\n    if (sc < 1) {\n      if (main.isText) { const f = (st) => st.replace(/font-size: ([\\d.]+)cqw/, (a, n) => 'font-size: ' + (parseFloat(n) * sc).toFixed(2) + 'cqw'); main.textStyle = f(main.textStyle); main.textStyle2 = f(main.textStyle2); }\n      else main.style = main.style.replace(/width: ([\\d.]+)%/, (a, n) => 'width: ' + (parseFloat(n) * sc).toFixed(2) + '%');\n      main.h *= sc;\n    }\n    const vis = visH * sc, g0 = z.cy - (vis + gap + tH) / 2;\n    main.style = main.style.replace(cyTxt, 'top: ' + (g0 + vis / 2).toFixed(2) + '%');\n    top = g0 + vis + gap + tH / 2;\n  }\n  return { style: 'left: ' + z.cx + '%; top: ' + top.toFixed(2) + '%; transform: translate(-50%, -50%)', isMask: false, isImg: false, isLogo: false, isText: true, isHart: false, isHond: false, isKat: false, hex: tHex, line1: txt, line2: '', hasLine2: false, textStyle: textCss(NARROW, fs, tHex), textStyle2: '', maskStyle: '', logoStyle: '', src: '' }; };\n// hoogte van het borduurvlak: de grootste hoogte uit de groottes (pet 10 \u00D7 6 cm: 6), anders geen grens\nconst zoneHOf = (z) => (z && z.sizes) ? z.sizes.reduce((a, o) => Math.max(a, o[2] || 0), 0) || z.cmH || 0 : 0;\nconst twinUnder = (zt, m, txt) => { const u = underMark(zt, m, txt); const r = zt.rot || 0; if (!r) return u; const rr = r * Math.PI / 180; const mt = u.style.match(/top: ([^%]+)%/); const dy = (mt ? parseFloat(mt[1]) : zt.cy) - zt.cy; const l = zt.cx - Math.sin(rr) * dy / AR; const t = zt.cy + Math.cos(rr) * dy; u.style = 'left: ' + l.toFixed(2) + '%; top: ' + t.toFixed(2) + '%; transform: translate(-50%, -50%) rotate(' + r + 'deg)'; return u; };\nconst showOn = (z) => isSwatch || geoOf(z).view === s.side;\nlet marks = [];\nif (isVrij) {\n  this.activeZones(s).forEach((z) => { if (!showOn(z)) return; const v = s.zones[z.id]; const zs = szOf(z); const d = { l1: v.text || (v.kind === 'namen' ? 'Lies' : (v.kind === 'tekst' || v.kind === 'namen') ? P.sampleText || 'Lies' : 'Jouw tekst'), sample: (v.kind === 'tekst' || v.kind === 'namen') && !v.text, multi: false, cm: zs ? zs[1] : 0, cmH: zs ? zs[2] || 0 : 0, lijn: P.lijn };\n    const pts = z.twin ? z.twin : [null];\n    pts.forEach((tx) => { const dd = Object.assign({}, d); const tA = Array.isArray(tx); if (tx !== null) dd.cx = tA ? tx[0] : tx; const zt = tA ? Object.assign({}, z, { cx: tx[0], cy: tx[1], rot: tx[2] || 0 }) : z; const m = markFor(zt, v.kind === 'kaart' ? 'lijn' : v.kind, v.kind === 'kaart' ? Object.assign({}, dd, { lijn: KAART }) : dd); marks.push(m); if (v.under && v.underText) marks.push(tA ? twinUnder(zt, m, v.underText) : underMark(tx === null ? z : Object.assign({}, z, { cx: tx }), m, v.underText, { cm: d.cm, zoneH: z.twin ? 0 : zoneHOf(z) })); }); });\n} else if (curZ && showOn(curZ)) {\n  const zcm = szOf(curZ) ? szOf(curZ)[1] : 0; const zcmH = szOf(curZ) ? szOf(curZ)[2] || 0 : 0; let m = null;\n  if (P.source === 'foto') m = markFor(curZ, s.style === 'kleur' ? 'kleur' : 'lijn', { cm: zcm, cmH: zcmH });\n  else if (P.source === 'tekst' && P.spotify) m = markFor(curZ, 'spotify', { cm: zcm });\n  else if (P.source === 'tekst') m = markFor(curZ, 'tekst', { l1: s.text1 || P.sampleText || P.textPlaceholder || 'Jouw tekst', l2: P.allowLine2 ? (s.text1 || s.text2 ? s.text2 : (P.sampleText2 || '')) : '', sample: !s.text1, cm: zcm, cmH: zcmH });\n  else if (P.source === 'datum') m = markFor(curZ, 'tekst', { l1: romanTxt, cm: zcm, cmH: zcmH });\n  else if (P.source === 'hand') m = markFor(curZ, 'tekst', { l1: TNT(P.handSample || 'Ik zie je graag'), hand: true, cm: zcm });\n  else if (P.source === 'logo') m = markFor(curZ, 'logo', { multi: s.logoKind === 'meer', cm: zcm, cmH: zcmH });\n  if (m) { if (curZ.twin) { curZ.twin.forEach((tx) => { const mm = Object.assign({}, m); if (Array.isArray(tx)) { mm.style = m.style.replace(/left: [^%;]+%/, 'left: ' + tx[0] + '%').replace(/top: [^%;]+%/, 'top: ' + tx[1] + '%').replace(/ rotate\\([^)]*\\)/, '') + (tx[2] ? ' rotate(' + tx[2] + 'deg)' : ''); } else mm.style = m.style.replace('left: ' + curZ.cx + '%', 'left: ' + tx + '%'); marks.push(mm); }); } else marks.push(m);\n    exL.forEach((x) => { if (x.type === 'onder' && s.ex[x.id] && s.exText[x.id]) { if (curZ.twin && Array.isArray(curZ.twin[0])) curZ.twin.forEach((tx) => marks.push(twinUnder(Object.assign({}, curZ, { cx: tx[0], cy: tx[1], rot: tx[2] || 0 }), m, s.exText[x.id]))); else marks.push(underMark(curZ, m, s.exText[x.id], { cm: zcm, zoneH: curZ.twin ? 0 : zoneHOf(curZ) })); } }); }\n}\nexL.forEach((x) => { if (!s.ex[x.id] || !x.zone || x.type === 'onder' || x.type === 'namen' && !s.exText[x.id]) return; if (!showOn(x.zone)) return; const k = s.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst');\n  if (x.type === 'zone') { if (k === 'tekst' && !s.exText[x.id]) return; marks.push(markFor(x.zone, k, { l1: s.exText[x.id] || 'Jouw tekst', narrow: false })); return; }\n  marks.push(markFor(x.zone, k === 'tekst' ? 'tekst' : k, { l1: s.exText[x.id] || x.sample || 'L.T.', narrow: x.type === 'mouw' || x.type === 'namen' })); });\nconst views = (P.views || []).map((v) => ({ label: v[1], style: 'min-height: 36px; padding: 0 14px; border-radius: 999px; border: 0; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; ' + (s.side === v[0] ? 'background: #22302A; color: #F5F1E8' : 'background: transparent; color: #22302A'), pick: () => this.setState({ side: v[0], view: 'live' }) }));\nconst VK = P.imgByVariant && P.variants ? P.variants[s.variant][0] : ''; const IK = (VK ? VK + '|' : '') + cur[0];\nconst FI = this.imgFor(imgs, VK, s.color, true), BI = this.imgFor(backs, VK, s.color, false);\nconst hasBack = s.side === 'achter' && !!BI.src;\nconst frontSrc = FI.src;\nconst garmentSrc = hasBack ? BI.src : frontSrc;\n// ---------- plaatsen (tegels met foto) ----------\nconst tile = (z0) => { const z = geoOf(z0); const kk = z.kz || k0; const cm = (s.style === 'kleur' && P.source === 'foto') ? Math.min(z.cm, z.maxKleurCm || 12) : z.cm; const w = Math.min(70, (cm || 10) * kk); const th = z.view === 'achter' ? (BI.src || '') : frontSrc;\n  return { thumb: th, hasThumb: !!th, thStyle: 'width: 100%; ' + (th ? '' : 'background: ' + cur[1]), boxStyle: 'position: absolute; left: ' + (z.twin ? 50 : z.cx) + '%; top: ' + z.cy + '%; width: ' + (z.twin ? 70 : w) + '%; aspect-ratio: ' + (AR * 1.333).toFixed(3) + ' / 1; transform: translate(-50%, -50%); border: 2px dashed #C2603E; border-radius: 4px; background: rgba(194, 96, 62, .22)' }; };\nconst posList = this.posList(s);\nconst maxTxt = (z) => (s.style === 'kleur' && P.source === 'foto') ? 'max. ' + Math.min(z.cm, z.maxKleurCm || 12) + ' cm' : z.max;\nconst positions = posList.map((z) => Object.assign(tile(z), { label: z.label, max: maxTxt(z), price: plus(z.price || 0), priceStyle: z.price === null ? 'color: #55605A' : '', pressed: z.id === s.pos ? 'true' : 'false', style: z.id === s.pos ? 'background: #fff; border: 2px solid #22302A' : 'background: #fff; border: 2px solid transparent', pick: () => this.go({ pos: z.id, side: geoOf(z).view }, idx('plaats')) }));\nconst frontRule = isVrij && P.zones.filter((z) => z.view === 'voor' && z.tag !== 'sleeve').length > 1 && P.zones.some((z) => z.view === 'achter' || z.tag === 'sleeve');\nconst zoneRows = P.zones.map((z) => { const v = s.zones[z.id]; const on = !!v; const n = this.activeZones(s); const posn = n.indexOf(z); const p = on ? (posn === 0 ? z.p1 : z.p2) : (n.length === 0 ? z.p1 : z.p2);\n  return Object.assign(tile(z), { label: z.label, max: z.max, on, pressed: on ? 'true' : 'false', price: plus(p), tileStyle: on ? 'border: 2px solid #22302A; background: #fff' : 'border: 2px solid #E3D8C6; background: #fff',\n    toggle: () => { if (P.zones.length === 1) return; const zz = Object.assign({}, s.zones); if (zz[z.id]) delete zz[z.id]; else { const kinds = z.kinds || P.kinds || ['tekst']; zz[z.id] = { kind: kinds[0], text: '', up: false, under: false, underText: '' }; if (z.view === 'voor' && z.tag !== 'sleeve') P.zones.forEach((q) => { if (q.id !== z.id && q.view === 'voor' && q.tag !== 'sleeve') delete zz[q.id]; }); (z.excl || []).forEach((e) => { delete zz[e]; }); } this.go({ zones: zz, side: geoOf(z).view }, kB); } }); });\nconst zoneEdit = this.activeZones(s).map((z) => { const v = s.zones[z.id]; const kinds = (z.kinds || P.kinds || ['tekst']); const zs = szOf(z);\n  const setZ = (patch) => { const zz = Object.assign({}, s.zones); zz[z.id] = Object.assign({}, zz[z.id], patch); this.go({ zones: zz, side: geoOf(z).view }, kB); };\n  return { zid: z.id, label: z.label, maxNow: v.kind === 'kleur' ? 'ingekleurd max. ' + Math.min(z.cm, z.maxKleurCm || 12) + ' cm' : z.max,\n    kinds: kinds.map((k) => ({ isHart: false, isHond: false, isKat: false, label: (P.kindLabels && P.kindLabels[k]) || KINDN[k], price: k === 'kleur' ? (P.kleurPrice ? ' + ' + fmt(P.kleurPrice) : ' [prijs]') : (P.kindPrices && P.kindPrices[k] ? ' + ' + fmt(P.kindPrices[k]) : ''), hasPrice: k === 'kleur' || !!(P.kindPrices && P.kindPrices[k]), pressed: v.kind === k ? 'true' : 'false', style: v.kind === k ? sel : unsel, pick: () => setZ({ kind: k, up: false }) })),\n    isText: v.kind === 'tekst', text: v.text, placeholder: v.kind === 'namen' ? 'Voorbeeldnaam, bv. Lies' : 'Bv. ' + (P.sampleText || 'Lies'), maxlen: z.maxlen || 24, aria: 'Tekst voor ' + z.label.toLowerCase(), onText: (e) => setZ({ text: e.target.value }),\n    needsUp: (v.kind !== 'tekst' && v.kind !== 'namen'), upTitle: v.up ? 'Opgeladen, klik om te wijzigen' : (v.kind === 'logo' ? 'Laad je logo op (JPG, PNG, HEIC, SVG, PDF of AI)' : v.kind === 'ontwerp' ? 'Laad je ontwerp op (JPG, PNG, HEIC, SVG, PDF of AI)' : v.kind === 'kaart' ? 'Laad je geboortekaartje op (JPG, PNG, HEIC of PDF)' : 'Laad je foto op (JPG, PNG of HEIC)'),\n    upStyle: v.up ? 'background: #E3ECDD; border: 2px solid #86A681' : 'background: #F5F1E8; border: 2px dashed #A84E30', toggleUp: () => this.pick('z:' + z.id, v.up, (f) => setZ({ up: !!f })),\n    hasSizes: !!(z.sizes && z.sizes.length), esizes: (z.sizes || []).map((o, i) => ({ label: szLabel(o), pressed: i === szIdx(z) ? 'true' : 'false', style: i === szIdx(z) ? sel : unsel, pick: () => this.go({ esz: Object.assign({}, s.esz, { [z.id]: i }), side: geoOf(z).view }, kB) })),\n    canUnder: (v.kind !== 'tekst' && v.kind !== 'namen') && z.tag !== 'sleeve' && P.under !== false, under: !!v.under, underText: v.underText || '', toggleUnder: () => setZ({ under: !v.under }), onUnder: (e) => setZ({ underText: e.target.value }), canUnderNames: !!P.group, underNames: !!v.underNames, underPh: v.underNames ? 'Voorbeeldnaam, bv. Lies' : 'Bv. Lies & Tom', toggleUnderNames: () => setZ({ underNames: !v.underNames }), showNames: v.kind === 'namen' || (!!P.group && !!v.under && !!v.underNames), showUnderText: !(P.group && v.underNames), nrows: (() => { const list = (v.nl && v.nl.length) ? v.nl : [{ n: '', m: '' }, { n: '', m: '' }]; const gs = (P.group && P.group.sizes) || P.sizes || []; const save = (nl) => { const first = (nl.find((r) => r.n) || {}).n || ''; const patch = { nl }; if (v.kind === 'namen') patch.text = first; if (v.under && v.underNames) patch.underText = first; setZ(patch); }; return list.map((r, i) => ({ name: r.n, aria: 'Naam ' + (i + 1), ariaSize: 'Maat voor naam ' + (i + 1), ariaDel: 'Naam ' + (i + 1) + ' verwijderen', sizes: [{ v: '', l: 'Maat', sel: !r.m }].concat(gs.map((g) => ({ v: g, l: g, sel: r.m === g }))), onName: (e) => save(list.map((x, j) => (j === i ? Object.assign({}, x, { n: e.target.value }) : x))), onSize: (e) => save(list.map((x, j) => (j === i ? Object.assign({}, x, { m: e.target.value }) : x))), remove: () => save(list.length > 1 ? list.filter((x, j) => j !== i) : [{ n: '', m: '' }]) })); })(), addName: () => { const list = (v.nl && v.nl.length) ? v.nl : [{ n: '', m: '' }, { n: '', m: '' }]; setZ({ nl: list.concat([{ n: '', m: '' }]) }); }, namesHint: (() => { const k = (v.nl || []).filter((r) => r.n).length; return (k ? k + (k === 1 ? ' naam' : ' namen') + '. ' : '') + 'De eerste naam zie je op het voorbeeld. Heb je de lijst nog niet volledig? Dan stuur je hem later door.'; })(), isKleur: v.kind === 'kleur', kleurNote: 'Ingekleurd borduren we met de kleuren van je foto, ' + (P.kleurMax || 'max. 12 cm') + '. Je tekening krijg je eerst per mail.' }; });\n// ---------- extra borduringen ----------\nconst extraRows = exL.map((x) => { const on = !!s.ex[x.id]; const k = s.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst'); const ie = idx('extra');\n  const kinds = (x.kinds || []).map((kk) => ({ label: { tekst: 'Tekst', lijn: 'Lijntekening', logo: 'Logo', kleur: 'Ingekleurde tekening', hart: 'Hartje', hond: 'Hondenpootje', kat: 'Kattenpootje' }[kk], isHart: kk === 'hart', isHond: kk === 'hond', isKat: kk === 'kat', hasPrice: kk === 'kleur', price: kk === 'kleur' ? (P.kleurPrice ? '+ ' + fmt(P.kleurPrice) : '[prijs]') : '', pressed: kk === k ? 'true' : 'false', style: (kk === k ? sel : unsel) + '; display: inline-flex; align-items: center; gap: 8px', pick: () => this.go({ exKind: Object.assign({}, s.exKind, { [x.id]: kk }), exUp: Object.assign({}, s.exUp, { [x.id]: false }), side: x.zone ? geoOf(x.zone).view : s.side }, ie) }));\n  return { xid: x.id, label: x.label, price: plus(x.price), on, hasKinds: kinds.length > 1, kinds, hasText: on && k === 'tekst', text: s.exText[x.id] || '', placeholder: x.placeholder || 'Jouw tekst', maxlen: x.maxlen || 24, fieldStyle: x.type === 'onder' ? 'font-family: ' + NARROW + '; font-size: 18px' : 'font-family: ' + fontObj[2] + '; font-size: 18px',\n    needsUp: on && x.type === 'zone' && k !== 'tekst', upTitle: s.exUp[x.id] ? 'Opgeladen, klik om te wijzigen' : (k === 'logo' ? 'Laad je logo op (JPG, PNG, HEIC, SVG, PDF of AI)' : k === 'ontwerp' ? 'Laad je ontwerp op (JPG, PNG, HEIC, SVG, PDF of AI)' : 'Laad je foto op (JPG, PNG of HEIC)'), upStyle: s.exUp[x.id] ? 'background: #E3ECDD; border: 2px solid #86A681' : 'background: #F5F1E8; border: 2px dashed #A84E30',\n    toggleUp: () => this.pick('x:' + x.id, s.exUp[x.id], (f) => this.go({ exUp: Object.assign({}, s.exUp, { [x.id]: !!f }) }, ie)), hasHint: !!x.hint, hint: x.hint || '',\n    toggle: () => this.go({ ex: Object.assign({}, s.ex, { [x.id]: !on }), extrasOk: false, side: x.zone ? geoOf(x.zone).view : s.side }, ie),\n    onText: (e) => this.go({ exText: Object.assign({}, s.exText, { [x.id]: e.target.value }) }, ie) }; });\n// ---------- voorbeelden ----------\nconst EX = (P.examples || []).filter((e) => e && typeof e[0] === 'string' && e[0] !== '' && e[0].indexOf('/_blob/') !== 0);\nconst hexOf = (n) => { const c = P.colors.find((q) => q[0] === n); return c ? c[1] : '#ccc'; };\nconst isK = (n) => n === 'Ingekleurd';\nconst exOwn = EX.filter((e) => e[1] === cur[0]);\nconst exF = s.exF || (exOwn.length ? cur[0] : 'Alle');\nconst exHit = EX.filter((e) => e[1] === exF);\nconst exListV = exF === 'Alle' || !exHit.length ? EX : exHit;\nconst exMax = Math.max(0, exListV.length - 3), exI = Math.min(s.exI || 0, exMax);\nconst exColorNames = P.colors.map((c) => c[0]).filter((n) => EX.some((e) => e[1] === n));\nconst exPills = [{ label: 'Alle', name: 'Alle', pressed: exF === 'Alle' ? 'true' : 'false', style: 'display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border-radius: 999px; font: inherit; font-size: 15px; font-weight: 600; cursor: pointer; ' + (exF === 'Alle' ? 'background: #3F5A42; color: #fff; border: 1.5px solid #3F5A42' : 'background: #fff; color: #22302A; border: 1.5px solid #D9D3C7'), pick: () => this.setState({ exF: 'Alle', exI: 0 }) }].concat(exColorNames.map((n) => ({ label: '', name: n, pressed: exF === n ? 'true' : 'false', style: 'width: 44px; height: 44px; padding: 0; border-radius: 50%; cursor: pointer; background: ' + hexOf(n) + '; border: 2px solid ' + (exF === n ? '#22302A' : 'rgba(0,0,0,.12)') + '; box-shadow: ' + (exF === n ? '0 0 0 3px #F5F1E8, 0 0 0 5px #A84E30' : 'none'), pick: () => this.setState({ exF: n, exI: 0 }) })));\nconst dot = (hex) => 'width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0; box-shadow: inset 0 0 0 1.5px rgba(0,0,0,.18); background: ' + hex;\nconst examples = exListV.map((e) => { const ci = P.colors.findIndex((c) => c[0] === e[1]); const on = ci === s.color && (isK(e[2]) ? s.style === 'kleur' : s.thread === e[2]);\n  return { src: e[0], alt: e[3], item: e[1], thread: isK(e[2]) ? 'Ingekleurde tekening' : e[2], threadKey: isK(e[2]) ? 'Stijl' : 'Draad', itemDot: dot(hexOf(e[1])), threadDot: dot(isK(e[2]) ? 'conic-gradient(#C2603E, #E5B33A, #86A681, #3F6E9A, #C2603E)' : (TT.find((t) => t[0] === e[2]) || TT[0])[1]),\n    cta: on ? '\u2713 Gekozen' : 'Neem deze kleuren \u2192', btnStyle: 'min-height: 44px; padding: 0; border: 0; background: transparent; font: inherit; font-size: 15px; font-weight: 700; cursor: pointer; flex-shrink: 0; text-decoration: underline; text-underline-offset: 4px; color: ' + (on ? '#3F5A42' : '#A84E30'),\n    pick: () => this.setState(Object.assign({ color: ci > -1 ? ci : s.color, view: 'live' }, isK(e[2]) ? { style: 'kleur' } : { thread: e[2] })) }; });\nconst exArrow = (on) => 'width: 44px; height: 44px; border-radius: 50%; font: inherit; font-size: 18px; font-weight: 700; border: 1.5px solid #22302A; cursor: ' + (on ? 'pointer; background: #22302A; color: #F5F1E8' : 'default; background: transparent; color: #22302A; opacity: .3');\nconst exDots = Array.from({ length: exMax + 1 }, (_, i) => ({ style: 'height: 8px; border-radius: 99px; transition: width .3s; width: ' + (i === exI ? '28px' : '8px') + '; background: ' + (i === exI ? '#3F5A42' : '#D9D3C7') }));\nconst mixSrc = (P.zones || []).some((z) => s.zones && s.zones[z.id] && s.zones[z.id].kind === 'kaart') ? KAART : LIJN;\nconst realMatch = EX.find((e) => e[1] === cur[0] && e[2] === thread) || null;\n// ---------- foto's ----------\nconst PH = ((ph, extra) => { const nm = (u) => String(u).split('?')[0].split('/').pop().toLowerCase(); const seen = ph.map((p) => nm(p[0])); const skip = (P.photosSkip || []).map((x) => String(x).toLowerCase()); const only = P.photosOnly ? P.photosOnly.map((x) => String(x).toLowerCase()) : null; return ph.concat(extra.filter((p) => seen.indexOf(nm(p[0])) < 0 && skip.indexOf(nm(p[0])) < 0 && (!only || only.indexOf(nm(p[0])) >= 0))).slice(0, 10); })(P.photos || [], (window.TN_MOTOR && window.TN_MOTOR.photos) || []);\nconst thumbs = (frontSrc ? [{ label: 'Live voorbeeld', src: frontSrc, style: 'border: 2px solid ' + (s.view === 'live' ? '#A84E30' : 'transparent') + '; background: #EFE8DC', pick: () => this.setState({ view: 'live' }) }] : []).concat(PH.map((p, i) => ({ label: p[1], src: p[0], style: 'border: 2px solid ' + (s.view === 'photo' && !s.realSrc && s.photo === i ? '#A84E30' : 'transparent'), pick: () => this.setState({ view: 'photo', photo: i, realSrc: null }) })));\n// ---------- winkelmand ----------\nconst firstOpen = ids.findIndex((id, i) => i < ids.length - 1 && !this.done(s, id) && id !== 'extra');\nconst cartReady = firstOpen === -1;\nconst CMSG = { kleur: P.group ? 'Kies eerst een kleur' : (P.sizes ? 'Kies eerst je ' + (P.sizeTitle || 'maat').toLowerCase() : 'Kies eerst je kleur'), foto: 'Laad eerst je foto op', tekst: 'Vul eerst je tekst in', datum: s.date ? 'Kies eerst je borduurkleur' : 'Vul eerst je datum in', hand: 'Laad eerst je handschrift op', logo: 'Laad eerst je logo op', vrij: 'Kies eerst wat en waar', plaats: 'Kies eerst waar het komt', aantal: 'Vul eerst je aantallen in' };\n// ---------- maatadvies ----------\nconst SF = this.sfOf(s); const SZ = this.szList(s) || []; const KID = !!(SF && SF.kids); const PRE = KID && SZ.length ? (/^3-6 maanden/.test(SZ[0]) ? ['0-3 maanden'] : /^6-12 maanden/.test(SZ[0]) ? ['3-6 maanden'] : []) : []; const UL = PRE.concat(SZ); const BABY = KID && SZ.length > 0 && (!!SF.baby || /maanden/.test(SZ[0])); const HASM = !!(SF && SF.A && SF.A.length && SF.B && SF.B.length); const MODE = HASM ? s.mode : 'usual'; const KW = (t) => (BABY ? t.replace(/Mijn kind|Je kind/g, \"Het baby'tje\").replace(/je kind/g, \"het baby'tje\") : t);\nlet adv = s.usual, alt = null, title = '', why = '';\nif (SF) { const A = SF.A, B = SF.B; const ui = Math.max(0, SZ.indexOf(s.usual)); const lo = Math.min(ui, SZ.length - 2), hi = lo + 1;\n  if (MODE === 'usual' && PRE.indexOf(s.usual) > -1) { adv = SZ[0]; why = (s.between ? 'Je kind zit tussen ' + s.usual + ' en ' + SZ[0] + '. Neem de grotere maat' : 'Je kind draagt nu ' + s.usual + '. Neem een maat groter') + ', daar groeit het nog in.'; }\n  else if (MODE === 'usual') { if (s.between) { const sm = !KID && s.gender === 'Vrouw'; adv = sm ? SZ[lo] : SZ[hi]; alt = sm ? SZ[hi] : SZ[lo]; why = KID ? 'Je kind zit tussen ' + SZ[lo] + ' en ' + SZ[hi] + '. Neem de grotere maat, daar groeit het nog in.' : 'Je zit tussen ' + SZ[lo] + ' en ' + SZ[hi] + '. Als ' + s.gender.toLowerCase() + ' neem je best de ' + (sm ? 'kleinere.' : 'grotere.'); } else if (KID) { adv = SZ[Math.min(ui + 1, SZ.length - 1)]; alt = adv !== SZ[ui] ? SZ[ui] : null; why = adv !== SZ[ui] ? 'Je kind draagt nu ' + SZ[ui] + '. Neem een maat groter, daar groeit het nog in.' : 'Dit is onze grootste maat.'; } else { adv = SZ[ui]; why = SF.fit || 'Valt op maat.'; } }\n  else { const WA = (s.widthA === 55 && Math.max.apply(null, A) < 55) ? A[0] : s.widthA; const w = Number(WA) || 0; let best = 0; A.forEach((a, i) => { if (Math.abs(a - w) < Math.abs(A[best] - w)) best = i; }); const exact = A.indexOf(w) > -1; let other = best; if (!exact) other = w > A[best] ? Math.min(A.length - 1, best + 1) : Math.max(0, best - 1);\n    if (exact || other === best) { adv = SZ[KID ? Math.min(best + 1, SZ.length - 1) : best]; alt = KID && adv !== SZ[best] ? SZ[best] : null; why = 'Breedte ' + String(A[best]).replace('.', ',') + ' cm komt het dichtst bij jouw ' + w + ' cm.' + (KID && adv !== SZ[best] ? ' Neem een maat groter, daar groeit je kind nog in.' : ''); } else { const l2 = Math.min(best, other), h2 = Math.max(best, other); const sm = !KID && s.gender === 'Vrouw'; adv = sm ? SZ[l2] : SZ[h2]; alt = sm ? SZ[h2] : SZ[l2]; why = 'Je ' + w + ' cm zit tussen ' + SZ[l2] + ' en ' + SZ[h2] + '. ' + (KID ? 'Neem de grotere maat, daar groeit je kind nog in.' : 'Als ' + s.gender.toLowerCase() + ' neem je best de ' + (sm ? 'kleinere.' : 'grotere.')); } }\n  title = 'Neem ' + adv; why = KW(why); }\nconst ai = SZ.indexOf(adv), li = alt ? SZ.indexOf(alt) : -1;\nconst fcols = HASM ? SZ.map((z, i) => { const bg = i === ai ? 'background: #3F5A42; color: #fff; font-weight: 800' : (i === li ? 'background: #E3ECDD; font-weight: 700' : ''); return { label: z, a: String(SF.A[i]).replace('.', ','), b: String(SF.B[i]), headStyle: 'font-weight: 800; ' + bg, style: bg }; }) : [];\nconst tabOn = 'background: #22302A; color: #F5F1E8', tabOff = 'background: transparent; color: #22302A';\nconst helpD = Object.assign({}, HELP, P.help || {});\nconst tekenCel = !P.__c || ['lijntekening', 'ingekleurd', 'huisdier'].indexOf(P.__c) > -1;\nconst vrijTekening = isVrij && this.activeZones(s).some((z) => ['lijn', 'kleur', 'kaart'].indexOf(s.zones[z.id].kind) > -1);\nconst textSample = (P.source === 'tekst' && !P.spotify && !s.text1) || (isVrij && this.activeZones(s).some((z) => (s.zones[z.id].kind === 'tekst' || s.zones[z.id].kind === 'namen') && !s.zones[z.id].text));\nconst stageNote = ((textSample ? 'Zo komt jouw tekst erop. Typ hem hieronder. ' : '') + (isSwatch ? (P.swatchNote || '') + ' ' : '') + (P.source === 'foto' && tekenCel ? 'Na je bestelling tekenen we jouw ' + (P.__c === 'huisdier' ? 'huisdier' : s.style === 'kleur' ? 'ingekleurde tekening' : 'lijntekening') + '. Dit ontwerp mag je op voorhand goedkeuren.' : isVrij && vrijTekening ? 'Dit ontwerp mag je op voorhand goedkeuren.' : '')).trim();\nconst flat = {};\nsteps.forEach((st, i) => { Object.keys(st).forEach((key) => { flat['st' + i + '_' + key] = st[key]; }); });\nfor (let i = steps.length; i < 6; i++) { Object.keys(steps[0]).forEach((key) => { flat['st' + i + '_' + key] = typeof steps[0][key] === 'function' ? (() => {}) : (typeof steps[0][key] === 'boolean' ? false : ''); }); flat['st' + i + '_wrap'] = 'display: none'; }\nreturn Object.assign(flat, {\n  eyebrow: P.eyebrow, h1a: P.h1[0], h1b: P.h1[1], intro: P.intro, priceNote: P.priceNote || '', priceLabel, totalLabel, lines,\n  bullets: (P.bullets || []).map((b) => typeof b === 'string' ? { text: b, hasLink: false } : { text: b[0], link: b[1], after: b[2], hasLink: true }),\n  faq: (P.faq || []).concat((P.faq || []).some((f) => /grootte/i.test(f[0])) ? [] : [['Klopt de grootte precies?', 'Bijna. Door het borduurbestand kan de borduring een paar millimeter afwijken van het voorbeeld.']]).map((f, i) => ({ q: f[0], a: f[1], style: i === 0 ? 'margin-top: 18px' : '' })),\n  hasModels: !!P.models && P.models.length > 1, models, hasVariants: !!P.variants && !P.variantHidden, variants, variantLabel: P.variantLabel || 'Grootte',\n  hasColors: P.colors.length > 1, oneColor: P.colors.length === 1, oneColorNote: P.oneColorNote || '', colors, colorName: P.group ? gcNames.join(', ') : cur[0], colorTitle: P.colorTitle || 'Kleur',\n  hasMethod: !!P.methods, methods, isGroup: !!P.group,\n  hasSizes: !!P.sizes && !P.group, sizeFirst: !!P.sizeFirst && !!P.sizes && !P.group, hasSizesLate: !!P.sizes && !P.group && !P.sizeFirst, sizes, sizeTitle: P.sizeTitle || 'Maat', sizeLabel: (s.size && P.sizeLabels && P.sizeLabels[s.size]) || s.size || 'nog kiezen', hasSizeNote: !!P.sizeNote, sizeNote: P.sizeNote || '', hasFinder: !!SF,\n  sizesLater: s.later, sizesNow: !s.later, canLater: !noGSz, groupColorHint: 'Je mag kleuren mengen: tik op elke kleur die je wil. De aantallen per kleur' + (noGSz ? '' : ' en maat') + ' vul je verder in.', toggleLater: () => this.go({ later: !s.later }, idx('aantal')), qtyRows, laterRows,\n  qtyHint: P.group ? (gt >= P.group.min ? 'Top, je zit aan ' + gt + ' stuks (minimum ' + P.group.min + ').' : 'Nog ' + (P.group.min - gt) + ' stuks tot het minimum van ' + P.group.min + '.') : '',\n  qtyHintStyle: 'margin-top: 12px; font-weight: 700; color: ' + (P.group && gt < P.group.min ? '#A84E30' : '#3F5A42'),\n  uploadStyle: s.uploaded ? 'background: #E3ECDD; border: 2px solid #86A681' : 'background: #fff; border: 2px dashed #A84E30',\n  uploadTitle: s.uploaded ? (P.uploadDone || 'Opgeladen') : (P.uploadTitle || 'Laad je foto op'), uploadSub: s.uploaded ? 'Klik om een ander bestand te kiezen' : (P.uploadSub || 'JPG, PNG of HEIC'), uploadHint: P.uploadHint || '',\n  toggleUpload: () => this.pick('main', s.uploaded, (f) => this.go({ uploaded: !!f }, kB)), hasHelp: !!P.help || P.source === 'foto',\n  hasStyles: !!P.styles, styleName: P.styleNames ? P.styleNames[s.style === 'kleur' ? 1 : 0] : s.style === 'kleur' ? 'ingekleurd' : 'lijntekening', hasKleurNote: s.style === 'kleur' && !!P.kleurNote, kleurNote: P.kleurNote || '',\n  styles: (P.styles || []).map(([id, label, sub, price]) => ({ label, sub, price, pressed: s.style === id ? 'true' : 'false', style: s.style === id ? 'background: #fff; border: 2px solid #22302A' : 'background: #fff; border: 2px solid transparent', preview: id === 'kleur' ? 'width: 64px; height: 64px; background: url(' + KLEURIMG + ') center / contain no-repeat' : 'width: 64px; height: 64px; background: #22302A; -webkit-mask: url(' + LIJN + ') center / contain no-repeat; mask: url(' + LIJN + ') center / contain no-repeat', pick: () => { const z = P.zones.find((q) => q.id === s.pos); this.go({ style: id, pos: id === 'kleur' && z && (z.noKleur || z.view === 'achter') ? null : s.pos, side: id === 'kleur' ? 'voor' : s.side }, kB); } })),\n  textLabel: P.textLabel || 'Wat mogen we borduren?', text1: s.text1, text2: s.text2, allowLine2: !!P.allowLine2, textMax: (curZ && curZ.textMax) || P.textMax || 24, textPlaceholder: P.sampleText && !/[\\/\u2026]/.test(P.sampleText) ? 'Bv. ' + P.sampleText : (P.textPlaceholder || 'Jouw tekst'), text2Placeholder: P.sampleText2 ? 'Bv. ' + P.sampleText2 + ' (mag leeg blijven)' : 'Tweede regel (mag leeg blijven)', textHint: (P.textHint || '') + (curZ && curZ.textMax ? ' Op deze plaats mag het tot ' + curZ.textMax + ' tekens.' : ''),\n  onText1: (e) => this.go({ text1: e.target.value }, kB), onText2: (e) => this.go({ text2: e.target.value }, kB),\n  fieldFont: 'font-family: ' + (P.spotify ? 'inherit' : fontObj[2]) + '; font-size: 18px', fieldFont2: 'font-family: ' + fontObj[2] + '; font-size: 18px; margin-top: 8px',\n  dateValue: s.date, romanLabel: s.date ? 'Zo wordt het' : 'Voorbeeld: 15/06/2023 wordt', onDate: (e) => this.go({ date: e.target.value }, kB), romanValue: romanTxt,\n  seps: [[' \u00B7 ', 'Punt in het midden'], ['.', 'Punt'], [' / ', 'Schuine streep'], [' ', 'Spatie']].map(([v, l]) => ({ label: l, pressed: s.sep === v ? 'true' : 'false', style: s.sep === v ? sel : unsel, pick: () => this.go({ sep: v }, kB) })),\n  logoKinds: [['een', 'E\u00E9n kleur, ik kies de draad'], ['logo1', 'E\u00E9n kleur, zoals in mijn logo'], ['meer', 'Meerdere kleuren, zoals in mijn logo']].map(([v, l]) => ({ label: l, pressed: s.logoKind === v ? 'true' : 'false', style: s.logoKind === v ? sel : unsel, pick: () => this.go({ logoKind: v }, kB) })),\n  logoHint: s.logoKind === 'een' ? 'Kies hieronder de borduurkleur voor je logo.' : 'We nemen de kleuren van je logo over, zo dicht mogelijk bij het origineel.',\n  vrijHint: P.vrijHint || '', multiZone: P.zones.length > 1, hasFrontRule: frontRule, zoneRows, zoneEdit,\n  fontName: fontObj[1], fonts, threads, threadName: s.thread || 'nog kiezen', showAdvice: true, threadAdvice: /^zoals afgebeeld$/i.test(cur[0]) ? 'We raden aan:' : 'Op ' + cur[0].toLowerCase() + ' raden we aan:', advPicks: advList.map((n) => ({ label: n, pressed: s.thread === n ? 'true' : 'false', dot: 'width: 14px; height: 14px; border-radius: 50%; flex-shrink: 0; box-shadow: inset 0 0 0 1.5px rgba(0,0,0,.2); background: ' + ((TT.find((t) => t[0] === n) || TT[0])[1]), style: 'display: inline-flex; align-items: center; gap: 8px; ' + (s.thread === n ? 'background: #3F5A42; color: #fff' : ''), pick: () => this.go({ thread: n }, kB) })),\n  hasRealBox: EX.length > 0, hasReal: !!realMatch, noReal: !realMatch, realSrc: realMatch ? realMatch[0] : '', realAlt: realMatch ? realMatch[3] : '',\n  realText: realMatch ? 'Zo ziet ' + thread.toLowerCase() + ' draad op ' + cur[0].toLowerCase() + ' er in het echt uit. Tik op de foto om hem groot te zien.' : 'Links zie je een voorbeeld van ' + thread.toLowerCase() + ' draad op ' + cur[0].toLowerCase() + '. Twijfel je over de kleur? We denken graag mee.',\n  showReal: () => { if (realMatch) this.openZoom(realMatch[0], realMatch[3]); },\n  mixStyle: 'width: 72px; height: 72px; flex-shrink: 0; border-radius: 16px; display: grid; place-items: center; background: ' + cur[1] + '; box-shadow: inset 0 0 0 1px rgba(0,0,0,.12)',\n  mixLine: 'width: 44px; height: 44px; ' + stitch(tHex) + '; -webkit-mask: url(' + mixSrc + ') center / contain no-repeat; mask: url(' + mixSrc + ') center / contain no-repeat',\n  posGrid: 'display: grid; grid-template-columns: repeat(' + Math.min(posList.length, 4) + ', minmax(0,1fr)); gap: 10px', positions,\n  posHint: (s.style === 'kleur' && P.source === 'foto') ? 'Groter dan 12 cm ingekleurd borduren is helaas technisch niet mogelijk.' : (P.posHint || 'Een specifieke grootte in gedachten? Zet het bij \"Wil je nog iets kwijt?\".'),\n  hasCurSizes: !isVrij && curSizes.length > 0, curSizes, curSizeName: curZ && curZ.sizes && curZ.sizes.length ? curZ.sizes[Math.min(szIdx(curZ), curZ.sizes.length - 1)][0] : '', curSizeHint: curZ && curZ.sizeHint ? curZ.sizeHint : 'De grootte is een indicatie: de echte borduring kan licht afwijken.',\n  extraRows, canConfirmExtra: !s.extrasOk, confirmExtraLabel: exL.some((x) => s.ex[x.id]) ? 'Klaar met extra borduringen' : 'Geen extra borduringen', confirmExtra: () => this.go({ extrasOk: true }, idx('extra')),\n  focusKwijt: (e) => { if (s.open === ids.length - 1) return; const t = e && e.target; const y0 = t && t.getBoundingClientRect ? t.getBoundingClientRect().top : null; this.go({}, ids.length - 1); /* de stappen erboven klappen dicht: houd het tekstvak op dezelfde plek in beeld en behoud de focus */ const n = (t && t.isConnected) ? t : document.querySelector('textarea[aria-label=\"Wil je nog iets kwijt?\"]'); if (n && y0 !== null) { const d = n.getBoundingClientRect().top - y0; if (d) { /* het thema scrollt standaard zacht (scroll-behavior: smooth): corrigeer in hetzelfde beeld, anders zie je de pagina eerst verspringen en dan terugglijden */ const h = document.documentElement, sb = h.style.scrollBehavior; h.style.scrollBehavior = 'auto'; window.scrollTo(0, window.scrollY + d); h.style.scrollBehavior = sb; } if (document.activeElement !== n) { try { n.focus({ preventScroll: true }); } catch (x) { n.focus(); } } } }, kwijtPlaceholder: P.kwijtPlaceholder || 'Hier kun je eventueel nog extra details delen, of deel gerust je verhaal en dan maken we misschien een leuke video van je bestelling.',\n  cartDisabled: cartReady ? 'false' : 'true', cartLabel: cartReady ? (P.group ? 'Bestelling plaatsen \u2192' : 'In winkelmand \u2192') : CMSG[ids[firstOpen]],\n  cartClick: () => { if (!cartReady) this.setState({ open: firstOpen, peek: -1, nudge: true }); else this.addToCart(s); },\n  cartStyle: 'width: 100%; margin-top: 16px; ' + (cartReady ? 'background: #22302A; color: #F5F1E8' : 'background: #E4DED2; color: #55605A; border-color: #E4DED2; font-size: 16px'),\n  isPhoto: !isSwatch, isSwatch, frameStyle: 'position: relative; height: 100%; aspect-ratio: ' + (P.aspect || '600 / 800'),\n  swatchStyle: 'position: relative; width: 100%; height: 100%; border-radius: 22px; background: ' + cur[1] + '; box-shadow: inset 0 0 0 8px rgba(255,255,255,.18), inset 0 0 0 10px rgba(0,0,0,.06)',\n  rulerStyle: 'position: absolute; left: 50%; bottom: 14px; transform: translateX(-50%); font-size: 12px; font-weight: 700; color: ' + (dark ? '#F5F1E8' : '#22302A') + '; opacity: .75', rulerLabel: P.rulerLabel || '',\n  garmentSrc, garmentAlt: (P.noteNoun || P.lineTitle) + ' in ' + cur[0].toLowerCase(),\n  garmentImgStyle: 'position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover' + (s.side === 'achter' && !hasBack ? '; opacity: .45; filter: grayscale(.2)' : ''),\n  backMissing: !isSwatch && s.side === 'achter' && !hasBack, colorMissing: !isSwatch && (!FI.exact || !(P.group || this.colorOk(s.color, s.variant))), missingText: ((mt, nb, ok) => (!ok ? (nb ? mt : 'Deze kleur bestaat niet' + (VK ? ' in {v}' : '')) : (mt && !nb ? mt : 'Foto in {c}' + (VK && !FI.exact ? ' {v}' : '') + ' volgt')).replace('{v}', VK.toLowerCase()).replace('{c}', cur[0].toLowerCase()))(P.missingText || '', /bestaat niet/i.test(P.missingText || ''), P.group || this.colorOk(s.color, s.variant)), colorLower: cur[0].toLowerCase(), marks, hasViews: !isSwatch && (P.views || []).length > 1, views,\n  hasYourPhoto: !!this.yourUrl && s.uploaded && s.view === 'live', yourPhoto: this.yourUrl || '',\n  yourLabel: P.source === 'hand' ? 'Jouw handschrift' : (P.source === 'logo' ? 'Jouw logo' : 'Jouw foto'),\n  yourAlt: P.source === 'hand' ? 'Jouw opgeladen handschrift' : (P.source === 'logo' ? 'Jouw opgeladen logo' : 'Jouw opgeladen foto'),\n  stageStyle: 'position: relative; border-radius: 28px; overflow: hidden; aspect-ratio: 1 / 1.05; background: ' + (P.stageBg || '#EFE8DC'),\n  stageNote, viewLive: s.view === 'live', viewPhoto: s.view === 'photo', photoSrc: s.realSrc || (PH.length ? PH[Math.min(s.photo, PH.length - 1)][0] : ''), photoAlt: (PH.length && s.view === 'photo' && !s.realSrc ? PH[Math.min(s.photo, PH.length - 1)][1] : '') || P.title, thumbs,\n  hasExamples: EX.length >= 2, examples, exPills, exDots, exItemLabel: P.exItemLabel || 'Kleur', exIntro: P.exIntro || 'Zo kwamen andere stukken uit ons atelier. Vind je er een mooi? Klik op \"Neem deze kleuren\" en we zetten dezelfde kleuren in je ontwerp.',\n  exTrack: 'display: flex; gap: 16px; transition: transform .6s cubic-bezier(.2,.7,.2,1); transform: translateX(-' + (exI * 405) + 'px)',\n  exPrev: () => this.setState({ exI: Math.max(0, exI - 1) }), exNext: () => this.setState({ exI: Math.min(exMax, exI + 1) }), exPrevStyle: exArrow(exI > 0), exNextStyle: exArrow(exI < exMax),\n  helpOpen: s.help, openHelp: () => this.setState({ help: true }), closeHelp: () => this.setState({ help: false }), helpGood: helpD.good, helpBad: helpD.bad, helpGoodList: helpD.goodList.map((t) => ({ t })), helpBadList: helpD.badList.map((t) => ({ t })),\n  finderOpen: s.finder, openFinder: () => this.setState({ finder: true }), closeFinder: () => this.setState({ finder: false }), measureNoun: SF ? (SF.noun || 'trui') : 'trui', shapeRomper: !!SF && SF.noun === 'rompertje', shapeTee: !!SF && SF.noun === 'T-shirt', shapeTop: !SF || (SF.noun !== 'rompertje' && SF.noun !== 'T-shirt'), measureHint: 'A: breedte van oksel tot oksel, plat gemeten. B: lengte van het hoogste punt van de schouder tot ' + (SF && SF.noun === 'rompertje' ? 'onderaan het kruisje.' : 'de onderkant.'),\n  isUsual: MODE === 'usual', isMeasure: MODE === 'measure', tabsStyle: HASM ? '' : 'display: none', measureWrap: HASM ? '' : '; display: none', modeUsual: () => this.setState({ mode: 'usual' }), modeMeasure: () => this.setState({ mode: 'measure' }), tabUsual: s.mode === 'usual' ? tabOn : tabOff, tabMeasure: s.mode === 'measure' ? tabOn : tabOff,\n  showGender: !KID, betweenLabel: KID ? KW('Mijn kind zit tussen twee maten') : 'Ik zit vaak tussen twee maten', genders: ['Vrouw', 'Man'].map((g) => ({ label: g, style: g === s.gender ? sel : unsel, pick: () => this.setState({ gender: g }) })),\n  usualQuestion: KW(s.between ? (KID ? 'Tussen welke twee maten zit je kind? Tik op de kleinste.' : 'Tussen welke twee maten zit je? Tik op de kleinste.') : (KID ? 'Welke maat draagt je kind nu?' : 'Welke maat draag je meestal?')),\n  usuals: UL.map((z, i) => { const ui = UL.indexOf(s.usual); const on = s.between ? (i === Math.min(ui, UL.length - 2) || i === Math.min(ui, UL.length - 2) + 1) : z === s.usual; return { label: (SF && SF.labels && SF.labels[z]) || z, pressed: on ? 'true' : 'false', style: on ? sel : unsel, pick: () => this.setState({ usual: s.between && i === UL.length - 1 ? UL[UL.length - 2] : z }) }; }),\n  between: s.between, toggleBetween: () => this.setState({ between: !s.between }), widthA: (HASM && s.widthA === 55 && Math.max.apply(null, SF.A) < 55) ? SF.A[0] : s.widthA, measureRel: SF && /^(rompertje|T-shirt)$/.test(SF.noun || '') ? 'dat' : 'die', onWidth: (e) => this.setState({ widthA: e.target.value }),\n  advice: adv, adviceTitle: title, adviceWhy: why, hasAlt: !!alt, altLabel: alt ? (SZ.indexOf(alt) > ai ? 'Liever ruimer: ' + alt : 'Liever nauwer: ' + alt) : '',\n  takeAdvice: () => this.go({ size: adv, finder: false }, 0), takeAlt: () => this.go({ size: alt, finder: false }, 0), fcols, mtGrid: 'grid-template-columns: 86px repeat(' + Math.max(1, SZ.length) + ', minmax(0,1fr))'\n});\n}\n}\n\n\n/* Tice Nits productmotor: opladen, winkelmand en opstarten (staat achter de canvaslogica in tn-motor.js) */\nconst TEMPLATE = \"<div class=\\\"pp\\\">\\n<div style=\\\"height: 28px\\\"></div>\\n<section class=\\\"wrap grid\\\">\\n<div class=\\\"sticky\\\">\\n<div style=\\\"{{stageStyle}}\\\">\\n<sc-if value=\\\"{{viewLive}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-if value=\\\"{{isPhoto}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"position: absolute; inset: 0; display: grid; place-items: center\\\">\\n<div style=\\\"{{frameStyle}}\\\">\\n<img src=\\\"{{garmentSrc}}\\\" hint-sizes=\\\"(max-width: 900px) calc(79vw - 32px), (max-width: 1280px) calc(40vw - 55px), 465px\\\" fetchpriority=\\\"high\\\" alt=\\\"{{garmentAlt}}\\\" style=\\\"{{garmentImgStyle}}\\\">\\n<div class=\\\"stage-in\\\">\\n<sc-for list=\\\"{{marks}}\\\" as=\\\"m\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"mk\\\" style=\\\"{{m.style}}\\\">\\n<sc-if value=\\\"{{m.isMask}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div style=\\\"{{m.maskStyle}}\\\"></div></sc-if>\\n<sc-if value=\\\"{{m.isImg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><img src=\\\"{{m.src}}\\\" hint-sizes=\\\"(max-width: 900px) 50vw, 320px\\\" alt=\\\"\\\" style=\\\"width: 100%; display: block\\\"></sc-if>\\n<sc-if value=\\\"{{m.isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div style=\\\"{{m.logoStyle}}\\\">{{m.logoTxt}}</div></sc-if>\\n<sc-if value=\\\"{{m.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"{{m.textStyle}}\\\">{{m.line1}}</span><sc-if value=\\\"{{m.hasLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"{{m.textStyle2}}\\\">{{m.line2}}</span></sc-if></sc-if>\\n<sc-if value=\\\"{{m.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\" style=\\\"width: 100%; display: block\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\" fill=\\\"{{m.hex}}\\\"></path></svg></sc-if>\\n<sc-if value=\\\"{{m.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\" style=\\\"width: 100%; display: block\\\"><g fill=\\\"{{m.hex}}\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></g></svg></sc-if>\\n<sc-if value=\\\"{{m.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\" style=\\\"width: 100%; display: block\\\"><g fill=\\\"{{m.hex}}\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></g></svg></sc-if>\\n</div>\\n</sc-for>\\n</div>\\n<sc-if value=\\\"{{colorMissing}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"badge\\\" style=\\\"bottom: 4%\\\">{{missingText}}</span></sc-if>\\n<sc-if value=\\\"{{backMissing}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"badge\\\" style=\\\"top: 6%\\\">Foto achterkant volgt</span></sc-if>\\n</div>\\n</div>\\n</sc-if>\\n<sc-if value=\\\"{{isSwatch}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"position: absolute; inset: 56px 28px 64px; display: grid; place-items: center\\\">\\n<div style=\\\"{{swatchStyle}}\\\">\\n<div class=\\\"stage-in\\\">\\n<sc-for list=\\\"{{marks}}\\\" as=\\\"m\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"mk\\\" style=\\\"{{m.style}}\\\">\\n<sc-if value=\\\"{{m.isMask}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div style=\\\"{{m.maskStyle}}\\\"></div></sc-if>\\n<sc-if value=\\\"{{m.isImg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><img src=\\\"{{m.src}}\\\" hint-sizes=\\\"(max-width: 900px) 50vw, 320px\\\" alt=\\\"\\\" style=\\\"width: 100%; display: block\\\"></sc-if>\\n<sc-if value=\\\"{{m.isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div style=\\\"{{m.logoStyle}}\\\">{{m.logoTxt}}</div></sc-if>\\n<sc-if value=\\\"{{m.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"{{m.textStyle}}\\\">{{m.line1}}</span><sc-if value=\\\"{{m.hasLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"{{m.textStyle2}}\\\">{{m.line2}}</span></sc-if></sc-if>\\n</div>\\n</sc-for>\\n</div>\\n<span style=\\\"{{rulerStyle}}\\\">{{rulerLabel}}</span>\\n</div>\\n</div>\\n</sc-if>\\n<sc-if value=\\\"{{hasViews}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"position: absolute; left: 18px; top: 18px; display: flex; gap: 6px; background: #fff; border-radius: 999px; padding: 5px\\\">\\n<sc-for list=\\\"{{views}}\\\" as=\\\"v\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" onClick=\\\"{{v.pick}}\\\" style=\\\"{{v.style}}\\\">{{v.label}}</button></sc-for>\\n</div>\\n</sc-if>\\n<sc-if value=\\\"{{hasYourPhoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><figure class=\\\"yours\\\"><img src=\\\"{{yourPhoto}}\\\" alt=\\\"{{yourAlt}}\\\"><figcaption>{{yourLabel}}</figcaption></figure></sc-if>\\n<span class=\\\"stage-note\\\" style=\\\"position: absolute; left: 20px; bottom: 16px; right: 20px; font-size: 13px; line-height: 1.4; color: #55605A\\\">{{stageNote}}</span>\\n</sc-if>\\n<sc-if value=\\\"{{viewPhoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><img src=\\\"{{photoSrc}}\\\" hint-sizes=\\\"(max-width: 900px) calc(100vw - 40px), (max-width: 1280px) calc(51vw - 70px), 590px\\\" alt=\\\"{{photoAlt}}\\\" style=\\\"position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover\\\"></sc-if>\\n</div>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px\\\">\\n<sc-for list=\\\"{{thumbs}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"3\\\">\\n<button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.label}}\\\" style=\\\"{{t.style}}\\\"><img src=\\\"{{t.src}}\\\" hint-sizes=\\\"78px\\\" alt=\\\"\\\"></button>\\n</sc-for>\\n</div>\\n</div>\\n\\n<div>\\n<p class=\\\"eyebrow\\\">{{eyebrow}}</p>\\n<h1 style=\\\"margin: 12px 0 0; font-size: 50px; line-height: .95; font-weight: 800; letter-spacing: -0.05em\\\">{{h1a}} <span class=\\\"serif\\\" style=\\\"color: #A84E30\\\">{{h1b}}</span></h1>\\n<div style=\\\"display: flex; align-items: baseline; gap: 16px; margin-top: 14px; flex-wrap: wrap\\\"><span style=\\\"font-size: 30px; font-weight: 800\\\">{{priceLabel}}</span><span style=\\\"font-size: 15px; color: #55605A\\\">{{priceNote}}</span><span class=\\\"tnm-stars\\\">\u2605\u2605\u2605\u2605\u2605 4,9/5 op Google</span></div>\\n<p style=\\\"margin: 12px 0 18px; font-size: 17px; line-height: 1.55\\\">{{intro}}</p>\\n<div class=\\\"step\\\" style=\\\"{{st0_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st0_toggle}}\\\" aria-expanded=\\\"{{st0_exp}}\\\" style=\\\"{{st0_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st0_numStyle}}\\\">{{st0_num}}</span><span class=\\\"t\\\">{{st0_title}}</span><span class=\\\"sum\\\">{{st0_sum}}</span><sc-if value=\\\"{{st0_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st0_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st0_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st0_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st0_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st0_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st0_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st0_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div class=\\\"step\\\" style=\\\"{{st1_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st1_toggle}}\\\" aria-expanded=\\\"{{st1_exp}}\\\" style=\\\"{{st1_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st1_numStyle}}\\\">{{st1_num}}</span><span class=\\\"t\\\">{{st1_title}}</span><span class=\\\"sum\\\">{{st1_sum}}</span><sc-if value=\\\"{{st1_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st1_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st1_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st1_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st1_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st1_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st1_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st1_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div class=\\\"step\\\" style=\\\"{{st2_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st2_toggle}}\\\" aria-expanded=\\\"{{st2_exp}}\\\" style=\\\"{{st2_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st2_numStyle}}\\\">{{st2_num}}</span><span class=\\\"t\\\">{{st2_title}}</span><span class=\\\"sum\\\">{{st2_sum}}</span><sc-if value=\\\"{{st2_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st2_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st2_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st2_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st2_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st2_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st2_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st2_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div class=\\\"step\\\" style=\\\"{{st3_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st3_toggle}}\\\" aria-expanded=\\\"{{st3_exp}}\\\" style=\\\"{{st3_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st3_numStyle}}\\\">{{st3_num}}</span><span class=\\\"t\\\">{{st3_title}}</span><span class=\\\"sum\\\">{{st3_sum}}</span><sc-if value=\\\"{{st3_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st3_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st3_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st3_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st3_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st3_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st3_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st3_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div class=\\\"step\\\" style=\\\"{{st4_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st4_toggle}}\\\" aria-expanded=\\\"{{st4_exp}}\\\" style=\\\"{{st4_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st4_numStyle}}\\\">{{st4_num}}</span><span class=\\\"t\\\">{{st4_title}}</span><span class=\\\"sum\\\">{{st4_sum}}</span><sc-if value=\\\"{{st4_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st4_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st4_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st4_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st4_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st4_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st4_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st4_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div class=\\\"step\\\" style=\\\"{{st5_wrap}}\\\">\\n<button type=\\\"button\\\" class=\\\"stephead\\\" onClick=\\\"{{st5_toggle}}\\\" aria-expanded=\\\"{{st5_exp}}\\\" style=\\\"{{st5_headStyle}}\\\"><span class=\\\"num\\\" style=\\\"{{st5_numStyle}}\\\">{{st5_num}}</span><span class=\\\"t\\\">{{st5_title}}</span><span class=\\\"sum\\\">{{st5_sum}}</span><sc-if value=\\\"{{st5_showChg}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"chg\\\">Wijzig</span></sc-if></button>\\n<sc-if value=\\\"{{st5_open}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"stepbody\\\">\\n<sc-if value=\\\"{{st5_hasWarn}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"warn\\\" role=\\\"status\\\">{{st5_warn}}</p></sc-if>\\n\\n<sc-if value=\\\"{{st5_isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{hasModels}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Model</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{models}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasVariants}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{variantLabel}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{variants}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{sizeFirst}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{hasSizes}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if></sc-if>\\n<sc-if value=\\\"{{hasColors}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<p class=\\\"sub\\\">{{colorTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{colorName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"kleur\\\"><sc-for list=\\\"{{colors}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"10\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{c.pick}}\\\" aria-label=\\\"{{c.name}}\\\" aria-pressed=\\\"{{c.pressed}}\\\" style=\\\"{{c.style}}\\\"><sc-if value=\\\"{{c.multi}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"swck\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{isGroup}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 10px\\\">{{groupColorHint}}</p></sc-if>\\n</sc-if>\\n<sc-if value=\\\"{{oneColor}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 0\\\">{{oneColorNote}}</p></sc-if>\\n<sc-if value=\\\"{{hasMethod}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduren of bedrukken?</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{methods}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasSizesLate}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center; margin: 20px 0 10px\\\"><p class=\\\"sub\\\" style=\\\"margin: 0\\\">{{sizeTitle}} \u00B7 <span style=\\\"color: #22302A\\\">{{sizeLabel}}</span></p><sc-if value=\\\"{{hasFinder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn\\\" onClick=\\\"{{openFinder}}\\\">Welke maat neem ik?</button></sc-if></div>\\n<div class=\\\"row\\\" data-tn-veld=\\\"maat\\\"><sc-for list=\\\"{{sizes}}\\\" as=\\\"s\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{s.pick}}\\\" aria-pressed=\\\"{{s.pressed}}\\\" style=\\\"{{s.style}}\\\">{{s.label}}</button></sc-for></div>\\n<sc-if value=\\\"{{hasSizeNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin-top: 12px\\\">{{sizeNote}}</p></sc-if>\\n</sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isFoto}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}} <sc-if value=\\\"{{hasHelp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"linkbtn dark\\\" onClick=\\\"{{openHelp}}\\\">Is mijn foto geschikt?</button></sc-if></p>\\n<sc-if value=\\\"{{hasStyles}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Stijl \u00B7 <span style=\\\"color: #22302A\\\">{{styleName}}</span></p>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px\\\"><sc-for list=\\\"{{styles}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\"><span style=\\\"{{o.preview}}\\\" aria-hidden=\\\"true\\\"></span><span style=\\\"font-size: 16px\\\">{{o.label}}</span><span style=\\\"font-size: 13px; font-weight: 600; color: #55605A\\\">{{o.sub}}</span><small>{{o.price}}</small></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{hasKleurNote}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"note\\\">{{kleurNote}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isTekst}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">{{textLabel}}</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"tekst\\\" type=\\\"text\\\" value=\\\"{{text1}}\\\" onInput=\\\"{{onText1}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"{{textLabel}}\\\" placeholder=\\\"{{textPlaceholder}}\\\" style=\\\"{{fieldFont}}\\\">\\n<sc-if value=\\\"{{allowLine2}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{text2}}\\\" onInput=\\\"{{onText2}}\\\" maxlength=\\\"{{textMax}}\\\" aria-label=\\\"Tweede regel\\\" placeholder=\\\"{{text2Placeholder}}\\\" style=\\\"{{fieldFont2}}\\\"></sc-if>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{textHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isDatum}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\">Welke datum?</p>\\n<input class=\\\"field\\\" data-tn-veld=\\\"datum\\\" type=\\\"date\\\" value=\\\"{{dateValue}}\\\" onInput=\\\"{{onDate}}\\\" aria-label=\\\"Datum\\\" placeholder=\\\"15/06/2023\\\">\\n<div class=\\\"preview2\\\"><span>{{romanLabel}}</span><strong style=\\\"{{fieldFont}}\\\">{{romanValue}}</strong></div>\\n<p class=\\\"sub\\\">Tussen de cijfers</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{seps}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isHand}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 18px; font-size: 14px\\\">{{uploadHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isLogo}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<button type=\\\"button\\\" class=\\\"up\\\" data-tn-veld=\\\"bestand\\\" onClick=\\\"{{toggleUpload}}\\\" style=\\\"{{uploadStyle}}\\\"><svg width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span><strong style=\\\"display: block; font-size: 17px\\\">{{uploadTitle}}</strong><span style=\\\"font-size: 14px\\\">{{uploadSub}}</span></span></button>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{logoKinds}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{logoHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isVrij}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"hint\\\" style=\\\"font-size: 14px\\\">{{vrijHint}}</p>\\n<sc-if value=\\\"{{multiZone}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<div class=\\\"ztiles\\\" data-tn-veld=\\\"zones\\\" role=\\\"group\\\" aria-label=\\\"Kies waar we borduren\\\"><sc-for list=\\\"{{zoneRows}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"ztile\\\" onClick=\\\"{{z.toggle}}\\\" aria-pressed=\\\"{{z.pressed}}\\\" style=\\\"{{z.tileStyle}}\\\"><span class=\\\"zth\\\" style=\\\"{{z.thStyle}}\\\"><sc-if value=\\\"{{z.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{z.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{z.boxStyle}}\\\"></span><sc-if value=\\\"{{z.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"zok\\\" aria-hidden=\\\"true\\\">\u2713</span></sc-if></span><span class=\\\"ztl\\\">{{z.label}}</span><span class=\\\"zmx\\\">{{z.max}} \u00B7 {{z.price}}</span></button></sc-for></div>\\n<sc-if value=\\\"{{hasFrontRule}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\">Op de voorkant kiezen we \u00E9\u00E9n borduring: klein op de borst, klein in het midden of groot. De rug en de mouw mogen erbij.</p></sc-if>\\n</sc-if>\\n<sc-for list=\\\"{{zoneEdit}}\\\" as=\\\"z\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"zone\\\" data-tn-veld=\\\"z:{{z.zid}}\\\">\\n<p class=\\\"zhead\\\"><strong>{{z.label}}</strong> <span>{{z.maxNow}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{z.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\">{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{z.isText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{z.text}}\\\" onInput=\\\"{{z.onText}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{z.aria}}\\\" placeholder=\\\"{{z.placeholder}}\\\" style=\\\"{{fieldFont}}; margin-top: 10px\\\"></sc-if>\\n<sc-if value=\\\"{{z.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{z.toggleUp}}\\\" style=\\\"{{z.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{z.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{z.hasSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{z.esizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{z.canUnder}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.under}}\\\" onChange=\\\"{{z.toggleUnder}}\\\">Tekst onder de borduring<strong style=\\\"margin-left: auto\\\">+ \u20AC3</strong></label>\\n<sc-if value=\\\"{{z.under}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><sc-if value=\\\"{{z.showUnderText}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><input class=\\\"field narrowf\\\" type=\\\"text\\\" value=\\\"{{z.underText}}\\\" onInput=\\\"{{z.onUnder}}\\\" maxlength=\\\"24\\\" aria-label=\\\"Tekst onder de borduring\\\" placeholder=\\\"{{z.underPh}}\\\"></sc-if><sc-if value=\\\"{{z.canUnderNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{z.underNames}}\\\" onChange=\\\"{{z.toggleUnderNames}}\\\">Per stuk een andere naam</label></sc-if></sc-if></sc-if>\\n<sc-if value=\\\"{{z.showNames}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 12px 0 6px\\\">Naam en maat per stuk</p><sc-for list=\\\"{{z.nrows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: grid; grid-template-columns: 1fr 96px 44px; gap: 8px; margin-bottom: 8px; align-items: center\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{r.name}}\\\" onInput=\\\"{{r.onName}}\\\" maxlength=\\\"{{z.maxlen}}\\\" aria-label=\\\"{{r.aria}}\\\" placeholder=\\\"Naam of totem\\\" style=\\\"margin: 0\\\"><select class=\\\"field\\\" onChange=\\\"{{r.onSize}}\\\" aria-label=\\\"{{r.ariaSize}}\\\" style=\\\"margin: 0; padding-right: 6px\\\"><sc-for list=\\\"{{r.sizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><option value=\\\"{{o.v}}\\\" selected=\\\"{{o.sel}}\\\">{{o.l}}</option></sc-for></select><button type=\\\"button\\\" onClick=\\\"{{r.remove}}\\\" aria-label=\\\"{{r.ariaDel}}\\\" style=\\\"width: 44px; height: 44px; border: 1px solid #E3D8C6; border-radius: 999px; background: #fff; font-size: 18px; cursor: pointer\\\">\u00D7</button></div></sc-for><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{z.addName}}\\\" style=\\\"margin-top: 2px\\\">+ Nog een naam</button><p class=\\\"hint\\\" style=\\\"margin: 8px 0 0\\\">{{z.namesHint}}</p></sc-if>\\n<sc-if value=\\\"{{z.isKleur}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{z.kleurNote}}</p></sc-if>\\n</div>\\n</sc-for>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isPlaats}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div style=\\\"{{posGrid}}\\\" data-tn-veld=\\\"plaats\\\"><sc-for list=\\\"{{positions}}\\\" as=\\\"p\\\" hint-placeholder-count=\\\"4\\\"><button type=\\\"button\\\" class=\\\"pos\\\" onClick=\\\"{{p.pick}}\\\" aria-pressed=\\\"{{p.pressed}}\\\" style=\\\"{{p.style}}\\\"><span class=\\\"zth\\\" aria-hidden=\\\"true\\\" style=\\\"{{p.thStyle}}\\\"><sc-if value=\\\"{{p.hasThumb}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><img src=\\\"{{p.thumb}}\\\" hint-sizes=\\\"(max-width: 900px) 45vw, 160px\\\" loading=\\\"lazy\\\" alt=\\\"\\\"></sc-if><span style=\\\"{{p.boxStyle}}\\\"></span></span><span>{{p.label}}</span><span style=\\\"font-size: 12px; font-weight: 600; color: #55605A\\\">{{p.max}}</span><small style=\\\"{{p.priceStyle}}\\\">{{p.price}}</small></button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin: 12px 0 0\\\">{{posHint}}</p>\\n<sc-if value=\\\"{{hasCurSizes}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"sub\\\" style=\\\"margin: 16px 0 8px\\\">Hoe groot?</p><div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div><p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isExtra}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{extraRows}}\\\" as=\\\"x\\\" hint-placeholder-count=\\\"2\\\">\\n<label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{x.on}}\\\" onChange=\\\"{{x.toggle}}\\\">{{x.label}}<strong style=\\\"margin-left: auto\\\">{{x.price}}</strong></label>\\n<sc-if value=\\\"{{x.on}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"xbody\\\" data-tn-veld=\\\"x:{{x.xid}}\\\">\\n<sc-if value=\\\"{{x.hasKinds}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"row\\\" style=\\\"margin-bottom: 4px\\\"><sc-for list=\\\"{{x.kinds}}\\\" as=\\\"k\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"kind\\\" onClick=\\\"{{k.pick}}\\\" aria-pressed=\\\"{{k.pressed}}\\\" style=\\\"{{k.style}}\\\"><sc-if value=\\\"{{k.isHart}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 21s-7.5-4.6-9.6-9.2C1 8.6 3 5 6.5 5c2.1 0 3.6 1.2 4.5 2.6C11.9 6.2 13.4 5 15.5 5 19 5 21 8.6 19.6 11.8 17.5 16.4 12 21 12 21z\\\"></path></svg></sc-if><sc-if value=\\\"{{k.isHond}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><ellipse cx=\\\"12\\\" cy=\\\"16.5\\\" rx=\\\"5.2\\\" ry=\\\"4.3\\\"></ellipse><ellipse cx=\\\"4.8\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(-25 4.8 10.8)\\\"></ellipse><ellipse cx=\\\"9.2\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(-8 9.2 6.3)\\\"></ellipse><ellipse cx=\\\"14.8\\\" cy=\\\"6.3\\\" rx=\\\"2\\\" ry=\\\"2.9\\\" transform=\\\"rotate(8 14.8 6.3)\\\"></ellipse><ellipse cx=\\\"19.2\\\" cy=\\\"10.8\\\" rx=\\\"1.9\\\" ry=\\\"2.7\\\" transform=\\\"rotate(25 19.2 10.8)\\\"></ellipse></svg></sc-if><sc-if value=\\\"{{k.isKat}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 12.2c2.6 0 6 3 6 5.6 0 1.9-1.6 2.8-3.1 2.4-1-.3-1.9-.7-2.9-.7s-1.9.4-2.9.7C7.6 20.6 6 19.7 6 17.8c0-2.6 3.4-5.6 6-5.6z\\\"></path><circle cx=\\\"6\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle><circle cx=\\\"9.9\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"14.1\\\" cy=\\\"7.2\\\" r=\\\"2.2\\\"></circle><circle cx=\\\"18\\\" cy=\\\"10.6\\\" r=\\\"2.1\\\"></circle></svg></sc-if>{{k.label}}<sc-if value=\\\"{{k.hasPrice}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span style=\\\"font-weight: 600; color: #A84E30\\\"> {{k.price}}</span></sc-if></button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{x.hasText}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><input class=\\\"field\\\" type=\\\"text\\\" value=\\\"{{x.text}}\\\" onInput=\\\"{{x.onText}}\\\" maxlength=\\\"{{x.maxlen}}\\\" aria-label=\\\"{{x.label}}\\\" placeholder=\\\"{{x.placeholder}}\\\" style=\\\"{{x.fieldStyle}}\\\"></sc-if>\\n<sc-if value=\\\"{{x.needsUp}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"upsm\\\" onClick=\\\"{{x.toggleUp}}\\\" style=\\\"{{x.upStyle}}\\\"><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 16V4M7 9l5-5 5 5\\\"></path><path d=\\\"M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3\\\"></path></svg><span>{{x.upTitle}}</span></button></sc-if>\\n<sc-if value=\\\"{{x.hasHint}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><p class=\\\"hint\\\" style=\\\"margin: 6px 0 0\\\">{{x.hint}}</p></sc-if>\\n</div>\\n</sc-if>\\n</sc-for>\\n<sc-if value=\\\"{{canConfirmExtra}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><button type=\\\"button\\\" class=\\\"next\\\" onClick=\\\"{{confirmExtra}}\\\">{{confirmExtraLabel}}</button></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isAantal}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-if value=\\\"{{canLater}}\\\"><label class=\\\"chk\\\"><input type=\\\"checkbox\\\" checked=\\\"{{sizesLater}}\\\" onChange=\\\"{{toggleLater}}\\\">De maten geef ik later door</label></sc-if>\\n<sc-if value=\\\"{{sizesNow}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<sc-for list=\\\"{{qtyRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\">\\n<div class=\\\"qrow\\\"><p class=\\\"sub\\\" style=\\\"display: flex; align-items: center; gap: 8px; margin: 10px 0 8px\\\"><span style=\\\"{{r.dot}}\\\"></span>{{r.name}} \u00B7 {{r.total}} stuks</p>\\n<div class=\\\"qty\\\"><sc-for list=\\\"{{r.cells}}\\\" as=\\\"q\\\" hint-placeholder-count=\\\"7\\\"><label>{{q.label}}<input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{q.value}}\\\" onInput=\\\"{{q.onInput}}\\\" aria-label=\\\"{{q.aria}}\\\"></label></sc-for></div></div>\\n</sc-for>\\n</sc-if>\\n<sc-if value=\\\"{{sizesLater}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<sc-for list=\\\"{{laterRows}}\\\" as=\\\"r\\\" hint-placeholder-count=\\\"1\\\"><label class=\\\"lrow\\\"><span style=\\\"{{r.dot}}\\\"></span><span style=\\\"flex: 1\\\">{{r.name}}: hoeveel stuks ongeveer?</span><input type=\\\"number\\\" min=\\\"0\\\" value=\\\"{{r.value}}\\\" onInput=\\\"{{r.onInput}}\\\" aria-label=\\\"{{r.aria}}\\\"></label></sc-for>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">We sturen je een lijst om de maten (en eventueel de namen) per persoon in te vullen. Je bestelling start pas als we die hebben.</p>\\n</sc-if>\\n<p class=\\\"hint\\\" style=\\\"{{qtyHintStyle}}\\\">{{qtyHint}}</p>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_showSize}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurgrootte \u00B7 <span style=\\\"color: #22302A\\\">{{curSizeName}}</span></p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{curSizes}}\\\" as=\\\"o\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{o.pick}}\\\" aria-pressed=\\\"{{o.pressed}}\\\" style=\\\"{{o.style}}\\\">{{o.label}}</button></sc-for></div>\\n<p class=\\\"hint\\\" style=\\\"margin-top: 8px\\\">{{curSizeHint}}</p>\\n</sc-if>\\n<sc-if value=\\\"{{st5_showFont}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Lettertype \u00B7 <span style=\\\"color: #22302A\\\">{{fontName}}</span></p>\\n<div class=\\\"fontgrid\\\"><sc-for list=\\\"{{fonts}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"5\\\"><button type=\\\"button\\\" class=\\\"fontcard\\\" onClick=\\\"{{f.pick}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" aria-label=\\\"{{f.label}}\\\" style=\\\"{{f.style}}\\\"><span class=\\\"fontcard__s\\\" style=\\\"{{f.sample}}\\\">{{f.txt}}</span></button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{st5_showThread}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p class=\\\"sub\\\" style=\\\"margin-top: 18px\\\">Borduurkleur \u00B7 <span style=\\\"color: #22302A\\\">{{threadName}}</span></p>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 9px\\\" data-tn-veld=\\\"draad\\\"><sc-for list=\\\"{{threads}}\\\" as=\\\"t\\\" hint-placeholder-count=\\\"18\\\"><button type=\\\"button\\\" class=\\\"sw\\\" onClick=\\\"{{t.pick}}\\\" aria-label=\\\"{{t.name}}\\\" aria-pressed=\\\"{{t.pressed}}\\\" style=\\\"{{t.style}}\\\"><sc-if value=\\\"{{t.advised}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><span class=\\\"advdot\\\"></span></sc-if></button></sc-for></div>\\n<sc-if value=\\\"{{showAdvice}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div class=\\\"advice\\\"><span>{{threadAdvice}}</span><sc-for list=\\\"{{advPicks}}\\\" as=\\\"a\\\" hint-placeholder-count=\\\"3\\\"><button type=\\\"button\\\" onClick=\\\"{{a.pick}}\\\" class=\\\"advbtn\\\" aria-pressed=\\\"{{a.pressed}}\\\" style=\\\"{{a.style}}\\\"><span style=\\\"{{a.dot}}\\\"></span>{{a.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{hasRealBox}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><div class=\\\"realbox\\\"><sc-if value=\\\"{{hasReal}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" class=\\\"thumb\\\" onClick=\\\"{{showReal}}\\\" aria-label=\\\"Bekijk de foto groot\\\" style=\\\"width: 72px; height: 72px; flex-shrink: 0; border: 0\\\"><img src=\\\"{{realSrc}}\\\" hint-sizes=\\\"72px\\\" alt=\\\"{{realAlt}}\\\"></button></sc-if><sc-if value=\\\"{{noReal}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><span style=\\\"{{mixStyle}}\\\" aria-hidden=\\\"true\\\"><span style=\\\"{{mixLine}}\\\"></span></span></sc-if><span style=\\\"font-size: 14px; line-height: 1.45\\\">{{realText}}</span></div></sc-if>\\n</sc-if>\\n\\n<sc-if value=\\\"{{st5_isKwijt}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<textarea class=\\\"field\\\" rows=\\\"3\\\" aria-label=\\\"Wil je nog iets kwijt?\\\" onFocus=\\\"{{focusKwijt}}\\\" placeholder=\\\"{{kwijtPlaceholder}}\\\" style=\\\"padding: 12px 16px; min-height: 92px; resize: vertical\\\"></textarea>\\n</sc-if>\\n</div>\\n</sc-if>\\n</div>\\n\\n<div style=\\\"background: #fff; border-radius: 24px; padding: 22px; margin-top: 10px\\\">\\n<sc-for list=\\\"{{lines}}\\\" as=\\\"ln\\\" hint-placeholder-count=\\\"2\\\"><div style=\\\"display: flex; justify-content: space-between; gap: 16px; font-size: 15px; padding: 4px 0; color: #3A453F\\\"><span>{{ln.label}}</span><span style=\\\"white-space: nowrap\\\">{{ln.price}}</span></div></sc-for>\\n<div style=\\\"display: flex; justify-content: space-between; font-size: 22px; font-weight: 800; padding-top: 12px; margin-top: 8px; border-top: 1px dashed #BFC7B8\\\"><span>{{totalLabel}}</span><span>{{priceLabel}}</span></div>\\n<button type=\\\"button\\\" class=\\\"btn\\\" onClick=\\\"{{cartClick}}\\\" aria-disabled=\\\"{{cartDisabled}}\\\" aria-describedby=\\\"tnm-cart-hint\\\" style=\\\"{{cartStyle}}\\\">{{cartLabel}}</button><p id=\\\"tnm-cart-hint\\\" class=\\\"tnm-sr\\\" aria-live=\\\"polite\\\">{{cartHint}}</p>\\n<ul style=\\\"list-style: none; padding: 0; margin: 16px 0 0; display: grid; gap: 8px; font-size: 14px; color: #3A453F\\\">\\n<sc-for list=\\\"{{bullets}}\\\" as=\\\"b\\\" hint-placeholder-count=\\\"4\\\"><li>\u2713 {{b.text}}<sc-if value=\\\"{{b.hasLink}}\\\" hint-placeholder-val=\\\"{{false}}\\\"> <a href=\\\"/collections/snel-nodig\\\" style=\\\"font-weight: 700; text-underline-offset: 3px\\\">{{b.link}}</a> {{b.after}}</sc-if></li></sc-for>\\n</ul>\\n</div>\\n<sc-for list=\\\"{{faq}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"2\\\">\\n<details class=\\\"acc\\\" style=\\\"{{f.style}}\\\"><summary>{{f.q}} <span>+</span></summary><p>{{f.a}}</p></details>\\n</sc-for>\\n</div>\\n</section>\\n\\n<sc-if value=\\\"{{hasExamples}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<section class=\\\"wrap\\\" style=\\\"padding-top: 72px; padding-bottom: 24px\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; flex-wrap: wrap\\\">\\n<div><p class=\\\"eyebrow\\\">Hulp bij kiezen</p><h2 style=\\\"margin: 12px 0 0; font-size: 42px; font-weight: 800; letter-spacing: -0.05em; line-height: .95\\\">Twijfel je over de kleuren?</h2><p style=\\\"margin: 10px 0 0; font-size: 17px; line-height: 1.5; color: #55605A; max-width: 620px\\\">{{exIntro}}</p></div>\\n<div style=\\\"display: flex; gap: 8px\\\"><button type=\\\"button\\\" onClick=\\\"{{exPrev}}\\\" aria-label=\\\"Vorige voorbeelden\\\" style=\\\"{{exPrevStyle}}\\\">\u2190</button><button type=\\\"button\\\" onClick=\\\"{{exNext}}\\\" aria-label=\\\"Volgende voorbeelden\\\" style=\\\"{{exNextStyle}}\\\">\u2192</button></div>\\n</div>\\n<div style=\\\"display: flex; flex-wrap: wrap; gap: 8px; margin: 22px 0 22px\\\">\\n<sc-for list=\\\"{{exPills}}\\\" as=\\\"f\\\" hint-placeholder-count=\\\"6\\\"><button type=\\\"button\\\" onClick=\\\"{{f.pick}}\\\" aria-label=\\\"{{f.name}}\\\" title=\\\"{{f.name}}\\\" aria-pressed=\\\"{{f.pressed}}\\\" style=\\\"{{f.style}}\\\">{{f.label}}</button></sc-for>\\n</div>\\n<div style=\\\"overflow: hidden; border-radius: 24px\\\">\\n<div style=\\\"{{exTrack}}\\\">\\n<sc-for list=\\\"{{examples}}\\\" as=\\\"e\\\" hint-placeholder-count=\\\"3\\\">\\n<figure style=\\\"margin: 0; flex: 0 0 389px; background: #fff; border-radius: 24px; overflow: hidden; display: flex; flex-direction: column\\\">\\n<img src=\\\"{{e.src}}\\\" hint-sizes=\\\"389px\\\" loading=\\\"lazy\\\" alt=\\\"{{e.alt}}\\\" style=\\\"width: 100%; aspect-ratio: 1 / 1.1; object-fit: cover; display: block\\\">\\n<figcaption style=\\\"padding: 18px 20px 20px; display: flex; align-items: flex-end; justify-content: space-between; gap: 14px\\\">\\n<span style=\\\"display: grid; gap: 8px; font-size: 15px\\\">\\n<span style=\\\"display: flex; align-items: center; gap: 10px\\\"><span style=\\\"{{e.itemDot}}\\\"></span><span><span style=\\\"color: #55605A\\\">{{exItemLabel}} </span><strong>{{e.item}}</strong></span></span>\\n<span style=\\\"display: flex; align-items: center; gap: 10px\\\"><span style=\\\"{{e.threadDot}}\\\"></span><span><span style=\\\"color: #55605A\\\">{{e.threadKey}} </span><strong>{{e.thread}}</strong></span></span>\\n</span>\\n<button type=\\\"button\\\" onClick=\\\"{{e.pick}}\\\" style=\\\"{{e.btnStyle}}\\\">{{e.cta}}</button>\\n</figcaption>\\n</figure>\\n</sc-for>\\n</div>\\n</div>\\n<div style=\\\"display: flex; justify-content: center; gap: 6px; margin-top: 20px\\\"><sc-for list=\\\"{{exDots}}\\\" as=\\\"d\\\" hint-placeholder-count=\\\"4\\\"><span style=\\\"{{d.style}}\\\"></span></sc-for></div>\\n</section>\\n</sc-if>\\n<div style=\\\"height: 40px\\\"></div>\\n\\n<sc-if value=\\\"{{helpOpen}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"modal\\\">\\n<div class=\\\"sheet\\\" role=\\\"dialog\\\" aria-label=\\\"Is mijn foto geschikt?\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center\\\"><p class=\\\"eyebrow\\\">Fototips</p><button type=\\\"button\\\" onClick=\\\"{{closeHelp}}\\\" aria-label=\\\"Sluiten\\\" class=\\\"xbtn\\\">\u00D7</button></div>\\n<h2 style=\\\"margin: 10px 0 20px; font-size: 36px; font-weight: 800; letter-spacing: -.04em; line-height: 1\\\">Is mijn foto <span class=\\\"serif\\\" style=\\\"color: #A84E30\\\">geschikt?</span></h2>\\n<div style=\\\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px\\\">\\n<div style=\\\"background: #fff; border-radius: 20px; padding: 14px\\\">\\n<img src=\\\"{{helpGood}}\\\" hint-sizes=\\\"(max-width: 900px) 42vw, 340px\\\" loading=\\\"lazy\\\" alt=\\\"Goede foto: scherp, van dichtbij en bij daglicht\\\" style=\\\"width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 14px; display: block\\\">\\n<p style=\\\"margin: 12px 0 8px; font-size: 16px; font-weight: 800; color: #3F5A42\\\">\u2713 Zo werkt het goed</p>\\n<ul style=\\\"margin: 0; padding-left: 18px; font-size: 14px; line-height: 1.6; color: #3A453F\\\"><sc-for list=\\\"{{helpGoodList}}\\\" as=\\\"g\\\" hint-placeholder-count=\\\"4\\\"><li>{{g.t}}</li></sc-for></ul>\\n</div>\\n<div style=\\\"background: #fff; border-radius: 20px; padding: 14px\\\">\\n<img src=\\\"{{helpBad}}\\\" hint-sizes=\\\"(max-width: 900px) 42vw, 340px\\\" loading=\\\"lazy\\\" alt=\\\"Minder goede foto: van ver, met veel achtergrond\\\" style=\\\"width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 14px; display: block\\\">\\n<p style=\\\"margin: 12px 0 8px; font-size: 16px; font-weight: 800; color: #8C3E24\\\">\u2717 Dit maakt het moeilijk</p>\\n<ul style=\\\"margin: 0; padding-left: 18px; font-size: 14px; line-height: 1.6; color: #3A453F\\\"><sc-for list=\\\"{{helpBadList}}\\\" as=\\\"g\\\" hint-placeholder-count=\\\"4\\\"><li>{{g.t}}</li></sc-for></ul>\\n</div>\\n</div>\\n<p style=\\\"margin: 18px 0 0; font-size: 15px; line-height: 1.5; background: #fff; border-radius: 14px; padding: 12px 14px\\\">Twijfel je nog? Laad je foto gewoon op. Louise bekijkt hem voor ze begint, en is hij niet geschikt, dan laten we het je weten.</p>\\n</div>\\n</div>\\n</sc-if>\\n\\n<sc-if value=\\\"{{finderOpen}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<div class=\\\"modal\\\">\\n<div class=\\\"sheet\\\" role=\\\"dialog\\\" aria-label=\\\"Maatadvies\\\">\\n<div style=\\\"display: flex; justify-content: space-between; align-items: center\\\"><p class=\\\"eyebrow\\\">Maatadvies</p><button type=\\\"button\\\" onClick=\\\"{{closeFinder}}\\\" aria-label=\\\"Sluiten\\\" class=\\\"xbtn\\\">\u00D7</button></div>\\n<h2 style=\\\"margin: 10px 0 18px; font-size: 36px; font-weight: 800; letter-spacing: -.04em; line-height: 1\\\">Welke maat <span class=\\\"serif\\\" style=\\\"color: #A84E30\\\">neem ik?</span></h2>\\n<div class=\\\"tabs\\\" style=\\\"{{tabsStyle}}\\\"><button type=\\\"button\\\" onClick=\\\"{{modeUsual}}\\\" style=\\\"{{tabUsual}}\\\">Mijn gewone maat</button><button type=\\\"button\\\" onClick=\\\"{{modeMeasure}}\\\" style=\\\"{{tabMeasure}}\\\">Ik meet een {{measureNoun}}</button></div>\\n<sc-if value=\\\"{{showGender}}\\\" hint-placeholder-val=\\\"{{true}}\\\"><div style=\\\"display: flex; gap: 8px; margin: 18px 0 6px\\\"><sc-for list=\\\"{{genders}}\\\" as=\\\"g\\\" hint-placeholder-count=\\\"2\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{g.pick}}\\\" style=\\\"{{g.style}}\\\">{{g.label}}</button></sc-for></div></sc-if>\\n<sc-if value=\\\"{{isUsual}}\\\" hint-placeholder-val=\\\"{{true}}\\\">\\n<label class=\\\"chk\\\" style=\\\"font-size: 15px; margin-top: 6px\\\"><input type=\\\"checkbox\\\" checked=\\\"{{between}}\\\" onChange=\\\"{{toggleBetween}}\\\">{{betweenLabel}}</label>\\n<p class=\\\"sub\\\" style=\\\"margin-top: 4px\\\">{{usualQuestion}}</p>\\n<div class=\\\"row\\\"><sc-for list=\\\"{{usuals}}\\\" as=\\\"u\\\" hint-placeholder-count=\\\"7\\\"><button type=\\\"button\\\" class=\\\"pill\\\" onClick=\\\"{{u.pick}}\\\" aria-pressed=\\\"{{u.pressed}}\\\" style=\\\"{{u.style}}\\\">{{u.label}}</button></sc-for></div>\\n</sc-if>\\n<sc-if value=\\\"{{isMeasure}}\\\" hint-placeholder-val=\\\"{{false}}\\\">\\n<p style=\\\"margin: 14px 0 8px; font-size: 15px; line-height: 1.5\\\">Leg een {{measureNoun}} {{measureRel}} goed past plat en meet de breedte vlak onder de oksels, zoals lijn A op de tekening hieronder.</p>\\n<div style=\\\"display: flex; align-items: center; gap: 10px\\\"><input class=\\\"field\\\" type=\\\"number\\\" value=\\\"{{widthA}}\\\" onInput=\\\"{{onWidth}}\\\" aria-label=\\\"Breedte onder de oksels in cm\\\" style=\\\"width: 140px\\\"><span style=\\\"font-weight: 700\\\">cm</span></div>\\n</sc-if>\\n<div style=\\\"margin-top: 20px; background: #3F5A42; color: #fff; border-radius: 20px; padding: 18px 20px; display: flex; align-items: center; justify-content: space-between; gap: 16px\\\">\\n<span><span style=\\\"display: block; font-size: 13px; font-weight: 700; opacity: .9\\\">Ons advies</span><strong style=\\\"font-size: 30px; letter-spacing: -.03em\\\">{{adviceTitle}}</strong><span style=\\\"display: block; font-size: 14px; margin-top: 2px\\\">{{adviceWhy}}</span></span>\\n<span style=\\\"display: flex; flex-direction: column; gap: 8px; align-items: stretch; flex-shrink: 0\\\">\\n<button type=\\\"button\\\" onClick=\\\"{{takeAdvice}}\\\" class=\\\"btn\\\" style=\\\"min-height: 50px; background: #F5F1E8; color: #22302A; border-color: #F5F1E8\\\">Kies {{advice}}</button>\\n<sc-if value=\\\"{{hasAlt}}\\\" hint-placeholder-val=\\\"{{false}}\\\"><button type=\\\"button\\\" onClick=\\\"{{takeAlt}}\\\" style=\\\"min-height: 44px; border-radius: 999px; border: 1.5px solid #F5F1E8; background: transparent; color: #fff; font: inherit; font-size: 15px; font-weight: 700; cursor: pointer\\\">{{altLabel}}</button></sc-if>\\n</span>\\n</div>\\n<div style=\\\"display: flex; gap: 22px; align-items: center; margin-top: 18px{{measureWrap}}\\\">\\n<sc-if value=\\\"{{shapeRomper}}\\\"><svg width=\\\"150\\\" height=\\\"166\\\" viewBox=\\\"0 0 400 440\\\" aria-label=\\\"Waar meet je A en B op een rompertje\\\" style=\\\"flex-shrink: 0\\\"><path d=\\\"M140 40 C 160 64, 240 64, 260 40 L 318 56 L 366 116 L 324 148 L 304 132 L 304 290 C 304 346, 268 372, 244 384 L 244 420 L 156 420 L 156 384 C 132 372, 96 346, 96 290 L 96 132 L 76 148 L 34 116 L 82 56 Z\\\" fill=\\\"#fff\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\" stroke-linejoin=\\\"round\\\"></path><path d=\\\"M150 46 C 170 82, 230 82, 250 46\\\" fill=\\\"none\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\"></path><path d=\\\"M156 392 H244\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"5\\\" stroke-dasharray=\\\"2 10\\\" stroke-linecap=\\\"round\\\"></path><circle cx=\\\"178\\\" cy=\\\"406\\\" r=\\\"6\\\" fill=\\\"#22302A\\\"></circle><circle cx=\\\"200\\\" cy=\\\"406\\\" r=\\\"6\\\" fill=\\\"#22302A\\\"></circle><circle cx=\\\"222\\\" cy=\\\"406\\\" r=\\\"6\\\" fill=\\\"#22302A\\\"></circle><path d=\\\"M108 168 H292 M108 154 V182 M292 154 V182\\\" stroke=\\\"#A84E30\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path><path d=\\\"M268 40 H392 M244 420 H392\\\" stroke=\\\"#3F5A42\\\" stroke-width=\\\"3\\\" stroke-dasharray=\\\"6 8\\\"></path><path d=\\\"M380 40 V420 M368 40 H392 M368 420 H392\\\" stroke=\\\"#3F5A42\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path><circle cx=\\\"200\\\" cy=\\\"214\\\" r=\\\"26\\\" fill=\\\"#A84E30\\\"></circle><text x=\\\"200\\\" y=\\\"226\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">A</text><circle cx=\\\"346\\\" cy=\\\"250\\\" r=\\\"26\\\" fill=\\\"#3F5A42\\\"></circle><text x=\\\"346\\\" y=\\\"262\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">B</text></svg></sc-if><sc-if value=\\\"{{shapeTee}}\\\"><svg width=\\\"150\\\" height=\\\"166\\\" viewBox=\\\"0 0 400 440\\\" aria-label=\\\"Waar meet je A en B op een T-shirt\\\" style=\\\"flex-shrink: 0\\\"><path d=\\\"M130 40 C 150 62, 250 62, 270 40 L 330 62 C 350 70, 366 88, 378 110 L 396 156 L 340 178 L 318 152 L 318 420 L 82 420 L 82 152 L 60 178 L 4 156 L 22 110 C 34 88, 50 70, 70 62 Z\\\" fill=\\\"#fff\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\" stroke-linejoin=\\\"round\\\"></path><path d=\\\"M140 44 C 165 78, 235 78, 260 44\\\" fill=\\\"none\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\"></path><path d=\\\"M96 190 H304 M96 176 V204 M304 176 V204\\\" stroke=\\\"#A84E30\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path><path d=\\\"M286 50 V406 M272 50 H300 M272 406 H300\\\" stroke=\\\"#3F5A42\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path><circle cx=\\\"200\\\" cy=\\\"232\\\" r=\\\"26\\\" fill=\\\"#A84E30\\\"></circle><text x=\\\"200\\\" y=\\\"244\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">A</text><circle cx=\\\"242\\\" cy=\\\"300\\\" r=\\\"26\\\" fill=\\\"#3F5A42\\\"></circle><text x=\\\"242\\\" y=\\\"312\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">B</text></svg></sc-if><sc-if value=\\\"{{shapeTop}}\\\"><svg width=\\\"150\\\" height=\\\"166\\\" viewBox=\\\"0 0 400 440\\\" aria-label=\\\"Waar meet je A en B\\\" style=\\\"flex-shrink: 0\\\">\\n<path d=\\\"M130 40 C 150 62, 250 62, 270 40 L 330 62 C 350 70, 360 85, 366 110 L 392 300 L 330 306 L 318 180 L 318 420 L 82 420 L 82 180 L 70 306 L 8 300 L 34 110 C 40 85, 50 70, 70 62 Z\\\" fill=\\\"#fff\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\" stroke-linejoin=\\\"round\\\"></path>\\n<path d=\\\"M140 44 C 165 78, 235 78, 260 44\\\" fill=\\\"none\\\" stroke=\\\"#22302A\\\" stroke-width=\\\"8\\\"></path>\\n<path d=\\\"M96 190 H304 M96 176 V204 M304 176 V204\\\" stroke=\\\"#A84E30\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path>\\n<path d=\\\"M286 50 V406 M272 50 H300 M272 406 H300\\\" stroke=\\\"#3F5A42\\\" stroke-width=\\\"8\\\" stroke-linecap=\\\"round\\\"></path>\\n<circle cx=\\\"200\\\" cy=\\\"232\\\" r=\\\"26\\\" fill=\\\"#A84E30\\\"></circle><text x=\\\"200\\\" y=\\\"244\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">A</text>\\n<circle cx=\\\"242\\\" cy=\\\"300\\\" r=\\\"26\\\" fill=\\\"#3F5A42\\\"></circle><text x=\\\"242\\\" y=\\\"312\\\" text-anchor=\\\"middle\\\" font-size=\\\"34\\\" font-weight=\\\"800\\\" fill=\\\"#fff\\\" font-family=\\\"Bricolage Grotesque, sans-serif\\\">B</text>\\n</svg></sc-if>\\n<div style=\\\"flex: 1; min-width: 0\\\">\\n<div class=\\\"mt\\\" style=\\\"{{mtGrid}}\\\">\\n<span class=\\\"rh\\\">cm</span><sc-for list=\\\"{{fcols}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"7\\\"><span style=\\\"{{c.headStyle}}\\\">{{c.label}}</span></sc-for>\\n<span class=\\\"rh\\\" style=\\\"color: #A84E30\\\">A breedte</span><sc-for list=\\\"{{fcols}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"7\\\"><span style=\\\"{{c.style}}\\\">{{c.a}}</span></sc-for>\\n<span class=\\\"rh\\\" style=\\\"color: #3F5A42\\\">B lengte</span><sc-for list=\\\"{{fcols}}\\\" as=\\\"c\\\" hint-placeholder-count=\\\"7\\\"><span style=\\\"{{c.style}}\\\">{{c.b}}</span></sc-for>\\n</div>\\n<p class=\\\"hint\\\" style=\\\"margin: 10px 0 0\\\">{{measureHint}}</p>\\n</div>\\n</div>\\n</div>\\n</div>\\n</sc-if>\\n</div>\";\nconst MAX_MB = 20, OK_EXT = /\\.(jpe?g|png|heic|heif|webp|gif|svg|pdf|ai)$/i;\nconst ADDON_BY_AMOUNT = { 2: 'tn-addon-naam-per-stuk', 3: 'tn-addon-tekst-onder', 4: 'tn-addon-klein', 5: 'tn-addon-groot', 7: 'tn-addon-voorkant', 10: 'tn-addon-tekening', 12: 'tn-addon-achterkant', 20: 'tn-addon-ingekleurd' };\nconst BIG_EX = [\"0189f5\", \"05d98f\", \"42273e\", \"447f8a\", \"485386\", \"4e157a\", \"52ff6c\", \"58da5a\", \"8b5205\", \"9041de\", \"97b356\", \"acb685\", \"b64473\", \"b9799a\", \"bb2ca1\", \"c1b7f0\", \"c1d5ab\", \"dc0676\", \"e88499\", \"f50e95\", \"fac8d4\"];   // voorbeeldfoto's met een groot origineel in de thema-assets\nconst MODEL_SETS = {\"petten-personaliseren-voor-groepen\": {\"cell\": \"groepen\", \"option\": \"Soort petje?\", \"title\": \"Petten voor groepen\", \"h1\": [\"Petten voor\", \"groepen\"], \"lineTitle\": \"Pet (groep)\", \"noteNoun\": \"pet\", \"start\": \"Groen (forest)\", \"models\": [{\"label\": \"Trucker\", \"cfg\": \"truckercap\", \"map\": {\"Wit met zwart\": \"Wit en zwart\", \"Rood met wit\": \"Rood\", \"Kaki met zwart\": \"Kaki\"}}, {\"label\": \"Dad\", \"cfg\": \"dadcap\", \"map\": {}}, {\"label\": \"Vintage\", \"cfg\": \"pet\", \"map\": {\"Rood (vintage)\": \"Rood\", \"Blauw (vintage)\": \"Blauw\"}}, {\"label\": \"Velour\", \"cfg\": \"velourcap\", \"map\": {}}], \"hex\": {\"Aqua Groen\": \"#C0D1C5\", \"Blauw\": \"#566B83\", \"Navy & wit\": \"#1B233D\", \"Mid grijs\": \"#8A8C8E\", \"Fel roze\": \"#E72774\", \"Wit\": \"#FFFFFF\"}}, \"groepstruien\": {\"cell\": \"groepen\", \"option\": \"Soort trui?\", \"title\": \"Sweaters en hoodies voor groepen\", \"h1\": [\"Sweaters en hoodies\", \"voor groepen\"], \"lineTitle\": \"Trui (groep)\", \"noteNoun\": \"trui\", \"start\": \"Navy blauw\", \"models\": [{\"label\": \"Sweater (zonder kap)\", \"cfg\": \"sweater\", \"map\": {\"Navy\": \"Navy blauw\"}}, {\"label\": \"Hoodie (met kap)\", \"cfg\": \"hoodie\", \"map\": {\"Navy\": \"Navy blauw\"}}]}};   // scripts/motor-modellen.json\nconst KLEUR_LABEL = 'Ingekleurde tekening';\n\n/* ---- varianten: begin ----\n   Zuivere functies (geen DOM): ook gebruikt door scripts/variantnamen-lijst.js om alle producten na te kijken.\n   Namen vergelijken: hoofdletters, spaties, koppeltekens en en dash, '?' achteraan, XXL = 2XL, XXXL = 3XL,\n   dan de aliassen uit scripts/motor-aliassen.json (globaal en per kledingstuk), dan zonder '(...)', dan 'met' = 'en'.\n   Een waarde telt enkel bij precies een treffer in die optie: twee mogelijke waarden = geen keuze (liever een\n   melding dan een verkeerde kleur of maat in de winkelmand). */\nconst ALIAS = {\"globaal\": {\"Navy\": [\"Navy blauw\"]}, \"per_cfg\": {\"fleecejas\": {\"Donkerrood\": [\"Rood\"]}, \"rugzak\": {\"Mosterdgeel\": [\"Camel\"]}, \"truckercap\": {\"Groen met wit\": [\"Groen\"], \"Kaki met zwart\": [\"Kaki\"], \"Rood met wit\": [\"Rood\"], \"Wit met zwart\": [\"Wit en zwart\"]}, \"deken\": {\"Zwart & wit\": [\"Zwart\"], \"Navy & wit\": [\"Navy\"]}, \"handdoek\": {\"Klein (50 \u00D7 100)\": [\"Kleine handdoek (50x100cm)\"], \"Groot (70 \u00D7 140)\": [\"Grote handdoek (70x140cm)\"], \"Heel groot (100 \u00D7 180)\": [\"Heel grote handdoek (100x150cm)\", \"Heel groot (100 \u00D7 150)\"], \"Compleet pakket\": [\"Complete pakket\"]}}, \"vast\": {\"_uitleg\": \"Waarden die de motor vast kiest voor een Shopify-optie die hij niet vraagt. Leeg sinds 20 okt 2026: groepen kiezen zelf Borduren of Bedrukken (methods in de cfg).\"}};\nconst normV = (x) => {\n  let s = String(x === null || x === undefined ? '' : x).normalize('NFC').toLowerCase()\n    .replace(/[\u2010-\u2015\u2212]/g, '-').replace(/\\s+/g, ' ').trim()\n    .replace(/\\s*([-/])\\s*/g, '$1').replace(/\\?+$/, '').trim();\n  const m = s.match(/^(x{2,5})l$/);\n  if (m) s = m[1].length + 'xl';\n  return s;\n};\nconst bareV = (s) => s.replace(/\\s*\\([^)]*\\)\\s*/g, ' ').replace(/\\s+/g, ' ').trim();\nfunction aliasesOf(n, g) {\n  const out = new Set();\n  [ALIAS.globaal || {}, (ALIAS.per_cfg || {})[g] || {}].forEach((t) => Object.keys(t).forEach((k) => {\n    const grp = [k].concat(t[k]).map(normV);\n    if (grp.indexOf(n) > -1) grp.forEach((x) => { if (x !== n) out.add(x); });\n  }));\n  return out;\n}\nfunction matchVal(values, w, g) {\n  const n = normV(w);\n  if (!n) return null;\n  const al = aliasesOf(n, g), b = bareV(n), en = (x) => x.replace(/ met /g, ' en ');\n  const tests = [(v) => normV(v) === n, (v) => al.has(normV(v)), (v) => b !== '' && bareV(normV(v)) === b, (v) => en(normV(v)) === en(n)];\n  for (const t of tests) {\n    const hits = Array.from(new Set((values || []).filter(t)));\n    if (hits.length === 1) return hits[0];\n    if (hits.length > 1) return null;\n  }\n  return null;\n}\n/* opties van het product: waarden per optie en de soort (kleur, maat of iets anders zoals Stof, Model, Soort trui) */\nconst COLS = new WeakMap();\nfunction shopCols(shop) {\n  const vs = (shop && shop.variants) || [], names = (shop && shop.optionNames) || [];\n  if (COLS.has(vs)) return COLS.get(vs);\n  const n = vs.length ? (vs[0].options || []).length : 0;\n  const cols = Array.from({ length: n }, (_, i) => Array.from(new Set(vs.map((v) => v.options[i]))));\n  const kinds = cols.map((_, i) => { const nm = String(names[i] || ''); return /kleur|colou?r/i.test(nm) ? 'kleur' : /maat|size|grootte/i.test(nm) ? 'maat' : ''; });\n  const out = { vs, names, cols, kinds };\n  COLS.set(vs, out);\n  return out;\n}\nconst hasKind = (shop, kd) => shopCols(shop).kinds.indexOf(kd) > -1;\n/* [optie, waarde] voor een naam uit de motor. Kleur en maat enkel in de optie van dezelfde soort; een stof,\n   model of methode ('') eerst in de andere opties, dan in een optie die nog vrij is (bv. Grootte bij de handdoek) */\nfunction findOpt(shop, w, kd, g, taken) {\n  const c = shopCols(shop);\n  const order = c.cols.map((_, i) => i).filter((i) => (kd ? c.kinds[i] === kd : true) && !(taken && taken[i] !== undefined));\n  if (!kd) order.sort((a, b) => (c.kinds[a] !== '') - (c.kinds[b] !== ''));\n  for (const i of order) {\n    const v = matchVal(c.cols[i], w, g);\n    if (v !== null) return [i, v];\n  }\n  return null;\n}\n/* vaste waarden per kledingstuk of cel voor opties die de motor niet vraagt (motor-aliassen.json, vast) */\nfunction fixedOpts(shop, g, cell) {\n  const c = shopCols(shop), V = ALIAS.vast || {}, t = Object.assign({}, V[g] || {}, V[g + '/' + cell] || {}), out = {};\n  Object.keys(t).forEach((k) => {\n    const i = c.names.findIndex((n) => normV(n) === normV(k));\n    if (i < 0) return;\n    const v = matchVal(c.cols[i], t[k], g);\n    if (v !== null) out[i] = v;\n  });\n  return out;\n}\n/* varianten die bij de keuzes passen. wants: [[naam, 'kleur'|'maat'|'']].\n   Kleur of maat die het product als optie heeft maar niet kent: geen varianten. Heeft het product die optie\n   niet, dan telt de keuze niet mee (ze gaat als eigenschap op de bestelregel). Een stof, model of methode die\n   niet als optie bestaat, telt ook niet mee. */\nfunction variantsFor(shop, wants, g, cell) {\n  const c = shopCols(shop);\n  if (!c.vs.length) return { list: [], fixed: {} };\n  const fixed = Object.assign({}, fixedOpts(shop, g, cell));\n  for (const [w, kd] of wants) {\n    if (w === null || w === undefined || w === '') continue;\n    if (kd && !hasKind(shop, kd)) continue;\n    const r = findOpt(shop, w, kd, g, kd ? null : fixed);\n    if (r) {\n      if (fixed[r[0]] !== undefined && fixed[r[0]] !== r[1]) return { list: [], fixed };\n      fixed[r[0]] = r[1];\n    } else if (kd) return { list: [], fixed };\n  }\n  return { list: c.vs.filter((v) => Object.keys(fixed).every((i) => v.options[i] === fixed[i])), fixed };\n}\n/* precies een variant. Opties die de motor niet vraagt (bv. Soort trui): de waarde die eenduidig bij dit\n   kledingstuk hoort (Sweater of Hoodie), anders geen variant. anySize: maten later doorgeven (groep), dan de\n   eerste maat. */\nfunction pickVariant(shop, wants, P, g, cell, anySize) {\n  const r = variantsFor(shop, wants, g, cell), c = shopCols(shop);\n  let cand = r.list;\n  const STOP = ['met', 'van', 'voor', 'een', 'het', 'jouw', 'zelf', 'eigen', 'ontwerp', 'naam', 'tekst', 'logo', 'groep', 'groepen'];\n  const hint = normV([P.lineTitle, P.noteNoun].join(' ')).split(/[^a-z0-9\u00E0-\u00FF]+/).filter((x) => x.length > 2 && STOP.indexOf(x) < 0);\n  const words = (x) => normV(x).split(/[^a-z0-9\u00E0-\u00FF]+/);\n  for (let i = 0; i < c.cols.length && cand.length > 1; i++) {\n    if (r.fixed[i] !== undefined) continue;\n    const vals = c.cols[i].filter((x) => cand.some((v) => v.options[i] === x));\n    if (vals.length < 2) continue;\n    let pick = null;\n    if (anySize && c.kinds[i] === 'maat') pick = vals[0];\n    else {\n      const score = (x) => hint.filter((h) => words(x).indexOf(h) > -1).length;\n      const best = Math.max.apply(null, vals.map(score));\n      const top = vals.filter((x) => score(x) === best);\n      if (best > 0 && top.length === 1) pick = top[0];\n    }\n    if (pick === null) return null;\n    cand = cand.filter((v) => v.options[i] === pick);\n  }\n  return cand.length === 1 ? cand[0] : null;\n}\n/* welke kleuren van de motor bestaan in dit product (null = geen kleuroptie of geen enkele naam komt overeen:\n   dan toont de motor alle kleuren en meldt hij bij het toevoegen dat de kleur niet bestaat) */\nfunction shopColorSet(shop, colors, g) {\n  const c = shopCols(shop), i = c.kinds.indexOf('kleur');\n  if (i < 0 || !c.vs.length) return null;\n  const ok = (colors || []).map((x) => matchVal(c.cols[i], x[0], g) !== null);\n  return ok.some(Boolean) ? ok : null;\n}\n/* maten van de motor die in dit product bestaan (lijst ongewijzigd als het product geen maatoptie heeft) */\nfunction shopSizes(shop, L, g) {\n  const c = shopCols(shop), i = c.kinds.indexOf('maat');\n  if (!L || i < 0 || !c.vs.length) return L;\n  const f = L.filter((z) => matchVal(c.cols[i], z, g) !== null);\n  return f.length ? f : L;\n}\n/* ---- varianten: einde ---- */\nconst isCdn = (u) => /^(https:)?\\/\\/cdn\\.shopify\\.com\\/s\\/files\\//.test(u || '');\n/* foto in hoge resolutie: groot origineel uit de thema-assets, of het Shopify-CDN op 2000 px */\nfunction bigSrc(u, shop) {\n  const m = String(u || '').match(/\\/files\\/tn-voorbeeld-([0-9a-f]{6})\\.jpg$/);\n  if (m && BIG_EX.indexOf(m[1]) > -1 && shop && shop.bigPattern) return shop.bigPattern.replace('__ID__', m[1]);\n  return isCdn(u) ? u + (u.indexOf('?') > -1 ? '&' : '?') + 'width=2000' : u;\n}\n\nclass TNComponent extends Component {\n  constructor(props) {\n    super(props);\n    this.files = {};\n    this.kwijt = '';\n    this.errMsg = '';\n    this.busy = false;\n    const P = this.cfg();\n    if (P.variants && !this.variantOk(this.state.variant)) this.state.variant = this.firstVariant();\n    if (!P.group && !this.colorOk(this.state.color, this.state.variant)) { this.state.color = this.firstColor(this.state.variant); this.state.gcolors = [this.state.color]; }\n    if (P.group) {\n      const g = (this.state.gcolors || []).filter((ci) => this.groupColorOk(ci, this.state));\n      const first = P.colors.findIndex((c, i) => this.groupColorOk(i, this.state));\n      this.state.gcolors = g.length ? g : (first > -1 ? [first] : []);\n      if (this.state.gcolors.length) this.state.color = this.state.gcolors[0];\n    }\n  }\n  shop() { return this.props.shop || {}; }\n\n  /* ---- laadtoestand op de knop zolang we toevoegen ---- */\n  renderVals() {\n    const v = super.renderVals();\n    // knop: noem het eerste echt ontbrekende punt, in de volgorde van de stappen (testronde 16 okt 2026)\n    const miss = this.firstMissing(this.state);\n    v.cartHint = miss && this.cartHintFor === miss.msg ? (this.cartHint || '') : '';\n    if (miss) {\n      v.cartDisabled = 'true';\n      v.cartLabel = miss.msg;\n      v.cartStyle = 'width: 100%; margin-top: 16px; background: #E4DED2; color: #55605A; border-color: #E4DED2; font-size: 16px';\n      v.cartClick = () => this.showMissing(miss, v['st' + miss.step + '_title']);\n    }\n    if (this.busy) {\n      v.cartLabel = this.busyMsg || 'Even geduld';\n      v.cartDisabled = 'true';\n      v.cartClick = () => {};\n    }\n    return v;\n  }\n\n  /* ---- wat ontbreekt er nog? Eerste punt in de volgorde van de stappen op de pagina ----\n     Geeft { step, veld, sub, msg } of null. veld = data-tn-veld in het sjabloon (zie bouw-motor.py),\n     sub = het element binnen dat veld dat focus krijgt. Er is een borduurkleur voor het hele stuk (s.thread). */\n  firstMissing(s) {\n    const P = this.cfg(), ids = this.stepIds();\n    const WHERE = { rug: 'voor de rug', mouw: 'voor de mouw', borst: 'voor de borst', grootborst: 'voor de borst', midden: 'voor het midden',\n      grootmidden: 'voor het midden', groot: 'voor de voorkant', voor: 'voor de voorkant', kap: 'voor de kap', klep: 'voor de klep',\n      hoek: 'voor het hoekje', omslag: 'voor de omslag', onder: 'voor onderaan', boven: 'voor bovenaan', beide: 'voor de sokken' };\n    const at = (z) => (z && WHERE[z.id] ? ' ' + WHERE[z.id] : '');\n    const upWhat = (k) => (k === 'logo' ? 'je logo' : k === 'kaart' ? 'je geboortekaartje' : 'je foto');\n    for (let i = 0; i < ids.length - 1; i++) {\n      const id = ids[i];\n      const r = (veld, msg, sub) => ({ step: i, id, veld, msg, sub: sub || '' });\n      if (id === 'extra') {\n        // de bevestigknop hoeft niet, maar een aangevinkte extra borduring moet wel volledig zijn\n        for (const x of this.exList(s)) {\n          if (!s.ex[x.id] || this.extraValid(s, x)) continue;\n          const k = s.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst'), f = 'x:' + x.id;\n          if (x.type === 'onder') return r(f, 'Vul eerst de tekst onder de borduring in', 'input');\n          if (x.type === 'mouw') return r(f, 'Vul eerst je tekst in voor de mouw', 'input');\n          if (k === 'tekst') return r(f, 'Vul eerst je tekst in' + at(x.zone), 'input');\n          return r(f, 'Laad eerst ' + upWhat(k) + ' op' + at(x.zone), '.upsm');\n        }\n        continue;\n      }\n      if (this.done(s, id)) continue;\n      if (id === 'kleur') {\n        if (P.group) return r('kleur', 'Kies eerst een kleur');\n        if (this.szList(s)) return r('maat', 'Kies eerst je ' + (P.sizeTitle || 'maat').toLowerCase());\n        return r('kleur', 'Kies eerst je kleur');\n      }\n      if (id === 'foto') return s.uploaded ? r('draad', 'Kies eerst je borduurkleur') : r('bestand', 'Laad eerst je foto op');\n      if (id === 'tekst') return s.text1 ? r('draad', 'Kies eerst je borduurkleur') : r('tekst', P.spotify ? 'Plak eerst je link' : 'Vul eerst je tekst in');\n      if (id === 'datum') return s.date ? r('draad', 'Kies eerst je borduurkleur') : r('datum', 'Vul eerst je datum in');\n      if (id === 'hand') return s.uploaded ? r('draad', 'Kies eerst je borduurkleur') : r('bestand', 'Laad eerst je handschrift op');\n      if (id === 'logo') return s.uploaded ? r('draad', 'Kies eerst je borduurkleur') : r('bestand', 'Laad eerst je logo op');\n      if (id === 'vrij') {\n        const a = this.activeZones(s);\n        if (!a.length) return r('zones', 'Kies eerst wat en waar');\n        for (const z of a) {\n          const v = s.zones[z.id], f = 'z:' + z.id;\n          if ((v.kind === 'tekst' || v.kind === 'namen') && !v.text) return r(f, 'Vul eerst je tekst in' + at(z), 'input:not(.narrowf)');\n          if ((v.kind !== 'tekst' && v.kind !== 'namen') && !v.up) return r(f, 'Laad eerst ' + upWhat(v.kind) + ' op' + at(z), '.upsm');\n          if (v.under && !v.underText) return r(f, 'Vul eerst de tekst onder de borduring in', '.narrowf');\n        }\n        return r('draad', 'Kies eerst je borduurkleur');\n      }\n      if (id === 'plaats') return r('plaats', 'Kies eerst waar het komt');\n      if (id === 'aantal') return r('aantal', 'Vul eerst je aantallen in');\n      return r('', 'Vul eerst stap ' + (i + 1) + ' in');\n    }\n    return null;\n  }\n  /* klik op de knop terwijl er nog iets ontbreekt: open die stap, scroll naar het veld, zachte markering en focus */\n  showMissing(m, title) {\n    this.cartHintFor = m.msg;\n    this.cartHint = m.msg + '. Dat vind je bij stap ' + (m.step + 1) + (title ? ': ' + title : '') + '.';\n    this.hl = { veld: m.veld, sub: m.sub, focus: true };\n    clearTimeout(this.hlT);\n    this.hlT = setTimeout(() => { this.hl = null; this.forceUpdate(); }, 2600);\n    this.setState({ open: m.step, peek: -1, nudge: true });\n  }\n\n  /* ---- vergrote foto: eigen venster, sluit met het kruisje, een klik ernaast of Esc ---- */\n  openZoom(src, alt) {\n    if (!src) return;\n    let box = document.querySelector('[data-tnm-zoom]');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tnm-zoom'; box.setAttribute('data-tnm-zoom', ''); box.hidden = true;\n      box.setAttribute('role', 'dialog'); box.setAttribute('aria-modal', 'true');\n      box.innerHTML = '<button type=\"button\" class=\"tnm-zoom__x\" aria-label=\"' + TNT('Sluiten') + '\">\u00D7</button><figure><img alt=\"\"><figcaption></figcaption></figure>';\n      document.body.appendChild(box);\n      const close = () => {\n        if (box.hidden) return;\n        box.hidden = true; document.documentElement.style.overflow = box.__ov || '';\n        document.removeEventListener('keydown', box.__key, true);\n        if (box.__back && box.__back.focus) box.__back.focus();\n      };\n      box.__close = close;\n      box.__key = (e) => {\n        if (e.key === 'Escape') { e.preventDefault(); close(); }\n        else if (e.key === 'Tab') { e.preventDefault(); box.querySelector('.tnm-zoom__x').focus(); }\n      };\n      box.addEventListener('click', (e) => { if (!e.target.closest('img, figcaption')) close(); });\n    }\n    const img = box.querySelector('img'), cap = box.querySelector('figcaption');\n    img.removeAttribute('srcset');\n    // eerst de foto die al geladen is, dan meteen de grote versie erover\n    const big = bigSrc(src, this.shop());\n    img.src = isCdn(src) ? src + (src.indexOf('?') > -1 ? '&' : '?') + 'width=800' : src;\n    const pre = new Image();\n    pre.onload = () => { if (img.getAttribute('data-want') === big) img.src = big; };\n    img.setAttribute('data-want', big);\n    pre.src = big;\n    img.alt = alt || '';\n    cap.textContent = alt || '';\n    cap.hidden = !alt;\n    box.setAttribute('aria-label', alt || TNT('Foto'));\n    box.__back = document.activeElement;\n    box.__ov = document.documentElement.style.overflow;\n    document.documentElement.style.overflow = 'hidden';\n    box.hidden = false;\n    document.addEventListener('keydown', box.__key, true);\n    box.querySelector('.tnm-zoom__x').focus();\n  }\n\n  /* ---- groepen: kleur bestaat in het product (en in het gekozen model) ---- */\n  curModel(s) { const P = this.cfg(); return P.models ? (P.models.find((o) => o.id === s.model) || P.models[0]) : null; }\n  groupColorOk(ci, s) {\n    const P = this.cfg(); const c = P.colors[ci];\n    if (!c) return false;\n    const m = this.curModel(s);\n    if (m && m.colors && m.colors.indexOf(c[0]) === -1) return false;\n    if (!(this.shop().variants || []).length) return true;\n    if (!this.colorInShop(ci)) return false;\n    return variantsFor(this.shop(), [[c[0], 'kleur']].concat(this.otherWants(s)), this.g(), this.gc()).list.length > 0;\n  }\n  modelPatch(id) {\n    const s = Object.assign({}, this.state, { model: id });\n    const g = (this.state.gcolors || []).filter((ci) => this.groupColorOk(ci, s));\n    const first = this.cfg().colors.findIndex((c, i) => this.groupColorOk(i, s));\n    return { model: id, gcolors: g, color: g.length ? g[g.length - 1] : (first > -1 ? first : this.state.color) };\n  }\n\n  /* ---- opladen ---- */\n  fileProblem(f) {\n    if (!OK_EXT.test(f.name) && !/^image\\//.test(f.type)) return 'Dit bestandstype kunnen we niet gebruiken. Kies een JPG, PNG of HEIC (voor een logo ook SVG, PDF of AI).';\n    if (f.size > MAX_MB * 1048576) return 'Dit bestand is groter dan ' + MAX_MB + ' MB. Kies een kleinere versie, of stuur het ons per mail of WhatsApp.';\n    return '';\n  }\n  /* ---- jouw foto: de echte opgeladen foto rechtsboven in het live voorbeeld (16 okt 2026) ---- */\n  setYourPhoto(f) {\n    if (this.yourUrl) { try { URL.revokeObjectURL(this.yourUrl); } catch (e) {} }\n    this.yourUrl = '';\n    if (!f || !/^image\\//.test(f.type) || !window.URL || !URL.createObjectURL) return;\n    const u = URL.createObjectURL(f), im = new Image();\n    im.onload = () => { if (this.files.main === f) { this.yourUrl = u; this.forceUpdate(); } else { try { URL.revokeObjectURL(u); } catch (e) {} } };\n    im.onerror = () => { try { URL.revokeObjectURL(u); } catch (e) {} };\n    im.src = u;\n  }\n  pick(key, already, done) {\n    const inp = document.createElement('input');\n    inp.type = 'file'; inp.accept = 'image/*,.pdf,.ai,.svg,.heic'; inp.style.display = 'none';\n    inp.addEventListener('change', () => {\n      const f = inp.files && inp.files[0];\n      inp.remove();\n      if (!f) return;\n      const pb = this.fileProblem(f);\n      if (pb) { this.errMsg = pb; this.forceUpdate(); return; }\n      this.errMsg = ''; this.files[key] = f; this.prepFile(key, f); if (key === 'main') this.setYourPhoto(f); done(f);\n    });\n    document.body.appendChild(inp);\n    inp.click();\n  }\n\n  /* ---- grote foto's (JPG of WebP boven 1,5 MB) verkleinen tot max. 2500 px voor ze opgeladen worden ----\n     Scheelt seconden bij het toevoegen aan de winkelmand (een gsm-foto van 4 MB wordt ca. 1 MB). Een tekening maken\n     we op 2500 px zonder verschil. Logo's, PNG, HEIC, PDF en kleine bestanden gaan ongewijzigd mee. */\n  prepFile(key, f) {\n    this.ready = this.ready || {};\n    const P = this.cfg();\n    const logo = P.source === 'logo' || /^z:/.test(key) && ((this.state.zones || {})[key.slice(2)] || {}).kind === 'logo';\n    if (logo || !/^image\\/(jpeg|webp)$/.test(f.type) || f.size < 1.5 * 1048576 || !window.createImageBitmap) { this.ready[key] = Promise.resolve(f); return; }\n    const MAXP = 2500;\n    this.ready[key] = createImageBitmap(f, { imageOrientation: 'from-image' }).then((bm) => {\n      const sc = Math.min(1, MAXP / Math.max(bm.width, bm.height));\n      const w = Math.round(bm.width * sc), h = Math.round(bm.height * sc);\n      const c = document.createElement('canvas'); c.width = w; c.height = h;\n      c.getContext('2d').drawImage(bm, 0, 0, w, h);\n      if (bm.close) bm.close();\n      return new Promise((res) => c.toBlob(res, 'image/jpeg', 0.88));\n    }).then((b) => (b && b.size < f.size ? new File([b], f.name.replace(/\\.(jpe?g|webp)$/i, '') + '.jpg', { type: 'image/jpeg' }) : f))\n      .catch(() => f);\n  }\n  readyFiles(files) {\n    const keys = Object.keys(files).filter((k) => files[k]);\n    const byFile = new Map();\n    Object.keys(this.files).forEach((k) => byFile.set(this.files[k], (this.ready || {})[k]));\n    return Promise.all(keys.map((k) => byFile.get(files[k]) || Promise.resolve(files[k]))).then((list) => {\n      const out = {}; keys.forEach((k, i) => { out[k] = list[i]; }); return out;\n    });\n  }\n\n  /* ---- weergave: foutmelding, vrije tekst onthouden ---- */\n  afterRender(root) {\n    let box = root.parentNode && root.parentNode.querySelector('[data-tnm-err]');\n    if (root.parentNode && !box) {\n      box = document.createElement('p'); box.setAttribute('data-tnm-err', ''); box.setAttribute('role', 'alert');\n      box.style.cssText = 'margin:16px 0 0;padding:12px 16px;border-radius:12px;background:#F6E3D9;color:#7A3A22;font-weight:600;font-size:15px';\n      root.parentNode.appendChild(box);\n    }\n    if (box) { box.hidden = !this.errMsg; box.textContent = TNT(this.errMsg || ''); }\n    root.querySelectorAll('button.btn[aria-disabled]').forEach((b) => {\n      b.classList.toggle('tnm-busy', !!this.busy);\n      if (this.busy) b.setAttribute('aria-busy', 'true'); else b.removeAttribute('aria-busy');\n    });\n    if (!root.__tnmZoom) {\n      root.__tnmZoom = true;\n      // voorbeeldfoto's onderaan: tik op de foto om ze groot te zien\n      root.addEventListener('click', (e) => {\n        const im = e.target.closest('figure img');\n        if (im && root.contains(im) && !e.target.closest('button, a')) this.openZoom((im.getAttribute('src') || '').split('?')[0], im.alt);\n      });\n    }\n    root.querySelectorAll('figure img').forEach((im) => { im.classList.add('tnm-zoomable'); });\n    // markering van het ontbrekende veld (de klasse komt na elke weergave terug zolang this.hl loopt)\n    if (this.hl) {\n      const h = this.hl;\n      let el = h.veld === 'aantal' ? root.querySelector('.qrow .qty, .lrow') : (h.veld ? root.querySelector('[data-tn-veld=\"' + h.veld + '\"]') : null);\n      if (!el) { const st = root.querySelectorAll('.step')[this.state.open]; el = st && st.querySelector('.stepbody'); }\n      if (el) {\n        el.classList.add('tnm-mis');\n        if (h.focus) {\n          h.focus = false;\n          const still = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n          const f = (h.sub && el.querySelector(h.sub)) || (el.matches('button, input') ? el : el.querySelector('input, button'));\n          if (f && f.focus) { try { f.focus({ preventScroll: true }); } catch (e) { f.focus(); } }\n          try { el.scrollIntoView({ behavior: still ? 'auto' : 'smooth', block: 'center' }); } catch (e) { el.scrollIntoView(); }\n        }\n      }\n    }\n    root.querySelectorAll('textarea[aria-label=\"Wil je nog iets kwijt?\"]').forEach((t) => {\n      if (!t.__tnm) { t.__tnm = true; t.addEventListener('input', () => { this.kwijt = t.value; }); }\n      if (document.activeElement !== t && t.value !== this.kwijt) t.value = this.kwijt;\n    });\n  }\n\n  /* ---- stof, kleur en maat volgens de echte Shopify-varianten van dit product ----\n     Nieuwe producten (bv. badjas-*) hebben een optie Stof; oude producten zoals gepersonaliseerde-badjas\n     (enkel badstof) en gepersonaliseerde-badjas-satijn (enkel satijn) niet. Daar leiden we de stof af uit\n     de productnaam, of anders uit de prijs, zodat de klant enkel kan kiezen wat dit product echt verkoopt. */\n  g() { const P = this.cfg(); return P.__g || ''; }\n  gc() { const P = this.cfg(); return P.__c || ''; }\n  vnorm(x) { return String(x).toLowerCase().trim(); }\n  inProduct(w) { return findOpt(this.shop(), w, '', this.g()) !== null; }\n  onlyVariant() {\n    if (this._onlyV !== undefined) return this._onlyV;\n    const P = this.cfg(), vs = this.shop().variants || [];\n    const handle = (location.pathname.match(/\\/products\\/([^/?#]+)/) || [])[1] || '';\n    const text = ' ' + this.vnorm((this.shop().productTitle || '') + ' ' + handle.replace(/-/g, ' ')).replace(/[^a-z0-9\u00E0-\u00FF]+/g, ' ') + ' ';\n    const byName = P.variants.map((o, i) => (text.indexOf(' ' + this.vnorm(o[0]) + ' ') > -1 ? i : -1)).filter((i) => i > -1);\n    let only = null;\n    if (byName.length === 1) only = byName[0];\n    else {\n      // een enkele prijs in Shopify die bij precies een keuze hoort\n      const prices = Array.from(new Set(vs.map((v) => Number(v.price))));\n      const byPrice = prices.length === 1 ? P.variants.map((o, i) => (o[1] !== null && o[1] !== undefined && Math.round(o[1] * 100) === prices[0] ? i : -1)).filter((i) => i > -1) : [];\n      if (byPrice.length === 1) only = byPrice[0];\n    }\n    this._onlyV = only;\n    return only;\n  }\n  variantOk(vi) {\n    const P = this.cfg(), vs = this.shop().variants || [];\n    if (!P.variants || vi === null || vi === undefined || !P.variants[vi] || !vs.length) return true;\n    // het product heeft deze optie (bv. Stof): enkel waarden die als variant bestaan\n    if (P.variants.some((o) => this.inProduct(o[0]))) return this.inProduct(P.variants[vi][0]);\n    // geen optie in het product: enkel de stof die bij dit product hoort, als we die kennen\n    const only = this.onlyVariant();\n    return only === null || only === vi;\n  }\n  firstVariant() {\n    const P = this.cfg();\n    const d = P.defaultVariant || 0;\n    if (this.variantOk(d)) return d;\n    const i = P.variants.findIndex((o, k) => this.variantOk(k));\n    return i > -1 ? i : d;\n  }\n  /* keuzes die vastliggen naast kleur en maat: stof, model, borduren of bedrukken */\n  otherWants(s) {\n    const P = this.cfg(), w = [];\n    if (P.variants && s.variant !== null && s.variant !== undefined && P.variants[s.variant]) w.push([P.variants[s.variant][0], '']);\n    const m = this.curModel(s);\n    if (m) w.push([m.opt || m.label, '']);\n    if (P.methods && s.method) w.push([s.method, '']);\n    return w;\n  }\n  /* een kleur die het product niet heeft, tonen we niet (ook niet in deze stof) */\n  colorInShop(ci) {\n    const P = this.cfg();\n    if (this._cs === undefined) this._cs = shopColorSet(this.shop(), P.colors, this.g());\n    return !this._cs || !P.colors[ci] || this._cs[ci];\n  }\n  /* enkel voor stockOnly: de variant hoort bij dit kledingstuk (Sweater of Hoodie), want een product kan beide verkopen */\n  soortOk(v) { const P = this.cfg(), n = normV(P.lineTitle || ''); return !n || !!P.models || (v.options || []).some((o) => normV(o).indexOf(n) === 0) || !(v.options || []).some((o) => /(sweater|hoodie)/.test(normV(o))); }\n  colorOk(ci, vi) {\n    const P = this.cfg(), vs = this.shop().variants || [];\n    if (!this.colorInShop(ci)) return false;\n    if (!P.colors[ci] || !vs.length || !this._cs) return true;\n    const s = Object.assign({}, this.state, { variant: vi });\n    const wants = [[P.colors[ci][0], 'kleur']].concat(this.otherWants(s));\n    if (P.stockOnly && s.size) wants.push([s.size, 'maat']);\n    const list = variantsFor(this.shop(), wants, this.g(), this.gc()).list;\n    return P.stockOnly ? list.some((v) => v.available && this.soortOk(v)) : list.length > 0;\n  }\n  firstColor(vi) {\n    const P = this.cfg();\n    const d = P.defaultColor || 0;\n    if (this.colorOk(d, vi)) return d;\n    const i = P.colors.findIndex((c, k) => this.colorOk(k, vi));\n    return i > -1 ? i : d;\n  }\n  szList(m) {\n    let L = super.szList(m);\n    const P = this.cfg(), sh = this.shop();\n    if (!L || P.group || !(sh.variants || []).length || !hasKind(sh, 'maat')) return L;\n    L = shopSizes(sh, L, this.g());\n    if (P.stockOnly && P.sizeFirst) return L.filter((z) => variantsFor(sh, [[z, 'maat']].concat(this.otherWants(m)), this.g(), this.gc()).list.some((v) => v.available && this.soortOk(v)));\n    const cn = P.colors[m.color] && this.colorInShop(m.color) && this._cs ? P.colors[m.color][0] : null;\n    const out = L.filter((z) => { const l = variantsFor(sh, [[z, 'maat'], [cn, 'kleur']].concat(this.otherWants(m)), this.g(), this.gc()).list; return P.stockOnly ? l.some((v) => v.available) : l.length > 0; });\n    return out.length || P.stockOnly ? out : L;\n  }\n\n  /* ---- kleurfoto per stof: eerst stof|kleur, dan de kleurfoto (hoort bij de eerste stof), dan dezelfde kleur\n     in een andere stof, en anders (enkel vooraan) de foto met de dichtstbijzijnde kleur. exact = de juiste foto. */\n  imgFor(map, vk, ci, nearest) {\n    const P = this.cfg(); map = map || {};\n    const col = P.colors[ci] || P.colors[0];\n    const c = col[0];\n    const first = !vk || !P.variants || P.variants[0][0] === vk;\n    if (vk && map[vk + '|' + c]) return { src: map[vk + '|' + c], exact: true };\n    if (map[c]) return { src: map[c], exact: first };\n    const keys = Object.keys(map);\n    const same = keys.find((k) => k.split('|').pop() === c);\n    if (same) return { src: map[same], exact: false };\n    if (!nearest || !keys.length) return { src: '', exact: false };\n    const rgb = (h) => { const x = String(h || '').replace('#', ''); return [0, 2, 4].map((i) => parseInt(x.substr(i, 2), 16) || 0); };\n    const me = rgb(col[1]);\n    let best = keys[0], bd = Infinity;\n    keys.forEach((k) => {\n      const parts = k.split('|'), o = P.colors.find((x) => x[0] === parts[parts.length - 1]);\n      if (!o) return;\n      const d = rgb(o[1]).reduce((a, x, i) => a + (x - me[i]) * (x - me[i]), 0) + (vk && parts.length > 1 && parts[0] !== vk ? 1 : 0);\n      if (d < bd) { bd = d; best = k; }\n    });\n    return { src: map[best], exact: false };\n  }\n\n  /* ---- variant zoeken ----\n     Elke keuze (kleur, maat, stof, model, borduren of bedrukken) zoekt haar eigen optie in het product, met de\n     naamvergelijking hierboven. Enkel een eenduidige variant telt; bestaat de gekozen kleur of maat niet, of is\n     niet zeker welke variant bedoeld is, dan geen variant (de klant krijgt een melding en er gaat niets in de\n     winkelmand). Een optie die de motor niet vraagt (bv. Soort trui) krijgt de waarde die bij dit kledingstuk\n     past (Sweater of Hoodie). later: maten later doorgeven (groep). */\n  variantFor(s, colorName, size, later) {\n    const sh = this.shop();\n    if (!(sh.variants || []).length) return null;\n    return pickVariant(sh, [[colorName, 'kleur'], [size, 'maat']].concat(this.otherWants(s)), this.cfg(), this.g(), this.gc(), !!later);\n  }\n\n  /* ---- foto van de gekozen kleur voor in de winkelmand (enkel als het de juiste foto is) ---- */\n  photoFor(s, colorName) {\n    const P = this.cfg();\n    const ci = P.colors.findIndex((c) => c[0] === colorName);\n    if (ci < 0) return '';\n    const m = this.curModel(s);\n    const imgs = (m ? m.imgs : P.imgs) || {};\n    const VK = P.imgByVariant && P.variants && P.variants[s.variant] ? P.variants[s.variant][0] : '';\n    const r = this.imgFor(imgs, VK, ci, false);\n    return r.exact && isCdn(r.src) ? r.src : '';\n  }\n\n  /* ---- bestelregels, namen zoals Globo ---- */\n  collect(s) {\n    const P = this.cfg(), out = {}, files = {};\n    const put = (k, v) => { if (v !== undefined && v !== null && String(v).trim() !== '') out[k] = String(v).trim(); };\n    const KIND = { tekst: 'Tekst', namen: '(Totem)namen', logo: 'Logo', lijn: 'Lijntekening', kleur: 'Ingekleurd', kaart: 'Geboortekaartje' };\n    const kindOf = (k) => (P.kindLabels && P.kindLabels[k]) || KIND[k] || k;\n    const font = (FONTS.find((f) => f[0] === s.font) || FONTS[1])[1];\n    const advList = null;\n    const thread = s.thread || '';\n    const posZ = (P.zones || []).find((z) => z.id === s.pos) || (P.zones || [])[0];\n    // gekozen borduurgrootte, bv. \"Klein \u00B7 5 \u00D7 3 cm\" (zelfde standaard als het voorbeeld: sizeDefault, anders Middel)\n    const sizeOf = (z) => { if (!z || !z.sizes || !z.sizes.length) return ''; const i = (s.esz && s.esz[z.id] !== undefined) ? s.esz[z.id] : (z.sizeDefault !== undefined ? z.sizeDefault : 1); const o = z.sizes[Math.min(i, z.sizes.length - 1)]; const c = (n) => String(n).replace('.', ','); return o[0] + ' \u00B7 ' + c(o[1]) + (o[2] ? ' \u00D7 ' + c(o[2]) : '') + ' cm'; };\n    if (P.source !== 'vrij') put('Borduurgrootte', sizeOf(posZ));\n\n    if (P.source === 'foto') {\n      files['Foto/bestand'] = this.files.main;\n      if (P.styles) put('Soort borduring', s.style === 'kleur' ? 'Ingekleurd' : 'Lijntekening');\n      if (s.style !== 'kleur') put('Borduurkleur', thread);\n      if (posZ) put('Positieborduring', posZ.label);\n    } else if (P.source === 'hand') {\n      files['Foto/bestand'] = this.files.main;\n      put('Borduurkleur', thread);\n      if (posZ) put('Positieborduring', posZ.label);\n    } else if (P.source === 'logo') {\n      files['Foto/bestand'] = this.files.main;\n      if (s.logoKind === 'een') put('Borduurkleur', thread);\n      else put('Kleur borduring logo', s.logoKind === 'meer' ? 'Meerdere kleuren, zoals in mijn logo' : 'E\u00E9n kleur, zoals in mijn logo');\n      if (posZ) put('Positieborduring', posZ.label);\n    } else if (P.source === 'tekst') {\n      put('Tekst borduren', s.text1 + (s.text2 ? '\\n' + s.text2 : ''));\n      if (!P.spotify) put('Lettertype', font);\n      put('Borduurkleur', thread);\n      if (posZ) put('Positieborduring', posZ.label);\n    } else if (P.source === 'datum') {\n      put('Datum', s.date ? s.date.split('-').reverse().join('/') : '');\n      put('Romeinse cijfers', this.romanOf(s));\n      put('Scheidingsteken', (s.sep || '').trim());\n      put('Lettertype', font);\n      put('Borduurkleur', thread);\n      if (posZ) put('Positieborduring', posZ.label);\n    } else {\n      // Ontwerp zelf\n      put('Borduurkleur', thread);\n      this.activeZones(s).forEach((z) => {\n        const v = s.zones[z.id], key = 'z:' + z.id;\n        const back = z.view === 'achter', sleeve = z.id === 'mouw';\n        const suf = sleeve ? 'mouw' : back ? 'achterkant' : 'voorkant';\n        if (sleeve) { put('Borduringmouw', 'Ja'); put('Soortborduringmouw', kindOf(v.kind)); if ((v.kind === 'tekst' || v.kind === 'namen')) put('Tekst mouw', v.text); const nmm = (v.nl || []).filter((r) => r.n).map((r) => r.n + (r.m ? ' \u00B7 ' + r.m : '')).join('\\n'); if (v.kind === 'namen' && nmm) put('Namen mouw', nmm); }\n        else {\n          put('Soortborduring' + suf, kindOf(v.kind));\n          if ((v.kind === 'tekst' || v.kind === 'namen')) put(back ? 'Tekst achterkant' : 'Tekst voorkant', v.text);\n          else if (this.files[key]) files['Bestand' + suf] = this.files[key];\n          put('Plaats borduring ' + suf, z.label);\n          put('Grootte borduring ' + suf, sizeOf(z));\n          if (v.under) put(back ? 'Tekstonderborduringachterkant' : 'Tekst onder borduring', v.underText);\n          if (v.under && v.underNames) put('Naam per stuk onder borduring ' + suf, 'Ja');\n          const nms = (v.nl || []).filter((r) => r.n).map((r) => r.n + (r.m ? ' \u00B7 ' + r.m : '')).join('\\n'); if ((v.kind === 'namen' || (v.under && v.underNames)) && nms) put('Namen ' + suf, nms);\n        }\n      });\n    }\n    // extra borduringen\n    this.exList(s).forEach((x) => {\n      if (!s.ex[x.id]) return;\n      const k = s.exKind[x.id] || (x.kinds ? x.kinds[0] : 'tekst');\n      const t = s.exText[x.id];\n      if (x.type === 'onder') { put('Tekst onder borduring', t); return; }\n      if (x.type === 'mouw') { put('Borduringmouw', 'Ja'); put('Soortborduringmouw', kindOf(k)); if (k === 'tekst') put('Tekst mouw', t); return; }\n      if (x.type === 'zone') {\n        const back = x.zone && x.zone.view === 'achter', suf = back ? 'achterkant' : 'voorkant';\n        put('Soortborduring' + suf, kindOf(k));\n        if (k === 'tekst') put(back ? 'Tekst achterkant' : 'Tekst voorkant', t);\n        else if (this.files['x:' + x.id]) files['Bestand' + suf] = this.files['x:' + x.id];\n        return;\n      }\n      put('Extra borduring', x.label + (t ? ': ' + t : ''));\n    });\n    put('Extra info', this.kwijt);\n    return { props: out, files };\n  }\n\n  /* ---- toeslagartikelen ---- */\n  addonItems(group, qty) {\n    const sh = this.shop(), items = [], missing = [];\n    (this._paid || []).forEach((l) => {\n      if (!l.p) return;\n      let h = ADDON_BY_AMOUNT[l.p];\n      if (l.p === 7 && /mouw/i.test(l.label)) h = 'tn-addon-mouw';\n      if (l.h) h = l.h;\n      if (l.p === 10 && /geboortekaartje/i.test(l.label)) h = 'tn-addon-geboortekaartje';\n      const id = h && sh.addons && sh.addons[h];\n      if (!id) { missing.push(l.label + ' (\u20AC' + l.p + ')'); return; }\n      items.push({ id: id, quantity: qty, properties: { _hoort_bij: group } });\n    });\n    return { items, missing };\n  }\n\n  /* ---- voorbeeld voor het werkblad (23 okt 2026) ----\n     Het live voorbeeld zoals de klant het zag, per zijde met een borduring: kledingfoto en borduringen met dezelfde\n     stijlen. Gaat mee als verborgen eigenschap _voorbeeld; het werkblad tekent het daarmee opnieuw. */\n  mockup(s) {\n    const P = this.cfg(), keep = this.state, paid = this._paid, out = [];\n    const sides = (P.views || []).length ? P.views.map((v) => [v[0], v[1]]) : [[s.side, '']];\n    try {\n      sides.forEach(([side, label]) => {\n        this.state = Object.assign({}, s, { side, view: 'live' });\n        const v = this.renderVals();\n        if (!v.marks || !v.marks.length) return;\n        const m = v.marks.map((k) => {\n          const o = { s: k.style };\n          if (k.isMask) o.ms = k.maskStyle;\n          else if (k.isImg) o.src = k.src;\n          else if (k.isLogo) { o.ls = k.logoStyle; o.lt = k.logoTxt; }\n          else if (k.isText) { o.ts = k.textStyle; o.l1 = k.line1; if (k.hasLine2) { o.l2 = k.line2; if (k.textStyle2 !== k.textStyle) o.ts2 = k.textStyle2; } }\n          else { o.ic = k.isHart ? 'hart' : k.isHond ? 'hond' : 'kat'; o.hex = k.hex; }\n          return o;\n        });\n        out.push(v.isSwatch ? { l: label, sw: v.swatchStyle, m } : { l: label, g: v.garmentSrc, gs: v.garmentImgStyle, a: P.aspect || '600 / 800', m });\n      });\n    } catch (e) { return ''; } finally { this.state = keep; this._paid = paid; }\n    return out.length ? JSON.stringify({ v: 1, z: out }) : '';\n  }\n\n  /* ---- in de winkelmand ---- */\n  addToCart(s) {\n    if (this.busy) return;\n    const P = this.cfg();\n    const group = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\n    const { props, files } = this.collect(s);\n    const rows = [];\n    if (P.group) {\n      const colors = s.gcolors || [];\n      if (s.later) colors.forEach((ci) => { const q = Number(s.lqty[ci]) || 0; if (q > 0) rows.push({ color: P.colors[ci][0], size: null, q, later: true, extra: { 'Maten': 'Later doorgeven' } }); });\n      else colors.forEach((ci) => (P.group.sizes || this.szList(s) || []).forEach((z) => { const sbc = P.sizesByColor && P.sizesByColor[P.colors[ci][0]]; if (sbc && sbc.indexOf(z) < 0) return; const q = Number(s.qty[ci + '|' + z]) || 0; if (q > 0) rows.push({ color: P.colors[ci][0], size: z, q }); }));\n    } else {\n      const cur = P.colors[s.color] || P.colors[0];\n      rows.push({ color: cur[0], size: s.size, q: 1 });\n    }\n    const noSz = P.group ? (P.group.sizes || []).length <= 1 : !this.szList(s);\n    if (!rows.length) { this.errMsg = noSz ? 'Kies eerst een kleur.' : 'Kies eerst een kleur en maat.'; this.forceUpdate(); return; }\n    const total = rows.reduce((a, r) => a + r.q, 0);\n    const addon = this.addonItems(group, P.group ? total : 1);\n    if (addon.missing.length) {\n      this.errMsg = 'Deze meerprijs kan nog niet besteld worden: ' + addon.missing.join(', ') + '. Stuur ons een berichtje, dan regelen we het.';\n      this.forceUpdate(); return;\n    }\n    const noVariant = rows.find((r) => !this.variantFor(s, r.color, r.size, r.later));\n    if (noVariant) { this.errMsg = noSz ? 'We vinden deze kleur niet. Probeer een andere.' : 'We vinden deze combinatie van kleur en maat niet. Probeer een andere.'; this.forceUpdate(); return; }\n\n    const hasFiles = Object.keys(files).some((k) => files[k]);\n    this.busy = true; this.errMsg = ''; this.busyMsg = hasFiles ? 'Je bestand wordt opgeladen' : 'Even geduld';\n    this.forceUpdate();\n    const t0 = Date.now();\n    const sizeOpt = hasKind(this.shop(), 'maat'), colorOpt = hasKind(this.shop(), 'kleur');\n    const mock = this.mockup(s);\n    const items = rows.map((r) => {\n      const p = Object.assign({}, props, r.extra || {});\n      if (r.size && !sizeOpt && !noSz) p['Maat'] = r.size;\n      if (r.color && !colorOpt && (P.colors || []).length > 1) p['Kleur'] = r.color;\n      p['_groep'] = group;\n      const foto = this.photoFor(s, r.color);\n      if (foto) p['_foto'] = foto;\n      if (!rows.indexOf(r) && mock) p['_voorbeeld'] = mock;\n      return { id: this.variantFor(s, r.color, r.size, r.later).id, quantity: r.q, properties: p };\n    });\n    const added = [];\n    const keep = (j) => { (j.items || [j]).forEach((it) => { if (it && it.key) added.push(it.key); }); return j; };\n    const fail = (j, fallback) => new Error((j && (j.description || j.message)) || fallback);\n    const postJson = (list) => fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: list }) })\n      .then((r2) => r2.json().then((j) => { if (!r2.ok) throw fail(j, 'Toevoegen lukte niet'); return keep(j); }));\n    // Met een bestand: een enkele aanvraag (multipart) met het kledingstuk en de meerprijzen, met voortgang.\n    // Bij meerdere regels (groep) gaat het bestand een keer mee; de andere regels krijgen daarna de link naar dat bestand.\n    const postFiles = (first, extraItems, ready) => new Promise((res, rej) => {\n      const fd = new FormData();\n      const add = (n, it, withFiles) => {\n        fd.append('items[' + n + '][id]', it.id); fd.append('items[' + n + '][quantity]', String(it.quantity));\n        Object.keys(it.properties || {}).forEach((k) => fd.append('items[' + n + '][properties][' + k + ']', it.properties[k]));\n        if (withFiles) Object.keys(ready).forEach((k) => fd.append('items[' + n + '][properties][' + k + ']', ready[k]));\n      };\n      add(0, first, true);\n      extraItems.forEach((it, n) => add(n + 1, it, false));\n      const x = new XMLHttpRequest();\n      x.open('POST', '/cart/add.js');\n      x.setRequestHeader('Accept', 'application/json');\n      x.upload.onprogress = (e) => {\n        if (!e.lengthComputable) return;\n        const pc = Math.min(99, Math.round(e.loaded / e.total * 100));\n        const msg = pc < 99 ? 'Je bestand wordt opgeladen (' + pc + '%)' : 'Bijna klaar';\n        if (msg !== this.busyMsg) { this.busyMsg = msg; this.forceUpdate(); }\n      };\n      x.onload = () => { let j = null; try { j = JSON.parse(x.responseText); } catch (e) {} if (x.status >= 200 && x.status < 300 && j) res(keep(j)); else rej(fail(j, 'Toevoegen lukte niet')); };\n      x.onerror = () => rej(new Error('Geen verbinding'));\n      x.send(fd);\n    });\n    const addonItems = addon.items;\n    const run = hasFiles\n      ? this.readyFiles(files).then((ready) => {\n          if (items.length === 1) return postFiles(items[0], addonItems, ready);\n          return postFiles(items[0], [], ready).then((j) => {\n            const it = (j.items || [j]).find((x) => x.properties && x.properties._groep === group) || {};\n            const links = {};\n            Object.keys(ready).forEach((k) => { if (it.properties && it.properties[k]) links[k] = it.properties[k]; });\n            this.busyMsg = 'Bijna klaar'; this.forceUpdate();\n            return postJson(items.slice(1).map((x) => Object.assign({}, x, { properties: Object.assign({}, x.properties, links) })).concat(addonItems));\n          });\n        })\n      : postJson(items.concat(addonItems));\n    run.then(() => {\n        this.busyMsg = 'Naar je winkelmand'; this.forceUpdate();\n        try { sessionStorage.setItem('tnm-add-ms', String(Date.now() - t0)); } catch (e) {}\n        window.location.href = ((window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/') + 'cart';\n      })\n      .catch((err) => {\n        // geen half bestelde regels laten staan\n        const upd = {}; added.forEach((key) => { upd[key] = 0; });\n        (added.length ? fetch('/cart/update.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ updates: upd }) }) : Promise.resolve())\n          .catch(() => null)\n          .then(() => { this.busy = false; this.busyMsg = ''; this.errMsg = 'Dat lukte niet: ' + err.message + '. Probeer opnieuw of stuur ons een berichtje.'; this.forceUpdate(); });\n      });\n  }\n}\n\n/* ---- cfg opschonen voor de weergave ----\n   - voorbeelden: geen dubbele (zelfde foto, of zelfde kleur, draad en omschrijving), groot origineel als dat er is\n   - 'Ingekleurd' heet overal 'Ingekleurde tekening' */\nfunction tidyCfg(cfg) {\n  const P = Object.assign({}, cfg);\n  if (Array.isArray(P.examples)) {\n    const seen = new Set();\n    P.examples = P.examples.filter((e) => {\n      // enkel dezelfde foto (zelfde adres) weglaten: twee foto's met dezelfde beschrijving zijn echt twee voorbeelden (20 okt)\n      const k1 = 'u:' + String(e[0]).split('?')[0];\n      if (seen.has(k1)) return false;\n      seen.add(k1); return true;\n    });\n  }\n  if (Array.isArray(P.styles)) P.styles = P.styles.map((x) => (x[0] === 'kleur' && x[1] === 'Ingekleurd' ? [x[0], KLEUR_LABEL].concat(x.slice(2)) : x));\n  if (P.kindLabels && P.kindLabels.kleur === 'Ingekleurd') P.kindLabels = Object.assign({}, P.kindLabels, { kleur: KLEUR_LABEL });\n  if (P.eyebrow === 'Ingekleurd') P.eyebrow = KLEUR_LABEL;\n  return P;\n}\n\n/* ---- product met modellen (bv. petten voor groepen: Trucker, Dad, Vintage, Velour) ----\n   Kleuren en foto's per model uit het cfg-bestand van dat model, enkel de kleuren die het product per model heeft.\n   De meerprijs per model volgt de Shopify-prijs. Zie scripts/motor-modellen.json. */\nfunction withModels(base, set, datas, shop) {\n  const vs = shop.variants || [], names = shop.optionNames || [];\n  if (!vs.length) return base;\n  let oi = names.indexOf(set.option); if (oi < 0) oi = 0;\n  const ci = names.findIndex((n) => /kleur|colou?r/i.test(n));\n  if (ci < 0) return base;\n  const hex = {}, fromCfg = {}, models = [];\n  const minPrice = (list) => Math.min.apply(null, list.map((v) => Number(v.price) / 100));\n  const all = minPrice(vs);\n  set.models.forEach((m, k) => {\n    const mv = vs.filter((v) => v.options[oi] === m.label);\n    if (!mv.length) return;\n    const own = Array.from(new Set(mv.map((v) => v.options[ci])));\n    const c = (datas[k] && datas[k].cells && datas[k].cells[set.cell]) || {};\n    const imgs = {}, back = {}, geo = {};\n    (c.colors || []).forEach(([n, h]) => {\n      const pn = (m.map && m.map[n]) || matchVal(own, n, m.cfg);\n      if (!pn || own.indexOf(pn) < 0) return;\n      if (!fromCfg[pn]) { hex[pn] = h; fromCfg[pn] = true; }\n      if (c.imgs && c.imgs[n]) imgs[pn] = c.imgs[n];\n      if (c.back && c.back[n]) back[pn] = c.back[n];\n    });\n    // plaatsen op het stuk volgens het eigen cfg-bestand van dit model (bv. hoodie: borst iets lager dan bij de sweater)\n    (c.zones || []).forEach((z) => { if (z && z.id) geo[z.id] = { cx: z.cx, cy: z.cy, kz: z.kz, cm: z.cm }; });\n    own.forEach((pn) => { if (!hex[pn]) hex[pn] = (set.hex && set.hex[pn]) || '#BFC7B8'; });\n    const extra = Math.round((minPrice(mv) - all) * 100) / 100;\n    models.push({ id: m.label.toLowerCase(), label: m.label, opt: m.label, imgs, back, geo, colors: own, extra: extra > 0 ? extra : 0 });\n  });\n  if (!models.length) return base;\n  const order = [];\n  models.forEach((m) => m.colors.forEach((n) => { if (order.indexOf(n) < 0) order.push(n); }));\n  const P = Object.assign({}, base, { models, colors: order.map((n) => [n, hex[n]]), imgs: models[0].imgs, back: models[0].back, price: all });\n  ['title', 'h1', 'lineTitle', 'noteNoun'].forEach((k) => { if (set[k]) P[k] = set[k]; });\n  P.defaultColor = Math.max(0, order.indexOf(set.start || ''));\n  // voorbeelden: kleurnamen naar Shopify, enkel kleuren die bestaan\n  const allMap = {}; set.models.forEach((m) => Object.assign(allMap, m.map || {}));\n  P.examples = (base.examples || []).map((e) => [e[0], allMap[e[1]] || matchVal(order, e[1]) || '', e[2], e[3]]).filter((e) => e[1]);\n  return P;\n}\n\n/* ---- opstarten ----\n   De cel komt uit tn-productmap.json (zoals altijd). Om niet te wachten laden we de productkaart en het\n   cfg-bestand tegelijk: tn-product.liquid geeft het kledingstuk uit snippets/tn-motor-start.liquid mee (shop.start)\n   en laadt dat cfg-bestand al vooraf. Wijst de productkaart toch een ander kledingstuk aan, dan laden we dat. */\nwindow.TNMotorStart = function (el, shop) {\n  const handle = (location.pathname.match(/\\/products\\/([^/?#]+)/) || [])[1] || '';\n  const param = new URLSearchParams(location.search);\n  const cfgUrl = (g) => (shop.startCfg && shop.startCfg[0] === g && shop.startCfg[1]) || shop.cfgPattern.replace('__ID__', g);\n  const cfgCache = {};\n  const loadCfg = (g) => (cfgCache[g] = cfgCache[g] || fetch(cfgUrl(g)).then((r) => r.json()).then((d) => { if (shop.spotifyUrl && d && d.cells) Object.keys(d.cells).forEach((k) => { const c = d.cells[k]; if (c && c.spotifyAr && !c.spotify) { c.spotify = shop.spotifyUrl; c.spotifyAr = 3; } }); return d; }));\n  const mapP = shop.mapUrl ? fetch(shop.mapUrl).then((r) => r.json()).catch(() => ({})) : Promise.resolve({});\n  const guess = param.get('kledingstuk') || (shop.start && shop.start[0]) || shop.garment;\n  loadCfg(guess).catch(() => null);\n  mapP.then((map) => {\n    const hit = param.get('kledingstuk') ? null : map[handle];\n    const garment = param.get('kledingstuk') || (hit && hit[0]) || shop.garment;\n    const cell = param.get('personalisatie') || (hit && hit[1]) || shop.cell;\n    // tn-groepsproduct.js (sjabloon tn-groepstruien) maakt zijn modellen zelf uit de Shopify-opties: daar geen modelset\n    const set = !param.get('kledingstuk') && !param.get('personalisatie') && shop.garment !== 'groepsproduct' ? MODEL_SETS[handle] : null;\n    const extraCfgs = set ? Promise.all(set.models.map((m) => loadCfg(m.cfg))) : Promise.resolve(null);\n    // FR/EN: woordenboek van dit kledingstuk en de NL-varianten laden (assets/tn-motor-i18n.js)\n    const i18n = window.TN_I18N && window.TN_I18N.load ? window.TN_I18N.load([garment].concat(set ? set.models.map((m) => m.cfg) : []), shop) : null;\n    return Promise.all([loadCfg(garment), extraCfgs, i18n]).then(([data, more]) => {\n      let cfg = data.cells[cell] || data.cells.zelf;\n      if (!cfg) { el.textContent = TNT('Deze personalisatie is nog niet beschikbaar.'); return; }\n      // minder dan 3 eigen voorbeelden in deze cel (bv. pet met lijntekening had er 1, de sectie vraagt er 2)? Dan aanvullen\n      // met die van hetzelfde kledingstuk: eigen eerst, dan 'zelf', dan de andere cellen; enkel kleuren die deze cel kent,\n      // ingekleurd enkel waar die stijl bestaat (20 okt, Louise)\n      if ((cfg.examples || []).length < 3) {\n        const names = (cfg.colors || []).map((c) => c[0]); const seen = {}; const borrowed = (cfg.examples || []).slice();\n        borrowed.forEach((e) => { if (e) seen[e[0]] = true; });\n        ['zelf'].concat(Object.keys(data.cells).filter((k) => k !== 'zelf')).forEach((k) => { const c = data.cells[k]; ((c && c.examples) || []).forEach((e) => {\n          if (!e || typeof e[0] !== 'string' || !e[0] || seen[e[0]] || names.indexOf(e[1]) < 0) return;\n          if (e[2] === 'Ingekleurd' && !cfg.styles) return;\n          seen[e[0]] = true; borrowed.push(e); }); });\n        if (borrowed.length > (cfg.examples || []).length) cfg = Object.assign({}, cfg, { examples: borrowed });\n      }\n      // productkaart met een derde deel, bv. [\"sweater\", \"ingekleurd\", {\"price\": 59.95}]: enkel voor dit product\n      // de prijs (of prijsnota) van de cel vervangen; de cel zelf en andere producten blijven gelijk\n      const own = hit && hit[2] && !param.get('kledingstuk') && !param.get('personalisatie') && data.cells[cell] ? hit[2] : null;\n      if (own) { cfg = Object.assign({}, cfg); ['price', 'priceNote'].forEach((k) => { if (own[k] !== undefined) cfg[k] = own[k]; }); }\n      if (set && more) cfg = withModels(cfg, set, more, shop);\n      cfg = tidyCfg(cfg);\n      // kledingstuk en cel voor de aliassen; groepsmaten enkel zoals ze in dit product bestaan\n      cfg.__g = garment; cfg.__c = data.cells[cell] ? cell : 'zelf';\n      if (cfg.group && cfg.group.sizes) cfg.group = Object.assign({}, cfg.group, { sizes: shopSizes(shop, cfg.group.sizes, garment) });\n      window.__tnMotor = window.TNMotor.mount(el, TNComponent, { cfg: cfg, shop: shop }, TEMPLATE);\n      window.__tnMotor.testPayload = function () { const i = window.__tnMotor; return i.collect(i.state); };\n    });\n  }).catch(() => { el.textContent = TNT('De pagina kon niet laden. Vernieuw de pagina of stuur ons een berichtje.'); });\n};\n\n})();\n"],
  "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
  "names": []
}
