{"id":19991,"date":"2026-06-09T14:08:33","date_gmt":"2026-06-09T11:08:33","guid":{"rendered":"https:\/\/zeolife.gr\/?page_id=19991"},"modified":"2026-10-20T21:01:02","modified_gmt":"2026-10-20T18:01:02","slug":"dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft","status":"publish","type":"page","link":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/","title":{"rendered":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft"},"content":{"rendered":"\n<!-- ==========================================================\n     \u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u0394\u03bf\u03c3\u03bf\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u0396\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c5 \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1\u03c2  (\u039a\u0391\u0398\u0391\u03a1\u039f)\n     20\/10\/2026: Print moved out of the buttons (now centred) to the bottom, into the \"Keep your dosage\" box.\n     20\/10\/2026: Link with the spray guide in both directions (?crop= + trees= \/ stremma=).\n     20\/10\/2026: One-click cart (zl_cart) and return from the eShop without losing the choices (sessionStorage).\n     20\/10\/2026: \"Keep your dosage\": email + reminders per year (Toolkit >= 2.156.0, kind=soil) \u00b7 .ics calendar \u00b7 print.\n     20\/10\/2026: combined yearly program (ZL YEAR, Toolkit >= 2.157.0, kind=combo) when a spray program also exists.\n     Path: \/zeolithos-georgia-doseologia-ipologistis\/\n     ----------------------------------------------------------\n     \u03a7\u03a9\u03a1\u0399\u03a3 <style>\/<link> (AMP safe) \u2014 \u03c4\u03bf \u03c3\u03c4\u03c5\u03bb \u03ad\u03c1\u03c7\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd\n     \u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ad\u03b1, section \u00a716 .zlcalc (\u03ba\u03bf\u03b9\u03bd\u03cc \u03b3\u03b9\u03b1 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u03bf\u03b4\u03b7\u03b3\u03bf\u03cd\u03c2).\n     \u03a4\u03bf JS \u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03b4\u03ce, \u03c3\u03b5 IIFE, \u03cc\u03c0\u03c9\u03c2 \u03bf\u03c1\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf Web Style 2026.\n     Root hook \u03b3\u03b9\u03b1 \u03c4\u03bf JS: id=\"zaCalc\".\n     04\/10\/2026: \u03b5\u03bb\u03b1\u03c6\u03c1\u03cd\/\u03bc\u03ad\u03c3\u03bf \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2 \u2192 \u03bb\u03b5\u03c0\u03c4\u03cc \u03c7\u03b1\u03bb\u03af\u03ba\u03b9 (\u03cc\u03c7\u03b9 \u03c0\u03bf\u03cd\u03b4\u03c1\u03b1).\n     ========================================================== -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"WebApplication\",\n      \"name\": \"Dosierungsratgeber Zeolith f\u00fcr die Landwirtschaft\",\n      \"alternateName\": \"Dosierungsratgeber Zeolith f\u00fcr die Landwirtschaft\",\n      \"url\": \"https:\/\/zeolife.gr\/zeolithos-georgia-doseologia-ipologistis\/\",\n      \"description\": \"Interaktiver Dosierungsratgeber f\u00fcr Zeolith im landwirtschaftlichen Einsatz: Oliven, Wein, Walnuss, Obst, Pistazien, Getreide, Wasser-\/Zuckermelonen, Luzerne, Kr\u00e4uter (Oregano, Thymian), Rasen, Gem\u00fcsegarten, Zierpflanzen. Unterst\u00fctzt 3 Marken (Griechischer Thrakischer, IMERYS, ZeoGravel\u00ae ZEOCEM) und 3 Bodentypen.\",\n      \"applicationCategory\": \"AgricultureApplication\",\n      \"operatingSystem\": \"Any (web)\",\n      \"inLanguage\": \"el\",\n      \"isAccessibleForFree\": true,\n      \"audience\": {\n        \"@type\": \"Audience\",\n        \"audienceType\": \"Farmers, Agronomists, Agricultural Cooperatives\"\n      },\n      \"publisher\": { \"@type\": \"Organization\", \"name\": \"Zeolife\", \"url\": \"https:\/\/zeolife.gr\/\" }\n    },\n    {\n      \"@type\": \"HowTo\",\n      \"name\": \"So berechnen Sie die richtige Zeolith-Dosis f\u00fcr Ihre landwirtschaftliche Anwendung\",\n      \"description\": \"Anleitung zur Berechnung der Zeolith-Dosierung je nach Kultur, Bodentyp und Produktmarke.\",\n      \"step\": [\n        { \"@type\": \"HowToStep\", \"name\": \"Kultur w\u00e4hlen\", \"text\": \"W\u00e4hlen Sie aus 15 Kategorien: Oliven, Wein, Walnuss, Obst, Pistazien, Getreide, Wasser-\/Zuckermelonen, Luzerne, Kr\u00e4uter (Oregano, Thymian), Rasen, Gem\u00fcsegarten, Zierpflanzen, Saatgutvermehrung, Kakteen, Palmen. Falls Ihre Kultur nicht dabei ist, fordern Sie einen individuellen Vorschlag an.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Menge angeben\", \"text\": \"Geben Sie die Anzahl der B\u00e4ume\/Wurzeln\/Pflanzen oder Stremma an. F\u00fcr B\u00e4ume und Wein w\u00e4hlen Sie das Alter. F\u00fcr Rasen und Gem\u00fcsegarten geben Sie Quadratmeter (m\u00b2) an.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Bodentyp w\u00e4hlen\", \"text\": \"Leicht (sandig), Mittel (lehmig) oder Schwer (tonig). Er bestimmt die K\u00f6rnung des Zeoliths.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Marke w\u00e4hlen\", \"text\": \"Griechischer Thrakischer, IMERYS, ZeoGravel\u00ae (ZEOCEM) oder lassen Sie sich von uns eine Empfehlung geben.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Anwendungsstrategie\", \"text\": \"Erstes Jahr (40 %), vollst\u00e4ndiges 3-Jahres-Programm oder Erhaltung. Bei mehrj\u00e4hrigen Kulturen wie Rasen ist die Anwendung einmalig.\" }\n      ]\n    }\n  ]\n}\n<\/script>\n\n<div class=\"zl zlcalc\" id=\"zaCalc\">\n<div class=\"progress\" aria-hidden=\"true\"><div class=\"progress-bar\" id=\"zaProgress\"><\/div><\/div>\n<div id=\"zaProgressSpacer\" aria-hidden=\"true\" style=\"height:0\"><\/div>\n<div class=\"intro\">\n<h2>\ud83c\udf3e Dosierungsratgeber f\u00fcr Zeolith in der landwirtschaftlichen Anwendung<\/h2>\n<p>Geben Sie uns 5 Angaben, und wir empfehlen Ihnen das <strong>richtige Produkt<\/strong> aus unseren 3 Serien (Griechischer Thrakischer, IMERYS, ZeoGravel\u00ae ZEOCEM) mit <strong>genauer Dosierung<\/strong>, einem 3-Jahres-Programm und automatischer Rabattberechnung.<\/p>\n<div class=\"badges\">\n<span class=\"badge\">\ud83d\udccb Ratgeber in 5 Schritten<\/span>\n<span class=\"badge\">15 Kulturen<\/span>\n<span class=\"badge\">3 Marken \u00d7 9 Produkte<\/span>\n<span class=\"badge\">3-Jahres-Programm<\/span>\n<span class=\"badge\">Auto-Rabatt bis zu 40 %<\/span>\n<\/div>\n<\/div>\n<!-- STEP 1: CROP -->\n<div class=\"step active\" data-step=\"1\">\n<h3><span class=\"step-num\">1<\/span>W\u00e4hlen Sie die Kultur<\/h3>\n<div class=\"options cols-3\">\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"olive\">\n<span class=\"opt-title\">\ud83e\uded2 Olivenb\u00e4ume<\/span>\n<span class=\"opt-desc\">8\u201324 kg\/Baum<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"walnut\">\n<span class=\"opt-title\">\ud83e\udd5c Walnussb\u00e4ume<\/span>\n<span class=\"opt-desc\">8\u201324 kg\/Baum<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"fruit\">\n<span class=\"opt-title\">\ud83c\udf4e Obst<\/span>\n<span class=\"opt-desc\">5\u201315 kg\/Baum<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"pistachio\">\n<span class=\"opt-title\">\ud83c\udf30 Pistazien<\/span>\n<span class=\"opt-desc\">5\u201315 kg\/Baum<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"vineyard\">\n<span class=\"opt-title\">\ud83c\udf47 Weinrebe<\/span>\n<span class=\"opt-desc\">0,4\u20131,2 kg\/Rebstock<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"palm\">\n<span class=\"opt-title\">\ud83c\udf34 Palmen<\/span>\n<span class=\"opt-desc\">bis zu 24 kg\/Baum<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"cereals\">\n<span class=\"opt-title\">\ud83c\udf3e Getreide \/ Mais<\/span>\n<span class=\"opt-desc\">bis zu 300 kg\/Stremma<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"melons\">\n<span class=\"opt-title\">\ud83c\udf49 Wassermelonen \/ Melonen<\/span>\n<span class=\"opt-desc\">bis zu 450 kg\/Stremma<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"alfalfa\">\n<span class=\"opt-title\">\ud83c\udf40 Luzerne<\/span>\n<span class=\"opt-desc\">bis zu 150 kg\/Stremma<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"herbs\">\n<span class=\"opt-title\">\ud83c\udf3f Gew\u00fcrzkr\u00e4uter (Oregano, Thymian)<\/span>\n<span class=\"opt-desc\">bis zu 300 kg\/Stremma<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"lawn\">\n<span class=\"opt-title\">\ud83c\udf3f Rasen<\/span>\n<span class=\"opt-desc\">10 oder 30 kg pro 100 m\u00b2 \u2014 einmalig<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"vegetable\">\n<span class=\"opt-title\">\ud83e\udd6c Gem\u00fcsegarten<\/span>\n<span class=\"opt-desc\">0,5 kg\/m\u00b2 (lebenslang)<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"ornamentals\">\n<span class=\"opt-title\">\ud83c\udf39 Zierpflanzen<\/span>\n<span class=\"opt-desc\">Topf oder Garten<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"seedling\">\n<span class=\"opt-title\">\ud83c\udf31 Saatgutproduktion<\/span>\n<span class=\"opt-desc\">20 % des Bodengewichts<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"succulents\">\n<span class=\"opt-title\">\ud83c\udf35 Kakteen \/ Sukkulenten<\/span>\n<span class=\"opt-desc\">20 % des Bodengewichts<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"other\">\n<span class=\"opt-title\">\u2795 Andere Kultur<\/span>\n<span class=\"opt-desc\">Nicht gefunden? Fragen Sie uns<\/span>\n<\/label>\n<\/div>\n<\/div>\n<!-- STEP 2: QUANTITY (dynamic) -->\n<div class=\"step\" data-step=\"2\">\n<h3><span class=\"step-num\">2<\/span>Menge<\/h3>\n<div id=\"zaQtyContainer\">\n<p style=\"color:var(--za-muted);font-style:italic;\">W\u00e4hlen Sie zuerst in Schritt 1 eine Kultur.<\/p>\n<\/div>\n<\/div>\n<!-- STEP 3: SOIL -->\n<div class=\"step\" data-step=\"3\">\n<h3><span class=\"step-num\">3<\/span>Bodentyp<\/h3>\n<div id=\"zaSoilOptions\">\n<div class=\"options cols-3\">\n<label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"light\">\n<span class=\"opt-title\">\ud83d\udfe1 Leicht<\/span>\n<span class=\"opt-desc\">Sandig, locker \u00b7 feiner Kies 1\u20132,5 mm<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"medium\">\n<span class=\"opt-title\">\ud83d\udfe0 Mittel<\/span>\n<span class=\"opt-desc\">Lehmig, ausgeglichen \u00b7 feiner Kies 1\u20132,5 mm<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"heavy\">\n<span class=\"opt-title\">\ud83d\udfe4 Schwer<\/span>\n<span class=\"opt-desc\">Tonig, verdichtet \u00b7 Kies 2,5\u20135 mm<\/span>\n<\/label>\n<\/div>\n<p class=\"sublabel\">\ud83d\udca1 <strong>Nicht sicher?<\/strong> Nehmen Sie etwas feuchte Erde in die Handfl\u00e4che: Zerf\u00e4llt sie leicht \u2192 leicht, formt sie einen Ball \u2192 mittel, wird sie zu Lehm \u2192 schwer.<\/p>\n<\/div>\n<div class=\"info-box hidden\" id=\"zaSoilNote\">\n<strong>\u2705 Keine Auswahl n\u00f6tig \u2014 die K\u00f6rnung ist fest<\/strong>\nBeim <strong>Rasen<\/strong> ist die Bodenart <strong>ohne Einfluss auf die Empfehlung<\/strong>. Wir empfehlen immer <strong>feinen Kies 1\u20132,5 mm<\/strong> (oder <strong>0,8\u20132,5 mm<\/strong> bei IMERYS): fein genug, um zwischen die Grashalme zu gelangen und bis zur Wurzel zu sinken, ohne Staub zu bilden oder als Kies an der Oberfl\u00e4che liegen zu bleiben.\n<\/div>\n<\/div>\n<!-- STEP 4: BRAND -->\n<div class=\"step\" data-step=\"4\">\n<h3><span class=\"step-num\">4<\/span>Markenpr\u00e4ferenz<\/h3>\n<div class=\"options\">\n<label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"greek_thracian\">\n<span class=\"opt-title\">\ud83c\uddec\ud83c\uddf7 Griechischer Thrakischer<\/span>\n<span class=\"opt-desc\">80 % Klinoptilolith, lokale Produktion<\/span>\n      <span class=\"opt-info\">Die Dosierung wird wegen der Reinheit von 80 % um 20 % erh\u00f6ht. K\u00f6rnungen: 1\u20132,5 mm und 2,5\u20135 mm, im 25-kg-Sack und in der 500-g-Packung.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-one-to-2point5mm\/\" data-za-more=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-one-to-2point5mm\/\">\u2139\ufe0f Mehr im Shop \u2192<\/a>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"imerys\">\n<span class=\"opt-title\">\u2b50 IMERYS<\/span>\n<span class=\"opt-desc\">\u226585 % Klinoptilolith, etablierte Marke<\/span>\n      <span class=\"opt-info\">K\u00f6rnungen: 0,8\u20132,5 mm und 2,5\u20135 mm im 25-kg-Sack, dazu eine 5-kg-Packung f\u00fcr kleine Mengen.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/zeolite-0point8-to-2point5mm\/\" data-za-more=\"https:\/\/shop.zeolife.gr\/en\/product\/zeolite-0point8-to-2point5mm\/\">\u2139\ufe0f Mehr im Shop \u2192<\/a>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"zeocem\">\n<span class=\"opt-title\">\u26a1 ZeoGravel\u00ae (ZEOCEM)<\/span>\n<span class=\"opt-desc\">\u226585 % Klinoptilolith + Aktivierung<\/span>\n      <span class=\"opt-info\">Durch W\u00e4rmebehandlung aktiviert. K\u00f6rnungen: 1\u20132,5 mm und 2,5\u20135 mm.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/zeogravel-activated-zeolite-1-to-2-5-millimetres-fine-gravel-ideal-for-agricultural-use-25-kg\/\" data-za-more=\"https:\/\/shop.zeolife.gr\/en\/product\/zeogravel-activated-zeolite-1-to-2-5-millimetres-fine-gravel-ideal-for-agricultural-use-25-kg\/\">\u2139\ufe0f Mehr im Shop \u2192<\/a>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"best_value\">\n<span class=\"opt-title\">\ud83d\udca1 Sie empfehlen<\/span>\n<span class=\"opt-desc\">Smarte Auswahl je nach Boden<\/span>\n<\/label>\n<\/div>\n<\/div>\n<!-- STEP 5: STRATEGY -->\n<div class=\"step\" data-step=\"5\">\n<h3><span class=\"step-num\">5<\/span>Anwendungsstrategie<\/h3>\n<div class=\"options cols-3\" id=\"zaStrategyOptions\">\n<label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"year1\">\n<span class=\"opt-title\">\ud83d\udfe2 Erste Phase<\/span>\n<span class=\"opt-desc\">Neu: Pflanzdosis \u00b7 Bestehend: 40 % der Gesamtmenge<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"full3\">\n<span class=\"opt-title\">\ud83d\udcc5 Vollst\u00e4ndiges Programm<\/span>\n<span class=\"opt-desc\">3 Jahre (bestehend) oder 4 Jahre (Neupflanzung)<\/span>\n<\/label>\n<label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"maintenance\">\n<span class=\"opt-title\">\ud83d\udd04 Erhaltung<\/span>\n<span class=\"opt-desc\">15 % der Gesamtdosis<\/span>\n<\/label>\n<\/div>\n<div class=\"info-box hidden\" id=\"zaStrategyNote\">\n<strong>\u2705 Einmalige Anwendung \u2014 keine Auswahl n\u00f6tig<\/strong>\nDer <strong>Rasen<\/strong> ist eine <strong>mehrj\u00e4hrige Kultur<\/strong>: der zeolite wird <strong>ein einziges Mal<\/strong> eingearbeitet und wirkt viele Jahre lang. Es braucht weder ein Jahresprogramm noch eine wiederholte Erhaltungsdosis.\n<\/div>\n<\/div>\n<!-- STEP (conditional): \u0391\u0399\u03a4\u0397\u039c\u0391 \u0393\u0399\u0391 \u0391\u039b\u039b\u0397 \u039a\u0391\u039b\u039b\u0399\u0395\u03a1\u0393\u0395\u0399\u0391 \u2014 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03bc\u03cc\u03bd\u03bf \u03cc\u03c4\u03b1\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03b5\u03af \u00ab\u0386\u03bb\u03bb\u03b7 \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u00bb -->\n<div class=\"step\" id=\"zaOtherStep\" style=\"display:none\">\n<button type=\"button\" class=\"btn btn-secondary\" id=\"zaOtherBack\" style=\"padding:.5rem 1.1rem;font-size:.9rem;margin-bottom:1rem\">\u2190 Zur\u00fcck zum Ratgeber<\/button>\n<h3><span class=\"step-num\">\u2795<\/span>Nennen Sie uns Ihre Kultur<\/h3>\n<p style=\"margin:.2rem 0 1rem;color:var(--muted)\">Ihre Kultur nicht in der Liste gefunden? Schreiben Sie uns, welche es ist, und unser Team empfiehlt Ihnen <strong>kostenlos<\/strong> die genaue Zeolith-Dosierung.<\/p>\n<label class=\"qty-label\" for=\"zaOtherCrop\">Welche Kultur m\u00f6chten Sie?<\/label>\n<input type=\"text\" id=\"zaOtherCrop\" class=\"qty-input\" placeholder=\"z. B. Granat\u00e4pfel, Kiwis, Brombeeren, Aromapflanzen\u2026\" autocomplete=\"off\">\n<div class=\"sub-group\">\n<label class=\"qty-label\" for=\"zaOtherDetails\">Details <span style=\"font-weight:400;color:var(--muted)\">(optional)<\/span><\/label>\n<textarea id=\"zaOtherDetails\" class=\"qty-input\" rows=\"3\" placeholder=\"z. B. Anzahl der Pflanzen oder Stremma, Bodentyp, Neu- oder Bestandspflanzung\u2026\"><\/textarea>\n<\/div>\n<div class=\"wholesale-cta\" style=\"margin-top:1.25rem\">\n<strong>\ud83d\udce9 Senden Sie uns Ihre Anfrage<\/strong>\n<span style=\"display:block;color:var(--muted);font-size:.9rem;margin:-.25rem 0 .25rem\">Sie erhalten einen individuellen Dosierungsvorschlag f\u00fcr Ihre Kultur.<\/span>\n<div class=\"wholesale-btns four\">\n<a id=\"zaOtherWhatsapp\" href=\"https:\/\/wa.me\/306985838343\" target=\"_blank\" rel=\"noopener\">\ud83d\udcac WhatsApp<\/a>\n<a id=\"zaOtherViber\" href=\"viber:\/\/chat?number=306985838343\">\ud83d\udfe3 Viber<\/a>\n<a id=\"zaOtherEmail\" href=\"mailto:info@zeolife.gr\">\u2709\ufe0f Email<\/a>\n<a href=\"tel:+302311295520\">\ud83d\udcde 2311 29 55 20<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"actions\" style=\"justify-content:center\">\n<button type=\"button\" class=\"btn\" id=\"zaCalculate\" disabled=\"\">\ud83d\udccb Dosierung ansehen<\/button>\n<button type=\"button\" class=\"btn btn-secondary\" id=\"zaReset\">\ud83d\udd04 Zur\u00fccksetzen<\/button>\n<\/div>\n<!-- RESULT -->\n<div class=\"result\" id=\"zaResult\">\n<div class=\"print-only\" style=\"text-align:center;margin-bottom:1rem;padding-bottom:1rem;border-bottom:2px solid #2a9ca0;\">\n<img decoding=\"async\" src=\"https:\/\/zeolife.gr\/wp-content\/uploads\/2019\/11\/logo-zeolife-hor.svg\" alt=\"Zeolife.gr\" data-no-lazy=\"1\" class=\"skip-lazy\" style=\"max-width:280px;height:auto;margin:0 auto 0.5rem;display:block;\">\n<h2 style=\"color:#26231e;margin:0;font-size:1.2rem;\">Zeolith-Anwendungsprogramm f\u00fcr die Landwirtschaft<\/h2>\n<p style=\"margin:0.3rem 0 0;font-size:0.9rem;color:#6b6a64;\"><a href=\"https:\/\/zeolife.gr\/de\/\">www.<span translate=\"no\" data-zgt-g=\"1\">Zeolife.gr<\/span><\/a> \u00b7 \u260e 2311 29 55 20 \u00b7 \u2709 info@<span translate=\"no\" data-zgt-g=\"1\">Zeolife.gr<\/span><\/p>\n<p style=\"margin:0.3rem 0 0;font-size:0.8rem;color:#6b6a64;font-style:italic;\">Berechnungsdatum: <span id=\"zaPrintDate\"><\/span><\/p>\n<\/div>\n<h3 id=\"zaResultTitle\">Die individuelle Dosierungsempfehlung<\/h3>\n<div id=\"zaResultBody\"><\/div>\n<\/div>\n<\/div>\n<!-- ==== ZL YEAR (20\/10\/2026): combined yearly program \u2014 soil (incorporation guide) + spraying (spray guide). Same code in both guides. ==== -->\n<script>\n(function () {\n  if (window.zlYear) { return; }\n  var KEY = 'zlYear_de';\n  var MAX_AGE = 24 * 3600 * 1000;\n  var CART_URL = 'https:\/\/shop.zeolife.gr\/en\/cart\/';\n  var PLAN_API = 'https:\/\/shop.zeolife.gr\/wp-json\/zt\/v1\/spray-plan';\n  var AMP = String.fromCharCode(38);\n  \/\/ Spray crop \u2192 matching soil crops\n  var SPRAY_TO_SOIL = { olive: ['olive'], citrus: ['fruit'], fruit: ['fruit'], nuts: ['walnut', 'pistachio'], vineyard: ['vineyard'] };\n  var MONTHS = ['Jan', 'Feb', 'M\u00e4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\n  var shownAt = 0;\n\n  function store() { try { return window.sessionStorage; } catch (e) { return null; } }\n  function load() {\n    var st = store();\n    if (!st) return {};\n    var o = null;\n    try { o = JSON.parse(st.getItem(KEY) || 'null'); } catch (e) { o = null; }\n    return o || {};\n  }\n  function save(part, obj) {\n    var st = store();\n    if (!st) return;\n    var o = load();\n    obj.t = Date.now();\n    o[part] = obj;\n    try { st.setItem(KEY, JSON.stringify(o)); } catch (e) {}\n  }\n  function fresh(x) { return x ? (MAX_AGE > Date.now() - (x.t || 0)) : false; }\n  function match(soil, spray) {\n    var list = SPRAY_TO_SOIL[spray.crop] || [];\n    return list.indexOf(soil.crop) !== -1;\n  }\n  function esc(s) { var t = document.createElement('div'); t.textContent = String(s); return t.innerHTML.replace(\/\"\/g, String.fromCharCode(38) + 'quot;'); }\n  function d8(iso) { var m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(iso || ''); return m ? new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])) : new Date(); }\n  function pad(n) { return (n > 9 ? '' : '0') + n; }\n\n  function combine(soil, spray) {\n    var all = [];\n    soil.payload.stages.forEach(function (s, i) {\n      var c = JSON.parse(JSON.stringify(s));\n      c.type = 'soil'; c.key = 'soil_' + s.key; c.name = 'Boden \u00b7 ' + s.name; c.icon = '\ud83c\udf3e'; c.ord = i;\n      all.push(c);\n    });\n    spray.payload.stages.forEach(function (s, i) {\n      var c = JSON.parse(JSON.stringify(s));\n      c.type = 'spray'; c.key = 'spray_' + s.key; c.name = 'Spritzung \u00b7 ' + s.name; c.ord = 10 + i;\n      all.push(c);\n    });\n    all.sort(function (a, b) { if (a.date === b.date) { return a.ord - b.ord; } return a.date > b.date ? 1 : -1; });\n    all = all.slice(0, 8);\n    all.forEach(function (c) { delete c.ord; });\n    return all;\n  }\n  function mergeItems(lists) {\n    var q = {}, order = [];\n    lists.forEach(function (l) {\n      String(l || '').split(',').forEach(function (p) {\n        var m = \/^(\\d+):(\\d+)$\/.exec(p);\n        if (!m) return;\n        if (!q[m[1]]) { q[m[1]] = 0; order.push(m[1]); }\n        q[m[1]] += Number(m[2]);\n      });\n    });\n    var out = [], units = 0;\n    order.forEach(function (id) { out.push(id + ':' + q[id]); units += q[id]; });\n    return { items: out.join(','), units: units };\n  }\n  function detail(s) {\n    var parts = (s.rows || []).map(function (r) { return s.type === 'soil' ? r[4] : (r[1] + ' ' + r[4]); });\n    return parts.join(' + ');\n  }\n\n  function payload(soil, spray) {\n    var y1 = soil.payload.stages[0] || null;\n    var cart = mergeItems([y1 ? y1.items : '', spray.payload.year]);\n    var yearl = [];\n    if (y1) { yearl.push('Boden \u00b7 ' + y1.name + ': ' + (y1.rows[0] ? y1.rows[0][1] + ' \u2014 ' + y1.rows[0][4] : '')); }\n    (spray.payload.yearl || []).forEach(function (l) { yearl.push(l); });\n    return {\n      kind: 'combo', title: soil.name, crop: soil.crop, icon: soil.icon, qty: soil.qty,\n      water: spray.payload.water, tank: spray.payload.tank, guide: spray.payload.guide,\n      year: cart.items, yearl: yearl, stages: combine(soil, spray)\n    };\n  }\n\n  function icsEsc(s) { return String(s).replace(\/\\\\\/g, '\\\\\\\\').replace(\/,\/g, '\\\\,').replace(\/;\/g, '\\\\;').replace(\/\\n\/g, '\\\\n'); }\n  function icsDate(d) { return d.getFullYear() + pad(d.getMonth() + 1) + pad(d.getDate()); }\n  function ics(p) {\n    var lines = ['BEGIN:VCALENDAR', 'VERSION:2.0', 'PRODID:-\/\/Zeolife\/\/Year Program\/\/EL', 'CALSCALE:GREGORIAN'];\n    var stamp = new Date();\n    p.stages.forEach(function (s, i) {\n      var d = d8(s.date);\n      var end = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1);\n      lines.push('BEGIN:VEVENT');\n      lines.push('UID:zeolife-year-' + p.crop + '-' + i + '-' + icsDate(d) + '@zeolife.gr');\n      lines.push('DTSTAMP:' + icsDate(stamp) + 'T000000Z');\n      lines.push('DTSTART;VALUE=DATE:' + icsDate(d));\n      lines.push('DTEND;VALUE=DATE:' + icsDate(end));\n      lines.push('SUMMARY:' + icsEsc((s.type === 'soil' ? '\ud83c\udf3e ' : '\ud83d\udca8 ') + s.name + ' (' + p.title + ')'));\n      lines.push('DESCRIPTION:' + icsEsc(detail(s) + (s.tip ? '\\n' + s.tip : '')));\n      lines.push('BEGIN:VALARM');\n      lines.push('ACTION:DISPLAY');\n      lines.push('DESCRIPTION:' + icsEsc(s.name));\n      lines.push('TRIGGER:-P' + (s.type === 'soil' ? '7' : '2') + 'D');\n      lines.push('END:VALARM');\n      lines.push('END:VEVENT');\n    });\n    lines.push('END:VCALENDAR');\n    var blob = new Blob([lines.join('\\r\\n')], { type: 'text\/calendar;charset=utf-8' });\n    var a = document.createElement('a');\n    a.href = URL.createObjectURL(blob);\n    a.download = 'zeolife-etisio-programma.ics';\n    document.body.appendChild(a);\n    a.click();\n    setTimeout(function () { URL.revokeObjectURL(a.href); a.parentNode.removeChild(a); }, 1000);\n  }\n\n  function render(before, part) {\n    var old = document.getElementById('zlYearBox');\n    if (old) { old.parentNode.removeChild(old); }\n    if (!before) return;\n    var o = load();\n    var soil = fresh(o.soil) ? o.soil : null;\n    var spray = fresh(o.spray) ? o.spray : null;\n    if (!soil) return;\n    if (!spray) return;\n    if (!match(soil, spray)) return;\n    var p = payload(soil, spray);\n    var cart = mergeItems([p.year]);\n    var back = window.location.origin + window.location.pathname;\n    var h = '<div class=\"zl-keep\" id=\"zlYearBox\"><h4>\ud83d\udcc5 Ihr Jahresprogramm \u2014 Boden + Spritzung<\/h4>';\n    h += '<p class=\"zl-keep-sub\">Wir haben ' + (part === 'soil' ? 'diese Dosierung mit dem Spritzprogramm' : 'dieses Spritzprogramm mit der Bodendosierung') + ' kombiniert, die Sie f\u00fcr <strong>' + esc(soil.name) + ' \u00b7 ' + esc(soil.qty) + '<\/strong> erstellt haben.<\/p>';\n    h += '<div style=\"margin:0 0 1rem\">';\n    p.stages.forEach(function (s) {\n      var d = d8(s.date);\n      h += '<div style=\"display:grid;grid-template-columns:6.5rem minmax(0,1fr);gap:.7rem;padding:.5rem 0;border-bottom:1px solid var(--line)\">';\n      h += '<strong>' + MONTHS[d.getMonth()] + ' ' + d.getFullYear() + '<\/strong>';\n      h += '<span><strong>' + (s.type === 'soil' ? '\ud83c\udf3e ' : esc(s.icon) + ' ') + esc(s.name) + '<\/strong><br><span style=\"font-size:.88rem;color:var(--muted)\">' + esc(detail(s)) + '<\/span><\/span><\/div>';\n    });\n    h += '<\/div>';\n    \/\/ Cart: same button as every \"Add to cart\" in the guides (zl-cartbox + cta-btn).\n    h += '<div class=\"zl-cartbox\"><p>Alles, was Sie im <strong>1. Jahr<\/strong> brauchen (Boden Jahr 1 + die Produkte f\u00fcr die Spritzungen), kommt in den Warenkorb von <strong>shop.zeolife.gr<\/strong> \u2013 in den richtigen Mengen. Dort sehen Sie Endpreise und Rabatte.<\/p>';\n    h += '<a class=\"cta-btn\" id=\"zlYearCart\" href=\"' + (cart.units ? CART_URL + '?zl_cart=' + cart.items + AMP + 'zl_back=' + encodeURIComponent(back) + AMP + 'zl_lang=en' : CART_URL) + '\"><span>\ud83d\uded2 In den Warenkorb (' + cart.units + ') \u2192<\/span><\/a><\/div>';\n    h += '<div class=\"zl-tiles\" style=\"grid-template-columns:repeat(auto-fit,minmax(220px,1fr))\">';\n    h += '<button type=\"button\" class=\"zl-tile\" id=\"zlYearMailT\"><b>\u2709\ufe0f Eine E-Mail f\u00fcr alles<\/b><span>Mit Erinnerung vor jeder Aufgabe<\/span><\/button>';\n    h += '<button type=\"button\" class=\"zl-tile\" id=\"zlYearIcs\"><b>\ud83d\udcc5 Das ganze Programm<\/b><span>.ics-Datei f\u00fcr Ihren Kalender<\/span><\/button>';\n    h += '<\/div>';\n    h += '<form class=\"zl-mail\" id=\"zlYearMail\" novalidate style=\"display:none\">';\n    h += '<label class=\"qty-label\" for=\"zlYearEmail\">Ihre E-Mail<\/label>';\n    h += '<input type=\"email\" id=\"zlYearEmail\" class=\"qty-input\" placeholder=\"z. B. max@gmail.com\" autocomplete=\"email\" required>';\n    h += '<input type=\"text\" name=\"website\" id=\"zlYearHp\" class=\"zl-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">';\n    h += '<div class=\"zl-rem-lead\" style=\"margin:.6rem 0\">Erinnerung <select id=\"zlYearLead\"><option value=\"3\">3 Tage<\/option><option value=\"5\">5 Tage<\/option><option value=\"7\" selected>7 Tage<\/option><option value=\"14\">14 Tage<\/option><\/select> vor jeder Aufgabe.<\/div>';\n    h += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zlYearNews\"><span>Ich m\u00f6chte auch den w\u00f6chentlichen Zeolife-Newsletter (Tipps, Angebote).<\/span><\/label>';\n    h += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zlYearConsent\"><span>Ich bin einverstanden, dass meine E-Mail nur f\u00fcr das Programm und die Erinnerungen verwendet wird. <a href=\"https:\/\/shop.zeolife.gr\/en\/privacy-policy\/\" target=\"_blank\" rel=\"noopener\">Datenschutz<\/a><\/span><\/label>';\n    h += '<div class=\"zl-mail-row\"><button type=\"submit\" class=\"btn\" id=\"zlYearSend\">\u2709\ufe0f Jahresprogramm senden<\/button><\/div>';\n    h += '<p class=\"zl-status\" id=\"zlYearStatus\" role=\"status\" aria-live=\"polite\"><\/p>';\n    h += '<\/form><\/div>';\n    var box = document.createElement('div');\n    box.innerHTML = h;\n    var el = box.firstChild;\n    before.parentNode.insertBefore(el, before);\n    shownAt = Date.now();\n\n    document.getElementById('zlYearIcs').addEventListener('click', function () { ics(payload(load().soil, load().spray)); });\n    document.getElementById('zlYearMailT').addEventListener('click', function () {\n      var f = document.getElementById('zlYearMail');\n      var on = f.style.display === 'none';\n      f.style.display = on ? '' : 'none';\n      this.classList.toggle('on', on);\n    });\n    document.getElementById('zlYearMail').addEventListener('submit', function (e) {\n      e.preventDefault();\n      var st = document.getElementById('zlYearStatus');\n      var em = document.getElementById('zlYearEmail');\n      var email = (em.value || '').trim();\n      function say(m, k) { st.textContent = m; st.className = 'zl-status' + (k ? ' is-' + k : ''); }\n      if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { say('Bitte geben Sie eine g\u00fcltige E-Mail ein.', 'err'); em.focus(); return; }\n      if (!document.getElementById('zlYearConsent').checked) { say('Bitte best\u00e4tigen Sie die Einwilligung, damit wir Ihnen das Programm senden k\u00f6nnen.', 'err'); return; }\n      var btn = document.getElementById('zlYearSend');\n      btn.disabled = true;\n      say('Wird gesendet\u2026', '');\n      var body = new URLSearchParams();\n      body.append('kind', 'combo');\n      body.append('email', email);\n      body.append('lang', 'en'); body.append('ui', 'de');\n      body.append('consent', '1');\n      body.append('remind', '1');\n      body.append('lead', document.getElementById('zlYearLead').value);\n      body.append('newsletter', document.getElementById('zlYearNews').checked ? '1' : '');\n      body.append('website', document.getElementById('zlYearHp').value);\n      body.append('tm', String(Date.now() - shownAt));\n      body.append('plan', JSON.stringify(payload(load().soil, load().spray)));\n      fetch(PLAN_API, { method: 'POST', body: body })\n        .then(function (r) { return r.json().catch(function () { return { ok: false, message: '' }; }); })\n        .then(function (j) { btn.disabled = false; if (j.ok) { say(j.message || 'Gesendet!', 'ok'); } else { say(j.message || 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut oder rufen Sie uns an: +30 2311 29 55 20.', 'err'); } })\n        .catch(function () { btn.disabled = false; say('Keine Verbindung. Bitte versuchen Sie es gleich noch einmal.', 'err'); });\n    });\n  }\n\n  window.zlYear = { save: save, render: render, load: load };\n})();\n<\/script>\n\n<script>\n(function(){\n  \/\/ ===== DATA =====\n  var cropData = {\n    olive: {\n      name: 'Olivenb\u00e4ume',\n      icon: '\ud83e\uded2',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 2, method: 'Mit der Erde im Pflanzloch vermischen' },\n        existing: { label: '\ud83c\udf33 Bestehende Pflanzung', kg: 24, method: 'Vom Stamm bis zur Kronentraufe' }\n      },\n      perStremmaMax: 600,\n      season: 'Herbst (Okt\u2013Nov) oder zeitiges Fr\u00fchjahr vor dem Austrieb',\n      depth: 'Vom Stamm bis zur Kronentraufe \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    walnut: {\n      name: 'Walnussb\u00e4ume',\n      icon: '\ud83e\udd5c',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 2, method: 'Mit der Erde im Pflanzloch vermischen' },\n        existing: { label: '\ud83c\udf33 Bestehende Pflanzung', kg: 24, method: 'Vom Stamm bis zur Kronentraufe' }\n      },\n      perStremmaMax: 600,\n      season: 'Herbst (Okt\u2013Nov)',\n      depth: 'Vom Stamm bis zur Kronentraufe \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    fruit: {\n      name: 'Obstb\u00e4ume',\n      icon: '\ud83c\udf4e',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 1, method: 'Mit der Erde im Pflanzloch vermischen' },\n        existing: { label: '\ud83c\udf33 Bestehende Pflanzung', kg: 15, method: 'Vom Stamm bis zur Kronentraufe' }\n      },\n      perStremmaMax: 450,\n      season: 'Herbst oder vor der Bl\u00fcte',\n      depth: 'Vom Stamm bis zur Kronentraufe \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    pistachio: {\n      name: 'Pistazien',\n      icon: '\ud83c\udf30',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 1, method: 'Mit der Erde im Pflanzloch vermischen' },\n        existing: { label: '\ud83c\udf33 Bestehende Pflanzung', kg: 15, method: 'Vom Stamm bis zur Kronentraufe' }\n      },\n      perStremmaMax: 450,\n      season: 'Herbst oder vor der Bl\u00fcte',\n      depth: 'Vom Stamm bis zur Kronentraufe \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    vineyard: {\n      name: 'Weinreben',\n      icon: '\ud83c\udf47',\n      mode: 'vine',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 0.2, method: 'Mit der Erde im Pflanzloch vermischen (200 g\/Stock)' },\n        existing: { label: '\ud83c\udf47 Bestehende Pflanzung', kg: 1.2, method: 'Rund um den Stock, mit der Erde vermischen' }\n      },\n      perStremmaMax: 450,\n      season: 'Herbst nach der Lese',\n      depth: 'Rund um den Stock \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    palm: {\n      name: 'Palmen',\n      icon: '\ud83c\udf34',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 Neupflanzung', kg: 2, method: 'Mit der Erde im Pflanzloch vermischen' },\n        existing: { label: '\ud83c\udf33 Bestehende Pflanzung', kg: 24, method: 'Vom Stamm bis zur Kronentraufe' }\n      },\n      perStremmaMax: 0,\n      season: 'Fr\u00fchling',\n      depth: 'Vom Stamm bis zur Krone \u00b7 Wo m\u00f6glich bis 20 cm tief einarbeiten (bei Neupflanzung: mit der Erde des Pflanzlochs vermischen)'\n    },\n    cereals: {\n      name: 'Getreide \/ Mais',\n      icon: '\ud83c\udf3e',\n      mode: 'stremma',\n      perStremmaMax: 300,\n      season: 'Vor der Aussaat (Herbst f\u00fcr Wintergetreide, Fr\u00fchling f\u00fcr Sommergetreide)',\n      depth: '15\u201320 cm tief einarbeiten durch Pfl\u00fcgen'\n    },\n    melons: {\n      name: 'Wassermelonen \/ Melonen',\n      icon: '\ud83c\udf49',\n      mode: 'stremma',\n      perStremmaMax: 450,\n      season: 'Vor dem Verpflanzen oder der Aussaat (Sp\u00e4twinter \u2013 Fr\u00fchling)',\n      depth: '15\u201320 cm tief einarbeiten durch Pfl\u00fcgen oder Fr\u00e4sen, idealerweise in den Pflanzreihen'\n    },\n    alfalfa: {\n      name: 'Luzerne',\n      icon: '\ud83c\udf40',\n      mode: 'stremma',\n      perStremmaMax: 150,\n      season: 'Vor der Anlage der Luzerne (Herbst- oder Fr\u00fchjahrsaussaat)',\n      depth: '15\u201320 cm tief einarbeiten durch Pfl\u00fcgen vor der Aussaat'\n    },\n    herbs: {\n      name: 'Aromapflanzen (Oregano, Thymian)',\n      icon: '\ud83c\udf3f',\n      mode: 'stremma',\n      \/\/ 300 kg\/\u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 \u03c3\u03c5\u03bd\u03bf\u03bb\u03b9\u03ba\u03ac, \u03bc\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03b6\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b2\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03b9\u03ba\u03bf\u03cd (IMERYS, \u226585%).\n      \/\/ \u039f \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0398\u03c1\u03b1\u03ba\u03b9\u03ba\u03cc\u03c2 (80%) \u03c0\u03b1\u03af\u03c1\u03bd\u03b5\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 +20% \u03b1\u03c0\u03cc \u03c4\u03bf doseModifier.\n      perStremmaMax: 300,\n      season: 'Vor dem Pflanzen (Herbst oder zeitiges Fr\u00fchjahr)',\n      depth: '15\u201320 cm tief einarbeiten durch Pfl\u00fcgen oder Fr\u00e4sen, idealerweise in den Pflanzreihen'\n    },\n    lawn: {\n      name: 'Rasen',\n      icon: '\ud83c\udf3f',\n      mode: 'lawn',\n      \/\/ \u03a0\u039f\u039b\u03a5\u0395\u03a4\u0397\u03a3 \u039a\u0391\u039b\u039b\u0399\u0395\u03a1\u0393\u0395\u0399\u0391 \u2014 \u03bc\u03af\u03b1 \u03ba\u03b1\u03b9 \u03bc\u03cc\u03bd\u03b7 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae, \u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03b5\u03c4\u03ce\u03bd\/\u03c3\u03c5\u03bd\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7\u03c2.\n      \/\/ \u0397 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 m\u00b2 (\u03c0\u03b9\u03bf \u03c6\u03b9\u03bb\u03b9\u03ba\u03cc \u03b3\u03b9\u03b1 \u03ba\u03ae\u03c0\u03bf\u03c5\u03c2\/\u03b1\u03c5\u03bb\u03ad\u03c2). 1 \u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 = 1.000 m\u00b2.\n      oneOff: true,\n      \/\/ \u039f \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b5\u03b4\u03ac\u03c6\u03bf\u03c5\u03c2 \u0394\u0395\u039d \u03b5\u03c0\u03b7\u03c1\u03b5\u03ac\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1: \u03c0\u03ac\u03bd\u03c4\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc \u03c7\u03b1\u03bb\u03af\u03ba\u03b9 1-2,5mm (IMERYS: 0,8-2,5mm).\n      ignoreSoil: true,\n      fixedGran: 'fine',\n      smartBrand: 'imerys',\n      smartBrandLabel: 'den Rasen',\n      smartBrandReason: 'F\u00fcr Rasen empfehlen wir IMERYS 0,8\u20132,5 mm: die feinste Variante des \u201eFeinkieses\u201c \u2014 passt beim Top-Dressing leicht zwischen die Halme und gelangt schnell zur Wurzel.',\n      existingKg: 100,          \/\/ kg \u03b1\u03bd\u03ac \u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 (\u03c5\u03c0\u03ac\u03c1\u03c7\u03c9\u03bd \u03b3\u03ba\u03b1\u03b6\u03cc\u03bd)\n      newKg: 300,               \/\/ kg \u03b1\u03bd\u03ac \u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 (\u03bd\u03ad\u03b1 \u03c6\u03cd\u03c4\u03b5\u03c5\u03c3\u03b7)\n      existingKgPerSqm: 0.1,    \/\/ 100 kg\/\u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 \u00f7 1.000 m\u00b2\n      newKgPerSqm: 0.3,         \/\/ 300 kg\/\u03c3\u03c4\u03c1\u03ad\u03bc\u03bc\u03b1 \u00f7 1.000 m\u00b2\n      season: 'Fr\u00fchling oder Herbst \u2014 einmalige Anwendung, nur ein einziges Mal',\n      depth: 'Bestehender Rasen: oberfl\u00e4chlich als Top-Dressing (0,1 kg\/m\u00b2 = 10 kg pro 100 m\u00b2) mit gutem W\u00e4ssern danach \u00b7 Neupflanzung: in die obersten 10\u201315 cm einarbeiten vor der Aussaat oder dem Verlegen des Rasens (0,3 kg\/m\u00b2 = 30 kg pro 100 m\u00b2)'\n    },\n    vegetable: {\n      name: 'Gem\u00fcsegarten',\n      icon: '\ud83e\udd6c',\n      mode: 'area',\n      perSqmKg: 0.5,\n      season: 'Vor dem Pflanzen\/S\u00e4en (Herbst oder zeitiges Fr\u00fchjahr) \u2014 einmalige Anwendung, die ein Leben lang wirkt',\n      depth: 'In die obersten 15\u201320 cm des Bodens einarbeiten durch Hacken oder Fr\u00e4sen \u00b7 einmalige Anwendung (keine j\u00e4hrliche Wiederholung n\u00f6tig)'\n    },\n    ornamentals: {\n      name: 'Zierpflanzen',\n      icon: '\ud83c\udf39',\n      mode: 'ornamental',\n      potPercent: 10,\n      potPercentMin: 5,\n      potPercentMax: 20,\n      gardenPerPlant: 60,\n      gardenPerPlantMin: 30,\n      gardenPerPlantMax: 120,\n      season: 'Pflanzung oder Erneuerung der Erde',\n      depth: 'Vollst\u00e4ndig vermischen (Topf) oder 5\u201310 cm (Garten)'\n    },\n    seedling: {\n      name: 'Saatguterzeugung',\n      icon: '\ud83c\udf31',\n      mode: 'soil_weight',\n      percent: 20,\n      season: 'Vollst\u00e4ndig vermischen vor der Aussaat',\n      depth: 'Gleichm\u00e4\u00dfig mit dem gesamten Substrat vermischen'\n    },\n    succulents: {\n      name: 'Kakteen \/ Sukkulenten',\n      icon: '\ud83c\udf35',\n      mode: 'soil_weight',\n      percent: 20,\n      season: 'Pflanzung oder Umtopfen',\n      depth: 'Vollst\u00e4ndig mit Erde + Flusssand vermischen'\n    }\n  };\n  var products = {\n    greek_thracian: {\n      label: 'Griechischer Thrakischer Zeolith',\n      purity: '80%',\n      doseModifier: 1.2,\n      powder: { name: 'Griechischer Thrakischer Zeolith 0\u20131 mm (Pulver)', url: 'https:\/\/shop.zeolife.gr\/product\/greek-zeolite-zero-to-one-mm\/' },\n      fine: { name: 'Griechischer Thrakischer Zeolith 1\u20132,5 mm (Feinkies)', url: 'https:\/\/shop.zeolife.gr\/product\/greek-zeolite-one-to-2point5mm\/' },\n      gravel: { name: 'Griechischer Thrakischer Zeolith 2,5\u20135 mm (Kies)', url: 'https:\/\/shop.zeolife.gr\/product\/greek-zeolite-2point5-to-5mm\/' }\n    },\n    imerys: {\n      label: 'IMERYS Zeolith',\n      purity: '\u226585%',\n      doseModifier: 1.0,\n      powder: { name: 'IMERYS Zeolith bis 0,8 mm (Pulver)', url: 'https:\/\/shop.zeolife.gr\/product\/zeolite-0point8mm\/' },\n      fine: { name: 'IMERYS Zeolith 0,8\u20132,5 mm (Feinkies)', url: 'https:\/\/shop.zeolife.gr\/product\/zeolite-0point8-to-2point5mm\/' },\n      gravel: { name: 'IMERYS Zeolith 2,5\u20135 mm (Kies)', url: 'https:\/\/shop.zeolife.gr\/product\/zeolite-2point5-to-5mm\/' }\n    },\n    zeocem: {\n      label: 'ZeoGravel\u00ae aktiviert ZEOCEM',\n      purity: '\u226585 % + Aktivierung',\n      doseModifier: 1.0,\n      powder: null,\n      fine: { name: 'ZeoGravel\u00ae aktiviert ZEOCEM 1\u20132,5 mm (Feinkies)', url: 'https:\/\/shop.zeolife.gr\/product\/zeogravel-1-2point5\/' },\n      gravel: { name: 'ZeoGravel\u00ae aktiviert ZEOCEM 2,5\u20135 mm (Kies)', url: 'https:\/\/shop.zeolife.gr\/product\/zeogravel-2point5to5\/' }\n    }\n  };\n  \/\/ === IMERYS 5kg: \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03c3\u03c5\u03c3\u03ba\u03b5\u03c5\u03b1\u03c3\u03af\u03b1 (\u03cc\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03ba\u03bf\u03ba\u03ba\u03bf\u03bc\u03b5\u03c4\u03c1\u03af\u03b5\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c0\u03c1\u03bf\u03ca\u03cc\u03bd\u03c4\u03bf\u03c2) ===\n  \/\/ \u03a0\u03c1\u03bf\u03c4\u03b5\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03cc\u03c4\u03b1\u03bd \u03b7 \u03c3\u03c5\u03bd\u03bf\u03bb\u03b9\u03ba\u03ae \u03b4\u03cc\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b9\u03ba\u03c1\u03ae (< 25 kg) \u2014 \u03af\u03b4\u03b9\u03b1 \u03bb\u03bf\u03b3\u03b9\u03ba\u03ae \u03ba\u03bf\u03ba\u03ba\u03bf\u03bc\u03b5\u03c4\u03c1\u03af\u03b1\u03c2 \u03b1\u03bd\u03ac \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2.\n  var imerys5kg = {\n    url: 'https:\/\/shop.zeolife.gr\/product\/zeolithos-gia-ikiaki-chrisi-5-kila\/',\n    powder: 'IMERYS Zeolith 5 kg \u2014 Pulver (bis 0,8 mm)',\n    fine: 'IMERYS Zeolith 5 kg \u2014 Feinkies (0,8\u20132,5 mm)',\n    gravel: 'IMERYS Zeolith 5 kg \u2014 Kies (2,5\u20135 mm)'\n  };\n  \/\/ 500\u03b3\u03c1 \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0398\u03c1\u03b1\u03ba\u03b9\u03ba\u03cc\u03c2 \u2014 \u03b3\u03b9\u03b1 \u03a0\u039f\u039b\u03a5 \u03bc\u03b9\u03ba\u03c1\u03ad\u03c2\/\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03ce\u03c3\u03b5\u03b9\u03c2 (\u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 500\u03b3\u03c1 \u03c0\u03bf\u03cd\u03b4\u03c1\u03b1).\n  var greek500 = {\n    fine:   { name: 'Griechischer Thrakischer Zeolith 1\u20132,5 mm (Feinkies) \u2014 500 g', url: 'https:\/\/shop.zeolife.gr\/product\/greek-zeolite-one-to-2point5mm-500gr\/' },\n    gravel: { name: 'Griechischer Thrakischer Zeolith 2,5\u20135 mm (Kies) \u2014 500 g', url: 'https:\/\/shop.zeolife.gr\/product\/greek-zeolite-2point5-to-5mm-500gr\/' }\n  };\n  \/\/ 20\/10\/2026 (proposal A): product IDs of the ENGLISH eShop products for \"Add to cart\" (zl_cart=ID:quantity). No German shop: DE uses the English one.\n  \/\/ 5 kg IMERYS: variations of the variable product 41447 per grain size.\n  var CART_URL = 'https:\/\/shop.zeolife.gr\/en\/cart\/';\n  var cartIds = {\n    bag25: {\n      greek_thracian: { powder: 31732, fine: 31733, gravel: 31734 },\n      imerys: { powder: 33663, fine: 33662, gravel: 33659 },\n      zeocem: { fine: 41840, gravel: 41841 }\n    },\n    kg5: { powder: 41454, fine: 41456, gravel: 41457 },\n    g500: { fine: 41773, gravel: 41783 }\n  };\n  function zaCartId(brandKey, gran, tier) {\n    if (tier === 'kg5') { return cartIds.kg5[gran] || 0; }\n    if (tier === 'g500') { return cartIds.g500[gran] || 0; }\n    var b = cartIds.bag25[brandKey];\n    return b ? (b[gran] || 0) : 0;\n  }\n  function zaDiscPct(sacks) {\n    if (sacks >= 40) return 40;\n    if (sacks >= 30) return 30;\n    if (sacks >= 20) return 20;\n    if (sacks >= 10) return 10;\n    return 0;\n  }\n  var AMPC = String.fromCharCode(38);\n  var zaCart = null;\n  var zaLast = null;\n  var TEST_QTY_KG = 1.5; \/\/ \u03ba\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc 1,5 kg (\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ae) \u2192 \u03c0\u03c1\u03bf\u03c4\u03b5\u03af\u03bd\u03bf\u03c5\u03bc\u03b5 500\u03b3\u03c1 (\u03b1\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b7 \u03ba\u03bf\u03ba\u03ba\u03bf\u03bc\u03b5\u03c4\u03c1\u03af\u03b1)\n  var SMALL_QTY_KG = 25; \/\/ \u03ba\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc 25 kg (1 \u03c3\u03b1\u03ba\u03af) \u2192 \u03c0\u03c1\u03bf\u03c4\u03b5\u03af\u03bd\u03bf\u03c5\u03bc\u03b5 5 kg\n  \/\/ 04\/10\/2026: \u03a0\u039f\u03a4\u0395 \u03c0\u03bf\u03cd\u03b4\u03c1\u03b1 \u03b3\u03b9\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c3\u03b5 \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2\/\u03b4\u03ad\u03bd\u03c4\u03c1\u03b1 \u2014 \u03b5\u03bb\u03b1\u03c6\u03c1\u03cd & \u03bc\u03ad\u03c3\u03bf \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2 \u2192 \u03bb\u03b5\u03c0\u03c4\u03cc \u03c7\u03b1\u03bb\u03af\u03ba\u03b9 (1-2,5 mm \/ IMERYS 0,8-2,5 mm), \u03b2\u03b1\u03c1\u03cd \u2192 \u03c7\u03b1\u03bb\u03af\u03ba\u03b9 2,5-5 mm.\n  var soilToGran = { light: 'fine', medium: 'fine', heavy: 'gravel' };\n  var soilLabels = { light: 'Leicht (sandig)', medium: 'Mittel (lehmig)', heavy: 'Schwer (tonig)' };\n  var granLabels = { powder: 'Pulver', fine: 'Feinkies', gravel: 'Kies' };\n  var smartByS = { light: 'imerys', medium: 'zeocem', heavy: 'greek_thracian' };\n  var smartReason = {\n    light: 'IMERYS 0,8\u20132,5 mm ist der feinste \u201eFeinkies\u201c \u2014 ideal f\u00fcr leichte, sandige B\u00f6den: Er gelangt zur Wurzel, ohne wie Pulver von Wasser und Wind davongetragen zu werden.',\n    medium: 'ZeoGravel\u00ae (ZEOCEM) ist durch thermische Behandlung aktiviert \u2014 erh\u00f6hte Wirksamkeit f\u00fcr mittlere B\u00f6den.',\n    heavy: 'Der Griechische Thrakische Zeolith ist lokal (niedriger CO\u2082-Fu\u00dfabdruck) und ideal f\u00fcr schwere B\u00f6den.'\n  };\n  \/\/ ===== ELEMENTS =====\n  var calc = document.getElementById('zaCalc');\n  var steps = calc.querySelectorAll('.step:not(#zaOtherStep)');\n  var otherStep = document.getElementById('zaOtherStep');\n  var actionsRow = calc.querySelector('.actions');\n  var progressBar = document.getElementById('zaProgress');\n  var calcBtn = document.getElementById('zaCalculate');\n  var resetBtn = document.getElementById('zaReset');\n  var resultBox = document.getElementById('zaResult');\n  var resultBody = document.getElementById('zaResultBody');\n  var qtyContainer = document.getElementById('zaQtyContainer');\n  var strategyOptions = document.getElementById('zaStrategyOptions');\n  var strategyNote = document.getElementById('zaStrategyNote');\n  var soilOptions = document.getElementById('zaSoilOptions');\n  var soilNote = document.getElementById('zaSoilNote');\n  \/\/ ===== HELPERS =====\n  function getChecked(name) {\n    var el = calc.querySelector('input[name=\"' + name + '\"]:checked');\n    return el ? el.value : null;\n  }\n  function getVal(id) {\n    var el = document.getElementById(id);\n    return el ? el.value : null;\n  }\n  function fmtKg(n) {\n    if (n >= 1000) return (n \/ 1000).toFixed(1).replace('.0','') + ' Tonnen (' + Math.round(n).toLocaleString('el-GR') + ' kg)';\n    return Math.round(n).toLocaleString('el-GR') + ' kg';\n  }\n  function fmtNum(n) { return Math.round(n).toLocaleString('el-GR'); }\n  \/\/ \u03a0\u03bf\u03bb\u03c5\u03b5\u03c4\u03b5\u03af\u03c2 \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2 \u03bc\u03b5 \u039c\u0399\u0391 \u03ba\u03b1\u03b9 \u03bc\u03cc\u03bd\u03b7 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae (\u03c0.\u03c7. \u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2\/\u03b3\u03ba\u03b1\u03b6\u03cc\u03bd)\n  function isOneOff(crop) {\n    if (!crop) return false;\n    if (!cropData[crop]) return false;\n    return cropData[crop].oneOff === true;\n  }\n  \/\/ \u039a\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2 \u03cc\u03c0\u03bf\u03c5 \u03bf \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b5\u03b4\u03ac\u03c6\u03bf\u03c5\u03c2 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b7\u03c1\u03b5\u03ac\u03b6\u03b5\u03b9 \u03c4\u03b7\u03bd \u03ba\u03bf\u03ba\u03ba\u03bf\u03bc\u03b5\u03c4\u03c1\u03af\u03b1 (\u03c0.\u03c7. \u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2\/\u03b3\u03ba\u03b1\u03b6\u03cc\u03bd)\n  function ignoresSoil(crop) {\n    if (!crop) return false;\n    if (!cropData[crop]) return false;\n    return cropData[crop].ignoreSoil === true;\n  }\n  \/\/ ===== \"ANDERE KULTUR\" \u2014 MODE \u0391\u0399\u03a4\u0397\u039c\u0391\u03a4\u039f\u03a3 =====\n  function updateOtherLinks() {\n    var cropEl = document.getElementById('zaOtherCrop');\n    var detEl = document.getElementById('zaOtherDetails');\n    var cropName = cropEl ? cropEl.value.trim() : '';\n    var details = detEl ? detEl.value.trim() : '';\n    var msg = 'Guten Tag! Ich h\u00e4tte gern einen individuellen Zeolith-Dosierungsvorschlag f\u00fcr die Kultur: ' + (cropName || '[Kultur eintragen]');\n    if (details) { msg += '. Weitere Angaben: ' + details; }\n    var wa = document.getElementById('zaOtherWhatsapp');\n    var em = document.getElementById('zaOtherEmail');\n    if (wa) { wa.href = 'https:\/\/wa.me\/306985838343?text=' + encodeURIComponent(msg); }\n    if (em) { em.href = 'mailto:info@zeolife.gr?subject=' + encodeURIComponent('Zeolith-Dosierungsanfrage' + (cropName ? (' \u2013 ' + cropName) : '')) + '&body=' + encodeURIComponent(msg); }\n  }\n  function enterOtherMode() {\n    for (var i = 0; i < steps.length; i++) { steps[i].style.display = 'none'; steps[i].classList.remove('active'); }\n    if (actionsRow) { actionsRow.style.display = 'none'; }\n    resultBox.classList.remove('show');\n    if (otherStep) {\n      otherStep.style.display = '';\n      otherStep.classList.add('active');\n      otherStep.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n    progressBar.style.width = '100%';\n    updateOtherLinks();\n  }\n  function exitOtherMode() {\n    for (var i = 0; i < steps.length; i++) { steps[i].style.display = ''; }\n    if (actionsRow) { actionsRow.style.display = ''; }\n    if (otherStep) { otherStep.style.display = 'none'; otherStep.classList.remove('active'); }\n  }\n  \/\/ ===== \u0392\u0397\u039c\u0391 5: \u03ba\u03c1\u03cd\u03b2\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03cc\u03c4\u03b1\u03bd \u03b7 \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03c6\u03ac\u03c0\u03b1\u03be =====\n  function updateStrategyStep(crop) {\n    if (!strategyOptions) return;\n    if (!strategyNote) return;\n    if (isOneOff(crop)) {\n      strategyOptions.classList.add('hidden');\n      strategyNote.classList.remove('hidden');\n      calc.querySelectorAll('input[name=\"strategy\"]').forEach(function(r) { r.checked = false; });\n    } else {\n      strategyOptions.classList.remove('hidden');\n      strategyNote.classList.add('hidden');\n    }\n  }\n  \/\/ ===== \u0392\u0397\u039c\u0391 3: \u03ba\u03c1\u03cd\u03b2\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b4\u03ac\u03c6\u03bf\u03c5\u03c2 \u03cc\u03c4\u03b1\u03bd \u03b4\u03b5\u03bd \u03b5\u03c0\u03b7\u03c1\u03b5\u03ac\u03b6\u03bf\u03c5\u03bd \u03c4\u03b7 \u03c3\u03cd\u03c3\u03c4\u03b1\u03c3\u03b7 =====\n  function updateSoilStep(crop) {\n    if (!soilOptions) return;\n    if (!soilNote) return;\n    if (ignoresSoil(crop)) {\n      soilOptions.classList.add('hidden');\n      soilNote.classList.remove('hidden');\n      calc.querySelectorAll('input[name=\"soil\"]').forEach(function(r) { r.checked = false; });\n    } else {\n      soilOptions.classList.remove('hidden');\n      soilNote.classList.add('hidden');\n    }\n  }\n  \/\/ ===== STEP 2 RENDER =====\n  function renderQtyStep(crop) {\n    if (!crop || !cropData[crop]) {\n      qtyContainer.innerHTML = '<p style=\"color:var(--za-muted);font-style:italic;\">W\u00e4hlen Sie zuerst in Schritt 1 eine Kultur aus.<\/p>';\n      return;\n    }\n    var data = cropData[crop];\n    var html = '';\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var unit = data.mode === 'tree' ? 'B\u00e4ume' : 'Wurzelst\u00f6cke';\n      var unitSingular = data.mode === 'tree' ? 'Baum' : 'Stock';\n      var hasStremma = data.perStremmaMax > 0;\n      if (hasStremma) {\n        html += '<div class=\"qty-row\">';\n        html += '<div><label class=\"qty-label\">Wie viele ' + unit + '?<\/label>';\n        html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"z. B. 100\"><\/div>';\n        html += '<div><label class=\"qty-label\">Oder wie viele Stremma? (nur f\u00fcr bestehende Pflanzung)<\/label>';\n        html += '<input type=\"number\" id=\"zaQtyStremma\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"z. B. 5\"><\/div>';\n        html += '<\/div>';\n      } else {\n        html += '<label class=\"qty-label\">Wie viele ' + unit + '?<\/label>';\n        html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"z. B. 20\">';\n      }\n      html += '<div class=\"sub-group\"><label class=\"qty-label\">Pflanzphase<\/label>';\n      html += '<div class=\"options\">';\n      var phases = data.phases;\n      for (var key in phases) {\n        html += '<label class=\"option\"><input type=\"radio\" name=\"phaseGroup\" value=\"' + key + '\">';\n        html += '<span class=\"opt-title\">' + phases[key].label + '<\/span>';\n        html += '<span class=\"opt-desc\">' + phases[key].kg + ' kg\/' + unitSingular + ' \u00b7 ' + phases[key].method + '<\/span>';\n        html += '<\/label>';\n      }\n      html += '<\/div><\/div>';\n    } else if (data.mode === 'stremma') {\n      html += '<label class=\"qty-label\">Wie viele Stremma?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"z. B. 10\">';\n      html += '<p class=\"sublabel\">Dosierung: bis zu ' + data.perStremmaMax + ' kg\/Stremma<\/p>';\n    } else if (data.mode === 'area') {\n      html += '<label class=\"qty-label\">Wie viele Quadratmeter (m\u00b2)?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"z. B. 20\">';\n      html += '<p class=\"sublabel\">Dosierung: ' + data.perSqmKg + ' kg\/m\u00b2 (' + Math.round(data.perSqmKg * 1000) + ' g\/m\u00b2) \u2014 einmalige Anwendung, ein Leben lang<\/p>';\n    } else if (data.mode === 'lawn') {\n      html += '<div class=\"qty-row\">';\n      html += '<div><label class=\"qty-label\">Wie viele Quadratmeter (m\u00b2)?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"z. B. 100\">';\n      html += '<p class=\"sublabel\">Messen Sie <strong>L\u00e4nge \u00d7 Breite<\/strong> \u2014 z. B. 10 m \u00d7 10 m = <strong>100 m\u00b2<\/strong><\/p><\/div>';\n      html += '<div><label class=\"qty-label\">Rasentyp<\/label>';\n      html += '<div class=\"options\">';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"lawnType\" value=\"existing\">';\n      html += '<span class=\"opt-title\">\ud83c\udf3f Bestehender Rasen<\/span><span class=\"opt-desc\">0,1 kg\/m\u00b2 \u00b7 10 kg pro 100 m\u00b2 \u2014 einmalig<\/span><\/label>';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"lawnType\" value=\"new\">';\n      html += '<span class=\"opt-title\">\ud83c\udf31 Neupflanzung<\/span><span class=\"opt-desc\">0,3 kg\/m\u00b2 \u00b7 30 kg pro 100 m\u00b2 \u2014 einmalig<\/span><\/label>';\n      html += '<\/div><\/div><\/div>';\n      \/\/ \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03c0\u03b1\u03c1\u03b1\u03b4\u03b5\u03b9\u03b3\u03bc\u03ac\u03c4\u03c9\u03bd \u2014 \u03b2\u03bf\u03b7\u03b8\u03ac \u03c4\u03bf\u03bd \u03c0\u03b5\u03bb\u03ac\u03c4\u03b7 \u03bd\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03c1\u03ac\u03c3\u03b5\u03b9 \u03b4\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 \u03c3\u03b5 m\u00b2.\n      html += '<div class=\"info-box\" style=\"margin-top:1rem\">';\n      html += '<strong>\ud83d\udcd0 Wie viele m\u00b2 hat Ihre Fl\u00e4che? \u2014 Beispiele<\/strong>';\n      html += '<table class=\"dose-table\" style=\"font-size:0.9rem;margin:0.5rem 0 0;\">';\n      html += '<tr><th>Ma\u00dfe<\/th><th>Fl\u00e4che<\/th><th>\ud83c\udf3f Bestehend<\/th><th>\ud83c\udf31 Neupflanzung<\/th><\/tr>';\n      html += '<tr><td>5 \u00d7 10 m<\/td><td>50 m\u00b2<\/td><td>5 kg<\/td><td>15 kg<\/td><\/tr>';\n      html += '<tr><td>10 \u00d7 10 m<\/td><td><strong>100 m\u00b2<\/strong><\/td><td><strong>10 kg<\/strong><\/td><td><strong>30 kg<\/strong><\/td><\/tr>';\n      html += '<tr><td>10 \u00d7 20 m<\/td><td>200 m\u00b2<\/td><td>20 kg<\/td><td>60 kg<\/td><\/tr>';\n      html += '<tr><td>15 \u00d7 20 m<\/td><td>300 m\u00b2<\/td><td>30 kg<\/td><td>90 kg<\/td><\/tr>';\n      html += '<tr><td>20 \u00d7 25 m<\/td><td>500 m\u00b2<\/td><td>50 kg<\/td><td>150 kg<\/td><\/tr>';\n      html += '<tr><td>25 \u00d7 40 m<\/td><td>1.000 m\u00b2 <em>(1 Stremma)<\/em><\/td><td>100 kg<\/td><td>300 kg<\/td><\/tr>';\n      html += '<\/table>';\n      html += '<p class=\"sublabel\" style=\"margin-top:0.6rem\">\ud83d\udca1 <strong>Unregelm\u00e4\u00dfige Form?<\/strong> Teilen Sie sie gedanklich in Rechtecke auf, berechnen Sie jedes einzeln (L\u00e4nge \u00d7 Breite) und addieren Sie die Ergebnisse. F\u00fcr eine Kreisfl\u00e4che: Radius \u00d7 Radius \u00d7 3,14.<\/p>';\n      html += '<\/div>';\n      html += '<p class=\"sublabel\">\u2705 <strong>Nur eine Anwendung.<\/strong> Rasen ist eine mehrj\u00e4hrige Kultur \u2014 in den folgenden Jahren ist keine Wiederholung n\u00f6tig.<\/p>';\n    } else if (data.mode === 'ornamental') {\n      html += '<label class=\"qty-label\">Art der Anwendung<\/label>';\n      html += '<div class=\"options\">';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"ornType\" value=\"pot\">';\n      html += '<span class=\"opt-title\">\ud83e\udeb4 Topf<\/span><span class=\"opt-desc\">% des Erdgewichts<\/span><\/label>';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"ornType\" value=\"garden\">';\n      html += '<span class=\"opt-title\">\ud83c\udf3a Garten<\/span><span class=\"opt-desc\">Gramm pro Pflanze<\/span><\/label>';\n      html += '<\/div>';\n      html += '<div id=\"zaOrnDetail\" class=\"sub-group hidden\"><\/div>';\n    } else if (data.mode === 'soil_weight') {\n      html += '<label class=\"qty-label\">Wie viele Kilogramm Erde mischen Sie an?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"z. B. 50\">';\n      html += '<p class=\"sublabel\">Dosierung: ' + data.percent + '% des Gewichts (vollst\u00e4ndig vermischt)<\/p>';\n    }\n    qtyContainer.innerHTML = html;\n    var newInputs = qtyContainer.querySelectorAll('input');\n    for (var i = 0; i < newInputs.length; i++) {\n      newInputs[i].addEventListener('input', updateProgress);\n      newInputs[i].addEventListener('change', function(e) {\n        if (e.target.name === 'ornType') renderOrnDetail(e.target.value);\n        if (e.target.name === 'phaseGroup') handlePhaseChange(e.target.value);\n        updateProgress();\n      });\n    }\n  }\n  function handlePhaseChange(phaseValue) {\n    var stremmaInput = document.getElementById('zaQtyStremma');\n    if (!stremmaInput) return;\n    var wrapper = stremmaInput.parentElement;\n    if (phaseValue === 'new') {\n      stremmaInput.disabled = true;\n      stremmaInput.value = '';\n      stremmaInput.placeholder = 'Gilt nicht f\u00fcr Neupflanzung';\n      if (wrapper) wrapper.style.opacity = '0.4';\n    } else {\n      stremmaInput.disabled = false;\n      stremmaInput.placeholder = 'z. B. 5';\n      if (wrapper) wrapper.style.opacity = '1';\n    }\n  }\n  function renderOrnDetail(ornType) {\n    var detail = document.getElementById('zaOrnDetail');\n    if (!detail) return;\n    var html = '';\n    if (ornType === 'pot') {\n      html += '<label class=\"qty-label\">Wie viele Kilogramm Blumenerde?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"z. B. 10\">';\n      html += '<p class=\"sublabel\">Standard 10 % des Gewichts (Bereich 5\u201320 %)<\/p>';\n    } else if (ornType === 'garden') {\n      html += '<label class=\"qty-label\">Wie viele Pflanzen?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"z. B. 50\">';\n      html += '<p class=\"sublabel\">Standard 60 g\/Pflanze (Bereich 30\u2013120 g)<\/p>';\n    }\n    detail.innerHTML = html;\n    detail.classList.remove('hidden');\n    var newInput = detail.querySelector('input');\n    if (newInput) newInput.addEventListener('input', updateProgress);\n  }\n  function isPositive(v) {\n    if (!v) return false;\n    if (Number(v) <= 0) return false;\n    return true;\n  }\n  function isStep2Valid(crop) {\n    if (!crop || !cropData[crop]) return false;\n    var data = cropData[crop];\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var qty = getVal('zaQty');\n      var stremma = getVal('zaQtyStremma');\n      var phaseVal = getChecked('phaseGroup');\n      if (!phaseVal) return false;\n      if (phaseVal === 'new') {\n        return isPositive(qty);\n      }\n      if (isPositive(qty)) return true;\n      if (isPositive(stremma)) return true;\n      return false;\n    }\n    if (data.mode === 'lawn') {\n      var qty2 = getVal('zaQty');\n      var lawnType = getChecked('lawnType');\n      if (!isPositive(qty2)) return false;\n      if (!lawnType) return false;\n      return true;\n    }\n    if (data.mode === 'ornamental') {\n      var ornType = getChecked('ornType');\n      var qty3 = getVal('zaQty');\n      if (!ornType) return false;\n      if (!isPositive(qty3)) return false;\n      return true;\n    }\n    var qty4 = getVal('zaQty');\n    return isPositive(qty4);\n  }\n  function updateProgress() {\n    var crop = getChecked('crop');\n    \/\/ \u00ab\u0386\u03bb\u03bb\u03b7 \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u00bb \u2192 mode \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2, \u03cc\u03c7\u03b9 \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2. \u03a4\u03bf progress\/\u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03c4\u03b1 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c4\u03bf enterOtherMode().\n    if (crop === 'other') { return; }\n    var soil = getChecked('soil');\n    var brand = getChecked('brand');\n    var strategy = getChecked('strategy');\n    var step2OK = isStep2Valid(crop);\n    var filled = 0;\n    if (crop) filled++;\n    if (step2OK) filled++;\n    \/\/ \u03a7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2: \u03c4\u03bf \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2 \u03b4\u03b5\u03bd \u03c0\u03b1\u03af\u03b6\u03b5\u03b9 \u03c1\u03cc\u03bb\u03bf \u2014 \u03c4\u03bf \u0392\u03ae\u03bc\u03b1 3 \u03b4\u03b5\u03bd \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae.\n    if (ignoresSoil(crop)) {\n      filled++;\n    } else if (soil) {\n      filled++;\n    }\n    if (brand) filled++;\n    \/\/ \u0395\u03c6\u03ac\u03c0\u03b1\u03be \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2 (\u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2): \u03c4\u03bf \u0392\u03ae\u03bc\u03b1 5 \u03b4\u03b5\u03bd \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae.\n    if (isOneOff(crop)) {\n      filled++;\n    } else if (strategy) {\n      filled++;\n    }\n    progressBar.style.width = (filled \/ 5 * 100) + '%';\n    steps.forEach(function(s, i) {\n      var isActive = (i === filled) || (i === filled - 1);\n      s.classList.toggle('active', isActive);\n    });\n    calcBtn.disabled = filled < 5;\n  }\n  calc.querySelectorAll('input[name=\"crop\"]').forEach(function(r) {\n    r.addEventListener('change', function() {\n      if (r.value === 'other') {\n        enterOtherMode();\n      } else {\n        exitOtherMode();\n        renderQtyStep(r.value);\n        updateSoilStep(r.value);\n        updateStrategyStep(r.value);\n      }\n      updateProgress();\n    });\n  });\n  var excludedNames = ['crop', 'phaseGroup', 'lawnType', 'ornType'];\n  calc.querySelectorAll('input[type=\"radio\"]').forEach(function(r) {\n    if (excludedNames.indexOf(r.name) === -1) {\n      r.addEventListener('change', updateProgress);\n    }\n  });\n  \/\/ Live-update \u03c4\u03c9\u03bd \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd WhatsApp\/Email \u03ba\u03b1\u03b8\u03ce\u03c2 \u03b3\u03c1\u03ac\u03c6\u03b5\u03b9 \u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2\n  ['zaOtherCrop', 'zaOtherDetails'].forEach(function(id) {\n    var el = document.getElementById(id);\n    if (el) { el.addEventListener('input', updateOtherLinks); }\n  });\n  resetBtn.addEventListener('click', function() {\n    zaClearState();\n    calc.querySelectorAll('input[type=\"radio\"]').forEach(function(r) { r.checked = false; });\n    calc.querySelectorAll('input[type=\"number\"]').forEach(function(r) { r.value = ''; });\n    var oc = document.getElementById('zaOtherCrop'); if (oc) oc.value = '';\n    var od = document.getElementById('zaOtherDetails'); if (od) od.value = '';\n    exitOtherMode();\n    updateSoilStep(null);\n    updateStrategyStep(null);\n    qtyContainer.innerHTML = '<p style=\"color:var(--za-muted);font-style:italic;\">W\u00e4hlen Sie zuerst in Schritt 1 eine Kultur aus.<\/p>';\n    resultBox.classList.remove('show');\n    updateProgress();\n    steps[0].classList.add('active');\n    steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n  \/\/ \u00ab\u2190 \u03a0\u03af\u03c3\u03c9 \u03c3\u03c4\u03bf\u03bd \u03bf\u03b4\u03b7\u03b3\u03cc\u00bb \u2014 \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b1\u03c0\u03cc \u03c4\u03bf mode \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03c4\u03bf\u03bd \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc \u03bf\u03b4\u03b7\u03b3\u03cc\n  var otherBackBtn = document.getElementById('zaOtherBack');\n  if (otherBackBtn) {\n    otherBackBtn.addEventListener('click', function() {\n      var otherRadio = calc.querySelector('input[name=\"crop\"][value=\"other\"]');\n      if (otherRadio) { otherRadio.checked = false; }\n      exitOtherMode();\n      updateProgress();\n      steps[0].classList.add('active');\n      steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  }\n  \/\/ Print: only from the \"Keep your dosage\" box at the end of the result (as in the spray guide).\n  function doPrint() {\n    if (!resultBox.classList.contains('show')) { return; }\n    var dateEl = document.getElementById('zaPrintDate');\n    if (dateEl) {\n      var now = new Date();\n      dateEl.textContent = now.toLocaleDateString('el-GR', { day: '2-digit', month: 'long', year: 'numeric' });\n    }\n    window.print();\n  }\n  function calcBaseDose(crop, phaseGroup, qty, stremmaQty, lawnType, ornType) {\n    var data = cropData[crop];\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var unitLabel = data.mode === 'tree' ? 'B\u00e4ume' : 'Wurzelst\u00f6cke';\n      var phaseLabel = '';\n      if (phaseGroup) {\n        if (data.phases[phaseGroup]) {\n          phaseLabel = data.phases[phaseGroup].label.replace(\/^[^\\s]+\\s\/, '');\n        }\n      }\n      if (isPositive(qty)) {\n        if (phaseGroup) {\n          var kgPerUnit = data.phases[phaseGroup].kg;\n          return { kg: Number(qty) * kgPerUnit, breakdown: fmtNum(qty) + ' ' + unitLabel + ' \u00d7 ' + kgPerUnit + ' kg (' + phaseLabel + ') = ' + fmtKg(Number(qty) * kgPerUnit) };\n        }\n      }\n      if (isPositive(stremmaQty)) {\n        if (data.perStremmaMax > 0) {\n          return { kg: Number(stremmaQty) * data.perStremmaMax, breakdown: fmtNum(stremmaQty) + ' Stremma \u00d7 ' + data.perStremmaMax + ' kg (bestehende Pflanzung) = ' + fmtKg(Number(stremmaQty) * data.perStremmaMax) };\n        }\n      }\n    }\n    if (data.mode === 'stremma') {\n      return { kg: Number(qty) * data.perStremmaMax, breakdown: fmtNum(qty) + ' Stremma \u00d7 ' + data.perStremmaMax + ' kg = ' + fmtKg(Number(qty) * data.perStremmaMax) };\n    }\n    if (data.mode === 'area') {\n      return { kg: Number(qty) * data.perSqmKg, breakdown: fmtNum(qty) + ' m\u00b2 \u00d7 ' + data.perSqmKg + ' kg\/m\u00b2 = ' + fmtKg(Number(qty) * data.perSqmKg) };\n    }\n    if (data.mode === 'lawn') {\n      \/\/ \u0397 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03b5 m\u00b2. 0,1 kg\/m\u00b2 (\u03c5\u03c0\u03ac\u03c1\u03c7\u03c9\u03bd) \u03ae 0,3 kg\/m\u00b2 (\u03bd\u03ad\u03b1 \u03c6\u03cd\u03c4\u03b5\u03c5\u03c3\u03b7) \u2014 \u03b5\u03c6\u03ac\u03c0\u03b1\u03be.\n      var kgPerSqm = lawnType === 'new' ? data.newKgPerSqm : data.existingKgPerSqm;\n      var kgPerStr = lawnType === 'new' ? data.newKg : data.existingKg;\n      var lawnLabel = lawnType === 'new' ? 'Neupflanzung' : 'bestehender Rasen';\n      var sqm = Number(qty);\n      var lawnKg = sqm * kgPerSqm;\n      var bd = fmtNum(sqm) + ' m\u00b2 \u00d7 ' + String(kgPerSqm).replace('.', ',') + ' kg\/m\u00b2 (' + lawnLabel + ', einmalig) = <strong>' + lawnKg.toFixed(1).replace('.0', '').replace('.', ',') + ' kg<\/strong>';\n      bd += '<br><span style=\"font-size:0.88rem;color:var(--za-muted);\">Entspricht: ' + kgPerStr + ' kg\/Stremma \u00b7 Ihre Fl\u00e4che betr\u00e4gt ' + (sqm \/ 1000).toFixed(3).replace(\/0+$\/, '').replace(\/[.,]$\/, '').replace('.', ',') + ' Stremma<\/span>';\n      return { kg: lawnKg, breakdown: bd };\n    }\n    if (data.mode === 'ornamental') {\n      if (ornType === 'pot') {\n        var kg = Number(qty) * (data.potPercent \/ 100);\n        return { kg: kg, breakdown: fmtNum(qty) + ' kg Erde \u00d7 ' + data.potPercent + '% = ' + kg.toFixed(2) + ' kg Zeolith' };\n      }\n      var g = Number(qty) * data.gardenPerPlant;\n      return { kg: g \/ 1000, breakdown: fmtNum(qty) + ' Pflanzen \u00d7 ' + data.gardenPerPlant + ' g = ' + g + ' g (' + (g\/1000).toFixed(2) + ' kg)' };\n    }\n    if (data.mode === 'soil_weight') {\n      var kgS = Number(qty) * (data.percent \/ 100);\n      return { kg: kgS, breakdown: fmtNum(qty) + ' kg Erde \u00d7 ' + data.percent + '% = ' + kgS.toFixed(2) + ' kg Zeolith' };\n    }\n    return { kg: 0, breakdown: '' };\n  }\n  function getDiscount(kg) {\n    var sacks = Math.ceil(kg \/ 25);\n    if (sacks >= 40) return { sacks: sacks, percent: 40, label: '40+ S\u00e4cke', savings: '\ud83c\udf81 40 % Rabatt' };\n    if (sacks >= 30) return { sacks: sacks, percent: 30, label: '30\u201339 S\u00e4cke', savings: '\ud83c\udf81 30 % Rabatt' };\n    if (sacks >= 20) return { sacks: sacks, percent: 20, label: '20\u201329 S\u00e4cke', savings: '\ud83c\udf81 20 % Rabatt' };\n    if (sacks >= 10) return { sacks: sacks, percent: 10, label: '10\u201319 S\u00e4cke', savings: '\ud83c\udf81 10 % Rabatt' };\n    return { sacks: sacks, percent: 0, label: '< 10 S\u00e4cke', savings: '' };\n  }\n  function applyStrategy(baseDose, matureDose, strategy, phase, isTreeVine, oneOff) {\n    \/\/ \u0395\u03a6\u0391\u03a0\u0391\u039e \u039a\u0391\u039b\u039b\u0399\u0395\u03a1\u0393\u0395\u0399\u0395\u03a3 (\u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2\/\u03b3\u03ba\u03b1\u03b6\u03cc\u03bd): \u03c0\u03ac\u03bd\u03c4\u03b1 \u03bc\u03af\u03b1 \u03ba\u03b1\u03b9 \u03bc\u03cc\u03bd\u03b7 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae.\n    if (oneOff) {\n      return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, label: 'Einmalige Anwendung \u2014 nur ein einziges Mal (mehrj\u00e4hrige Kultur)', is4Year: false, isOneOff: true };\n    }\n    if (isTreeVine) {\n      if (phase === 'new') {\n        if (strategy === 'year1') {\n          return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, label: 'Nur Neupflanzung (Pflanzphase)', is4Year: false };\n        }\n        if (strategy === 'full3') {\n          var y1 = baseDose;\n          var y2 = matureDose * 0.4;\n          var remaining = matureDose - y1 - y2;\n          if (remaining < 0) remaining = 0;\n          var y3 = remaining \/ 2;\n          var y4 = remaining \/ 2;\n          return { display: y1 + y2 + y3 + y4, year1: y1, year2: y2, year3: y3, year4: y4, label: 'Vollst\u00e4ndiges 4-Jahres-Programm (Neupflanzung)', is4Year: true };\n        }\n        if (strategy === 'maintenance') {\n          var maintNew = matureDose * 0.15;\n          return { display: maintNew, year1: maintNew, year2: 0, year3: 0, year4: 0, label: 'Erhaltung (15 % der Dosis eines ausgewachsenen Baumes)', is4Year: false };\n        }\n      }\n    }\n    if (strategy === 'year1') {\n      return { display: baseDose * 0.4, year1: baseDose * 0.4, year2: 0, year3: 0, year4: 0, label: 'Erstes Jahr (40 % der Gesamtdosis)', is4Year: false };\n    }\n    if (strategy === 'full3') {\n      return { display: baseDose, year1: baseDose * 0.4, year2: baseDose * 0.3, year3: baseDose * 0.3, year4: 0, label: 'Vollst\u00e4ndiges 3-Jahres-Programm', is4Year: false };\n    }\n    if (strategy === 'maintenance') {\n      return { display: baseDose * 0.15, year1: baseDose * 0.15, year2: 0, year3: 0, year4: 0, label: 'Erhaltung (15 % der Dosis der ersten Anwendung)', is4Year: false };\n    }\n    return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, is4Year: false };\n  }\n  function calculate(noScroll) {\n    var crop = getChecked('crop');\n    var soil = getChecked('soil');\n    var brand = getChecked('brand');\n    var strategy = getChecked('strategy');\n    var phaseGroup = getChecked('phaseGroup');\n    var lawnType = getChecked('lawnType');\n    var ornType = getChecked('ornType');\n    var qty = getVal('zaQty');\n    var stremmaQty = getVal('zaQtyStremma');\n    var data = cropData[crop];\n    var oneOff = isOneOff(crop);\n    var base = calcBaseDose(crop, phaseGroup, qty, stremmaQty, lawnType, ornType);\n    var baseKg = base.kg;\n    var isTreeVine = (data.mode === 'tree' || data.mode === 'vine');\n    var matureKg = baseKg;\n    if (isTreeVine) {\n      if (phaseGroup === 'new') {\n        if (isPositive(qty)) {\n          matureKg = Number(qty) * data.phases.existing.kg;\n        }\n      }\n    }\n    \/\/ \u03a3\u03b5 \u03ba\u03b1\u03bb\u03bb\u03b9\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2 \u03cc\u03c0\u03bf\u03c5 \u03c4\u03bf \u03ad\u03b4\u03b1\u03c6\u03bf\u03c2 \u03b4\u03b5\u03bd \u03c0\u03b1\u03af\u03b6\u03b5\u03b9 \u03c1\u03cc\u03bb\u03bf (\u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2) \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03b4\u03ac\u03c6\u03bf\u03c5\u03c2.\n    var soilKnown = !ignoresSoil(crop);\n    if (!soil) { soilKnown = false; }\n    var soilPhrase = soilKnown ? soilLabels[soil].toLowerCase() : 'jeden Bodentyp';\n    var brandKey = brand;\n    var smartBrandNote = '';\n    if (brand === 'best_value') {\n      if (soilKnown) {\n        brandKey = smartByS[soil];\n        smartBrandNote = '\ud83d\udca1 <strong>Smart-Auswahl f\u00fcr ' + soilLabels[soil].toLowerCase() + ' Boden:<\/strong> ' + smartReason[soil];\n      } else {\n        brandKey = data.smartBrand || 'imerys';\n        smartBrandNote = '\ud83d\udca1 <strong>Smart-Auswahl f\u00fcr ' + (data.smartBrandLabel || data.name.toLowerCase()) + ':<\/strong> ' + (data.smartBrandReason || 'Auswahl mit der am besten geeigneten K\u00f6rnung f\u00fcr diese Anwendung.');\n      }\n    }\n    var selectedBrand = products[brandKey];\n    var modifier = selectedBrand.doseModifier;\n    var finalKg = baseKg * modifier;\n    var finalMatureKg = matureKg * modifier;\n    \/\/ \u03a3\u03c4\u03b1\u03b8\u03b5\u03c1\u03ae \u03ba\u03bf\u03ba\u03ba\u03bf\u03bc\u03b5\u03c4\u03c1\u03af\u03b1 \u03cc\u03c0\u03bf\u03c5 \u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 (\u03c7\u03bb\u03bf\u03bf\u03c4\u03ac\u03c0\u03b7\u03c4\u03b1\u03c2: \u03c0\u03ac\u03bd\u03c4\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc \u03c7\u03b1\u03bb\u03af\u03ba\u03b9), \u03b1\u03bb\u03bb\u03b9\u03ce\u03c2 \u03b2\u03ac\u03c3\u03b5\u03b9 \u03b5\u03b4\u03ac\u03c6\u03bf\u03c5\u03c2.\n    var gran = data.fixedGran ? data.fixedGran : soilToGran[soil];\n    var product = selectedBrand[gran];\n    var fallbackNote = '';\n    if (!product) {\n      fallbackNote = '\u26a0\ufe0f ' + selectedBrand.label + ' ist nicht als Pulver erh\u00e4ltlich. Wir empfehlen alternativ:';\n      product = products.imerys.powder;\n      brandKey = 'imerys';\n      modifier = 1.0;\n      finalKg = baseKg * modifier;\n      finalMatureKg = matureKg * modifier;\n    }\n    var plan = applyStrategy(finalKg, finalMatureKg, strategy, phaseGroup, isTreeVine, oneOff);\n    var discount = getDiscount(plan.display);\n    var isWholesale = plan.display >= 23000;\n    \/\/ === \u0395\u03a0\u0399\u039b\u039f\u0393\u0397 \u03a3\u03a5\u03a3\u039a\u0395\u03a5\u0391\u03a3\u0399\u0391\u03a3 \u0391\u039d\u0391\u039b\u039f\u0393\u0391 \u039c\u0395 \u03a4\u0397\u039d \u03a0\u039f\u03a3\u039f\u03a4\u0397\u03a4\u0391 ===\n    \/\/ \u03a0\u03bf\u03bb\u03cd \u03bc\u03b9\u03ba\u03c1\u03ae\/\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ae (<1,5kg) \u2192 500\u03b3\u03c1 \u0398\u03c1\u03b1\u03ba\u03b9\u03ba\u03cc\u03c2 \u00b7 \u039c\u03b9\u03ba\u03c1\u03ae (<25kg) \u2192 5kg IMERYS \u00b7 \u0391\u03bb\u03bb\u03b9\u03ce\u03c2 \u2192 \u03c3\u03b1\u03ba\u03b9\u03ac 25kg\n    var tier = 'bag25';\n    if (plan.display > 0) {\n      if (plan.display < SMALL_QTY_KG) {\n        tier = 'kg5';\n        if (plan.display < TEST_QTY_KG) {\n          if (greek500[gran]) { tier = 'g500'; }\n        }\n      }\n    }\n    var packKg = (tier === 'g500') ? 0.5 : (tier === 'kg5' ? 5 : 25);\n    var packWord = (tier === 'g500') ? ' \u00d7 500 g' : (tier === 'kg5' ? ' \u00d7 5kg' : ' S\u00e4cke');\n    var recName = product.name;\n    var recUrl = product.url;\n    var recPurity = selectedBrand.purity;\n    var pack5Note = '';\n    if (tier === 'g500') {\n      recName = greek500[gran].name;\n      recUrl = greek500[gran].url;\n      recPurity = '80%';\n      pack5Note = 'Sehr kleine Menge\/Testmenge \u2192 wir empfehlen die Packung <strong>500 g (Griechischer Thrakischer)<\/strong> in der K\u00f6rnung <strong>' + granLabels[gran] + '<\/strong>' + (soilKnown ? (' f\u00fcr ' + soilPhrase + ' Boden.') : '.');\n    } else if (tier === 'kg5') {\n      recName = imerys5kg[gran];\n      recUrl = imerys5kg.url;\n      recPurity = '\u226585%';\n      pack5Note = 'Kleine Menge \u2192 wir empfehlen die <strong>5-kg-Packung von IMERYS<\/strong> (Variantenprodukt mit allen K\u00f6rnungen). W\u00e4hlen Sie auf der Produktseite die K\u00f6rnung <strong>' + granLabels[gran] + '<\/strong>' + (soilKnown ? (' f\u00fcr ' + soilPhrase + ' Boden.') : ' \u2014 sie ist f\u00fcr diese Anwendung die passende.');\n    }\n    var html = '';\n    if (smartBrandNote) {\n      html += '<div class=\"info-box\"><strong>\ud83e\udd16 Smart Recommendation<\/strong>' + smartBrandNote + '<\/div>';\n    }\n    if (fallbackNote) {\n      html += '<div class=\"warning\"><strong>' + fallbackNote + '<\/strong><\/div>';\n    }\n    if (plan.isOneOff) {\n      html += '<div class=\"info-box\" style=\"background:#eef7e6;border-color:#d6e8c3;\">';\n      html += '<strong>\u2705 Einmalige Anwendung<\/strong>';\n      html += 'Der\/die <strong>' + data.name + '<\/strong> ist eine mehrj\u00e4hrige Kultur: Die untenstehende Menge wird <strong>nur ein einziges Mal<\/strong> ausgebracht. In den folgenden Jahren ist keine Wiederholung und keine Erhaltungsdosis n\u00f6tig \u2014 der Zeolith bleibt im Boden aktiv.';\n      html += '<\/div>';\n    }\n    html += '<h4>\ud83c\udfaf Empfohlenes Produkt<\/h4>';\n    html += '<div class=\"product-card\">';\n    html += '<span class=\"product-name\">' + recName + '<\/span>';\n    html += '<span class=\"product-reason\">Reinheit: <strong>' + recPurity + ' Klinoptilolith<\/strong>';\n    if (modifier > 1) { if (tier === 'bag25') {\n      html += ' \u00b7 Dosierung angepasst um +20 % wegen geringerer Reinheit';\n    } }\n    if (soilKnown) {\n      html += '<br>K\u00f6rnung: <strong>' + granLabels[gran] + '<\/strong> \u00b7 Ideal f\u00fcr <strong>' + soilPhrase + '<\/strong> Boden.';\n    } else {\n      html += '<br>K\u00f6rnung: <strong>' + granLabels[gran] + '<\/strong> (1\u20132,5 mm \u00b7 IMERYS 0,8\u20132,5 mm) \u00b7 Geeignet f\u00fcr <strong>jeden Bodentyp<\/strong> \u2014 beim Rasen h\u00e4ngt die K\u00f6rnung nicht vom Boden ab.';\n    }\n    var pkgLabel = (tier === 'g500') ? '500 g (Testpackung)' : (tier === 'kg5' ? '5 kg (Variantenprodukt)' : 'S\u00e4cke 25 kg');\n    html += '<br>Verpackung: <strong>' + pkgLabel + '<\/strong><\/span>';\n    if (pack5Note) { html += '<span class=\"product-reason\" style=\"display:block;margin-top:0.5rem;\">' + pack5Note + '<\/span>'; }\n    html += '<\/div>';\n    html += '<h4>\ud83d\udcca Berechnung der Dosierung<\/h4>';\n    html += '<table class=\"dose-table\">';\n    html += '<tr><th style=\"width:40%;\">Kultur<\/th><td>' + data.icon + ' ' + data.name + '<\/td><\/tr>';\n    html += '<tr><th>Grundberechnung<\/th><td>' + base.breakdown + '<\/td><\/tr>';\n    if (modifier > 1) {\n      html += '<tr><th>Markenkorrektur (+20 %)<\/th><td>' + fmtKg(baseKg) + ' \u00d7 1.2 = <strong>' + fmtKg(finalKg) + '<\/strong><\/td><\/tr>';\n    }\n    html += '<tr><th>Strategie<\/th><td>' + plan.label + '<\/td><\/tr>';\n    var doseRowLabel = plan.isOneOff ? 'Gesamtdosis (einmalig)' : 'Dosis f\u00fcr die Bestellung jetzt';\n    if (strategy === 'full3') { if (!plan.isOneOff) { doseRowLabel = plan.is4Year ? 'Gesamtdosis (4 Jahre)' : 'Gesamtdosis (3 Jahre)'; } }\n    html += '<tr><th>' + doseRowLabel + '<\/th><td><strong style=\"color:var(--za-brand-dark);font-size:1.1rem;\">' + fmtKg(plan.display) + '<\/strong><\/td><\/tr>';\n    if (tier === 'g500') {\n      html += '<tr><th>Packungen (500 g)<\/th><td><strong>' + Math.ceil(plan.display \/ 0.5) + ' \u00d7 500 g<\/strong><\/td><\/tr>';\n    } else if (tier === 'kg5') {\n      html += '<tr><th>Packungen (5 kg)<\/th><td><strong>' + Math.ceil(plan.display \/ 5) + ' \u00d7 5 kg<\/strong><\/td><\/tr>';\n    } else {\n      html += '<tr><th>S\u00e4cke (25 kg)<\/th><td><strong>' + discount.sacks + ' S\u00e4cke<\/strong><\/td><\/tr>';\n    }\n    html += '<\/table>';\n    var cartId = isWholesale ? 0 : zaCartId(brandKey, gran, tier);\n    if (discount.percent > 0) { if (tier === 'bag25') { if (!cartId) {\n      html += '<div class=\"discount-banner\">';\n      html += '<strong>' + discount.savings + '<\/strong><br>';\n      html += 'Mit ' + discount.sacks + ' S\u00e4cken (' + discount.label + ') erhalten Sie automatisch <strong>' + discount.percent + '%<\/strong> Rabatt im Warenkorb!';\n      html += '<\/div>';\n    } } }\n    if (strategy === 'full3') { if (!plan.isOneOff) {\n      if (plan.is4Year) {\n        html += '<h4>\ud83d\udcc5 4-Jahres-Programm (Neupflanzung)<\/h4>';\n        html += '<p style=\"font-size:0.92rem;color:var(--za-muted);margin:0 0 0.5rem;\">Die Neupflanzung beginnt mit der Pflanzdosis und steigert sich innerhalb von 4 Jahren bis zur vollen Dosis einer ausgewachsenen Pflanze.<\/p>';\n        html += '<div class=\"timeline\" style=\"grid-template-columns:repeat(4,1fr);\">';\n        html += '<div class=\"year-card now\"><div class=\"year-label\">\ud83c\udf31 Jahr 1 (Pflanzung)<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year1) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year1 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Planting dose<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Jahr 2<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year2) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year2 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">40 % der Gesamtmenge<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Jahr 3<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year3) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year3 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Rest \/ 2<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Jahr 4<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year4) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year4 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Rest \/ 2<\/div><\/div>';\n        html += '<\/div>';\n      } else {\n        html += '<h4>\ud83d\udcc5 3-Jahres-Programm<\/h4>';\n        html += '<div class=\"timeline\">';\n        html += '<div class=\"year-card now\"><div class=\"year-label\">\ud83d\udfe2 Jahr 1 (jetzt)<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year1) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year1 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">40 % der Dosis<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Jahr 2<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year2) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year2 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">30 % der Dosis<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Jahr 3<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year3) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year3 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">30 % der Dosis<\/div><\/div>';\n        html += '<\/div>';\n      }\n    } }\n    html += '<h4>\u23f0 Anwendung<\/h4>';\n    html += '<div class=\"info-box\">';\n    html += '<strong>\ud83d\udcc5 Beste Zeit:<\/strong>' + data.season + '<br>';\n    html += '<strong>\ud83d\udccf Tiefe \/ Methode:<\/strong>' + data.depth;\n    html += '<\/div>';\n    if (isWholesale) {\n      html += '<div class=\"wholesale-cta\">';\n      html += '<strong>\ud83d\ude9a Gro\u00dfe Menge (>23 Tonnen)<\/strong>';\n      html += 'F\u00fcr einen Sonderpreis im Gro\u00dfhandel kontaktieren Sie uns:';\n      html += '<div class=\"wholesale-btns four\">';\n      html += '<a href=\"tel:+302311295520\">\ud83d\udcde 2311 29 55 20<\/a>';\n      html += '<a href=\"https:\/\/wa.me\/306985838343?text=' + encodeURIComponent('Guten Tag! Ich interessiere mich f\u00fcr einen Gro\u00dfhandelspreis f\u00fcr Zeolith ' + fmtKg(plan.display) + ' f\u00fcr ' + data.name + '.') + '\" target=\"_blank\">\ud83d\udcac WhatsApp<\/a>';\n      html += '<a href=\"viber:\/\/chat?number=306985838343\">\ud83d\udfe3 Viber<\/a>';\n      html += '<a href=\"https:\/\/zeolife.gr\/de\/kontakt\/\">\u2709\ufe0f Formular<\/a>';\n      html += '<\/div><\/div>';\n    }\n    html += '<h4>\ud83d\udca1 Anwendungstipps<\/h4>';\n    html += '<ul style=\"line-height:1.8;\">';\n    html += '<li>Bringen Sie ihn <strong>vor einem Regen<\/strong> aus oder w\u00e4ssern Sie nach der Anwendung gut.<\/li>';\n    html += '<li>Im <strong>\u00f6kologischen Anbau<\/strong> ist nat\u00fcrlicher Zeolith zu 100 % geeignet.<\/li>';\n    html += '<li>Zeolith wirkt als <strong>Slow-Release-Speicher<\/strong>: Er h\u00e4lt D\u00fcnger, Wasser und N\u00e4hrstoffe \u00fcber viele Jahre zur\u00fcck.<\/li>';\n    html += '<li>Kombinieren Sie ihn mit <strong>normaler D\u00fcngung<\/strong> \u2014 Zeolith ersetzt den D\u00fcnger nicht, er macht ihn wirksamer.<\/li>';\n    if (soil === 'light') {\n      html += '<li>Auf <strong>leichtem, sandigem Boden<\/strong> empfehlen wir kein Pulver: Es wird leicht von Wasser und Wind davongetragen. Der <strong>Feinkies 1\u20132,5 mm<\/strong> (IMERYS 0,8\u20132,5 mm) bleibt in der Wurzelzone und wirkt jahrelang.<\/li>';\n    }\n    if (crop === 'lawn') {\n      html += '<li>Auf <strong>bestehendem Rasen<\/strong>: gleichm\u00e4\u00dfig ausstreuen (Top-Dressing) \u2014 idealerweise nach dem Vertikutieren\/Aerifizieren \u2014 und gut w\u00e4ssern, damit er zur Wurzel \u201ehinabwandert\u201c.<\/li>';\n      html += '<li>Bei <strong>Neupflanzung<\/strong>: den Zeolith vor der Aussaat bzw. dem Verlegen des Rasens in den Boden einarbeiten \u2014 er senkt den Wasser- und D\u00fcngerbedarf \u00fcber Jahre.<\/li>';\n    }\n    html += '<\/ul>';\n    \/\/ === 20\/10\/2026 (proposal A): \"What you need\" \u2192 one-click cart with the right packs ===\n    zaCart = null;\n    if (cartId) {\n      var packLabel = (tier === 'g500') ? '500 g' : (tier === 'kg5' ? '5 kg' : '25 kg');\n      var cartOpts = [];\n      if (strategy === 'full3') { if (!plan.isOneOff) { if (plan.display > plan.year1) {\n        cartOpts.push({ key: 'y1', title: (plan.is4Year ? '\ud83c\udf31 Jahr 1 (Pflanzung)' : '\ud83d\udfe2 Jahr 1 (jetzt)'), kg: plan.year1 });\n        cartOpts.push({ key: 'all', title: (plan.is4Year ? '\ud83d\udcc5 Alle 4 Jahre' : '\ud83d\udcc5 Alle 3 Jahre'), kg: plan.display });\n      } } }\n      if (cartOpts.length === 0) { cartOpts.push({ key: 'all', title: '', kg: plan.display }); }\n      cartOpts.forEach(function(o) { o.n = Math.max(1, Math.ceil(o.kg \/ packKg - 0.000001)); });\n      zaCart = { id: cartId, opts: cartOpts, pack: packLabel, bag: (tier === 'bag25') };\n      html += '<h4>\ud83d\uded2 Was Sie brauchen<\/h4>';\n      if (cartOpts.length === 2) {\n        html += '<div class=\"options cols-2\" id=\"zaCartWhen\">';\n        cartOpts.forEach(function(o, i) {\n          html += '<label class=\"option\"><input type=\"radio\" name=\"zaCartWhen\" value=\"' + o.key + '\"' + (i === 0 ? ' checked' : '') + '>';\n          html += '<span class=\"opt-title\">' + o.title + '<\/span><span class=\"opt-desc\">' + fmtKg(o.kg) + ' \u00b7 ' + o.n + ' \u00d7 ' + packLabel + '<\/span><\/label>';\n        });\n        html += '<\/div>';\n      }\n      html += '<div class=\"zl-plist\" id=\"zaPlist\"><label class=\"zl-prow\"><input type=\"checkbox\" checked id=\"zaCartPick\">';\n      html += '<span><span class=\"zl-pn\">' + recName + '<\/span><span class=\"zl-pr\" id=\"zaCartWhy\"><\/span><\/span>';\n      html += '<span class=\"zl-pq\" id=\"zaCartQty\"><\/span><\/label><\/div>';\n      html += '<div class=\"zl-cartbox\"><div class=\"discount-banner\" id=\"zaDisc\" style=\"display:none\"><\/div>';\n      html += '<p>Abw\u00e4hlen, wenn Sie es schon haben. Das Produkt kommt in der richtigen Menge in den Warenkorb von <strong>shop.zeolife.gr<\/strong>. Dort sehen Sie Endpreise und Rabatte.<\/p>';\n      html += '<a class=\"cta-btn\" id=\"zaCartBtn\" href=\"' + CART_URL + '\"><span>\ud83d\uded2 In den Warenkorb (<span id=\"zaCartCnt\">0<\/span>) \u2192<\/span><\/a><\/div>';\n    }\n    html += '<div class=\"cta-row\">';\n    if (!cartId) { html += '<a href=\"' + recUrl + '\" class=\"btn\">\ud83d\uded2 Jetzt kaufen<\/a>'; }\n    html += '<a href=\"https:\/\/zeolife.gr\/de\/zeolith-in-der-landwirtschaft\/\" class=\"btn btn-secondary\">\ud83d\udcd6 Informationen zur Landwirtschaft<\/a>';\n    html += '<\/div>';\n    \/\/ --- 20\/10\/2026 (proposal B): Keep your dosage \u2014 email (+ reminders per year) \u00b7 calendar \u00b7 print ---\n    var zaStages = [];\n    if (strategy === 'full3') { if (!plan.isOneOff) {\n      if (plan.is4Year) {\n        zaStages.push({ key: 'y1', name: 'Jahr 1 (Pflanzung)', icon: '\ud83c\udf31', kg: plan.year1 });\n        zaStages.push({ key: 'y2', name: 'Jahr 2', icon: '\ud83d\udfe1', kg: plan.year2 });\n        zaStages.push({ key: 'y3', name: 'Jahr 3', icon: '\ud83d\udfe1', kg: plan.year3 });\n        zaStages.push({ key: 'y4', name: 'Jahr 4', icon: '\ud83d\udfe1', kg: plan.year4 });\n      } else {\n        zaStages.push({ key: 'y1', name: 'Jahr 1', icon: '\ud83d\udfe2', kg: plan.year1 });\n        zaStages.push({ key: 'y2', name: 'Jahr 2', icon: '\ud83d\udfe1', kg: plan.year2 });\n        zaStages.push({ key: 'y3', name: 'Jahr 3', icon: '\ud83d\udfe1', kg: plan.year3 });\n      }\n    } }\n    if (zaStages.length === 0) {\n      var oneName = plan.isOneOff ? 'Einmalige Anwendung' : (strategy === 'maintenance' ? 'Erhaltung' : 'Erste Phase');\n      zaStages.push({ key: 'y1', name: oneName, icon: '\ud83d\udfe2', kg: plan.display });\n    }\n    zaStages = zaStages.filter(function(st) { return st.kg > 0; });\n    zaStages.forEach(function(st) { st.n = Math.max(1, Math.ceil(st.kg \/ packKg - 0.000001)); });\n    var zaPack = (tier === 'g500') ? '500 g' : (tier === 'kg5' ? '5 kg' : '25 kg');\n    zaLast = { crop: crop, data: data, stages: zaStages, oneOff: plan.isOneOff === true, recName: recName, gran: granLabels[gran], pack: zaPack, packKg: packKg, cartId: cartId, qtyLabel: zaQtyLabel(crop, phaseGroup, qty, stremmaQty, ornType), t0: Date.now() };\n    var multi = zaStages.length > 1;\n    html += '<div class=\"zl-keep\" id=\"zaKeep\"><h4>\ud83d\udcec Dosierung behalten<\/h4><p class=\"zl-keep-sub\">W\u00e4hlen Sie, wie Sie sie aufbewahren m\u00f6chten. Gerne auch alles.<\/p>';\n    html += '<div class=\"zl-tiles\">';\n    html += '<button type=\"button\" class=\"zl-tile on\" data-za-tile=\"mail\"><b>\u2709\ufe0f Per E-Mail senden<\/b><span>' + (multi ? 'Mit Erinnerungen f\u00fcr jedes Jahr' : (plan.isOneOff ? 'Damit Sie sie immer haben' : 'Mit Erinnerung f\u00fcr die Erhaltung')) + '<\/span><\/button>';\n    html += '<button type=\"button\" class=\"zl-tile\" data-za-tile=\"ics\"><b>\ud83d\udcc5 In den Kalender<\/b><span>.ics-Datei f\u00fcr Handy, Google, Outlook<\/span><\/button>';\n    html += '<button type=\"button\" class=\"zl-tile\" data-za-tile=\"print\"><b>\ud83d\udda8\ufe0f Drucken<\/b><span>Nur die Dosierung, auf A4<\/span><\/button>';\n    html += '<\/div>';\n    html += '<form class=\"zl-mail\" id=\"zaMail\" novalidate>';\n    html += '<label class=\"qty-label\" for=\"zaEmail\">Ihre E-Mail<\/label>';\n    html += '<input type=\"email\" id=\"zaEmail\" class=\"qty-input\" placeholder=\"z. B. max@gmail.com\" autocomplete=\"email\" required>';\n    html += '<input type=\"text\" name=\"website\" id=\"zaHp\" class=\"zl-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">';\n    if (!plan.isOneOff) {\n      if (multi) {\n        html += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zaRemind\" checked><span><strong>Erinnern Sie mich per E-Mail vor jeder Anwendung<\/strong> \u00b7 kostenlos, solange das Programm l\u00e4uft<\/span><\/label>';\n        html += '<div class=\"zl-rem\" id=\"zaRemBox\"><div class=\"zl-rem-lead\">Erinnerung <select id=\"zaLead\"><option value=\"7\">7 Tage<\/option><option value=\"14\" selected>14 Tage<\/option><option value=\"30\">30 Tage<\/option><\/select> vor jeder Anwendung.<\/div>';\n        html += '<div class=\"zl-dates\"><span class=\"zl-dates-h\">Anwendungstermine \u2014 bei Bedarf \u00e4ndern:<\/span>';\n        zaStages.forEach(function(st, i) {\n          html += '<label class=\"zl-date\"><span>' + st.icon + ' ' + st.name + ' \u00b7 ' + zaKgTxt(st.kg) + ' \u00b7 ' + st.n + ' \u00d7 ' + zaPack + '<\/span><input type=\"date\" data-za-date=\"' + i + '\" value=\"' + zaIso(zaYearsFromNow(i)) + '\"><\/label>';\n        });\n        html += '<\/div><span class=\"zl-small\">Mit einem Klick in jeder E-Mail abbestellbar. Die Termine gehen auch in die Kalenderdatei.<\/span><\/div>';\n      } else {\n        html += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zaRemind\" checked><span><strong>Erinnern Sie mich in einem Jahr<\/strong> an die Erhaltungsdosis \u00b7 kostenlos<\/span><\/label>';\n      }\n    }\n    html += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zaNews\"><span>Ich m\u00f6chte auch den w\u00f6chentlichen Zeolife-Newsletter (Tipps, Angebote).<\/span><\/label>';\n    html += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zaConsent\"><span>Ich bin einverstanden, dass meine E-Mail nur f\u00fcr die Dosierung und die Erinnerungen verwendet wird. <a href=\"https:\/\/shop.zeolife.gr\/en\/privacy-policy\/\" target=\"_blank\" rel=\"noopener\">Datenschutz<\/a><\/span><\/label>';\n    html += '<div class=\"zl-mail-row\"><button type=\"submit\" class=\"btn\" id=\"zaSend\">\u2709\ufe0f Dosierung senden<\/button><\/div>';\n    html += '<p class=\"zl-status\" id=\"zaStatus\" role=\"status\" aria-live=\"polite\"><\/p>';\n    html += '<\/form><\/div>';\n    \/\/ --- 20\/10\/2026 (proposal D): card to the spray guide, with crop and quantity already filled in ---\n    \/\/ Only for crops the spray guide has. Cereals, lawn, vegetable garden etc.: no card.\n    var sprayCrop = { olive: 'olive', walnut: 'nuts', pistachio: 'nuts', fruit: 'fruit', vineyard: 'vineyard' }[crop] || '';\n    if (sprayCrop) {\n      var AMP = String.fromCharCode(38);\n      var sprayUrl = 'https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/?crop=' + sprayCrop;\n      var sprayWhat = '';\n      if (isPositive(qty)) {\n        sprayUrl += AMP + 'trees=' + Math.round(Number(qty)) + AMP + 'src=edafos';\n        sprayWhat = 'Ihre <strong>' + fmtNum(qty) + ' ' + (crop === 'vineyard' ? 'Rebst\u00f6cke' : 'B\u00e4ume') + '<\/strong>';\n      } else if (isPositive(stremmaQty)) {\n        sprayUrl += AMP + 'stremma=' + String(Number(stremmaQty)) + AMP + 'src=edafos';\n        sprayWhat = 'Ihre <strong>' + String(Number(stremmaQty)).replace('.', ',') + ' Stremma<\/strong>';\n      }\n      html += '<div class=\"zl-soil\"><div class=\"zl-soil-ill\" aria-hidden=\"true\" style=\"background:linear-gradient(180deg,#dff1f1 0%,#dff1f1 55%,#e9f4ec 55%,#e9f4ec 100%)\">\ud83c\udf33<\/div><div><strong class=\"zl-soil-h\">\ud83d\udca8 Der Boden ist bereit. Und das Laub?<\/strong>';\n      html += '<p>4 Spritzungen im Jahr mit Zeolith 20 \u00b5m oder ZeTe' + (sprayWhat ? ' f\u00fcr ' + sprayWhat : '') + ' \u2014 der Ratgeber \u00f6ffnet sich mit bereits ' + (sprayWhat ? 'eingetragener Kultur und Menge' : 'gew\u00e4hlter Kultur') + '.<\/p><\/div>';\n      html += '<a class=\"btn btn-secondary\" href=\"' + sprayUrl + '\">Spritzprogramm erstellen \u2192<\/a><\/div>';\n    }\n    html += '<p class=\"disclaimer\"><strong>Hinweis:<\/strong> Die Dosierungen sind Richtwerte und beruhen auf offiziellen Lieferantenangaben f\u00fcr Zeolith mit \u226580 % Klinoptilolith. F\u00fcr Sonderf\u00e4lle (Bio-Zertifizierung, hoher Salzgehalt, besondere chemische Bodenbedingungen) wenden Sie sich an einen Agrarberater. Zeolife.gr bietet technischen Support: 2311 29 55 20.<\/p>';\n    resultBody.innerHTML = html;\n    zaBindKeep();\n    \/\/ 20\/10\/2026 (proposal E): combined yearly program, if the customer also created a spray program in this tab.\n    if (window.zlYear) {\n      window.zlYear.save('soil', { crop: crop, name: data.name, icon: data.icon, qty: zaLast.qtyLabel, payload: zaPayload() });\n      window.zlYear.render(document.getElementById('zaKeep'), 'soil');\n    }\n    resultBox.classList.add('show');\n    zaBindCart();\n    zaSaveState();\n    if (noScroll !== true) { resultBox.scrollIntoView({ behavior: 'smooth', block: 'start' }); }\n  }\n  calcBtn.addEventListener('click', function() { calculate(); });\n\n  \/\/ ===== 20\/10\/2026 (proposal B): email & reminders (shop.zeolife.gr) \u00b7 .ics calendar =====\n  var PLAN_API = 'https:\/\/shop.zeolife.gr\/wp-json\/zt\/v1\/spray-plan';\n  function zaPad(n) { return (n > 9 ? '' : '0') + n; }\n  function zaIso(d) { return d.getFullYear() + '-' + zaPad(d.getMonth() + 1) + '-' + zaPad(d.getDate()); }\n  function zaToday() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); }\n  function zaYearsFromNow(k) { var t = zaToday(); return new Date(t.getFullYear() + k, t.getMonth(), t.getDate()); }\n  function zaQtyLabel(crop, phaseGroup, qty, stremmaQty, ornType) {\n    var data = cropData[crop];\n    var out = '';\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      if (isPositive(qty)) { out = fmtNum(qty) + ' ' + (data.mode === 'tree' ? 'B\u00e4ume' : 'Rebst\u00f6cke'); }\n      else if (isPositive(stremmaQty)) { out = String(Number(stremmaQty)).replace('.', ',') + ' Stremma'; }\n      if (phaseGroup) { if (data.phases[phaseGroup]) { out += ' \u00b7 ' + data.phases[phaseGroup].label.replace(\/^[^\\s]+\\s\/, ''); } }\n      return out;\n    }\n    if (data.mode === 'stremma') { return String(Number(qty)).replace('.', ',') + ' Stremma'; }\n    if (data.mode === 'area' || data.mode === 'lawn') { return fmtNum(qty) + ' m\u00b2'; }\n    if (data.mode === 'ornamental') { return ornType === 'pot' ? fmtNum(qty) + ' kg Erde (Topf)' : fmtNum(qty) + ' Pflanzen (Garten)'; }\n    return fmtNum(qty) + ' kg Erde';\n  }\n  function zaChosenDate(i) {\n    var el = calc.querySelector('input[data-za-date=\"' + i + '\"]');\n    if (!el) return null;\n    var m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(el.value || '');\n    return m ? new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])) : null;\n  }\n  function zaStageDate(i) { return zaChosenDate(i) || zaYearsFromNow(i); }\n  function zaPayload() {\n    var L = zaLast;\n    var stages = [];\n    var prev = '';\n    var sum = 0, tot = 0;\n    L.stages.forEach(function(st, i) {\n      var iso = zaIso(zaStageDate(i));\n      if (prev) { if (prev > iso) { iso = prev; } }\n      prev = iso;\n      sum += st.n;\n      tot += st.kg;\n      stages.push({ key: st.key, name: st.name, icon: st.icon, win: L.data.season, tip: L.data.depth, date: iso,\n        rows: [[1, L.recName, L.gran, '', zaKgTxt(st.kg) + ' \u00b7 ' + st.n + ' \u00d7 ' + L.pack]],\n        items: L.cartId ? (L.cartId + ':' + st.n) : '' });\n    });\n    \/\/ Program total: bags for all the kilos together (same as \"All years\" in the cart).\n    sum = Math.max(1, Math.ceil(tot \/ L.packKg - 0.000001));\n    return {\n      kind: 'soil', renew: L.oneOff ? 0 : 1,\n      title: L.data.name, crop: L.crop, icon: L.data.icon, qty: L.qtyLabel, water: '', tank: '',\n      guide: window.location.origin + window.location.pathname,\n      year: (L.cartId ? (L.stages.length > 1 ? L.cartId + ':' + sum : '') : ''),\n      yearl: [L.recName + ': ' + zaKgTxt(tot) + ' \u00b7 ' + sum + ' \u00d7 ' + L.pack],\n      stages: stages\n    };\n  }\n  function zaStatus(msg, kind) {\n    var st = document.getElementById('zaStatus');\n    if (!st) return;\n    st.textContent = msg;\n    st.className = 'zl-status' + (kind ? ' is-' + kind : '');\n  }\n  function zaSend(e) {\n    e.preventDefault();\n    var em = document.getElementById('zaEmail');\n    var email = (em.value || '').trim();\n    if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { zaStatus('Bitte geben Sie eine g\u00fcltige E-Mail ein.', 'err'); em.focus(); return; }\n    if (!document.getElementById('zaConsent').checked) { zaStatus('Bitte best\u00e4tigen Sie die Einwilligung, damit wir Ihnen die Dosierung senden k\u00f6nnen.', 'err'); return; }\n    var btn = document.getElementById('zaSend');\n    btn.disabled = true;\n    zaStatus('Wird gesendet\u2026', '');\n    var rem = document.getElementById('zaRemind');\n    var lead = document.getElementById('zaLead');\n    var body = new URLSearchParams();\n    body.append('kind', 'soil');\n    body.append('email', email);\n    body.append('lang', 'en'); body.append('ui', 'de');\n    body.append('consent', '1');\n    body.append('remind', rem ? (rem.checked ? '1' : '') : '');\n    body.append('lead', lead ? lead.value : '14');\n    body.append('newsletter', document.getElementById('zaNews').checked ? '1' : '');\n    body.append('website', document.getElementById('zaHp').value);\n    body.append('tm', String(Date.now() - (zaLast.t0 || Date.now())));\n    body.append('plan', JSON.stringify(zaPayload()));\n    fetch(PLAN_API, { method: 'POST', body: body })\n      .then(function(r) { return r.json().catch(function() { return { ok: false, message: '' }; }); })\n      .then(function(j) {\n        btn.disabled = false;\n        if (j.ok) { zaStatus(j.message || 'Gesendet!', 'ok'); } else { zaStatus(j.message || 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut oder rufen Sie uns an: +30 2311 29 55 20.', 'err'); }\n      })\n      .catch(function() { btn.disabled = false; zaStatus('Keine Verbindung. Bitte versuchen Sie es gleich noch einmal.', 'err'); });\n  }\n  function zaIcsEsc(s) { return String(s).replace(\/\\\\\/g, '\\\\\\\\').replace(\/,\/g, '\\\\,').replace(\/;\/g, '\\\\;').replace(\/\\n\/g, '\\\\n'); }\n  function zaIcsDate(d) { return d.getFullYear() + zaPad(d.getMonth() + 1) + zaPad(d.getDate()); }\n  function zaDownloadIcs() {\n    if (!zaLast) return;\n    var L = zaLast;\n    var lines = ['BEGIN:VCALENDAR', 'VERSION:2.0', 'PRODID:-\/\/Zeolife\/\/Soil Program\/\/EL', 'CALSCALE:GREGORIAN'];\n    var stamp = new Date();\n    L.stages.forEach(function(st, i) {\n      var d = zaStageDate(i);\n      var end = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1);\n      lines.push('BEGIN:VEVENT');\n      lines.push('UID:zeolife-soil-' + L.crop + '-' + i + '-' + zaIcsDate(d) + '@zeolife.gr');\n      lines.push('DTSTAMP:' + zaIcsDate(stamp) + 'T000000Z');\n      lines.push('DTSTART;VALUE=DATE:' + zaIcsDate(d));\n      lines.push('DTEND;VALUE=DATE:' + zaIcsDate(end));\n      lines.push('SUMMARY:' + zaIcsEsc('\ud83c\udf3e Zeolith im Boden \u2014 ' + st.name + ' (' + L.data.name + ')'));\n      lines.push('DESCRIPTION:' + zaIcsEsc(L.recName + ': ' + zaKgTxt(st.kg) + ' \u00b7 ' + st.n + ' \u00d7 ' + L.pack + '\\nMenge: ' + L.qtyLabel + '\\nJahreszeit: ' + L.data.season + '\\nMethode: ' + L.data.depth + '\\nRatgeber: ' + window.location.origin + window.location.pathname));\n      lines.push('BEGIN:VALARM');\n      lines.push('ACTION:DISPLAY');\n      lines.push('DESCRIPTION:' + zaIcsEsc('Zeolith im Boden \u2014 ' + st.name));\n      lines.push('TRIGGER:-P7D');\n      lines.push('END:VALARM');\n      lines.push('END:VEVENT');\n    });\n    lines.push('END:VCALENDAR');\n    var blob = new Blob([lines.join('\\r\\n')], { type: 'text\/calendar;charset=utf-8' });\n    var a = document.createElement('a');\n    a.href = URL.createObjectURL(blob);\n    a.download = 'zeolife-zeolithos-edafos.ics';\n    document.body.appendChild(a);\n    a.click();\n    setTimeout(function() { URL.revokeObjectURL(a.href); a.parentNode.removeChild(a); }, 1000);\n  }\n  function zaBindKeep() {\n    calc.querySelectorAll('[data-za-tile]').forEach(function(t) {\n      t.addEventListener('click', function() {\n        var k = t.getAttribute('data-za-tile');\n        if (k === 'ics') { zaDownloadIcs(); return; }\n        if (k === 'print') { doPrint(); return; }\n        var on = !t.classList.contains('on');\n        t.classList.toggle('on', on);\n        document.getElementById('zaMail').style.display = on ? '' : 'none';\n      });\n    });\n    var rem = document.getElementById('zaRemind');\n    var box = document.getElementById('zaRemBox');\n    if (rem) { if (box) { rem.addEventListener('change', function() { box.style.display = rem.checked ? '' : 'none'; }); } }\n    calc.querySelectorAll('input[data-za-date]').forEach(function(inp) {\n      inp.addEventListener('change', function() {\n        var all = calc.querySelectorAll('input[data-za-date]');\n        for (var i = 1; i !== all.length; i++) {\n          if (all[i].value) { if (all[i - 1].value) { if (all[i - 1].value > all[i].value) { all[i].value = all[i - 1].value; } } }\n        }\n      });\n    });\n    var f = document.getElementById('zaMail');\n    if (f) { f.addEventListener('submit', zaSend); }\n  }\n\n  \/\/ ===== 20\/10\/2026 (proposal A): eShop cart & return to the guide =====\n  function zaBackQuery() { return 'zl_back=' + encodeURIComponent(window.location.origin + window.location.pathname) + AMPC + 'zl_lang=en'; }\n  function zaCartOpt() {\n    if (!zaCart) return null;\n    var w = getChecked('zaCartWhen');\n    for (var i = 0; i !== zaCart.opts.length; i++) { if (zaCart.opts[i].key === w) { return zaCart.opts[i]; } }\n    return zaCart.opts[0];\n  }\n  \/\/ Small quantities: grams or one decimal (fmtKg rounds to whole kilos).\n  function zaKgTxt(n) {\n    if (1 > n) { return Math.round(n * 1000).toLocaleString('de-DE') + ' g'; }\n    if (10 > n) { return (Math.round(n * 10) \/ 10).toLocaleString('de-DE') + ' kg'; }\n    return fmtKg(n);\n  }\n  function zaUpdateCart() {\n    var btn = document.getElementById('zaCartBtn');\n    if (!btn) return;\n    var o = zaCartOpt();\n    var pick = document.getElementById('zaCartPick');\n    var on = pick ? pick.checked : true;\n    var n = on ? o.n : 0;\n    var why = document.getElementById('zaCartWhy');\n    if (why) { why.textContent = zaKgTxt(o.kg) + ' \u00b7 Packung ' + zaCart.pack; }\n    var q = document.getElementById('zaCartQty');\n    if (q) { q.textContent = o.n + ' \u00d7 ' + zaCart.pack; }\n    var cnt = document.getElementById('zaCartCnt');\n    if (cnt) { cnt.textContent = String(n); }\n    var d = document.getElementById('zaDisc');\n    if (d) {\n      var pct = zaCart.bag ? zaDiscPct(n) : 0;\n      if (pct > 0) {\n        var nextAt = (pct === 10) ? 20 : (pct === 20 ? 30 : (pct === 30 ? 40 : 0));\n        var more = nextAt ? nextAt - n : 0;\n        d.innerHTML = '<strong>\ud83c\udf81 ' + pct + ' % Rabatt \u2014 schon im Warenkorb.<\/strong><br>Bei ' + n + ' S\u00e4cken gilt der Mengenrabatt automatisch.' + (more > 0 ? (more > 3 ? '' : ' Nur noch <strong>' + more + (more === 1 ? ' Sack' : ' S\u00e4cke') + '<\/strong> und Sie erhalten ' + (pct + 10) + ' %.') : '');\n        d.style.display = '';\n      } else {\n        if (zaCart.bag ? (n >= 7) : false) {\n          d.innerHTML = '<strong>\ud83c\udf81 Nur noch ' + (10 - n) + (10 - n === 1 ? ' Sack' : ' S\u00e4cke') + ' und Sie erhalten 10 % Rabatt.<\/strong>';\n          d.style.display = '';\n        } else { d.style.display = 'none'; }\n      }\n    }\n    if (n === 0) { btn.setAttribute('aria-disabled', 'true'); btn.href = CART_URL; return; }\n    btn.removeAttribute('aria-disabled');\n    btn.href = CART_URL + '?zl_cart=' + zaCart.id + ':' + n + AMPC + zaBackQuery();\n  }\n  function zaBindCart() {\n    if (!zaCart) return;\n    resultBody.querySelectorAll('input[name=\"zaCartWhen\"], #zaCartPick').forEach(function(el) {\n      el.addEventListener('change', function() { zaUpdateCart(); zaSaveState(); });\n    });\n    var btn = document.getElementById('zaCartBtn');\n    if (btn) { btn.addEventListener('click', function() { zaUpdateCart(); zaSaveState(); }); }\n    zaUpdateCart();\n  }\n\n  \/\/ ===== 20\/10\/2026 (proposal C): the choices are kept in this tab (sessionStorage), for the return from the eShop =====\n  var ZA_STATE = 'zaState';\n  function zaStore() { try { return window.sessionStorage; } catch (e) { return null; } }\n  function zaSaveState() {\n    var st = zaStore();\n    if (!st) return;\n    var crop = getChecked('crop');\n    if (!crop) return;\n    if (crop === 'other') return;\n    var o = { t: Date.now(), crop: crop, phase: getChecked('phaseGroup'), lawn: getChecked('lawnType'), orn: getChecked('ornType'),\n      qty: getVal('zaQty'), str: getVal('zaQtyStremma'), soil: getChecked('soil'), brand: getChecked('brand'), strategy: getChecked('strategy'),\n      res: resultBox.classList.contains('show'), when: getChecked('zaCartWhen'), off: false, y: window.pageYOffset || 0 };\n    var pk = document.getElementById('zaCartPick');\n    if (pk) { o.off = !pk.checked; }\n    try { st.setItem(ZA_STATE, JSON.stringify(o)); } catch (e) {}\n  }\n  function zaClearState() { var st = zaStore(); if (st) { try { st.removeItem(ZA_STATE); } catch (e) {} } }\n  function zaSetRadio(name, val) {\n    if (val === null || val === undefined) return null;\n    var el = calc.querySelector('input[name=\"' + name + '\"][value=\"' + val + '\"]');\n    if (el) { el.checked = true; }\n    return el;\n  }\n  function zaRestoreState() {\n    var st = zaStore();\n    if (!st) return;\n    var o = null;\n    try { o = JSON.parse(st.getItem(ZA_STATE) || 'null'); } catch (e) { o = null; }\n    if (!o) return;\n    if (Date.now() - (o.t || 0) > 6 * 3600 * 1000) { zaClearState(); return; }\n    if (!cropData[o.crop]) return;\n    if (!zaSetRadio('crop', o.crop)) return;\n    exitOtherMode();\n    renderQtyStep(o.crop);\n    updateSoilStep(o.crop);\n    updateStrategyStep(o.crop);\n    if (zaSetRadio('phaseGroup', o.phase)) { handlePhaseChange(o.phase); }\n    zaSetRadio('lawnType', o.lawn);\n    if (zaSetRadio('ornType', o.orn)) { renderOrnDetail(o.orn); }\n    var qi = document.getElementById('zaQty'); if (qi) { if (o.qty) { qi.value = o.qty; } }\n    var si = document.getElementById('zaQtyStremma'); if (si) { if (o.str) { if (!si.disabled) { si.value = o.str; } } }\n    zaSetRadio('soil', o.soil);\n    zaSetRadio('brand', o.brand);\n    zaSetRadio('strategy', o.strategy);\n    updateProgress();\n    if (o.res) { if (!calcBtn.disabled) {\n      calculate(true);\n      zaSetRadio('zaCartWhen', o.when);\n      var pk = document.getElementById('zaCartPick'); if (pk) { if (o.off) { pk.checked = false; } }\n      zaUpdateCart();\n    } }\n    if (o.y) {\n      var go = function() { window.scrollTo(0, o.y); };\n      if (document.readyState === 'complete') { setTimeout(go, 80); } else { window.addEventListener('load', function() { setTimeout(go, 80); }); }\n    }\n  }\n  calc.querySelectorAll('a[data-za-more]').forEach(function(a) {\n    a.addEventListener('click', function(e) {\n      e.stopPropagation();\n      zaSaveState();\n      a.href = a.getAttribute('data-za-more') + '?' + zaBackQuery();\n    });\n  });\n  window.addEventListener('pagehide', zaSaveState);\n  \/\/ ===== STICKY PROGRESS BAR (JS-driven position:fixed) =====\n  \/\/ \u03a0\u03b9\u03bf \u03b1\u03be\u03b9\u03cc\u03c0\u03b9\u03c3\u03c4\u03bf \u03b1\u03c0\u03cc \u03c4\u03bf CSS position:sticky, \u03c0\u03bf\u03c5 \u00ab\u03c3\u03c0\u03ac\u03b5\u03b9\u00bb \u03cc\u03c4\u03b1\u03bd \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03b3\u03bf\u03bd\u03b9\u03ba\u03cc \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\n  \/\/ \u03c4\u03bf\u03c5 \u03b8\u03ad\u03bc\u03b1\u03c4\u03bf\u03c2 (WordPress\/Kadence\/WPBakery) \u03ad\u03c7\u03b5\u03b9 overflow. \u03a5\u03c0\u03bf\u03bb\u03bf\u03b3\u03af\u03b6\u03b5\u03b9 \u03ba\u03b1\u03b9 \u03c4\u03bf \u03cd\u03c8\u03bf\u03c2\n  \/\/ \u03c4\u03b7\u03c2 WP admin bar \u03ce\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03ba\u03b1\u03b9 \u03c3\u03b5 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2.\n  var progressEl = calc.querySelector('.progress');\n  var progressSpacer = document.getElementById('zaProgressSpacer');\n  var progFlowHeight = 0;\n  function zaMeasure() {\n    if (!progressEl) return;\n    var mb = parseFloat(window.getComputedStyle(progressEl).marginBottom) || 0;\n    progFlowHeight = progressEl.offsetHeight + mb;\n  }\n  \/\/ \u03a0\u03cc\u03c3\u03bf \u03c8\u03b7\u03bb\u03ac \u00ab\u03ba\u03ac\u03b8\u03bf\u03bd\u03c4\u03b1\u03b9\u00bb \u03c4\u03b1 \u03ba\u03b1\u03c1\u03c6\u03b9\u03c4\u03c3\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c3\u03c4\u03b7\u03bd \u03ba\u03bf\u03c1\u03c5\u03c6\u03ae: WP admin bar + sticky\n  \/\/ \u03bc\u03b5\u03bd\u03bf\u03cd \u03c4\u03bf\u03c5 Kadence. \u03a4\u03bf \u03bc\u03b5\u03c4\u03c1\u03ac\u03bc\u03b5 \u0394\u03a5\u039d\u0391\u039c\u0399\u039a\u0391 \u03c3\u03b5 \u03ba\u03ac\u03b8\u03b5 scroll, \u03ce\u03c3\u03c4\u03b5 \u03b7 \u03bc\u03c0\u03ac\u03c1\u03b1 \u03bd\u03b1 \u03bc\u03c0\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u03ac\u03bd\u03c4\u03b1\n  \/\/ \u0391\u039a\u03a1\u0399\u0392\u03a9\u03a3 \u03ba\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd \u2014 \u03c3\u03b5 desktop \u03ba\u03b1\u03b9 \u03ba\u03b9\u03bd\u03b7\u03c4\u03cc, \u03bc\u03b5 \u03ae \u03c7\u03c9\u03c1\u03af\u03c2 admin bar, \u03c7\u03c9\u03c1\u03af\u03c2\n  \/\/ \u03c7\u03b5\u03b9\u03c1\u03bf\u03ba\u03af\u03bd\u03b7\u03c4\u03b7 \u03bc\u03ad\u03c4\u03c1\u03b7\u03c3\u03b7 \u03c3\u03b5 pixel.\n  var ZA_EXTRA_OFFSET = 0; \/\/ \u03c0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03b5\u03c0\u03b9\u03c0\u03bb\u03ad\u03bf\u03bd \u03ba\u03b5\u03bd\u03cc \u03c3\u03b5 px (\u03c0.\u03c7. 6) \u03b1\u03bd \u03b8\u03b5\u03c2 \u03bb\u03af\u03b3\u03bf \u03b1\u03ad\u03c1\u03b1\n  function zaFixedTopBottom(el) {\n    if (!el) return 0;\n    var cs = window.getComputedStyle(el);\n    if (cs.position !== 'fixed') return 0;\n    if (cs.display === 'none') return 0;\n    if (cs.visibility === 'hidden') return 0;\n    var r = el.getBoundingClientRect();\n    if (r.height === 0) return 0;\n    if (r.top > 300) return 0;   \/\/ \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u00ab\u03ba\u03ac\u03b8\u03b5\u03c4\u03b1\u03b9\u00bb \u03c3\u03c4\u03b7\u03bd \u03ba\u03bf\u03c1\u03c5\u03c6\u03ae, \u03cc\u03c7\u03b9 \u03ba\u03ac\u03c0\u03bf\u03c5 \u03c7\u03b1\u03bc\u03b7\u03bb\u03ac\n    if (r.bottom <= 0) return 0;\n    return r.bottom;\n  }\n  function zaTopOffset() {\n    var offset = 0;\n    var ab = zaFixedTopBottom(document.getElementById('wpadminbar'));\n    if (ab > offset) { offset = ab; }\n    var heads = document.querySelectorAll('.kadence-sticky-header');\n    for (var i = 0; i < heads.length; i++) {\n      var hb = zaFixedTopBottom(heads[i]);\n      if (hb > offset) { offset = hb; }\n    }\n    return offset + ZA_EXTRA_OFFSET;\n  }\n  var zaPinned = false;\n  function zaUpdateSticky() {\n    if (!progressEl) return;\n    var offset = zaTopOffset();\n    var rect = calc.getBoundingClientRect();\n    \/\/ WordPress-safe: \u03ba\u03c1\u03b1\u03c4\u03ac\u03bc\u03b5 \u03c4\u03b7 \u03c3\u03cd\u03b3\u03ba\u03c1\u03b9\u03c3\u03b7 \u03c7\u03c9\u03c1\u03af\u03c2 \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03bf-\u03b1\u03c0\u03cc \u03ba\u03b1\u03b9 \u03c7\u03c9\u03c1\u03af\u03c2 \u03bb\u03bf\u03b3\u03b9\u03ba\u03cc-\u039a\u0391\u0399\n    \/\/ \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae, \u03ce\u03c3\u03c4\u03b5 \u03bf editor \u03c4\u03b7\u03c2 WP \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03b7 \u03bc\u03c0\u03b5\u03c1\u03b4\u03b5\u03cd\u03b5\u03b9 \u03bc\u03b5 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 HTML.\n    var shouldPin = false;\n    if (offset >= rect.top) {\n      if (rect.bottom > (offset + 24)) { shouldPin = true; }\n    }\n    if (shouldPin) {\n      var s = progressEl.style;\n      s.position = 'fixed'; s.top = offset + 'px'; s.left = rect.left + 'px';\n      s.width = rect.width + 'px'; s.zIndex = '99999';\n      progressEl.classList.add('za-stuck');\n      if (progressSpacer) progressSpacer.style.height = progFlowHeight + 'px';\n      zaPinned = true;\n    } else if (zaPinned || progressEl.style.position === 'fixed') {\n      var s2 = progressEl.style;\n      s2.position = ''; s2.top = ''; s2.left = ''; s2.width = ''; s2.zIndex = '';\n      progressEl.classList.remove('za-stuck');\n      if (progressSpacer) progressSpacer.style.height = '0px';\n      zaPinned = false;\n    }\n  }\n  zaMeasure();\n  window.addEventListener('load', function() { zaMeasure(); zaUpdateSticky(); });\n  window.addEventListener('scroll', zaUpdateSticky, { passive: true });\n  window.addEventListener('resize', function() { zaMeasure(); zaUpdateSticky(); });\n  zaUpdateSticky();\n  updateProgress();\n  \/\/ ===== 20\/10\/2026 (proposal D): opened from the spray guide \u2192 ?crop=olive + trees=100 (or stremma=5) =====\n  function zaPrefill() {\n    var q;\n    try { q = new URLSearchParams(window.location.search); } catch (e) { return false; }\n    var ck = q.get('crop');\n    if (!ck) return false;\n    if (!cropData[ck]) return false;\n    var radio = calc.querySelector('input[name=\"crop\"][value=\"' + ck + '\"]');\n    if (!radio) return false;\n    radio.checked = true;\n    zaClearState();\n    exitOtherMode();\n    renderQtyStep(ck);\n    updateSoilStep(ck);\n    updateStrategyStep(ck);\n    var trees = Math.round(Number(q.get('trees') || q.get('qty') || 0));\n    var str = Number(String(q.get('stremma') || '0').replace(',', '.'));\n    var data = cropData[ck];\n    var unit = (ck === 'vineyard') ? 'Rebst\u00f6cke' : 'B\u00e4ume';\n    var said = '';\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      if (trees > 0) {\n        var qi = document.getElementById('zaQty');\n        if (qi) { qi.value = String(trees); said = fmtNum(trees) + ' ' + unit; }\n      } else if (str > 0) {\n        var si = document.getElementById('zaQtyStremma');\n        if (si) { si.value = String(str); said = String(str).replace('.', ',') + ' Stremma'; }\n      }\n    }\n    if (q.get('src') === 'psekasmos') {\n      var note = document.createElement('div');\n      note.className = 'info-box';\n      note.innerHTML = '\u2705 Aus dem Spritzratgeber: <strong>' + data.name + (said ? ' \u00b7 ' + said : '') + '<\/strong>. W\u00e4hlen Sie Pflanzphase und Boden.';\n      qtyContainer.insertBefore(note, qtyContainer.firstChild);\n    }\n    updateProgress();\n    return true;\n  }\n  \/\/ From the spray guide (URL) \u2192 prefill; otherwise whatever the customer left before going to the eShop.\n  if (!zaPrefill()) { zaRestoreState(); }\n})();\n<\/script>\n\n<!-- ==== ZL PRINT: \u03b5\u03ba\u03c4\u03c5\u03c0\u03ce\u03bd\u03b5\u03b9 \u039c\u039f\u039d\u039f \u03c4\u03bf \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bf\u03b4\u03b7\u03b3\u03bf\u03cd (\u03c7\u03c9\u03c1\u03af\u03c2 header\/\u03bc\u03b5\u03bd\u03bf\u03cd\/\u03c4\u03af\u03c4\u03bb\u03bf\/footer\/newsletter\/ZeoBot) ==== -->\n<script>\n(function(){\n  if (window.zlPrintOnlyResult) { return; }\n  window.zlPrintOnlyResult = true;\n  var zlHidden = null;\n  function zlHide(el) {\n    if (el.tagName === 'SCRIPT') { return; }\n    if (el.tagName === 'STYLE') { return; }\n    if (el.tagName === 'LINK') { return; }\n    zlHidden.push([el, el.style.getPropertyValue('display'), el.style.getPropertyPriority('display')]);\n    el.style.setProperty('display', 'none', 'important');\n  }\n  function zlStyle(el, prop, val) {\n    zlHidden.push([el, el.style.getPropertyValue(prop), el.style.getPropertyPriority(prop), prop]);\n    el.style.setProperty(prop, val, 'important');\n  }\n  function zlPrintPrep() {\n    if (zlHidden) { return; }\n    var res = document.querySelector('.zlcalc .result.show');\n    if (!res) { return; }\n    zlHidden = [];\n    var node = res;\n    while (node.parentElement) {\n      var parent = node.parentElement;\n      var sibs = parent.children;\n      for (var i = 0; i !== sibs.length; i++) {\n        if (sibs[i] !== node) { zlHide(sibs[i]); }\n      }\n      if (parent === document.body) { break; }\n      zlStyle(parent, 'margin', '0');\n      zlStyle(parent, 'padding', '0');\n      zlStyle(parent, 'border', '0');\n      zlStyle(parent, 'box-shadow', 'none');\n      zlStyle(parent, 'max-width', 'none');\n      node = parent;\n    }\n  }\n  function zlPrintRestore() {\n    if (!zlHidden) { return; }\n    for (var i = zlHidden.length - 1; i !== -1; i--) {\n      var h = zlHidden[i];\n      var prop = h[3] ? h[3] : 'display';\n      if (h[1]) { h[0].style.setProperty(prop, h[1], h[2]); } else { h[0].style.removeProperty(prop); }\n    }\n    zlHidden = null;\n  }\n  window.addEventListener('beforeprint', zlPrintPrep);\n  window.addEventListener('afterprint', zlPrintRestore);\n  if (window.matchMedia) {\n    var mq = window.matchMedia('print');\n    var onChange = function(e) { if (e.matches) { zlPrintPrep(); } else { zlPrintRestore(); } };\n    if (mq.addEventListener) { mq.addEventListener('change', onChange); } else if (mq.addListener) { mq.addListener(onChange); }\n  }\n})();\n<\/script>\n\n\n<script id=\"zl-deeplink\">\n\/* zl-deeplink v2 \u00b7 Zeolife \u00b7 \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c0\u03b1\u03bd\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd \u03b1\u03c0\u03cc \u03c4\u03bf URL (\u03c0.\u03c7. ?crop=olive \u03ba\u03b1\u03b9 soil=light) + \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u00ab\u03a0\u03af\u03c3\u03c9 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03ca\u03cc\u03bd\u00bb. \u03a7\u03c9\u03c1\u03af\u03c2 ampersand \u03c3\u03c4\u03bf\u03bd \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1: \u03c4\u03bf WordPress \u03c4\u03bf\u03bd \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c3\u03b5 HTML entity. *\/\n(function () {\n  if (window.__zlDeeplink) { return; }\n  window.__zlDeeplink = 1;\n  var en = location.pathname.indexOf('\/en\/') === 0;\n  var qs;\n  try { qs = new URLSearchParams(location.search); } catch (e) { return; }\n  var SKIP = \/^(utm_[a-z_]+|from|fbclid|gclid|_ga|ref|lang)$\/;\n\n  function esc(s) {\n    if (window.CSS) { if (CSS.escape) { return CSS.escape(s); } }\n    return String(s).replace(\/[\"\\\\]\/g, function (c) { return '\\\\' + c; });\n  }\n\n  function backButton() {\n    var target = '';\n    var from = qs.get('from') || '';\n    if (\/^\\\/(en\\\/)?product\\\/[a-z0-9%\\-_.\\\/]+$\/i.test(from)) {\n      target = 'https:\/\/shop.zeolife.gr' + from;\n    } else if (\/^https:\\\/\\\/shop\\.zeolife\\.gr\\\/(en\\\/)?product\\\/\/.test(document.referrer || '')) {\n      target = document.referrer.split('#')[0];\n    }\n    if (!target) { return; }\n    var a = document.createElement('a');\n    a.href = target;\n    a.className = 'zl-back-to-product';\n    a.textContent = en ? '\u2190 Back to the product' : '\u2190 Zur\u00fcck zum Produkt';\n    a.setAttribute('style', 'position:fixed;left:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:99990;' +\n      'display:inline-flex;align-items:center;gap:6px;padding:11px 18px;border-radius:999px;text-decoration:none;' +\n      'background:linear-gradient(120deg,#0098d2 0%,#2a9ca0 52%,#7ba341 100%);color:#fff;' +\n      \"font:700 14px\/1.2 'Manrope',system-ui,sans-serif;box-shadow:0 12px 26px -10px rgba(0,152,210,.6)\");\n    document.body.appendChild(a);\n  }\n\n  function preselect() {\n    var pairs = [];\n    qs.forEach(function (v, k) {\n      if (SKIP.test(k)) { return; }\n      if (v === '') { return; }\n      pairs.push([k, v]);\n    });\n    if (!pairs.length) { return; }\n    var applied = 0, i = 0;\n    function next(tries) {\n      if (i >= pairs.length) { finish(); return; }\n      var k = pairs[i][0], v = pairs[i][1];\n      var el = document.querySelector('input[name=\"' + esc(k) + '\"][value=\"' + esc(v) + '\"]');\n      if (!el) {\n        if (tries < 10) { setTimeout(function () { next(tries + 1); }, 80); return; }\n      }\n      i++;\n      if (el) {\n        if (!el.checked) { el.click(); }\n        applied++;\n      }\n      setTimeout(function () { next(0); }, 80);\n    }\n    next(0);\n\n    function finish() {\n      if (!applied) { return; }\n      var steps = document.querySelectorAll('.step');\n      var target = null;\n      for (var s = 0; s < steps.length; s++) {\n        var st = steps[s];\n        if (st.offsetParent === null) { continue; }\n        if (!st.querySelector('input[type=\"radio\"]')) { continue; }\n        if (!st.querySelector('input[type=\"radio\"]:checked')) { target = st; break; }\n      }\n      if (!target) { target = document.querySelector('.actions'); }\n      if (target) {\n        var y = target.getBoundingClientRect().top + window.pageYOffset - 110;\n        window.scrollTo({ top: Math.max(0, y), behavior: 'smooth' });\n      }\n    }\n  }\n\n  function start() { backButton(); setTimeout(preselect, 150); }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start); } else { start(); }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf3e Dosierungsratgeber f\u00fcr Zeolith in der landwirtschaftlichen Anwendung Geben Sie uns 5 Angaben, und wir empfehlen Ihnen das richtige Produkt aus unseren 3 Serien (Griechischer Thrakischer, IMERYS, ZeoGravel\u00ae ZEOCEM) mit genauer Dosierung, einem 3-Jahres-Programm und automatischer Rabattberechnung. \ud83d\udccb Ratgeber in 5 Schritten 15 Kulturen 3 Marken \u00d7 9 Produkte 3-Jahres-Programm Auto-Rabatt bis zu 40 %&#8230;<\/p>\n","protected":false},"author":7,"featured_media":10964,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-19991","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft<\/title>\n<meta name=\"description\" content=\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft\" \/>\n<meta property=\"og:description\" content=\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/\" \/>\n<meta property=\"og:site_name\" content=\"Griechischer Zeolith &amp; Industrieminerale \u2013 Anwendungen &amp; Informationen | Zeolife.gr\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/zeolifegr\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T18:01:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"413\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ZeolifeGr\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/\",\"name\":\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"datePublished\":\"2026-06-09T11:08:33+00:00\",\"dateModified\":\"2026-10-20T18:01:02+00:00\",\"description\":\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/#primaryimage\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"contentUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"width\":600,\"height\":413},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/griechischer-zeolith-zeolith-produkte-und-industrieminerale-zeolife-gr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/\",\"name\":\"Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr\",\"description\":\"Wissenschaftliche Informationen \u00fcber Zeolith und andere Industrieminerale. Eigenschaften und Anwendungen in Landwirtschaft, Umwelt und Gesundheit \u2013 f\u00fcr Fachleute und Verbraucher.\",\"publisher\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#organization\"},\"alternateName\":\"Griechischer Zeolith: Eigenschaften, Anwendungen & Produkte | Zeolife.gr\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#organization\",\"name\":\"Zeolife\",\"alternateName\":\"Zeolife.gr\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/icon-color-square.png\",\"contentUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/icon-color-square.png\",\"width\":1200,\"height\":1200,\"caption\":\"Zeolife\"},\"image\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/zeolifegr\",\"https:\\\/\\\/x.com\\\/ZeolifeGr\",\"https:\\\/\\\/www.instagram.com\\\/zeolife.gr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/zeolifegr\",\"https:\\\/\\\/www.pinterest.com\\\/zeolifegr\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCUR1v-vb6vutCU3uvnu98WQ\",\"https:\\\/\\\/zeolifegr.tumblr.com\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@zeolifegr\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft","description":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/","og_locale":"de_DE","og_type":"article","og_title":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft","og_description":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.","og_url":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/","og_site_name":"Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","article_publisher":"https:\/\/www.facebook.com\/zeolifegr","article_modified_time":"2026-10-20T18:01:02+00:00","og_image":[{"width":600,"height":413,"url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@ZeolifeGr","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/","url":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/","name":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft","isPartOf":{"@id":"https:\/\/zeolife.gr\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/#primaryimage"},"image":{"@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/#primaryimage"},"thumbnailUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","datePublished":"2026-06-09T11:08:33+00:00","dateModified":"2026-10-20T18:01:02+00:00","description":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft: Olive, Weinrebe, Walnuss, Obst, Getreide, Rasen, Zierpflanzen \u2013 3 Marken, 3 Bodentypen.","breadcrumb":{"@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/#primaryimage","url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","contentUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","width":600,"height":413},{"@type":"BreadcrumbList","@id":"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zeolife.gr\/de\/griechischer-zeolith-zeolith-produkte-und-industrieminerale-zeolife-gr\/"},{"@type":"ListItem","position":2,"name":"Dosierungsratgeber f\u00fcr Zeolith in der Landwirtschaft"}]},{"@type":"WebSite","@id":"https:\/\/zeolife.gr\/de\/#website","url":"https:\/\/zeolife.gr\/de\/","name":"Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","description":"Wissenschaftliche Informationen \u00fcber Zeolith und andere Industrieminerale. Eigenschaften und Anwendungen in Landwirtschaft, Umwelt und Gesundheit \u2013 f\u00fcr Fachleute und Verbraucher.","publisher":{"@id":"https:\/\/zeolife.gr\/de\/#organization"},"alternateName":"Griechischer Zeolith: Eigenschaften, Anwendungen & Produkte | Zeolife.gr","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zeolife.gr\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/zeolife.gr\/de\/#organization","name":"Zeolife","alternateName":"Zeolife.gr","url":"https:\/\/zeolife.gr\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/zeolife.gr\/de\/#\/schema\/logo\/image\/","url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2019\/11\/icon-color-square.png","contentUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2019\/11\/icon-color-square.png","width":1200,"height":1200,"caption":"Zeolife"},"image":{"@id":"https:\/\/zeolife.gr\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/zeolifegr","https:\/\/x.com\/ZeolifeGr","https:\/\/www.instagram.com\/zeolife.gr\/","https:\/\/www.linkedin.com\/in\/zeolifegr","https:\/\/www.pinterest.com\/zeolifegr\/","https:\/\/www.youtube.com\/channel\/UCUR1v-vb6vutCU3uvnu98WQ","https:\/\/zeolifegr.tumblr.com\/","https:\/\/www.tiktok.com\/@zeolifegr"]}]}},"taxonomy_info":[],"featured_image_src_large":["https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg",600,413,false],"author_info":{"display_name":"Chrysovalantis Chatzigeorgiou","author_link":"https:\/\/zeolife.gr\/de\/author\/valantis\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages\/19991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/comments?post=19991"}],"version-history":[{"count":9,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages\/19991\/revisions"}],"predecessor-version":[{"id":20793,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages\/19991\/revisions\/20793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/media\/10964"}],"wp:attachment":[{"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/media?parent=19991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}