{"id":20779,"date":"2026-10-20T19:07:45","date_gmt":"2026-10-20T16:07:45","guid":{"rendered":"https:\/\/zeolife.gr\/?page_id=20779"},"modified":"2026-10-20T21:01:07","modified_gmt":"2026-10-20T18:01:07","slug":"spritzprogramm-zeolith-ratgeber","status":"publish","type":"page","link":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/","title":{"rendered":"Spritzprogramm mit Zeolith \u2013 Ratgeber"},"content":{"rendered":"\n<!-- ==========================================================\n     Spritzprogramm-Ratgeber (Zeolith \/ ZeTe + EM + EcoPlant + Kieselgur) \u2014 DE\n     Path: \/de\/spritzprogramm-zeolith-ratgeber\/  (WPML-\u00dcbersetzung von \/psekasmos-zeolithos-programma\/)\n     ----------------------------------------------------------\n     20\/10\/2026 \u2014 link with the incorporation guide in both directions (?crop= + trees= \/ stremma=).\n     20\/10\/2026 \u2014 combined yearly program (ZL YEAR, Toolkit >= 2.157.0, kind=combo) when a soil dosage also exists.\n     NO <style>\/<link> (AMP safe) \u2014 styling comes from the Customizer, \u00a716 .zlcalc.\n     JS stays here, in an IIFE. Root hook: id=\"zsCalc\".\n     WordPress-safe: no logical-AND, no \"less-than\" glued to a letter.\n     20\/10\/2026 \u2014 erste DE-Version (Shop-Links zum EN-Shop).\n     ========================================================== -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"WebApplication\",\n      \"name\": \"Spritzprogramm-Ratgeber mit Zeolith, ZeTe, EM, EcoPlant und Kieselgur\",\n      \"alternateName\": \"Ratgeber f\u00fcr Blattspritzungen mit Zeolith\",\n      \"url\": \"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/\",\n      \"description\": \"Interaktiver Ratgeber, der ein Jahresprogramm mit 4 Blattspritzungen (vor der Bl\u00fcte, kleine Frucht, gro\u00dfe Frucht, nach der Ernte) f\u00fcr Olive, Zitrusfr\u00fcchte, Obstb\u00e4ume, Walnuss\/Pistazie und Weinberg erstellt \u2013 mit 20-Mikron-Zeolith oder ZeTe, effektiven Mikroorganismen EM, EcoPlant\u00ae und Kieselgur. Er berechnet die Mengen pro Spritzung, pro Tank und pro Jahr und beginnt das Programm mit der n\u00e4chsten Spritzung ab dem heutigen Datum.\",\n      \"applicationCategory\": \"AgricultureApplication\",\n      \"operatingSystem\": \"Any (web)\",\n      \"inLanguage\": \"de\",\n      \"isAccessibleForFree\": true,\n      \"audience\": { \"@type\": \"Audience\", \"audienceType\": \"Landwirte, Agronomen, landwirtschaftliche Genossenschaften\" },\n      \"publisher\": { \"@type\": \"Organization\", \"name\": \"Zeolife\", \"url\": \"https:\/\/zeolife.gr\/de\/\" }\n    },\n    {\n      \"@type\": \"HowTo\",\n      \"name\": \"So erstellen Sie ein Spritzprogramm mit Zeolith\",\n      \"step\": [\n        { \"@type\": \"HowToStep\", \"name\": \"Kultur w\u00e4hlen\", \"text\": \"Olive, Zitrusfr\u00fcchte, Obstb\u00e4ume, Walnuss\/Pistazie oder Weinberg.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Menge angeben\", \"text\": \"Anzahl der B\u00e4ume oder Stremma (1 Stremma = 1.000 m\u00b2), Liter Spritzbr\u00fche pro Baum (Standard 5 L) und optional die Tankgr\u00f6\u00dfe.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Basis w\u00e4hlen\", \"text\": \"20-Mikron-Zeolith (2 %) oder ZeTe (15 kg auf 500 L Wasser).\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Zus\u00e4tze w\u00e4hlen\", \"text\": \"Effektive Mikroorganismen EM (1 %), EcoPlant\u00ae (1 %), 20-Mikron-Kieselgur (4 %, nur bei kleiner und gro\u00dfer Frucht).\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Reihenfolge\", \"text\": \"Zuerst Zeolith oder ZeTe zusammen mit EcoPlant und EM, danach Kieselgur (empfohlene Reihenfolge).\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Programm mit 4 Spritzungen\", \"text\": \"Vor der Bl\u00fcte, kleine Frucht, gro\u00dfe Frucht und nach der Ernte \u2013 beginnend mit der n\u00e4chsten Spritzung.\" }\n      ]\n    }\n  ]\n}\n<\/script>\n<div class=\"zl zlcalc\" id=\"zsCalc\">\n<div class=\"progress\" aria-hidden=\"true\"><div class=\"progress-bar\" id=\"zsProgress\"><\/div><\/div>\n<div id=\"zsProgressSpacer\" aria-hidden=\"true\" style=\"height:0\"><\/div>\n<div class=\"intro\">\n  <h2>\ud83d\udca8 Spritzprogramm-Ratgeber mit Zeolith<\/h2>\n  <p>Erstellen Sie Ihr <strong>Jahresprogramm mit 4 Blattspritzungen<\/strong> mit 20-Mikron-Zeolith oder ZeTe, effektiven Mikroorganismen EM, EcoPlant\u00ae und Kieselgur. Der Ratgeber berechnet die <strong>Mengen pro Spritzung, pro Tank und f\u00fcr das ganze Jahr<\/strong> und beginnt das Programm mit Ihrer <strong>n\u00e4chsten Spritzung<\/strong>, ausgehend vom heutigen Datum.<\/p>\n  <div class=\"badges\">\n    <span class=\"badge\">\ud83d\udccb Ratgeber in 6 Schritten<\/span>\n    <span class=\"badge\">4 Spritzungen \/ Jahr<\/span>\n    <span class=\"badge\">5 Kulturen<\/span>\n    <span class=\"badge\">Dosis pro Tank<\/span>\n    <span class=\"badge\">\ud83d\udcc5 Kalender .ics<\/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>Kultur w\u00e4hlen<\/h3>\n  <div class=\"options cols-3\">\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"olive\">\n      <span class=\"opt-title\">\ud83e\uded2 Olive<\/span>\n      <span class=\"opt-desc\">Immergr\u00fcn \u00b7 4 Spritzungen<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"citrus\">\n      <span class=\"opt-title\">\ud83c\udf4a Zitrusfr\u00fcchte<\/span>\n      <span class=\"opt-desc\">Immergr\u00fcn \u00b7 4 Spritzungen<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"fruit\">\n      <span class=\"opt-title\">\ud83c\udf4e Obstb\u00e4ume<\/span>\n      <span class=\"opt-desc\">Apfel, Pfirsich, Kirsche u. a.<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"nuts\">\n      <span class=\"opt-title\">\ud83c\udf30 Walnuss \/ Pistazie<\/span>\n      <span class=\"opt-desc\">Walnuss, Pistazie, Mandel<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"vineyard\">\n      <span class=\"opt-title\">\ud83c\udf47 Weinberg<\/span>\n      <span class=\"opt-desc\">Wein- &#038; Tafeltrauben<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsCrop\" value=\"other\">\n      <span class=\"opt-title\">\u2795 Andere Kultur<\/span>\n      <span class=\"opt-desc\">Nicht dabei? Fragen Sie uns<\/span>\n    <\/label>\n  <\/div>\n<\/div>\n<!-- STEP 2: QUANTITY -->\n<div class=\"step\" data-step=\"2\">\n  <h3><span class=\"step-num\">2<\/span>Menge<\/h3>\n  <div id=\"zsQtyBox\">\n    <p style=\"color:var(--muted);font-style:italic;\">W\u00e4hlen Sie zuerst in Schritt 1 eine Kultur.<\/p>\n  <\/div>\n<\/div>\n<!-- STEP 3: BASE -->\n<div class=\"step\" data-step=\"3\">\n  <h3><span class=\"step-num\">3<\/span>Spritzbasis<\/h3>\n  <div class=\"options\">\n    <label class=\"option\"><input type=\"radio\" name=\"zsBase\" value=\"zeolite\">\n      <span class=\"opt-title\">\ud83e\udea8 Zeolith 20\u03bc<\/span>\n      <span class=\"opt-desc\">Griechischer Zeolith aus Thrakien, 20-Mikron-Pulver \u00b7 2 % Verd\u00fcnnung<\/span>\n      <span class=\"opt-info\">Klinoptilolith \u226585 % aus Thrakien. Hinterl\u00e4sst einen d\u00fcnnen wei\u00dfen Film auf Bl\u00e4ttern und Fr\u00fcchten. F\u00fcr den \u00f6kologischen Landbau geeignet.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-20micron\/\" data-zs-more=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-20micron\/\">\u2139\ufe0f Mehr im eShop \u2192<\/a>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsBase\" value=\"zete\">\n      <span class=\"opt-title\">\ud83e\uddea ZeTe<\/span>\n      <span class=\"opt-desc\">Gebrauchsfertige Spritzpaste \u00b7 15-kg-Eimer auf 500 L Wasser<\/span>\n      <span class=\"opt-info\"><strong>Inhaltsstoffe:<\/strong> Zeolith aus Thrakien (Klinoptilolith), angereichert mit Spurenelementen und Mineralien (Silizium, Kalium, Calcium, Eisen, Mangan, Phosphor). Hinterl\u00e4sst einen d\u00fcnnen Schutzfilm auf dem Blatt.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/zete-15kg\/\" data-zs-more=\"https:\/\/shop.zeolife.gr\/en\/product\/zete-15kg\/\">\u2139\ufe0f Mehr im eShop \u2192<\/a>\n    <\/label>\n  <\/div>\n<\/div>\n<!-- STEP 4: ADD-ONS -->\n<div class=\"step\" data-step=\"4\">\n  <h3><span class=\"step-num\">4<\/span>Zus\u00e4tze (optional)<\/h3>\n  <div class=\"options cols-3\">\n    <label class=\"option\"><input type=\"checkbox\" name=\"zsAdd\" value=\"em\" checked>\n      <span class=\"opt-title\">\ud83e\udda0 Effektive Mikroorganismen EM<\/span>\n      <span class=\"opt-desc\">1 % Verd\u00fcnnung<\/span>\n      <span class=\"opt-info\">Lebende Kulturen n\u00fctzlicher Mikroorganismen f\u00fcr Blattwerk und Boden. Am selben Tag spritzen, an dem Sie die L\u00f6sung ansetzen.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/active-microorganisms-em-active\/\" data-zs-more=\"https:\/\/shop.zeolife.gr\/en\/product\/active-microorganisms-em-active\/\">\u2139\ufe0f Mehr im eShop \u2192<\/a>\n    <\/label>\n    <label class=\"option\"><input type=\"checkbox\" name=\"zsAdd\" value=\"eco\" checked>\n      <span class=\"opt-title\">\ud83c\udf31 EcoPlant\u00ae<\/span>\n      <span class=\"opt-desc\">1 % Verd\u00fcnnung<\/span>\n      <span class=\"opt-info\"><strong>Inhaltsstoffe:<\/strong> Fermentationsfl\u00fcssigkeit mit N 2,1 % \u00b7 P 2,2 % \u00b7 K 1,4 % \u00b7 Ca 4,1 % \u00b7 Mg 1 %, Spurenelementen (Fe, Mn, Zn, B), Aminos\u00e4uren und Vitaminen. Hilft der Pflanze, N\u00e4hrstoffe aufzunehmen.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-5-litres-improver\/\" data-zs-more=\"https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-5-litres-improver\/\">\u2139\ufe0f Mehr im eShop \u2192<\/a>\n    <\/label>\n    <label class=\"option\"><input type=\"checkbox\" name=\"zsAdd\" value=\"diat\" checked>\n      <span class=\"opt-title\">\u26aa Kieselgur 20\u03bc<\/span>\n      <span class=\"opt-desc\">4 % Verd\u00fcnnung \u00b7 nur bei kleiner &#038; gro\u00dfer Frucht<\/span>\n      <span class=\"opt-info\"><strong>Wirkung:<\/strong> ein nat\u00fcrliches Insektizid. Es t\u00f6tet kriechende Insekten und Milben auf mechanische Weise, sodass sie keine Resistenz entwickeln k\u00f6nnen.<\/span>\n      <a class=\"opt-more\" href=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-diatomite-20micron-20kg\/\" data-zs-more=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-diatomite-20micron-20kg\/\">\u2139\ufe0f Mehr im eShop \u2192<\/a>\n    <\/label>\n  <\/div>\n  <p class=\"sublabel\">\ud83d\udca1 Alle Materialien lassen sich kombinieren. <strong>Kieselgur<\/strong> kommt <strong>nur in die Spritzungen bei kleiner und gro\u00dfer Frucht<\/strong>, immer <strong>nach<\/strong> dem Zeolith oder ZeTe, in einem zweiten Durchgang.<\/p>\n<\/div>\n<!-- STEP 5: ORDER -->\n<div class=\"step\" data-step=\"5\">\n  <h3><span class=\"step-num\">5<\/span>Reihenfolge<\/h3>\n  <div id=\"zsOrderBox\"><\/div>\n<\/div>\n<!-- STEP 6: PHASE NOW -->\n<div class=\"step\" data-step=\"6\">\n  <h3><span class=\"step-num\">6<\/span>Wo steht Ihre Kultur gerade?<\/h3>\n  <div class=\"options cols-5\" id=\"zsPhaseBox\">\n    <label class=\"option\"><input type=\"radio\" name=\"zsPhase\" value=\"auto\" checked>\n      <span class=\"opt-title\">\ud83d\udcc5 Automatisch<\/span>\n      <span class=\"opt-desc\" id=\"zsAutoDesc\">Nach dem heutigen Datum<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsPhase\" value=\"pre\">\n      <span class=\"opt-title\">\ud83c\udf38 Vor der Bl\u00fcte<\/span>\n      <span class=\"opt-desc\">Geschwollene Knospen<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsPhase\" value=\"small\">\n      <span class=\"opt-title\">\ud83d\udfe2 Kleine Frucht<\/span>\n      <span class=\"opt-desc\">Frucht hat gerade angesetzt<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsPhase\" value=\"large\">\n      <span class=\"opt-title\">\ud83d\udfe0 Gro\u00dfe Frucht<\/span>\n      <span class=\"opt-desc\">Fruchtwachstum<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"zsPhase\" value=\"post\">\n      <span class=\"opt-title\">\ud83c\udf42 Nach der Ernte<\/span>\n      <span class=\"opt-desc\">Bl\u00e4tter noch am Baum<\/span>\n    <\/label>\n  <\/div>\n  <p class=\"sublabel\">\ud83d\udca1 Die Termine sind Richtwerte f\u00fcr Griechenland und den Mittelmeerraum. Ist Ihre Region oder Sorte fr\u00fch oder sp\u00e4t, w\u00e4hlen Sie die Phase, die Sie tats\u00e4chlich auf dem Feld sehen.<\/p>\n<\/div>\n<!-- STEP (conditional): OTHER CROP -->\n<div class=\"step\" id=\"zsOtherStep\" style=\"display:none\">\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"zsOtherBack\" 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)\">Sagen Sie uns, welche Kultur Sie anbauen, und wir erstellen Ihnen <strong>kostenlos<\/strong> ein Spritzprogramm.<\/p>\n  <label class=\"qty-label\" for=\"zsOtherCrop\">Welche Kultur?<\/label>\n  <input type=\"text\" id=\"zsOtherCrop\" class=\"qty-input\" placeholder=\"z. B. Kiwi, Granatapfel, Avocado\u2026\" autocomplete=\"off\">\n  <div class=\"wholesale-cta\" style=\"margin-top:1.25rem\">\n    <strong>\ud83d\udce9 Senden Sie uns Ihre Anfrage<\/strong>\n    <div class=\"wholesale-btns four\">\n      <a id=\"zsOtherWhatsapp\" href=\"https:\/\/wa.me\/306985838343\" target=\"_blank\" rel=\"noopener\">\ud83d\udcac WhatsApp<\/a>\n      <a href=\"viber:\/\/chat?number=306985838343\">\ud83d\udfe3 Viber<\/a>\n      <a id=\"zsOtherEmail\" href=\"mailto:info@zeolife.gr\">\u2709\ufe0f Email<\/a>\n      <a href=\"tel:+302311295520\">\ud83d\udcde +30 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=\"zsCalculate\" disabled=\"\">\ud83d\udccb Programm erstellen<\/button>\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"zsReset\">\ud83d\udd04 Zur\u00fccksetzen<\/button>\n<\/div>\n<!-- RESULT -->\n<div class=\"result\" id=\"zsResult\">\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;\">Spritzprogramm mit Zeolith<\/h2>\n    <p style=\"margin:0.3rem 0 0;font-size:0.9rem;color:#6b6a64;\"><a href=\"https:\/\/www.zeolife.gr\/de\/\">www.zeolife.gr<\/a> \u00b7 \u260e +30 2311 29 55 20 \u00b7 \u2709 info@zeolife.gr<\/p>\n    <p style=\"margin:0.3rem 0 0;font-size:0.8rem;color:#6b6a64;font-style:italic;\">Berechnet am: <span id=\"zsPrintDate\"><\/span><\/p>\n  <\/div>\n  <h3>Ihr Spritzprogramm<\/h3>\n  <div id=\"zsResultBody\"><\/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  \/\/ Phases: [month, day] start\/end (indicative for Greece). If end is before start, the window runs into the next year.\n  var crops = {\n    olive:    { name: 'Olive', icon: '\ud83e\uded2', unit: 'B\u00e4ume', unit1: 'Baum', perStremma: 20, liters: 5, evergreen: true,\n                win: { pre: [[4,1],[5,10]], small: [[6,1],[6,30]], large: [[8,1],[9,30]], post: [[11,1],[1,31]] } },\n    citrus:   { name: 'Zitrusfr\u00fcchte', icon: '\ud83c\udf4a', unit: 'B\u00e4ume', unit1: 'Baum', perStremma: 40, liters: 5, evergreen: true,\n                win: { pre: [[3,1],[3,31]], small: [[5,1],[6,30]], large: [[8,1],[9,30]], post: [[1,1],[2,28]] } },\n    fruit:    { name: 'Obstb\u00e4ume', icon: '\ud83c\udf4e', unit: 'B\u00e4ume', unit1: 'Baum', perStremma: 50, liters: 5, evergreen: false,\n                win: { pre: [[3,1],[4,15]], small: [[5,1],[5,31]], large: [[6,1],[7,31]], post: [[8,1],[10,31]] } },\n    nuts:     { name: 'Walnuss \/ Pistazie', icon: '\ud83c\udf30', unit: 'B\u00e4ume', unit1: 'Baum', perStremma: 15, liters: 5, evergreen: false,\n                win: { pre: [[4,1],[4,30]], small: [[5,1],[6,30]], large: [[7,1],[8,31]], post: [[9,1],[10,31]] } },\n    vineyard: { name: 'Weinberg', icon: '\ud83c\udf47', unit: 'Rebst\u00f6cke', unit1: 'Rebstock', perStremma: 250, liters: 0.4, evergreen: false,\n                win: { pre: [[5,1],[5,31]], small: [[6,1],[6,30]], large: [[7,1],[7,31]], post: [[9,1],[10,31]] } }\n  };\n  var stageOrder = ['pre', 'small', 'large', 'post'];\n  var stageInfo = {\n    pre:   { name: 'Vor der Bl\u00fcte', icon: '\ud83c\udf38',\n             tip: 'Spritzen, wenn die Knospen geschwollen sind, aber <strong>bevor sich die Bl\u00fcten \u00f6ffnen<\/strong>. \u26a0\ufe0f Nie in der Vollbl\u00fcte, damit die Best\u00e4ubung nicht gest\u00f6rt wird.' },\n    small: { name: 'Kleine Frucht', icon: '\ud83d\udfe2',\n             tip: 'Sobald <strong>die Frucht angesetzt hat<\/strong>. Der d\u00fcnne Zeolithfilm sch\u00fctzt die junge Frucht und das Blattwerk.' },\n    large: { name: 'Gro\u00dfe Frucht', icon: '\ud83d\udfe0',\n             tip: 'W\u00e4hrend des <strong>Fruchtwachstums<\/strong>, vor den gro\u00dfen Hitzewellen. Der wei\u00dfe Film verringert Hitzestress und Sonnenbrand.' },\n    post:  { name: 'Nach der Ernte', icon: '\ud83c\udf42',\n             tip: 'Direkt nach der Ernte, <strong>solange der Baum noch Bl\u00e4tter hat<\/strong>. St\u00e4rkt das Blattwerk und hilft dem Baum, sich vor dem Winter zu erholen.' }\n  };\n  var monthsShort = ['Jan', 'Feb', 'M\u00e4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\n  \/\/ Dilutions: quantity per litre of water\n  var RATE = { zeolite: 0.02, zete: 15 \/ 500, em: 0.01, eco: 0.01, diat: 0.04 };\n  \/\/ eShop products \u2014 EN IDs (prices only used to pick the cheapest pack combination)\n  var CART_URL = 'https:\/\/shop.zeolife.gr\/en\/cart\/';\n  var LANG = 'en';   \/\/ Shop & E-Mails gibt es auf EN (kein DE-Shop)\n  var shop = {\n    zeolite: { name: 'Griechischer Zeolith aus Thrakien 20\u03bc', unit: 'kg', icon: '\ud83e\udea8',\n               packs: [ { id: 31731, size: 25, price: 29.90, label: '25 kg', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-20micron\/' },\n                        { id: 39132, size: 3, price: 13.50, label: '3 kg', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-thracian-zeolite-up-to-0-02-mm-20-microns-ultra-fine-powder-3-kg\/' } ] },\n    zete:    { name: 'ZeTe \u2013 Spritzpaste', unit: 'kg', icon: '\ud83e\uddea',\n               packs: [ { id: 35825, size: 15, price: 50.00, label: '15-kg-Eimer', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zete-15kg\/' } ] },\n    em:      { name: 'EM-Active \u2013 Effektive Mikroorganismen', unit: 'L', icon: '\ud83e\udda0',\n               packs: [ { id: 33225, size: 25, price: 125.00, label: '25 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/active-microorganisms-em-active\/' },\n                        { id: 38668, size: 5, price: 36.00, label: '5 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/active-microorganisms-em-active\/' },\n                        { id: 38397, size: 1, price: 10.00, label: '1 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/active-microorganisms-em-active\/' } ] },\n    eco:     { name: 'EcoPlant\u00ae \u2013 Organischer Bodenverbesserer', unit: 'L', icon: '\ud83c\udf31',\n               packs: [ { id: 41789, size: 20, price: 219.00, label: '20 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-20-litres-soil-improver\/' },\n                        { id: 41787, size: 10, price: 115.00, label: '10 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-10-litres-soil-improver\/' },\n                        { id: 40786, size: 5, price: 65.00, label: '5 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-5-litres-improver\/' },\n                        { id: 36938, size: 1, price: 14.98, label: '1 Liter', url: 'https:\/\/shop.zeolife.gr\/en\/product\/ecoplant-1-liter-improver\/' } ] },\n    diat:    { name: 'Griechische Kieselgur 20\u03bc', unit: 'kg', icon: '\u26aa',\n               packs: [ { id: 33667, size: 20, price: 42.90, label: '20 kg', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-diatomite-20micron-20kg\/' },\n                        { id: 33666, size: 0.5, price: 5.90, label: '500 g', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-diatomite-20micron-500gr\/' } ] }\n  };\n  var matLabel = { zeolite: 'Zeolith 20\u03bc', zete: 'ZeTe', em: 'EM', eco: 'EcoPlant\u00ae', diat: 'Kieselgur 20\u03bc' };\n  var matRateTxt = { zeolite: '2 %', zete: '15 kg \/ 500 L', em: '1 %', eco: '1 %', diat: '4 %' };\n  \/\/ Spray orders (when diatomite is used). p1 = what goes in the 1st pass together with the base.\n  var schemes = [\n    { p1: ['eco', 'em'] },\n    { p1: ['em'] },\n    { p1: [] },\n    { p1: ['eco'] }\n  ];\n  \/\/ ===================== ELEMENTS =====================\n  var calc = document.getElementById('zsCalc');\n  var steps = calc.querySelectorAll('.step:not(#zsOtherStep)');\n  var otherStep = document.getElementById('zsOtherStep');\n  var actionsRow = calc.querySelector('.actions');\n  var progressBar = document.getElementById('zsProgress');\n  var calcBtn = document.getElementById('zsCalculate');\n  var resetBtn = document.getElementById('zsReset');\n  var resultBox = document.getElementById('zsResult');\n  var resultBody = document.getElementById('zsResultBody');\n  var qtyBox = document.getElementById('zsQtyBox');\n  var orderBox = document.getElementById('zsOrderBox');\n  var lastPlan = null;\n  \/\/ ===================== HELPERS =====================\n  function getChecked(name) {\n    var el = calc.querySelector('input[name=\"' + name + '\"]:checked');\n    return el ? el.value : null;\n  }\n  function getAdds() {\n    var out = [];\n    calc.querySelectorAll('input[name=\"zsAdd\"]:checked').forEach(function(c) { out.push(c.value); });\n    return out;\n  }\n  function num(id) {\n    var el = document.getElementById(id);\n    if (!el) return 0;\n    var v = Number(String(el.value).replace(',', '.'));\n    if (!isFinite(v)) return 0;\n    return v;\n  }\n  function fmt(n, dec) {\n    var d = (dec === undefined) ? 1 : dec;\n    var r = Math.round(n * Math.pow(10, d)) \/ Math.pow(10, d);\n    return r.toLocaleString('de-DE', { maximumFractionDigits: d });\n  }\n  function fmtEuro(n) {\n    return '\u20ac' + n.toLocaleString('el-GR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n  }\n  function fmtAmt(n, unit) {\n    if (unit === 'kg') {\n      if (1 > n) { return fmt(n * 1000, 0) + ' g'; }\n      return fmt(n, 1) + ' kg';\n    }\n    if (1 > n) { return fmt(n * 1000, 0) + ' ml'; }\n    return fmt(n, 1) + ' L';\n  }\n  function inList(arr, v) { return arr.indexOf(v) !== -1; }\n  \/\/ Cheapest pack combination (minimum cost, covers \u2265 need)\n  function bestPacks(need, packs) {\n    var best = null;\n    function rec(i, rem, counts, cost) {\n      if (i === packs.length) {\n        if (rem > 0.0001) return;\n        if (best === null) { best = { counts: counts.slice(), cost: cost }; return; }\n        if (best.cost > cost) { best = { counts: counts.slice(), cost: cost }; }\n        return;\n      }\n      var size = packs[i].size;\n      var hi = Math.ceil(Math.max(rem, 0) \/ size);\n      var lo = Math.max(0, Math.floor(Math.max(rem, 0) \/ size) - 1);\n      if (i === packs.length - 1) { lo = hi; }\n      for (var c = lo; hi >= c; c++) {\n        counts.push(c);\n        rec(i + 1, rem - c * size, counts, cost + c * packs[i].price);\n        counts.pop();\n      }\n    }\n    rec(0, need, [], 0);\n    return best;\n  }\n  \/\/ ===================== DATES =====================\n  function mkDate(y, md) { return new Date(y, md[0] - 1, md[1]); }\n  \/\/ Returns the phase window that ENDS after \"from\" (current or next one).\n  function windowAfter(w, from) {\n    for (var y = from.getFullYear() - 1; from.getFullYear() + 2 >= y; y++) {\n      var s = mkDate(y, w[0]);\n      var e = mkDate(y, w[1]);\n      if (s > e) { e = mkDate(y + 1, w[1]); }\n      if (e >= from) { return { start: s, end: e }; }\n    }\n    return null;\n  }\n  \/\/ The program: 4 sprays, starting from phase \"first\" (or automatically).\n  function buildSchedule(cropKey, phase, today) {\n    var w = crops[cropKey].win;\n    var startIdx = 0;\n    var firstWin = null;\n    if (phase === 'auto') {\n      var bestStart = null;\n      for (var i = 0; i !== stageOrder.length; i++) {\n        var win = windowAfter(w[stageOrder[i]], today);\n        var key = win.start > today ? win.start : today;\n        if (bestStart === null) { bestStart = key; startIdx = i; firstWin = win; }\n        else if (bestStart > key) { bestStart = key; startIdx = i; firstWin = win; }\n      }\n    } else {\n      startIdx = stageOrder.indexOf(phase);\n      firstWin = windowAfter(w[phase], today);\n      \/\/ If the user says \"I am in this phase now\", the spray is now.\n      firstWin = { start: today, end: today, now: true, manual: true };\n    }\n    var out = [];\n    var cursor = today;\n    for (var k = 0; k !== 4; k++) {\n      var st = stageOrder[(startIdx + k) % 4];\n      var wi;\n      if (k === 0) { wi = firstWin; }\n      else {\n        wi = windowAfter(w[st], cursor);\n        if (cursor > wi.start) {\n          \/\/ the window already started before the previous one \u2014 move to next year\n          wi = windowAfter(w[st], new Date(wi.end.getTime() + 86400000));\n        }\n      }\n      var isNow = false;\n      if (k === 0) {\n        if (wi.now) { isNow = true; }\n        else if (today >= wi.start) { isNow = true; }\n      }\n      out.push({ stage: st, start: wi.start, end: wi.end, now: isNow, manual: (k === 0) ? (wi.manual === true) : false });\n      cursor = new Date(wi.end.getTime() + 86400000);\n    }\n    return out;\n  }\n  function rangeLabel(s, e) {\n    var a = monthsShort[s.getMonth()];\n    var b = monthsShort[e.getMonth()];\n    if (s.getFullYear() === e.getFullYear()) {\n      if (a === b) return a + ' ' + s.getFullYear();\n      return a + ' \u2013 ' + b + ' ' + e.getFullYear();\n    }\n    return a + ' ' + s.getFullYear() + ' \u2013 ' + b + ' ' + e.getFullYear();\n  }\n  \/\/ ===================== STEP 2 =====================\n  function renderQty(cropKey) {\n    var c = crops[cropKey];\n    var h = '';\n    h += '<div class=\"options cols-2\" style=\"margin-bottom:.75rem\">';\n    h += '<label class=\"option\"><input type=\"radio\" name=\"zsQtyMode\" value=\"trees\" checked><span class=\"opt-title\">\ud83c\udf33 Anzahl ' + c.unit + '<\/span><span class=\"opt-desc\">Ich wei\u00df, wie viele ' + c.unit + ' ich habe<\/span><\/label>';\n    h += '<label class=\"option\"><input type=\"radio\" name=\"zsQtyMode\" value=\"stremma\"><span class=\"opt-title\">\ud83d\udcd0 Stremma<\/span><span class=\"opt-desc\">1 Stremma = 1.000 m\u00b2 \u00b7 \u00fcber die Pflanzdichte<\/span><\/label>';\n    h += '<\/div>';\n    h += '<div id=\"zsTreesRow\"><label class=\"qty-label\" for=\"zsTrees\">Wie viele ' + c.unit + '?<\/label>';\n    h += '<input type=\"number\" id=\"zsTrees\" class=\"qty-input\" min=\"1\" step=\"1\" data-zl-step=\"10\" data-unit=\"' + c.unit + '\" placeholder=\"0\"><\/div>';\n    h += '<div id=\"zsStremmaRow\" class=\"hidden\"><div class=\"qty-row\">';\n    h += '<div><label class=\"qty-label\" for=\"zsStremma\">Wie viele Stremma?<\/label><input type=\"number\" id=\"zsStremma\" class=\"qty-input\" min=\"0\" step=\"0.1\" data-zl-step=\"1\" data-unit=\"Str.\" placeholder=\"0\"><\/div>';\n    h += '<div><label class=\"qty-label\" for=\"zsDensity\">' + c.unit.charAt(0).toUpperCase() + c.unit.slice(1) + ' pro Stremma<\/label><input type=\"number\" id=\"zsDensity\" class=\"qty-input\" min=\"1\" step=\"1\" data-zl-step=\"' + (c.perStremma > 100 ? 10 : 5) + '\" data-unit=\"\/Str.\" value=\"' + c.perStremma + '\"><\/div>';\n    h += '<\/div><\/div>';\n    h += '<div class=\"qty-row\" style=\"margin-top:.75rem\">';\n    h += '<div><label class=\"qty-label\" for=\"zsLiters\">Liter Spritzbr\u00fche pro ' + c.unit1 + ' (je Durchgang)<\/label><input type=\"number\" id=\"zsLiters\" class=\"qty-input\" min=\"0.1\" step=\"0.1\" data-zl-step=\"' + (1 > c.liters ? 0.1 : 0.5) + '\" data-unit=\"L\" value=\"' + c.liters + '\"><\/div>';\n    h += '<div><label class=\"qty-label\" for=\"zsTank\">Spritztank (Liter) <span style=\"font-weight:400;color:var(--muted)\">\u2013 optional<\/span><\/label><input type=\"number\" id=\"zsTank\" class=\"qty-input\" min=\"0\" step=\"10\" data-zl-step=\"100\" data-unit=\"L\" placeholder=\"0\"><\/div>';\n    h += '<\/div>';\n    if (cropKey === 'vineyard') {\n      h += '<p class=\"sublabel\">\ud83d\udca1 Im Weinberg empfehlen wir etwa <strong>0,4 L pro Rebstock<\/strong> (\u2248 100 L pro Stremma). Spritzen, bis das Laub gleichm\u00e4\u00dfig benetzt ist, ohne zu tropfen.<\/p>';\n    } else {\n      h += '<p class=\"sublabel\">\ud83d\udca1 Spritzen Sie <strong>mindestens 5 L pro Baum<\/strong>, bis das gesamte Blattwerk benetzt ist. Bei sehr gro\u00dfen B\u00e4umen die Literzahl erh\u00f6hen.<\/p>';\n    }\n    qtyBox.innerHTML = h;\n    qtyBox.querySelectorAll('input').forEach(function(inp) {\n      inp.addEventListener('input', updateProgress);\n      inp.addEventListener('change', function(e) {\n        if (e.target.name === 'zsQtyMode') {\n          var st = e.target.value === 'stremma';\n          document.getElementById('zsStremmaRow').classList.toggle('hidden', !st);\n          document.getElementById('zsTreesRow').classList.toggle('hidden', st);\n        }\n        updateProgress();\n      });\n    });\n  }\n  function treesCount() {\n    var mode = getChecked('zsQtyMode');\n    if (mode === 'stremma') { return Math.round(num('zsStremma') * num('zsDensity')); }\n    return Math.round(num('zsTrees'));\n  }\n  \/\/ ===================== STEP 5: ORDER =====================\n  function passesFor(p1sel, adds) {\n    var p1 = [], p2 = [];\n    adds.forEach(function(a) {\n      if (a === 'diat') return;\n      if (inList(p1sel, a)) { p1.push(a); } else { p2.push(a); }\n    });\n    return { p1: p1, p2: p2 };\n  }\n  function passText(base, list, first) {\n    var parts = [];\n    if (first) { parts.push(base === 'zete' ? 'ZeTe' : 'Zeolith'); }\n    else { parts.push('Kieselgur'); }\n    list.forEach(function(a) { parts.push(matLabel[a]); });\n    return parts.join(' + ');\n  }\n  function renderOrder() {\n    var adds = getAdds();\n    var base = getChecked('zsBase') || 'zeolite';\n    var prev = getChecked('zsOrder');\n    var h = '';\n    if (!inList(adds, 'diat')) {\n      var all = passesFor(['em', 'eco'], adds);\n      h += '<div class=\"info-box\"><strong>\u2705 Ein Durchgang<\/strong>Ohne Kieselgur kommt alles <strong>zusammen in denselben Tank<\/strong>: ' + passText(base, all.p1, true) + '.<\/div>';\n      orderBox.innerHTML = h;\n      return;\n    }\n    var seen = {};\n    var opts = [];\n    schemes.forEach(function(sc) {\n      var ps = passesFor(sc.p1, adds);\n      var key = ps.p1.join(',') + '|' + ps.p2.join(',');\n      if (seen[key]) return;\n      seen[key] = true;\n      opts.push(ps);\n    });\n    var letters = ['A', 'B', 'C', 'D'];\n    h += '<div class=\"options\">';\n    opts.forEach(function(ps, i) {\n      var val = String(i);\n      var checked = (prev === null) ? (i === 0) : (prev === val);\n      h += '<label class=\"option\"><input type=\"radio\" name=\"zsOrder\" value=\"' + val + '\"' + (checked ? ' checked' : '') + '>';\n      h += '<span class=\"opt-title\">' + letters[i] + (i === 0 ? ' \u00b7 \u2b50 Empfohlen' : '') + '<\/span>';\n      h += '<span class=\"opt-desc\">\u2460 ' + passText(base, ps.p1, true) + ' \u2192 \u2461 ' + passText(base, ps.p2, false) + '<\/span><\/label>';\n    });\n    h += '<\/div>';\n    h += '<p class=\"sublabel\">Die Reihenfolge gilt f\u00fcr die Spritzungen bei <strong>kleiner und gro\u00dfer Frucht<\/strong>. Vor der Bl\u00fcte und nach der Ernte spritzen Sie in <strong>einem Durchgang<\/strong>, ohne Kieselgur. Durchgang \u2461 wird gespritzt, <strong>sobald \u2460 getrocknet ist<\/strong> (am selben oder n\u00e4chsten Tag). Jeder Durchgang hat eigene Liter pro ' + (crops[getChecked('zsCrop')] ? crops[getChecked('zsCrop')].unit1 : 'Baum') + '.<\/p>';\n    orderBox.innerHTML = h;\n    orderBox.__opts = opts;\n    orderBox.querySelectorAll('input').forEach(function(r) { r.addEventListener('change', updateProgress); });\n    if (prev !== null) {\n      if (!orderBox.querySelector('input:checked')) {\n        var f = orderBox.querySelector('input');\n        if (f) { f.checked = true; }\n      }\n    }\n  }\n  function currentPasses() {\n    var adds = getAdds();\n    if (!inList(adds, 'diat')) {\n      return [passesFor(['em', 'eco'], adds).p1];\n    }\n    var opts = orderBox.__opts || [];\n    var idx = Number(getChecked('zsOrder') || 0);\n    var ps = opts[idx] || opts[0];\n    return [ps.p1, ps.p2];\n  }\n  \/\/ ===================== AUTOMATIC PHASE \u2014 DESCRIPTION =====================\n  function updateAutoDesc() {\n    var cropKey = getChecked('zsCrop');\n    var el = document.getElementById('zsAutoDesc');\n    if (!el) return;\n    if (!crops[cropKey]) { el.textContent = 'Nach dem heutigen Datum'; return; }\n    var sch = buildSchedule(cropKey, 'auto', todayDate());\n    var f = sch[0];\n    el.textContent = 'N\u00e4chste: ' + stageName(cropKey, f.stage) + ' (' + rangeLabel(f.now ? todayDate() : f.start, f.end) + ')';\n  }\n  function stageName(cropKey, st) {\n    if (st === 'post') { if (cropKey === 'vineyard') return 'Nach der Weinlese'; }\n    return stageInfo[st].name;\n  }\n  function todayDate() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); }\n  \/\/ ===================== PROGRESS =====================\n  function qtyValid() {\n    if (!crops[getChecked('zsCrop')]) return false;\n    if (0 >= treesCount()) return false;\n    if (0 >= num('zsLiters')) return false;\n    return true;\n  }\n  function updateProgress() {\n    var crop = getChecked('zsCrop');\n    if (crop === 'other') { return; }\n    var filled = 0;\n    if (crop) filled++;\n    if (qtyValid()) filled++;\n    if (getChecked('zsBase')) filled++;\n    if (getChecked('zsBase')) filled++;   \/\/ step 4: optional\n    if (getChecked('zsBase')) filled++;   \/\/ step 5: always has a default\n    if (getChecked('zsPhase')) { if (getChecked('zsBase')) filled++; }\n    progressBar.style.width = (filled \/ 6 * 100) + '%';\n    var activeIdx = 0;\n    if (crop) activeIdx = 1;\n    if (qtyValid()) activeIdx = 2;\n    if (getChecked('zsBase')) activeIdx = 5;\n    steps.forEach(function(s, i) {\n      var act = (i === activeIdx) || (i === activeIdx - 1);\n      if (activeIdx === 5) { act = (i >= 2); }\n      s.classList.toggle('active', act);\n    });\n    var ok = false;\n    if (crop) { if (qtyValid()) { if (getChecked('zsBase')) { ok = true; } } }\n    calcBtn.disabled = !ok;\n  }\n  \/\/ ===================== \"OTHER CROP\" =====================\n  function updateOtherLinks() {\n    var v = (document.getElementById('zsOtherCrop').value || '').trim();\n    var msg = 'Hallo! Ich h\u00e4tte gern ein Spritzprogramm mit Zeolith f\u00fcr meine Kultur: ' + (v || '[Kultur]');\n    document.getElementById('zsOtherWhatsapp').href = 'https:\/\/wa.me\/306985838343?text=' + encodeURIComponent(msg);\n    document.getElementById('zsOtherEmail').href = 'mailto:info@zeolife.gr?subject=' + encodeURIComponent('Spritzprogramm' + (v ? ' \u2013 ' + v : '')) + '&body=' + encodeURIComponent(msg);\n  }\n  function enterOther() {\n    steps.forEach(function(s) { s.style.display = 'none'; });\n    actionsRow.style.display = 'none';\n    resultBox.classList.remove('show');\n    otherStep.style.display = '';\n    otherStep.classList.add('active');\n    progressBar.style.width = '100%';\n    updateOtherLinks();\n    otherStep.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  }\n  function exitOther() {\n    steps.forEach(function(s) { s.style.display = ''; });\n    actionsRow.style.display = '';\n    otherStep.style.display = 'none';\n  }\n  \/\/ ===================== CALCULATION =====================\n  function calculate(noScroll) {\n    var cropKey = getChecked('zsCrop');\n    var c = crops[cropKey];\n    var base = getChecked('zsBase');\n    var adds = getAdds();\n    var phase = getChecked('zsPhase') || 'auto';\n    var N = treesCount();\n    var Lp = num('zsLiters');\n    var tank = num('zsTank');\n    var W = N * Lp;                       \/\/ litres of water per pass\n    var passes = currentPasses();\n    var today = todayDate();\n    var sched = buildSchedule(cropKey, phase, today);\n    \/\/ Recipes: diatomite goes ONLY into the \"small fruit\" and \"large fruit\" sprays.\n    var hasDiat = inList(adds, 'diat');\n    function mkRecipe(pss) {\n      var out = [];\n      pss.forEach(function(list, i) {\n        var mats = [];\n        if (i === 0) { mats.push(base); } else { mats.push('diat'); }\n        list.forEach(function(a) { mats.push(a); });\n        out.push(mats);\n      });\n      return out;\n    }\n    var recDiat = mkRecipe(passes);\n    var noDiatList = [];\n    adds.forEach(function(a) { if (a !== 'diat') { noDiatList.push(a); } });\n    var recPlain = mkRecipe([noDiatList]);\n    function recipeFor(stage) {\n      if (hasDiat) { if (stage === 'small' || stage === 'large') { return recDiat; } }\n      return recPlain;\n    }\n    \/\/ Year totals (sum of the 4 sprays)\n    var yearTot = {};\n    var sprayCount = {};\n    sched.forEach(function(sx) {\n      var seen = {};\n      recipeFor(sx.stage).forEach(function(mats) {\n        mats.forEach(function(m) {\n          yearTot[m] = (yearTot[m] || 0) + W * RATE[m];\n          if (!seen[m]) { seen[m] = 1; sprayCount[m] = (sprayCount[m] || 0) + 1; }\n        });\n      });\n    });\n    var h = '';\n    \/\/ --- Summary ---\n    h += '<div class=\"summary-grid\">';\n    h += '<div class=\"summary-card\"><div class=\"label\">' + c.icon + ' Kultur<\/div><div class=\"value\">' + fmt(N, 0) + ' ' + c.unit + '<\/div><div class=\"sub\">' + c.name + ' \u00b7 ' + fmt(Lp, 1) + ' L pro ' + c.unit1 + '<\/div><\/div>';\n    if (recDiat.length === 2) {\n      h += '<div class=\"summary-card\"><div class=\"label\">\ud83d\udca7 Wasser pro Spritzung<\/div><div class=\"value\">' + fmt(W, 0) + ' \u2013 ' + fmt(W * 2, 0) + ' L<\/div><div class=\"sub\">' + fmt(W, 0) + ' L in 1 Durchgang \u00b7 ' + fmt(W * 2, 0) + ' L bei kleiner & gro\u00dfer Frucht (2 Durchg\u00e4nge)<\/div><\/div>';\n    } else {\n      h += '<div class=\"summary-card\"><div class=\"label\">\ud83d\udca7 Wasser pro Spritzung<\/div><div class=\"value\">' + fmt(W, 0) + ' L<\/div><div class=\"sub\">1 Durchgang \u00b7 4 Spritzungen im Jahr<\/div><\/div>';\n    }\n    h += '<\/div>';\n    \/\/ --- Calendar ---\n    h += '<h4>\ud83d\udcc5 Ihr Programm \u2013 4 Spritzungen<\/h4>';\n    h += '<div class=\"timeline\" style=\"grid-template-columns:repeat(4,1fr);\">';\n    sched.forEach(function(s, i) {\n      h += '<div class=\"year-card' + (i === 0 ? ' now' : '') + '\">';\n      h += '<div class=\"year-label\">' + (i + 1) + '. ' + stageInfo[s.stage].icon + ' ' + stageName(cropKey, s.stage) + '<\/div>';\n      h += '<div class=\"year-kg\" style=\"font-size:1.05rem\">' + (s.now ? 'Jetzt' : rangeLabel(s.start, s.end)) + '<\/div>';\n      h += '<div class=\"year-sacks\">' + (s.now ? (s.manual ? 'wie angegeben' : 'bis ' + monthsShort[s.end.getMonth()] + ' ' + s.end.getFullYear()) : '') + '<\/div>';\n      h += '<div class=\"year-percent\">' + (i === 0 ? '\u25b6 N\u00c4CHSTE SPRITZUNG' : 'Spritzung ' + (i + 1)) + (recipeFor(s.stage).length === 2 ? ' \u00b7 + Kieselgur' : '') + '<\/div>';\n      h += '<\/div>';\n    });\n    h += '<\/div>';\n    if (sched[0].stage === 'post') {\n      if (!sched[0].now) {\n        h += '<p class=\"sublabel\">\ud83c\udf42 Ihre n\u00e4chste Spritzung ist <strong>' + (cropKey === 'vineyard' ? 'direkt nach der Weinlese' : 'direkt nach der Ernte') + '<\/strong>, solange ' + (cropKey === 'vineyard' ? 'die Rebst\u00f6cke' : 'der Baum') + ' noch Bl\u00e4tter ' + (cropKey === 'vineyard' ? 'haben' : 'hat') + '.<\/p>';\n      }\n    }\n    \/\/ --- Recipes ---\n    function stagesUsing(rec) {\n      var names = [];\n      sched.forEach(function(sx) {\n        if (recipeFor(sx.stage) === rec) {\n          var nm = stageName(cropKey, sx.stage);\n          if (names.indexOf(nm) === -1) { names.push(nm); }\n        }\n      });\n      return names.join(' \u00b7 ');\n    }\n    function renderRecipe(rec) {\n      var out = '';\n      rec.forEach(function(mats, pi) {\n        out += '<table class=\"dose-table\">';\n        out += '<tr><th colspan=\"' + (tank > 0 ? 5 : 4) + '\">' + (rec.length === 2 ? (pi === 0 ? '\u2460 Erster Durchgang' : '\u2461 Zweiter Durchgang \u2013 sobald \u2460 getrocknet ist') : '\u2460 Ein Durchgang') + ' \u00b7 ' + fmt(W, 0) + ' L Wasser<\/th><\/tr>';\n        out += '<tr><th>Material<\/th><th>Verd\u00fcnnung<\/th><th>Pro 100 L<\/th>' + (tank > 0 ? '<th>Pro Tank ' + fmt(tank, 0) + ' L<\/th>' : '') + '<th>Summe Durchgang<\/th><\/tr>';\n        mats.forEach(function(m) {\n          var u = shop[m].unit;\n          out += '<tr><td>' + shop[m].icon + ' ' + matLabel[m] + '<\/td><td>' + matRateTxt[m] + '<\/td><td>' + fmtAmt(100 * RATE[m], u) + '<\/td>';\n          if (tank > 0) { out += '<td>' + fmtAmt(tank * RATE[m], u) + '<\/td>'; }\n          out += '<td><strong>' + fmtAmt(W * RATE[m], u) + '<\/strong><\/td><\/tr>';\n        });\n        out += '<\/table>';\n      });\n      if (tank > 0) {\n        var fills = Math.ceil(W \/ tank);\n        var each = rec.length === 2 ? ' je Durchgang' : '';\n        if (fills === 1) {\n          if (tank > W) { out += '<p class=\"sublabel\">\ud83d\ude9c <strong>Eine F\u00fcllung' + each + '<\/strong> gen\u00fcgt: nur ' + fmt(W, 0) + ' L Wasser mit den Mengen der Spalte \u201eSumme Durchgang\u201c.<\/p>'; }\n          else { out += '<p class=\"sublabel\">\ud83d\ude9c Genau <strong>eine F\u00fcllung<\/strong> Ihres ' + fmt(tank, 0) + '-L-Tanks' + each + '.<\/p>'; }\n        } else {\n          out += '<p class=\"sublabel\">\ud83d\ude9c ' + fmt(W, 0) + ' L = <strong>' + fills + ' F\u00fcllungen<\/strong> Ihres ' + fmt(tank, 0) + '-L-Tanks' + each + (W % tank ? ' (die letzte teilweise \u2013 gleiches Verh\u00e4ltnis beibehalten)' : '') + '.<\/p>';\n        }\n      }\n      return out;\n    }\n    if (hasDiat) {\n      h += '<h4>\ud83e\uddea Rezept: ' + stagesUsing(recPlain) + ' (ohne Kieselgur)<\/h4>';\n      h += renderRecipe(recPlain);\n      h += '<h4>\ud83e\uddea Rezept: ' + stagesUsing(recDiat) + ' (mit Kieselgur)<\/h4>';\n      h += renderRecipe(recDiat);\n    } else {\n      h += '<h4>\ud83e\uddea Spritzrezept (f\u00fcr jede Spritzung gleich)<\/h4>';\n      h += renderRecipe(recPlain);\n    }\n    \/\/ --- Mixing instructions ---\n    h += '<h4>\ud83e\udd63 Mischreihenfolge im Tank<\/h4>';\n    h += '<div class=\"info-box\"><strong>F\u00fcr jeden Durchgang<\/strong><ol style=\"margin:.3rem 0 0 1.1rem;padding:0;line-height:1.7\">';\n    h += '<li>Den Tank zur <strong>H\u00e4lfte mit Wasser<\/strong> f\u00fcllen und das R\u00fchrwerk einschalten.<\/li>';\n    h += '<li>Zuerst ' + (base === 'zete' ? 'das <strong>ZeTe<\/strong>' : 'den <strong>Zeolith 20\u03bc<\/strong>') + ' (bzw. in \u2461 die <strong>Kieselgur<\/strong>) in einem Eimer mit Wasser zu einem glatten Brei anr\u00fchren und in den Tank geben.<\/li>';\n    h += '<li><strong>EcoPlant\u00ae<\/strong> zugeben (falls in diesem Durchgang).<\/li>';\n    h += '<li>Zuletzt die <strong>effektiven Mikroorganismen EM<\/strong> zugeben (falls in diesem Durchgang).<\/li>';\n    h += '<li>Mit Wasser auff\u00fcllen und unter <strong>st\u00e4ndigem R\u00fchren<\/strong> spritzen, bis das gesamte Blattwerk gleichm\u00e4\u00dfig benetzt ist.<\/li>';\n    h += '<\/ol><\/div>';\n    \/\/ --- Per phase ---\n    h += '<h4>\ud83d\uddd3\ufe0f Worauf Sie bei jeder Spritzung achten<\/h4>';\n    var tipsPlain = [];\n    sched.forEach(function(s, i) {\n      var tip = stageInfo[s.stage].tip;\n      if (s.stage === 'post') {\n        if (c.evergreen) { tip = 'Direkt nach der Ernte. Bei immergr\u00fcnen Kulturen wie ' + c.name + ' ist dies eine der wichtigsten Spritzungen: Sie st\u00e4rkt das Blattwerk, das den Baum durch den Winter tr\u00e4gt, und hilft ihm, sich zu erholen.'; }\n        if (cropKey === 'vineyard') { tip = 'Direkt nach der Weinlese, <strong>solange die Rebst\u00f6cke noch Bl\u00e4tter haben<\/strong>. St\u00e4rkt das Laub und hilft den Rebst\u00f6cken, sich vor dem Winter zu erholen.'; }\n      }\n      tipsPlain[i] = tip.replace(\/<[^>]*>\/g, '');\n      var rx = recipeFor(s.stage);\n      tip += '<br><em>Sie spritzen: ' + rx.map(function(mats, pi) { return (rx.length === 2 ? (pi === 0 ? '\u2460 ' : '\u2461 ') : '') + mats.map(function(m) { return matLabel[m]; }).join(' + '); }).join(' \u2192 ') + '<\/em>';\n      h += '<div class=\"info-box\"' + (i === 0 ? ' style=\"background:#eef7e6;border-color:#d6e8c3;\"' : '') + '><strong>' + (i + 1) + '. ' + stageInfo[s.stage].icon + ' ' + stageName(cropKey, s.stage) + ' \u2014 ' + (s.now ? (s.manual ? 'jetzt' : 'jetzt (bis ' + monthsShort[s.end.getMonth()] + ' ' + s.end.getFullYear() + ')') : rangeLabel(s.start, s.end)) + '<\/strong>' + tip + '<\/div>';\n    });\n    \/\/ --- Year totals & packs \u2192 eShop cart ---\n    h += '<h4>\ud83d\uded2 Was Sie f\u00fcr das ganze Jahr brauchen<\/h4>';\n    h += '<div class=\"zl-plist\" id=\"zsPlist\">';\n    var order = [base, 'eco', 'em', 'diat'];\n    order.forEach(function(m) {\n      if (!yearTot[m]) return;\n      var yearNeed = yearTot[m];\n      var p = shop[m];\n      var bp = bestPacks(yearNeed, p.packs);\n      var parts = [];\n      var items = [];\n      var units = 0;\n      bp.counts.forEach(function(cn, i) {\n        if (cn > 0) {\n          parts.push(cn + ' \u00d7 ' + p.packs[i].label);\n          items.push(p.packs[i].id + ':' + cn);\n          units += cn;\n        }\n      });\n      h += '<label class=\"zl-prow\"><input type=\"checkbox\" checked data-zs-mat=\"' + m + '\" data-zs-items=\"' + items.join(',') + '\" data-zs-units=\"' + units + '\">';\n      h += '<span><span class=\"zl-pn\">' + p.icon + ' ' + p.name + '<\/span>';\n      h += '<span class=\"zl-pr\">' + fmtAmt(W * RATE[m], p.unit) + ' \u00d7 ' + sprayCount[m] + ' Spritzungen' + (m === 'diat' ? ' (kleine & gro\u00dfe Frucht)' : '') + ' = ' + fmtAmt(yearNeed, p.unit) + '<\/span><\/span>';\n      h += '<span class=\"zl-pq\">' + parts.join(' + ') + '<\/span><\/label>';\n    });\n    h += '<\/div>';\n    h += '<div class=\"zl-cartbox\"><p>Entfernen Sie das H\u00e4kchen bei allem, was Sie schon haben. Der Rest kommt mit den richtigen Mengen in den Warenkorb von <strong>shop.zeolife.gr<\/strong> (englischsprachiger Shop). Dort sehen Sie Endpreise und Rabatte.<\/p>';\n    h += '<a class=\"cta-btn\" id=\"zsCartBtn\" href=\"' + CART_URL + '\"><span>\ud83d\uded2 In den Warenkorb (<span id=\"zsCartCnt\">0<\/span>) \u2192<\/span><\/a><\/div>';\n    \/\/ --- Caution ---\n    h += '<div class=\"warning\"><strong>\u26a0\ufe0f Achtung<\/strong><ul style=\"margin:.3rem 0 0 1.1rem;padding:0;line-height:1.7\">';\n    h += '<li><strong>Nie in der Vollbl\u00fcte.<\/strong><\/li>';\n    h += '<li>Spritzen Sie <strong>fr\u00fch morgens oder am sp\u00e4ten Nachmittag<\/strong>, nicht bei starkem Wind oder angek\u00fcndigtem Regen.<\/li>';\n    if (inList(adds, 'em')) { h += '<li><strong>EM<\/strong> sind lebende Mikroorganismen: Spritzen Sie die L\u00f6sung am selben Tag, an dem Sie sie ansetzen.<\/li>'; }\n    if (inList(adds, 'diat')) { h += '<li><strong>Kieselgur<\/strong> braucht st\u00e4ndiges R\u00fchren; tragen Sie beim Einf\u00fcllen in den Eimer eine Staubmaske.<\/li>'; }\n    h += '<li>Zum Schluss Tank, Filter und D\u00fcsen <strong>gr\u00fcndlich aussp\u00fclen<\/strong>.<\/li>';\n    h += '<\/ul><\/div>';\n    \/\/ --- Keep the program: email (+ reminders) \u00b7 calendar \u00b7 print ---\n    h += '<div class=\"zl-keep\" id=\"zsKeep\"><h4>\ud83d\udcec Programm aufbewahren<\/h4><p class=\"zl-keep-sub\">W\u00e4hlen Sie, wie Sie es aufbewahren m\u00f6chten. Auch alle drei sind m\u00f6glich.<\/p>';\n    h += '<div class=\"zl-tiles\">';\n    h += '<button type=\"button\" class=\"zl-tile on\" data-zs-tile=\"mail\"><b>\u2709\ufe0f Per E-Mail senden<\/b><span>Auf Wunsch mit Erinnerungen<\/span><\/button>';\n    h += '<button type=\"button\" class=\"zl-tile\" data-zs-tile=\"ics\"><b>\ud83d\udcc5 In den Kalender<\/b><span>.ics-Datei f\u00fcr Handy, Google, Outlook<\/span><\/button>';\n    h += '<button type=\"button\" class=\"zl-tile\" data-zs-tile=\"print\"><b>\ud83d\udda8\ufe0f Drucken<\/b><span>Nur das Programm, auf A4<\/span><\/button>';\n    h += '<\/div>';\n    h += '<form class=\"zl-mail\" id=\"zsMail\" novalidate>';\n    h += '<label class=\"qty-label\" for=\"zsEmail\">Ihre E-Mail<\/label>';\n    h += '<input type=\"email\" id=\"zsEmail\" class=\"qty-input\" placeholder=\"z. B. max@gmail.com\" autocomplete=\"email\" required>';\n    h += '<input type=\"text\" name=\"website\" id=\"zsHp\" class=\"zl-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">';\n    h += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zsRemind\" checked><span><strong>Vor jeder Spritzung per E-Mail erinnern<\/strong> \u00b7 kostenlos, 12 Monate lang<\/span><\/label>';\n    h += '<div class=\"zl-rem\" id=\"zsRemBox\"><div class=\"zl-rem-lead\">Erinnerung senden <select id=\"zsLead\"><option value=\"3\">3 Tage<\/option><option value=\"5\" selected>5 Tage<\/option><option value=\"7\">7 Tage<\/option><\/select> vor jeder Spritzung.<\/div>';\n    h += '<div class=\"zl-dates\"><span class=\"zl-dates-h\">Spritztermine \u2013 \u00e4ndern Sie sie, wenn Sie Ihre Kultur besser kennen:<\/span>';\n    sched.forEach(function(s, i) {\n      h += '<label class=\"zl-date\"><span>' + (i + 1) + '. ' + stageInfo[s.stage].icon + ' ' + stageName(cropKey, s.stage) + (recipeFor(s.stage).length === 2 ? ' <em>+ Kieselgur<\/em>' : '') + '<\/span><input type=\"date\" data-zs-date=\"' + i + '\" value=\"' + isoDate(s.now ? today : s.start) + '\"><\/label>';\n    });\n    h += '<\/div><span class=\"zl-small\">Mit einem Klick in jeder E-Mail abbestellen. Die Termine gelten auch f\u00fcr die Kalenderdatei. Die E-Mails kommen auf Englisch.<\/span><\/div>';\n    h += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zsNews\"><span>Ich m\u00f6chte auch den w\u00f6chentlichen Zeolife-Newsletter (Tipps, Angebote, auf Englisch).<\/span><\/label>';\n    h += '<label class=\"zl-chk\"><input type=\"checkbox\" id=\"zsConsent\"><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\">Datenschutzerkl\u00e4rung<\/a><\/span><\/label>';\n    h += '<div class=\"zl-mail-row\"><button type=\"submit\" class=\"btn\" id=\"zsSend\">\u2709\ufe0f Programm senden<\/button><\/div>';\n    h += '<p class=\"zl-status\" id=\"zsStatus\" role=\"status\" aria-live=\"polite\"><\/p>';\n    h += '<\/form><\/div>';\n    \/\/ --- Zeolite in the soil ---\n    var soilCrop = { olive: 'olive', citrus: 'fruit', fruit: 'fruit', nuts: 'walnut', vineyard: 'vineyard' }[cropKey] || '';\n    h += '<div class=\"zl-soil\"><div class=\"zl-soil-ill\" aria-hidden=\"true\">\ud83c\udf33<\/div><div><strong class=\"zl-soil-h\">\ud83c\udf3e Die Spritzung sch\u00fctzt das Blattwerk. Und der Boden?<\/strong>';\n    h += '<p>Mit Zeolith im Boden halten Sie Wasser und N\u00e4hrstoffe das ganze Jahr an der Wurzel. Sehen Sie, wie viel Ihre <strong>' + fmt(N, 0) + ' ' + c.unit + '<\/strong> brauchen \u2014 der Ratgeber \u00f6ffnet sich mit bereits eingetragener Kultur und Menge.<\/p><\/div>';\n    \/\/ 20\/10\/2026 (proposal D): we also pass the number of trees\/vines (no ampersand in the code).\n    var AMP = String.fromCharCode(38);\n    h += '<a class=\"btn btn-secondary\" href=\"https:\/\/zeolife.gr\/de\/dosierungsratgeber-fuer-zeolith-in-der-landwirtschaft\/' + (soilCrop ? '?crop=' + soilCrop + AMP + 'trees=' + N + AMP + 'src=psekasmos' : '') + '\">F\u00fcr den Boden berechnen \u2192<\/a><\/div>';\n    h += '<p class=\"disclaimer\"><strong>Hinweis:<\/strong> Die Termine sind Richtwerte f\u00fcr Griechenland und h\u00e4ngen von Region, Sorte und Wetter ab. Verd\u00fcnnungen: Zeolith 2 %, ZeTe 15 kg\/500 L, EM 1 %, EcoPlant\u00ae 1 %, Kieselgur 4 % (nur bei kleiner und gro\u00dfer Frucht). Bei Bio-Zertifizierung oder Sonderf\u00e4llen wenden Sie sich an einen Agronomen. Technischer Support Zeolife: +30 2311 29 55 20.<\/p>';\n    resultBody.innerHTML = h;\n    resultBox.classList.add('show');\n    lastPlan = { cropKey: cropKey, sched: sched, recipeFor: recipeFor, W: W, base: base, c: c, N: N, Lp: Lp, tank: tank, tips: tipsPlain, t0: Date.now() };\n    bindKeep();\n    \/\/ 20\/10\/2026 (proposal E): combined yearly program, if the customer also created a soil dosage in this tab.\n    if (window.zlYear) {\n      window.zlYear.save('spray', { crop: cropKey, name: c.name, icon: c.icon, qty: fmt(N, 0) + ' ' + c.unit, payload: buildPayload() });\n      window.zlYear.render(document.getElementById('zsKeep'), 'spray');\n    }\n    calc.querySelectorAll('#zsPlist input').forEach(function(cb) { cb.addEventListener('change', function() { updateCart(); saveState(); }); });\n    var cartBtn = document.getElementById('zsCartBtn');\n    if (cartBtn) { cartBtn.addEventListener('click', function() { updateCart(); saveState(); }); }\n    updateCart();\n    saveState();\n    if (noScroll !== true) { resultBox.scrollIntoView({ behavior: 'smooth', block: 'start' }); }\n  }\n  \/\/ ===================== eSHOP CART & BACK LINK =====================\n  function backUrl() { return window.location.origin + window.location.pathname; }\n  function backQuery() { return 'zl_back=' + encodeURIComponent(backUrl()) + '&zl_lang=' + LANG; }\n  function updateCart() {\n    var btn = document.getElementById('zsCartBtn');\n    if (!btn) return;\n    var items = [];\n    var units = 0;\n    calc.querySelectorAll('#zsPlist input').forEach(function(cb) {\n      if (!cb.checked) return;\n      items.push(cb.getAttribute('data-zs-items'));\n      units += Number(cb.getAttribute('data-zs-units')) || 0;\n    });\n    var cnt = document.getElementById('zsCartCnt');\n    if (cnt) { cnt.textContent = String(units); }\n    if (units === 0) { btn.setAttribute('aria-disabled', 'true'); btn.href = CART_URL; return; }\n    btn.removeAttribute('aria-disabled');\n    btn.href = CART_URL + '?zl_cart=' + items.join(',') + '&' + backQuery();\n  }\n  \/\/ Choices are kept in this tab (sessionStorage), so the guide finds them again after the eShop.\n  var STATE_KEY = 'zsStateDe';\n  function store() { try { return window.sessionStorage; } catch (e) { return null; } }\n  function saveState() {\n    var st = store();\n    if (!st) return;\n    var o = { t: Date.now(), crop: getChecked('zsCrop'), mode: getChecked('zsQtyMode'), v: {}, base: getChecked('zsBase'), adds: getAdds(), order: getChecked('zsOrder'), phase: getChecked('zsPhase'), res: resultBox.classList.contains('show'), off: [], y: window.pageYOffset || 0 };\n    ['zsTrees', 'zsStremma', 'zsDensity', 'zsLiters', 'zsTank'].forEach(function(id) { var el = document.getElementById(id); if (el) { o.v[id] = el.value; } });\n    calc.querySelectorAll('#zsPlist input').forEach(function(cb) { if (!cb.checked) { o.off.push(cb.getAttribute('data-zs-mat')); } });\n    try { st.setItem(STATE_KEY, JSON.stringify(o)); } catch (e) {}\n  }\n  function clearState() { var st = store(); if (st) { try { st.removeItem(STATE_KEY); } catch (e) {} } }\n  function setRadio(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 restoreState() {\n    var st = store();\n    if (!st) return;\n    var o = null;\n    try { o = JSON.parse(st.getItem(STATE_KEY) || 'null'); } catch (e) { o = null; }\n    if (!o) return;\n    if (Date.now() - (o.t || 0) > 6 * 3600 * 1000) { clearState(); return; }\n    if (!crops[o.crop]) return;\n    if (!setRadio('zsCrop', o.crop)) return;\n    renderQty(o.crop);\n    if (setRadio('zsQtyMode', o.mode)) {\n      var stm = o.mode === 'stremma';\n      document.getElementById('zsStremmaRow').classList.toggle('hidden', !stm);\n      document.getElementById('zsTreesRow').classList.toggle('hidden', stm);\n    }\n    for (var id in o.v) { var el = document.getElementById(id); if (el) { el.value = o.v[id]; } }\n    setRadio('zsBase', o.base);\n    calc.querySelectorAll('input[name=\"zsAdd\"]').forEach(function(cb) { cb.checked = inList(o.adds || [], cb.value); });\n    renderOrder();\n    setRadio('zsOrder', o.order);\n    setRadio('zsPhase', o.phase || 'auto');\n    updateAutoDesc();\n    updateProgress();\n    if (o.res) {\n      if (!calcBtn.disabled) {\n        calculate(true);\n        calc.querySelectorAll('#zsPlist input').forEach(function(cb) { if (inList(o.off || [], cb.getAttribute('data-zs-mat'))) { cb.checked = false; } });\n        updateCart();\n      }\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  \/\/ ===================== KEEP THE PROGRAM: email & reminders (shop.zeolife.gr) =====================\n  var PLAN_API = 'https:\/\/shop.zeolife.gr\/wp-json\/zt\/v1\/spray-plan';\n  function isoDate(d) { return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()); }\n  function chosenDate(i) {\n    var el = calc.querySelector('input[data-zs-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 packsFor(m, need) {\n    var p = shop[m];\n    var bp = bestPacks(need, p.packs);\n    var parts = [], items = [];\n    bp.counts.forEach(function(cn, i) { if (cn > 0) { parts.push(cn + ' \u00d7 ' + p.packs[i].label); items.push(p.packs[i].id + ':' + cn); } });\n    return { parts: parts, items: items };\n  }\n  function buildPayload() {\n    var P = lastPlan, c = P.c;\n    var stages = [];\n    var prev = '';\n    P.sched.forEach(function(s, i) {\n      var rec = P.recipeFor(s.stage);\n      var rows = [], need = {};\n      rec.forEach(function(mats, pi) {\n        mats.forEach(function(m) {\n          rows.push([pi + 1, shop[m].icon + ' ' + matLabel[m], matRateTxt[m], P.tank > 0 ? fmtAmt(P.tank * RATE[m], shop[m].unit) : '', fmtAmt(P.W * RATE[m], shop[m].unit)]);\n          need[m] = (need[m] || 0) + P.W * RATE[m];\n        });\n      });\n      var items = [];\n      for (var m in need) { items = items.concat(packsFor(m, need[m]).items); }\n      var d = chosenDate(i) || (s.now ? todayDate() : s.start);\n      var iso = isoDate(d);\n      if (prev) { if (prev > iso) { iso = prev; } }\n      prev = iso;\n      stages.push({ key: s.stage, name: stageName(P.cropKey, s.stage), icon: stageInfo[s.stage].icon, win: s.now ? (s.manual ? 'Jetzt' : 'Jetzt, bis ' + monthsShort[s.end.getMonth()] + ' ' + s.end.getFullYear()) : rangeLabel(s.start, s.end), tip: P.tips[i] || '', date: iso, rows: rows, items: items.join(',') });\n    });\n    var year = [], yearl = [];\n    calc.querySelectorAll('#zsPlist input').forEach(function(cb) {\n      if (!cb.checked) return;\n      year.push(cb.getAttribute('data-zs-items'));\n      var lab = cb.parentNode.querySelector('.zl-pn'), q = cb.parentNode.querySelector('.zl-pq');\n      yearl.push((lab ? lab.textContent : '') + ': ' + (q ? q.textContent : ''));\n    });\n    var two = false;\n    P.sched.forEach(function(s) { if (P.recipeFor(s.stage).length === 2) { two = true; } });\n    return {\n      title: c.name, crop: P.cropKey, icon: c.icon, qty: fmt(P.N, 0) + ' ' + c.unit,\n      water: fmt(P.W, 0) + ' L pro Durchgang (' + fmt(P.Lp, 1) + ' L pro ' + c.unit1 + ')' + (two ? ' \u00b7 2 Durchg\u00e4nge bei den Spritzungen mit Kieselgur' : ''),\n      tank: P.tank > 0 ? fmt(P.tank, 0) + ' L' : '',\n      guide: backUrl(), year: year.join(','), yearl: yearl, stages: stages\n    };\n  }\n  function setStatus(msg, kind) {\n    var st = document.getElementById('zsStatus');\n    if (!st) return;\n    st.textContent = msg;\n    st.className = 'zl-status' + (kind ? ' is-' + kind : '');\n  }\n  function sendPlan(e) {\n    e.preventDefault();\n    var em = document.getElementById('zsEmail');\n    var email = (em.value || '').trim();\n    if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { setStatus('Bitte geben Sie eine g\u00fcltige E-Mail ein.', 'err'); em.focus(); return; }\n    if (!document.getElementById('zsConsent').checked) { setStatus('Bitte best\u00e4tigen Sie die Einwilligung, damit wir Ihnen das Programm senden k\u00f6nnen.', 'err'); return; }\n    var btn = document.getElementById('zsSend');\n    btn.disabled = true;\n    setStatus('Wird gesendet\u2026', '');\n    var body = new URLSearchParams();\n    body.append('email', email);\n    body.append('lang', LANG); body.append('ui', 'de');\n    body.append('consent', '1');\n    body.append('remind', document.getElementById('zsRemind').checked ? '1' : '');\n    body.append('lead', document.getElementById('zsLead').value);\n    body.append('newsletter', document.getElementById('zsNews').checked ? '1' : '');\n    body.append('website', document.getElementById('zsHp').value);\n    body.append('tm', String(Date.now() - (lastPlan.t0 || Date.now())));\n    body.append('plan', JSON.stringify(buildPayload()));\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) { setStatus('Gesendet! Bitte pr\u00fcfen Sie Ihren Posteingang (und den Spam-Ordner).', 'ok'); } else { setStatus(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; setStatus('Keine Verbindung. Bitte versuchen Sie es gleich noch einmal.', 'err'); });\n  }\n  function bindKeep() {\n    calc.querySelectorAll('[data-zs-tile]').forEach(function(t) {\n      t.addEventListener('click', function() {\n        var k = t.getAttribute('data-zs-tile');\n        if (k === 'ics') { downloadIcs(); return; }\n        if (k === 'print') { doPrint(); return; }\n        var on = !t.classList.contains('on');\n        t.classList.toggle('on', on);\n        document.getElementById('zsMail').style.display = on ? '' : 'none';\n      });\n    });\n    var rem = document.getElementById('zsRemind');\n    if (rem) { rem.addEventListener('change', function() { document.getElementById('zsRemBox').style.display = rem.checked ? '' : 'none'; }); }\n    calc.querySelectorAll('input[data-zs-date]').forEach(function(inp) {\n      inp.addEventListener('change', function() {\n        var all = calc.querySelectorAll('input[data-zs-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('zsMail');\n    if (f) { f.addEventListener('submit', sendPlan); }\n  }\n  \/\/ ===================== CALENDAR .ics =====================\n  function pad(n) { return (n > 9 ? '' : '0') + n; }\n  function icsDate(d) { return d.getFullYear() + pad(d.getMonth() + 1) + pad(d.getDate()); }\n  function icsEsc(s) { return String(s).replace(\/\\\\\/g, '\\\\\\\\').replace(\/,\/g, '\\\\,').replace(\/;\/g, '\\\\;').replace(\/\\n\/g, '\\\\n'); }\n  function downloadIcs() {\n    if (!lastPlan) return;\n    var c = crops[lastPlan.cropKey];\n    var lines = ['BEGIN:VCALENDAR', 'VERSION:2.0', 'PRODID:-\/\/Zeolife\/\/Spray Program\/\/DE', 'CALSCALE:GREGORIAN'];\n    var stamp = new Date();\n    function recipeTxt(rec) {\n      return rec.map(function(mats, i) {\n        return (rec.length === 2 ? (i === 0 ? '\u2460 ' : '\u2461 ') : '') + mats.map(function(m) { return matLabel[m] + ' ' + fmtAmt(lastPlan.W * RATE[m], shop[m].unit); }).join(' + ') + ' auf ' + fmt(lastPlan.W, 0) + ' L Wasser';\n      }).join('\\n');\n    }\n    lastPlan.sched.forEach(function(s, i) {\n      var d = chosenDate(i) || (s.now ? todayDate() : s.start);\n      var end = new Date(d.getTime() + 86400000);\n      lines.push('BEGIN:VEVENT');\n      lines.push('UID:zeolife-spray-' + lastPlan.cropKey + '-' + 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('\ud83d\udca8 Spritzung ' + (i + 1) + '\/4 \u2014 ' + stageName(lastPlan.cropKey, s.stage) + ' (' + c.name + ')'));\n      lines.push('DESCRIPTION:' + icsEsc('Zeitraum: ' + (s.manual ? 'jetzt' : rangeLabel(s.start, s.end)) + '\\n' + recipeTxt(lastPlan.recipeFor(s.stage)) + '\\nRatgeber: https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/'));\n      lines.push('BEGIN:VALARM');\n      lines.push('ACTION:DISPLAY');\n      lines.push('DESCRIPTION:' + icsEsc('Spritzung mit Zeolith \u2013 ' + stageName(lastPlan.cropKey, s.stage)));\n      lines.push('TRIGGER:-P2D');\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-spritzprogramm.ics';\n    document.body.appendChild(a);\n    a.click();\n    setTimeout(function() { URL.revokeObjectURL(a.href); a.parentNode.removeChild(a); }, 1000);\n  }\n  \/\/ ===================== EVENTS =====================\n  calc.querySelectorAll('input[name=\"zsCrop\"]').forEach(function(r) {\n    r.addEventListener('change', function() {\n      if (r.value === 'other') { enterOther(); return; }\n      exitOther();\n      renderQty(r.value);\n      renderOrder();\n      updateAutoDesc();\n      updateProgress();\n    });\n  });\n  calc.querySelectorAll('input[name=\"zsBase\"], input[name=\"zsAdd\"]').forEach(function(r) {\n    r.addEventListener('change', function() { renderOrder(); updateProgress(); });\n  });\n  calc.querySelectorAll('input[name=\"zsPhase\"]').forEach(function(r) { r.addEventListener('change', updateProgress); });\n  var oc = document.getElementById('zsOtherCrop');\n  if (oc) { oc.addEventListener('input', updateOtherLinks); }\n  document.getElementById('zsOtherBack').addEventListener('click', function() {\n    var o = calc.querySelector('input[name=\"zsCrop\"][value=\"other\"]');\n    if (o) { o.checked = false; }\n    exitOther();\n    updateProgress();\n    steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n  calcBtn.addEventListener('click', function() { calculate(); });\n  resetBtn.addEventListener('click', function() {\n    calc.querySelectorAll('input[type=\"radio\"]').forEach(function(r) { r.checked = false; });\n    var au = calc.querySelector('input[name=\"zsPhase\"][value=\"auto\"]'); if (au) au.checked = true;\n    calc.querySelectorAll('input[name=\"zsAdd\"]').forEach(function(r) { r.checked = true; });\n    qtyBox.innerHTML = '<p style=\"color:var(--muted);font-style:italic;\">W\u00e4hlen Sie zuerst in Schritt 1 eine Kultur.<\/p>';\n    orderBox.innerHTML = '';\n    exitOther();\n    resultBox.classList.remove('show');\n    lastPlan = null;\n    clearState();\n    updateAutoDesc();\n    updateProgress();\n    steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n  function doPrint() {\n    if (!resultBox.classList.contains('show')) { return; }\n    var d = document.getElementById('zsPrintDate');\n    if (d) { d.textContent = new Date().toLocaleDateString('de-DE', { day: '2-digit', month: 'long', year: 'numeric' }); }\n    window.print();\n  }\n  \/\/ ===================== STICKY PROGRESS BAR =====================\n  var progressEl = calc.querySelector('.progress');\n  var progressSpacer = document.getElementById('zsProgressSpacer');\n  var progFlowHeight = 0;\n  function zsMeasure() {\n    if (!progressEl) return;\n    var mb = parseFloat(window.getComputedStyle(progressEl).marginBottom) || 0;\n    progFlowHeight = progressEl.offsetHeight + mb;\n  }\n  function zsFixedTopBottom(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;\n    if (0 >= r.bottom) return 0;\n    return r.bottom;\n  }\n  function zsTopOffset() {\n    var offset = 0;\n    var ab = zsFixedTopBottom(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 = zsFixedTopBottom(heads[i]);\n      if (hb > offset) { offset = hb; }\n    }\n    return offset;\n  }\n  var zsPinned = false;\n  function zsUpdateSticky() {\n    if (!progressEl) return;\n    var offset = zsTopOffset();\n    var rect = calc.getBoundingClientRect();\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      if (progressSpacer) progressSpacer.style.height = progFlowHeight + 'px';\n      zsPinned = true;\n    } else if (zsPinned) {\n      var s2 = progressEl.style;\n      s2.position = ''; s2.top = ''; s2.left = ''; s2.width = ''; s2.zIndex = '';\n      if (progressSpacer) progressSpacer.style.height = '0px';\n      zsPinned = false;\n    }\n  }\n  zsMeasure();\n  window.addEventListener('load', function() { zsMeasure(); zsUpdateSticky(); });\n  window.addEventListener('scroll', zsUpdateSticky, { passive: true });\n  window.addEventListener('resize', function() { zsMeasure(); zsUpdateSticky(); });\n  zsUpdateSticky();\n  calc.querySelectorAll('a[data-zs-more]').forEach(function(a) {\n    a.addEventListener('click', function(e) {\n      e.stopPropagation();\n      saveState();\n      a.href = a.getAttribute('data-zs-more') + '?' + backQuery();\n    });\n  });\n  window.addEventListener('pagehide', saveState);\n  updateAutoDesc();\n  updateProgress();\n  \/\/ 20\/10\/2026 (proposal D): opened from the incorporation guide \u2192 ?crop=olive + trees=100 (or stremma=5). Then we do not restore old choices.\n  function prefillFromUrl() {\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 (!crops[ck]) return false;\n    if (!setRadio('zsCrop', ck)) return false;\n    clearState();\n    exitOther();\n    renderQty(ck);\n    renderOrder();\n    var trees = Math.round(Number(q.get('trees') || 0));\n    var str = Number(String(q.get('stremma') || '0').replace(',', '.'));\n    var said = '';\n    if (trees > 0) {\n      document.getElementById('zsTrees').value = String(trees);\n      said = fmt(trees, 0) + ' ' + crops[ck].unit;\n    } else if (str > 0) {\n      setRadio('zsQtyMode', 'stremma');\n      document.getElementById('zsStremmaRow').classList.remove('hidden');\n      document.getElementById('zsTreesRow').classList.add('hidden');\n      document.getElementById('zsStremma').value = String(str);\n      said = fmt(str, 1) + ' Stremma';\n    }\n    if (q.get('src') === 'edafos') {\n      var note = document.createElement('div');\n      note.className = 'info-box';\n      note.innerHTML = '\u2705 Aus dem Ratgeber f\u00fcr die Bodenanwendung: <strong>' + crops[ck].name + (said ? ' \u00b7 ' + said : '') + '<\/strong>. W\u00e4hlen Sie die Spritzbasis.';\n      qtyBox.insertBefore(note, qtyBox.firstChild);\n    }\n    updateAutoDesc();\n    updateProgress();\n    var go = function() { if (steps[2]) { steps[2].scrollIntoView({ behavior: 'smooth', block: 'start' }); } };\n    if (document.readyState === 'complete') { setTimeout(go, 150); } else { window.addEventListener('load', function() { setTimeout(go, 150); }); }\n    return true;\n  }\n  if (!prefillFromUrl()) { restoreState(); }\n})();\n<\/script>\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<!-- ==== ZL STEPPER: \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u2212 \/ + \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1, \u03c7\u03c9\u03c1\u03af\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c4\u03b9\u03bc\u03ae\u03c2 \u03bc\u03b5 \u03c4\u03b7 \u03c1\u03bf\u03b4\u03ad\u03bb\u03b1 \u03c4\u03bf\u03c5 \u03c0\u03bf\u03bd\u03c4\u03b9\u03ba\u03b9\u03bf\u03cd ==== -->\n<script>\n(function () {\n  if (window.zlStepperInit) { return; }\n  window.zlStepperInit = 1;\n  var EN = String(document.documentElement.lang || '').indexOf('en') === 0;\n  var DE = String(document.documentElement.lang || '').indexOf('de') === 0;\n  function toNum(v) { var n = parseFloat(String(v === null ? '' : v).replace(',', '.')); return isNaN(n) ? null : n; }\n  function decs(n) { var p = String(n).split('.'); return p[1] ? p[1].length : 0; }\n  function fire(el) {\n    ['input', 'change'].forEach(function (t) {\n      var ev;\n      try { ev = new Event(t, { bubbles: true }); } catch (x) { ev = document.createEvent('Event'); ev.initEvent(t, true, true); }\n      el.dispatchEvent(ev);\n    });\n  }\n  function bump(inp, dir) {\n    if (inp.disabled) { return; }\n    if (inp.readOnly) { return; }\n    var st = toNum(inp.getAttribute('data-zl-step'));\n    if (!st) { st = toNum(inp.step); }\n    if (!st) { st = 1; }\n    var mn = toNum(inp.getAttribute('min'));\n    var mx = toNum(inp.getAttribute('max'));\n    var cur = toNum(inp.value);\n    var v;\n    if (cur === null) {\n      v = dir > 0 ? st : 0;\n      if (mn !== null) { v = Math.max(v, mn); }\n    } else {\n      var k = cur \/ st;\n      var kr = Math.round(k);\n      if (Math.abs(k - kr) > 1e-9) { k = dir > 0 ? Math.floor(k) : Math.ceil(k); } else { k = kr; }\n      v = (k + dir) * st;\n    }\n    if (mn !== null) { v = Math.max(v, mn); }\n    if (mx !== null) { v = Math.min(v, mx); }\n    v = parseFloat(v.toFixed(Math.min(6, decs(st))));\n    inp.value = String(v);\n    fire(inp);\n  }\n  function wrap(inp) {\n    if (inp.getAttribute('data-zl-stepper')) { return; }\n    if (inp.type !== 'number') { return; }\n    inp.setAttribute('data-zl-stepper', '1');\n    var st = toNum(inp.getAttribute('data-zl-step')) || toNum(inp.step) || 1;\n    if (!inp.getAttribute('inputmode')) { inp.setAttribute('inputmode', decs(st) ? 'decimal' : 'numeric'); }\n    var box = document.createElement('span');\n    box.className = 'zl-step';\n    var minus = document.createElement('button');\n    minus.type = 'button'; minus.className = 'zl-step-btn'; minus.textContent = '\u2212';\n    minus.setAttribute('aria-label', DE ? 'Weniger' : (EN ? 'Decrease' : '\u039b\u03b9\u03b3\u03cc\u03c4\u03b5\u03c1\u03bf'));\n    var plus = document.createElement('button');\n    plus.type = 'button'; plus.className = 'zl-step-btn'; plus.textContent = '+';\n    plus.setAttribute('aria-label', DE ? 'Mehr' : (EN ? 'Increase' : '\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03bf'));\n    inp.parentNode.insertBefore(box, inp);\n    box.appendChild(minus);\n    box.appendChild(inp);\n    var ph = inp.getAttribute('placeholder') || '';\n    if (ph.length > 8) { var w = Math.min(ph.length + 2, 22) + 'ch'; inp.style.setProperty('width', w, 'important'); inp.style.setProperty('flex-basis', w, 'important'); }\n    var u = inp.getAttribute('data-unit');\n    if (u) { var us = document.createElement('span'); us.className = 'zl-step-unit'; us.textContent = u; box.appendChild(us); }\n    box.appendChild(plus);\n    minus.addEventListener('click', function () { bump(inp, -1); });\n    plus.addEventListener('click', function () { bump(inp, 1); });\n    inp.addEventListener('wheel', function () { if (document.activeElement === inp) { inp.blur(); } }, { passive: true });\n  }\n  function scan(root) {\n    var list = root.querySelectorAll('input[type=\"number\"]');\n    for (var i = 0; i !== list.length; i++) { wrap(list[i]); }\n  }\n  function init() {\n    var roots = document.querySelectorAll('.zlcalc');\n    for (var i = 0; i !== roots.length; i++) {\n      (function (r) {\n        scan(r);\n        if (window.MutationObserver) { new MutationObserver(function () { scan(r); }).observe(r, { childList: true, subtree: true }); }\n      })(roots[i]);\n    }\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udca8 Spritzprogramm-Ratgeber mit Zeolith Erstellen Sie Ihr Jahresprogramm mit 4 Blattspritzungen mit 20-Mikron-Zeolith oder ZeTe, effektiven Mikroorganismen EM, EcoPlant\u00ae und Kieselgur. Der Ratgeber berechnet die Mengen pro Spritzung, pro Tank und f\u00fcr das ganze Jahr und beginnt das Programm mit Ihrer n\u00e4chsten Spritzung, ausgehend vom heutigen Datum. \ud83d\udccb Ratgeber in 6 Schritten 4 Spritzungen \/&#8230;<\/p>\n","protected":false},"author":7,"featured_media":20783,"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":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-20779","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>Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith &amp; Industrieminerale \u2013 Anwendungen &amp; Informationen | Zeolife.gr<\/title>\n<meta name=\"description\" content=\"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith &amp; Industrieminerale \u2013 Anwendungen &amp; Informationen | Zeolife.gr\" \/>\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\/spritzprogramm-zeolith-ratgeber\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith &amp; Industrieminerale \u2013 Anwendungen &amp; Informationen | Zeolife.gr\" \/>\n<meta property=\"og:description\" content=\"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith &amp; Industrieminerale \u2013 Anwendungen &amp; Informationen | Zeolife.gr\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/\" \/>\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:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zeolife.gr\/wp-content\/uploads\/2020\/05\/logo-square-color.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\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\\\/spritzprogramm-zeolith-ratgeber\\\/\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/\",\"name\":\"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/logo-square-color.jpg\",\"datePublished\":\"2026-10-20T16:07:45+00:00\",\"dateModified\":\"2026-10-20T18:01:07+00:00\",\"description\":\"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/#primaryimage\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/logo-square-color.jpg\",\"contentUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/logo-square-color.jpg\",\"width\":1200,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/spritzprogramm-zeolith-ratgeber\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zeolife.gr\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spritzprogramm mit Zeolith \u2013 Ratgeber\"}]},{\"@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":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","description":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","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\/spritzprogramm-zeolith-ratgeber\/","og_locale":"de_DE","og_type":"article","og_title":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","og_description":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","og_url":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/","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:07+00:00","og_image":[{"width":1200,"height":1200,"url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2020\/05\/logo-square-color.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\/spritzprogramm-zeolith-ratgeber\/","url":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/","name":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","isPartOf":{"@id":"https:\/\/zeolife.gr\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/#primaryimage"},"image":{"@id":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/#primaryimage"},"thumbnailUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2020\/05\/logo-square-color.jpg","datePublished":"2026-10-20T16:07:45+00:00","dateModified":"2026-10-20T18:01:07+00:00","description":"Spritzprogramm mit Zeolith \u2013 Ratgeber - Griechischer Zeolith & Industrieminerale \u2013 Anwendungen & Informationen | Zeolife.gr","breadcrumb":{"@id":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/#primaryimage","url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2020\/05\/logo-square-color.jpg","contentUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2020\/05\/logo-square-color.jpg","width":1200,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/zeolife.gr\/de\/spritzprogramm-zeolith-ratgeber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zeolife.gr\/de\/"},{"@type":"ListItem","position":2,"name":"Spritzprogramm mit Zeolith \u2013 Ratgeber"}]},{"@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\/2020\/05\/logo-square-color.jpg",1200,1200,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\/20779","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=20779"}],"version-history":[{"count":3,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages\/20779\/revisions"}],"predecessor-version":[{"id":20794,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/pages\/20779\/revisions\/20794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/media\/20783"}],"wp:attachment":[{"href":"https:\/\/zeolife.gr\/de\/wp-json\/wp\/v2\/media?parent=20779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}