{
  "version": 3,
  "sources": ["/cdn/shop/t/10/assets/doppelstab-konfigurator.js?ds=template--22329555550456__main"],
  "sourcesContent": ["/**\n * Doppelstabmattenzaun Konfigurator \u2014 single configState, Zaun-Idee style UX.\n * Reads boot JSON from #doppelstab-boot script[type=\"application/json\"].\n */\n(function () {\n  'use strict';\n\n  var PANEL_M = 2.5;\n  /** Montage: 100 \u20AC pro Panel (ceil(zaunlaenge / 2.5)) \u2014 Shopify-Variante mit gleichem Preis n\u00F6tig */\n  var MONTAGE_CENTS_PER_PANEL = 10000;\n  var DEFAULT_MONTAGE_CART_SKUS = ['doppelstab-montage-pro-panel', 'montage-pro-panel'];\n  var SICHTSCHUTZ_FACTOR = {\n    800: 4, 1000: 5, 1200: 6, 1400: 7, 1600: 8, 1800: 9, 2000: 10, 2200: 11, 2400: 12,\n  };\n\n  /** Pfosten-SKUs wie Zaun-Konfigurator (konfigurator-direk) */\n  var POST_SKUS_DS = {\n    800: 'post-h130',\n    1000: 'post-h160',\n    1200: 'post-h180',\n    1400: 'post-h200',\n    1600: 'post-h220',\n    1800: 'post-h240',\n    2000: 'post-h240',\n    2200: 'post-h240',\n    2400: 'post-h240',\n  };\n\n  function parseBoot() {\n    var el = document.getElementById('doppelstab-boot');\n    if (!el || !el.textContent) return {};\n    try {\n      return JSON.parse(el.textContent);\n    } catch (e) {\n      console.warn('doppelstab-konfigurator: invalid boot JSON', e);\n      return {};\n    }\n  }\n\n  function isLocalThemeDevHost() {\n    var h = window.location.hostname;\n    return h === '127.0.0.1' || h === 'localhost';\n  }\n\n  function cartUrlForRedirect(boot) {\n    if (!boot) return '/cart';\n    if (isLocalThemeDevHost() && boot.shopRoot) {\n      var url = String(boot.shopRoot).replace(/\\/$/, '') + '/cart';\n      if (boot.themeId) {\n        url += (url.indexOf('?') >= 0 ? '&' : '?') + 'preview_theme_id=' + boot.themeId;\n      }\n      return url;\n    }\n    return boot.cartUrl || '/cart';\n  }\n\n  function cartApiHeaders() {\n    return {\n      'Content-Type': 'application/json',\n      Accept: 'application/json',\n      'X-Requested-With': 'XMLHttpRequest',\n    };\n  }\n\n  function parseJsonCartResponse(r, text) {\n    var body = (text || '').trim();\n    if (!body) {\n      if (!r.ok) {\n        if ((r.status === 502 || r.status === 503) && isLocalThemeDevHost()) {\n          throw new Error(\n            'Warenkorb: Theme-Dev-Proxy (HTTP ' +\n              r.status +\n              '). Cookies f\u00FCr 127.0.0.1 l\u00F6schen, CLI neu starten oder die Preview-URL des Shops nutzen.'\n          );\n        }\n        throw new Error('Warenkorb: leere Antwort (HTTP ' + r.status + ').');\n      }\n      return {};\n    }\n    if (body.charAt(0) === '<') {\n      throw new Error('Der Server lieferte HTML statt JSON (HTTP ' + r.status + ').');\n    }\n    var j;\n    try {\n      j = JSON.parse(body);\n    } catch (e) {\n      throw new Error('Warenkorb: ung\u00FCltige Antwort (HTTP ' + r.status + ').');\n    }\n    if (!r.ok) {\n      throw new Error((j && j.description) || (j && j.message) || ('HTTP ' + r.status));\n    }\n    return j;\n  }\n\n  var CART_ADD_MAX_SUM_QUANTITY = 45;\n  var dsBoot = null;\n\n  function buildExpectedVariantQtyMapDs(lineItems) {\n    var map = {};\n    lineItems.forEach(function (it) {\n      var k = String(it.id);\n      map[k] = (map[k] || 0) + (parseInt(it.quantity, 10) || 0);\n    });\n    return map;\n  }\n\n  function packCartAddsByTotalQtyDs(lineItems, maxSumQty) {\n    var maxSum = maxSumQty || CART_ADD_MAX_SUM_QUANTITY;\n    var batches = [];\n    var cur = [];\n    var sum = 0;\n    function flush() {\n      if (cur.length) {\n        batches.push(cur);\n        cur = [];\n        sum = 0;\n      }\n    }\n    lineItems.forEach(function (it) {\n      var rem = parseInt(it.quantity, 10) || 0;\n      if (rem < 1) return;\n      var props = it.properties || {};\n      while (rem > 0) {\n        if (sum >= maxSum) flush();\n        var space = maxSum - sum;\n        var take = Math.min(rem, space);\n        cur.push({ id: it.id, quantity: take, properties: props });\n        sum += take;\n        rem -= take;\n      }\n    });\n    flush();\n    return batches.length ? batches : [[]];\n  }\n\n  function cartAddViaStoreForm(batch) {\n    var boot = dsBoot;\n    if (!boot) throw new Error('Warenkorb: Konfigurator nicht initialisiert.');\n    var base = (boot.shopRoot || '').replace(/\\/$/, '');\n    if (!base) throw new Error('Warenkorb: Shop-URL fehlt (shopRoot).');\n    var form = document.createElement('form');\n    form.method = 'POST';\n    form.action = base + '/cart/add';\n    form.style.display = 'none';\n    var i;\n    for (i = 0; i < batch.length; i++) {\n      var it = batch[i];\n      var idInp = document.createElement('input');\n      idInp.type = 'hidden';\n      idInp.name = 'items[' + i + '][id]';\n      idInp.value = String(it.id);\n      form.appendChild(idInp);\n      var qInp = document.createElement('input');\n      qInp.type = 'hidden';\n      qInp.name = 'items[' + i + '][quantity]';\n      qInp.value = String(it.quantity);\n      form.appendChild(qInp);\n      if (it.properties) {\n        Object.keys(it.properties).forEach(function (k) {\n          var pInp = document.createElement('input');\n          pInp.type = 'hidden';\n          pInp.name = 'items[' + i + '][properties][' + k + ']';\n          pInp.value = String(it.properties[k]);\n          form.appendChild(pInp);\n        });\n      }\n    }\n    var returnTo = cartUrlForRedirect(boot);\n    var rtInp = document.createElement('input');\n    rtInp.type = 'hidden';\n    rtInp.name = 'return_to';\n    rtInp.value = returnTo;\n    form.appendChild(rtInp);\n    document.body.appendChild(form);\n    form.submit();\n    return { formRedirect: true };\n  }\n\n  function postCartAddJs(batch) {\n    var boot = dsBoot;\n    if (isLocalThemeDevHost() && boot && boot.shopRoot) {\n      return Promise.resolve(cartAddViaStoreForm(batch));\n    }\n    return fetch('/cart/add.js', {\n      method: 'POST',\n      credentials: 'same-origin',\n      headers: cartApiHeaders(),\n      body: JSON.stringify({ items: batch }),\n    }).then(function (r) {\n      return r.text().then(function (text) {\n        if (\n          !r.ok &&\n          (r.status === 502 || r.status === 503 || r.status === 0) &&\n          isLocalThemeDevHost() &&\n          boot.shopRoot\n        ) {\n          return cartAddViaStoreForm(batch);\n        }\n        return parseJsonCartResponse(r, text);\n      });\n    });\n  }\n\n  function cartAddBatchesSequentialDs(batches) {\n    return batches.reduce(function (chain, batch) {\n      if (!batch || !batch.length) return chain;\n      return chain.then(function (prev) {\n        if (prev && prev.formRedirect) return prev;\n        return postCartAddJs(batch).catch(function (err) {\n          if (isLocalThemeDevHost() && dsBoot && dsBoot.shopRoot) {\n            return cartAddViaStoreForm(batch);\n          }\n          throw err;\n        });\n      });\n    }, Promise.resolve());\n  }\n\n  function verifyCartVariantTotalsDs(expectedMap) {\n    return fetch('/cart.js', { credentials: 'same-origin', headers: cartApiHeaders() })\n      .then(function (r) {\n        return r.json();\n      })\n      .then(function (cart) {\n        var short = [];\n        Object.keys(expectedMap).forEach(function (vid) {\n          var want = expectedMap[vid];\n          var got = 0;\n          (cart.items || []).forEach(function (line) {\n            if (String(line.variant_id) === vid) got += line.quantity;\n          });\n          if (got < want) short.push({ vid: vid, want: want, got: got });\n        });\n        return short;\n      });\n  }\n\n  function normalizeHeight(h) {\n    var n = parseInt(String(h).replace(/^0+/, ''), 10);\n    return isNaN(n) ? 1600 : n;\n  }\n\n  function wireSlug(wire) {\n    return String(wire).replace(/\\//g, '-');\n  }\n\n  function postSlug(post) {\n    return String(post)\n      .replace(/^Zaunpfosten mit\\s+/i, '')\n      .trim();\n  }\n\n  function mountSlug(mount) {\n    return String(mount).trim();\n  }\n\n  function defaultState(boot) {\n    var d = (boot && boot.defaults) || {};\n    if (typeof d === 'string') {\n      try {\n        d = JSON.parse(d);\n      } catch (e) {\n        d = {};\n      }\n    }\n    if (typeof d !== 'object' || d === null) d = {};\n    return {\n      drahtstaerke: d.drahtstaerke || '8/6/8',\n      hoehe: normalizeHeight(d.hoehe || 1600),\n      beschichtung: d.beschichtung || 'Anthrazit',\n      zaunlaenge: Math.max(1, Math.min(750, parseInt(d.zaunlaenge, 10) || 1)),\n      pfostenausfuehrung: d.pfostenausfuehrung || 'Zaunpfosten mit Klemme',\n      montageart: d.montageart || 'zum Aufd\u00FCbeln',\n      anzahlZaunpfosten: Math.max(1, parseInt(d.anzahlZaunpfosten, 10) || 1),\n      anzahlEckpfosten: Math.max(0, parseInt(d.anzahlEckpfosten, 10) || 0),\n      pfostenkappen: d.pfostenkappen || 'Aluminium',\n      mitMontage: d.mitMontage === true || d.mitMontage === 'Ja',\n      inklusiveBeton: d.inklusiveBeton === true || d.inklusiveBeton === 'Ja',\n    };\n  }\n\n  function panelCount(state) {\n    return Math.ceil(state.zaunlaenge / PANEL_M);\n  }\n\n  function montageSurchargeCents(state) {\n    if (!state.mitMontage) return 0;\n    return panelCount(state) * MONTAGE_CENTS_PER_PANEL;\n  }\n\n  function totalPosts(state) {\n    return Math.max(0, state.anzahlZaunpfosten + state.anzahlEckpfosten);\n  }\n\n  /** Suggested line posts for straight fence: panels + 1 - corners (Zaun-Idee style hint) */\n  function suggestedLinePosts(state) {\n    var p = panelCount(state);\n    return Math.max(0, p + 1 - state.anzahlEckpfosten);\n  }\n\n  function concreteEnabled(state) {\n    return state.mitMontage === true && state.montageart === 'zum Einbetonieren';\n  }\n\n  function configKey(state) {\n    return [\n      state.drahtstaerke,\n      normalizeHeight(state.hoehe),\n      state.beschichtung,\n      state.pfostenausfuehrung,\n      state.montageart,\n      state.pfostenkappen,\n      state.mitMontage ? 'Ja' : 'Nein',\n      concreteEnabled(state) && state.inklusiveBeton ? 'Ja' : 'Nein',\n    ].join('|');\n  }\n\n  function resolveQty(q, state) {\n    if (typeof q === 'number' && !isNaN(q)) return q;\n    var key = String(q);\n    if (key === 'panelCount') return panelCount(state);\n    if (key === 'totalPosts') return totalPosts(state);\n    if (key === 'anzahlZaunpfosten') return state.anzahlZaunpfosten;\n    if (key === 'anzahlEckpfosten') return state.anzahlEckpfosten;\n    var n = parseInt(key, 10);\n    return isNaN(n) ? 0 : n;\n  }\n\n  function lookupLines(lookup, state) {\n    if (!lookup || typeof lookup !== 'object') return null;\n    var key = configKey(state);\n    if (lookup[key] && lookup[key].lines) return lookup[key].lines;\n    if (lookup['__default__'] && lookup['__default__'].lines) return lookup['__default__'].lines;\n    return null;\n  }\n\n  function panelSkuFromState(state) {\n    return 'panel-' + (normalizeHeight(state.hoehe) + 230);\n  }\n\n  function postSkuFromState(state) {\n    var h = normalizeHeight(state.hoehe);\n    return POST_SKUS_DS[h] || 'post-h240';\n  }\n\n  function buildImageUrl(base, pattern, state) {\n    if (!base || !pattern) return '';\n    var b = base.replace(/\\/$/, '');\n    var p = pattern\n      .replace(/\\{Beschichtung\\}/g, state.beschichtung)\n      .replace(/\\{Pfostenausf\u00FChrung\\}/g, state.pfostenausfuehrung)\n      .replace(/\\{Montageart\\}/g, state.montageart)\n      .replace(/\\{Drahtst\u00E4rke\\}/g, wireSlug(state.drahtstaerke))\n      .replace(/\\{St\u00E4rke\\}/g, wireSlug(state.drahtstaerke));\n    var rel = p.indexOf('/') === 0 ? p.slice(1) : p;\n    var segments = rel.split('/').filter(function (s) {\n      return s.length > 0;\n    });\n    if (!segments.length) return '';\n    var encoded = segments.map(function (s) {\n      return encodeURIComponent(s);\n    }).join('/');\n    return b + '/' + encoded;\n  }\n\n  function init() {\n    var boot = parseBoot();\n    dsBoot = boot;\n    var sectionWrap = document.querySelector('.section-doppelstab-konfigurator');\n    var root =\n      (sectionWrap && sectionWrap.querySelector('[data-doppelstab-konfigurator]')) ||\n      (boot.rootElementId && document.getElementById(String(boot.rootElementId))) ||\n      document.querySelector('[data-doppelstab-konfigurator]');\n    if (!root) {\n      console.warn('doppelstab-konfigurator: root element not found');\n      return;\n    }\n    if (!root.querySelector('[data-ds-breakdown-panels]')) {\n      console.warn('doppelstab-konfigurator: breakdown nodes missing under root');\n    }\n\n    var pricingScope = root;\n\n    var P = typeof window !== 'undefined' && window.ZaunIdealKonfigPricing;\n    if (!P) {\n      console.warn(\n        'doppelstab-konfigurator: ZaunIdealKonfigPricing fehlt \u2014 konfigurator-pricing-shared.js vor doppelstab-konfigurator.js einbinden.'\n      );\n      return;\n    }\n    function money(cents, format) {\n      return P.money(cents, format);\n    }\n    function fetchVariant(id) {\n      return P.fetchVariantDetailById(id);\n    }\n    function fetchVariantIdBySku(handle, sku) {\n      return P.fetchVariantIdBySku(handle, sku);\n    }\n\n    var lookup = boot.lookup || {};\n    if (typeof lookup === 'string') {\n      try {\n        lookup = JSON.parse(lookup);\n      } catch (e) {\n        lookup = {};\n      }\n    }\n    var videosByPost = boot.videosByPost || {};\n    if (typeof videosByPost === 'string') {\n      try {\n        videosByPost = JSON.parse(videosByPost);\n      } catch (e) {\n        videosByPost = {};\n      }\n    }\n    boot.videosByPost = videosByPost;\n    var themeDrawingGallery = boot.themeDrawingGallery;\n    if (!Array.isArray(themeDrawingGallery)) themeDrawingGallery = [];\n    var themeProductPhotos = boot.themeProductPhotos;\n    if (!Array.isArray(themeProductPhotos)) themeProductPhotos = [];\n    var mediaBase = (boot.mediaBase || '').replace(/\\/$/, '');\n    var usePackaged = boot.useThemePackagedMedia !== false;\n    var moneyFormat = boot.moneyFormat || '{{amount}} \u20AC';\n    var showDiscountBreakdown = boot.showDiscountBreakdown !== false;\n\n    var state = defaultState(boot);\n    if (boot.useSkuCartWhenNoLookup == null) boot.useSkuCartWhenNoLookup = true;\n    if (!boot.skuCartHandles || typeof boot.skuCartHandles !== 'object') boot.skuCartHandles = {};\n    if (!boot.skuCartHandles.panel) boot.skuCartHandles.panel = 'konfigurator-panel';\n    if (!boot.skuCartHandles.post) boot.skuCartHandles.post = 'konfigurator-direk';\n    if (!boot.skuCartHandles.montage && !boot.skuCartHandles.extras) {\n      boot.skuCartHandles.montage = 'konfigurator-zubehoer';\n    }\n\n    function montageCartHandle() {\n      return (\n        boot.skuCartHandles.montage ||\n        boot.skuCartHandles.extras ||\n        'konfigurator-zubehoer'\n      );\n    }\n\n    function montageCartSkus() {\n      var s = boot.montageCartSkus;\n      if (Array.isArray(s) && s.length) return s;\n      if (typeof s === 'string' && s.trim()) return [s.trim()];\n      return DEFAULT_MONTAGE_CART_SKUS.slice();\n    }\n\n    function isMontageCartSku(sku) {\n      var n = P.normalizeCartSku(sku);\n      if (!n) return false;\n      var list = montageCartSkus();\n      for (var mi = 0; mi < list.length; mi++) {\n        if (P.normalizeCartSku(list[mi]) === n) return true;\n      }\n      return false;\n    }\n\n    function fetchVariantIdBySkuList(handle, skuList) {\n      var idx = 0;\n      function next() {\n        if (idx >= skuList.length) return Promise.resolve(null);\n        var sku = skuList[idx++];\n        return fetchVariantIdBySku(handle, sku).then(function (id) {\n          return id || next();\n        });\n      }\n      return next();\n    }\n\n    var resolvedMontageVariantId = null;\n\n    function fetchMontageProductVariants() {\n      var handle = montageCartHandle();\n      return fetch('/products/' + encodeURIComponent(handle) + '.json')\n        .then(function (r) {\n          if (!r.ok) return [];\n          return r.text().then(function (text) {\n            if (!text || !text.trim()) return [];\n            try {\n              var data = JSON.parse(text);\n              return (data.product && data.product.variants) || [];\n            } catch (e) {\n              return [];\n            }\n          });\n        })\n        .catch(function () {\n          return [];\n        });\n    }\n\n    function pickMontageVariantId(variants) {\n      var i;\n      var v;\n      var norm;\n      var skus = montageCartSkus();\n      for (i = 0; i < skus.length; i++) {\n        norm = P.normalizeCartSku(skus[i]);\n        for (v = 0; v < variants.length; v++) {\n          if (P.normalizeCartSku(variants[v].sku) === norm) return variants[v].id;\n        }\n      }\n      for (v = 0; v < variants.length; v++) {\n        norm = P.normalizeCartSku(variants[v].sku);\n        if (norm.indexOf('doppelstab') >= 0 && norm.indexOf('montage') >= 0) return variants[v].id;\n      }\n      for (v = 0; v < variants.length; v++) {\n        var title = String(variants[v].title || variants[v].name || '').toLowerCase();\n        var pr = parseFloat(variants[v].price);\n        if (\n          title.indexOf('montage') >= 0 &&\n          (title.indexOf('doppelstab') >= 0 || title.indexOf('panel') >= 0) &&\n          !isNaN(pr) &&\n          pr >= 95 &&\n          pr <= 105\n        ) {\n          return variants[v].id;\n        }\n      }\n      return null;\n    }\n\n    function fetchVariantIdBySkuCatalog(skuList) {\n      var targets = [];\n      var ti;\n      for (ti = 0; ti < skuList.length; ti++) {\n        var tn = P.normalizeCartSku(skuList[ti]);\n        if (tn && targets.indexOf(tn) < 0) targets.push(tn);\n      }\n      if (!targets.length) return Promise.resolve(null);\n      return fetch('/products.json?limit=250')\n        .then(function (r) {\n          if (!r.ok) return null;\n          return r.json();\n        })\n        .then(function (data) {\n          if (!data || !data.products) return null;\n          var pi;\n          var vi;\n          var p;\n          var v;\n          var norm;\n          for (pi = 0; pi < data.products.length; pi++) {\n            p = data.products[pi];\n            for (vi = 0; vi < (p.variants || []).length; vi++) {\n              v = p.variants[vi];\n              norm = P.normalizeCartSku(v.sku);\n              if (norm && targets.indexOf(norm) >= 0) {\n                P.primeSkuCache(p.handle, [v.sku], v.id);\n                return v.id;\n              }\n            }\n          }\n          return null;\n        })\n        .catch(function () {\n          return null;\n        });\n    }\n\n    function resolveMontageCartLine(state) {\n      if (!state.mitMontage) return Promise.resolve(null);\n      return fetchMontageProductVariants()\n        .then(function (variants) {\n          var id = pickMontageVariantId(variants);\n          if (id) return id;\n          return fetchVariantIdBySkuCatalog(montageCartSkus());\n        })\n        .then(function (id) {\n          resolvedMontageVariantId = id || null;\n          if (!id) return null;\n          return { id: id, quantity: panelCount(state) };\n        });\n    }\n\n    function isMontageVariant(v) {\n      if (!v) return false;\n      if (resolvedMontageVariantId && String(v.id) === String(resolvedMontageVariantId)) return true;\n      return isMontageCartSku(v.sku);\n    }\n\n    var els = {\n      sim: root.querySelector('[data-ds-sim]'),\n      summary: root.querySelector('[data-ds-summary]'),\n      priceTotal: root.querySelector('[data-ds-price-total]'),\n      priceCompare: root.querySelector('[data-ds-price-compare]'),\n      priceDiscount: root.querySelector('[data-ds-price-discount]'),\n      priceSave: root.querySelector('[data-ds-price-save]'),\n      breakdownPanels: root.querySelector('[data-ds-breakdown-panels]'),\n      breakdownPanelsPrice: root.querySelector('[data-ds-breakdown-panels-price]'),\n      breakdownZposts: root.querySelector('[data-ds-breakdown-zposts]'),\n      breakdownZpostsPrice: root.querySelector('[data-ds-breakdown-zposts-price]'),\n      breakdownEposts: root.querySelector('[data-ds-breakdown-eposts]'),\n      breakdownEpostsPrice: root.querySelector('[data-ds-breakdown-eposts-price]'),\n      breakdownPosts: root.querySelector('[data-ds-breakdown-posts]'),\n      breakdownPostsPrice: root.querySelector('[data-ds-breakdown-posts-price]'),\n      breakdownMontage: root.querySelector('[data-ds-breakdown-montage]'),\n      breakdownMontagePrice: root.querySelector('[data-ds-breakdown-montage-price]'),\n      breakdown: root.querySelector('.doppelstab-konfigurator__breakdown'),\n      preisdetails: root.querySelector('[data-ds-preisdetails]'),\n      priceMontageRow: root.querySelector('[data-ds-montage-row]'),\n      priceMontage: root.querySelector('[data-ds-montage-price]'),\n      mainImg: root.querySelector('[data-ds-main-img]'),\n      thumbs: root.querySelector('[data-ds-thumbs]'),\n      thumbsPrev: root.querySelector('[data-ds-thumbs-prev]'),\n      thumbsNext: root.querySelector('[data-ds-thumbs-next]'),\n      warnPfosten: root.querySelector('[data-ds-warn-pfosten]'),\n      recSicht: root.querySelector('[data-ds-rec-sichtschutz]'),\n      recKlemm: root.querySelector('[data-ds-rec-klemm]'),\n      recLed: root.querySelector('[data-ds-rec-led]'),\n      recBetonKg: root.querySelector('[data-ds-rec-betonkg]'),\n      delivery: root.querySelector('[data-ds-delivery]'),\n      express: root.querySelector('[data-ds-express]'),\n      cartMsg: root.querySelector('[data-ds-cart-msg]'),\n      btnCart: root.querySelector('[data-ds-add-cart]'),\n      panels: root.querySelectorAll('[data-ds-panel]'),\n      headlinePrice: root.querySelector('[data-ds-headline-price]'),\n      headlineImg:   root.querySelector('[data-ds-headline-img]'),\n      headlineCart:  root.querySelector('[data-ds-headline-cart]'),\n      headlineSummary: root.querySelector('[data-ds-headline-summary]'),\n    };\n\n    function refreshPricingDomRefs() {\n      var ps = pricingScope;\n      function q(sel) {\n        return ps.querySelector(sel) || root.querySelector(sel);\n      }\n      els.summary = q('[data-ds-summary]');\n      els.breakdown = q('.doppelstab-konfigurator__breakdown');\n      els.breakdownPanels = q('[data-ds-breakdown-panels]');\n      els.breakdownPanelsPrice = q('[data-ds-breakdown-panels-price]');\n      els.breakdownZposts = q('[data-ds-breakdown-zposts]');\n      els.breakdownZpostsPrice = q('[data-ds-breakdown-zposts-price]');\n      els.breakdownEposts = q('[data-ds-breakdown-eposts]');\n      els.breakdownEpostsPrice = q('[data-ds-breakdown-eposts-price]');\n      els.breakdownPosts = q('[data-ds-breakdown-posts]');\n      els.breakdownPostsPrice = q('[data-ds-breakdown-posts-price]');\n      els.breakdownMontage = q('[data-ds-breakdown-montage]');\n      els.breakdownMontagePrice = q('[data-ds-breakdown-montage-price]');\n      els.preisdetails = q('[data-ds-preisdetails]');\n      els.priceTotal = q('[data-ds-price-total]');\n      els.priceCompare = q('[data-ds-price-compare]');\n      els.priceDiscount = q('[data-ds-price-discount]');\n      els.priceSave = q('[data-ds-price-save]');\n      els.priceMontageRow = q('[data-ds-montage-row]');\n      els.priceMontage = q('[data-ds-montage-price]');\n      els.btnCart = q('[data-ds-add-cart]');\n      els.headlinePrice = q('[data-ds-headline-price]');\n      els.headlineCart = q('[data-ds-headline-cart]');\n    }\n\n    function syncBreakdownCells() {\n      if (els.breakdown) els.breakdown.style.display = 'flex';\n      var montageRow = root.querySelector('[data-ds-breakdown-montage-row]');\n      if (montageRow) montageRow.hidden = !state.mitMontage;\n    }\n\n    function setBreakdownPricePlaceholders(text) {\n      var keys = ['breakdownPanelsPrice', 'breakdownPostsPrice', 'breakdownMontagePrice'];\n      var k;\n      for (k = 0; k < keys.length; k++) {\n        if (els[keys[k]]) els[keys[k]].textContent = text;\n      }\n    }\n\n    function findPanelPostLines(priced, variants, st) {\n      var ps = panelSkuFromState(st);\n      var po = postSkuFromState(st);\n      var panelL = null;\n      var postL = null;\n      var i;\n      for (i = 0; i < variants.length && i < priced.length; i++) {\n        var sku = variants[i].sku;\n        if (!panelL && P.normalizeCartSku(sku) === P.normalizeCartSku(ps)) {\n          panelL = { v: variants[i], qCart: priced[i].quantity, idx: i };\n        }\n        if (!postL && P.normalizeCartSku(sku) === P.normalizeCartSku(po)) {\n          postL = { v: variants[i], qCart: priced[i].quantity, idx: i };\n        }\n      }\n      if (!panelL && postL) {\n        for (i = 0; i < priced.length; i++) {\n          if (i !== postL.idx) {\n            panelL = { v: variants[i], qCart: priced[i].quantity, idx: i };\n            break;\n          }\n        }\n      }\n      if (!postL && panelL) {\n        for (i = 0; i < priced.length; i++) {\n          if (i !== panelL.idx) {\n            postL = { v: variants[i], qCart: priced[i].quantity, idx: i };\n            break;\n          }\n        }\n      }\n      if (!panelL && !postL && priced.length >= 2) {\n        panelL = { v: variants[0], qCart: priced[0].quantity, idx: 0 };\n        postL = { v: variants[1], qCart: priced[1].quantity, idx: 1 };\n      } else if (!panelL && !postL && priced.length === 1) {\n        panelL = { v: variants[0], qCart: priced[0].quantity, idx: 0 };\n      }\n      return { panelL: panelL, postL: postL };\n    }\n\n    function syncBreakdownPriceCells(priced, variants) {\n      setBreakdownPricePlaceholders('\u2014');\n      if (!priced || !variants || variants.length !== priced.length || !priced.length) {\n        return;\n      }\n      var pp = findPanelPostLines(priced, variants, state);\n      var pc = panelCount(state);\n      var totp = totalPosts(state);\n      var panelsLabel = root.querySelector('[data-ds-breakdown-panels-label]');\n      var postsLabel = root.querySelector('[data-ds-breakdown-posts-label]');\n      if (panelsLabel) panelsLabel.textContent = 'Matten (' + pc + ' Stk)';\n      if (postsLabel) postsLabel.textContent = 'Pfosten (' + totp + ' Stk)';\n      if (pp.panelL && els.breakdownPanelsPrice) {\n        var pu = pp.panelL.v.price;\n        els.breakdownPanelsPrice.textContent =\n          pc + ' \u00D7 ' + money(pu, moneyFormat) + ' = ' + money(pu * pc, moneyFormat);\n      }\n      if (pp.postL && els.breakdownPostsPrice) {\n        var ptu = pp.postL.v.price;\n        var qLine = pp.postL.qCart;\n        els.breakdownPostsPrice.textContent =\n          qLine + ' \u00D7 ' + money(ptu, moneyFormat) + ' = ' + money(ptu * qLine, moneyFormat);\n      }\n      if (els.breakdownMontagePrice && state.mitMontage) {\n        var mp = panelCount(state);\n        var mc = montageSurchargeCents(state);\n        var montageRow = root.querySelector('[data-ds-breakdown-montage-row]');\n        var montageLabel = montageRow && montageRow.querySelector('.ds-bd-label');\n        if (montageLabel) montageLabel.textContent = 'Montage (' + mp + ' Pan.)';\n        els.breakdownMontagePrice.textContent =\n          mp + ' \u00D7 ' + money(MONTAGE_CENTS_PER_PANEL, moneyFormat) + ' = ' + money(mc, moneyFormat);\n      }\n    }\n\n    function setPreisdetailsBoxVisible(visible) {\n      if (!els.preisdetails) return;\n      if (visible) {\n        els.preisdetails.removeAttribute('hidden');\n        els.preisdetails.hidden = false;\n      } else {\n        els.preisdetails.setAttribute('hidden', '');\n        els.preisdetails.hidden = true;\n      }\n    }\n\n    function setPanelOpen(id, open) {\n      els.panels.forEach(function (panel) {\n        if (panel.getAttribute('data-ds-panel') !== id) return;\n        var trig = panel.querySelector('.doppelstab-konfigurator__panel-trigger');\n        var body = panel.querySelector('.doppelstab-konfigurator__panel-body');\n        if (trig) trig.setAttribute('aria-expanded', open ? 'true' : 'false');\n        if (body) {\n          body.classList.toggle('is-open', open);\n          // Auto-focus the input field when panel opens\n          if (open) {\n            var inp = body.querySelector('input[type=\"number\"], input[type=\"text\"]');\n            if (inp) {\n              setTimeout(function () { inp.focus(); inp.select(); }, 50);\n            }\n          }\n        }\n      });\n    }\n\n    root.addEventListener('click', function (e) {\n      var t = e.target.closest('.js-collapse-trigger');\n      if (!t || !root.contains(t)) return;\n      e.preventDefault();\n      var id = t.getAttribute('data-target');\n      var panel = root.querySelector('[data-ds-panel=\"' + id + '\"]');\n      if (!panel) return;\n      var body = panel.querySelector('.doppelstab-konfigurator__panel-body');\n      var open = !(body && body.classList.contains('is-open'));\n      setPanelOpen(id, open);\n    });\n\n    root.addEventListener('click', function (e) {\n      var opt = e.target.closest('.js-panel-option');\n      if (!opt || !root.contains(opt)) return;\n      e.preventDefault();\n      var group = opt.getAttribute('data-group');\n      var value = opt.getAttribute('data-value');\n      if (group === 'drahtstaerke') state.drahtstaerke = value;\n      else if (group === 'hoehe') state.hoehe = normalizeHeight(value);\n      else if (group === 'beschichtung') state.beschichtung = value;\n      else if (group === 'pfostenausfuehrung') state.pfostenausfuehrung = value;\n      else if (group === 'montageart') state.montageart = value;\n      else if (group === 'pfostenkappen') state.pfostenkappen = value;\n      else if (group === 'mitMontage') state.mitMontage = value === 'Ja';\n      else if (group === 'inklusiveBeton') state.inklusiveBeton = value === 'Ja';\n      if (!concreteEnabled(state)) state.inklusiveBeton = false;\n      render();\n    });\n\n    root.addEventListener('input', function (e) {\n      var inp = e.target;\n      if (!inp || !inp.getAttribute || !root.contains(inp)) return;\n      var k = inp.getAttribute('data-bind');\n      if (!k) return;\n      var v = inp.value;\n      if (k === 'zaunlaenge') {\n        var n = parseInt(v, 10);\n        state.zaunlaenge = isNaN(n) ? 1 : Math.max(1, Math.min(750, n));\n        // Auto-calculate posts: ceil(length / 2.5) panels + 1 post\n        var autoPosts = Math.ceil(state.zaunlaenge / PANEL_M) + 1;\n        state.anzahlZaunpfosten = autoPosts;\n        var postsInput = root.querySelector('input[data-bind=\"anzahlZaunpfosten\"]');\n        if (postsInput) postsInput.value = String(autoPosts);\n      } else if (k === 'anzahlZaunpfosten') {\n        state.anzahlZaunpfosten = Math.max(1, parseInt(v, 10) || 1);\n      } else if (k === 'anzahlEckpfosten') {\n        state.anzahlEckpfosten = Math.max(0, parseInt(v, 10) || 0);\n      }\n      render();\n    });\n\n    function updateOptionButtons() {\n      root.querySelectorAll('.js-panel-option').forEach(function (btn) {\n        var g = btn.getAttribute('data-group');\n        var v = btn.getAttribute('data-value');\n        var active = false;\n        if (g === 'drahtstaerke') active = state.drahtstaerke === v;\n        else if (g === 'hoehe') active = normalizeHeight(state.hoehe) === normalizeHeight(v);\n        else if (g === 'beschichtung') active = state.beschichtung === v;\n        else if (g === 'pfostenausfuehrung') active = state.pfostenausfuehrung === v;\n        else if (g === 'montageart') active = state.montageart === v;\n        else if (g === 'pfostenkappen') active = state.pfostenkappen === v;\n        else if (g === 'mitMontage') active = (state.mitMontage ? 'Ja' : 'Nein') === v;\n        else if (g === 'inklusiveBeton') active = (state.inklusiveBeton ? 'Ja' : 'Nein') === v;\n        btn.classList.toggle('is-active', active);\n        btn.setAttribute('aria-pressed', active ? 'true' : 'false');\n        if (g === 'inklusiveBeton') {\n          var en = concreteEnabled(state);\n          btn.disabled = !en && v === 'Ja';\n          btn.classList.toggle('is-disabled', !en && v === 'Ja');\n        }\n      });\n\n      // Hide entire \"Inklusive Beton\" panel when Mit Montage = Nein\n      var betonPanel = root.querySelector('[data-ds-panel=\"beton\"]');\n      if (betonPanel) {\n        betonPanel.hidden = !state.mitMontage;\n      }\n\n      var svMap = {\n        'drahtstaerke': state.drahtstaerke,\n        'hoehe': normalizeHeight(state.hoehe) + ' mm',\n        'beschichtung': state.beschichtung,\n        'pfostenausfuehrung': state.pfostenausfuehrung.replace('Zaunpfosten mit ', ''),\n        'montageart': state.montageart,\n        'pfostenkappen': state.pfostenkappen,\n        'mitMontage': state.mitMontage ? 'Ja' : 'Nein',\n        'inklusiveBeton': state.inklusiveBeton ? 'Ja' : 'Nein',\n        'zaunlaenge': state.zaunlaenge + ' m'\n      };\n      Object.keys(svMap).forEach(function (key) {\n        var el = root.querySelector('[data-ds-sv-' + key + ']');\n        if (el) el.textContent = svMap[key];\n      });\n      var postenPaar = root.querySelector('[data-ds-sv-postenpaar]');\n      if (postenPaar) {\n        postenPaar.textContent =\n          state.anzahlZaunpfosten + ' + ' + state.anzahlEckpfosten + ' Stk';\n      }\n    }\n\n    function updateInputs() {\n      root.querySelectorAll('[data-bind]').forEach(function (inp) {\n        var k = inp.getAttribute('data-bind');\n        if (k === 'zaunlaenge') inp.value = String(state.zaunlaenge);\n        else if (k === 'anzahlZaunpfosten') inp.value = String(state.anzahlZaunpfosten);\n        else if (k === 'anzahlEckpfosten') inp.value = String(state.anzahlEckpfosten);\n      });\n    }\n\n    function updateMedia() {\n      var patterns = boot.imagePatterns || {};\n      var mainPattern =\n        patterns.main ||\n        'Doppelstabmattenzaun_{Pfostenausf\u00FChrung}_{Beschichtung}.jpeg';\n      var mainUrl = '';\n      if (mediaBase) {\n        mainUrl = buildImageUrl(mediaBase, mainPattern, state);\n      }\n      if (!mainUrl && themeDrawingGallery.length) {\n        mainUrl = themeDrawingGallery[0];\n      }\n      if (!mainUrl && usePackaged && boot.packagedHeroUrl) mainUrl = boot.packagedHeroUrl;\n      if (!mainUrl && boot.placeholderImage) mainUrl = boot.placeholderImage;\n      if (els.mainImg && mainUrl) els.mainImg.src = mainUrl;\n\n      if (els.thumbs) {\n        var galleryMax = parseInt(boot.galleryThumbCount, 10);\n        if (!galleryMax || galleryMax < 1) {\n          galleryMax = themeDrawingGallery.length || 12;\n        }\n        var count = galleryMax;\n        els.thumbs.innerHTML = '';\n        var thumbUrls = [];\n        if (mediaBase) {\n          for (var ti = 0; ti <= count; ti++) {\n            var pat =\n              ti === 0\n                ? mainPattern\n                : (patterns.mainIndexed || '').replace('{i}', String(ti)) ||\n                  mainPattern.replace('.jpeg', '_' + ti + '.webp');\n            var u = buildImageUrl(mediaBase, pat, state);\n            if (u) thumbUrls.push(u);\n          }\n        }\n        if (!thumbUrls.length && themeDrawingGallery.length) {\n          thumbUrls = themeDrawingGallery.slice(0, galleryMax);\n        }\n        if (!thumbUrls.length && usePackaged && boot.packagedThumbUrls && boot.packagedThumbUrls.length) {\n          thumbUrls = boot.packagedThumbUrls.slice();\n        }\n        if (themeProductPhotos.length) {\n          thumbUrls = thumbUrls.concat(themeProductPhotos);\n        }\n        for (var tj = 0; tj < thumbUrls.length; tj++) {\n          var url = thumbUrls[tj];\n          var b = document.createElement('button');\n          b.type = 'button';\n          b.className = 'doppelstab-konfigurator__thumb' + (tj === 0 ? ' is-active' : '');\n          b.setAttribute('data-thumb-index', String(tj));\n          var img = document.createElement('img');\n          img.src = url;\n          img.alt = '';\n          b.appendChild(img);\n          b.addEventListener('click', function (url2, idx, btn) {\n            return function () {\n              if (els.mainImg) els.mainImg.src = url2;\n              els.thumbs.querySelectorAll('.doppelstab-konfigurator__thumb').forEach(function (x, j) {\n                x.classList.toggle('is-active', j === idx);\n              });\n              if (btn && btn.scrollIntoView) {\n                btn.scrollIntoView({ inline: 'nearest', behavior: 'smooth', block: 'nearest' });\n              }\n              updateThumbNavState();\n            };\n          }(url, tj, b));\n          els.thumbs.appendChild(b);\n        }\n        updateThumbNavState();\n      }\n    }\n\n    function updateThumbNavState() {\n      if (!els.thumbs) return;\n      var maxScroll = els.thumbs.scrollWidth - els.thumbs.clientWidth;\n      var atStart = els.thumbs.scrollLeft <= 2;\n      var atEnd = els.thumbs.scrollLeft >= maxScroll - 2;\n      if (els.thumbsPrev) els.thumbsPrev.disabled = atStart || maxScroll <= 0;\n      if (els.thumbsNext) els.thumbsNext.disabled = atEnd || maxScroll <= 0;\n    }\n\n    function scrollThumbs(direction) {\n      if (!els.thumbs) return;\n      var step = Math.max(els.thumbs.clientWidth * 0.75, 140);\n      els.thumbs.scrollBy({ left: direction * step, behavior: 'smooth' });\n    }\n\n    function renderSummary() {\n      var h = normalizeHeight(state.hoehe);\n      var sugg = suggestedLinePosts(state);\n      var tot = totalPosts(state);\n      if (els.summary) els.summary.innerHTML = '';\n\n      var recap =\n        state.drahtstaerke + ' \u00B7 ' + normalizeHeight(state.hoehe) + ' mm \u00B7 ' +\n        state.beschichtung + ' \u00B7 ' + state.zaunlaenge + ' m';\n      if (els.headlineSummary) els.headlineSummary.textContent = recap;\n      var ctaRecap = root.querySelector('[data-ds-cta-recap]');\n      if (ctaRecap) {\n        ctaRecap.textContent = recap;\n        ctaRecap.hidden = false;\n      }\n\n      if (els.warnPfosten) {\n        if (state.anzahlZaunpfosten !== sugg) {\n          els.warnPfosten.hidden = false;\n          els.warnPfosten.textContent =\n            'Hinweis: Empfohlen ca. ' +\n            sugg +\n            ' Zaunpfosten (Linie) f\u00FCr ' +\n            state.zaunlaenge +\n            ' m / ' +\n            panelCount(state) +\n            ' Elemente, gew\u00E4hlt: ' +\n            state.anzahlZaunpfosten +\n            '. Gesamt Pfosten: ' +\n            tot +\n            '.';\n        } else {\n          els.warnPfosten.hidden = true;\n        }\n      }\n\n      var factor = SICHTSCHUTZ_FACTOR[h] || 8;\n      var sichtM = state.zaunlaenge * factor;\n      if (els.recSicht) els.recSicht.textContent = String(Math.round(sichtM)) + ' m';\n      if (els.recKlemm) els.recKlemm.textContent = 'Je Streifen oder Abschnitt empfehlen wir zwei Klemmschienen.';\n      if (els.recLed) els.recLed.textContent = String(tot);\n      if (els.recBetonKg) els.recBetonKg.textContent = String(tot * 60);\n    }\n\n    function escapeHtml(s) {\n      var d = document.createElement('div');\n      d.textContent = s;\n      return d.innerHTML;\n    }\n\n    function renderPreisdetails(priced, variants, state) {\n      if (els.preisdetails) {\n        els.preisdetails.innerHTML = '';\n        setPreisdetailsBoxVisible(false);\n      }\n    }\n\n    var priceRaf = 0;\n    function schedulePriceUpdate() {\n      cancelAnimationFrame(priceRaf);\n      priceRaf = requestAnimationFrame(function () {\n        updatePrices();\n      });\n    }\n\n    function setCartButtonsDisabled(disabled) {\n      if (els.btnCart) els.btnCart.disabled = disabled;\n      if (els.headlineCart) els.headlineCart.disabled = disabled;\n    }\n\n    function resolveCartLinesFromSku(state) {\n      if (boot.useSkuCartWhenNoLookup === false) return Promise.resolve([]);\n      var ph = boot.skuCartHandles.panel;\n      var pth = boot.skuCartHandles.post;\n      if (!ph || !pth) return Promise.resolve([]);\n      var ps = panelSkuFromState(state);\n      var pts = postSkuFromState(state);\n      return Promise.all([\n        fetchVariantIdBySku(ph, ps),\n        fetchVariantIdBySku(pth, pts),\n      ]).then(function (ids) {\n        if (!ids[0] || !ids[1]) return [];\n        var lines = [\n          { id: ids[0], quantity: panelCount(state) },\n          { id: ids[1], quantity: Math.max(1, totalPosts(state)) },\n        ];\n        return resolveMontageCartLine(state).then(function (montageLine) {\n          if (montageLine) lines.push(montageLine);\n          return lines;\n        });\n      });\n    }\n\n    /**\n     * Lookup-Zeilen ohne g\u00FCltige variant_id f\u00FChren fr\u00FCher zu leerem Warenkorb/Preis,\n     * obwohl SKU-Fallback m\u00F6glich w\u00E4re \u2014 dann hier nachziehen.\n     */\n    function resolveCartLines(state) {\n      var raw = lookupLines(lookup, state);\n      if (raw && raw.length) {\n        var out = [];\n        for (var i = 0; i < raw.length; i++) {\n          var L = raw[i];\n          var id = L.variant_id != null ? L.variant_id : L.id;\n          var qty = resolveQty(L.quantity != null ? L.quantity : L.q, state);\n          if (id && qty > 0) out.push({ id: id, quantity: qty });\n        }\n        if (out.length) return Promise.resolve(out);\n      }\n      return resolveCartLinesFromSku(state);\n    }\n\n    function updatePrices() {\n      refreshPricingDomRefs();\n      syncBreakdownCells();\n      setBreakdownPricePlaceholders('\u2026');\n      if (els.priceTotal) {\n        els.priceTotal.classList.add('ds-cta__price-total--muted');\n        els.priceTotal.textContent = 'Laden\u2026';\n      }\n      if (els.headlinePrice) els.headlinePrice.textContent = '\u2026';\n\n      resolveCartLines(state)\n        .then(function (resolved) {\n          refreshPricingDomRefs();\n          var priced = (resolved || []).filter(function (x) {\n            return x.quantity > 0;\n          });\n          if (!priced.length) {\n            if (els.priceTotal) {\n              els.priceTotal.classList.add('ds-cta__price-total--muted');\n              els.priceTotal.textContent = 'Preis nicht verf\u00FCgbar';\n            }\n            if (els.headlinePrice) els.headlinePrice.textContent = '\u2014';\n            if (els.priceCompare) {\n              els.priceCompare.textContent = '';\n              els.priceCompare.hidden = true;\n            }\n            if (els.priceDiscount) els.priceDiscount.textContent = '';\n            if (els.priceSave) els.priceSave.textContent = '';\n            syncBreakdownCells();\n            setBreakdownPricePlaceholders('\u2014');\n            if (els.preisdetails) {\n              els.preisdetails.innerHTML = '';\n              setPreisdetailsBoxVisible(false);\n            }\n            setCartButtonsDisabled(true);\n            return;\n          }\n\n          if (els.priceTotal) els.priceTotal.classList.remove('ds-cta__price-total--muted');\n\n          return Promise.all(\n            priced.map(function (r) {\n              return fetchVariant(r.id);\n            })\n          )\n            .then(function (variants) {\n              refreshPricingDomRefs();\n              var subtotal = 0;\n              var compareTotal = 0;\n              var montageLineResolved = false;\n              for (var j = 0; j < priced.length; j++) {\n                var q = priced[j].quantity;\n                var v = variants[j];\n                if (isMontageVariant(v)) montageLineResolved = true;\n                subtotal += v.price * q;\n                compareTotal += (v.compare_at_price != null ? v.compare_at_price : v.price) * q;\n              }\n              var montageCent = montageSurchargeCents(state);\n              var montageMissing = state.mitMontage && montageCent && !montageLineResolved;\n              if (montageMissing) {\n                subtotal += montageCent;\n                compareTotal += montageCent;\n                if (els.cartMsg) {\n                  els.cartMsg.style.display = 'block';\n                  els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n                  els.cartMsg.textContent =\n                    boot.msgMontageVariantMissing ||\n                    'Montage ist gew\u00E4hlt, aber die Shop-Variante fehlt (SKU \u201Edoppelstab-montage-pro-panel\u201C, 100 \u20AC/Panel in \u201EKonfigurator Zubeh\u00F6r\u201C).';\n                }\n                setCartButtonsDisabled(true);\n              } else if (els.cartMsg && els.cartMsg.className.indexOf('msg--error') !== -1) {\n                els.cartMsg.style.display = 'none';\n                els.cartMsg.textContent = '';\n              }\n              if (els.priceTotal) animatePrice(els.priceTotal, subtotal);\n              var showCompare = showDiscountBreakdown && compareTotal > subtotal;\n              if (els.priceCompare) {\n                els.priceCompare.hidden = !showCompare;\n                if (showCompare) animatePrice(els.priceCompare, compareTotal);\n                else els.priceCompare.textContent = '';\n              }\n              if (els.priceDiscount) {\n                if (showCompare) {\n                  var pct = Math.round((1 - subtotal / compareTotal) * 100);\n                  els.priceDiscount.textContent = pct > 0 ? '-' + pct + '%' : '';\n                } else {\n                  els.priceDiscount.textContent = '';\n                }\n              }\n              if (els.priceSave) {\n                if (showCompare) {\n                  els.priceSave.textContent = money(compareTotal - subtotal, moneyFormat) + ' gespart';\n                } else {\n                  els.priceSave.textContent = '';\n                }\n              }\n              syncBreakdownCells();\n              syncBreakdownPriceCells(priced, variants);\n              renderPreisdetails(priced, variants, state);\n              if (!montageMissing) setCartButtonsDisabled(false);\n              if (els.headlinePrice) animatePrice(els.headlinePrice, subtotal);\n              if (els.headlineImg && els.mainImg && els.mainImg.src) {\n                els.headlineImg.src = els.mainImg.src;\n              }\n            })\n            .catch(function () {\n              refreshPricingDomRefs();\n              if (els.priceTotal) {\n                els.priceTotal.classList.add('ds-cta__price-total--muted');\n                els.priceTotal.textContent = 'Preisfehler';\n              }\n              if (els.headlinePrice) els.headlinePrice.textContent = '\u2014';\n              if (els.preisdetails) {\n                setPreisdetailsBoxVisible(true);\n                els.preisdetails.innerHTML =\n                  '<div class=\"ds-pd-title\">Preisdetails</div><p class=\"ds-pd-foot ds-pd-foot--warn\">Varianten-Preis konnte nicht geladen werden. Netzwerk pr\u00FCfen oder Seite neu laden.</p>';\n              }\n              setCartButtonsDisabled(true);\n              setBreakdownPricePlaceholders('\u2014');\n            });\n        })\n        .catch(function () {\n          if (els.priceTotal) {\n            els.priceTotal.classList.add('ds-cta__price-total--muted');\n            els.priceTotal.textContent = 'Preisfehler';\n          }\n          if (els.headlinePrice) els.headlinePrice.textContent = '\u2014';\n          if (els.preisdetails) {\n            setPreisdetailsBoxVisible(true);\n            els.preisdetails.innerHTML =\n              '<div class=\"ds-pd-title\">Preisdetails</div><p class=\"ds-pd-foot ds-pd-foot--warn\">Varianten-API nicht erreichbar oder ung\u00FCltige Antwort. Seite neu laden oder im Theme-Preview mit normalem Shop testen.</p>';\n          }\n          setCartButtonsDisabled(true);\n          setBreakdownPricePlaceholders('\u2014');\n        });\n    }\n\n    /* \u2500\u2500 FENCE SIMULATION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n    var _simRaf = null;\n    function drawFenceSim() {\n      var container = els.sim;\n      if (!container) return;\n      if (_simRaf) cancelAnimationFrame(_simRaf);\n      _simRaf = requestAnimationFrame(function () {\n        _buildFenceSVG(container, state);\n      });\n    }\n\n    function _buildFenceSVG(container, st) {\n      var NS = 'http://www.w3.org/2000/svg';\n      var W = 800, H = 400;\n      var SCALE = 0.092;\n      var GROUND_Y = H - 68;\n      var PANEL_W = Math.round(2500 * SCALE);   /* \u2248 230 px / 2.5 m panel */\n      var NUM_PANELS = 3;\n      var HEIGHT_PX = Math.round(st.hoehe * SCALE);\n      var FENCE_TOP = GROUND_Y - HEIGHT_PX;\n      var POST_W = 15;\n      var TOTAL_W = NUM_PANELS * PANEL_W + POST_W;\n      var OFFSET_X = Math.round((W - TOTAL_W) / 2);\n\n      /* \u2500\u2500 colour palettes \u2500\u2500 */\n      var PALETTES = {\n        'anthrazit':     { base:'#2c3336', hi:'#454e52', lo:'#171c1e', wire:'#38444a', wireHi:'#566068', sky1:'#c5d8e8', sky2:'#e6f2f8' },\n        'ral 7016':      { base:'#2c3336', hi:'#454e52', lo:'#171c1e', wire:'#38444a', wireHi:'#566068', sky1:'#c5d8e8', sky2:'#e6f2f8' },\n        'gr\u00FCn':          { base:'#234428', hi:'#355c3a', lo:'#122518', wire:'#2e5a38', wireHi:'#477a52', sky1:'#c2ddd0', sky2:'#e4f3eb' },\n        'ral 6005':      { base:'#234428', hi:'#355c3a', lo:'#122518', wire:'#2e5a38', wireHi:'#477a52', sky1:'#c2ddd0', sky2:'#e4f3eb' },\n        'moosgr\u00FCn':      { base:'#234428', hi:'#355c3a', lo:'#122518', wire:'#2e5a38', wireHi:'#477a52', sky1:'#c2ddd0', sky2:'#e4f3eb' },\n        'feuerverzinkt': { base:'#788a82', hi:'#9cb0a8', lo:'#4e6058', wire:'#8a9e98', wireHi:'#b0c8be', sky1:'#ccd8dc', sky2:'#e8f2f4' },\n      };\n      var descKey = (st.beschichtung || '').toLowerCase();\n      var pal = (function () {\n        var k; for (k in PALETTES) { if (descKey.indexOf(k) !== -1) return PALETTES[k]; }\n        return PALETTES['anthrazit'];\n      }());\n\n      function el(tag, attrs) {\n        var e = document.createElementNS(NS, tag);\n        for (var k in attrs) e.setAttribute(k, attrs[k]);\n        return e;\n      }\n      function txt(tag, attrs, text) { var e = el(tag, attrs); e.textContent = text; return e; }\n\n      var svg = el('svg', { viewBox: '0 0 ' + W + ' ' + H, xmlns: NS,\n                            preserveAspectRatio: 'xMidYMid meet',\n                            role: 'img', 'aria-label': 'Zaunvorschau' });\n\n      /* \u2500\u2500 defs \u2500\u2500 */\n      var defs = el('defs', {});\n\n      function mkLinGrad(id, x1,y1,x2,y2, stops) {\n        var g = el('linearGradient', { id:id, x1:x1, y1:y1, x2:x2, y2:y2 });\n        stops.forEach(function(s){ g.appendChild(el('stop',{'offset':s[0],'stop-color':s[1],'stop-opacity':s[2]||1})); });\n        return g;\n      }\n      function mkRadGrad(id, attrs, stops) {\n        var merged = { id: id };\n        for (var _k in attrs) merged[_k] = attrs[_k];\n        var g = el('radialGradient', merged);\n        stops.forEach(function(s){ g.appendChild(el('stop',{'offset':s[0],'stop-color':s[1],'stop-opacity':s[2]||1})); });\n        return g;\n      }\n\n      /* sky */\n      defs.appendChild(mkLinGrad('ds-sky','0','0','0','1',\n        [['0',pal.sky1],['0.6',pal.sky2],['1','#f5f8f0']]));\n      /* ground */\n      defs.appendChild(mkLinGrad('ds-gnd','0','0','0','1',\n        [['0','#8cc468'],['0.25','#6a9e4a'],['1','#3d6828']]));\n      /* ground stripe */\n      defs.appendChild(mkLinGrad('ds-soil','0','0','0','1',\n        [['0','#8a6040'],['1','#5c3e28']]));\n      /* fence shadow */\n      defs.appendChild(mkRadGrad('ds-sh',\n        { cx:'50%', cy:'10%', r:'50%', gradientTransform:'scale(1,0.25)' },\n        [['0','rgba(0,0,0,0.22)','1'],['1','rgba(0,0,0,0)','1']]));\n      /* post face gradient (left=light, right=dark \u2192 3D tube feel) */\n      defs.appendChild(mkLinGrad('ds-post-face','0','0','1','0',\n        [['0',pal.hi],['0.35',pal.base],['0.75',pal.base],['1',pal.lo]]));\n      /* wire highlight (top=light bottom=dark) */\n      defs.appendChild(mkLinGrad('ds-wire-h','0','0','0','1',\n        [['0',pal.wireHi],['0.5',pal.wire],['1',pal.lo]]));\n      /* clip to fence area */\n      var clip = el('clipPath', { id:'ds-fence-clip' });\n      clip.appendChild(el('rect',{ x:OFFSET_X, y:FENCE_TOP, width:TOTAL_W, height:HEIGHT_PX+10 }));\n      defs.appendChild(clip);\n\n      svg.appendChild(defs);\n\n      /* \u2500\u2500 sky \u2500\u2500 */\n      svg.appendChild(el('rect',{ x:0, y:0, width:W, height:H, fill:'url(#ds-sky)' }));\n\n      /* \u2500\u2500 ground layers \u2500\u2500 */\n      var grassH = 18;\n      svg.appendChild(el('rect',{ x:0, y:GROUND_Y, width:W, height:H-GROUND_Y, fill:'url(#ds-soil)' }));\n      svg.appendChild(el('rect',{ x:0, y:GROUND_Y, width:W, height:grassH, fill:'url(#ds-gnd)' }));\n\n      /* subtle ground line */\n      svg.appendChild(el('line',{\n        x1:0, y1:GROUND_Y, x2:W, y2:GROUND_Y,\n        stroke:'rgba(0,0,0,0.10)', 'stroke-width':1\n      }));\n\n      /* \u2500\u2500 fence shadow ellipse \u2500\u2500 */\n      svg.appendChild(el('ellipse',{\n        cx: OFFSET_X + TOTAL_W/2, cy: GROUND_Y + 5,\n        rx: TOTAL_W * 0.48, ry: 12,\n        fill:'url(#ds-sh)'\n      }));\n\n      /* \u2500\u2500 wire layout \u2500\u2500 */\n      var H_WIRES = [0.04, 0.26, 0.50, 0.74, 0.96];\n      var PAIR_GAP = 8;\n      var V_STEP = 19;\n      var H_THICK = 4;\n      var V_THICK = 2;\n\n      var g = el('g', {});\n\n      for (var i = 0; i <= NUM_PANELS; i++) {\n        var px = OFFSET_X + i * PANEL_W;\n\n        if (i < NUM_PANELS) {\n          var wx = px + POST_W / 2;\n          var ww = PANEL_W - POST_W;\n\n          /* panel tint */\n          g.appendChild(el('rect',{\n            x: wx, y: FENCE_TOP, width: ww, height: HEIGHT_PX,\n            fill: pal.wire, opacity:'0.06'\n          }));\n\n          /* \u2500\u2500 vertical wires \u2500\u2500 */\n          for (var vx = wx + V_STEP * 0.7; vx < wx + ww - 4; vx += V_STEP) {\n            var vxr = Math.round(vx);\n            /* shadow wire */\n            g.appendChild(el('line',{\n              x1:vxr+1, y1:FENCE_TOP, x2:vxr+1, y2:FENCE_TOP+HEIGHT_PX,\n              stroke:pal.lo, 'stroke-width':V_THICK, opacity:'0.5'\n            }));\n            /* main wire */\n            g.appendChild(el('line',{\n              x1:vxr, y1:FENCE_TOP, x2:vxr, y2:FENCE_TOP+HEIGHT_PX,\n              stroke:'url(#ds-wire-h)', 'stroke-width':V_THICK\n            }));\n          }\n\n          /* \u2500\u2500 horizontal wire pairs (Doppelstab) \u2500\u2500 */\n          H_WIRES.forEach(function(frac) {\n            var wy = FENCE_TOP + frac * HEIGHT_PX;\n            [-PAIR_GAP/2, PAIR_GAP/2].forEach(function(off) {\n              var ry = Math.round(wy + off);\n              /* shadow */\n              g.appendChild(el('line',{\n                x1:wx, y1:ry+1.5, x2:wx+ww, y2:ry+1.5,\n                stroke:pal.lo, 'stroke-width':H_THICK, opacity:'0.45'\n              }));\n              /* top highlight */\n              g.appendChild(el('line',{\n                x1:wx, y1:ry-0.5, x2:wx+ww, y2:ry-0.5,\n                stroke:pal.wireHi, 'stroke-width':1, opacity:'0.7'\n              }));\n              /* main rod */\n              g.appendChild(el('line',{\n                x1:wx, y1:ry, x2:wx+ww, y2:ry,\n                stroke:pal.wire, 'stroke-width':H_THICK\n              }));\n            });\n          });\n        }\n\n        /* \u2500\u2500 post (3D face) \u2500\u2500 */\n        var postTop = FENCE_TOP - 12;\n        var postBot = GROUND_Y + 30;  /* buried in ground */\n        /* post shadow (right side) */\n        g.appendChild(el('rect',{\n          x: px - POST_W/2 + POST_W * 0.65, y: postTop,\n          width: POST_W * 0.38, height: postBot - postTop,\n          fill: pal.lo, opacity:'0.7', rx:1\n        }));\n        /* post body with face gradient */\n        g.appendChild(el('rect',{\n          x: px - POST_W/2, y: postTop,\n          width: POST_W, height: postBot - postTop,\n          fill:'url(#ds-post-face)', rx:2\n        }));\n        /* post cap */\n        g.appendChild(el('rect',{\n          x: px - POST_W/2 - 2, y: postTop - 8,\n          width: POST_W + 4, height: 9,\n          fill:'url(#ds-post-face)', rx:2\n        }));\n        /* cap top highlight */\n        g.appendChild(el('rect',{\n          x: px - POST_W/2 - 2, y: postTop - 9,\n          width: POST_W + 4, height: 2,\n          fill: pal.hi, rx:1, opacity:'0.8'\n        }));\n      }\n\n      svg.appendChild(g);\n\n      /* \u2500\u2500 height dimension indicator \u2500\u2500 */\n      var dimX = OFFSET_X - 28;\n      var midY = Math.round((FENCE_TOP + GROUND_Y) / 2);\n      svg.appendChild(el('line',{\n        x1:dimX, y1:FENCE_TOP, x2:dimX, y2:GROUND_Y,\n        stroke:'#6a8888', 'stroke-width':1, 'stroke-dasharray':'4 3'\n      }));\n      [FENCE_TOP, GROUND_Y].forEach(function(ty) {\n        svg.appendChild(el('line',{\n          x1:dimX-5, y1:ty, x2:dimX+5, y2:ty,\n          stroke:'#6a8888', 'stroke-width':1.5\n        }));\n      });\n      /* label bg pill */\n      var lblW = 46, lblH = 16;\n      svg.appendChild(el('rect',{\n        x:dimX-7-lblW/2, y:midY-lblH/2, width:lblW, height:lblH,\n        fill:'rgba(255,255,255,0.85)', rx:8\n      }));\n      svg.appendChild(txt('text',{\n        x:dimX-7, y:midY+4,\n        'text-anchor':'middle',\n        'font-family':'sans-serif', 'font-size':'11', fill:'#3a5a5a',\n        'font-weight':'700'\n      }, st.hoehe + ' mm'));\n\n      /* \u2500\u2500 info strip \u2500\u2500 */\n      var badgeParts = [];\n      if (st.drahtstaerke)  badgeParts.push(st.drahtstaerke);\n      if (st.hoehe)         badgeParts.push(st.hoehe + ' mm H\u00F6he');\n      if (st.zaunlaenge)    badgeParts.push(st.zaunlaenge + ' m L\u00E4nge');\n      if (panelCount(st))   badgeParts.push(panelCount(st) + ' Felder');\n      var badge = badgeParts.join('  \u00B7  ');\n      svg.appendChild(el('rect',{ x:0, y:H-34, width:W, height:34, fill:'rgba(255,255,255,0.88)' }));\n      svg.appendChild(el('line',{ x1:0, y1:H-34, x2:W, y2:H-34, stroke:pal.wire, 'stroke-width':2, opacity:'0.25' }));\n      /* colour dot */\n      svg.appendChild(el('circle',{ cx:18, cy:H-17, r:6, fill:pal.base }));\n      svg.appendChild(el('circle',{ cx:18, cy:H-17, r:6, fill:'none', stroke:pal.hi, 'stroke-width':1.5 }));\n      svg.appendChild(txt('text',{\n        x:30, y:H-12,\n        'font-family':'sans-serif', 'font-size':'12', fill:'#2a4040', 'font-weight':'600'\n      }, badge));\n\n      container.innerHTML = '';\n      container.appendChild(svg);\n    }\n    /* \u2500\u2500 END FENCE SIMULATION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n    /* \u2500\u2500 ANIMATED PRICE COUNTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n    var _priceAnimByEl = typeof WeakMap !== 'undefined' ? new WeakMap() : null;\n    var _priceAnimFallback = { raf: null, from: 0, to: 0, start: 0, dur: 600, el: null };\n    function animatePrice(el, targetCents) {\n      if (!el) return;\n      el.classList.remove('ds-cta__price-total--muted');\n      var anim = _priceAnimByEl ? _priceAnimByEl.get(el) : _priceAnimFallback;\n      if (!anim) {\n        anim = { raf: null, from: 0, to: 0, start: 0, dur: 600 };\n        if (_priceAnimByEl) _priceAnimByEl.set(el, anim);\n        else _priceAnimFallback = anim;\n      }\n      if (!_priceAnimByEl) anim.el = el;\n      cancelAnimationFrame(anim.raf);\n      anim.from = anim.to;\n      anim.to = targetCents;\n      anim.start = performance.now();\n      var targetEl = el;\n      function tick(now) {\n        var t = Math.min(1, (now - anim.start) / anim.dur);\n        var ease = t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n        var val = Math.round(anim.from + (anim.to - anim.from) * ease);\n        (targetEl || anim.el).textContent = money(val, moneyFormat);\n        if (t < 1) anim.raf = requestAnimationFrame(tick);\n      }\n      anim.raf = requestAnimationFrame(tick);\n    }\n    /* \u2500\u2500 END ANIMATED PRICE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n    function render() {\n      if (!concreteEnabled(state)) state.inklusiveBeton = false;\n      refreshPricingDomRefs();\n      syncBreakdownCells();\n      updateOptionButtons();\n      updateInputs();\n      updateMedia();\n      renderSummary();\n      schedulePriceUpdate();\n      drawFenceSim();\n      if (els.delivery) els.delivery.textContent = boot.standardDeliveryText || '';\n      if (els.express) {\n        var showEx = boot.showExpress !== false;\n        els.express.hidden = !showEx;\n        if (showEx) {\n          els.express.textContent =\n            (boot.expressDeliveryText || '') +\n            (boot.expressPriceCents\n              ? ' ' + money(boot.expressPriceCents, moneyFormat)\n              : '');\n        }\n      }\n    }\n\n    function submitCartItems(items) {\n      if (els.cartMsg) {\n        els.cartMsg.style.display = 'none';\n        els.cartMsg.textContent = '';\n      }\n      var expectedMap = buildExpectedVariantQtyMapDs(items);\n      var batches = packCartAddsByTotalQtyDs(items, CART_ADD_MAX_SUM_QUANTITY);\n      return cartAddBatchesSequentialDs(batches)\n            .then(function (addResult) {\n              if (addResult && addResult.formRedirect) return null;\n              return verifyCartVariantTotalsDs(expectedMap);\n            })\n            .then(function (shortLines) {\n              try {\n                document.dispatchEvent(new CustomEvent('cart:refresh'));\n              } catch (e) {}\n              if (shortLines && shortLines.length) {\n                if (els.cartMsg) {\n                  els.cartMsg.style.display = 'block';\n                  els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n                  els.cartMsg.textContent =\n                    'Nicht alle St\u00FCckzahlen wurden \u00FCbernommen. Bitte Warenkorb pr\u00FCfen oder Lagerbest\u00E4nde im Admin erh\u00F6hen.';\n                }\n                setCartButtonsDisabled(false);\n                return;\n              }\n              if (els.cartMsg) {\n                els.cartMsg.style.display = 'block';\n                els.cartMsg.textContent = boot.msgAdded || 'Zum Warenkorb hinzugef\u00FCgt.';\n                els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--ok';\n              }\n              if (boot.redirectAfterAdd !== false) {\n                window.location.href = cartUrlForRedirect(boot);\n              } else {\n                setCartButtonsDisabled(false);\n              }\n            })\n            .catch(function (err) {\n              if (els.cartMsg) {\n                els.cartMsg.style.display = 'block';\n                els.cartMsg.textContent = String(err.message || err);\n                els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n              }\n              setCartButtonsDisabled(false);\n            });\n    }\n\n    function handleCartClick() {\n      if (els.cartMsg) {\n        els.cartMsg.textContent = '';\n        els.cartMsg.className = 'doppelstab-konfigurator__msg';\n      }\n      setCartButtonsDisabled(true);\n      resolveCartLines(state)\n        .then(function (resolved) {\n          var items = [];\n          var props = buildLineItemProperties();\n          var first = true;\n          for (var i = 0; i < (resolved || []).length; i++) {\n            var row = resolved[i];\n            var id = row.id;\n            var qty = row.quantity;\n            if (!id || qty < 1) continue;\n            items.push({\n              id: id,\n              quantity: qty,\n              properties: first ? props : {},\n            });\n            first = false;\n          }\n\n          if (!items.length) {\n            setCartButtonsDisabled(false);\n            if (els.cartMsg) {\n              els.cartMsg.style.display = 'block';\n              els.cartMsg.textContent =\n                boot.msgNoMapping ||\n                'F\u00FCr diese Konfiguration ist noch kein Warenkorb-Mapping hinterlegt.';\n              els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n            }\n            return;\n          }\n\n          if (!state.mitMontage || !montageSurchargeCents(state)) {\n            return submitCartItems(items);\n          }\n\n          return resolveMontageCartLine(state).then(function (montageLine) {\n            if (!montageLine) {\n              setCartButtonsDisabled(false);\n              if (els.cartMsg) {\n                els.cartMsg.style.display = 'block';\n                els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n                els.cartMsg.textContent =\n                  boot.msgMontageVariantMissing ||\n                  'Montage ist gew\u00E4hlt, aber die Shop-Variante fehlt (SKU \u201Edoppelstab-montage-pro-panel\u201C, 100 \u20AC/Panel in \u201EKonfigurator Zubeh\u00F6r\u201C).';\n              }\n              return;\n            }\n            var montageId = String(montageLine.id);\n            var hasMontage = false;\n            for (var hm = 0; hm < items.length; hm++) {\n              if (String(items[hm].id) === montageId) {\n                hasMontage = true;\n                break;\n              }\n            }\n            if (!hasMontage) {\n              items.push({\n                id: montageLine.id,\n                quantity: montageLine.quantity,\n                properties: {\n                  Typ: 'Montage \u00B7 Doppelstab',\n                  Zaunelemente: String(panelCount(state)),\n                  Montageart: String(state.montageart),\n                  Mit_Montage: 'Ja',\n                },\n              });\n            }\n            return submitCartItems(items);\n          });\n        })\n        .catch(function () {\n          setCartButtonsDisabled(false);\n          if (els.cartMsg) {\n            els.cartMsg.style.display = 'block';\n            els.cartMsg.textContent =\n              boot.msgNoMapping ||\n              'F\u00FCr diese Konfiguration ist noch kein Warenkorb-Mapping hinterlegt.';\n            els.cartMsg.className = 'doppelstab-konfigurator__msg doppelstab-konfigurator__msg--error';\n          }\n        });\n    }\n\n    if (els.btnCart) els.btnCart.addEventListener('click', handleCartClick);\n    if (els.headlineCart) els.headlineCart.addEventListener('click', handleCartClick);\n    if (els.thumbsPrev) {\n      els.thumbsPrev.addEventListener('click', function () {\n        scrollThumbs(-1);\n      });\n    }\n    if (els.thumbsNext) {\n      els.thumbsNext.addEventListener('click', function () {\n        scrollThumbs(1);\n      });\n    }\n    if (els.thumbs) {\n      els.thumbs.addEventListener('scroll', updateThumbNavState);\n    }\n\n    function buildLineItemProperties() {\n      var h = normalizeHeight(state.hoehe);\n      return {\n        Konfiguration: 'Doppelstabmattenzaun',\n        Drahtstaerke: String(state.drahtstaerke),\n        Hoehe_mm: String(h),\n        Beschichtung: String(state.beschichtung),\n        Zaunlaenge_m: String(state.zaunlaenge),\n        Zaunelemente: String(panelCount(state)),\n        Pfostenausfuehrung: String(state.pfostenausfuehrung),\n        Montageart: String(state.montageart),\n        Zaunpfosten: String(state.anzahlZaunpfosten),\n        Eckpfosten: String(state.anzahlEckpfosten),\n        Pfostenkappen: String(state.pfostenkappen),\n        Mit_Montage: state.mitMontage ? 'Ja' : 'Nein',\n        Inkl_Beton: concreteEnabled(state) && state.inklusiveBeton ? 'Ja' : 'Nein',\n      };\n    }\n\n    render();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["state", "g"]
}
