{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/cs-watering-planner.js?cs=cs_watering_modes_20260719x"],
  "sourcesContent": ["import { calculateWateringPlan } from './cs-watering-engine.js?v=cs-living-soil-watering-v1-0-0-20260719d';\n\nconst STORAGE_TRANSFER_KEY = 'cs-watering-transfer-v1';\nconst MODEL_VERSION = 'cs-living-soil-watering-v1.0.0';\n\nconst WATERING_COPY = {\n  en: {\n    'Wurzelraum': 'Root zone', 'Pflanze': 'Plant', 'Feuchte': 'Moisture', 'Gie\u00DFen': 'Watering', 'Warnsignale': 'Warning signs', 'Basis': 'Basics', 'Feuchtebild': 'Moisture picture', 'Pflanze & Klima': 'Plant & climate', 'Gie\u00DFmenge': 'Water amount',\n    'Zur\u00FCck': 'Back', 'Weiter': 'Next', 'Zur\u00FCcksetzen': 'Reset', 'Neu auswerten': 'Recalculate', 'Angaben bearbeiten': 'Edit answers', 'Neue Einsch\u00E4tzung starten': 'Start a new estimate', 'Angaben pr\u00FCfen': 'Check answers', 'Abbrechen': 'Cancel', 'Fortsetzen': 'Continue', 'Verwerfen': 'Discard', 'Wird ausgewertet ...': 'Calculating ...', 'Gie\u00DF-Check auswerten': 'Calculate water check',\n    'Schneller Check': 'Quick check', 'Expert-Modus': 'Expert mode', 'Modus w\u00E4hlen': 'Choose a mode', 'wenige Fragen, schnelle Einsch\u00E4tzung': 'Fewer questions, quick estimate', 'mehr Details f\u00FCr genaue Pr\u00FCfung': 'More detail for a closer check', 'Schritt': 'Step', 'von': 'of',\n    'Anbausystem': 'Growing system', 'Ablauf / Drainage': 'Runoff / drainage', 'Ablauf': 'Runoff', 'Wasserablauf': 'Water runoff', 'Substratvolumen': 'Substrate volume', 'Pflanzen im System': 'Plants in the system', 'Pflanzenanzahl': 'Number of plants', 'Gie\u00DFart': 'Watering method', 'Tropfer / Gie\u00DFpunkte': 'Drippers / watering points', 'Liter': 'litres', 'Pflanzen': 'plants', 'St\u00FCck': 'units',\n    'System und Ablauf': 'System and runoff', 'Volumen und Pflanzen': 'Volume and plants', 'Grunddaten': 'Basic data', 'Stadium und Ablauf': 'Stage and runoff', 'Pflanzenstadium': 'Plant stage', 'Pflanzenphase': 'Plant phase', 'Pflanzengr\u00F6\u00DFe': 'Plant size', 'Aktueller Zuwachs': 'Current growth', 'Pflanzenreaktion': 'Plant response', 'Verbrauchstrend': 'Consumption trend', 'Wasserverbrauch': 'Water consumption', 'Klima': 'Climate', 'Lichtintensit\u00E4t': 'Light intensity', 'Luftbewegung': 'Air movement',\n    'Aktiv durchwurzelter Anteil': 'Rooted share', 'Durchwurzelter Anteil': 'Rooted share', 'Warum das wichtig ist': 'Why this matters', 'Kontrollmethode': 'Control method', 'Oberfl\u00E4che': 'Surface', 'Mitte des Substrats': 'Middle of the substrate', 'Mitte': 'Middle', 'Tiefe Zone': 'Deep zone', 'Tiefe': 'Deep zone', 'Feuchteverteilung': 'Moisture distribution', 'Steht Wasser im System?': 'Is water standing in the system?', 'Wasser l\u00E4uft sofort durch?': 'Does water run straight through?', 'Rand l\u00F6st sich / Spalten?': 'Gap at the edge?', 'Mulch / Oberfl\u00E4che': 'Mulch / surface', 'Cover Crop aktiv?': 'Cover crop active?', 'Wurzelbereich darunter': 'Root zone below',\n    'Letzte Wassergabe vor': 'Last watering was', 'Letzte Wassermenge': 'Last water amount', 'Zeitpunkt nicht sicher': 'Time unclear', 'Menge nicht sicher': 'Amount unclear', 'Letztes Gie\u00DFmuster': 'Last watering pattern', 'Bew\u00E4sserte Fl\u00E4che': 'Watered area', 'Drain beim letzten Gie\u00DFen': 'Runoff last time', 'Drain beim Gie\u00DFen': 'Runoff while watering', 'Gemessener Ablauf': 'Measured runoff', 'Substratstruktur': 'Substrate structure', 'Trauerm\u00FCcken sichtbar?': 'Fungus gnats visible?', 'Substratgeruch': 'Substrate smell', 'Wurzelbeobachtung': 'Root observation', 'K\u00FCrzliche \u00C4nderungen': 'Recent changes', 'Warnzeichen optional erg\u00E4nzen': 'Add warning signs (optional)',\n    'Auswertung': 'Result', 'Empfehlung': 'Recommendation', 'Aktiver Wurzelraum': 'Active root zone', 'Erneut kontrollieren': 'Check again', 'Sicherheit': 'Confidence', 'Gie\u00DFweise': 'Watering method', 'Bew\u00E4sserungsfl\u00E4che': 'Watering area', 'Obergrenze beim Wiederanfeuchten': 'Upper limit when rehydrating', 'Warum diese Einsch\u00E4tzung?': 'Why this result?', 'Wichtige Hinweise': 'Important notes', 'Fehlende Angaben': 'Missing information', 'N\u00E4chste Schritte': 'Next steps', 'Passende Artikel': 'Related articles', 'Bearbeiten-\u00DCbersicht schlie\u00DFen': 'Close edit overview', 'Welche Eingabe m\u00F6chtest du anpassen?': 'Which answer would you like to change?', 'Angaben bearbeiten': 'Edit answers', 'keine ausgew\u00E4hlt': 'none selected', 'nicht angegeben': 'not provided', 'nicht sicher': 'unclear', 'Bitte pr\u00FCfe diese Angaben:': 'Please check these answers:', 'Auswertung nicht abgeschlossen': 'Calculation not completed', 'Erneut auswerten': 'Calculate again',\n    'CannaSelection Gie\u00DF-Check': 'CannaSelection Water Check', 'Living Soil Wasserbedarfsrechner': 'Living Soil Water Calculator', 'Wasserbedarf einsch\u00E4tzen, \u00DCberw\u00E4sserung vermeiden und den aktiven Wurzelraum richtig versorgen.': 'Estimate water needs, avoid overwatering and supply the active root zone correctly.', 'Gie\u00DF-Check starten': 'Start water check', 'So funktioniert der Rechner': 'How the calculator works', 'Vollst\u00E4ndige Auswertung \u00F6ffnen': 'Open full result', 'Einklappen': 'Collapse', 'Dein letzter Gie\u00DF-Check ist noch vorhanden.': 'Your last water check is still available.', 'Deine Angaben bleiben in dieser Sitzung erhalten.': 'Your answers remain available in this session.'\n  },\n  es: {\n    'Wurzelraum': 'Zona radicular', 'Pflanze': 'Planta', 'Feuchte': 'Humedad', 'Gie\u00DFen': 'Riego', 'Warnsignale': 'Se\u00F1ales de alerta', 'Basis': 'Base', 'Feuchtebild': 'Estado de humedad', 'Pflanze & Klima': 'Planta y clima', 'Gie\u00DFmenge': 'Cantidad de agua',\n    'Zur\u00FCck': 'Atr\u00E1s', 'Weiter': 'Siguiente', 'Zur\u00FCcksetzen': 'Restablecer', 'Neu auswerten': 'Recalcular', 'Angaben bearbeiten': 'Editar respuestas', 'Neue Einsch\u00E4tzung starten': 'Iniciar una nueva estimaci\u00F3n', 'Angaben pr\u00FCfen': 'Comprobar respuestas', 'Abbrechen': 'Cancelar', 'Fortsetzen': 'Continuar', 'Verwerfen': 'Descartar', 'Wird ausgewertet ...': 'Calculando ...', 'Gie\u00DF-Check auswerten': 'Calcular control de riego',\n    'Schneller Check': 'Control r\u00E1pido', 'Expert-Modus': 'Modo experto', 'Modus w\u00E4hlen': 'Elegir modo', 'wenige Fragen, schnelle Einsch\u00E4tzung': 'Pocas preguntas, estimaci\u00F3n r\u00E1pida', 'mehr Details f\u00FCr genaue Pr\u00FCfung': 'M\u00E1s detalles para una revisi\u00F3n precisa', 'Schritt': 'Paso', 'von': 'de',\n    'Anbausystem': 'Sistema de cultivo', 'Ablauf / Drainage': 'Drenaje', 'Ablauf': 'Drenaje', 'Wasserablauf': 'Salida de agua', 'Substratvolumen': 'Volumen de sustrato', 'Pflanzen im System': 'Plantas en el sistema', 'Pflanzenanzahl': 'N\u00FAmero de plantas', 'Gie\u00DFart': 'Forma de riego', 'Tropfer / Gie\u00DFpunkte': 'Goteros / puntos de riego', 'Liter': 'litros', 'Pflanzen': 'plantas', 'St\u00FCck': 'unidades',\n    'System und Ablauf': 'Sistema y drenaje', 'Volumen und Pflanzen': 'Volumen y plantas', 'Grunddaten': 'Datos b\u00E1sicos', 'Stadium und Ablauf': 'Etapa y drenaje', 'Pflanzenstadium': 'Etapa de la planta', 'Pflanzenphase': 'Fase de la planta', 'Pflanzengr\u00F6\u00DFe': 'Tama\u00F1o de la planta', 'Aktueller Zuwachs': 'Crecimiento actual', 'Pflanzenreaktion': 'Respuesta de la planta', 'Verbrauchstrend': 'Tendencia de consumo', 'Wasserverbrauch': 'Consumo de agua', 'Klima': 'Clima', 'Lichtintensit\u00E4t': 'Intensidad de luz', 'Luftbewegung': 'Movimiento del aire',\n    'Aktiv durchwurzelter Anteil': 'Parte enraizada', 'Durchwurzelter Anteil': 'Parte enraizada', 'Warum das wichtig ist': 'Por qu\u00E9 importa', 'Kontrollmethode': 'M\u00E9todo de control', 'Oberfl\u00E4che': 'Superficie', 'Mitte des Substrats': 'Centro del sustrato', 'Mitte': 'Centro', 'Tiefe Zone': 'Zona profunda', 'Tiefe': 'Profundidad', 'Feuchteverteilung': 'Distribuci\u00F3n de humedad', 'Steht Wasser im System?': '\u00BFHay agua estancada?', 'Wasser l\u00E4uft sofort durch?': '\u00BFEl agua atraviesa enseguida?', 'Rand l\u00F6st sich / Spalten?': '\u00BFHay separaci\u00F3n en el borde?', 'Mulch / Oberfl\u00E4che': 'Mulch / superficie', 'Cover Crop aktiv?': '\u00BFCover Crop activo?', 'Wurzelbereich darunter': 'Zona radicular inferior',\n    'Letzte Wassergabe vor': '\u00DAltimo riego hace', 'Letzte Wassermenge': '\u00DAltima cantidad de agua', 'Zeitpunkt nicht sicher': 'Momento no claro', 'Menge nicht sicher': 'Cantidad no clara', 'Letztes Gie\u00DFmuster': 'Patr\u00F3n del \u00FAltimo riego', 'Bew\u00E4sserte Fl\u00E4che': 'Superficie regada', 'Drain beim letzten Gie\u00DFen': 'Drenaje del \u00FAltimo riego', 'Drain beim Gie\u00DFen': 'Drenaje durante el riego', 'Gemessener Ablauf': 'Drenaje medido', 'Substratstruktur': 'Estructura del sustrato', 'Trauerm\u00FCcken sichtbar?': '\u00BFSe ven mosquitos del sustrato?', 'Substratgeruch': 'Olor del sustrato', 'Wurzelbeobachtung': 'Observaci\u00F3n de ra\u00EDces', 'K\u00FCrzliche \u00C4nderungen': 'Cambios recientes', 'Warnzeichen optional erg\u00E4nzen': 'A\u00F1adir se\u00F1ales de alerta (opcional)',\n    'Auswertung': 'Resultado', 'Empfehlung': 'Recomendaci\u00F3n', 'Aktiver Wurzelraum': 'Zona radicular activa', 'Erneut kontrollieren': 'Volver a comprobar', 'Sicherheit': 'Confianza', 'Gie\u00DFweise': 'Forma de riego', 'Bew\u00E4sserungsfl\u00E4che': 'Superficie de riego', 'Obergrenze beim Wiederanfeuchten': 'L\u00EDmite al rehidratar', 'Warum diese Einsch\u00E4tzung?': '\u00BFPor qu\u00E9 este resultado?', 'Wichtige Hinweise': 'Notas importantes', 'Fehlende Angaben': 'Datos que faltan', 'N\u00E4chste Schritte': 'Pr\u00F3ximos pasos', 'Passende Artikel': 'Art\u00EDculos relacionados', 'Bearbeiten-\u00DCbersicht schlie\u00DFen': 'Cerrar resumen de edici\u00F3n', 'Welche Eingabe m\u00F6chtest du anpassen?': '\u00BFQu\u00E9 respuesta quieres cambiar?', 'keine ausgew\u00E4hlt': 'ninguna seleccionada', 'nicht angegeben': 'no indicado', 'nicht sicher': 'no claro', 'Bitte pr\u00FCfe diese Angaben:': 'Comprueba estas respuestas:', 'Auswertung nicht abgeschlossen': 'C\u00E1lculo no completado', 'Erneut auswerten': 'Calcular de nuevo',\n    'CannaSelection Gie\u00DF-Check': 'Control de riego de CannaSelection', 'Living Soil Wasserbedarfsrechner': 'Calculadora de agua para Living Soil', 'Wasserbedarf einsch\u00E4tzen, \u00DCberw\u00E4sserung vermeiden und den aktiven Wurzelraum richtig versorgen.': 'Estima la necesidad de agua, evita el exceso y abastece correctamente la zona radicular activa.', 'Gie\u00DF-Check starten': 'Iniciar control de riego', 'So funktioniert der Rechner': 'C\u00F3mo funciona la calculadora', 'Vollst\u00E4ndige Auswertung \u00F6ffnen': 'Abrir resultado completo', 'Einklappen': 'Contraer', 'Dein letzter Gie\u00DF-Check ist noch vorhanden.': 'Tu \u00FAltimo control de riego sigue disponible.', 'Deine Angaben bleiben in dieser Sitzung erhalten.': 'Tus respuestas se conservan durante esta sesi\u00F3n.'\n  }\n};\n\nconst WATERING_OPTION_COPY = {\n  en: {\n    'Stofftopf / Gewebetopf': 'Fabric pot / grow bag', 'Topf / K\u00FCbel': 'Pot / container', 'Living-Soil-Beet / Bed': 'Living Soil bed', 'anderes Gef\u00E4\u00DF': 'Other container', 'Keimling / Jungpflanze': 'Seedling / young plant', 'Wachstum: kleine bis mittlere Pflanze': 'Vegetative growth: small to medium plant', 'Wachstum: gro\u00DFe Pflanze': 'Vegetative growth: large plant', 'Stretch / starke Streckung': 'Stretch / strong stretch', 'Bl\u00FCte Woche 1-3': 'Flower weeks 1\u20133', 'Bl\u00FCte Woche 4-6': 'Flower weeks 4\u20136', 'sp\u00E4te Bl\u00FCte': 'Late flower', 'Zwischenzyklus / Re-Amending': 'Between cycles / re-amending', 'freier Ablauf': 'Free runoff', 'kontrollierter Ablauf': 'Controlled runoff', 'geschlossen / kein Ablauf': 'Closed / no runoff', 'nicht sicher': 'Unclear', 'voll durchwurzelt': 'Fully rooted', 'nicht gepr\u00FCft': 'Not checked', 'frisch umgetopft': 'Recently repotted', 'Wachstum': 'Vegetative growth', 'Bl\u00FCte': 'Flower', 'Zwischenzyklus nach der Ernte': 'Between cycles after harvest', 'klein': 'Small', 'mittel': 'Medium', 'gro\u00DF': 'Large', 'sehr gro\u00DF': 'Very large', 'stabil': 'Stable', 'kr\u00E4ftiger Zuwachs': 'Strong growth', 'verlangsamt': 'Slower', 'aufrecht / stabil': 'Upright / stable', 'leicht h\u00E4ngend': 'Slightly drooping', 'stark h\u00E4ngend': 'Heavily drooping', 'welk': 'Wilted', 'steigt': 'Rising', 'f\u00E4llt': 'Falling', 'mehrere manuelle Kontrollpunkte': 'Several manual checks', 'ein manueller Kontrollpunkt': 'One manual check', 'Sensor plus manuelle Kontrolle': 'Sensor plus manual check', 'nur Sensorwert': 'Sensor only', 'noch nicht gepr\u00FCft': 'Not checked yet', 'ges\u00E4ttigt / nass gl\u00E4nzend': 'Saturated / shiny wet', 'nass': 'Wet', 'gleichm\u00E4\u00DFig feucht': 'Evenly moist', 'leicht trocken': 'Slightly dry', 'trocken': 'Dry', 'sehr trocken / wasserabweisend': 'Very dry / hydrophobic', 'nicht gepr\u00FCft': 'Not checked', 'gleichm\u00E4\u00DFig': 'Even', 'ungleichm\u00E4\u00DFig': 'Uneven', 'Rand deutlich trockener': 'Edge clearly drier', 'nein': 'No', 'ja': 'Yes', 'keine Mulchschicht': 'No mulch layer', 'Mulch vorhanden': 'Mulch present', 'oben trocken, darunter feucht': 'Dry on top, moist below', 'eine Gabe': 'One watering', '2 bis 3 Pulse': '2 to 3 pulses', 'mehrere Pulse / Zonen': 'Several pulses / zones', 'ganze Fl\u00E4che': 'Full surface', 'mehrere Zonen': 'Several zones', 'nur ein Punkt': 'One point only', 'kein Drain': 'No runoff', 'ja, Menge bekannt': 'Yes, amount known', 'ja, Menge unbekannt': 'Yes, amount unknown', 'wenig Drain': 'Little runoff', 'viel Drain': 'Heavy runoff', 'geschlossenes System': 'Closed system', 'keine': 'None', 'einzelne Tiere': 'A few', 'deutlich zunehmend': 'Clearly increasing', 'starker Befall': 'Heavy presence', 'luftig und stabil': 'Airy and stable', 'verdichtet': 'Compacted', 'fein / wenig Luftporen': 'Fine / few air pockets', 'sehr grob / schnell trocknend': 'Very coarse / dries quickly', 'k\u00FChl / feucht': 'Cool / humid', 'normal': 'Normal', 'warm / trocken': 'Warm / dry', 'hei\u00DF / sehr trocken': 'Hot / very dry', 'gering': 'Low', 'hoch': 'High', 'ausgewogen': 'Balanced', 'stark': 'Strong', 'Gie\u00DFkanne / Handguss': 'Watering can / hand watering', 'Brause / Spr\u00FCher': 'Rose / sprayer', 'Tropfbew\u00E4sserung': 'Drip irrigation', 'anders': 'Other', 'erdig / unauff\u00E4llig': 'Earthy / normal', 'muffig': 'Musty', 'faulig / unangenehm': 'Rotten / unpleasant', 'helle feste Spitzen': 'Light, firm tips', 'dunkler, aber fest': 'Dark but firm', 'weich': 'Soft', 'schleimig': 'Slimy', 'Rinde l\u00F6st sich': 'Bark is sloughing'\n  },\n  es: {\n    'Stofftopf / Gewebetopf': 'Maceta de tela / bolsa de cultivo', 'Topf / K\u00FCbel': 'Maceta / contenedor', 'Living-Soil-Beet / Bed': 'Cama Living Soil', 'anderes Gef\u00E4\u00DF': 'Otro recipiente', 'Keimling / Jungpflanze': 'Pl\u00E1ntula / planta joven', 'Wachstum: kleine bis mittlere Pflanze': 'Crecimiento: planta peque\u00F1a o mediana', 'Wachstum: gro\u00DFe Pflanze': 'Crecimiento: planta grande', 'Stretch / starke Streckung': 'Stretch / estiramiento fuerte', 'Bl\u00FCte Woche 1-3': 'Floraci\u00F3n semanas 1\u20133', 'Bl\u00FCte Woche 4-6': 'Floraci\u00F3n semanas 4\u20136', 'sp\u00E4te Bl\u00FCte': 'Floraci\u00F3n tard\u00EDa', 'Zwischenzyklus / Re-Amending': 'Entre ciclos / reamendado', 'freier Ablauf': 'Drenaje libre', 'kontrollierter Ablauf': 'Drenaje controlado', 'geschlossen / kein Ablauf': 'Cerrado / sin drenaje', 'nicht sicher': 'No est\u00E1 claro', 'voll durchwurzelt': 'Completamente enraizada', 'nicht gepr\u00FCft': 'No comprobado', 'frisch umgetopft': 'Trasplantada recientemente', 'Wachstum': 'Crecimiento', 'Bl\u00FCte': 'Floraci\u00F3n', 'Zwischenzyklus nach der Ernte': 'Entre ciclos tras la cosecha', 'klein': 'Peque\u00F1a', 'mittel': 'Mediana', 'gro\u00DF': 'Grande', 'sehr gro\u00DF': 'Muy grande', 'stabil': 'Estable', 'kr\u00E4ftiger Zuwachs': 'Crecimiento fuerte', 'verlangsamt': 'M\u00E1s lento', 'aufrecht / stabil': 'Erguida / estable', 'leicht h\u00E4ngend': 'Ligeramente ca\u00EDda', 'stark h\u00E4ngend': 'Muy ca\u00EDda', 'welk': 'Marchita', 'steigt': 'Aumenta', 'f\u00E4llt': 'Disminuye', 'mehrere manuelle Kontrollpunkte': 'Varios puntos de control manual', 'ein manueller Kontrollpunkt': 'Un punto de control manual', 'Sensor plus manuelle Kontrolle': 'Sensor m\u00E1s control manual', 'nur Sensorwert': 'Solo sensor', 'noch nicht gepr\u00FCft': 'A\u00FAn no comprobado', 'ges\u00E4ttigt / nass gl\u00E4nzend': 'Saturada / muy mojada', 'nass': 'Mojada', 'gleichm\u00E4\u00DFig feucht': 'Humedad uniforme', 'leicht trocken': 'Ligeramente seca', 'trocken': 'Seca', 'sehr trocken / wasserabweisend': 'Muy seca / hidrof\u00F3bica', 'gleichm\u00E4\u00DFig': 'Uniforme', 'ungleichm\u00E4\u00DFig': 'Irregular', 'Rand deutlich trockener': 'Borde claramente m\u00E1s seco', 'nein': 'No', 'ja': 'S\u00ED', 'keine Mulchschicht': 'Sin capa de mulch', 'Mulch vorhanden': 'Con mulch', 'oben trocken, darunter feucht': 'Seca arriba, h\u00FAmeda debajo', 'eine Gabe': 'Un riego', '2 bis 3 Pulse': '2 a 3 pulsos', 'mehrere Pulse / Zonen': 'Varios pulsos / zonas', 'ganze Fl\u00E4che': 'Toda la superficie', 'mehrere Zonen': 'Varias zonas', 'nur ein Punkt': 'Solo un punto', 'kein Drain': 'Sin drenaje', 'ja, Menge bekannt': 'S\u00ED, cantidad conocida', 'ja, Menge unbekannt': 'S\u00ED, cantidad desconocida', 'wenig Drain': 'Poco drenaje', 'viel Drain': 'Mucho drenaje', 'geschlossenes System': 'Sistema cerrado', 'keine': 'Ninguno', 'einzelne Tiere': 'Algunos', 'deutlich zunehmend': 'Aumentando claramente', 'starker Befall': 'Presencia fuerte', 'luftig und stabil': 'Aireado y estable', 'verdichtet': 'Compactado', 'fein / wenig Luftporen': 'Fino / pocos poros de aire', 'sehr grob / schnell trocknend': 'Muy grueso / seca r\u00E1pido', 'k\u00FChl / feucht': 'Fresco / h\u00FAmedo', 'normal': 'Normal', 'warm / trocken': 'C\u00E1lido / seco', 'hei\u00DF / sehr trocken': 'Caliente / muy seco', 'gering': 'Bajo', 'hoch': 'Alto', 'ausgewogen': 'Equilibrado', 'stark': 'Fuerte', 'Gie\u00DFkanne / Handguss': 'Regadera / riego manual', 'Brause / Spr\u00FCher': 'Ducha / pulverizador', 'Tropfbew\u00E4sserung': 'Riego por goteo', 'anders': 'Otro', 'erdig / unauff\u00E4llig': 'Terroso / normal', 'muffig': 'Mohoso', 'faulig / unangenehm': 'Podrido / desagradable', 'helle feste Spitzen': 'Puntas claras y firmes', 'dunkler, aber fest': 'Oscuras pero firmes', 'weich': 'Blandas', 'schleimig': 'Viscosas', 'Rinde l\u00F6st sich': 'La corteza se desprende'\n  }\n};\n\nconst SELECTS = {\n  systemType: [\n    ['fabric_pot', 'Stofftopf / Gewebetopf'],\n    ['plastic_pot', 'Topf / K\u00FCbel'],\n    ['large_bed', 'Living-Soil-Beet / Bed'],\n    ['other_container', 'anderes Gef\u00E4\u00DF']\n  ],\n  growthStage: [\n    ['seedling', 'Keimling / Jungpflanze'],\n    ['veg_small', 'Wachstum: kleine bis mittlere Pflanze'],\n    ['veg_large', 'Wachstum: gro\u00DFe Pflanze'],\n    ['stretch', 'Stretch / starke Streckung'],\n    ['flower_early', 'Bl\u00FCte Woche 1-3'],\n    ['flower_mid', 'Bl\u00FCte Woche 4-6'],\n    ['flower_late', 'sp\u00E4te Bl\u00FCte'],\n    ['between_cycles', 'Zwischenzyklus / Re-Amending']\n  ],\n  drainageMode: [\n    ['free', 'freier Ablauf'],\n    ['controlled', 'kontrollierter Ablauf'],\n    ['closed', 'geschlossen / kein Ablauf'],\n    ['unknown', 'nicht sicher']\n  ],\n  rootedPercent: [\n    ['10', 'ca. 10 %'],\n    ['25', 'ca. 25 %'],\n    ['50', 'ca. 50 %'],\n    ['75', 'ca. 75 %'],\n    ['100', 'voll durchwurzelt'],\n    ['unknown', 'nicht sicher']\n  ],\n  phase: [\n    ['seedling', 'Keimling / Jungpflanze'],\n    ['freshly_repotted', 'frisch umgetopft'],\n    ['veg', 'Wachstum'],\n    ['stretch', 'Stretch'],\n    ['flower', 'Bl\u00FCte'],\n    ['late_flower', 'sp\u00E4te Bl\u00FCte'],\n    ['between_cycles', 'Zwischenzyklus nach der Ernte'],\n    ['unknown', 'nicht sicher']\n  ],\n  plantSize: [\n    ['small', 'klein'],\n    ['medium', 'mittel'],\n    ['large', 'gro\u00DF'],\n    ['very_large', 'sehr gro\u00DF'],\n    ['unknown', 'nicht sicher']\n  ],\n  growth: [\n    ['stable', 'stabil'],\n    ['fast', 'kr\u00E4ftiger Zuwachs'],\n    ['slow', 'verlangsamt'],\n    ['unknown', 'nicht sicher']\n  ],\n  plantPosture: [\n    ['stable', 'aufrecht / stabil'],\n    ['light_droop', 'leicht h\u00E4ngend'],\n    ['heavy_droop', 'stark h\u00E4ngend'],\n    ['wilt', 'welk'],\n    ['unknown', 'nicht sicher']\n  ],\n  consumptionTrend: [\n    ['rising', 'steigt'],\n    ['stable', 'stabil'],\n    ['falling', 'f\u00E4llt'],\n    ['unknown', 'nicht sicher']\n  ],\n  observationMethod: [\n    ['multiple_manual', 'mehrere manuelle Kontrollpunkte'],\n    ['single_manual', 'ein manueller Kontrollpunkt'],\n    ['sensor_manual', 'Sensor plus manuelle Kontrolle'],\n    ['sensor_only', 'nur Sensorwert'],\n    ['not_checked', 'noch nicht gepr\u00FCft']\n  ],\n  moisture: [\n    ['saturated', 'ges\u00E4ttigt / nass gl\u00E4nzend'],\n    ['wet', 'nass'],\n    ['evenly_moist', 'gleichm\u00E4\u00DFig feucht'],\n    ['slightly_dry', 'leicht trocken'],\n    ['dry', 'trocken'],\n    ['very_dry_hydrophobic', 'sehr trocken / wasserabweisend'],\n    ['unknown', 'nicht sicher']\n  ],\n  rootZoneMoisture: [\n    ['saturated', 'nass / sehr schwer'],\n    ['wet', 'deutlich feucht'],\n    ['evenly_moist', 'gleichm\u00E4\u00DFig feucht'],\n    ['slightly_dry', 'leicht trocken'],\n    ['dry', 'trocken'],\n    ['very_dry_hydrophobic', 'nimmt Wasser schlecht auf'],\n    ['unknown', 'nicht gepr\u00FCft']\n  ],\n  moistureDistribution: [\n    ['even', 'gleichm\u00E4\u00DFig'],\n    ['uneven', 'ungleichm\u00E4\u00DFig'],\n    ['edge_dry', 'Rand deutlich trockener'],\n    ['unknown', 'nicht sicher']\n  ],\n  tri: [\n    ['no', 'nein'],\n    ['yes', 'ja'],\n    ['unknown', 'nicht sicher']\n  ],\n  mulchState: [\n    ['none', 'keine Mulchschicht'],\n    ['mulched', 'Mulch vorhanden'],\n    ['dry_on_top_moist_under', 'oben trocken, darunter feucht'],\n    ['unknown', 'nicht sicher']\n  ],\n  pulsesLastTime: [\n    ['one', 'eine Gabe'],\n    ['two_three', '2 bis 3 Pulse'],\n    ['many', 'mehrere Pulse / Zonen'],\n    ['unknown', 'nicht sicher']\n  ],\n  wateredArea: [\n    ['full_surface', 'ganze Fl\u00E4che'],\n    ['several_zones', 'mehrere Zonen'],\n    ['point_only', 'nur ein Punkt'],\n    ['unknown', 'nicht sicher']\n  ],\n  drainageResponse: [\n    ['none', 'kein Drain'],\n    ['yes_known', 'ja, Menge bekannt'],\n    ['yes_unknown', 'ja, Menge unbekannt'],\n    ['little', 'wenig Drain'],\n    ['strong', 'viel Drain'],\n    ['closed', 'geschlossenes System'],\n    ['unknown', 'nicht sicher']\n  ],\n  fungusGnats: [\n    ['no', 'keine'],\n    ['single', 'einzelne Tiere'],\n    ['increasing', 'deutlich zunehmend'],\n    ['severe', 'starker Befall'],\n    ['unknown', 'nicht sicher']\n  ],\n  substrateStructure: [\n    ['balanced', 'luftig und stabil'],\n    ['compacted', 'verdichtet'],\n    ['fine_airless', 'fein / wenig Luftporen'],\n    ['coarse', 'sehr grob / schnell trocknend'],\n    ['unknown', 'nicht sicher']\n  ],\n  climate: [\n    ['cool_humid', 'k\u00FChl / feucht'],\n    ['normal', 'normal'],\n    ['warm_dry', 'warm / trocken'],\n    ['hot_dry', 'hei\u00DF / sehr trocken'],\n    ['unknown', 'nicht sicher']\n  ],\n  lightIntensity: [\n    ['low', 'gering'],\n    ['medium', 'mittel'],\n    ['high', 'hoch'],\n    ['unknown', 'nicht sicher']\n  ],\n  airflow: [\n    ['low', 'gering'],\n    ['balanced', 'ausgewogen'],\n    ['strong', 'stark'],\n    ['unknown', 'nicht sicher']\n  ],\n  wateringMethod: [\n    ['watering_can', 'Gie\u00DFkanne / Handguss'],\n    ['sprayer', 'Brause / Spr\u00FCher'],\n    ['drip', 'Tropfbew\u00E4sserung'],\n    ['other', 'anders'],\n    ['unknown', 'nicht sicher']\n  ],\n  substrateSmell: [\n    ['earthy', 'erdig / unauff\u00E4llig'],\n    ['musty', 'muffig'],\n    ['foul', 'faulig / unangenehm'],\n    ['unknown', 'nicht gepr\u00FCft']\n  ],\n  rootObservation: [\n    ['not_checked', 'nicht gepr\u00FCft'],\n    ['firm_new_tips', 'helle feste Spitzen'],\n    ['dark_but_firm', 'dunkler, aber fest'],\n    ['soft', 'weich'],\n    ['slimy', 'schleimig'],\n    ['cortex_sloughing', 'Rinde l\u00F6st sich']\n  ]\n};\n\nconst RECENT_CHANGES = [\n  ['none', 'keine relevante \u00C4nderung'],\n  ['more_light', 'mehr Licht'],\n  ['repotted', 'umgetopft'],\n  ['defoliated', 'st\u00E4rker entlaubt'],\n  ['climate_change', 'Klima deutlich ver\u00E4ndert'],\n  ['between_cycles', 'Zwischenzyklus / stark zur\u00FCckgeschnitten']\n];\n\nconst WARNING_SIGNALS = [\n  ['standing_water', 'Es steht Wasser im Topf, Untersetzer oder Beet'],\n  ['foul_smell', 'Substrat riecht muffig oder faulig'],\n  ['soft_roots', 'Wurzeln wirken weich, schleimig oder l\u00F6sen sich'],\n  ['fungus_gnats', 'Trauerm\u00FCcken sind deutlich sichtbar'],\n  ['runs_through', 'Wasser l\u00E4uft sofort durch'],\n  ['edge_gap', 'Substrat l\u00F6st sich vom Rand']\n];\n\nconst LIST_FIELDS = new Set(['recentChanges', 'warningSignals']);\n\nconst STAGE_DEFAULTS = {\n  seedling: { phase: 'seedling', rootedPercent: '20', plantSize: 'small', growth: 'stable' },\n  veg_small: { phase: 'veg', rootedPercent: '45', plantSize: 'medium', growth: 'stable' },\n  veg_large: { phase: 'veg', rootedPercent: '65', plantSize: 'large', growth: 'fast' },\n  stretch: { phase: 'stretch', rootedPercent: '75', plantSize: 'large', growth: 'fast' },\n  flower_early: { phase: 'flower', rootedPercent: '80', plantSize: 'large', growth: 'stable' },\n  flower_mid: { phase: 'flower', rootedPercent: '85', plantSize: 'large', growth: 'stable' },\n  flower_late: { phase: 'late_flower', rootedPercent: '85', plantSize: 'large', growth: 'slow' },\n  between_cycles: { phase: 'between_cycles', rootedPercent: '45', plantSize: 'small', growth: 'slow' }\n};\n\nconst DEFAULT_FORM = {\n  systemType: 'fabric_pot',\n  drainageMode: 'unknown',\n  substrateVolumeLiters: '',\n  bedLengthCm: '',\n  bedWidthCm: '',\n  bedHeightCm: '',\n  potDiameterCm: '',\n  potHeightCm: '',\n  plantCount: '1',\n  growthStage: 'veg_small',\n  rootedPercent: 'unknown',\n  wateringMethod: 'watering_can',\n  emitterCount: '',\n  phase: 'veg',\n  plantSize: 'medium',\n  growth: 'stable',\n  plantPosture: 'stable',\n  consumptionTrend: 'unknown',\n  recentChanges: ['none'],\n  observationMethod: 'multiple_manual',\n  topMoisture: 'unknown',\n  rootZoneMoisture: 'unknown',\n  middleMoisture: 'unknown',\n  deepMoisture: 'unknown',\n  moistureDistribution: 'unknown',\n  standingWater: 'no',\n  waterRunsThrough: 'unknown',\n  substrateEdgeGap: 'unknown',\n  mulchState: 'unknown',\n  coverCrop: 'unknown',\n  lastWateringHoursAgo: '',\n  lastWateringUnknown: false,\n  lastWaterAmountLiters: '',\n  lastWaterAmountUnknown: true,\n  pulsesLastTime: 'unknown',\n  wateredArea: 'unknown',\n  drainageResponse: 'unknown',\n  drainageAmountLiters: '',\n  substrateStructure: 'unknown',\n  climate: 'normal',\n  lightIntensity: 'medium',\n  airflow: 'balanced',\n  fungusGnats: 'unknown',\n  substrateSmell: 'unknown',\n  rootObservation: 'not_checked',\n  warningSignals: []\n};\n\nclass CSWateringPlanner extends HTMLElement {\n  connectedCallback() {\n    if (this._csWateringReady) return;\n    this._csWateringReady = true;\n    this.removeAttribute('data-ready');\n    this.variant = this.getAttribute('variant') === 'compact' ? 'compact' : 'full';\n    this.locale = (this.getAttribute('data-locale') || document.documentElement.lang || 'de').split('-')[0].toLowerCase();\n    this.translations = WATERING_COPY[this.locale] || {};\n    this.fullUrl = this.getAttribute('data-full-url') || '/pages/living-soil-wasserbedarfsrechner?from=article#rechner';\n    this.articleUrl = this.getAttribute('data-article-url') || '/blogs/grow-lab/living-soil-richtig-giessen';\n    this.guideUrls = {\n      fabricPot: this.getAttribute('data-fabric-pot-guide-url') || '/blogs/grow-lab/stofftopfe-richtig-giessen-im-living-soil',\n      rootRot: this.getAttribute('data-root-rot-guide-url') || '/blogs/grow-lab/root-rot-wurzelfaeule-cannabis',\n      fungusGnat: this.getAttribute('data-fungus-gnat-guide-url') || '/blogs/grow-lab/trauermuecken-living-soil',\n      substrate: this.getAttribute('data-substrate-guide-url') || '/blogs/grow-lab/mehr-wasserspeicher-weniger-kontrolle',\n      waterQuality: this.getAttribute('data-water-quality-guide-url') || '/blogs/grow-lab/bodenanalyse-wasseranalyse-und-nahrlosungsanalyse-warum-dein-grow-mehr-als-ph-und-ec-braucht',\n      microBio: this.getAttribute('data-microbio-guide-url') || '/blogs/grow-lab/microbio-plus-richtig-anwenden'\n    };\n    this.analyticsEnabled = this.getAttribute('data-analytics') !== 'false';\n    this.storageKey = `cs-watering-draft:${window.location.pathname}:${this.variant}`;\n    this.plannerMode = this.getAttribute('data-input-mode') === 'expert' ? 'expert' : 'beginner';\n    this.started = this.variant === 'full';\n    this.collapsed = false;\n    this.showInfo = false;\n    this.transferNotice = '';\n    this.instanceId = this.getAttribute('id') || `cs-watering-${Math.random().toString(36).slice(2, 9)}`;\n    this.currentStep = 0;\n    this.form = { ...DEFAULT_FORM };\n    this.errors = {};\n    this.result = null;\n    this.dirtySinceResult = false;\n    this.isCalculating = false;\n    this.pendingFocusOutRender = false;\n    this.runtimeError = '';\n    this.resetRequested = false;\n    this.showEditSummary = false;\n    this.pendingDraft = null;\n    this.restoreNotice = false;\n    this.handleInputBound = event => this.handleInput(event);\n    this.handleClickBound = event => this.handleClick(event);\n    this.handleFocusOutBound = event => this.handleFocusOut(event);\n    this.loadDraft();\n    this.loadTransfer();\n    this.addEventListener('input', this.handleInputBound);\n    this.addEventListener('change', this.handleInputBound);\n    this.addEventListener('click', this.handleClickBound);\n    this.addEventListener('focusout', this.handleFocusOutBound);\n    this.render();\n    this.track('watering_tool_view', { variant: this.variant });\n  }\n\n  disconnectedCallback() {\n    if (this.handleInputBound) this.removeEventListener('input', this.handleInputBound);\n    if (this.handleInputBound) this.removeEventListener('change', this.handleInputBound);\n    if (this.handleClickBound) this.removeEventListener('click', this.handleClickBound);\n    if (this.handleFocusOutBound) this.removeEventListener('focusout', this.handleFocusOutBound);\n    this._csWateringReady = false;\n    this.removeAttribute('data-ready');\n  }\n\n  steps() {\n    if (this.plannerMode === 'expert') {\n      return [\n        { title: 'System', render: () => this.renderSystemStep(false) },\n        { title: 'Wurzelraum', render: () => this.renderRootStep(false) },\n        { title: 'Pflanze', render: () => this.renderPlantStep(false) },\n        { title: 'Feuchte', render: () => this.renderMoistureStep(false) },\n        { title: 'Gie\u00DFen', render: () => this.renderWateringHistoryStep(false) },\n        { title: 'Warnsignale', render: () => this.renderWarningStep(false) }\n      ];\n    }\n    return [\n      { title: 'Basis', render: () => this.renderBeginnerSystemStep() },\n      { title: 'Feuchtebild', render: () => this.renderBeginnerMoistureStep() },\n      { title: 'Pflanze & Klima', render: () => this.renderBeginnerPlantStep() },\n      { title: 'Gie\u00DFmenge', render: () => this.renderBeginnerWateringStep() }\n    ];\n  }\n\n  loadDraft() {\n    try {\n      const draft = JSON.parse(sessionStorage.getItem(this.storageKey) || 'null');\n      if (!draft || typeof draft !== 'object') return;\n      const normalizedDraft = draft.form ? draft : { form: draft };\n      this.pendingDraft = normalizedDraft;\n      this.restoreNotice = true;\n    } catch {\n      // Drafts are optional.\n    }\n  }\n\n  loadTransfer() {\n    if (this.variant !== 'full') return;\n    const rawTransfer = sessionStorage.getItem(STORAGE_TRANSFER_KEY);\n    if (!rawTransfer) return;\n    try {\n      const transfer = JSON.parse(rawTransfer || 'null');\n      if (transfer?.input || transfer?.form) {\n        this.form = { ...this.form, ...(transfer.input || transfer.form) };\n        if (transfer.inputMode === 'expert' || transfer.inputMode === 'beginner') this.plannerMode = transfer.inputMode;\n        if (transfer.result?.modelVersion === MODEL_VERSION) this.result = transfer.result;\n        this.pendingDraft = null;\n        this.restoreNotice = false;\n        this.transferNotice = transfer.result?.modelVersion && transfer.result.modelVersion !== MODEL_VERSION\n          ? 'Das Berechnungsmodell wurde aktualisiert. Deine Eingaben wurden \u00FCbernommen, das Ergebnis muss neu berechnet werden.'\n          : 'Deine Angaben aus dem Gie\u00DF-Guide wurden \u00FCbernommen.';\n        sessionStorage.removeItem(STORAGE_TRANSFER_KEY);\n        requestAnimationFrame(() => this.scrollIntoView({ behavior: motionSafeScrollBehavior(), block: 'start' }));\n      }\n    } catch {\n      sessionStorage.removeItem(STORAGE_TRANSFER_KEY);\n      this.transferNotice = 'Die \u00FCbernommenen Angaben konnten nicht verwendet werden. Bitte starte den Gie\u00DF-Check direkt auf dieser Seite.';\n    }\n  }\n\n  saveDraft() {\n    try {\n      sessionStorage.setItem(this.storageKey, JSON.stringify({\n        form: this.form,\n        inputMode: this.plannerMode,\n        currentStep: this.currentStep,\n        started: this.started,\n        result: this.result?.modelVersion === MODEL_VERSION ? this.result : null\n      }));\n    } catch {\n      // Ignore storage failures.\n    }\n  }\n\n  handleInput(event) {\n    const target = event.target;\n    if (!target?.matches?.('[data-field]')) return;\n    const field = target.dataset.field;\n    if (LIST_FIELDS.has(field)) {\n      const checked = [...this.querySelectorAll(`[data-field=\"${field}\"]:checked`)].map(input => input.value);\n      if (field === 'recentChanges') {\n        this.form.recentChanges = checked.includes('none') && target.value === 'none'\n          ? ['none']\n          : checked.filter(value => value !== 'none');\n        if (!this.form.recentChanges.length) this.form.recentChanges = ['none'];\n      } else {\n        this.form[field] = checked;\n      }\n    } else if (target.type === 'checkbox') {\n      this.form[field] = target.checked;\n    } else {\n      this.form[field] = target.value;\n    }\n    if (field === 'growthStage') this.applyStageDefaults(false);\n    if (field === 'systemType') this.syncSystemDependencies();\n    if (field === 'drainageMode') this.syncDrainageDependencies();\n    if (field === 'drainageResponse') this.syncDrainageResponseDependencies();\n    if (field === 'wateringMethod') this.syncWateringMethodDependencies();\n    this.errors[field] = '';\n    this.runtimeError = '';\n    this.dirtySinceResult = Boolean(this.result);\n    this.saveDraft();\n    if (event.type !== 'input' || target.type === 'checkbox' || target.type === 'radio' || this.result) this.render();\n  }\n\n  handleFocusOut(event) {\n    const target = event.target;\n    if (!target?.matches?.('[data-field]') || !target.closest('.cs-watering-field--number')) return;\n    const field = target.dataset.field;\n    const previousError = this.errors[field] || '';\n    this.validateNumericField(field);\n    if ((this.errors[field] || '') !== previousError) {\n      this.pendingFocusOutRender = true;\n      setTimeout(() => {\n        if (!this.pendingFocusOutRender) return;\n        this.pendingFocusOutRender = false;\n        this.render();\n      }, 0);\n    }\n  }\n\n  handleClick(event) {\n    const errorLink = event.target.closest('.cs-watering-error-summary a[href^=\"#cs-watering-input-\"]');\n    if (errorLink) {\n      event.preventDefault();\n      this.focusErrorTarget(errorLink.getAttribute('href'));\n      return;\n    }\n    const relatedLink = event.target.closest('.cs-watering-links a[data-link-type]');\n    if (relatedLink) {\n      this.track('watering_related_article_clicked', { link_type: relatedLink.dataset.linkType || 'article', variant: this.variant });\n      return;\n    }\n    const actionElement = event.target.closest('[data-action]');\n    const action = actionElement?.dataset.action;\n    if (!action) return;\n    this.pendingFocusOutRender = false;\n    event.preventDefault();\n    if (action === 'start') {\n      this.started = true;\n      this.collapsed = false;\n      this.track('watering_tool_started', { variant: this.variant });\n      this.dispatchPlannerEvent('started', { variant: this.variant });\n      this.render();\n      this.focusCurrentStep();\n      return;\n    }\n    if (action === 'toggle-info') {\n      this.showInfo = !this.showInfo;\n      this.render();\n      return;\n    }\n    if (action === 'restore-draft') {\n      if (this.pendingDraft?.form) this.form = { ...DEFAULT_FORM, ...this.pendingDraft.form };\n      if (this.pendingDraft?.inputMode === 'expert' || this.pendingDraft?.inputMode === 'beginner') this.plannerMode = this.pendingDraft.inputMode;\n      this.currentStep = Math.max(0, Math.min(Number.parseInt(this.pendingDraft?.currentStep || '0', 10), this.steps().length - 1));\n      this.started = this.variant === 'full' || Boolean(this.pendingDraft?.started);\n      this.result = this.pendingDraft?.result?.modelVersion === MODEL_VERSION ? this.pendingDraft.result : null;\n      this.pendingDraft = null;\n      this.restoreNotice = false;\n      this.render();\n      return;\n    }\n    if (action === 'discard-draft') {\n      this.pendingDraft = null;\n      this.restoreNotice = false;\n      sessionStorage.removeItem(this.storageKey);\n      this.render();\n      return;\n    }\n    if (action === 'set-mode') {\n      const mode = actionElement?.dataset.mode === 'expert' ? 'expert' : 'beginner';\n      if (mode !== this.plannerMode) {\n        this.plannerMode = mode;\n        this.currentStep = 0;\n        this.dirtySinceResult = Boolean(this.result);\n        if (mode === 'beginner') {\n          this.applyStageDefaults(false);\n          this.syncDrainageDependencies();\n        }\n        this.saveDraft();\n        this.render();\n        this.focusCurrentStep();\n      }\n      return;\n    }\n    if (action === 'collapse') {\n      this.collapsed = true;\n      this.render();\n      return;\n    }\n    if (action === 'resume') {\n      this.collapsed = false;\n      this.render();\n      requestAnimationFrame(() => this.querySelector('.cs-watering-step h3, .cs-watering-result')?.focus?.());\n      return;\n    }\n    if (action === 'next') {\n      if (!this.validateStep()) return;\n      this.currentStep = Math.min(this.currentStep + 1, this.steps().length - 1);\n      this.track('watering_step_completed', { variant: this.variant, step_index: this.currentStep });\n      this.dispatchPlannerEvent('step-completed', { stepIndex: this.currentStep });\n      this.render();\n      this.focusCurrentStep();\n      return;\n    }\n    if (action === 'back') {\n      this.currentStep = Math.max(0, this.currentStep - 1);\n      this.render();\n      this.focusCurrentStep();\n      return;\n    }\n    if (action === 'step') {\n      const index = Number.parseInt(event.target.closest('[data-step-index]')?.dataset.stepIndex || '0', 10);\n      if (index <= this.currentStep) {\n        this.currentStep = index;\n        this.render();\n        this.focusCurrentStep();\n      }\n      return;\n    }\n    if (action === 'calculate') {\n      this.calculateAndRender();\n      return;\n    }\n    if (action === 'recalculate') {\n      this.calculateAndRender();\n      return;\n    }\n    if (action === 'edit') {\n      const index = Number.parseInt(event.target.closest('[data-step-index]')?.dataset.stepIndex || '0', 10);\n      this.currentStep = Math.max(0, Math.min(index, this.steps().length - 1));\n      this.dirtySinceResult = true;\n      this.showEditSummary = false;\n      this.track('watering_result_edited', { variant: this.variant, step_index: this.currentStep });\n      this.render();\n      this.focusCurrentStep();\n      return;\n    }\n    if (action === 'edit-summary') {\n      this.showEditSummary = !this.showEditSummary;\n      this.render();\n      requestAnimationFrame(() => this.querySelector('.cs-watering-edit-summary')?.focus?.());\n      return;\n    }\n    if (action === 'focus-current-step') {\n      this.runtimeError = '';\n      this.render();\n      this.focusCurrentStep();\n      return;\n    }\n    if (action === 'manual-check') {\n      this.form.observationMethod = 'multiple_manual';\n      this.dirtySinceResult = Boolean(this.result);\n      this.saveDraft();\n      this.render();\n      requestAnimationFrame(() => this.querySelector('#cs-watering-input-topMoisture')?.focus?.());\n      return;\n    }\n    if (action === 'handoff') {\n      sessionStorage.setItem(STORAGE_TRANSFER_KEY, JSON.stringify({\n        source: 'article',\n        createdAt: Date.now(),\n        modelVersion: MODEL_VERSION,\n        inputMode: this.plannerMode,\n        input: this.form,\n        preparedInput: this.calculationInput(),\n        result: this.result || undefined\n      }));\n      this.track('watering_full_page_clicked', { variant: this.variant });\n      this.dispatchPlannerEvent('full-page-opened', { variant: this.variant });\n      window.location.href = this.fullUrl;\n      return;\n    }\n    if (action === 'reset') {\n      this.resetRequested = true;\n      this.render();\n      requestAnimationFrame(() => this.querySelector('[data-action=\"cancel-reset\"]')?.focus?.());\n      return;\n    }\n    if (action === 'cancel-reset') {\n      this.resetRequested = false;\n      this.render();\n      return;\n    }\n    if (action === 'confirm-reset') {\n      this.resetPlanner();\n    }\n  }\n\n  calculateAndRender() {\n    if (!this.validateAll()) return;\n    this.isCalculating = true;\n    this.runtimeError = '';\n    this.render();\n    requestAnimationFrame(() => {\n      try {\n        this.result = calculateWateringPlan(this.calculationInput());\n        this.dirtySinceResult = false;\n        this.resetRequested = false;\n        this.showEditSummary = false;\n        this.track('watering_calculated', { result_status: this.result.actionId, confidence: this.result.confidence.label, variant: this.variant });\n        this.track('watering_result_category', { result_status: this.result.actionId, confidence: this.result.confidence.label });\n        if (this.result.warningCodes?.length) this.track('watering_warning_triggered', { warning_code: this.result.warningCodes[0], result_status: this.result.actionId });\n        this.dispatchPlannerEvent('calculated', { actionId: this.result.actionId, confidence: this.result.confidence.label });\n        this.saveDraft();\n      } catch {\n        this.runtimeError = 'Die Auswertung konnte nicht abgeschlossen werden. Deine Eingaben bleiben erhalten.';\n      } finally {\n        this.isCalculating = false;\n      }\n      this.render();\n      requestAnimationFrame(() => this.querySelector('.cs-watering-result, .cs-watering-runtime-error')?.focus());\n    });\n  }\n\n  resetPlanner() {\n    this.form = { ...DEFAULT_FORM };\n    this.errors = {};\n    this.result = null;\n    this.dirtySinceResult = false;\n    this.runtimeError = '';\n    this.resetRequested = false;\n    this.showEditSummary = false;\n    this.currentStep = 0;\n    this.started = this.variant === 'full';\n    sessionStorage.removeItem(this.storageKey);\n    this.track('watering_reset', { variant: this.variant });\n    this.dispatchPlannerEvent('reset', { variant: this.variant });\n    this.render();\n  }\n\n  validateStep() {\n    const step = this.currentStep;\n    this.errors = {};\n    if (this.plannerMode === 'expert') {\n      if (step === 0) this.validateSystem();\n      if (step === 1) this.validateRoot();\n      if (step === 2) this.validatePlant();\n      if (step === 3) this.validateMoisture();\n      if (step === 4) this.validateHistory();\n    } else {\n      if (step === 0) this.validateBeginnerSystem();\n      if (step === 1) this.validateBeginnerMoisture();\n      if (step === 2) this.validateBeginnerPlant();\n      if (step === 3) this.validateBeginnerHistory();\n    }\n    return this.renderValidationResult();\n  }\n\n  focusCurrentStep() {\n    requestAnimationFrame(() => this.querySelector('.cs-watering-step h3')?.focus?.());\n  }\n\n  focusValidationSummary() {\n    const focusSummary = () => {\n      const summary = this.querySelector('.cs-watering-error-summary');\n      if (!summary) return;\n      summary.focus?.({ preventScroll: true });\n      summary.scrollIntoView?.({ behavior: motionSafeScrollBehavior(), block: 'center' });\n    };\n    requestAnimationFrame(() => {\n      focusSummary();\n      setTimeout(focusSummary, 50);\n    });\n  }\n\n  focusErrorTarget(href) {\n    const id = String(href || '').replace(/^#/, '');\n    if (!id) return;\n    const target = this.querySelector(`#${cssEscape(id)}`);\n    if (!target) return;\n    const focusTarget = target.matches?.('fieldset, input, select, textarea, button')\n      ? target\n      : target.querySelector?.('input, select, textarea, button') || target;\n    focusTarget.focus?.({ preventScroll: true });\n    target.scrollIntoView?.({ behavior: motionSafeScrollBehavior(), block: 'center' });\n  }\n\n  validateNumericField(field) {\n    delete this.errors[field];\n    if (['bedLengthCm', 'bedWidthCm', 'bedHeightCm', 'potDiameterCm', 'potHeightCm'].includes(field)) return;\n    if (field === 'substrateVolumeLiters') {\n      if (this.plannerMode === 'beginner' && !this.hasValidDirectNumber(this.form.substrateVolumeLiters)) {\n        this.errors.substrateVolumeLiters = 'Bitte gib ein tats\u00E4chliches Substratvolumen gr\u00F6\u00DFer als 0 Liter ein.';\n      } else if (this.plannerMode === 'expert' && !this.hasValidVolume()) {\n        this.errors.substrateVolumeLiters = 'Bitte gib das Substratvolumen an oder nutze Ma\u00DFe f\u00FCr Beet oder Topf.';\n      }\n    }\n    if (field === 'plantCount' && !this.hasValidInteger(this.form.plantCount)) {\n      this.errors.plantCount = this.plannerMode === 'beginner' ? 'Bitte gib die Anzahl der Pflanzen an.' : 'Bitte gib an, wie viele Hauptpflanzen im System stehen.';\n    }\n    if (field === 'emitterCount' && this.form.wateringMethod === 'drip' && this.form.systemType === 'large_bed' && !this.hasValidInteger(this.form.emitterCount)) {\n      this.errors.emitterCount = 'Gib bei Tropfbew\u00E4sserung im gro\u00DFen Beet die Anzahl der Tropfer oder Gie\u00DFpunkte an.';\n    }\n    if (field === 'lastWateringHoursAgo' && !this.form.lastWateringUnknown && !this.form.lastWateringHoursAgo) {\n      this.errors.lastWateringHoursAgo = 'Bitte gib an, wann zuletzt gegossen wurde, oder markiere es als unbekannt.';\n    }\n    if (field === 'lastWaterAmountLiters' && this.form.lastWaterAmountLiters && !this.hasValidDirectNumber(this.form.lastWaterAmountLiters)) {\n      this.errors.lastWaterAmountLiters = 'Bitte gib die Wassermenge gr\u00F6\u00DFer als 0 Liter ein oder lasse das Feld leer.';\n    }\n    if (field === 'drainageAmountLiters') this.validateDrainageAmount();\n  }\n\n  validateAll() {\n    this.errors = {};\n    if (this.plannerMode === 'expert') {\n      this.validateSystemAndRoot();\n      this.validatePlant();\n      this.validateMoisture();\n      this.validateHistory();\n    } else {\n      this.validateBeginnerSystem();\n      this.validateBeginnerMoisture();\n      this.validateBeginnerPlant();\n      this.validateBeginnerHistory();\n    }\n    return this.renderValidationResult();\n  }\n\n  validateSystemAndRoot() {\n    this.validateSystem();\n    this.validateRoot();\n  }\n\n  validateSystem() {\n    if (!this.hasValidVolume()) {\n      this.errors.substrateVolumeLiters = 'Bitte gib das Substratvolumen an oder nutze Ma\u00DFe f\u00FCr Beet oder Topf.';\n    }\n    if (!this.hasValidInteger(this.form.plantCount)) this.errors.plantCount = 'Bitte gib an, wie viele Hauptpflanzen im System stehen.';\n    if (this.form.systemType === 'fabric_pot' && this.form.drainageMode === 'closed') {\n      this.errors.drainageMode = 'Bei Stofft\u00F6pfen ist \u201Egeschlossen ohne Ablauf\u201C nicht stimmig. W\u00E4hle freien oder kontrollierten Ablauf.';\n    }\n    if (this.form.wateringMethod === 'drip' && this.form.systemType === 'large_bed' && !this.hasValidInteger(this.form.emitterCount)) {\n      this.errors.emitterCount = 'Gib bei Tropfbew\u00E4sserung im gro\u00DFen Beet die Anzahl der Tropfer oder Gie\u00DFpunkte an.';\n    }\n  }\n\n  validateRoot() {\n    if (!this.form.rootedPercent) this.errors.rootedPercent = 'Bitte sch\u00E4tze den durchwurzelten Anteil oder w\u00E4hle bewusst \u201Enicht sicher\u201C.';\n  }\n\n  validatePlant() {\n    if (this.form.plantPosture === 'unknown') this.errors.plantPosture = 'Bitte w\u00E4hle die Pflanzenreaktion, soweit m\u00F6glich.';\n  }\n\n  validateMoisture() {\n    if (this.form.middleMoisture === 'unknown'\n      && this.form.deepMoisture === 'unknown'\n      && !['sensor_only', 'not_checked'].includes(this.form.observationMethod)) {\n      this.errors.middleMoisture = 'Bitte pr\u00FCfe mindestens Mitte oder Tiefe, wenn du eine Mengenempfehlung m\u00F6chtest.';\n    }\n  }\n\n  validateHistory() {\n    if (!this.form.lastWateringUnknown && !this.form.lastWateringHoursAgo) {\n      this.errors.lastWateringHoursAgo = 'Bitte gib an, wann zuletzt gegossen wurde, oder markiere es als unbekannt.';\n    }\n    this.validateDrainageAmount();\n  }\n\n  validateBeginnerSystem() {\n    if (!this.hasValidDirectNumber(this.form.substrateVolumeLiters)) this.errors.substrateVolumeLiters = 'Bitte gib ein tats\u00E4chliches Substratvolumen gr\u00F6\u00DFer als 0 Liter ein.';\n    if (!this.hasValidInteger(this.form.plantCount)) this.errors.plantCount = 'Bitte gib die Anzahl der Pflanzen an.';\n  }\n\n  validateBeginnerMoisture() {\n    if (this.form.rootZoneMoisture === 'unknown') {\n      this.errors.rootZoneMoisture = 'Bitte w\u00E4hle, wie sich der Wurzelbereich anf\u00FChlt.';\n    }\n  }\n\n  validateBeginnerPlant() {\n    if (this.form.plantPosture === 'unknown') this.errors.plantPosture = 'Bitte w\u00E4hle die sichtbare Pflanzenreaktion.';\n  }\n\n  validateBeginnerHistory() {\n    if (this.form.lastWaterAmountLiters && !this.hasValidDirectNumber(this.form.lastWaterAmountLiters)) {\n      this.errors.lastWaterAmountLiters = 'Bitte gib die Wassermenge gr\u00F6\u00DFer als 0 Liter ein oder lasse das Feld leer.';\n    }\n    if (!this.form.lastWaterAmountLiters && !(this.form.warningSignals || []).length) {\n      this.errors.lastWaterAmountLiters = 'Gib deine \u00FCbliche Wassermenge an oder w\u00E4hle ein Warnzeichen, wenn du gerade kein Gef\u00FChl f\u00FCr die Menge hast.';\n    }\n  }\n\n  calculationInput() {\n    if (this.plannerMode === 'expert') return { ...this.form };\n    const prepared = { ...this.form };\n    const stage = STAGE_DEFAULTS[prepared.growthStage] || STAGE_DEFAULTS.veg_small;\n    prepared.phase = stage.phase;\n    prepared.rootedPercent = stage.rootedPercent;\n    prepared.plantSize = stage.plantSize;\n    prepared.growth = stage.growth;\n    prepared.systemType = this.inferBeginnerSystemType(prepared);\n    prepared.observationMethod = prepared.rootZoneMoisture === 'unknown' ? 'not_checked' : 'single_manual';\n    prepared.lastWateringUnknown = true;\n    prepared.lastWaterAmountUnknown = !prepared.lastWaterAmountLiters;\n    prepared.wateringMethod = 'unknown';\n    prepared.emitterCount = '';\n    prepared.pulsesLastTime = 'unknown';\n    prepared.wateredArea = 'full_surface';\n    prepared.substrateStructure = 'unknown';\n    prepared.lightIntensity = 'medium';\n    prepared.airflow = 'balanced';\n    prepared.recentChanges = ['none'];\n    prepared.moistureDistribution = 'unknown';\n    this.applyBeginnerMoisture(prepared);\n    this.applyBeginnerWarnings(prepared);\n    return prepared;\n  }\n\n  applyStageDefaults(updateForm = true) {\n    const stage = STAGE_DEFAULTS[this.form.growthStage] || STAGE_DEFAULTS.veg_small;\n    if (!updateForm) return stage;\n    this.form.phase = stage.phase;\n    this.form.rootedPercent = stage.rootedPercent;\n    this.form.plantSize = stage.plantSize;\n    this.form.growth = stage.growth;\n    return stage;\n  }\n\n  syncSystemDependencies() {\n    if (this.form.systemType === 'fabric_pot' && this.form.drainageMode === 'closed') {\n      this.form.drainageMode = 'free';\n    }\n    this.syncDrainageDependencies();\n    this.syncWateringMethodDependencies();\n  }\n\n  syncDrainageDependencies() {\n    if (this.form.drainageMode === 'closed') {\n      this.form.drainageResponse = 'closed';\n      this.form.drainageAmountLiters = '';\n    }\n    if (this.form.drainageMode !== 'closed' && this.form.drainageResponse === 'closed') this.form.drainageResponse = 'unknown';\n    this.syncDrainageResponseDependencies();\n  }\n\n  syncDrainageResponseDependencies() {\n    if (this.form.drainageResponse !== 'yes_known') this.form.drainageAmountLiters = '';\n  }\n\n  syncWateringMethodDependencies() {\n    if (this.form.wateringMethod !== 'drip') this.form.emitterCount = '';\n  }\n\n  drainageOptions() {\n    return this.form.systemType === 'fabric_pot'\n      ? SELECTS.drainageMode.filter(([value]) => value !== 'closed')\n      : SELECTS.drainageMode;\n  }\n\n  drainageResponseOptions() {\n    return [\n      ['none', 'nein, kein messbarer Drain'],\n      ['yes_known', 'ja, Menge bekannt'],\n      ['yes_unknown', 'ja, Menge unbekannt'],\n      ['unknown', 'nicht sicher']\n    ];\n  }\n\n  validateDrainageAmount() {\n    delete this.errors.drainageAmountLiters;\n    if (this.form.drainageMode === 'closed' || this.form.drainageResponse !== 'yes_known') return;\n    if (!this.hasValidDirectNumber(this.form.drainageAmountLiters)) {\n      this.errors.drainageAmountLiters = 'Bitte gib die gemessene Ablaufmenge gr\u00F6\u00DFer als 0 Liter ein.';\n      return;\n    }\n    const drainageAmount = this.numberValue(this.form.drainageAmountLiters);\n    const lastAmount = this.hasValidDirectNumber(this.form.lastWaterAmountLiters)\n      ? this.numberValue(this.form.lastWaterAmountLiters)\n      : null;\n    if (lastAmount !== null && drainageAmount > lastAmount) {\n      this.errors.drainageAmountLiters = 'Der gemessene Ablauf kann nicht gr\u00F6\u00DFer als die zugef\u00FChrte Wassermenge sein.';\n    }\n  }\n\n  hasValidDirectNumber(value) {\n    const number = Number.parseFloat(String(value || '').replace(',', '.').trim());\n    return Number.isFinite(number) && number > 0;\n  }\n\n  numberValue(value) {\n    return Number.parseFloat(String(value || '').replace(',', '.').trim());\n  }\n\n  hasValidInteger(value) {\n    const number = Number.parseInt(String(value || ''), 10);\n    return Number.isFinite(number) && number > 0;\n  }\n\n  hasValidVolume() {\n    if (this.hasValidDirectNumber(this.form.substrateVolumeLiters)) return true;\n    return this.hasValidDirectNumber(this.form.bedLengthCm)\n      && this.hasValidDirectNumber(this.form.bedWidthCm)\n      && this.hasValidDirectNumber(this.form.bedHeightCm)\n      || this.hasValidDirectNumber(this.form.potDiameterCm)\n      && this.hasValidDirectNumber(this.form.potHeightCm);\n  }\n\n  inferBeginnerSystemType(input) {\n    const volume = Number.parseFloat(String(input.substrateVolumeLiters || '').replace(',', '.'));\n    if (input.drainageMode === 'closed' && Number.isFinite(volume) && volume >= 80) return 'large_bed';\n    if (input.drainageMode === 'free') return 'fabric_pot';\n    return 'other_container';\n  }\n\n  applyBeginnerMoisture(input) {\n    const root = input.rootZoneMoisture || 'unknown';\n    input.middleMoisture = root;\n    if (root === 'saturated') input.deepMoisture = 'saturated';\n    else if (root === 'wet') input.deepMoisture = 'wet';\n    else if (root === 'very_dry_hydrophobic') {\n      input.topMoisture = 'very_dry_hydrophobic';\n      input.middleMoisture = 'dry';\n      input.deepMoisture = 'dry';\n    } else if (root === 'dry') input.deepMoisture = 'slightly_dry';\n    else if (root === 'slightly_dry') input.deepMoisture = 'unknown';\n    else if (root === 'evenly_moist') input.deepMoisture = 'unknown';\n    else input.deepMoisture = 'unknown';\n  }\n\n  applyBeginnerWarnings(input) {\n    const signals = Array.isArray(input.warningSignals) ? input.warningSignals : [];\n    input.standingWater = signals.includes('standing_water') ? 'yes' : 'no';\n    input.substrateSmell = signals.includes('foul_smell') ? 'foul' : 'earthy';\n    input.rootObservation = signals.includes('soft_roots') ? 'soft' : 'not_checked';\n    input.fungusGnats = signals.includes('fungus_gnats') ? 'increasing' : 'no';\n    input.waterRunsThrough = signals.includes('runs_through') ? 'yes' : 'unknown';\n    input.substrateEdgeGap = signals.includes('edge_gap') ? 'yes' : 'unknown';\n  }\n\n  renderValidationResult() {\n    this.render();\n    const entries = Object.entries(this.errors).filter(([, message]) => message);\n    if (!entries.length) return true;\n    this.track('watering_validation_error', { variant: this.variant, step_index: this.currentStep, error_count: entries.length });\n    this.focusValidationSummary();\n    return false;\n  }\n\n  currentUiState() {\n    if (this.isCalculating) return 'calculating';\n    if (this.runtimeError) return 'error';\n    if (this.result && !this.dirtySinceResult) return 'result';\n    return 'editing';\n  }\n\n  render() {\n    if (!this.started) {\n      this.innerHTML = this.localizeMarkup(this.renderIntro());\n      return;\n    }\n    if (this.collapsed) {\n      this.innerHTML = this.localizeMarkup(this.renderCollapsed());\n      return;\n    }\n    const steps = this.steps();\n    const current = steps[this.currentStep];\n    const uiState = this.currentUiState();\n    this.innerHTML = this.localizeMarkup(`\n      <div class=\"cs-watering-shell cs-watering-shell--${this.variant} cs-watering-shell--${this.plannerMode}\" aria-busy=\"${uiState === 'calculating' ? 'true' : 'false'}\" data-ui-state=\"${escapeAttr(uiState)}\">\n        ${this.renderHeader()}\n        ${this.renderRestorePrompt()}\n        ${this.renderModeToggle()}\n        ${this.renderProgress(steps)}\n        ${this.transferNotice ? `<p class=\"cs-watering-transfer\">${escapeHtml(this.transferNotice)}</p>` : ''}\n        ${this.renderErrors()}\n        ${this.renderRuntimeError()}\n        ${this.renderDirtyNotice()}\n        <div class=\"cs-watering-step\" data-current-step=\"${this.currentStep}\">\n          <h3 tabindex=\"-1\">${escapeHtml(current.title)}</h3>\n          ${current.render()}\n        </div>\n        ${this.renderActions()}\n        ${this.result ? this.renderResult() : ''}\n        ${this.renderResetDialog()}\n      </div>\n    `);\n  }\n\n  localizeMarkup(markup) {\n    if (this.locale === 'de') return markup;\n    const translations = { ...this.translations, ...WATERING_OPTION_COPY[this.locale] };\n    return Object.entries(translations)\n      .sort(([sourceA], [sourceB]) => sourceB.length - sourceA.length)\n      .reduce((output, [source, target]) => output.split(source).join(target), markup);\n  }\n\n  renderDirtyNotice() {\n    if (!this.dirtySinceResult) return '';\n    return `\n      <div class=\"cs-watering-dirty\" role=\"status\">\n        <div>\n          <strong>Deine Angaben wurden ge\u00E4ndert.</strong>\n          <p>Das sichtbare Ergebnis basiert noch auf fr\u00FCheren Angaben.</p>\n        </div>\n        <button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"recalculate\">Neu auswerten</button>\n      </div>\n    `;\n  }\n\n  renderResetDialog() {\n    if (!this.resetRequested) return '';\n    return `\n      <div class=\"cs-watering-reset-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"${escapeAttr(this.instanceId)}-reset-title\">\n        <div class=\"cs-watering-reset-dialog__panel\">\n          <h3 id=\"${escapeAttr(this.instanceId)}-reset-title\">Gie\u00DF-Check zur\u00FCcksetzen?</h3>\n          <p>Alle aktuellen Eingaben und das berechnete Ergebnis werden gel\u00F6scht.</p>\n          <div class=\"cs-watering-reset-dialog__actions\">\n            <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"cancel-reset\">Abbrechen</button>\n            <button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"confirm-reset\">Zur\u00FCcksetzen</button>\n          </div>\n        </div>\n      </div>\n    `;\n  }\n\n  renderIntro() {\n    return `\n      <div class=\"cs-watering-shell cs-watering-shell--compact cs-watering-intro\">\n        <p class=\"cs-watering-kicker\">CannaSelection Gie\u00DF-Check</p>\n        <h2>Berechne deinen n\u00E4chsten sicheren Gie\u00DFschritt</h2>\n        <p>Der schnelle Check fragt nur die wichtigsten Punkte ab: Substratvolumen, Stadium, Feuchtegef\u00FChl, Pflanzenreaktion und deine aktuelle Gie\u00DFmenge.</p>\n        ${this.renderRestorePrompt()}\n        <div class=\"cs-watering-principle\">\n          <strong>Grundprinzip:</strong> Erst pr\u00FCfen, ob \u00FCberhaupt gegossen werden sollte. Eine trockene Oberfl\u00E4che allein ist kein ausreichendes Signal.\n        </div>\n        <div class=\"cs-watering-actions\">\n          <button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"start\">Gie\u00DF-Check starten</button>\n          <button class=\"cs-watering-button cs-watering-button--text\" type=\"button\" data-action=\"toggle-info\">So funktioniert der Rechner</button>\n        </div>\n        ${this.showInfo ? `<div class=\"cs-watering-info-panel\"><p>Der Rechner pr\u00FCft zuerst, ob eine weitere Wassergabe \u00FCberhaupt sinnvoll ist. Erst wenn keine Warnzeichen f\u00FCr eine zu nasse Wurzelzone vorliegen, wird ein vorsichtiger Mengenbereich berechnet.</p></div>` : ''}\n      </div>\n    `;\n  }\n\n  renderCollapsed() {\n    return `\n      <div class=\"cs-watering-shell cs-watering-shell--compact cs-watering-collapsed\">\n        <p class=\"cs-watering-kicker\">CannaSelection Gie\u00DF-Check</p>\n        <h2>Dein Gie\u00DF-Check ist eingeklappt.</h2>\n        <p>Deine Eingaben bleiben in dieser Sitzung erhalten.</p>\n        <div class=\"cs-watering-actions\">\n          <button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"resume\">Gie\u00DF-Check fortsetzen</button>\n          ${this.result ? `<button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"handoff\">Vollst\u00E4ndige Auswertung \u00F6ffnen</button>` : ''}\n        </div>\n      </div>\n    `;\n  }\n\n  renderHeader() {\n    return `\n      <div class=\"cs-watering-header\">\n        <div class=\"cs-watering-header-line\">\n          <p class=\"cs-watering-kicker\">CannaSelection Gie\u00DF-Check <span aria-label=\"Beta: Diese Berechnungslogik wird anhand praktischer CannaSelection-F\u00E4lle weiter kalibriert.\">Beta</span></p>\n          ${this.variant === 'compact' ? `<button class=\"cs-watering-button cs-watering-button--text cs-watering-collapse-button\" type=\"button\" data-action=\"collapse\">Einklappen</button>` : ''}\n        </div>\n        <h2>${this.variant === 'compact' ? 'CannaSelection Gie\u00DF-Check' : 'Living Soil Wasserbedarfsrechner'}</h2>\n        <p>Wasserbedarf einsch\u00E4tzen, \u00DCberw\u00E4sserung vermeiden und den aktiven Wurzelraum richtig versorgen.</p>\n      </div>\n    `;\n  }\n\n  renderRestorePrompt() {\n    if (!this.restoreNotice || !this.pendingDraft) return '';\n    return `\n      <div class=\"cs-watering-restore\" role=\"status\">\n        <div>\n          <strong>Dein letzter Gie\u00DF-Check ist noch vorhanden.</strong>\n          <p>Du kannst die gespeicherten Angaben aus dieser Sitzung fortsetzen oder neu starten.</p>\n        </div>\n        <div class=\"cs-watering-restore__actions\">\n          <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"restore-draft\">Fortsetzen</button>\n          <button class=\"cs-watering-button cs-watering-button--text\" type=\"button\" data-action=\"discard-draft\">Verwerfen</button>\n        </div>\n      </div>\n    `;\n  }\n\n  renderModeToggle() {\n    return `\n      <div class=\"cs-watering-mode-panel\">\n        <p class=\"cs-watering-kicker\">Modus w\u00E4hlen</p>\n        <div class=\"cs-watering-mode\" role=\"group\" aria-label=\"Modus w\u00E4hlen\">\n          <button type=\"button\" data-action=\"set-mode\" data-mode=\"beginner\" class=\"${this.plannerMode === 'beginner' ? 'is-active' : ''}\" aria-pressed=\"${this.plannerMode === 'beginner' ? 'true' : 'false'}\">\n            <strong>Schneller Check</strong>\n            <span>wenige Fragen, schnelle Einsch\u00E4tzung</span>\n          </button>\n          <button type=\"button\" data-action=\"set-mode\" data-mode=\"expert\" class=\"${this.plannerMode === 'expert' ? 'is-active' : ''}\" aria-pressed=\"${this.plannerMode === 'expert' ? 'true' : 'false'}\">\n            <strong>Expert-Modus</strong>\n            <span>mehr Details f\u00FCr genaue Pr\u00FCfung</span>\n          </button>\n        </div>\n      </div>\n      <p class=\"cs-watering-mode-note\">${this.plannerMode === 'beginner'\n        ? 'Empfohlen f\u00FCr den schnellen \u00DCberblick: Du beantwortest nur die wichtigsten Punkte, der Rechner bewertet konservativ.'\n        : 'F\u00FCr genaue Pr\u00FCfungen: zus\u00E4tzliche Angaben zu Wurzelraum, Feuchteprofil, Substratstruktur und Warnsignalen.'}</p>\n    `;\n  }\n\n  renderProgress(steps) {\n    return `\n      <div class=\"cs-watering-progress\" aria-label=\"Fortschritt\">\n        <span class=\"cs-watering-mobile-progress\">Schritt ${this.currentStep + 1} von ${steps.length}: ${escapeHtml(steps[this.currentStep]?.title || '')}</span>\n        <div class=\"cs-watering-progress-bar\"><span style=\"width:${((this.currentStep + 1) / steps.length) * 100}%\"></span></div>\n        <div class=\"cs-watering-step-tabs cs-watering-step-tabs--${steps.length}\">\n          ${steps.map((step, index) => `\n            <button type=\"button\" data-action=\"step\" data-step-index=\"${index}\" class=\"${index === this.currentStep ? 'is-active' : ''}\" ${index > this.currentStep ? 'disabled aria-disabled=\"true\"' : ''}>\n              <span>${index < this.currentStep ? '\u2713' : index + 1}</span>${escapeHtml(step.title)}\n            </button>\n          `).join('')}\n        </div>\n      </div>\n    `;\n  }\n\n  renderSystemStep(compact) {\n    return `\n      <div class=\"cs-watering-form-stack cs-watering-expert-system\">\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>System und Ablauf</h4>\n            <p>Gef\u00E4\u00DF und Wasserablauf bestimmen, wie vorsichtig der Rechner sp\u00E4ter bewertet.</p>\n          </div>\n          <div class=\"cs-watering-grid ${compact ? 'cs-watering-grid--compact' : ''} cs-watering-grid--expert-pairs\">\n            ${this.select('systemType', 'Anbausystem', SELECTS.systemType)}\n            ${this.select('drainageMode', 'Ablauf / Drainage', this.drainageOptions())}\n          </div>\n        </section>\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Volumen und Pflanzen</h4>\n            <p>Das tats\u00E4chliche Substratvolumen ist die Basis. Pflanzenanzahl hilft bei der Verbrauchseinordnung.</p>\n          </div>\n          <div class=\"cs-watering-grid cs-watering-grid--expert-numbers\">\n            ${this.input('substrateVolumeLiters', 'Substratvolumen', 'z. B. 40', 'Liter')}\n            ${this.input('plantCount', 'Pflanzen im System', 'z. B. 1', 'Pflanzen')}\n          </div>\n        </section>\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Gie\u00DFart</h4>\n            <p>Hier geht es nur um die Verteilung im Substrat, nicht um eine feste Bew\u00E4sserungstechnik.</p>\n          </div>\n          <div class=\"cs-watering-grid ${compact ? 'cs-watering-grid--compact' : ''} cs-watering-grid--expert-pairs\">\n            ${this.select('wateringMethod', 'Gie\u00DFart', SELECTS.wateringMethod)}\n            ${this.form.wateringMethod === 'drip' ? this.input('emitterCount', 'Tropfer / Gie\u00DFpunkte', 'z. B. 4', 'St\u00FCck') : ''}\n          </div>\n          ${this.renderSystemNotice()}\n        </section>\n      </div>\n      <details class=\"cs-watering-details\">\n        <summary>Volumen \u00FCber Ma\u00DFe berechnen</summary>\n        <div class=\"cs-watering-grid\">\n          ${this.input('bedLengthCm', 'Beetl\u00E4nge', '', 'cm')}\n          ${this.input('bedWidthCm', 'Beetbreite', '', 'cm')}\n          ${this.input('bedHeightCm', 'Substrath\u00F6he', '', 'cm')}\n          ${this.input('potDiameterCm', 'Topfdurchmesser', '', 'cm')}\n          ${this.input('potHeightCm', 'Topfh\u00F6he', '', 'cm')}\n        </div>\n        ${this.renderCalculatedVolume()}\n      </details>\n    `;\n  }\n\n  renderSystemNotice() {\n    if (this.form.drainageMode === 'closed') {\n      return `\n        <div class=\"cs-watering-help-card cs-watering-help-card--notice\">\n          <strong>Geschlossenes System</strong>\n          <p>\u00DCbersch\u00FCssiges Wasser kann hier nicht regul\u00E4r ablaufen. Steine, Kies oder Bl\u00E4hton am Boden z\u00E4hlen nicht als Drainage.</p>\n        </div>\n      `;\n    }\n    if (this.form.wateringMethod === 'drip' && this.form.systemType === 'large_bed' && String(this.form.emitterCount || '') === '1') {\n      return `\n        <div class=\"cs-watering-help-card cs-watering-help-card--notice\">\n          <strong>Ein Tropfer im gro\u00DFen Beet</strong>\n          <p>Ein einzelner Ausgabepunkt bew\u00E4ssert h\u00E4ufig nur eine lokale S\u00E4ule. Das Ergebnis ber\u00FCcksichtigt dieses Verteilungsrisiko.</p>\n        </div>\n      `;\n    }\n    return '';\n  }\n\n  renderCalculatedVolume() {\n    const value = this.previewVolume();\n    if (!value) return '';\n    return `<p class=\"cs-watering-calculated-volume\">Berechnetes Substratvolumen: etwa <strong>${formatGerman(value)} Liter</strong>. Verwendet wird die tats\u00E4chliche Erdtiefe.</p>`;\n  }\n\n  previewVolume() {\n    if (this.hasValidDirectNumber(this.form.bedLengthCm) && this.hasValidDirectNumber(this.form.bedWidthCm) && this.hasValidDirectNumber(this.form.bedHeightCm)) {\n      return (this.numberValue(this.form.bedLengthCm) * this.numberValue(this.form.bedWidthCm) * this.numberValue(this.form.bedHeightCm)) / 1000;\n    }\n    if (this.hasValidDirectNumber(this.form.potDiameterCm) && this.hasValidDirectNumber(this.form.potHeightCm)) {\n      return (Math.PI * Math.pow(this.numberValue(this.form.potDiameterCm) / 2, 2) * this.numberValue(this.form.potHeightCm)) / 1000;\n    }\n    return null;\n  }\n\n  renderBeginnerSystemStep() {\n    return `\n      <div class=\"cs-watering-form-stack\">\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Grunddaten</h4>\n            <p>Volumen und Pflanzenanzahl reichen als Basis f\u00FCr die erste Einsch\u00E4tzung.</p>\n          </div>\n          <div class=\"cs-watering-grid cs-watering-grid--quick-numbers\">\n            ${this.input('substrateVolumeLiters', 'Substratvolumen', 'z. B. 40', 'Liter')}\n            ${this.input('plantCount', 'Pflanzenanzahl', 'z. B. 1', 'Pflanzen')}\n          </div>\n        </section>\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Stadium und Ablauf</h4>\n            <p>Damit sch\u00E4tzen wir ein, ob der Verbrauch eher gering, normal oder erh\u00F6ht ist.</p>\n          </div>\n          <div class=\"cs-watering-grid\">\n            ${this.nativeSelect('growthStage', 'Pflanzenstadium', SELECTS.growthStage)}\n            ${this.nativeSelect('drainageMode', 'Wasserablauf', [\n              ['free', 'Wasser kann ablaufen / Stofftopf'],\n              ['closed', 'geschlossenes System'],\n              ['unknown', 'nicht sicher']\n            ])}\n          </div>\n        </section>\n      </div>\n    `;\n  }\n\n  renderRootStep() {\n    return `\n      <div class=\"cs-watering-grid\">\n        ${this.select('rootedPercent', 'Aktiv durchwurzelter Anteil', SELECTS.rootedPercent)}\n        <div class=\"cs-watering-help-card\">\n          <strong>Warum das wichtig ist</strong>\n          <p>Wasserbedarf entsteht im aktiven Wurzelraum. Ein gro\u00DFes Beet mit kleiner Pflanze braucht nicht automatisch viel Wasser.</p>\n        </div>\n      </div>\n    `;\n  }\n\n  renderPlantStep() {\n    return `\n      <div class=\"cs-watering-grid\">\n        ${this.select('phase', 'Pflanzenphase', SELECTS.phase)}\n        ${this.select('plantSize', 'Pflanzengr\u00F6\u00DFe', SELECTS.plantSize)}\n        ${this.select('growth', 'Aktueller Zuwachs', SELECTS.growth)}\n        ${this.select('plantPosture', 'Pflanzenreaktion', SELECTS.plantPosture)}\n        ${this.select('consumptionTrend', 'Verbrauchstrend', SELECTS.consumptionTrend)}\n      </div>\n      <fieldset class=\"cs-watering-fieldset\">\n        <legend>K\u00FCrzliche \u00C4nderungen</legend>\n        <div class=\"cs-watering-checks\">\n          ${RECENT_CHANGES.map(([value, label]) => this.checkbox('recentChanges', value, label, this.form.recentChanges.includes(value))).join('')}\n        </div>\n      </fieldset>\n    `;\n  }\n\n  renderBeginnerPlantStep() {\n    return `\n      <div class=\"cs-watering-form-stack\">\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Pflanzenbild</h4>\n            <p>Die sichtbare Reaktion hilft zu unterscheiden, ob Trockenheit oder zu viel Wasser wahrscheinlicher ist.</p>\n          </div>\n          <div class=\"cs-watering-grid\">\n            ${this.nativeSelect('plantPosture', 'Pflanzenreaktion', [\n          ['stable', 'stabil / aufrecht'],\n          ['light_droop', 'leicht h\u00E4ngend'],\n          ['heavy_droop', 'stark h\u00E4ngend'],\n          ['wilt', 'welk'],\n          ['unknown', 'nicht sicher']\n        ])}\n            ${this.nativeSelect('consumptionTrend', 'Wasserverbrauch', [\n          ['rising', 'wird schneller trocken'],\n          ['stable', 'ungef\u00E4hr wie sonst'],\n          ['falling', 'bleibt l\u00E4nger nass als sonst'],\n          ['unknown', 'nicht sicher']\n        ])}\n            ${this.nativeSelect('climate', 'Klima', [\n          ['cool_humid', 'eher k\u00FChl / feucht'],\n          ['normal', 'normal'],\n          ['warm_dry', 'warm / trocken'],\n          ['hot_dry', 'hei\u00DF / sehr trocken']\n        ])}\n            ${this.nativeSelect('coverCrop', 'Cover Crop oder Mulch', [\n          ['no', 'nein'],\n          ['yes', 'ja'],\n          ['unknown', 'nicht sicher']\n        ])}\n          </div>\n        </section>\n      </div>\n    `;\n  }\n\n  renderMoistureStep() {\n    return `\n      <div class=\"cs-watering-grid\">\n        ${this.select('observationMethod', 'Kontrollmethode', SELECTS.observationMethod)}\n        ${this.renderObservationNotice()}\n        ${this.select('topMoisture', 'Oberfl\u00E4che', SELECTS.moisture)}\n        ${this.select('middleMoisture', 'Mitte des Substrats', SELECTS.moisture)}\n        ${this.select('deepMoisture', 'Tiefe Zone', SELECTS.moisture)}\n        ${this.select('moistureDistribution', 'Feuchteverteilung', SELECTS.moistureDistribution)}\n        ${this.select('standingWater', 'Steht Wasser im System?', SELECTS.tri)}\n        ${this.select('waterRunsThrough', 'Wasser l\u00E4uft sofort durch?', SELECTS.tri)}\n        ${this.select('substrateEdgeGap', 'Rand l\u00F6st sich / Spalten?', SELECTS.tri)}\n        ${this.select('mulchState', 'Mulch / Oberfl\u00E4che', SELECTS.mulchState)}\n        ${this.select('coverCrop', 'Cover Crop aktiv?', SELECTS.tri)}\n      </div>\n    `;\n  }\n\n  renderObservationNotice() {\n    if (this.form.observationMethod === 'sensor_only') {\n      return `\n        <div class=\"cs-watering-help-card cs-watering-help-card--warning\">\n          <strong>Sensorwert allein reicht nicht</strong>\n          <p>Ein einzelner Sensor beschreibt nur seinen Messpunkt. Eine Literempfehlung bleibt gesperrt, bis du manuell mehrere Zonen gepr\u00FCft hast.</p>\n          <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"manual-check\">Manuelle Pr\u00FCfung erg\u00E4nzen</button>\n        </div>\n      `;\n    }\n    if (this.form.observationMethod === 'not_checked') {\n      return `\n        <div class=\"cs-watering-help-card cs-watering-help-card--notice\">\n          <strong>Noch nicht gepr\u00FCft</strong>\n          <p>F\u00FCr eine belastbare Einsch\u00E4tzung solltest du mindestens die mittlere Zone pr\u00FCfen. Bei gro\u00DFen geschlossenen Beeten ist die Tiefenzone entscheidend.</p>\n        </div>\n      `;\n    }\n    if (this.form.standingWater === 'yes') {\n      return `\n        <div class=\"cs-watering-help-card cs-watering-help-card--warning\">\n          <strong>Stehendes Wasser</strong>\n          <p>Eine weitere Wassergabe wird nicht empfohlen, bevor Ursache und Ablauf gepr\u00FCft wurden.</p>\n        </div>\n      `;\n    }\n    return '';\n  }\n\n  renderBeginnerMoistureStep() {\n    return `\n      <div class=\"cs-watering-form-stack\">\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Feuchtebild</h4>\n            <p>Eine trockene Oberfl\u00E4che allein reicht nicht. Entscheidend ist der Bereich darunter.</p>\n          </div>\n          <div class=\"cs-watering-grid\">\n            ${this.nativeSelect('topMoisture', 'Oberfl\u00E4che', [\n          ['wet', 'nass / dunkel'],\n          ['evenly_moist', 'leicht feucht'],\n          ['slightly_dry', 'trocken an der Oberfl\u00E4che'],\n          ['dry', 'deutlich trocken'],\n          ['very_dry_hydrophobic', 'sehr trocken / wasserabweisend'],\n          ['unknown', 'nicht sicher']\n        ])}\n            ${this.nativeSelect('rootZoneMoisture', 'Wurzelbereich darunter', SELECTS.rootZoneMoisture)}\n          </div>\n        </section>\n      </div>\n    `;\n  }\n\n  renderWateringHistoryStep() {\n    return `\n      <div class=\"cs-watering-grid\">\n        ${this.input('lastWateringHoursAgo', 'Letzte Wassergabe vor', 'z. B. 36', 'Stunden')}\n        ${this.checkbox('lastWateringUnknown', 'true', 'Zeitpunkt nicht sicher', this.form.lastWateringUnknown)}\n        ${this.input('lastWaterAmountLiters', 'Letzte Wassermenge', 'z. B. 2,5', 'Liter')}\n        ${this.checkbox('lastWaterAmountUnknown', 'true', 'Menge nicht sicher', this.form.lastWaterAmountUnknown)}\n        ${this.select('pulsesLastTime', 'Letztes Gie\u00DFmuster', SELECTS.pulsesLastTime)}\n        ${this.select('wateredArea', 'Bew\u00E4sserte Fl\u00E4che', SELECTS.wateredArea)}\n        ${this.form.drainageMode === 'closed'\n          ? `<div class=\"cs-watering-help-card\"><strong>Kein Drain-Feld</strong><p>Bei einem geschlossenen System wird kein messbarer Ablauf abgefragt.</p></div>`\n          : `${this.select('drainageResponse', 'Drain beim letzten Gie\u00DFen', this.drainageResponseOptions())}\n            ${this.form.drainageResponse === 'yes_known' ? this.input('drainageAmountLiters', 'Gemessener Ablauf', 'z. B. 0,4', 'Liter') : ''}`}\n        ${this.select('substrateStructure', 'Substratstruktur', SELECTS.substrateStructure)}\n        ${this.select('climate', 'Klima', SELECTS.climate)}\n        ${this.select('lightIntensity', 'Lichtintensit\u00E4t', SELECTS.lightIntensity)}\n        ${this.select('airflow', 'Luftbewegung', SELECTS.airflow)}\n      </div>\n    `;\n  }\n\n  renderBeginnerWateringStep() {\n    return `\n      <div class=\"cs-watering-form-stack\">\n        <section class=\"cs-watering-form-section\">\n          <div class=\"cs-watering-form-section__head\">\n            <h4>Aktuelles Gie\u00DFverhalten</h4>\n            <p>Damit erkennst du, ob deine \u00FCbliche Menge eher zu hoch, zu niedrig oder plausibel ist.</p>\n          </div>\n          <div class=\"cs-watering-grid\">\n            ${this.input('lastWaterAmountLiters', 'Wassermenge pro Gabe', 'z. B. 2,5', 'Liter')}\n            ${this.form.drainageMode === 'closed'\n              ? `<div class=\"cs-watering-help-card cs-watering-help-card--subtle\"><strong>Geschlossenes System</strong><p>Ohne regul\u00E4ren Ablauf bewertet der Rechner vorsichtiger.</p></div>`\n              : this.nativeSelect('drainageResponse', 'Drain beim Gie\u00DFen', [\n                ['none', 'kein Drain / wird aufgenommen'],\n                ['little', 'ein wenig Drain'],\n                ['strong', 'viel Drain'],\n                ['unknown', 'nicht sicher']\n              ])}\n          </div>\n        </section>\n        <details class=\"cs-watering-details cs-watering-details--optional\">\n          <summary>Warnzeichen optional erg\u00E4nzen</summary>\n          <p class=\"cs-watering-fieldset-note\">Nur ausw\u00E4hlen, wenn du es wirklich beobachtest. Der schnelle Check funktioniert auch ohne diese Details.</p>\n          <div class=\"cs-watering-checks cs-watering-checks--cards\">\n            ${WARNING_SIGNALS.map(([value, label]) => this.checkbox('warningSignals', value, label, (this.form.warningSignals || []).includes(value))).join('')}\n          </div>\n        </details>\n      </div>\n    `;\n  }\n\n  renderWarningStep() {\n    return `\n      <div class=\"cs-watering-grid\">\n        ${this.select('fungusGnats', 'Trauerm\u00FCcken sichtbar?', SELECTS.fungusGnats)}\n        ${this.select('substrateSmell', 'Substratgeruch', SELECTS.substrateSmell)}\n        ${this.select('rootObservation', 'Wurzelbeobachtung', SELECTS.rootObservation)}\n        <div class=\"cs-watering-help-card\">\n          <strong>Kein Diagnose-Tool</strong>\n          <p>Bei fauligem Geruch, weichen Wurzeln oder stehendem Wasser gibt der Rechner bewusst keine Literempfehlung aus.</p>\n        </div>\n      </div>\n    `;\n  }\n\n  renderActions() {\n    const isLast = this.currentStep === this.steps().length - 1;\n    const busy = this.isCalculating;\n    return `\n      <div class=\"cs-watering-actions cs-watering-actions--sticky\">\n        <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"back\" ${this.currentStep === 0 || busy ? 'disabled' : ''}>Zur\u00FCck</button>\n        <button class=\"cs-watering-button cs-watering-button--text\" type=\"button\" data-action=\"reset\" ${busy ? 'disabled' : ''}>Zur\u00FCcksetzen</button>\n        ${isLast\n          ? `<button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"calculate\" ${busy ? 'disabled aria-busy=\"true\"' : ''}>${busy ? 'Wird ausgewertet ...' : 'Gie\u00DF-Check auswerten'}</button>`\n          : `<button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"next\" ${busy ? 'disabled' : ''}>Weiter</button>`}\n      </div>\n    `;\n  }\n\n  renderResult() {\n    const result = this.result;\n    const volume = result.recommendedVolume;\n    return `\n      <section class=\"cs-watering-result cs-watering-result--${result.tone}\" tabindex=\"-1\" aria-live=\"polite\" aria-label=\"Gie\u00DF-Check Ergebnis\">\n        <div class=\"cs-watering-result-main\">\n          <p class=\"cs-watering-kicker\">Auswertung</p>\n          <h3>${escapeHtml(result.heading)}</h3>\n          <p>${escapeHtml(result.summary)}</p>\n          <div class=\"cs-watering-result-metrics\">\n            <div><span>Empfehlung</span><strong>${volume ? escapeHtml(volume.display) : 'keine Literempfehlung'}</strong></div>\n            <div><span>Aktiver Wurzelraum</span><strong>${result.activeRootVolumeLiters ? `${formatGerman(result.activeRootVolumeLiters)} Liter` : 'nicht belastbar'}</strong></div>\n          <div><span>Erneut kontrollieren</span><strong>${escapeHtml(result.recheck.window)}</strong></div>\n          <div><span>Sicherheit</span><strong>${result.confidence.score}/100 \u00B7 ${escapeHtml(result.confidence.label)}</strong></div>\n        </div>\n      </div>\n      ${result.pulsePlan ? `<div class=\"cs-watering-result-card\"><h4>Gie\u00DFweise</h4><p>${escapeHtml(result.pulsePlan.text)}</p></div>` : ''}\n        <div class=\"cs-watering-result-card\"><h4>Bew\u00E4sserungsfl\u00E4che</h4><p>${escapeHtml(result.wateringArea || 'Verteile Wasser gleichm\u00E4\u00DFig \u00FCber den aktiven Wurzelbereich.')}</p></div>\n      ${volume?.totalCap ? `<div class=\"cs-watering-result-card\"><h4>Obergrenze beim Wiederanfeuchten</h4><p>Anfangs insgesamt h\u00F6chstens ${escapeHtml(volume.totalCap.display)} einplanen und danach erneut kontrollieren.</p></div>` : ''}\n        ${this.listBlock('Warum diese Einsch\u00E4tzung?', result.reasons)}\n        ${this.listBlock('Wichtige Hinweise', result.warnings)}\n        ${this.listBlock('Fehlende Angaben', result.missingInformation)}\n        <div class=\"cs-watering-result-card\">\n          <h4>N\u00E4chste Schritte</h4>\n          <ul>${result.nextSteps.map(item => `<li>${escapeHtml(item)}</li>`).join('')}</ul>\n        </div>\n        <div class=\"cs-watering-links\">\n          <h4>Passende Artikel</h4>\n          ${this.relevantArticlesFor(result).map(article => `<a href=\"${escapeAttr(article.url)}\" data-link-type=\"${escapeAttr(article.type || 'article')}\">${escapeHtml(article.title)}</a>`).join('')}\n        </div>\n        ${this.showEditSummary ? this.renderEditSummary() : ''}\n        <div class=\"cs-watering-actions\">\n          <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"edit-summary\">${this.showEditSummary ? 'Bearbeiten-\u00DCbersicht schlie\u00DFen' : 'Angaben bearbeiten'}</button>\n          ${this.variant === 'compact' ? `<button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"handoff\">Vollst\u00E4ndige Auswertung \u00F6ffnen</button>` : ''}\n          <button class=\"cs-watering-button cs-watering-button--text\" type=\"button\" data-action=\"reset\">Neue Einsch\u00E4tzung starten</button>\n        </div>\n      </section>\n    `;\n  }\n\n  renderEditSummary() {\n    const sections = this.summarySections();\n    return `\n      <div class=\"cs-watering-edit-summary\" tabindex=\"-1\" aria-label=\"Angaben bearbeiten\">\n        <div class=\"cs-watering-edit-summary__head\">\n          <p class=\"cs-watering-kicker\">Angaben bearbeiten</p>\n          <h4>Welche Eingabe m\u00F6chtest du anpassen?</h4>\n          <p>Das Ergebnis bleibt sichtbar. Sobald du Werte \u00E4nderst, markiert der Rechner die Auswertung als veraltet.</p>\n        </div>\n        <div class=\"cs-watering-edit-summary__grid\">\n          ${sections.map(section => `\n            <article class=\"cs-watering-edit-card\">\n              <div>\n                <h5>${escapeHtml(section.title)}</h5>\n                <dl>\n                  ${section.items.map(item => `\n                    <div>\n                      <dt>${escapeHtml(item.label)}</dt>\n                      <dd>${escapeHtml(item.value)}</dd>\n                    </div>\n                  `).join('')}\n                </dl>\n              </div>\n              <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"edit\" data-step-index=\"${section.stepIndex}\">Bearbeiten</button>\n            </article>\n          `).join('')}\n        </div>\n      </div>\n    `;\n  }\n\n  summarySections() {\n    if (this.plannerMode === 'expert') {\n      return [\n        {\n          title: 'System',\n          stepIndex: 0,\n          items: [\n            this.summaryItem('Anbausystem', this.optionLabel('systemType', this.form.systemType)),\n            this.summaryItem('Ablauf', this.optionLabel('drainageMode', this.form.drainageMode)),\n            this.summaryItem('Substratvolumen', this.withUnit(this.form.substrateVolumeLiters, 'Liter')),\n            this.summaryItem('Pflanzen', this.withUnit(this.form.plantCount, 'Pflanzen')),\n            this.summaryItem('Gie\u00DFart', this.optionLabel('wateringMethod', this.form.wateringMethod))\n          ]\n        },\n        {\n          title: 'Wurzelraum',\n          stepIndex: 1,\n          items: [\n            this.summaryItem('Durchwurzelter Anteil', this.optionLabel('rootedPercent', this.form.rootedPercent))\n          ]\n        },\n        {\n          title: 'Pflanze',\n          stepIndex: 2,\n          items: [\n            this.summaryItem('Phase', this.optionLabel('phase', this.form.phase)),\n            this.summaryItem('Pflanzengr\u00F6\u00DFe', this.optionLabel('plantSize', this.form.plantSize)),\n            this.summaryItem('Pflanzenreaktion', this.optionLabel('plantPosture', this.form.plantPosture)),\n            this.summaryItem('Verbrauch', this.optionLabel('consumptionTrend', this.form.consumptionTrend))\n          ]\n        },\n        {\n          title: 'Feuchteprofil',\n          stepIndex: 3,\n          items: [\n            this.summaryItem('Kontrolle', this.optionLabel('observationMethod', this.form.observationMethod)),\n            this.summaryItem('Oberfl\u00E4che', this.optionLabel('moisture', this.form.topMoisture)),\n            this.summaryItem('Mitte', this.optionLabel('moisture', this.form.middleMoisture)),\n            this.summaryItem('Tiefe', this.optionLabel('moisture', this.form.deepMoisture))\n          ]\n        },\n        {\n          title: 'Letzte Wassergabe',\n          stepIndex: 4,\n          items: [\n            this.summaryItem('Zeitpunkt', this.form.lastWateringUnknown ? 'nicht sicher' : this.withUnit(this.form.lastWateringHoursAgo, 'Stunden')),\n            this.summaryItem('Wassermenge', this.form.lastWaterAmountUnknown ? 'nicht sicher' : this.withUnit(this.form.lastWaterAmountLiters, 'Liter')),\n            this.summaryItem('Drain', this.optionLabel('drainageResponse', this.form.drainageResponse)),\n            this.summaryItem('Ablaufmenge', this.withUnit(this.form.drainageAmountLiters, 'Liter')),\n            this.summaryItem('Klima', this.optionLabel('climate', this.form.climate))\n          ]\n        },\n        {\n          title: 'Warnsignale',\n          stepIndex: 5,\n          items: [\n            this.summaryItem('Trauerm\u00FCcken', this.optionLabel('fungusGnats', this.form.fungusGnats)),\n            this.summaryItem('Geruch', this.optionLabel('substrateSmell', this.form.substrateSmell)),\n            this.summaryItem('Wurzeln', this.optionLabel('rootObservation', this.form.rootObservation))\n          ]\n        }\n      ];\n    }\n    return [\n      {\n        title: 'Basis',\n        stepIndex: 0,\n        items: [\n          this.summaryItem('Substratvolumen', this.withUnit(this.form.substrateVolumeLiters, 'Liter')),\n          this.summaryItem('Pflanzen', this.withUnit(this.form.plantCount, 'Pflanzen')),\n          this.summaryItem('Stadium', this.optionLabel('growthStage', this.form.growthStage)),\n          this.summaryItem('Ablauf', this.optionLabel('drainageMode', this.form.drainageMode))\n        ]\n      },\n      {\n        title: 'Feuchtebild',\n        stepIndex: 1,\n        items: [\n          this.summaryItem('Oberfl\u00E4che', this.optionLabel('moisture', this.form.topMoisture)),\n          this.summaryItem('Wurzelbereich', this.optionLabel('rootZoneMoisture', this.form.rootZoneMoisture))\n        ]\n      },\n      {\n        title: 'Pflanze & Klima',\n        stepIndex: 2,\n        items: [\n          this.summaryItem('Pflanzenreaktion', this.optionLabel('plantPosture', this.form.plantPosture)),\n          this.summaryItem('Verbrauch', this.optionLabel('consumptionTrend', this.form.consumptionTrend)),\n          this.summaryItem('Klima', this.optionLabel('climate', this.form.climate)),\n          this.summaryItem('Cover Crop / Mulch', this.optionLabel('tri', this.form.coverCrop))\n        ]\n      },\n      {\n        title: 'Gie\u00DFverhalten & Warnzeichen',\n        stepIndex: 3,\n        items: [\n          this.summaryItem('Aktuelle Wassermenge', this.withUnit(this.form.lastWaterAmountLiters, 'Liter')),\n          this.summaryItem('Drain-Verhalten', this.optionLabel('drainageResponse', this.form.drainageResponse)),\n          this.summaryItem('Warnzeichen', this.warningSignalSummary())\n        ]\n      }\n    ];\n  }\n\n  summaryItem(label, value) {\n    return { label, value: value || 'nicht angegeben' };\n  }\n\n  withUnit(value, unit) {\n    if (value === null || value === undefined || value === '') return 'nicht angegeben';\n    return `${String(value).trim()} ${unit}`;\n  }\n\n  optionLabel(group, value) {\n    const options = SELECTS[group] || [];\n    const found = options.find(([optionValue]) => String(optionValue) === String(value));\n    return found?.[1] || (value ? String(value) : 'nicht angegeben');\n  }\n\n  warningSignalSummary() {\n    const signals = Array.isArray(this.form.warningSignals) ? this.form.warningSignals : [];\n    if (!signals.length) return 'keine ausgew\u00E4hlt';\n    return signals.map(value => {\n      const found = WARNING_SIGNALS.find(([optionValue]) => optionValue === value);\n      return found?.[1] || value;\n    }).join(', ');\n  }\n\n  listBlock(title, items) {\n    if (!items?.length) return '';\n    return `\n      <div class=\"cs-watering-result-card\">\n        <h4>${escapeHtml(title)}</h4>\n        <ul>${items.map(item => `<li>${escapeHtml(item)}</li>`).join('')}</ul>\n      </div>\n    `;\n  }\n\n  relevantArticlesFor(result) {\n    const articles = [\n      { title: 'Living Soil richtig gie\u00DFen', url: this.articleUrl, type: 'main_guide' },\n      { title: 'Stofft\u00F6pfe richtig gie\u00DFen im Living Soil', url: this.guideUrls.fabricPot, type: 'fabric_pot' },\n      { title: 'Substratstruktur und Luftporen', url: this.guideUrls.substrate, type: 'substrate' }\n    ];\n    const codes = result.warningCodes || [];\n    if (codes.some(code => ['W_ROOT_SOFT', 'W_ROOT_SLIMY', 'W_ROOT_CORTEX_SLOUGHING', 'W_FOUL_SMELL', 'W_DEEP_SATURATED', 'W_STANDING_WATER'].includes(code))) {\n      articles.push({ title: 'Wurzelwarnzeichen richtig einordnen', url: this.guideUrls.rootRot, type: 'root_zone' });\n    }\n    if (codes.some(code => code.startsWith('W_FUNGUS_GNATS'))) {\n      articles.push({ title: 'Trauerm\u00FCcken im Living Soil', url: this.guideUrls.fungusGnat, type: 'fungus_gnat' });\n    }\n    if (result.actionId !== 'diagnose_root_zone') {\n      articles.push({ title: 'MicroBio+ richtig anwenden', url: this.guideUrls.microBio, type: 'microbio' });\n    }\n    return uniqueByUrl(articles.filter(article => article.url));\n  }\n\n  renderErrors() {\n    const entries = Object.entries(this.errors).filter(([, message]) => message);\n    if (!entries.length) return '';\n    return `\n      <div class=\"cs-watering-error-summary\" role=\"alert\" tabindex=\"-1\" aria-label=\"Bitte pr\u00FCfe diese Angaben\">\n        <span class=\"cs-watering-error-summary__icon\" aria-hidden=\"true\">!</span>\n        <div>\n          <strong>Bitte pr\u00FCfe diese Angaben:</strong>\n          <ul>${entries.map(([field, message]) => `<li><a href=\"#cs-watering-input-${field}\">${escapeHtml(message)}</a></li>`).join('')}</ul>\n        </div>\n      </div>\n    `;\n  }\n\n  renderRuntimeError() {\n    if (!this.runtimeError) return '';\n    return `\n      <div class=\"cs-watering-runtime-error\" role=\"alert\" tabindex=\"-1\" aria-label=\"Auswertung nicht abgeschlossen\">\n        <strong>Auswertung nicht abgeschlossen</strong>\n        <p>${escapeHtml(this.runtimeError)}</p>\n        <div class=\"cs-watering-runtime-error__actions\">\n          <button class=\"cs-watering-button cs-watering-button--primary\" type=\"button\" data-action=\"calculate\">Erneut auswerten</button>\n          <button class=\"cs-watering-button cs-watering-button--secondary\" type=\"button\" data-action=\"focus-current-step\">Angaben pr\u00FCfen</button>\n        </div>\n      </div>\n    `;\n  }\n\n  input(field, label, placeholder = '', unit = '') {\n    const error = this.errors[field];\n    const fieldClasses = ['cs-watering-field'];\n    if (unit) fieldClasses.push('cs-watering-field--number');\n    if (error) fieldClasses.push('has-error');\n    return `\n      <label class=\"${fieldClasses.join(' ')}\" data-water-field=\"${escapeAttr(field)}\">\n        <span>${escapeHtml(label)}</span>\n        <span class=\"cs-watering-input-wrap\">\n          <input id=\"cs-watering-input-${escapeAttr(field)}\" type=\"text\" inputmode=\"decimal\" data-field=\"${escapeAttr(field)}\" value=\"${escapeAttr(this.form[field] ?? '')}\" placeholder=\"${escapeAttr(placeholder)}\" aria-invalid=\"${error ? 'true' : 'false'}\" ${error ? `aria-describedby=\"cs-watering-error-${escapeAttr(field)}\"` : ''}>\n          ${unit ? `<em>${escapeHtml(unit)}</em>` : ''}\n        </span>\n        ${error ? `<small id=\"cs-watering-error-${escapeAttr(field)}\"><span aria-hidden=\"true\">!</span>${escapeHtml(error)}</small>` : ''}\n      </label>\n    `;\n  }\n\n  select(field, label, options) {\n    const error = this.errors[field];\n    const currentValue = String(this.form[field] ?? '');\n    return `\n      <fieldset id=\"cs-watering-input-${escapeAttr(field)}\" class=\"cs-watering-field cs-watering-choice-field ${error ? 'has-error' : ''}\" tabindex=\"-1\" ${error ? `aria-describedby=\"cs-watering-error-${escapeAttr(field)}\"` : ''}>\n        <legend>${escapeHtml(label)}</legend>\n        <div class=\"cs-watering-choice-grid\">\n          ${options.map(([value, optionLabel]) => {\n            const selected = currentValue === String(value);\n            return `\n              <label class=\"cs-watering-choice ${selected ? 'is-selected' : ''}\">\n                <input type=\"radio\" data-field=\"${escapeAttr(field)}\" name=\"${escapeAttr(this.instanceId)}-${escapeAttr(field)}\" value=\"${escapeAttr(value)}\" ${selected ? 'checked' : ''} aria-invalid=\"${error ? 'true' : 'false'}\">\n                <span>${escapeHtml(optionLabel)}</span>\n              </label>\n            `;\n          }).join('')}\n        </div>\n        ${error ? `<small id=\"cs-watering-error-${escapeAttr(field)}\"><span aria-hidden=\"true\">!</span>${escapeHtml(error)}</small>` : ''}\n      </fieldset>\n    `;\n  }\n\n  nativeSelect(field, label, options) {\n    const error = this.errors[field];\n    const currentValue = String(this.form[field] ?? '');\n    return `\n      <label class=\"cs-watering-field cs-watering-field--select ${error ? 'has-error' : ''}\" data-water-field=\"${escapeAttr(field)}\">\n        <span>${escapeHtml(label)}</span>\n        <span class=\"cs-watering-select-wrap\">\n          <select id=\"cs-watering-input-${escapeAttr(field)}\" data-field=\"${escapeAttr(field)}\" aria-invalid=\"${error ? 'true' : 'false'}\" ${error ? `aria-describedby=\"cs-watering-error-${escapeAttr(field)}\"` : ''}>\n            ${options.map(([value, optionLabel]) => `<option value=\"${escapeAttr(value)}\" ${currentValue === String(value) ? 'selected' : ''}>${escapeHtml(optionLabel)}</option>`).join('')}\n          </select>\n        </span>\n        ${error ? `<small id=\"cs-watering-error-${escapeAttr(field)}\"><span aria-hidden=\"true\">!</span>${escapeHtml(error)}</small>` : ''}\n      </label>\n    `;\n  }\n\n  checkbox(field, value, label, checked) {\n    return `\n      <label class=\"cs-watering-check ${checked ? 'is-selected' : ''}\">\n        <input type=\"checkbox\" data-field=\"${escapeAttr(field)}\" value=\"${escapeAttr(value)}\" ${checked ? 'checked' : ''}>\n        <span>${escapeHtml(label)}</span>\n      </label>\n    `;\n  }\n\n  track(eventName, detail = {}) {\n    if (!this.analyticsEnabled || !window.dataLayer) return;\n    window.dataLayer.push({ event: eventName, ...detail });\n  }\n\n  dispatchPlannerEvent(name, detail = {}) {\n    this.dispatchEvent(new CustomEvent(`cs-watering:${name}`, {\n      bubbles: true,\n      detail\n    }));\n  }\n}\n\nfunction escapeHtml(value) {\n  return String(value ?? '')\n    .replaceAll('&', '&amp;')\n    .replaceAll('<', '&lt;')\n    .replaceAll('>', '&gt;')\n    .replaceAll('\"', '&quot;')\n    .replaceAll(\"'\", '&#039;');\n}\n\nfunction escapeAttr(value) {\n  return escapeHtml(value);\n}\n\nfunction cssEscape(value) {\n  if (window.CSS?.escape) return window.CSS.escape(value);\n  return String(value).replace(/[^a-zA-Z0-9_-]/g, '\\\\$&');\n}\n\nfunction motionSafeScrollBehavior() {\n  try {\n    return window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches ? 'auto' : 'smooth';\n  } catch {\n    return 'smooth';\n  }\n}\n\nfunction formatGerman(value) {\n  return Number(value).toLocaleString('de-DE', { maximumFractionDigits: 1 });\n}\n\nfunction uniqueByUrl(articles) {\n  const seen = new Set();\n  return articles.filter(article => {\n    if (seen.has(article.url)) return false;\n    seen.add(article.url);\n    return true;\n  });\n}\n\nif (!customElements.get('cs-watering-planner')) {\n  customElements.define('cs-watering-planner', CSWateringPlanner);\n}\n\nfunction initializeCSWateringPlanners(root = document) {\n  root.querySelectorAll?.('cs-watering-planner').forEach(element => {\n    if (!element._csWateringReady && typeof element.connectedCallback === 'function') element.connectedCallback();\n  });\n}\n\ninitializeCSWateringPlanners();\n\nif (!window.__csWateringPlannerThemeEditorBound) {\n  window.__csWateringPlannerThemeEditorBound = true;\n  document.addEventListener('shopify:section:load', event => initializeCSWateringPlanners(event.target));\n  document.addEventListener('shopify:section:unload', event => {\n    event.target?.querySelectorAll?.('cs-watering-planner').forEach(element => {\n      if (typeof element.disconnectedCallback === 'function') element.disconnectedCallback();\n    });\n  });\n}\n"],
  "mappings": "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",
  "names": []
}
