{
  "version": 3,
  "sources": ["/cdn/shop/t/16/assets/r-meat-planner.js?rev=20260823-luna"],
  "sourcesContent": ["(() => {\n  const BASE_GRAMS = {\n    grill: 300,\n    steak: 220,\n    pan: 220,\n    braise: 250,\n    roast: 250,\n    burger: 200,\n  };\n\n  const LABELS = {\n    grill: 'Grillen',\n    steak: 'Steak',\n    pan: 'Pfannengericht',\n    braise: 'Schmoren',\n    roast: 'Braten',\n    burger: 'Burger',\n  };\n\n  const PREFERENCES = {\n    grill: {\n      lede: 'Steaks, Schwein oder eine Mischung: Was kommt auf deinen Rost?',\n      options: [\n        { value: 'mixed', eyebrow: 'F\u00FCr jeden etwas', label: 'Rind & Schwein', description: 'Ribeye, Flank und Halsgrat f\u00FCr deinen Grillabend.' },\n        { value: 'beef', eyebrow: 'Steaks im Mittelpunkt', label: 'Rind auf dem Rost', description: 'Rib-Eye und Flank f\u00FCr starke Hitze und saftige Scheiben.', handles: ['rib-eye', 'flanksteak-vom-rind'] },\n        { value: 'pork-lamb', eyebrow: 'Jenseits vom Steak', label: 'Schwein & Lamm', description: 'Halsgrat und Lammkoteletts f\u00FCr den Grill.', handles: ['halsgrat-vom-schwein', 'lammkotelett'] },\n      ],\n    },\n    steak: {\n      lede: 'Marmoriert, mager oder zum Aufschneiden?',\n      options: [\n        { value: 'juicy', eyebrow: 'Marmoriert', label: 'Saftig & marmoriert', description: 'Rib-Eye mit kr\u00E4ftigem Eigengeschmack.', handles: ['rib-eye'] },\n        { value: 'tender', eyebrow: 'Feine Faser', label: 'Fein & zart', description: 'Rinderfilet oder kleine Lammkoteletts.', handles: ['rinderfilet', 'lammkotelett'] },\n        { value: 'bold', eyebrow: 'Zum Aufschneiden', label: 'Zum Teilen', description: 'Flanksteak f\u00FCr die Platte und den Schnitt quer zur Faser.', handles: ['flanksteak-vom-rind'] },\n      ],\n    },\n    pan: {\n      lede: 'Kr\u00E4ftiges Rind, mildes Gefl\u00FCgel oder beides?',\n      options: [\n        { value: 'mixed', eyebrow: 'F\u00FCr Abwechslung', label: 'Gemischte Pfanne', description: 'Rind und Gefl\u00FCgel getrennt oder nacheinander zubereiten.' },\n        { value: 'beef', eyebrow: 'Sehr kurz gebraten', label: 'Kr\u00E4ftiges Rind', description: 'Ochsenfetzen f\u00FCr starke Hitze und kurze Garzeit.', handles: ['ochsenfetzen'] },\n        { value: 'poultry', eyebrow: 'Mild & vielseitig', label: 'Gefl\u00FCgel', description: 'Putenschnitzel f\u00FCr Pfanne, Streifen oder Geschnetzeltes.', handles: ['putenschnitzel'] },\n      ],\n    },\n    braise: {\n      lede: 'Selbst w\u00FCrfeln oder schon zugeschnitten?',\n      options: [\n        { value: 'mixed', eyebrow: 'Freie Auswahl', label: 'Schmortopf planen', description: 'Rinderwade und Gulasch vom Rind.' },\n        { value: 'wade', eyebrow: 'Kr\u00E4ftige Struktur', label: 'Rinderwade', description: 'F\u00FCr langes, ruhiges Schmoren und eine gehaltvolle Sauce.', handles: ['rinderwade'] },\n        { value: 'goulash', eyebrow: 'Schon zugeschnitten', label: 'Gulasch', description: 'Weniger Vorbereitung, direkt passend f\u00FCr den Topf.', handles: ['gulasch-vom-rind'] },\n      ],\n    },\n    roast: {\n      lede: 'Lamm oder Schwein f\u00FCr deinen Braten?',\n      options: [\n        { value: 'mixed', eyebrow: 'Noch offen', label: 'Lamm & Schwein', description: 'Lamm- und Schweinebraten f\u00FCr verschiedene Vorlieben.' },\n        { value: 'lamb', eyebrow: 'Festlicher', label: 'Lamm aus dem Ofen', description: 'Lammkeule als gemeinsamer Hauptgang f\u00FCr den Tisch.', handles: ['lammkeule'] },\n        { value: 'pork', eyebrow: 'Saftig & vertraut', label: 'Schweinebraten', description: 'Halsgrat oder Bratenst\u00FCck f\u00FCr Ofen und Br\u00E4ter.', handles: ['halsgrat-vom-schwein', 'schweinebraten'] },\n      ],\n    },\n    burger: {\n      lede: 'Rind pur oder Rind und Schwein?',\n      options: [\n        { value: 'mixed', eyebrow: 'F\u00FCr die Runde', label: 'Beides w\u00E4hlen', description: 'Rinderhack und gemischtes Hack zusammen ausw\u00E4hlen.' },\n        { value: 'beef', eyebrow: 'Klassischer Burger', label: 'Rind pur', description: 'Reines Rinderhack f\u00FCr Patties mit kr\u00E4ftigem Fleischgeschmack.', handles: ['rinderhackfleisch'] },\n        { value: 'blend', eyebrow: 'Rind & Schwein', label: 'Gemischtes Hack', description: 'F\u00FCr Frikadellen, Fleischpflanzerl und weichere Patties.', handles: ['hackfleisch-gemischt'] },\n      ],\n    },\n  };\n\n  const SIDE_FACTORS = { many: 0.82, normal: 1, few: 1.15 };\n  const MAX_ITEM_QUANTITY = 99;\n  const money = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });\n\n  const roundTo = (value, step) => Math.max(step, Math.round(value / step) * step);\n  const boundedInteger = (value, minimum, maximum, fallback) => {\n    const parsed = Number(value);\n    return Number.isFinite(parsed)\n      ? Math.max(minimum, Math.min(maximum, Math.round(parsed)))\n      : fallback;\n  };\n  const gramsLabel = (grams) => grams >= 1000\n    ? `${(grams / 1000).toLocaleString('de-DE', { maximumFractionDigits: 2 })} kg`\n    : `${grams} g`;\n  const variantLabel = (variant) => (\n    variant.title === 'Default Title' || /^\\s*[\\d.,]+\\s*k?g\\s*$/i.test(variant.title)\n      ? gramsLabel(variant.grams)\n      : variant.title\n  );\n  const escapeHtml = (value) => String(value ?? '').replace(/[&<>'\"]/g, (character) => ({\n    '&': '&amp;', '<': '&lt;', '>': '&gt;', \"'\": '&#39;', '\"': '&quot;',\n  }[character]));\n\n  const plannerRoots = document.querySelectorAll('[data-r-meat-planner]');\n  if (!plannerRoots.length) return;\n  document.documentElement.classList.add('r-meat-planner-page');\n  window.dataLayer = window.dataLayer || [];\n\n  plannerRoots.forEach((root) => {\n    const productNode = root.querySelector('[data-r-meat-planner-products]');\n    const form = root.querySelector('[data-r-meat-planner-form]');\n    const result = root.querySelector('[data-r-meat-planner-result]');\n    const resultTitle = root.querySelector('[data-r-meat-result-title]');\n    const list = root.querySelector('[data-r-meat-recommendations]');\n    const planSwitch = root.querySelector('[data-r-meat-plan-switch]');\n    const preferenceGrid = root.querySelector('[data-r-preference-grid]');\n    const preferenceInput = form.elements.preference;\n    const packageOption = root.querySelector('[data-r-shopping-option=\"package\"]');\n    const addButton = root.querySelector('[data-r-meat-add-cart]');\n    const copyButton = root.querySelector('[data-r-meat-copy-link]');\n    const status = root.querySelector('[data-r-meat-status]');\n    let products = [];\n    let current = null;\n    let planType = 'cuts';\n    let plannerStarted = false;\n\n    try {\n      products = JSON.parse(productNode.textContent).map((product) => ({\n        ...product,\n        variants: product.variants.filter((variant) => variant.available && variant.grams > 0),\n      }));\n    } catch (error) {\n      status.textContent = 'Die Produktauswahl konnte gerade nicht geladen werden.';\n      return;\n    }\n\n    const formValue = (name) => new FormData(form).get(name);\n    const addLabel = addButton.querySelector('[data-r-add-label]');\n    let currentStep = 1;\n    let advanceTimer = null;\n\n    const estimate = () => {\n      const mode = formValue('occasion') || 'grill';\n      const adults = boundedInteger(formValue('adults'), 1, 30, 1);\n      const children = boundedInteger(formValue('children'), 0, 30, 0);\n      const sides = formValue('sides') || 'normal';\n      const appetite = formValue('appetite') || 'normal';\n      const leftovers = formValue('leftovers') === 'yes';\n      const equivalentPeople = adults + (children * 0.55);\n      const factor = SIDE_FACTORS[sides] * (appetite === 'large' ? 1.2 : 1) * (leftovers ? 1.15 : 1);\n      const total = roundTo(equivalentPeople * BASE_GRAMS[mode] * factor, 50);\n      return { mode, adults, children, sides, appetite, leftovers, equivalentPeople, total };\n    };\n\n    const updateBar = () => {\n      const mode = formValue('occasion');\n      const occasionNext = root.querySelector('[data-r-step-next=\"2\"]');\n      occasionNext.disabled = !mode;\n      root.querySelectorAll('[data-r-planner-step]').forEach((panel) => {\n        const info = panel.querySelector('[data-r-bar-info]');\n        if (!info) return;\n        const step = Number(panel.dataset.rPlannerStep);\n        if (step === 1) {\n          info.textContent = mode ? `${LABELS[mode]} gew\u00E4hlt.` : 'W\u00E4hle ein Gericht.';\n        } else if (step === 2 && mode) {\n          info.textContent = `${LABELS[mode]} \u00B7 ${modePreference(mode).label}`;\n        } else if (step === 3 && mode) {\n          const { total, adults, children } = estimate();\n          const guests = adults + children;\n          info.innerHTML = `<small>${escapeHtml(LABELS[mode])} f\u00FCr ${guests} ${guests === 1 ? 'Person' : 'Personen'}</small><strong>rund ${escapeHtml(gramsLabel(total))}</strong>`;\n        }\n      });\n      syncDock();\n    };\n\n    // Mobile: a fixed bar repeats the next step while the step's own buttons are out of view.\n    const dock = document.createElement('div');\n    dock.className = 'r-meat-planner-dock';\n    dock.hidden = true;\n    dock.setAttribute('aria-hidden', 'true');\n    dock.innerHTML = '<p class=\"r-meat-planner-dock__info\"></p><button class=\"r-meat-planner-dock__next\" type=\"button\" tabindex=\"-1\"></button>';\n    document.body.append(dock);\n    const dockInfo = dock.querySelector('p');\n    const dockButton = dock.querySelector('button');\n    const dockMedia = window.matchMedia('(max-width: 749px)');\n    let panelVisible = false;\n    let actionsVisible = true;\n    const activePanel = () => (result.hidden ? root.querySelector('[data-r-planner-step].is-active') : result);\n    const activeActions = () => activePanel()?.querySelector(result.hidden ? '.r-meat-planner__step-actions' : '.r-meat-planner__actions');\n    const activePrimary = () => (result.hidden ? activeActions()?.querySelector('.r-btn') : addButton);\n\n    function syncDock() {\n      const primary = activePrimary();\n      if (!primary) {\n        dock.hidden = true;\n        return;\n      }\n      if (result.hidden) {\n        dockInfo.innerHTML = activePanel().querySelector('[data-r-bar-info]')?.innerHTML || '';\n        dockButton.textContent = currentStep === 3 ? 'Plan erstellen' : 'Weiter';\n      } else {\n        const weight = root.querySelector('[data-r-meat-basket-weight]').textContent;\n        const price = root.querySelector('[data-r-meat-basket-price]').textContent;\n        dockInfo.innerHTML = `<small>Deine Auswahl</small><strong>${escapeHtml(weight)} \u00B7 ${escapeHtml(price)}</strong>`;\n        dockButton.textContent = 'In den Warenkorb';\n      }\n      dockButton.disabled = primary.disabled;\n      dock.hidden = !(dockMedia.matches && panelVisible && !actionsVisible);\n    }\n\n    const panelObserver = new IntersectionObserver(([entry]) => {\n      panelVisible = entry.isIntersecting;\n      syncDock();\n    }, { rootMargin: '0px 0px -30% 0px' });\n    const actionsObserver = new IntersectionObserver(([entry]) => {\n      actionsVisible = entry.isIntersecting;\n      syncDock();\n    });\n    const watchDock = () => {\n      panelObserver.disconnect();\n      actionsObserver.disconnect();\n      const panel = activePanel();\n      const actions = activeActions();\n      if (panel) panelObserver.observe(panel);\n      if (actions) actionsObserver.observe(actions);\n    };\n    dockButton.addEventListener('click', () => activePrimary()?.click());\n    dockMedia.addEventListener?.('change', syncDock);\n\n    const updateMarkers = () => {\n      root.querySelectorAll('[data-r-step-jump]').forEach((button) => {\n        const step = Number(button.dataset.rStepJump);\n        const value = button.querySelector('[data-r-step-value]');\n        const mode = formValue('occasion');\n        let chosen = '';\n        if (step === 1 && mode) chosen = LABELS[mode];\n        if (step === 2 && mode) chosen = modePreference(mode).label;\n        if (step === 3 && current) chosen = `${current.adults + current.children} Personen`;\n        const done = step < currentStep || (step === 3 && !result.hidden);\n        button.disabled = !done || (step === currentStep && result.hidden);\n        value.textContent = done && chosen ? chosen : value.dataset.question;\n        button.closest('li').classList.toggle('has-value', done && Boolean(chosen));\n      });\n    };\n    const quantityValue = (input, writeBack = false) => {\n      const quantity = boundedInteger(input.value, 1, MAX_ITEM_QUANTITY, 1);\n      if (writeBack) input.value = quantity;\n      return quantity;\n    };\n    const modePreference = (mode, value = preferenceInput.value) => (\n      PREFERENCES[mode].options.find((option) => option.value === value) || PREFERENCES[mode].options[0]\n    );\n\n    const activeProducts = (mode, group = null) => products.filter((product) => (\n      product.modes.includes(mode)\n      && product.variants.length > 0\n      && (!group || product.group === group)\n    ));\n\n    const modeHasPackage = (mode) => activeProducts(mode, 'package').length > 0;\n\n    const showStep = (step, scroll = false) => {\n      currentStep = step;\n      let activePanel = null;\n      root.querySelectorAll('[data-r-planner-step]').forEach((panel) => {\n        const active = Number(panel.dataset.rPlannerStep) === step;\n        panel.hidden = !active;\n        panel.classList.toggle('is-active', active);\n        if (active) activePanel = panel;\n      });\n      root.querySelectorAll('[data-r-step-marker]').forEach((marker) => {\n        const markerStep = Number(marker.dataset.rStepMarker);\n        marker.classList.toggle('is-active', markerStep === step);\n        marker.classList.toggle('is-complete', markerStep < step);\n        markerStep === step ? marker.setAttribute('aria-current', 'step') : marker.removeAttribute('aria-current');\n      });\n      updateMarkers();\n      updateBar();\n      watchDock();\n      if (scroll) {\n        form.scrollIntoView({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'start' });\n        activePanel?.focus({ preventScroll: true });\n      }\n    };\n\n    const updateShoppingView = () => {\n      const hasPackage = modeHasPackage(formValue('occasion') || 'grill');\n      root.querySelector('[data-r-preference-fieldset]').hidden = false;\n      root.querySelector('.r-meat-planner__plan-fieldset').hidden = true;\n      root.querySelector('[data-r-preference-fieldset] legend > span').textContent = '02';\n    };\n    form.querySelectorAll('[name=\"shopping_style\"]').forEach((input) => input.addEventListener('change', updateShoppingView));\n\n    const renderPreferences = (preferredValue = null) => {\n      const mode = formValue('occasion') || 'grill';\n      const config = PREFERENCES[mode];\n      const selectedValue = config.options.some((option) => option.value === preferredValue)\n        ? preferredValue\n        : config.options[0].value;\n      root.querySelector('[data-r-preference-lede]').textContent = config.lede;\n      preferenceGrid.innerHTML = config.options.map((option, index) => {\n        const plannedCuts = activeProducts(mode, 'cut').filter((product) => !option.handles || option.handles.includes(product.handle)).slice(0, mode === 'grill' && !option.handles ? 3 : 2);\n        const candidates = plannedCuts.length > 2 ? [plannedCuts[0], plannedCuts[plannedCuts.length - 1]] : plannedCuts;\n        const photos = candidates.map((product) => `<img src=\"${escapeHtml(product.image)}\" alt=\"${escapeHtml(product.title)}\" width=\"360\" height=\"240\" loading=\"lazy\">`).join('');\n        return `\n        <label class=\"r-meat-planner__preference-card\">\n          <input type=\"radio\" name=\"preference_choice\" value=\"${escapeHtml(option.value)}\"${option.value === selectedValue ? ' checked' : ''}>\n          <span class=\"r-meat-planner__preference-photos\">${photos || '<span>Zurzeit nicht verf\u00FCgbar</span>'}</span>\n          <span class=\"r-meat-planner__preference-copy\">\n            <small>${String(index + 1).padStart(2, '0')} \u00B7 ${escapeHtml(option.eyebrow)}</small>\n            <strong>${escapeHtml(option.label)}</strong>\n            <span>${escapeHtml(option.description)}</span>\n          </span>\n        </label>\n      `;\n      }).join('');\n      preferenceInput.value = selectedValue;\n      preferenceGrid.querySelectorAll('input').forEach((input) => input.addEventListener('change', () => {\n        preferenceInput.value = input.value;\n        updateBar();\n      }));\n\n      const hasPackage = modeHasPackage(mode);\n      packageOption.hidden = !hasPackage;\n      packageOption.querySelector('input').disabled = !hasPackage;\n      if (!hasPackage || formValue('shopping_style') === null) {\n        form.elements.shopping_style.value = 'cuts';\n      }\n      updateShoppingView();\n    };\n\n    const chooseVariant = (product, targetGrams) => {\n      let best = null;\n      product.variants.forEach((variant) => {\n        const maxQuantity = Math.min(MAX_ITEM_QUANTITY, Math.max(1, Math.ceil(targetGrams / variant.grams) + 1));\n        for (let quantity = 1; quantity <= maxQuantity; quantity += 1) {\n          const planned = variant.grams * quantity;\n          const shortfallPenalty = planned < targetGrams ? (targetGrams - planned) * 0.45 : 0;\n          const score = Math.abs(planned - targetGrams) + shortfallPenalty;\n          if (\n            !best\n            || score < best.score\n            || (score === best.score && (quantity < best.quantity || (quantity === best.quantity && planned < best.planned)))\n          ) {\n            best = { variant, quantity, planned, score };\n          }\n        }\n      });\n      return best;\n    };\n\n    const packagePlan = () => activeProducts(current.mode, 'package')\n      .map((product) => ({ product, choice: chooseVariant(product, current.total) }))\n      .filter((item) => item.choice)\n      .sort((a, b) => a.choice.score - b.choice.score)\n      .slice(0, 1);\n\n    const cutPlan = () => {\n      const preference = modePreference(current.mode, current.preference);\n      const allCuts = activeProducts(current.mode, 'cut');\n      const cuts = preference.handles\n        ? allCuts.filter((product) => preference.handles.includes(product.handle))\n        : allCuts;\n      if (!cuts.length) return [];\n      const preferredCount = current.mode === 'grill' && !preference.handles ? 3 : 2;\n      const count = Math.min(preferredCount, cuts.length);\n      const target = current.total / count;\n      return cuts.slice(0, count).map((product) => ({\n        product,\n        choice: chooseVariant(product, target),\n      })).filter((item) => item.choice);\n    };\n\n    const recommendationCard = ({ product, choice }) => {\n      const options = product.variants.map((variant) => (\n        `<option value=\"${variant.id}\" data-grams=\"${variant.grams}\" data-price=\"${variant.price}\"${variant.id === choice.variant.id ? ' selected' : ''}>${escapeHtml(variantLabel(variant))} \u00B7 ${money.format(variant.price / 100)}</option>`\n      )).join('');\n      return `\n        <article class=\"r-meat-planner__product\" data-r-meat-product>\n          <img class=\"r-meat-planner__product-image\" src=\"${escapeHtml(product.image)}\" alt=\"${escapeHtml(product.title)}\" loading=\"lazy\" width=\"112\" height=\"112\">\n          <div class=\"r-meat-planner__product-copy\">\n            <h4><a href=\"${escapeHtml(product.url)}\">${escapeHtml(product.title)}</a></h4>\n            <p>${escapeHtml(product.note)}</p>\n          </div>\n          <div class=\"r-meat-planner__product-choice\">\n            <label class=\"r-meat-planner__product-toggle\">\n              <input type=\"checkbox\" data-r-product-selected checked>\n              <span>Ausgew\u00E4hlt</span>\n            </label>\n            <select aria-label=\"Gewicht f\u00FCr ${escapeHtml(product.title)}\" data-r-product-variant>${options}</select>\n            <label class=\"r-meat-planner__quantity\"><span>Anzahl</span><input type=\"number\" aria-label=\"Anzahl f\u00FCr ${escapeHtml(product.title)}\" min=\"1\" max=\"${MAX_ITEM_QUANTITY}\" step=\"1\" value=\"${choice.quantity}\" data-r-product-quantity></label>\n          </div>\n        </article>\n      `;\n    };\n\n    const updateBasket = () => {\n      let weight = 0;\n      let price = 0;\n      list.querySelectorAll('[data-r-meat-product]').forEach((card) => {\n        if (!card.querySelector('[data-r-product-selected]').checked) return;\n        const option = card.querySelector('[data-r-product-variant]').selectedOptions[0];\n        const quantity = quantityValue(card.querySelector('[data-r-product-quantity]'));\n        weight += Number(option.dataset.grams) * quantity;\n        price += Number(option.dataset.price) * quantity;\n      });\n      root.querySelector('[data-r-meat-basket-weight]').textContent = gramsLabel(weight);\n      root.querySelector('[data-r-meat-basket-price]').textContent = money.format(price / 100);\n      const delta = weight - (current?.total || weight);\n      const deltaNode = root.querySelector('[data-r-meat-basket-delta]');\n      deltaNode.textContent = delta === 0\n        ? 'Deine Auswahl entspricht der ben\u00F6tigten Menge.'\n        : `Du hast ${gramsLabel(Math.abs(delta))} ${delta < 0 ? 'weniger' : 'mehr'} ausgew\u00E4hlt als ungef\u00E4hr ben\u00F6tigt.`;\n      const scale = Math.max(current?.total || 0, weight, 1);\n      root.querySelector('[data-r-target-bar]').style.width = `${((current?.total || 0) / scale) * 100}%`;\n      root.querySelector('[data-r-selected-bar]').style.width = `${(weight / scale) * 100}%`;\n      root.querySelector('[data-r-target-label]').textContent = `Ben\u00F6tigt: ca. ${gramsLabel(current?.total || 0)}`;\n      root.querySelector('[data-r-selected-label]').textContent = `Ausgew\u00E4hlt: ${gramsLabel(weight)}`;\n      addButton.disabled = weight === 0;\n      if (addLabel) addLabel.textContent = weight ? `In den Warenkorb \u00B7 ${money.format(price / 100)}` : 'Auswahl in den Warenkorb';\n      syncDock();\n    };\n\n    const renderPlan = () => {\n      const plan = planType === 'package' ? packagePlan() : cutPlan();\n      list.innerHTML = plan.length\n        ? plan.map(recommendationCard).join('')\n        : '<p>Diese St\u00FCcke sind gerade nicht verf\u00FCgbar. W\u00E4hle anderes Fleisch oder sieh im Sortiment nach.</p>';\n      list.querySelectorAll('input, select').forEach((control) => control.addEventListener('change', updateBasket));\n      list.querySelectorAll('[data-r-product-quantity]').forEach((input) => input.addEventListener('change', () => {\n        quantityValue(input, true);\n      }));\n      updateBasket();\n    };\n\n    const updateUrl = () => {\n      const params = new URLSearchParams(window.location.search);\n      params.delete('ux');\n      params.delete('qa');\n      params.delete('final');\n      params.set('plan', current.mode);\n      params.set('preference', current.preference);\n      params.set('style', planType);\n      params.set('adults', current.adults);\n      params.set('children', current.children);\n      params.set('sides', current.sides);\n      params.set('appetite', current.appetite);\n      current.leftovers ? params.set('leftovers', '1') : params.delete('leftovers');\n      history.replaceState({}, '', `${window.location.pathname}?${params.toString()}#fleischplaner`);\n    };\n\n    const calculate = () => {\n      const {\n        mode, adults, children, sides, appetite, leftovers, equivalentPeople, total,\n      } = estimate();\n      const preference = preferenceInput.value || PREFERENCES[mode].options[0].value;\n      form.elements.adults.value = adults;\n      form.elements.children.value = children;\n      const perAdult = roundTo(total / equivalentPeople, 10);\n      const packages = activeProducts(mode, 'package');\n      const preferredPlanType = formValue('shopping_style') || 'cuts';\n      planType = preferredPlanType === 'package' && packages.length ? 'package' : 'cuts';\n      current = { mode, preference, adults, children, sides, appetite, leftovers, total, perAdult };\n\n      const guests = adults + children;\n      const preferenceLabel = modePreference(mode, preference).label;\n      root.querySelector('[data-r-meat-total]').textContent = gramsLabel(total);\n      resultTitle.textContent = `${LABELS[mode]} f\u00FCr ${guests} ${guests === 1 ? 'Person' : 'Personen'}.`;\n      root.querySelector('[data-r-meat-explanation]').textContent = `Etwa ${gramsLabel(perAdult)} Rohgewicht pro erwachsener Portion. Deine Angaben zu Kindern, Beilagen, Appetit und Resten sind eingerechnet.`;\n      root.querySelector('[data-r-result-mode]').textContent = LABELS[mode];\n      root.querySelector('[data-r-result-preference]').textContent = preferenceLabel;\n      root.querySelector('[data-r-result-guests]').textContent = `${adults} Erw. \u00B7 ${children === 1 ? '1 Kind' : `${children} Kinder`}`;\n      form.hidden = true;\n      result.hidden = false;\n      planSwitch.hidden = !packages.length;\n      planSwitch.querySelectorAll('[data-r-plan-type]').forEach((button) => {\n        const active = button.dataset.rPlanType === planType;\n        button.classList.toggle('is-active', active);\n        button.setAttribute('aria-pressed', String(active));\n      });\n      status.textContent = '';\n      renderPlan();\n      updateUrl();\n      updateMarkers();\n      watchDock();\n      window.dataLayer?.push({\n        event: 'meat_planner_calculated',\n        planner_mode: mode,\n        planner_preference: preference,\n        planner_style: planType,\n        planner_grams: total,\n      });\n    };\n\n    root.querySelectorAll('[name=\"occasion\"]').forEach((input) => input.addEventListener('change', () => {\n      renderPreferences();\n    }));\n\n    const goForward = (target) => {\n      window.clearTimeout(advanceTimer);\n      advanceTimer = null;\n      if (target === 2) renderPreferences();\n      showStep(target, true);\n      if (!plannerStarted) {\n        plannerStarted = true;\n        window.dataLayer?.push({ event: 'meat_planner_started', planner_mode: formValue('occasion') || 'grill' });\n      }\n      window.dataLayer?.push({ event: 'meat_planner_step_view', planner_step: target, planner_direction: 'forward' });\n    };\n\n    root.querySelectorAll('[data-r-step-next]').forEach((button) => button.addEventListener('click', () => {\n      goForward(Number(button.dataset.rStepNext));\n    }));\n\n    // A tap on a dish or meat card moves on; keyboard selection stays on the step.\n    [['.r-meat-planner__occasion-grid', 2], ['[data-r-preference-grid]', 3]].forEach(([selector, target]) => {\n      root.querySelector(selector)?.addEventListener('click', (event) => {\n        if (event.detail === 0 || event.target.matches('input') || !event.target.closest('label') || advanceTimer) return;\n        advanceTimer = window.setTimeout(() => goForward(target), 260);\n      });\n    });\n\n    root.querySelectorAll('[data-r-step-jump]').forEach((button) => button.addEventListener('click', () => {\n      const target = Number(button.dataset.rStepJump);\n      if (!result.hidden) {\n        form.hidden = false;\n        result.hidden = true;\n      }\n      showStep(target, true);\n      window.dataLayer?.push({ event: 'meat_planner_step_view', planner_step: target, planner_direction: 'back' });\n    }));\n\n    root.querySelectorAll('[data-r-step-back]').forEach((button) => button.addEventListener('click', () => {\n      const target = Number(button.dataset.rStepBack);\n      showStep(target, true);\n      window.dataLayer?.push({ event: 'meat_planner_step_view', planner_step: target, planner_direction: 'back' });\n    }));\n\n    root.querySelectorAll('[data-r-stepper]').forEach((button) => button.addEventListener('click', () => {\n      const input = form.elements[button.dataset.rStepper];\n      const direction = button.dataset.direction === 'up' ? 1 : -1;\n      const minimum = Number(input.min);\n      const maximum = Number(input.max);\n      input.value = boundedInteger(input.value, minimum, maximum, minimum) + direction;\n      input.value = boundedInteger(input.value, minimum, maximum, minimum);\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    }));\n\n    form.addEventListener('submit', (event) => {\n      event.preventDefault();\n      calculate();\n      result.scrollIntoView({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'start' });\n      resultTitle.focus({ preventScroll: true });\n    });\n\n    planSwitch.querySelectorAll('[data-r-plan-type]').forEach((button) => {\n      button.addEventListener('click', () => {\n        planType = button.dataset.rPlanType;\n        form.elements.shopping_style.value = planType;\n        planSwitch.querySelectorAll('[data-r-plan-type]').forEach((item) => {\n          const active = item === button;\n          item.classList.toggle('is-active', active);\n          item.setAttribute('aria-pressed', String(active));\n        });\n        renderPlan();\n        updateUrl();\n        window.dataLayer?.push({ event: 'meat_planner_style_changed', planner_style: planType });\n      });\n    });\n\n    root.querySelector('[data-r-edit-plan]').addEventListener('click', () => {\n      form.hidden = false;\n      result.hidden = true;\n      showStep(1, true);\n    });\n    addButton.addEventListener('click', () => { dock.hidden = true; });\n    form.addEventListener('change', updateBar);\n    ['adults', 'children'].forEach((name) => form.elements[name].addEventListener('input', updateBar));\n\n    addButton.addEventListener('click', async () => {\n      const items = [];\n      list.querySelectorAll('[data-r-meat-product]').forEach((card) => {\n        if (!card.querySelector('[data-r-product-selected]').checked) return;\n        const variant = card.querySelector('[data-r-product-variant]').value;\n        const quantity = quantityValue(card.querySelector('[data-r-product-quantity]'), true);\n        items.push({\n          id: Number(variant),\n          quantity,\n          properties: {\n            _Fleischplaner: `${LABELS[current.mode]} \u00B7 ${modePreference(current.mode, current.preference).label} \u00B7 ${current.adults} Erwachsene \u00B7 ${current.children} Kinder`,\n          },\n        });\n      });\n      if (!items.length) return;\n\n      addButton.disabled = true;\n      addButton.setAttribute('aria-busy', 'true');\n      status.textContent = 'Die Metzgerliste wird in den Warenkorb gelegt \u2026';\n      try {\n        const response = await fetch(`${window.Shopify?.routes?.root || '/'}cart/add.js`, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items }),\n        });\n        if (!response.ok) {\n          throw new Error('planner_inventory_changed');\n        }\n        window.dataLayer?.push({\n          event: 'meat_planner_add_to_cart',\n          planner_mode: current.mode,\n          planner_preference: current.preference,\n          planner_items: items.length,\n        });\n        window.location.assign(`${window.Shopify?.routes?.root || '/'}cart`);\n      } catch (error) {\n        status.textContent = error.message === 'planner_inventory_changed'\n          ? 'Der Bestand hat sich m\u00F6glicherweise ge\u00E4ndert. Bitte lade die Seite neu und erstelle deine Metzgerliste noch einmal.'\n          : 'Der Warenkorb konnte gerade nicht erstellt werden. Bitte versuche es erneut oder \u00F6ffne die Produkte einzeln.';\n        addButton.disabled = false;\n        addButton.removeAttribute('aria-busy');\n      }\n    });\n\n    copyButton.addEventListener('click', async () => {\n      try {\n        await navigator.clipboard.writeText(window.location.href);\n        status.textContent = 'Der Ergebnislink ist kopiert.';\n        window.dataLayer?.push({ event: 'meat_planner_link_copied', planner_mode: current?.mode || formValue('occasion') || 'grill' });\n      } catch (error) {\n        status.textContent = 'Kopiere den Link bitte direkt aus der Adresszeile.';\n      }\n    });\n\n    const renderTable = () => {\n      const adults = boundedInteger(form.elements.adults.value, 1, 30, 1);\n      const children = boundedInteger(form.elements.children.value, 0, 30, 0);\n      root.querySelector('[data-r-table-guests]').textContent = `${adults} ${adults === 1 ? 'Erwachsene Person' : 'Erwachsene'}${children ? ` \u00B7 ${children} ${children === 1 ? 'Kind' : 'Kinder'}` : ''}`;\n      const drawing = root.querySelector('[data-r-plate-drawing]').innerHTML;\n      const seats = [...Array(adults).fill(false), ...Array(children).fill(true)];\n      root.querySelector('[data-r-table-plates]').innerHTML = seats.slice(0, 8).map((child) => `<span class=\"r-meat-planner__plate${child ? ' is-child' : ''}\">${drawing}</span>`).join('') + (seats.length > 8 ? `<span>+ ${seats.length - 8}</span>` : '');\n    };\n    ['adults', 'children'].forEach((name) => form.elements[name].addEventListener('input', renderTable));\n    form.addEventListener('change', renderTable);\n    renderTable();\n    renderPreferences();\n\n    const params = new URLSearchParams(window.location.search);\n    if (params.has('plan') && PREFERENCES[params.get('plan')]) {\n      const modeInput = form.querySelector(`[name=\"occasion\"][value=\"${params.get('plan')}\"]`);\n      if (modeInput) modeInput.checked = true;\n      renderPreferences(params.get('preference'));\n      ['adults', 'children'].forEach((name) => {\n        if (params.has(name)) form.elements[name].value = params.get(name);\n      });\n      ['sides', 'appetite'].forEach((name) => {\n        if (params.has(name)) form.elements[name].value = params.get(name);\n      });\n      if (params.get('style') === 'package' && modeHasPackage(params.get('plan'))) {\n        form.elements.shopping_style.value = 'package';\n      }\n      form.elements.leftovers.checked = params.get('leftovers') === '1';\n      renderTable();\n      showStep(3);\n      calculate();\n    } else if (params.has('start') && PREFERENCES[params.get('start')]) {\n      const modeInput = form.querySelector(`[name=\"occasion\"][value=\"${params.get('start')}\"]`);\n      if (modeInput) modeInput.checked = true;\n      renderPreferences();\n      showStep(2);\n      // Land on step 2 even when images above shift the layout; never fight the visitor's own scrolling.\n      let touched = false;\n      ['wheel', 'touchstart', 'keydown'].forEach((type) => window.addEventListener(type, () => { touched = true; }, { once: true, passive: true }));\n      const settle = () => { if (!touched) form.scrollIntoView({ block: 'start' }); };\n      window.requestAnimationFrame(settle);\n      if (document.readyState !== 'complete') window.addEventListener('load', settle, { once: true });\n    } else {\n      updateBar();\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": ["activePanel", "params"]
}
