{
  "version": 3,
  "sources": ["/cdn/shop/t/109/assets/fd-plot-rechner.js?x=1791610527959"],
  "sourcesContent": ["/* FD Plot-Rechner \u2013 Oberfl\u00E4che, Preisberechnung, Warenkorb */\n(function () {\n  'use strict';\n  var C = window.FDPlotCore;\n  if (!C) return;\n\n  var eur = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });\n  var num = function (v, d) { return new Intl.NumberFormat('de-DE', { minimumFractionDigits: d, maximumFractionDigits: d }).format(v); };\n  var money = function (cents) { return eur.format(cents / 100); };\n  var cm = function (mm) { return (mm % 10 === 0 ? num(mm / 10, 0) : num(mm / 10, 1)) + ' cm'; };\n  var esc = function (s) { return String(s).replace(/[&<>\"]/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]; }); };\n  var parseNum = function (s) { var m = String(s).replace(',', '.').match(/[\\d.]+/); return m ? parseFloat(m[0]) : NaN; };\n\n  document.querySelectorAll('.fdpr').forEach(init);\n\n  function init(root) {\n    var cfgEl = root.querySelector('[data-fdpr-config]');\n    if (!cfgEl) return;\n    var cfg = JSON.parse(cfgEl.textContent);\n    var gap = Number(cfg.gap) || 0;\n    var guest = !!cfg.guest; // nicht angemeldet: rechnen ohne Preise, Bestellen erst nach Login\n    var noRotKeys = String(cfg.noRotate || '').toLowerCase().split(',').map(function (s) { return s.trim(); }).filter(Boolean);\n    var films = cfg.products.map(prepare).filter(function (f) { return f.widths.length; });\n    var GN = ['verspiegelt', 'dual-reflektierend', 'neutral', 'spektral selektiv / hell', 'klar / Sicherheit / UV', 'matt / Sichtschutz / Design', 'sonstige'];\n    function grp(f) {\n      var n = ' ' + f.title.replace(/^LLumar\\s+/i, '') + ' ';\n      var ext = (f.tags || []).some(function (g) { return /au(\u00DF|ss)eninstall/i.test(g); }) || /\\bEXT\\b|\\bER\\b|au\u00DFen|\\b[A-Z]HE\\b/.test(f.title) || /au\u00DFen/i.test(f.title);\n      var g = /\\b(Matt|Frost|Gradient|NRM|RM|DL|DECO|Sichtschutz|Design|stripes|blinds|bands|thin line|dot matrix)\\b/i.test(n) ? 5 :\n        /\\b(VS|XHE|AIR|THE)\\b|HelioShield|spektral/i.test(n) ? 3 :\n        /\\b(SCL|SHE|GCL|AU|NUV|Sicherheit|UV|Klar)\\b/i.test(n) ? 4 :\n        /\\bNHE\\b|\\bN\\s?\\d/.test(n) ? 2 :\n        /\\bVHE\\b|\\b(V|RN)\\s?\\d|dual/i.test(n) ? 1 :\n        /\\bRHE\\b|\\bR\\s?\\d|HelioSilver|reflekt|verspiegelt/i.test(n) ? 0 : 6;\n      return { ext: ext, g: g };\n    }\n    films.forEach(function (f) { var x = grp(f); f.ext = x.ext; f.grp = x.g; });\n    films.sort(function (a, b) { return (b.ext - a.ext) || (a.grp - b.grp) || a.title.localeCompare(b.title, 'de'); });\n\n    var $ = function (s) { return root.querySelector(s); };\n    var elFilm = $('[data-film]'), elExtra = $('[data-extra-opts]'), elWidth = $('[data-width]'), elWHint = $('[data-width-hint]');\n    var elRows = $('[data-rows]'), elPlan = $('[data-plan]'), elSum = $('[data-sum-body]'), elOrder = $('[data-order]'), elMsg = $('[data-msg]');\n    var elNoRot = $('[data-norotate]'), elNote = $('[data-note]');\n    var state = { film: null, extra: {}, width: null, widthAuto: true, result: null };\n\n    // ---------- Produktdaten aufbereiten ----------\n    function prepare(p) {\n      var iW = -1, iL = -1;\n      p.options.forEach(function (n, i) {\n        var l = n.toLowerCase();\n        if (iW < 0 && l.indexOf('breite') >= 0) iW = i;\n        else if (iL < 0 && (l.indexOf('l\u00E4ng') >= 0 || l.indexOf('laeng') >= 0 || l.indexOf('l\u00E4nge') >= 0)) iL = i;\n      });\n      var extraIdx = [];\n      p.options.forEach(function (n, i) { if (i !== iW && i !== iL) extraIdx.push(i); });\n      var vars = [];\n      p.variants.forEach(function (v) {\n        if (!v.av) return;\n        var wcm = parseNum(v.o[iW]);\n        var lm = iL >= 0 ? parseNum(v.o[iL]) : NaN;\n        if (!(wcm > 0) || !(lm > 0)) return;\n        vars.push({ id: v.id, price: guest ? Math.round(lm * 100 * (lm > 1 ? 0.83 : 1)) : v.price, lim: (v.lim === null || v.lim === undefined) ? null : Number(v.lim), widthMm: Math.round(wcm * 10), lengthMm: Math.round(lm * 1000), extra: extraIdx.map(function (i) { return v.o[i]; }), label: v.o.join(' / ') });\n      });\n      var widths = [];\n      vars.forEach(function (v) { if (widths.indexOf(v.widthMm) < 0) widths.push(v.widthMm); });\n      widths.sort(function (a, b) { return a - b; });\n      var title = p.title;\n      var lt = (title + ' ' + p.handle).toLowerCase();\n      return {\n        handle: p.handle, title: title, vendor: p.vendor, tags: p.tags || [], vars: vars, widths: widths,\n        extraNames: extraIdx.map(function (i) { return p.options[i]; }),\n        lockRotate: noRotKeys.some(function (k) { return lt.indexOf(k) >= 0; })\n      };\n    }\n\n    // ---------- Folien-Auswahl ----------\n    var groups = {}, gOrder = [];\n    films.forEach(function (f) { var k = (f.ext ? 'Au\u00DFenfolien' : 'Innenfolien') + ' \u2013 ' + GN[f.grp]; if (!groups[k]) { groups[k] = []; gOrder.push(k); } groups[k].push(f); });\n    elFilm.innerHTML = '<option value=\"\">Bitte Folie w\u00E4hlen \u2026</option>' + gOrder.map(function (g) {\n      return '<optgroup label=\"' + esc(g) + '\">' + groups[g].map(function (f) { return '<option value=\"' + esc(f.handle) + '\">' + esc(f.title) + '</option>'; }).join('') + '</optgroup>';\n    }).join('');\n\n    function filmVars() {\n      var f = state.film; if (!f) return [];\n      return f.vars.filter(function (v) {\n        return f.extraNames.every(function (n, i) { return !state.extra[n] || v.extra[i] === state.extra[n]; });\n      });\n    }\n\n    function setFilm(handle) {\n      state.film = films.filter(function (f) { return f.handle === handle; })[0] || null;\n      state.extra = {}; state.widthAuto = true;\n      elExtra.innerHTML = '';\n      if (state.film) {\n        state.film.extraNames.forEach(function (n, i) {\n          var vals = [];\n          state.film.vars.forEach(function (v) { if (vals.indexOf(v.extra[i]) < 0) vals.push(v.extra[i]); });\n          state.extra[n] = vals[0];\n          var lab = document.createElement('label');\n          lab.className = 'fdpr__lbl';\n          lab.textContent = n;\n          var sel = document.createElement('select');\n          sel.className = 'fdpr__in';\n          sel.innerHTML = vals.map(function (v) { return '<option>' + esc(v) + '</option>'; }).join('');\n          sel.addEventListener('change', function () { state.extra[n] = sel.value; state.widthAuto = true; update(); });\n          lab.appendChild(sel); elExtra.appendChild(lab);\n        });\n        elNoRot.checked = state.film.lockRotate;\n        elNoRot.disabled = state.film.lockRotate;\n      } else { elNoRot.disabled = false; }\n      update();\n    }\n    elFilm.addEventListener('change', function () { setFilm(elFilm.value); });\n    elWidth.addEventListener('change', function () { state.widthAuto = elWidth.value === 'auto'; state.width = state.widthAuto ? null : Number(elWidth.value); update(); });\n    elNoRot.addEventListener('change', update);\n\n    // ---------- Ma\u00DF-Zeilen ----------\n    var SHAPES = [['r', 'Rechteck'], ['t', 'Dreieck rechtwinklig'], ['d', 'Dreieck (3 Seiten)'], ['v4', 'Viereck / Trapez'], ['v5', 'F\u00FCnfeck'], ['v6', 'Sechseck'], ['v7', 'Siebeneck'], ['v8', 'Achteck'], ['vn', 'Vieleck (Ecken frei)'], ['k', 'Rund (Kreis)']];\n    var SNAME = {}; SHAPES.forEach(function (x) { SNAME[x[0]] = x[1]; });\n    function nSides(tr) { var s = tr.getAttribute('data-shape'); if (s === 'vn') { var e = tr.querySelector('[data-ecken]'); var n = Math.round(Number(e && e.value)); return Math.min(24, Math.max(3, n || 9)); } return s.charAt(0) === 'v' ? Number(s.slice(1)) : 0; }\n    function fld(key, label, val, ph) { return '<label class=\"fdpr__dim\"><span>' + label + '</span><input class=\"fdpr__in\" type=\"number\" inputmode=\"numeric\" min=\"1\" step=\"1\" data-d=\"' + key + '\"' + (key === 'w' ? ' data-w' : key === 'h' ? ' data-h' : '') + (val ? ' value=\"' + esc(val) + '\"' : '') + (ph ? ' placeholder=\"' + ph + '\"' : '') + '></label>'; }\n    function drawDims(tr, keep) {\n      var s = tr.getAttribute('data-shape'), box = tr.querySelector('[data-dims]'), old = keep || {};\n      tr.querySelectorAll('[data-d]').forEach(function (i) { if (i.value) old[i.getAttribute('data-d')] = i.value; });\n      var h = '';\n      if (s === 'r') h = fld('w', 'Breite', old.w, '1200') + fld('h', 'H\u00F6he', old.h, '800');\n      else if (s === 't') h = fld('w', 'Schenkel 1', old.w) + fld('h', 'Schenkel 2', old.h) + '<span class=\"fdpr__calc\" data-hyp></span>';\n      else if (s === 'd') h = fld('a', 'Seite a', old.a) + fld('b', 'Seite b', old.b) + fld('c', 'Seite c', old.c);\n      else if (s === 'k') h = fld('dm', 'Durchmesser', old.dm, '600');\n      else {\n        var n = nSides(tr);\n        if (s === 'vn') h += '<label class=\"fdpr__dim\"><span>Ecken</span><input class=\"fdpr__in\" type=\"number\" min=\"3\" max=\"24\" step=\"1\" data-ecken value=\"' + n + '\"></label>';\n        for (var i = 1; i <= n; i++) h += fld('s' + i, 'Seite ' + i, old['s' + i]);\n        h += '<span class=\"fdpr__dimsep\">Au\u00DFenma\u00DF (f\u00FCr den Zuschnitt):</span>' + fld('bw', 'Breite gesamt', old.bw) + fld('bh', 'H\u00F6he gesamt', old.bh) + '<span class=\"fdpr__calc\" data-reg></span>';\n      }\n      box.innerHTML = h;\n      box.querySelectorAll('input').forEach(function (i) { i.addEventListener('input', update); });\n      var ec = box.querySelector('[data-ecken]'); if (ec) ec.addEventListener('change', function () { drawDims(tr); update(); });\n    }\n   function addRow(w, h, q, sh, keep) {\n      var tr = document.createElement('tr');\n      sh = sh || 'r';\n      tr.setAttribute('data-shape', sh);\n      tr.innerHTML = '<td><span class=\"fdpr__lab\">#</span><span class=\"fdpr__nr\"></span></td>' +\n        '<td><label class=\"fdpr__dim fdpr__dim--form\"><span>Form</span><select class=\"fdpr__in fdpr__shape\" data-s>' + SHAPES.map(function (x) { return '<option value=\"' + x[0] + '\">' + x[1] + '</option>'; }).join('') + '</select></label></td>' +\n        '<td><div class=\"fdpr__dims\" data-dims></div></td>' +\n        '<td><label class=\"fdpr__dim fdpr__dim--q\"><span>Anzahl</span><input class=\"fdpr__in\" type=\"number\" inputmode=\"numeric\" min=\"1\" step=\"1\" data-q value=\"1\"></label></td>' +\n        '<td><span class=\"fdpr__lab\">&nbsp;</span><button type=\"button\" class=\"fdpr__del\" aria-label=\"Teil entfernen\">\u00D7</button></td>';\n      tr.querySelector('[data-s]').value = sh;\n      drawDims(tr, keep || { w: w, h: h });\n      if (q) tr.querySelector('[data-q]').value = q;\n      tr.querySelector('[data-s]').addEventListener('change', function () { tr.setAttribute('data-shape', this.value); drawDims(tr); update(); });\n      tr.querySelector('.fdpr__del').addEventListener('click', function () { tr.remove(); if (!elRows.children.length) addRow(); renumber(); update(); });\n      tr.querySelector('[data-q]').addEventListener('input', update);\n      elRows.appendChild(tr); renumber();\n      return tr;\n    }\n    function renumber() { Array.prototype.forEach.call(elRows.children, function (tr, i) { tr.querySelector('.fdpr__nr').textContent = i + 1; }); }\n    $('[data-add]').addEventListener('click', function () { var i = addRow().querySelector('[data-d]'); if (i) i.focus(); });\n        // ---- Ma\u00DFliste \u00FCbernehmen: Excel-/CSV-Datei ziehen oder ausw\u00E4hlen, oder Zellen einf\u00FCgen ----\n    var elPaste = $('[data-paste]'), elPMsg = $('[data-paste-msg]'), elFile = $('[data-file]'), elDrop = $('[data-drop]');\n    function pmsg(t, bad) {\n      if (!elPMsg) return;\n      elPMsg.textContent = t || ''; elPMsg.hidden = !t;\n      elPMsg.className = 'fdpr__pmsg' + (bad ? ' is-bad' : '');\n    }\n    $('[data-paste-toggle]').addEventListener('click', function () { elPaste.hidden = !elPaste.hidden; });\n    function shapeOf(s) {\n      s = String(s || '').toLowerCase();\n      if (/rund|kreis|\u00F8|durchm/.test(s)) return 'k';\n      if (/dreieck|(^|\\s)d(\\s|$)/.test(s)) return 't';\n      return 'r';\n    }\n    function toNum(v) {\n      if (typeof v === 'number') return v;\n      var s = String(v == null ? '' : v).trim();\n      if (/^\\d{1,3}(\\.\\d{3})+(,\\d+)?$/.test(s)) s = s.replace(/\\./g, '');\n      var m = s.replace(',', '.').match(/\\d+(?:\\.\\d+)?/);\n      return m ? parseFloat(m[0]) : NaN;\n    }\n    function textRows(t) {\n      return String(t || '').replace(/^\\uFEFF/, '').replace(/\\r\\n?/g, '\\n').split('\\n').map(function (l) {\n        if (/[\\t;]/.test(l)) return l.split(/[\\t;]/);\n        if ((l.match(/,/g) || []).length >= 2 && !/\\s\\d/.test(l.trim())) return l.split(',');\n        return l.trim().split(/\\s*[x\u00D7*]\\s*|\\s+/);\n      });\n    }\n    function rowsToParts(rows) {\n      var map = null, parts = [], skipped = 0;\n      rows.forEach(function (raw) {\n        var cells = [];\n        for (var i = 0; i < (raw || []).length; i++) cells.push(raw[i] == null ? '' : String(raw[i]).trim());\n        if (!cells.join('')) return;\n        var low = cells.map(function (c) { return c.toLowerCase(); });\n        if (!map && low.some(function (c) { return /breite|width|^b(\\s|\\(|$)/.test(c); }) && low.some(function (c) { return /h(\u00F6|oe)he|height|^h(\\s|\\(|$)/.test(c); })) {\n          map = {};\n          low.forEach(function (c, i) {\n            if (map.w == null && /breite|width|^b(\\s|\\(|$)/.test(c)) map.w = i;\n            else if (map.h == null && /h(\u00F6|oe)he|height|^h(\\s|\\(|$)/.test(c)) map.h = i;\n            else if (map.q == null && /anzahl|st(\u00FC|ue)ck|stk|menge|qty|^anz/.test(c)) map.q = i;\n            else if (map.d == null && /durchm|\u00F8/.test(c)) map.d = i;\n            else if (map.f == null && /^form|^art/.test(c)) map.f = i;\n          });\n          return;\n        }\n        var nums = cells.map(toNum).filter(function (x) { return x > 0; });\n        if (!nums.length) return; // reine Textzeile (Titel o. \u00C4.)\n        var w, h, q, sh;\n        if (map) {\n          sh = map.f != null ? shapeOf(cells[map.f]) : 'r';\n          w = toNum(cells[map.w]); h = toNum(cells[map.h]);\n          q = map.q != null ? toNum(cells[map.q]) : 1;\n          if (map.d != null && toNum(cells[map.d]) > 0 && !(h > 0)) { sh = 'k'; w = toNum(cells[map.d]); }\n        } else {\n          var words = cells.filter(function (c) { return c && isNaN(toNum(c)); }).join(' ');\n          sh = shapeOf(words);\n          if (nums.length >= 4 && nums[0] < 50 && nums[0] === Math.round(nums[0])) nums.shift(); // Positionsnummer\n          if (sh === 'k') { w = nums[0]; q = nums[1]; } else { w = nums[0]; h = nums[1]; q = nums[2]; }\n        }\n        if (sh === 'k' ? w > 0 : (w > 0 && h > 0)) parts.push({ w: Math.round(w), h: Math.round(h || 0), q: Math.max(1, Math.round(q > 0 ? q : 1)), sh: sh });\n        else skipped++;\n      });\n      return { parts: parts, skipped: skipped };\n    }\n    function addParts(res, src) {\n      var from = src ? ' in \u201E' + src + '\u201C' : '';\n      if (!res.parts.length) { pmsg('Keine Ma\u00DFe erkannt' + from + '. Erwartet wird je Zeile: Breite, H\u00F6he, Anzahl (in mm).', true); return false; }\n      var first = elRows.querySelector('[data-d]');\n      if (elRows.children.length === 1 && (!first || !first.value)) elRows.innerHTML = '';\n      var cnt = 0;\n      res.parts.forEach(function (p) { addRow(p.w, p.h, p.q, p.sh, p.sh === 'k' ? { dm: p.w } : null); cnt += p.q; });\n      if (!elRows.children.length) addRow();\n      update();\n      pmsg(res.parts.length + (res.parts.length === 1 ? ' Zeile' : ' Zeilen') + ' mit ' + cnt + (cnt === 1 ? ' Teil' : ' Teilen') + (src ? ' aus \u201E' + src + '\u201C' : '') + ' \u00FCbernommen' +\n        (res.skipped ? ' \u2013 ' + res.skipped + (res.skipped === 1 ? ' Zeile' : ' Zeilen') + ' ohne g\u00FCltige Ma\u00DFe \u00FCbersprungen' : '') + '. Bitte kurz pr\u00FCfen.');\n      return true;\n    }\n    $('[data-paste-apply]').addEventListener('click', function () {\n      var ta = $('[data-paste] textarea');\n      if (addParts(rowsToParts(textRows(ta.value)))) { ta.value = ''; elPaste.hidden = true; }\n    });\n    function xlsxRows(buf) {\n      var u = new Uint8Array(buf), dv = new DataView(buf), e = -1, td = new TextDecoder();\n      for (var i = u.length - 22; i >= Math.max(0, u.length - 66000); i--) if (dv.getUint32(i, true) === 0x06054b50) { e = i; break; }\n      if (e < 0) return Promise.reject(new Error('zip'));\n      var cnt = dv.getUint16(e + 10, true), p = dv.getUint32(e + 16, true), files = {};\n      for (var k = 0; k < cnt; k++) {\n        var nlen = dv.getUint16(p + 28, true);\n        files[td.decode(u.subarray(p + 46, p + 46 + nlen))] = { m: dv.getUint16(p + 10, true), s: dv.getUint32(p + 20, true), o: dv.getUint32(p + 42, true) };\n        p += 46 + nlen + dv.getUint16(p + 30, true) + dv.getUint16(p + 32, true);\n      }\n      function get(n) {\n        var f = files[n]; if (!f) return Promise.resolve(null);\n        var st = f.o + 30 + dv.getUint16(f.o + 26, true) + dv.getUint16(f.o + 28, true), data = u.subarray(st, st + f.s);\n        if (f.m === 0) return Promise.resolve(td.decode(data));\n        if (typeof DecompressionStream === 'undefined') return Promise.reject(new Error('ds'));\n        return new Response(new Blob([data]).stream().pipeThrough(new DecompressionStream('deflate-raw'))).text();\n      }\n      function X(t) { return t ? new DOMParser().parseFromString(t, 'application/xml') : null; }\n      function each(n, tag, fn) { Array.prototype.forEach.call(n.getElementsByTagName(tag), fn); }\n      function txt(n) { var s = ''; each(n, 't', function (t) { s += t.textContent; }); return s; }\n      return Promise.all([get('xl/workbook.xml'), get('xl/_rels/workbook.xml.rels'), get('xl/sharedStrings.xml')]).then(function (r) {\n        var wb = X(r[0]), rel = X(r[1]), sx = X(r[2]), ss = [], sheet = 'xl/worksheets/sheet1.xml';\n        if (sx) each(sx, 'si', function (si) { ss.push(txt(si)); });\n        var s0 = wb && wb.getElementsByTagName('sheet')[0];\n        if (s0 && rel) {\n          var id = s0.getAttribute('r:id') || s0.getAttributeNS('http://schemas.openxmlformats.org/officeDocument/2006/relationships', 'id');\n          each(rel, 'Relationship', function (x) {\n            if (x.getAttribute('Id') === id) { var t = x.getAttribute('Target').replace(/^\\//, ''); sheet = /^xl\\//.test(t) ? t : 'xl/' + t; }\n          });\n        }\n        return get(sheet).then(function (t) {\n          var d = X(t), rows = [];\n          if (!d) throw new Error('sheet');\n          each(d, 'row', function (row) {\n            var cells = [];\n            each(row, 'c', function (c) {\n              var m = (c.getAttribute('r') || '').match(/^[A-Z]+/), col = 0;\n              if (m) { for (var j = 0; j < m[0].length; j++) col = col * 26 + m[0].charCodeAt(j) - 64; col--; } else col = cells.length;\n              var tp = c.getAttribute('t'), v = c.getElementsByTagName('v')[0], val = v ? v.textContent : '';\n              if (tp === 's') val = ss[+val] || '';\n              else if (tp === 'inlineStr') val = txt(c);\n              else if (val !== '' && !tp) val = parseFloat(val);\n              cells[col] = val;\n            });\n            rows.push(cells);\n          });\n          return rows;\n        });\n      });\n    }\n    function readFile(f) {\n      if (!f) return;\n      var name = f.name || 'Datei', ext = (name.split('.').pop() || '').toLowerCase();\n      var done = function (rows) { if (addParts(rowsToParts(rows), name)) elPaste.hidden = true; };\n      var fail = function (t) { elPaste.hidden = false; pmsg(t || '\u201E' + name + '\u201C konnte nicht gelesen werden. Bitte als .xlsx oder .csv speichern \u2013 oder die Zellen in Excel kopieren und unten einf\u00FCgen.', true); };\n      pmsg('Lese \u201E' + name + '\u201C \u2026');\n      if (ext === 'xlsx' || ext === 'xlsm') f.arrayBuffer().then(xlsxRows).then(done).catch(function () { fail(); });\n      else if (ext === 'csv' || ext === 'txt' || ext === 'tsv') f.arrayBuffer().then(function (b) {\n        var t; try { t = new TextDecoder('utf-8', { fatal: true }).decode(b); } catch (err) { t = new TextDecoder('windows-1252').decode(b); }\n        done(textRows(t));\n      }).catch(function () { fail(); });\n      else if (ext === 'xls') fail('\u00C4ltere Excel-Dateien (.xls) bitte in Excel unter \u201ESpeichern unter\u201C als .xlsx speichern \u2013 oder die Zellen kopieren und unten einf\u00FCgen.');\n      else fail('Bitte eine Excel-Datei (.xlsx) oder CSV-Datei verwenden.');\n    }\n    if (elFile) elFile.addEventListener('change', function () { readFile(elFile.files[0]); elFile.value = ''; });\n    if (elDrop && elFile) {\n      elDrop.addEventListener('click', function () { elFile.click(); });\n      elDrop.addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); elFile.click(); } });\n    }\n    var dragN = 0;\n    function hasFiles(e) { return e.dataTransfer && Array.prototype.indexOf.call(e.dataTransfer.types || [], 'Files') > -1; }\n    root.addEventListener('dragenter', function (e) { if (!hasFiles(e)) return; e.preventDefault(); dragN++; root.classList.add('is-drag'); elPaste.hidden = false; });\n    root.addEventListener('dragover', function (e) { if (!hasFiles(e)) return; e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; });\n    root.addEventListener('dragleave', function (e) { if (!hasFiles(e)) return; if (--dragN <= 0) { dragN = 0; root.classList.remove('is-drag'); } });\n    root.addEventListener('drop', function (e) { if (!hasFiles(e)) return; e.preventDefault(); dragN = 0; root.classList.remove('is-drag'); readFile(e.dataTransfer.files[0]); });\n    var elTpl = $('[data-tpl]');\n    if (elTpl) elTpl.addEventListener('click', function (e) {\n      e.preventDefault();\n      var csv = '\\uFEFFBreite (mm);H\u00F6he (mm);Anzahl;Form (leer = Rechteck, Dreieck, Rund)\\r\\n1200;800;3;\\r\\n500;400;2;\\r\\n900;900;2;Dreieck\\r\\n600;;1;Rund\\r\\n';\n      var a = document.createElement('a');\n      a.href = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n      a.download = 'Massliste-Plottservice.csv';\n      document.body.appendChild(a); a.click();\n      setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000);\n    });\n\n    // Geometrie je Form: {w, h, area (m\u00B2), geo: Punkte im Rechteck w\u00D7h (mm, y nach unten) oder null, desc}\n    function regPoly(n, s) {\n      var R = s / (2 * Math.sin(Math.PI / n)), off = Math.PI / 2 + Math.PI / n, pts = [];\n      for (var k = 0; k < n; k++) { var t = off + 2 * Math.PI * k / n; pts.push([R * Math.cos(t), R * Math.sin(t)]); }\n      return norm(pts);\n    }\n    function norm(pts) {\n      var mx = Math.min.apply(null, pts.map(function (p) { return p[0]; })), my = Math.min.apply(null, pts.map(function (p) { return p[1]; }));\n      pts = pts.map(function (p) { return [p[0] - mx, p[1] - my]; });\n      return { pts: pts, w: Math.max.apply(null, pts.map(function (p) { return p[0]; })), h: Math.max.apply(null, pts.map(function (p) { return p[1]; })) };\n    }\n    function shapeGeo(tr) {\n      var s = tr.getAttribute('data-shape'), v = {}, inp = {};\n      tr.querySelectorAll('[data-d]').forEach(function (i) { var k = i.getAttribute('data-d'); inp[k] = i; v[k] = Math.round(Number(i.value)); i.classList.remove('is-err'); });\n      var any = Object.keys(inp).some(function (k) { return inp[k].value; });\n      if (!any) return { empty: true };\n      var need = function (keys) { var ok = true; keys.forEach(function (k) { if (!(v[k] >= 10)) { inp[k].classList.add('is-err'); ok = false; } }); return ok; };\n      var mm = function (x) { return Math.round(x); };\n      if (s === 'r') { if (!need(['w', 'h'])) return { bad: true }; return { w: v.w, h: v.h, area: v.w * v.h / 1e6, geo: null, desc: v.w + ' \u00D7 ' + v.h + ' mm' }; }\n      if (s === 't') {\n        if (!need(['w', 'h'])) return { bad: true };\n        var hy = tr.querySelector('[data-hyp]'); if (hy) hy.textContent = 'Schenkel 3 (lange Seite): ' + mm(Math.sqrt(v.w * v.w + v.h * v.h)) + ' mm';\n        return { w: v.w, h: v.h, area: v.w * v.h / 2e6, geo: null, desc: 'Dreieck rechtwinklig, Schenkel ' + v.w + ' / ' + v.h + ' / ' + mm(Math.sqrt(v.w * v.w + v.h * v.h)) + ' mm' };\n      }\n      if (s === 'd') {\n        if (!need(['a', 'b', 'c'])) return { bad: true };\n        var L = [v.a, v.b, v.c].sort(function (x, y) { return y - x; }), c = L[0], a = L[1], b = L[2];\n        if (a + b <= c) { ['a', 'b', 'c'].forEach(function (k) { inp[k].classList.add('is-err'); }); return { bad: true, msg: 'Zeile ' + tr.querySelector('.fdpr__nr').textContent + ': Aus diesen drei Seiten l\u00E4sst sich kein Dreieck bilden (die zwei k\u00FCrzeren Seiten zusammen m\u00FCssen l\u00E4nger als die l\u00E4ngste sein).' }; }\n        var x = (b * b + c * c - a * a) / (2 * c), y = Math.sqrt(Math.max(0, b * b - x * x));\n        var g = norm([[0, y], [c, y], [x, 0]]);\n        return { w: mm(g.w), h: mm(g.h), area: c * y / 2e6, geo: g.pts, desc: 'Dreieck, Seiten ' + v.a + ' / ' + v.b + ' / ' + v.c + ' mm' };\n      }\n      if (s === 'k') { if (!need(['dm'])) return { bad: true }; var d = v.dm, pts = []; for (var i = 0; i < 96; i++) { var t = 2 * Math.PI * i / 96; pts.push([d / 2 + d / 2 * Math.cos(t), d / 2 + d / 2 * Math.sin(t)]); } return { w: d, h: d, area: Math.PI * d * d / 4e6, geo: pts, desc: 'Kreis, Durchmesser ' + d + ' mm' }; }\n      // Vieleck\n      var n = nSides(tr), keys = []; for (var j = 1; j <= n; j++) keys.push('s' + j);\n      if (!need(keys)) return { bad: true };\n      var sides = keys.map(function (k) { return v[k]; }), regular = sides.every(function (x) { return x === sides[0]; });\n      var reg = tr.querySelector('[data-reg]'), name = SNAME[tr.getAttribute('data-shape')] || (n + '-Eck');\n      if (tr.getAttribute('data-shape') === 'vn') name = n + '-Eck';\n      if (regular && !(v.bw >= 10) && !(v.bh >= 10)) {\n        var rg = regPoly(n, sides[0]);\n        if (reg) reg.textContent = 'Gleichseitig: Au\u00DFenma\u00DF wird berechnet (' + mm(rg.w) + ' \u00D7 ' + mm(rg.h) + ' mm)';\n        return { w: mm(rg.w), h: mm(rg.h), area: n * sides[0] * sides[0] / (4 * Math.tan(Math.PI / n)) / 1e6, geo: rg.pts, desc: name + ' gleichseitig, Seite ' + sides[0] + ' mm' };\n      }\n      if (reg) reg.textContent = regular ? '' : 'Ungleiche Seiten: bitte das Au\u00DFenma\u00DF angeben. F\u00FCr die genaue Kontur eine Skizze unter \u201EProjekt / Bemerkung\u201C oder per E-Mail mitsenden.';\n      if (!need(['bw', 'bh'])) return { bad: true };\n      return { w: v.bw, h: v.bh, area: v.bw * v.bh / 1e6, geo: null, outline: true, desc: name + ', Seiten ' + sides.join(' / ') + ' mm, Au\u00DFenma\u00DF ' + v.bw + ' \u00D7 ' + v.bh + ' mm' };\n    }\n\n    function readPieces() {\n      var pieces = [], bad = false, msgs = [];\n      Array.prototype.forEach.call(elRows.children, function (tr, i) {\n        var iq = tr.querySelector('[data-q]'), q = Math.round(Number(iq.value));\n        iq.classList.remove('is-err');\n        var g = shapeGeo(tr);\n        if (g.empty) return;\n        if (!(q >= 1)) { iq.classList.add('is-err'); bad = true; return; }\n        if (g.bad) { bad = true; if (g.msg) msgs.push(g.msg); return; }\n        pieces.push({ w: g.w, h: g.h, qty: q, row: i + 1, shape: tr.getAttribute('data-shape'), area1: g.area, geo: g.geo, outline: g.outline, desc: g.desc });\n      });\n      return { pieces: pieces, bad: bad, msgs: msgs };\n    }\n\n    // ---------- Berechnung ----------\n    function calcWidth(f, vars, widthMm, pieces, rotate) {\n      var meterV = vars.filter(function (v) { return v.widthMm === widthMm && v.lengthMm === 1000; })[0] || null;\n      var rollVs = vars.filter(function (v) { return v.widthMm === widthMm && v.lengthMm > 1000; });\n      if (!meterV && !rollVs.length) return null;\n      var packed = C.pack(pieces, widthMm, gap, rotate);\n      if (packed.error) return { error: packed.error, tooWide: packed.pieces, widthMm: widthMm };\n      var best = C.bestMaterial(packed, gap, meterV, rollVs, Number(cfg.minMeters) || 1);\n      if (!best) return { error: 'noMaterial', widthMm: widthMm };\n      return { widthMm: widthMm, packed: packed, best: best, meterV: meterV };\n    }\n\n    function update() {\n      elMsg.textContent = ''; elMsg.className = 'fdpr__msg';\n      var f = state.film, vars = filmVars();\n      // Breiten-Auswahl\n      var widths = [];\n      vars.forEach(function (v) { if (widths.indexOf(v.widthMm) < 0) widths.push(v.widthMm); });\n      widths.sort(function (a, b) { return a - b; });\n      var rp = readPieces(), pieces = rp.pieces;\n      var rotate = !elNoRot.checked;\n      var packPieces = [];\n      pieces.forEach(function (p) {\n        if (p.shape === 't') {\n          var pairs = Math.floor(p.qty / 2), single = p.qty % 2;\n          if (pairs) packPieces.push({ w: p.w, h: p.h, qty: pairs, row: p.row, shape: 't2' });\n          if (single) packPieces.push({ w: p.w, h: p.h, qty: 1, row: p.row, shape: 't1' });\n        } else packPieces.push({ w: p.w, h: p.h, qty: p.qty, row: p.row, shape: p.shape === 'r' ? 'r' : 'g', geo: p.geo, outline: p.outline });\n      });\n      var results = widths.map(function (w) { var r = calcWidth(f, vars, w, packPieces, rotate); if (r) r.pp = packPieces; return r; }).filter(Boolean);\n      var valid = results.filter(function (r) { return !r.error; });\n      var cheapest = valid.slice().sort(function (a, b) { return a.best.cost - b.best.cost || a.widthMm - b.widthMm; })[0];\n\n      var prevSel = elWidth.value;\n      elWidth.innerHTML = (widths.length ? '<option value=\"auto\">Automatisch' + (cheapest && pieces.length ? ' \u2013 g\u00FCnstigste: ' + cm(cheapest.widthMm) : ' \u2013 g\u00FCnstigste Breite') + '</option>' : '<option value=\"\">\u2013</option>') +\n        widths.map(function (w) { return '<option value=\"' + w + '\">' + cm(w) + '</option>'; }).join('');\n      if (!state.widthAuto && widths.indexOf(state.width) >= 0) elWidth.value = String(state.width);\n      else { state.widthAuto = true; elWidth.value = widths.length ? 'auto' : ''; }\n\n      var res = state.widthAuto ? cheapest : results.filter(function (r) { return r.widthMm === state.width; })[0];\n      state.result = null;\n      elOrder.disabled = true;\n      elWHint.innerHTML = '';\n\n      if (!f) { elPlan.innerHTML = '<p class=\"fdpr__hint\">W\u00E4hle zuerst eine Folie.</p>'; elSum.innerHTML = '<p class=\"fdpr__hint\">Noch keine Folie gew\u00E4hlt.</p>'; return; }\n      if (!pieces.length) { elPlan.innerHTML = '<p class=\"fdpr__hint\">Gib Ma\u00DFe ein \u2013 hier erscheint die Anordnung auf der Rolle.</p>'; elSum.innerHTML = '<p class=\"fdpr__hint\">Noch keine Ma\u00DFe.</p>'; return; }\n      if (rp.bad) { elSum.innerHTML = '<p class=\"fdpr__err\">' + esc(rp.msgs.length ? rp.msgs.join(' ') : 'Bitte alle Ma\u00DFe pr\u00FCfen (mindestens 10 mm, Anzahl \u2265 1).') + '</p>'; }\n\n      if (results.length > 1 && valid.length) {\n        elWHint.innerHTML = '<table class=\"fdpr__widths\">' + results.map(function (r) {\n          if (r.error) return '<tr><td>' + cm(r.widthMm) + (r.error === 'noMaterial' ? ' \u00B7 nicht ausreichend verf\u00FCgbar' : ' \u00B7 zu schmal f\u00FCr deine Teile') + '</td><td>\u2013</td></tr>';\n          return '<tr class=\"' + (r === cheapest ? 'is-best' : '') + '\"><td>' + cm(r.widthMm) + ' \u00B7 ' + matText(r.best) + '</td><td>' + (guest ? '' : money(r.best.cost)) + '</td></tr>';\n        }).join('') + '</table>';\n      }\n\n      if (!res || res.error) {\n        var maxW = widths.length ? widths[widths.length - 1] : 0;\n        var stock = res ? res.error === 'noMaterial' : results.some(function (r) { return r.error === 'noMaterial'; });\n        var msg = stock ? 'Diese Folie ist in ' + (res ? cm(res.widthMm) : 'der ben\u00F6tigten Breite') + ' f\u00FCr diese Menge aktuell nicht ausreichend verf\u00FCgbar. Bitte andere Breite oder Folie w\u00E4hlen oder bei uns anfragen.' : 'Mindestens ein Teil ist zu breit f\u00FCr ' + (res ? cm(res.widthMm) : 'diese Folie') + ' (nutzbar: Rollenbreite \u2212 2 \u00D7 ' + gap + ' mm Rand).';\n        if (!stock && res && res.tooWide) msg += ' Betroffen: Zeile ' + res.tooWide.map(function (i) { return packPieces[i].row; }).join(', ') + '.';\n        if (!stock && rotate === false) msg += ' Tipp: Drehen erlauben oder breitere Rolle w\u00E4hlen.';\n        if (!stock && !valid.length) msg += ' Gr\u00F6\u00DFte Rollenbreite dieser Folie: ' + cm(maxW) + ' \u2013 bitte Teil teilen oder anfragen.';\n        elPlan.innerHTML = '<p class=\"fdpr__err\">' + esc(msg) + '</p>';\n        elSum.innerHTML = '<p class=\"fdpr__err\">Keine Berechnung m\u00F6glich.</p>';\n        return;\n      }\n\n      // Plott-Service\n      var area = 0, count = 0;\n      pieces.forEach(function (p) { area += p.area1 * p.qty; count += p.qty; });\n      var unit = Number(cfg.plot.unit) || 0.1;\n      var plotQty = Math.max(1, Math.ceil(area / unit - 1e-9));\n      var plotCost = plotQty * cfg.plot.price;\n      var feeCost = cfg.fee.price;\n      var b = res.best;\n      var total = b.cost + plotCost + feeCost;\n      state.result = { res: res, pieces: pieces, area: area, plotQty: plotQty, total: total };\n\n      // Zusammenfassung\n      var lines = [];\n      if (b.rolls) lines.push(['Folie: ' + b.rolls + ' \u00D7 Rolle ' + num(b.roll.lengthMm / 1000, 2).replace(/,?0+$/, '') + ' m', f.title + ' \u00B7 ' + cm(res.widthMm), b.rolls * b.roll.price]);\n      if (b.meters) lines.push(['Folie: ' + b.meters + ' m Meterware', f.title + ' \u00B7 ' + cm(res.widthMm) + (b.meters === (Number(cfg.minMeters) || 1) && b.meters > 1 ? ' \u00B7 Mindestmenge ' + b.meters + ' m' : ''), b.meters * res.meterV.price]);\n      lines.push([guest ? 'Plott-Service (nach m\u00B2 Plotfl\u00E4che)' : 'Plott-Service ' + num(cfg.plot.rate, 2) + ' \u20AC/m\u00B2', num(plotQty * unit, 2) + ' m\u00B2 (' + count + ' Teile, ' + num(area, 3) + ' m\u00B2 gerundet)', plotCost]);\n      lines.push(['Plotter-Einrichtungspauschale', 'einmalig je Plotauftrag', feeCost]);\n      var used = res.packed.length / 1000;\n      elSum.innerHTML = (rp.bad ? '<p class=\"fdpr__err\">' + esc(rp.msgs.length ? rp.msgs.join(' ') : 'Bitte die rot markierten Ma\u00DFe pr\u00FCfen (mindestens 10 mm, Anzahl \u2265 1) \u2013 diese Zeilen sind noch nicht berechnet.') + '</p>' : '') +\n        '<div class=\"fdpr__facts\"><div><b>' + count + '</b>Teile</div><div><b>' + num(area, 2) + ' m\u00B2</b>Plotfl\u00E4che</div>' +\n        '<div><b>' + num(used, 2) + ' m</b>Laufmeter ben\u00F6tigt</div><div><b>' + cm(res.widthMm) + '</b>Rollenbreite</div></div>' +\n        '<ul class=\"fdpr__lines\">' + lines.map(function (l) { return '<li><span>' + esc(l[0]) + '<small>' + esc(l[1]) + '</small></span><span>' + (guest ? '' : money(l[2])) + '</span></li>'; }).join('') + '</ul>' +\n        (guest ? '<div class=\"fdpr__total\"><span>Preis</span><span>nach Anmeldung</span></div>' : '<div class=\"fdpr__total\"><span>Summe</span><span>' + money(total) + '</span></div>');\n      elOrder.disabled = rp.bad;\n      drawPlan(res, f);\n    }\n\n    function matText(b) {\n      var t = [];\n      if (b.rolls) t.push(b.rolls + ' Rolle' + (b.rolls > 1 ? 'n' : ''));\n      if (b.meters) t.push(b.meters + ' m');\n      return t.join(' + ');\n    }\n\n    // ---------- Schnittplan (SVG) ----------\n    var COLORS = ['#d71920', '#2b6cb0', '#2f855a', '#b7791f', '#6b46c1', '#c05621', '#2c7a7b', '#97266d'];\n    function drawPlan(res, f) {\n      var W = res.widthMm, segs = res.best.segments;\n      var totalLen = 0; segs.forEach(function (s) { totalLen += s.cap; });\n      var boxW = Math.max(elPlan.clientWidth - 2, 260);\n      var scale = Math.max(Math.min(150 / W, boxW / totalLen), 70 / W); // passt in die Box, mind. 70 px hoch\n      var H = W * scale;\n      var svgW = Math.max(totalLen * scale, 10);\n      var out = [];\n      var x0 = 0;\n      segs.forEach(function (s, si) {\n        var sw = s.cap * scale;\n        out.push('<rect x=\"' + x0 + '\" y=\"0\" width=\"' + sw + '\" height=\"' + H + '\" fill=\"' + (s.type === 'roll' ? '#eef2f7' : '#f6f6f6') + '\" stroke=\"#bbb\" stroke-dasharray=\"' + (s.type === 'roll' ? '0' : '4 3') + '\"/>');\n        out.push('<text x=\"' + (x0 + 4) + '\" y=\"' + (H + 14) + '\" font-size=\"11\" fill=\"#6b6b6b\">' + (s.type === 'roll' ? 'Rolle ' + num(s.cap / 1000, 2) + ' m' : 'Meterware ' + (s.cap / 1000) + ' m') + '</text>');\n        var y = x0 + gap * scale; // Laufrichtung = x im Bild\n        s.shelves.forEach(function (sh) {\n          sh.items.forEach(function (it) {\n            var px = y, py = (gap + it.x) * scale, pw = it.b * scale, ph = it.a * scale;\n            var pp = (res.pp && res.pp[it.it.idx]) || { row: it.it.idx + 1, shape: 'r' };\n            var col = COLORS[(pp.row - 1) % COLORS.length];\n            var tt = '<title>Zeile ' + pp.row + ': ' + it.it.w + ' \u00D7 ' + it.it.h + ' mm' + (pp.shape === 't2' ? ' (2 Dreiecke)' : pp.shape === 't1' ? ' (Dreieck)' : pp.outline ? ' (Vieleck, Au\u00DFenma\u00DF)' : pp.shape === 'g' ? ' (Form)' : '') + (it.rot ? ' (gedreht)' : '') + '</title>';\n            if (pp.shape === 'r' || (pp.shape === 'g' && !pp.geo)) {\n              out.push('<rect x=\"' + px + '\" y=\"' + py + '\" width=\"' + pw + '\" height=\"' + ph + '\" fill=\"' + col + '\" fill-opacity=\".18\" stroke=\"' + col + '\" stroke-width=\"1\"' + (pp.outline ? ' stroke-dasharray=\"6 3\"' : '') + '>' + tt + '</rect>');\n            } else {\n              out.push('<rect x=\"' + px + '\" y=\"' + py + '\" width=\"' + pw + '\" height=\"' + ph + '\" fill=\"none\" stroke=\"' + col + '\" stroke-opacity=\".35\" stroke-dasharray=\"3 3\"/>');\n              piecePolys(pp, it, px, py, scale).forEach(function (pts) {\n                out.push('<polygon points=\"' + pts.map(function (q) { return q[0] + ',' + q[1]; }).join(' ') + '\" fill=\"' + col + '\" fill-opacity=\".18\" stroke=\"' + col + '\" stroke-width=\"1\">' + tt + '</polygon>');\n              });\n            }\n            if (pw > 34 && ph > 14) out.push('<text x=\"' + (px + pw / 2) + '\" y=\"' + (py + ph / 2 + 4) + '\" font-size=\"11\" text-anchor=\"middle\" fill=\"' + col + '\">' + pp.row + '</text>');\n          });\n          y += (sh.h + gap) * scale;\n        });\n        x0 += sw;\n      });\n      elPlan.innerHTML = '<svg width=\"' + svgW + '\" height=\"' + (H + 20) + '\" viewBox=\"0 0 ' + svgW + ' ' + (H + 20) + '\" role=\"img\" aria-label=\"Schnittplan\">' + out.join('') + '</svg>' +\n        '<div class=\"fdpr__legend\"><span>Rolle von links nach rechts abgewickelt \u00B7 H\u00F6he = Rollenbreite ' + cm(W) + '</span><span>Zahl = Zeile der Ma\u00DFliste</span>' +\n        (elNoRot.checked ? '<span>Teile nicht gedreht</span>' : '<span>Teile werden bei Bedarf gedreht</span>') +\n        (res.pp && res.pp.some(function (p) { return p.shape === 't2'; }) ? '<span>Je zwei gleiche rechtwinklige Dreiecke teilen sich ein Rechteck</span>' : '') +\n        (res.pp && res.pp.some(function (p) { return p.outline; }) ? '<span>Gestrichelt: Vieleck mit ungleichen Seiten, nur Au\u00DFenma\u00DF</span>' : '') +\n        '<span class=\"fdpr__dl\">Schnittdatei: <button type=\"button\" class=\"fdpr__link\" data-dl=\"dxf\">DXF</button> \u00B7 <button type=\"button\" class=\"fdpr__link\" data-dl=\"svg\">SVG</button></span></div>';\n    }\n\n    // Form ins platzierte Rechteck legen (X = Laufrichtung, Y = quer). Drehung statt Spiegelung.\n    function piecePolys(pp, it, px, py, sc) {\n      if (pp.shape !== 'g') return triPolys(pp.shape, px, py, it.b * sc, it.a * sc);\n      var w = it.it.w, h = it.it.h;\n      return [pp.geo.map(function (q) { var u = q[0], v = q[1]; return it.rot ? [px + u * sc, py + v * sc] : [px + (h - v) * sc, py + u * sc]; })];\n    }\n    // Dreiecke im Rechteck (Bildkoordinaten)\n    function triPolys(shape, x, y, w, h) {\n      if (shape === 't2') return [[[x, y], [x + w, y], [x, y + h]], [[x + w, y], [x + w, y + h], [x, y + h]]];\n      if (shape === 'd') return [[[x, y + h], [x + w / 2, y], [x + w, y + h]]];\n      return [[[x, y], [x, y + h], [x + w, y + h]]];\n    }\n\n    // ---------- Schnittdatei (mm, f\u00FCr Plotter) ----------\n    function cutGeometry(res) {\n      var W = res.widthMm, segs = res.best.segments, mat = [], cuts = [], outl = [], x0 = 0;\n      segs.forEach(function (s) {\n        mat.push([[x0, 0], [x0 + s.cap, 0], [x0 + s.cap, W], [x0, W]]);\n        var y = x0 + gap;\n        s.shelves.forEach(function (sh) {\n          sh.items.forEach(function (it) {\n            var pp = (res.pp && res.pp[it.it.idx]) || { shape: 'r' };\n            var px = y, py = gap + it.x, pw = it.b, ph = it.a;\n            if (pp.shape === 'r' || (pp.shape === 'g' && !pp.geo)) (pp.outline ? outl : cuts).push([[px, py], [px + pw, py], [px + pw, py + ph], [px, py + ph]]);\n            else piecePolys(pp, it, px, py, 1).forEach(function (t) { cuts.push(t); });\n          });\n          y += sh.h + gap;\n        });\n        x0 += s.cap;\n      });\n      return { W: W, L: x0, mat: mat, cuts: cuts, outl: outl };\n    }\n    function download(kind) {\n      var r = state.result; if (!r) return;\n      var g = cutGeometry(r.res), f = state.film, name = 'Schnittplan_' + (f ? f.handle : 'folie') + '_' + (g.W / 10) + 'cm', data, type;\n      var r2 = function (v) { return Math.round(v * 100) / 100; };\n      if (kind === 'svg') {\n        var poly = function (p, st) { return '<polygon points=\"' + p.map(function (q) { return r2(q[0]) + ',' + r2(q[1]); }).join(' ') + '\" fill=\"none\" ' + st + '/>'; };\n        data = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' + r2(g.L) + 'mm\" height=\"' + r2(g.W) + 'mm\" viewBox=\"0 0 ' + r2(g.L) + ' ' + r2(g.W) + '\">\\n' +\n          '<g id=\"Material\" stroke=\"#999999\" stroke-width=\"0.5\">' + g.mat.map(function (p) { return poly(p, ''); }).join('') + '</g>\\n' +\n          '<g id=\"Schnitt\" stroke=\"#ff0000\" stroke-width=\"0.3\">' + g.cuts.map(function (p) { return poly(p, ''); }).join('\\n') + '</g>\\n' +\n          (g.outl.length ? '<g id=\"Aussenmass_Kontur_nach_Skizze\" stroke=\"#0066ff\" stroke-width=\"0.3\" stroke-dasharray=\"4 2\">' + g.outl.map(function (p) { return poly(p, ''); }).join('\\n') + '</g>\\n' : '') + '</svg>\\n';\n        type = 'image/svg+xml'; name += '.svg';\n      } else {\n        var L = ['0', 'SECTION', '2', 'HEADER', '9', '$INSUNITS', '70', '4', '0', 'ENDSEC', '0', 'SECTION', '2', 'TABLES', '0', 'TABLE', '2', 'LAYER', '70', '3',\n          '0', 'LAYER', '2', 'SCHNITT', '70', '0', '62', '1', '6', 'CONTINUOUS', '0', 'LAYER', '2', 'MATERIAL', '70', '0', '62', '8', '6', 'CONTINUOUS', '0', 'LAYER', '2', 'AUSSENMASS', '70', '0', '62', '5', '6', 'CONTINUOUS', '0', 'ENDTAB', '0', 'ENDSEC',\n          '0', 'SECTION', '2', 'ENTITIES'];\n        var line = function (layer, a, b) { L.push('0', 'LINE', '8', layer, '10', r2(a[0]), '20', r2(g.W - a[1]), '30', '0', '11', r2(b[0]), '21', r2(g.W - b[1]), '31', '0'); };\n        var closed = function (layer, p) { p.forEach(function (q, i) { line(layer, q, p[(i + 1) % p.length]); }); };\n        g.mat.forEach(function (p) { closed('MATERIAL', p); });\n        g.cuts.forEach(function (p) { closed('SCHNITT', p); });\n        g.outl.forEach(function (p) { closed('AUSSENMASS', p); });\n        L.push('0', 'ENDSEC', '0', 'EOF');\n        data = L.join('\\r\\n') + '\\r\\n'; type = 'application/dxf'; name += '.dxf';\n      }\n      var a = document.createElement('a');\n      a.href = URL.createObjectURL(new Blob([data], { type: type }));\n      a.download = name; document.body.appendChild(a); a.click();\n      setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000);\n    }\n\n    elPlan.addEventListener('click', function (e) { var b = e.target.closest && e.target.closest('[data-dl]'); if (b) download(b.getAttribute('data-dl')); });\n\n    // ---------- Bestellen ----------\n    elOrder.addEventListener('click', function () {\n      if (guest) return; // Link zum Login\n      var r = state.result; if (!r) return;\n      var f = state.film, res = r.res, b = res.best;\n      var id = 'P-' + Date.now().toString(36).toUpperCase().slice(-6);\n      var teile = r.pieces.map(function (p) { return p.qty + ' \u00D7 ' + p.desc; }).join('; ');\n      var extra = f.extraNames.map(function (n) { return state.extra[n]; }).filter(Boolean).join(' ');\n      var common = { 'Plot-Auftrag': id };\n      var plotProps = {\n        'Plot-Auftrag': id,\n        'Folie': f.title + (extra ? ' \u2013 ' + extra : '') + ', ' + cm(res.widthMm),\n        'Teile': teile,\n        'Plotfl\u00E4che': num(r.area, 3) + ' m\u00B2',\n        'Drehen erlaubt': elNoRot.checked ? 'nein' : 'ja'\n      };\n      if (elNote.value.trim()) plotProps['Projekt / Bemerkung'] = elNote.value.trim();\n      var items = [];\n      if (b.rolls) items.push({ id: b.roll.id, quantity: b.rolls, properties: common });\n      if (b.meters) items.push({ id: res.meterV.id, quantity: b.meters, properties: common });\n      items.push({ id: cfg.plot.id, quantity: r.plotQty, properties: plotProps });\n      items.push({ id: cfg.fee.id, quantity: 1, properties: common });\n      elOrder.disabled = true; elOrder.textContent = 'Wird hinzugef\u00FCgt \u2026';\n      fetch((window.Shopify && Shopify.routes ? Shopify.routes.root : '/') + 'cart/add.js', {\n        method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n        body: JSON.stringify({ items: items })\n      }).then(function (x) { return x.json().then(function (j) { return { ok: x.ok, j: j }; }); })\n        .then(function (o) {\n          elOrder.textContent = 'In den Warenkorb';\n          if (!o.ok) throw new Error(o.j && (o.j.description || o.j.message) || 'Fehler');\n          elMsg.className = 'fdpr__msg';\n          elMsg.innerHTML = '\u2713 Plotauftrag ' + id + ' liegt im Warenkorb. <a href=\"/cart\">Zum Warenkorb</a>';\n          elOrder.disabled = false;\n          document.dispatchEvent(new CustomEvent('cart:refresh'));\n          fetch('/cart.js').then(function (x) { return x.json(); }).then(function (c) {\n            document.querySelectorAll('.cart-count-bubble span, [data-cart-count], .cart-count').forEach(function (el) { if (el.children.length === 0) el.textContent = c.item_count; });\n          }).catch(function () {});\n        })\n        .catch(function (e) {\n          elOrder.textContent = 'In den Warenkorb'; elOrder.disabled = false;\n          elMsg.className = 'fdpr__msg is-err';\n          elMsg.textContent = 'Konnte nicht in den Warenkorb legen: ' + e.message;\n        });\n    });\n\n    // ---------- Start ----------\n    addRow();\n    var pre = new URLSearchParams(location.search).get('folie');\n    if (pre && films.some(function (f) { return f.handle === pre; })) { elFilm.value = pre; setFilm(pre); }\n    else update();\n    window.addEventListener('resize', function () { if (state.result) drawPlan(state.result.res, state.film); });\n  }\n})();\n"],
  "mappings": "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",
  "names": ["g", "i", "keys", "x", "y", "b", "a"]
}
