{"id":17926,"date":"2026-06-09T18:18:51","date_gmt":"2026-06-09T15:18:51","guid":{"rendered":"https:\/\/zeolife.gr\/?page_id=17926"},"modified":"2026-10-04T13:19:40","modified_gmt":"2026-10-04T10:19:40","slug":"zeolite-agriculture-dosage-calculator","status":"publish","type":"page","link":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/","title":{"rendered":"Zeolite Agricultural Dosage Calculator"},"content":{"rendered":"\n<!-- ==========================================================\n     Zeolite Dosage Guide for Agriculture  (CLEAN) \u2014 ENGLISH\n     Path: \/en\/zeolite-agriculture-dosage-calculator\/\n     ----------------------------------------------------------\n     NO <style>\/<link> (AMP safe) \u2014 styling comes from the\n     Customizer, section \u00a716 .zlcalc (shared by all guides).\n     JS stays here, in an IIFE, as defined by Web Style 2026.\n     Root hook for the JS: id=\"zaCalc\".\n     04\/10\/2026: light\/medium soil \u2192 fine gravel (never powder).\n     ========================================================== -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"WebApplication\",\n      \"name\": \"Zeolite Dosage Guide for Agriculture (Online Calculator)\",\n      \"alternateName\": \"Zeolite Dosage Calculator for Agriculture\",\n      \"url\": \"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/\",\n      \"description\": \"Interactive zeolite dosage guide for agricultural use (online calculator): olive, vineyard, walnut, fruit trees, pistachio trees, cereals, watermelons\/melons, alfalfa, aromatic herbs (oregano, thyme), lawn \/ turf, vegetable garden, ornamentals. Supports 3 brands (Greek Thracian, IMERYS, ZeoGravel\u00ae ZEOCEM) and 3 soil types.\",\n      \"applicationCategory\": \"AgricultureApplication\",\n      \"operatingSystem\": \"Any (web)\",\n      \"inLanguage\": \"en\",\n      \"isAccessibleForFree\": true,\n      \"audience\": {\n        \"@type\": \"Audience\",\n        \"audienceType\": \"Farmers, Agronomists, Agricultural Cooperatives\"\n      },\n      \"publisher\": { \"@type\": \"Organization\", \"name\": \"Zeolife\", \"url\": \"https:\/\/zeolife.gr\/\" }\n    },\n    {\n      \"@type\": \"HowTo\",\n      \"name\": \"How to calculate the right zeolite dose for your agricultural application\",\n      \"description\": \"Guide for calculating zeolite dosage by crop, soil type and product brand.\",\n      \"step\": [\n        { \"@type\": \"HowToStep\", \"name\": \"Choose your crop\", \"text\": \"Pick from 15 categories: olive, vineyard, walnut, fruit trees, pistachio trees, cereals, watermelons\/melons, alfalfa, aromatic herbs (oregano, thyme), lawn \/ turf, vegetable garden, ornamentals, seedling production, cacti, palm trees. If your crop is not listed, ask us for a personalised recommendation.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Enter the quantity\", \"text\": \"Enter the number of trees\/vines\/plants or the area in stremmata (1 stremma = 1,000 m\u00b2). For trees and vines, choose the planting phase. For lawn and vegetable gardens enter square metres (m\u00b2).\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Choose your soil type\", \"text\": \"Light (sandy), Medium (loamy) or Heavy (clay). This determines the zeolite grain size.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Choose a brand\", \"text\": \"Greek Thracian, IMERYS, ZeoGravel\u00ae (ZEOCEM) or let us recommend one.\" },\n        { \"@type\": \"HowToStep\", \"name\": \"Application strategy\", \"text\": \"First year (40%), full 3-year programme, or maintenance. For perennial crops such as lawn \/ turf, application is one-off.\" }\n      ]\n    }\n  ]\n}\n<\/script>\n\n<div class=\"zl zlcalc\" id=\"zaCalc\">\n<div class=\"progress\" aria-hidden=\"true\"><div class=\"progress-bar\" id=\"zaProgress\"><\/div><\/div>\n<div id=\"zaProgressSpacer\" aria-hidden=\"true\" style=\"height:0\"><\/div>\n<div class=\"intro\">\n  <h2>\ud83c\udf3e Zeolite Dosage Guide for Agricultural Use<\/h2>\n  <p>Give us 5 pieces of information and we&#8217;ll recommend the <strong>right product<\/strong> from our 3 ranges (Greek Thracian, IMERYS, ZeoGravel\u00ae ZEOCEM) with <strong>exact dosage<\/strong>, a 3-year programme and automatic discount calculation.<\/p>\n  <div class=\"badges\">\n    <span class=\"badge\">\ud83d\udccb 5-step guide<\/span>\n    <span class=\"badge\">15 crops<\/span>\n    <span class=\"badge\">3 brands \u00d7 9 products<\/span>\n    <span class=\"badge\">3-year programme<\/span>\n    <span class=\"badge\">Auto-discount up to 40%<\/span>\n  <\/div>\n<\/div>\n<!-- STEP 1: CROP -->\n<div class=\"step active\" data-step=\"1\">\n  <h3><span class=\"step-num\">1<\/span>Choose your crop<\/h3>\n  <div class=\"options cols-3\">\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"olive\">\n      <span class=\"opt-title\">\ud83e\uded2 Olive trees<\/span>\n      <span class=\"opt-desc\">8-24 kg\/tree<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"walnut\">\n      <span class=\"opt-title\">\ud83e\udd5c Walnut trees<\/span>\n      <span class=\"opt-desc\">8-24 kg\/tree<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"fruit\">\n      <span class=\"opt-title\">\ud83c\udf4e Fruit trees<\/span>\n      <span class=\"opt-desc\">5-15 kg\/tree<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"pistachio\">\n      <span class=\"opt-title\">\ud83c\udf30 Pistachio trees<\/span>\n      <span class=\"opt-desc\">5-15 kg\/tree<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"vineyard\">\n      <span class=\"opt-title\">\ud83c\udf47 Vineyard<\/span>\n      <span class=\"opt-desc\">0.4-1.2 kg\/vine<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"palm\">\n      <span class=\"opt-title\">\ud83c\udf34 Palm trees<\/span>\n      <span class=\"opt-desc\">up to 24 kg\/tree<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"cereals\">\n      <span class=\"opt-title\">\ud83c\udf3e Cereals \/ Maize<\/span>\n      <span class=\"opt-desc\">up to 300 kg\/stremma<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"melons\">\n      <span class=\"opt-title\">\ud83c\udf49 Watermelons \/ Melons<\/span>\n      <span class=\"opt-desc\">up to 450 kg\/stremma<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"alfalfa\">\n      <span class=\"opt-title\">\ud83c\udf40 Alfalfa (lucerne)<\/span>\n      <span class=\"opt-desc\">up to 150 kg\/stremma<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"herbs\">\n      <span class=\"opt-title\">\ud83c\udf3f Aromatic herbs (oregano, thyme)<\/span>\n      <span class=\"opt-desc\">up to 300 kg\/stremma<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"lawn\">\n      <span class=\"opt-title\">\ud83c\udf3f Lawn \u2013 Turf<\/span>\n      <span class=\"opt-desc\">10 or 30 kg per 100 m\u00b2 \u2014 one-off<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"vegetable\">\n      <span class=\"opt-title\">\ud83e\udd6c Vegetable garden<\/span>\n      <span class=\"opt-desc\">0.5 kg\/m\u00b2 (lifetime)<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"ornamentals\">\n      <span class=\"opt-title\">\ud83c\udf39 Ornamentals<\/span>\n      <span class=\"opt-desc\">Pot or garden<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"seedling\">\n      <span class=\"opt-title\">\ud83c\udf31 Seedling production<\/span>\n      <span class=\"opt-desc\">20% by soil weight<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"succulents\">\n      <span class=\"opt-title\">\ud83c\udf35 Cacti \/ Succulents<\/span>\n      <span class=\"opt-desc\">20% by soil weight<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"crop\" value=\"other\">\n      <span class=\"opt-title\">\u2795 Other crop<\/span>\n      <span class=\"opt-desc\">Not listed? Ask us<\/span>\n    <\/label>\n  <\/div>\n<\/div>\n<!-- STEP 2: QUANTITY (dynamic) -->\n<div class=\"step\" data-step=\"2\">\n  <h3><span class=\"step-num\">2<\/span>Quantity<\/h3>\n  <div id=\"zaQtyContainer\">\n    <p style=\"color:var(--za-muted);font-style:italic;\">First choose a crop in Step 1.<\/p>\n  <\/div>\n<\/div>\n<!-- STEP 3: SOIL -->\n<div class=\"step\" data-step=\"3\">\n  <h3><span class=\"step-num\">3<\/span>Soil type<\/h3>\n  <div id=\"zaSoilOptions\">\n    <div class=\"options cols-3\">\n      <label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"light\">\n        <span class=\"opt-title\">\ud83d\udfe1 Light<\/span>\n        <span class=\"opt-desc\">Sandy, loose \u00b7 fine gravel 1\u20132.5 mm<\/span>\n      <\/label>\n      <label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"medium\">\n        <span class=\"opt-title\">\ud83d\udfe0 Medium<\/span>\n        <span class=\"opt-desc\">Loamy, balanced \u00b7 fine gravel 1\u20132.5 mm<\/span>\n      <\/label>\n      <label class=\"option\"><input type=\"radio\" name=\"soil\" value=\"heavy\">\n        <span class=\"opt-title\">\ud83d\udfe4 Heavy<\/span>\n        <span class=\"opt-desc\">Clay, compacted \u00b7 gravel 2.5\u20135 mm<\/span>\n      <\/label>\n    <\/div>\n    <p class=\"sublabel\">\ud83d\udca1 <strong>Not sure?<\/strong> Take a little moist soil in your palm: if it crumbles easily \u2192 light, if it forms a ball \u2192 medium, if it turns into clay \u2192 heavy.<\/p>\n  <\/div>\n  <div class=\"info-box hidden\" id=\"zaSoilNote\">\n    <strong>\u2705 No selection needed \u2014 the grain size is fixed<\/strong>\n    For <strong>lawn \/ turf<\/strong> the soil type <strong>does not change the recommendation<\/strong>. We always recommend <strong>fine gravel 1\u20132.5 mm<\/strong> (or <strong>0.8\u20132.5 mm<\/strong> for IMERYS): fine enough to pass between the grass blades and reach the roots, without creating dust or sitting on the surface like gravel.\n  <\/div>\n<\/div>\n<!-- STEP 4: BRAND -->\n<div class=\"step\" data-step=\"4\">\n  <h3><span class=\"step-num\">4<\/span>Brand preference<\/h3>\n  <div class=\"options\">\n    <label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"greek_thracian\">\n      <span class=\"opt-title\">\ud83c\uddec\ud83c\uddf7 Greek Thracian<\/span>\n      <span class=\"opt-desc\">80% clinoptilolite, locally produced<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"imerys\">\n      <span class=\"opt-title\">\u2b50 IMERYS<\/span>\n      <span class=\"opt-desc\">\u226585% clinoptilolite, established brand<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"zeocem\">\n      <span class=\"opt-title\">\u26a1 ZeoGravel\u00ae (ZEOCEM)<\/span>\n      <span class=\"opt-desc\">\u226585% clinoptilolite + activation<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"brand\" value=\"best_value\">\n      <span class=\"opt-title\">\ud83d\udca1 You choose for me<\/span>\n      <span class=\"opt-desc\">Smart choice based on soil<\/span>\n    <\/label>\n  <\/div>\n<\/div>\n<!-- STEP 5: STRATEGY -->\n<div class=\"step\" data-step=\"5\">\n  <h3><span class=\"step-num\">5<\/span>Application strategy<\/h3>\n  <div class=\"options cols-3\" id=\"zaStrategyOptions\">\n    <label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"year1\">\n      <span class=\"opt-title\">\ud83d\udfe2 First phase<\/span>\n      <span class=\"opt-desc\">New: planting dose \u00b7 Existing: 40% of total<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"full3\">\n      <span class=\"opt-title\">\ud83d\udcc5 Full programme<\/span>\n      <span class=\"opt-desc\">3 years (existing) or 4 years (new planting)<\/span>\n    <\/label>\n    <label class=\"option\"><input type=\"radio\" name=\"strategy\" value=\"maintenance\">\n      <span class=\"opt-title\">\ud83d\udd04 Maintenance<\/span>\n      <span class=\"opt-desc\">15% of the total dose<\/span>\n    <\/label>\n  <\/div>\n  <div class=\"info-box hidden\" id=\"zaStrategyNote\">\n    <strong>\u2705 One-off application \u2014 no selection needed<\/strong>\n    <strong>Lawn \/ turf<\/strong> is a <strong>perennial crop<\/strong>: zeolite is incorporated <strong>once and only once<\/strong> and keeps working for many years. No multi-year programme or maintenance dose is needed.\n  <\/div>\n<\/div>\n<!-- STEP (conditional): REQUEST FOR ANOTHER CROP \u2014 shown only when \"Other crop\" is selected -->\n<div class=\"step\" id=\"zaOtherStep\" style=\"display:none\">\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"zaOtherBack\" style=\"padding:.5rem 1.1rem;font-size:.9rem;margin-bottom:1rem\">\u2190 Back to the guide<\/button>\n  <h3><span class=\"step-num\">\u2795<\/span>Tell us about your crop<\/h3>\n  <p style=\"margin:.2rem 0 1rem;color:var(--muted)\">Can&#8217;t find your crop in the list? Tell us what it is and our team will recommend the exact zeolite dosage <strong>free of charge<\/strong>.<\/p>\n  <label class=\"qty-label\" for=\"zaOtherCrop\">Which crop?<\/label>\n  <input type=\"text\" id=\"zaOtherCrop\" class=\"qty-input\" placeholder=\"e.g. Pomegranates, Kiwis, Blackberries, Aromatic herbs\u2026\" autocomplete=\"off\">\n  <div class=\"sub-group\">\n    <label class=\"qty-label\" for=\"zaOtherDetails\">Details <span style=\"font-weight:400;color:var(--muted)\">(optional)<\/span><\/label>\n    <textarea id=\"zaOtherDetails\" class=\"qty-input\" rows=\"3\" placeholder=\"e.g. number of plants or area, soil type, new or existing planting\u2026\"><\/textarea>\n  <\/div>\n  <div class=\"wholesale-cta\" style=\"margin-top:1.25rem\">\n    <strong>\ud83d\udce9 Send us your request<\/strong>\n    <span style=\"display:block;color:var(--muted);font-size:.9rem;margin:-.25rem 0 .25rem\">You&#8217;ll receive a personalised dosage recommendation for your crop.<\/span>\n    <div class=\"wholesale-btns four\">\n      <a id=\"zaOtherWhatsapp\" href=\"https:\/\/wa.me\/306985838343\" target=\"_blank\" rel=\"noopener\">\ud83d\udcac WhatsApp<\/a>\n      <a id=\"zaOtherViber\" href=\"viber:\/\/chat?number=306985838343\">\ud83d\udfe3 Viber<\/a>\n      <a id=\"zaOtherEmail\" href=\"mailto:info@zeolife.gr\">\u2709\ufe0f Email<\/a>\n      <a href=\"tel:+302311295520\">\ud83d\udcde +30 2311 29 55 20<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n<div class=\"actions\">\n  <button type=\"button\" class=\"btn\" id=\"zaCalculate\" disabled=\"\">\ud83d\udccb See the dosage<\/button>\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"zaReset\">\ud83d\udd04 Clear<\/button>\n  <button type=\"button\" class=\"btn btn-print\" id=\"zaPrint\">\ud83d\udda8\ufe0f Print<\/button>\n<\/div>\n<!-- RESULT -->\n<div class=\"result\" id=\"zaResult\">\n  <div class=\"print-only\" style=\"text-align:center;margin-bottom:1rem;padding-bottom:1rem;border-bottom:2px solid #2a9ca0;\">\n    <img decoding=\"async\" src=\"https:\/\/zeolife.gr\/wp-content\/uploads\/\/2019\/11\/logo-zeolife-hor.svg\" alt=\"Zeolife.gr\" style=\"max-width:280px;height:auto;margin:0 auto 0.5rem;display:block;\">\n    <h2 style=\"color:#26231e;margin:0;font-size:1.2rem;\">Zeolite Application Programme for Agriculture<\/h2>\n    <p style=\"margin:0.3rem 0 0;font-size:0.9rem;color:#6b6a64;\">www.zeolife.gr \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;\">Calculation date: <span id=\"zaPrintDate\"><\/span><\/p>\n  <\/div>\n  <h3 id=\"zaResultTitle\">Your personalised dosage recommendation<\/h3>\n  <div id=\"zaResultBody\"><\/div>\n<\/div>\n<\/div>\n<script>\n(function(){\n  \/\/ ===== DATA =====\n  var cropData = {\n    olive: {\n      name: 'Olive trees',\n      icon: '\ud83e\uded2',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 2, method: 'Mixed with the soil in the planting hole' },\n        existing: { label: '\ud83c\udf33 Existing planting', kg: 24, method: 'From the trunk out to the edge of the canopy' }\n      },\n      perStremmaMax: 600,\n      season: 'Autumn (Oct-Nov) or early spring before bud break',\n      depth: 'From the trunk out to the edge of the canopy \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    walnut: {\n      name: 'Walnut trees',\n      icon: '\ud83e\udd5c',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 2, method: 'Mixed with the soil in the planting hole' },\n        existing: { label: '\ud83c\udf33 Existing planting', kg: 24, method: 'From the trunk out to the edge of the canopy' }\n      },\n      perStremmaMax: 600,\n      season: 'Autumn (Oct-Nov)',\n      depth: 'From the trunk out to the edge of the canopy \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    fruit: {\n      name: 'Fruit trees',\n      icon: '\ud83c\udf4e',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 1, method: 'Mixed with the soil in the planting hole' },\n        existing: { label: '\ud83c\udf33 Existing planting', kg: 15, method: 'From the trunk out to the edge of the canopy' }\n      },\n      perStremmaMax: 450,\n      season: 'Autumn or before flowering',\n      depth: 'From the trunk out to the edge of the canopy \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    pistachio: {\n      name: 'Pistachio trees',\n      icon: '\ud83c\udf30',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 1, method: 'Mixed with the soil in the planting hole' },\n        existing: { label: '\ud83c\udf33 Existing planting', kg: 15, method: 'From the trunk out to the edge of the canopy' }\n      },\n      perStremmaMax: 450,\n      season: 'Autumn or before flowering',\n      depth: 'From the trunk out to the edge of the canopy \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    vineyard: {\n      name: 'Vineyard',\n      icon: '\ud83c\udf47',\n      mode: 'vine',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 0.2, method: 'Mixed with the soil in the planting hole (200 g\/vine)' },\n        existing: { label: '\ud83c\udf47 Existing planting', kg: 1.2, method: 'Around the root, mixed with the soil' }\n      },\n      perStremmaMax: 450,\n      season: 'Autumn after the harvest',\n      depth: 'Around the root \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    palm: {\n      name: 'Palm trees',\n      icon: '\ud83c\udf34',\n      mode: 'tree',\n      phases: {\n        'new': { label: '\ud83c\udf31 New planting', kg: 2, method: 'Mixed with the soil in the planting hole' },\n        existing: { label: '\ud83c\udf33 Existing planting', kg: 24, method: 'From the trunk out to the edge of the canopy' }\n      },\n      perStremmaMax: 0,\n      season: 'Spring',\n      depth: 'From the trunk out to the edge of the canopy \u00b7 Mix in where possible down to 20 cm (new planting: mix with the soil of the planting hole)'\n    },\n    cereals: {\n      name: 'Cereals \/ Maize',\n      icon: '\ud83c\udf3e',\n      mode: 'stremma',\n      perStremmaMax: 300,\n      season: 'Before sowing (autumn for winter crops, spring for spring crops)',\n      depth: '15-20 cm incorporation by ploughing'\n    },\n    melons: {\n      name: 'Watermelons \/ Melons',\n      icon: '\ud83c\udf49',\n      mode: 'stremma',\n      perStremmaMax: 450,\n      season: 'Before transplanting or sowing (late winter \u2013 spring)',\n      depth: '15-20 cm incorporation by ploughing or rotavating, ideally along the planting rows'\n    },\n    alfalfa: {\n      name: 'Alfalfa (lucerne)',\n      icon: '\ud83c\udf40',\n      mode: 'stremma',\n      perStremmaMax: 150,\n      season: 'Before establishing the alfalfa (autumn or spring sowing)',\n      depth: '15-20 cm incorporation by ploughing before sowing'\n    },\n    herbs: {\n      name: 'Aromatic herbs (oregano, thyme)',\n      icon: '\ud83c\udf3f',\n      mode: 'stremma',\n      \/\/ 300 kg\/stremma in total, based on Bulgarian-quality zeolite (IMERYS, \u226585%).\n      \/\/ Greek Thracian (80%) automatically gets +20% via doseModifier.\n      perStremmaMax: 300,\n      season: 'Before planting (autumn or early spring)',\n      depth: '15-20 cm incorporation by ploughing or rotavating, ideally along the planting rows'\n    },\n    lawn: {\n      name: 'Lawn \u2013 Turf',\n      icon: '\ud83c\udf3f',\n      mode: 'lawn',\n      \/\/ PERENNIAL CROP \u2014 a single application, no multi-year\/maintenance programme.\n      \/\/ Input is in m\u00b2 (friendlier for gardens\/yards). 1 stremma = 1,000 m\u00b2.\n      oneOff: true,\n      \/\/ Soil type does NOT affect lawns: always fine gravel 1-2.5mm (IMERYS: 0.8-2.5mm).\n      ignoreSoil: true,\n      fixedGran: 'fine',\n      smartBrand: 'imerys',\n      smartBrandLabel: 'lawns',\n      smartBrandReason: 'For lawns we recommend IMERYS 0.8-2.5 mm: the finest version of \"fine gravel\" \u2014 it passes easily between the grass blades when top-dressing and quickly reaches the roots.',\n      existingKg: 100,          \/\/ kg per stremma (existing lawn)\n      newKg: 300,               \/\/ kg per stremma (new planting)\n      existingKgPerSqm: 0.1,    \/\/ 100 kg\/stremma \u00f7 1,000 m\u00b2\n      newKgPerSqm: 0.3,         \/\/ 300 kg\/stremma \u00f7 1,000 m\u00b2\n      season: 'Spring or autumn \u2014 one-off application, just once',\n      depth: 'Existing lawn: on the surface as top-dressing (0.1 kg\/m\u00b2 = 10 kg per 100 m\u00b2), water well afterwards \u00b7 New planting: incorporate into the top 10-15 cm before sowing or laying turf (0.3 kg\/m\u00b2 = 30 kg per 100 m\u00b2)'\n    },\n    vegetable: {\n      name: 'Vegetable garden',\n      icon: '\ud83e\udd6c',\n      mode: 'area',\n      perSqmKg: 0.5,\n      season: 'Before planting\/sowing (autumn or early spring) \u2014 a one-off application that lasts a lifetime',\n      depth: 'Incorporate into the top 15-20 cm of soil by hoeing or rotavating \u00b7 one-off application (no need to repeat every year)'\n    },\n    ornamentals: {\n      name: 'Ornamental plants',\n      icon: '\ud83c\udf39',\n      mode: 'ornamental',\n      potPercent: 10,\n      potPercentMin: 5,\n      potPercentMax: 20,\n      gardenPerPlant: 60,\n      gardenPerPlantMin: 30,\n      gardenPerPlantMax: 120,\n      season: 'At planting or when renewing the soil',\n      depth: 'Mix thoroughly (pot) or 5-10 cm (garden)'\n    },\n    seedling: {\n      name: 'Seedling production',\n      icon: '\ud83c\udf31',\n      mode: 'soil_weight',\n      percent: 20,\n      season: 'Mix thoroughly before sowing',\n      depth: 'Mix evenly through the whole substrate'\n    },\n    succulents: {\n      name: 'Cacti \/ Succulents',\n      icon: '\ud83c\udf35',\n      mode: 'soil_weight',\n      percent: 20,\n      season: 'At planting or repotting',\n      depth: 'Mix thoroughly with soil + river sand'\n    }\n  };\n  var products = {\n    greek_thracian: {\n      label: 'Greek Thracian Zeolite',\n      purity: '80%',\n      doseModifier: 1.2,\n      powder: { name: 'Greek Thracian Zeolite 0-1mm (Powder)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-zero-to-one-mm\/' },\n      fine: { name: 'Greek Thracian Zeolite 1-2.5mm (Fine gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-one-to-2point5mm\/' },\n      gravel: { name: 'Greek Thracian Zeolite 2.5-5mm (Gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-2point5-to-5mm\/' }\n    },\n    imerys: {\n      label: 'IMERYS Zeolite',\n      purity: '\u226585%',\n      doseModifier: 1.0,\n      powder: { name: 'IMERYS Zeolite up to 0.8mm (Powder)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeolite-0point8mm\/' },\n      fine: { name: 'IMERYS Zeolite 0.8-2.5mm (Fine gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeolite-0point8-to-2point5mm\/' },\n      gravel: { name: 'IMERYS Zeolite 2.5-5mm (Gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeolite-2point5-to-5mm\/' }\n    },\n    zeocem: {\n      label: 'ZeoGravel\u00ae Activated ZEOCEM',\n      purity: '\u226585% + activation',\n      doseModifier: 1.0,\n      powder: null,\n      fine: { name: 'ZeoGravel\u00ae Activated ZEOCEM 1-2.5mm (Fine gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeogravel-activated-zeolite-1-to-2-5-millimetres-fine-gravel-ideal-for-agricultural-use-25-kg\/' },\n      gravel: { name: 'ZeoGravel\u00ae Activated ZEOCEM 2.5-5mm (Gravel)', url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeogravel-activated-zeolite-2-5-to-5-millimetres-gravel-ideal-for-planting-young-trees-25-kilograms\/' }\n    }\n  };\n  \/\/ === IMERYS 5kg: variable product (all grain sizes on one product page) ===\n  \/\/ Recommended when the total dose is small (< 25 kg) \u2014 same grain-size logic per soil.\n  var imerys5kg = {\n    url: 'https:\/\/shop.zeolife.gr\/en\/product\/zeolite-for-domestic-use-5-kg\/',\n    powder: 'IMERYS Zeolite 5 kg \u2014 Powder (up to 0.8mm)',\n    fine: 'IMERYS Zeolite 5 kg \u2014 Fine gravel (0.8-2.5mm)',\n    gravel: 'IMERYS Zeolite 5 kg \u2014 Gravel (2.5-5mm)'\n  };\n  \/\/ 500g Greek Thracian \u2014 for VERY small\/trial applications (no 500g powder exists).\n  var greek500 = {\n    fine:   { name: 'Greek Thracian Zeolite 1-2.5mm (Fine gravel) \u2014 500g', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-1-to-2-5-millimetres-fine-gravel-ideal-for-use-in-small-scale-cultivation-and-in-medium-to-heavy-soils-500-grams\/' },\n    gravel: { name: 'Greek Thracian Zeolite 2.5-5mm (Gravel) \u2014 500g', url: 'https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-2-5-to-5-millimetres-gravel-ideal-for-use-in-large-scale-cultivation-500-grams\/' }\n  };\n  var TEST_QTY_KG = 1.5; \/\/ below 1.5 kg (trial) \u2192 recommend 500g (if that grain size exists)\n  var SMALL_QTY_KG = 25; \/\/ below 25 kg (1 bag) \u2192 recommend 5 kg\n  \/\/ 04\/10\/2026: NEVER powder for soil\/tree incorporation \u2014 light &#038; medium soil \u2192 fine gravel (1-2.5 mm \/ IMERYS 0.8-2.5 mm), heavy \u2192 gravel 2.5-5 mm.\n  var soilToGran = { light: 'fine', medium: 'fine', heavy: 'gravel' };\n  var soilLabels = { light: 'Light (sandy)', medium: 'Medium (loamy)', heavy: 'Heavy (clay)' };\n  var granLabels = { powder: 'Powder', fine: 'Fine gravel', gravel: 'Gravel' };\n  var smartByS = { light: 'imerys', medium: 'zeocem', heavy: 'greek_thracian' };\n  var smartReason = {\n    light: 'IMERYS 0.8-2.5 mm is the finest \u201cfine gravel\u201d \u2014 ideal for light, sandy soils: it settles at the root zone without being washed or blown away, as powder would.',\n    medium: 'ZeoGravel\u00ae (ZEOCEM) is thermally activated \u2014 increased activity for medium soils.',\n    heavy: 'Greek Thracian Zeolite is locally produced (low carbon footprint) and ideal for heavy soils.'\n  };\n  \/\/ ===== ELEMENTS =====\n  var calc = document.getElementById('zaCalc');\n  var steps = calc.querySelectorAll('.step:not(#zaOtherStep)');\n  var otherStep = document.getElementById('zaOtherStep');\n  var actionsRow = calc.querySelector('.actions');\n  var progressBar = document.getElementById('zaProgress');\n  var calcBtn = document.getElementById('zaCalculate');\n  var resetBtn = document.getElementById('zaReset');\n  var printBtn = document.getElementById('zaPrint');\n  var resultBox = document.getElementById('zaResult');\n  var resultBody = document.getElementById('zaResultBody');\n  var qtyContainer = document.getElementById('zaQtyContainer');\n  var strategyOptions = document.getElementById('zaStrategyOptions');\n  var strategyNote = document.getElementById('zaStrategyNote');\n  var soilOptions = document.getElementById('zaSoilOptions');\n  var soilNote = document.getElementById('zaSoilNote');\n  \/\/ ===== HELPERS =====\n  function getChecked(name) {\n    var el = calc.querySelector('input[name=\"' + name + '\"]:checked');\n    return el ? el.value : null;\n  }\n  function getVal(id) {\n    var el = document.getElementById(id);\n    return el ? el.value : null;\n  }\n  function fmtKg(n) {\n    if (n >= 1000) return (n \/ 1000).toFixed(1).replace('.0','') + ' tonnes (' + Math.round(n).toLocaleString('en-GB') + ' kg)';\n    return Math.round(n).toLocaleString('en-GB') + ' kg';\n  }\n  function fmtNum(n) { return Math.round(n).toLocaleString('en-GB'); }\n  \/\/ Perennial crops with a SINGLE application (e.g. lawn \/ turf)\n  function isOneOff(crop) {\n    if (!crop) return false;\n    if (!cropData[crop]) return false;\n    return cropData[crop].oneOff === true;\n  }\n  \/\/ Crops where soil type does not affect grain size (e.g. lawn \/ turf)\n  function ignoresSoil(crop) {\n    if (!crop) return false;\n    if (!cropData[crop]) return false;\n    return cropData[crop].ignoreSoil === true;\n  }\n  \/\/ ===== \"OTHER CROP\" \u2014 REQUEST MODE =====\n  function updateOtherLinks() {\n    var cropEl = document.getElementById('zaOtherCrop');\n    var detEl = document.getElementById('zaOtherDetails');\n    var cropName = cropEl ? cropEl.value.trim() : '';\n    var details = detEl ? detEl.value.trim() : '';\n    var msg = 'Hello! I would like a personalised zeolite dosage recommendation for the crop: ' + (cropName || '[enter crop]');\n    if (details) { msg += '. Additional details: ' + details; }\n    var wa = document.getElementById('zaOtherWhatsapp');\n    var em = document.getElementById('zaOtherEmail');\n    if (wa) { wa.href = 'https:\/\/wa.me\/306985838343?text=' + encodeURIComponent(msg); }\n    if (em) { em.href = 'mailto:info@zeolife.gr?subject=' + encodeURIComponent('Zeolite dosage request' + (cropName ? (' \u2013 ' + cropName) : '')) + '&body=' + encodeURIComponent(msg); }\n  }\n  function enterOtherMode() {\n    for (var i = 0; i < steps.length; i++) { steps[i].style.display = 'none'; steps[i].classList.remove('active'); }\n    if (actionsRow) { actionsRow.style.display = 'none'; }\n    resultBox.classList.remove('show');\n    if (otherStep) {\n      otherStep.style.display = '';\n      otherStep.classList.add('active');\n      otherStep.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n    progressBar.style.width = '100%';\n    updateOtherLinks();\n  }\n  function exitOtherMode() {\n    for (var i = 0; i < steps.length; i++) { steps[i].style.display = ''; }\n    if (actionsRow) { actionsRow.style.display = ''; }\n    if (otherStep) { otherStep.style.display = 'none'; otherStep.classList.remove('active'); }\n  }\n  \/\/ ===== STEP 5: hide the options when the crop is one-off =====\n  function updateStrategyStep(crop) {\n    if (!strategyOptions) return;\n    if (!strategyNote) return;\n    if (isOneOff(crop)) {\n      strategyOptions.classList.add('hidden');\n      strategyNote.classList.remove('hidden');\n      calc.querySelectorAll('input[name=\"strategy\"]').forEach(function(r) { r.checked = false; });\n    } else {\n      strategyOptions.classList.remove('hidden');\n      strategyNote.classList.add('hidden');\n    }\n  }\n  \/\/ ===== STEP 3: hide the soil options when they don't affect the recommendation =====\n  function updateSoilStep(crop) {\n    if (!soilOptions) return;\n    if (!soilNote) return;\n    if (ignoresSoil(crop)) {\n      soilOptions.classList.add('hidden');\n      soilNote.classList.remove('hidden');\n      calc.querySelectorAll('input[name=\"soil\"]').forEach(function(r) { r.checked = false; });\n    } else {\n      soilOptions.classList.remove('hidden');\n      soilNote.classList.add('hidden');\n    }\n  }\n  \/\/ ===== STEP 2 RENDER =====\n  function renderQtyStep(crop) {\n    if (!crop || !cropData[crop]) {\n      qtyContainer.innerHTML = '<p style=\"color:var(--za-muted);font-style:italic;\">First choose a crop in Step 1.<\/p>';\n      return;\n    }\n    var data = cropData[crop];\n    var html = '';\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var unit = data.mode === 'tree' ? 'trees' : 'vines';\n      var unitSingular = data.mode === 'tree' ? 'tree' : 'vine';\n      var hasStremma = data.perStremmaMax > 0;\n      if (hasStremma) {\n        html += '<div class=\"qty-row\">';\n        html += '<div><label class=\"qty-label\">How many ' + unit + '?<\/label>';\n        html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"e.g. 100\"><\/div>';\n        html += '<div><label class=\"qty-label\">Or how many stremmata? (1 stremma = 1,000 m\u00b2 \u00b7 existing planting only)<\/label>';\n        html += '<input type=\"number\" id=\"zaQtyStremma\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"e.g. 5\"><\/div>';\n        html += '<\/div>';\n      } else {\n        html += '<label class=\"qty-label\">How many ' + unit + '?<\/label>';\n        html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"e.g. 20\">';\n      }\n      html += '<div class=\"sub-group\"><label class=\"qty-label\">Planting phase<\/label>';\n      html += '<div class=\"options\">';\n      var phases = data.phases;\n      for (var key in phases) {\n        html += '<label class=\"option\"><input type=\"radio\" name=\"phaseGroup\" value=\"' + key + '\">';\n        html += '<span class=\"opt-title\">' + phases[key].label + '<\/span>';\n        html += '<span class=\"opt-desc\">' + phases[key].kg + ' kg\/' + unitSingular + ' \u00b7 ' + phases[key].method + '<\/span>';\n        html += '<\/label>';\n      }\n      html += '<\/div><\/div>';\n    } else if (data.mode === 'stremma') {\n      html += '<label class=\"qty-label\">How many stremmata? (1 stremma = 1,000 m\u00b2)<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"e.g. 10\">';\n      html += '<p class=\"sublabel\">Dosage: up to ' + data.perStremmaMax + ' kg\/stremma<\/p>';\n    } else if (data.mode === 'area') {\n      html += '<label class=\"qty-label\">How many square metres (m\u00b2)?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"0.1\" placeholder=\"e.g. 20\">';\n      html += '<p class=\"sublabel\">Dosage: ' + data.perSqmKg + ' kg\/m\u00b2 (' + Math.round(data.perSqmKg * 1000) + ' g\/m\u00b2) \u2014 one-off application that lasts a lifetime<\/p>';\n    } else if (data.mode === 'lawn') {\n      html += '<div class=\"qty-row\">';\n      html += '<div><label class=\"qty-label\">How many square metres (m\u00b2)?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"e.g. 100\">';\n      html += '<p class=\"sublabel\">Measure <strong>length \u00d7 width<\/strong> \u2014 e.g. 10 m \u00d7 10 m = <strong>100 m\u00b2<\/strong><\/p><\/div>';\n      html += '<div><label class=\"qty-label\">Lawn type<\/label>';\n      html += '<div class=\"options\">';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"lawnType\" value=\"existing\">';\n      html += '<span class=\"opt-title\">\ud83c\udf3f Existing lawn<\/span><span class=\"opt-desc\">0.1 kg\/m\u00b2 \u00b7 10 kg per 100 m\u00b2 \u2014 one-off<\/span><\/label>';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"lawnType\" value=\"new\">';\n      html += '<span class=\"opt-title\">\ud83c\udf31 New planting<\/span><span class=\"opt-desc\">0.3 kg\/m\u00b2 \u00b7 30 kg per 100 m\u00b2 \u2014 one-off<\/span><\/label>';\n      html += '<\/div><\/div><\/div>';\n      \/\/ Example table \u2014 helps the customer translate dimensions into m\u00b2.\n      html += '<div class=\"info-box\" style=\"margin-top:1rem\">';\n      html += '<strong>\ud83d\udcd0 How many m\u00b2 is your area? \u2014 examples<\/strong>';\n      html += '<table class=\"dose-table\" style=\"font-size:0.9rem;margin:0.5rem 0 0;\">';\n      html += '<tr><th>Dimensions<\/th><th>Area<\/th><th>\ud83c\udf3f Existing<\/th><th>\ud83c\udf31 New planting<\/th><\/tr>';\n      html += '<tr><td>5 \u00d7 10 m<\/td><td>50 m\u00b2<\/td><td>5 kg<\/td><td>15 kg<\/td><\/tr>';\n      html += '<tr><td>10 \u00d7 10 m<\/td><td><strong>100 m\u00b2<\/strong><\/td><td><strong>10 kg<\/strong><\/td><td><strong>30 kg<\/strong><\/td><\/tr>';\n      html += '<tr><td>10 \u00d7 20 m<\/td><td>200 m\u00b2<\/td><td>20 kg<\/td><td>60 kg<\/td><\/tr>';\n      html += '<tr><td>15 \u00d7 20 m<\/td><td>300 m\u00b2<\/td><td>30 kg<\/td><td>90 kg<\/td><\/tr>';\n      html += '<tr><td>20 \u00d7 25 m<\/td><td>500 m\u00b2<\/td><td>50 kg<\/td><td>150 kg<\/td><\/tr>';\n      html += '<tr><td>25 \u00d7 40 m<\/td><td>1,000 m\u00b2 <em>(1 stremma)<\/em><\/td><td>100 kg<\/td><td>300 kg<\/td><\/tr>';\n      html += '<\/table>';\n      html += '<p class=\"sublabel\" style=\"margin-top:0.6rem\">\ud83d\udca1 <strong>Irregular shape?<\/strong> Split it mentally into rectangles, calculate each one (length \u00d7 width) and add them up. For a circular area: radius \u00d7 radius \u00d7 3.14.<\/p>';\n      html += '<\/div>';\n      html += '<p class=\"sublabel\">\u2705 <strong>Just one application.<\/strong> Lawn is a perennial crop \u2014 no need to repeat it in the following years.<\/p>';\n    } else if (data.mode === 'ornamental') {\n      html += '<label class=\"qty-label\">Application type<\/label>';\n      html += '<div class=\"options\">';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"ornType\" value=\"pot\">';\n      html += '<span class=\"opt-title\">\ud83e\udeb4 Pot<\/span><span class=\"opt-desc\">% by soil weight<\/span><\/label>';\n      html += '<label class=\"option\"><input type=\"radio\" name=\"ornType\" value=\"garden\">';\n      html += '<span class=\"opt-title\">\ud83c\udf3a Garden<\/span><span class=\"opt-desc\">Grams per plant<\/span><\/label>';\n      html += '<\/div>';\n      html += '<div id=\"zaOrnDetail\" class=\"sub-group hidden\"><\/div>';\n    } else if (data.mode === 'soil_weight') {\n      html += '<label class=\"qty-label\">How many kg of soil will you mix?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"e.g. 50\">';\n      html += '<p class=\"sublabel\">Dosage: ' + data.percent + '% by weight (mixed thoroughly)<\/p>';\n    }\n    qtyContainer.innerHTML = html;\n    var newInputs = qtyContainer.querySelectorAll('input');\n    for (var i = 0; i < newInputs.length; i++) {\n      newInputs[i].addEventListener('input', updateProgress);\n      newInputs[i].addEventListener('change', function(e) {\n        if (e.target.name === 'ornType') renderOrnDetail(e.target.value);\n        if (e.target.name === 'phaseGroup') handlePhaseChange(e.target.value);\n        updateProgress();\n      });\n    }\n  }\n  function handlePhaseChange(phaseValue) {\n    var stremmaInput = document.getElementById('zaQtyStremma');\n    if (!stremmaInput) return;\n    var wrapper = stremmaInput.parentElement;\n    if (phaseValue === 'new') {\n      stremmaInput.disabled = true;\n      stremmaInput.value = '';\n      stremmaInput.placeholder = 'Not applicable to new planting';\n      if (wrapper) wrapper.style.opacity = '0.4';\n    } else {\n      stremmaInput.disabled = false;\n      stremmaInput.placeholder = 'e.g. 5';\n      if (wrapper) wrapper.style.opacity = '1';\n    }\n  }\n  function renderOrnDetail(ornType) {\n    var detail = document.getElementById('zaOrnDetail');\n    if (!detail) return;\n    var html = '';\n    if (ornType === 'pot') {\n      html += '<label class=\"qty-label\">How many kg of potting soil?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"0\" step=\"1\" placeholder=\"e.g. 10\">';\n      html += '<p class=\"sublabel\">Default 10% by weight (range 5-20%)<\/p>';\n    } else if (ornType === 'garden') {\n      html += '<label class=\"qty-label\">How many plants?<\/label>';\n      html += '<input type=\"number\" id=\"zaQty\" class=\"qty-input\" min=\"1\" placeholder=\"e.g. 50\">';\n      html += '<p class=\"sublabel\">Default 60 g\/plant (range 30-120 g)<\/p>';\n    }\n    detail.innerHTML = html;\n    detail.classList.remove('hidden');\n    var newInput = detail.querySelector('input');\n    if (newInput) newInput.addEventListener('input', updateProgress);\n  }\n  function isPositive(v) {\n    if (!v) return false;\n    if (Number(v) <= 0) return false;\n    return true;\n  }\n  function isStep2Valid(crop) {\n    if (!crop || !cropData[crop]) return false;\n    var data = cropData[crop];\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var qty = getVal('zaQty');\n      var stremma = getVal('zaQtyStremma');\n      var phaseVal = getChecked('phaseGroup');\n      if (!phaseVal) return false;\n      if (phaseVal === 'new') {\n        return isPositive(qty);\n      }\n      if (isPositive(qty)) return true;\n      if (isPositive(stremma)) return true;\n      return false;\n    }\n    if (data.mode === 'lawn') {\n      var qty2 = getVal('zaQty');\n      var lawnType = getChecked('lawnType');\n      if (!isPositive(qty2)) return false;\n      if (!lawnType) return false;\n      return true;\n    }\n    if (data.mode === 'ornamental') {\n      var ornType = getChecked('ornType');\n      var qty3 = getVal('zaQty');\n      if (!ornType) return false;\n      if (!isPositive(qty3)) return false;\n      return true;\n    }\n    var qty4 = getVal('zaQty');\n    return isPositive(qty4);\n  }\n  function updateProgress() {\n    var crop = getChecked('crop');\n    \/\/ \"Other crop\" \u2192 request mode, not a calculation. Progress\/buttons are handled by enterOtherMode().\n    if (crop === 'other') { return; }\n    var soil = getChecked('soil');\n    var brand = getChecked('brand');\n    var strategy = getChecked('strategy');\n    var step2OK = isStep2Valid(crop);\n    var filled = 0;\n    if (crop) filled++;\n    if (step2OK) filled++;\n    \/\/ Lawn: soil doesn't matter \u2014 Step 3 needs no selection.\n    if (ignoresSoil(crop)) {\n      filled++;\n    } else if (soil) {\n      filled++;\n    }\n    if (brand) filled++;\n    \/\/ One-off crops (lawn): Step 5 needs no selection.\n    if (isOneOff(crop)) {\n      filled++;\n    } else if (strategy) {\n      filled++;\n    }\n    progressBar.style.width = (filled \/ 5 * 100) + '%';\n    steps.forEach(function(s, i) {\n      var isActive = (i === filled) || (i === filled - 1);\n      s.classList.toggle('active', isActive);\n    });\n    calcBtn.disabled = filled < 5;\n  }\n  calc.querySelectorAll('input[name=\"crop\"]').forEach(function(r) {\n    r.addEventListener('change', function() {\n      if (r.value === 'other') {\n        enterOtherMode();\n      } else {\n        exitOtherMode();\n        renderQtyStep(r.value);\n        updateSoilStep(r.value);\n        updateStrategyStep(r.value);\n      }\n      updateProgress();\n    });\n  });\n  var excludedNames = ['crop', 'phaseGroup', 'lawnType', 'ornType'];\n  calc.querySelectorAll('input[type=\"radio\"]').forEach(function(r) {\n    if (excludedNames.indexOf(r.name) === -1) {\n      r.addEventListener('change', updateProgress);\n    }\n  });\n  \/\/ Live-update the WhatsApp\/Email links as the user types\n  ['zaOtherCrop', 'zaOtherDetails'].forEach(function(id) {\n    var el = document.getElementById(id);\n    if (el) { el.addEventListener('input', updateOtherLinks); }\n  });\n  resetBtn.addEventListener('click', function() {\n    calc.querySelectorAll('input[type=\"radio\"]').forEach(function(r) { r.checked = false; });\n    calc.querySelectorAll('input[type=\"number\"]').forEach(function(r) { r.value = ''; });\n    var oc = document.getElementById('zaOtherCrop'); if (oc) oc.value = '';\n    var od = document.getElementById('zaOtherDetails'); if (od) od.value = '';\n    exitOtherMode();\n    updateSoilStep(null);\n    updateStrategyStep(null);\n    qtyContainer.innerHTML = '<p style=\"color:var(--za-muted);font-style:italic;\">First choose a crop in Step 1.<\/p>';\n    resultBox.classList.remove('show');\n    updateProgress();\n    steps[0].classList.add('active');\n    steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n  \/\/ \"\u2190 Back to the guide\" \u2014 return from request mode to the normal guide\n  var otherBackBtn = document.getElementById('zaOtherBack');\n  if (otherBackBtn) {\n    otherBackBtn.addEventListener('click', function() {\n      var otherRadio = calc.querySelector('input[name=\"crop\"][value=\"other\"]');\n      if (otherRadio) { otherRadio.checked = false; }\n      exitOtherMode();\n      updateProgress();\n      steps[0].classList.add('active');\n      steps[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  }\n  printBtn.addEventListener('click', function() {\n    if (!resultBox.classList.contains('show')) {\n      alert('Please calculate the dosage first.');\n      return;\n    }\n    var dateEl = document.getElementById('zaPrintDate');\n    if (dateEl) {\n      var now = new Date();\n      dateEl.textContent = now.toLocaleDateString('en-GB', { day: '2-digit', month: 'long', year: 'numeric' });\n    }\n    window.print();\n  });\n  function calcBaseDose(crop, phaseGroup, qty, stremmaQty, lawnType, ornType) {\n    var data = cropData[crop];\n    if (data.mode === 'tree' || data.mode === 'vine') {\n      var unitLabel = data.mode === 'tree' ? 'trees' : 'vines';\n      var phaseLabel = '';\n      if (phaseGroup) {\n        if (data.phases[phaseGroup]) {\n          phaseLabel = data.phases[phaseGroup].label.replace(\/^[^\\s]+\\s\/, '');\n        }\n      }\n      if (isPositive(qty)) {\n        if (phaseGroup) {\n          var kgPerUnit = data.phases[phaseGroup].kg;\n          return { kg: Number(qty) * kgPerUnit, breakdown: fmtNum(qty) + ' ' + unitLabel + ' \u00d7 ' + kgPerUnit + ' kg (' + phaseLabel + ') = ' + fmtKg(Number(qty) * kgPerUnit) };\n        }\n      }\n      if (isPositive(stremmaQty)) {\n        if (data.perStremmaMax > 0) {\n          return { kg: Number(stremmaQty) * data.perStremmaMax, breakdown: fmtNum(stremmaQty) + ' stremmata \u00d7 ' + data.perStremmaMax + ' kg (existing planting) = ' + fmtKg(Number(stremmaQty) * data.perStremmaMax) };\n        }\n      }\n    }\n    if (data.mode === 'stremma') {\n      return { kg: Number(qty) * data.perStremmaMax, breakdown: fmtNum(qty) + ' stremmata \u00d7 ' + data.perStremmaMax + ' kg = ' + fmtKg(Number(qty) * data.perStremmaMax) };\n    }\n    if (data.mode === 'area') {\n      return { kg: Number(qty) * data.perSqmKg, breakdown: fmtNum(qty) + ' m\u00b2 \u00d7 ' + data.perSqmKg + ' kg\/m\u00b2 = ' + fmtKg(Number(qty) * data.perSqmKg) };\n    }\n    if (data.mode === 'lawn') {\n      \/\/ Input is in m\u00b2. 0.1 kg\/m\u00b2 (existing) or 0.3 kg\/m\u00b2 (new planting) \u2014 one-off.\n      var kgPerSqm = lawnType === 'new' ? data.newKgPerSqm : data.existingKgPerSqm;\n      var kgPerStr = lawnType === 'new' ? data.newKg : data.existingKg;\n      var lawnLabel = lawnType === 'new' ? 'new planting' : 'existing lawn';\n      var sqm = Number(qty);\n      var lawnKg = sqm * kgPerSqm;\n      var bd = fmtNum(sqm) + ' m\u00b2 \u00d7 ' + String(kgPerSqm) + ' kg\/m\u00b2 (' + lawnLabel + ', one-off) = <strong>' + lawnKg.toFixed(1).replace('.0', '') + ' kg<\/strong>';\n      bd += '<br><span style=\"font-size:0.88rem;color:var(--za-muted);\">Equivalent: ' + kgPerStr + ' kg\/stremma (1,000 m\u00b2) \u00b7 your area is ' + (sqm \/ 1000).toFixed(3).replace(\/0+$\/, '').replace(\/[.,]$\/, '') + ' stremmata<\/span>';\n      return { kg: lawnKg, breakdown: bd };\n    }\n    if (data.mode === 'ornamental') {\n      if (ornType === 'pot') {\n        var kg = Number(qty) * (data.potPercent \/ 100);\n        return { kg: kg, breakdown: fmtNum(qty) + ' kg soil \u00d7 ' + data.potPercent + '% = ' + kg.toFixed(2) + ' kg zeolite' };\n      }\n      var g = Number(qty) * data.gardenPerPlant;\n      return { kg: g \/ 1000, breakdown: fmtNum(qty) + ' plants \u00d7 ' + data.gardenPerPlant + ' g = ' + g + ' g (' + (g\/1000).toFixed(2) + ' kg)' };\n    }\n    if (data.mode === 'soil_weight') {\n      var kgS = Number(qty) * (data.percent \/ 100);\n      return { kg: kgS, breakdown: fmtNum(qty) + ' kg soil \u00d7 ' + data.percent + '% = ' + kgS.toFixed(2) + ' kg zeolite' };\n    }\n    return { kg: 0, breakdown: '' };\n  }\n  function getDiscount(kg) {\n    var sacks = Math.ceil(kg \/ 25);\n    if (sacks >= 40) return { sacks: sacks, percent: 40, label: '40+ bags', savings: '\ud83c\udf81 40% discount' };\n    if (sacks >= 30) return { sacks: sacks, percent: 30, label: '30-39 bags', savings: '\ud83c\udf81 30% discount' };\n    if (sacks >= 20) return { sacks: sacks, percent: 20, label: '20-29 bags', savings: '\ud83c\udf81 20% discount' };\n    if (sacks >= 10) return { sacks: sacks, percent: 10, label: '10-19 bags', savings: '\ud83c\udf81 10% discount' };\n    return { sacks: sacks, percent: 0, label: '< 10 bags', savings: '' };\n  }\n  function applyStrategy(baseDose, matureDose, strategy, phase, isTreeVine, oneOff) {\n    \/\/ ONE-OFF CROPS (lawn \/ turf): always a single application.\n    if (oneOff) {\n      return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, label: 'One-off application \u2014 just once (perennial crop)', is4Year: false, isOneOff: true };\n    }\n    if (isTreeVine) {\n      if (phase === 'new') {\n        if (strategy === 'year1') {\n          return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, label: 'New planting only (planting phase)', is4Year: false };\n        }\n        if (strategy === 'full3') {\n          var y1 = baseDose;\n          var y2 = matureDose * 0.4;\n          var remaining = matureDose - y1 - y2;\n          if (remaining < 0) remaining = 0;\n          var y3 = remaining \/ 2;\n          var y4 = remaining \/ 2;\n          return { display: y1 + y2 + y3 + y4, year1: y1, year2: y2, year3: y3, year4: y4, label: 'Full 4-year programme (new planting)', is4Year: true };\n        }\n        if (strategy === 'maintenance') {\n          var maintNew = matureDose * 0.15;\n          return { display: maintNew, year1: maintNew, year2: 0, year3: 0, year4: 0, label: 'Maintenance (15% of the mature-tree dose)', is4Year: false };\n        }\n      }\n    }\n    if (strategy === 'year1') {\n      return { display: baseDose * 0.4, year1: baseDose * 0.4, year2: 0, year3: 0, year4: 0, label: 'First year (40% of the total dose)', is4Year: false };\n    }\n    if (strategy === 'full3') {\n      return { display: baseDose, year1: baseDose * 0.4, year2: baseDose * 0.3, year3: baseDose * 0.3, year4: 0, label: 'Full 3-year programme', is4Year: false };\n    }\n    if (strategy === 'maintenance') {\n      return { display: baseDose * 0.15, year1: baseDose * 0.15, year2: 0, year3: 0, year4: 0, label: 'Maintenance (15% of the initial application dose)', is4Year: false };\n    }\n    return { display: baseDose, year1: baseDose, year2: 0, year3: 0, year4: 0, is4Year: false };\n  }\n  function calculate() {\n    var crop = getChecked('crop');\n    var soil = getChecked('soil');\n    var brand = getChecked('brand');\n    var strategy = getChecked('strategy');\n    var phaseGroup = getChecked('phaseGroup');\n    var lawnType = getChecked('lawnType');\n    var ornType = getChecked('ornType');\n    var qty = getVal('zaQty');\n    var stremmaQty = getVal('zaQtyStremma');\n    var data = cropData[crop];\n    var oneOff = isOneOff(crop);\n    var base = calcBaseDose(crop, phaseGroup, qty, stremmaQty, lawnType, ornType);\n    var baseKg = base.kg;\n    var isTreeVine = (data.mode === 'tree' || data.mode === 'vine');\n    var matureKg = baseKg;\n    if (isTreeVine) {\n      if (phaseGroup === 'new') {\n        if (isPositive(qty)) {\n          matureKg = Number(qty) * data.phases.existing.kg;\n        }\n      }\n    }\n    \/\/ For crops where soil doesn't matter (lawn) there is no soil selection.\n    var soilKnown = !ignoresSoil(crop);\n    if (!soil) { soilKnown = false; }\n    var soilPhrase = soilKnown ? soilLabels[soil].toLowerCase() : 'all soil types';\n    var brandKey = brand;\n    var smartBrandNote = '';\n    if (brand === 'best_value') {\n      if (soilKnown) {\n        brandKey = smartByS[soil];\n        smartBrandNote = '\ud83d\udca1 <strong>Smart choice for ' + soilLabels[soil].toLowerCase() + ' soil:<\/strong> ' + smartReason[soil];\n      } else {\n        brandKey = data.smartBrand || 'imerys';\n        smartBrandNote = '\ud83d\udca1 <strong>Smart choice for ' + (data.smartBrandLabel || data.name.toLowerCase()) + ':<\/strong> ' + (data.smartBrandReason || 'The most suitable grain size for this use.');\n      }\n    }\n    var selectedBrand = products[brandKey];\n    var modifier = selectedBrand.doseModifier;\n    var finalKg = baseKg * modifier;\n    var finalMatureKg = matureKg * modifier;\n    \/\/ Fixed grain size where defined (lawn: always fine gravel), otherwise based on soil.\n    var gran = data.fixedGran ? data.fixedGran : soilToGran[soil];\n    var product = selectedBrand[gran];\n    var fallbackNote = '';\n    if (!product) {\n      fallbackNote = '\u26a0\ufe0f ' + selectedBrand.label + ' is not available as powder. We recommend instead:';\n      product = products.imerys.powder;\n      brandKey = 'imerys';\n      modifier = 1.0;\n      finalKg = baseKg * modifier;\n      finalMatureKg = matureKg * modifier;\n    }\n    var plan = applyStrategy(finalKg, finalMatureKg, strategy, phaseGroup, isTreeVine, oneOff);\n    var discount = getDiscount(plan.display);\n    var isWholesale = plan.display >= 23000;\n    \/\/ === PACKAGE SELECTION BY QUANTITY ===\n    \/\/ Very small\/trial (<1.5kg) \u2192 500g Thracian \u00b7 Small (<25kg) \u2192 5kg IMERYS \u00b7 Otherwise \u2192 25kg bags\n    var tier = 'bag25';\n    if (plan.display > 0) {\n      if (plan.display < SMALL_QTY_KG) {\n        tier = 'kg5';\n        if (plan.display < TEST_QTY_KG) {\n          if (greek500[gran]) { tier = 'g500'; }\n        }\n      }\n    }\n    var packKg = (tier === 'g500') ? 0.5 : (tier === 'kg5' ? 5 : 25);\n    var packWord = (tier === 'g500') ? ' \u00d7 500g' : (tier === 'kg5' ? ' \u00d7 5kg' : ' bags');\n    var recName = product.name;\n    var recUrl = product.url;\n    var recPurity = selectedBrand.purity;\n    var pack5Note = '';\n    if (tier === 'g500') {\n      recName = greek500[gran].name;\n      recUrl = greek500[gran].url;\n      recPurity = '80%';\n      pack5Note = 'Very small\/trial quantity \u2192 we recommend the <strong>500g pack (Greek Thracian)<\/strong> in <strong>' + granLabels[gran] + '<\/strong> grain size' + (soilKnown ? (' for ' + soilPhrase + ' soil.') : '.');\n    } else if (tier === 'kg5') {\n      recName = imerys5kg[gran];\n      recUrl = imerys5kg.url;\n      recPurity = '\u226585%';\n      pack5Note = 'Small quantity \u2192 we recommend the <strong>IMERYS 5 kg pack<\/strong> (variable product with all grain sizes). On the product page choose the <strong>' + granLabels[gran] + '<\/strong> grain size' + (soilKnown ? (' for ' + soilPhrase + ' soil.') : ' \u2014 the right one for this use.');\n    }\n    var html = '';\n    if (smartBrandNote) {\n      html += '<div class=\"info-box\"><strong>\ud83e\udd16 Smart Recommendation<\/strong>' + smartBrandNote + '<\/div>';\n    }\n    if (fallbackNote) {\n      html += '<div class=\"warning\"><strong>' + fallbackNote + '<\/strong><\/div>';\n    }\n    if (plan.isOneOff) {\n      html += '<div class=\"info-box\" style=\"background:#eef7e6;border-color:#d6e8c3;\">';\n      html += '<strong>\u2705 One-off application<\/strong>';\n      html += '<strong>' + data.name + '<\/strong> is a perennial crop: the quantity below is applied <strong>once and only once<\/strong>. No repeat application or maintenance dose is needed in the following years \u2014 the zeolite stays active in the soil.';\n      html += '<\/div>';\n    }\n    html += '<h4>\ud83c\udfaf Recommended product<\/h4>';\n    html += '<div class=\"product-card\">';\n    html += '<span class=\"product-name\">' + recName + '<\/span>';\n    html += '<span class=\"product-reason\">Purity: <strong>' + recPurity + ' clinoptilolite<\/strong>';\n    if (modifier > 1) { if (tier === 'bag25') {\n      html += ' \u00b7 Dosage adjusted +20% due to lower purity';\n    } }\n    if (soilKnown) {\n      html += '<br>Grain size: <strong>' + granLabels[gran] + '<\/strong> \u00b7 Ideal for <strong>' + soilPhrase + '<\/strong> soil.';\n    } else {\n      html += '<br>Grain size: <strong>' + granLabels[gran] + '<\/strong> (1\u20132.5 mm \u00b7 IMERYS 0.8\u20132.5 mm) \u00b7 Suitable for <strong>all soil types<\/strong> \u2014 for lawns the grain size does not depend on the soil.';\n    }\n    var pkgLabel = (tier === 'g500') ? '500 g (trial)' : (tier === 'kg5' ? '5 kg (variable)' : '25 kg bags');\n    html += '<br>Packaging: <strong>' + pkgLabel + '<\/strong><\/span>';\n    if (pack5Note) { html += '<span class=\"product-reason\" style=\"display:block;margin-top:0.5rem;\">' + pack5Note + '<\/span>'; }\n    html += '<\/div>';\n    html += '<h4>\ud83d\udcca Dosage calculation<\/h4>';\n    html += '<table class=\"dose-table\">';\n    html += '<tr><th style=\"width:40%;\">Crop<\/th><td>' + data.icon + ' ' + data.name + '<\/td><\/tr>';\n    html += '<tr><th>Base calculation<\/th><td>' + base.breakdown + '<\/td><\/tr>';\n    if (modifier > 1) {\n      html += '<tr><th>Brand adjustment (+20%)<\/th><td>' + fmtKg(baseKg) + ' \u00d7 1.2 = <strong>' + fmtKg(finalKg) + '<\/strong><\/td><\/tr>';\n    }\n    html += '<tr><th>Strategy<\/th><td>' + plan.label + '<\/td><\/tr>';\n    var doseRowLabel = plan.isOneOff ? 'Total dose (one-off)' : 'Dose to order now';\n    if (strategy === 'full3') { if (!plan.isOneOff) { doseRowLabel = plan.is4Year ? 'Total dose (4 years)' : 'Total dose (3 years)'; } }\n    html += '<tr><th>' + doseRowLabel + '<\/th><td><strong style=\"color:var(--za-brand-dark);font-size:1.1rem;\">' + fmtKg(plan.display) + '<\/strong><\/td><\/tr>';\n    if (tier === 'g500') {\n      html += '<tr><th>Packs (500 g)<\/th><td><strong>' + Math.ceil(plan.display \/ 0.5) + ' \u00d7 500 g<\/strong><\/td><\/tr>';\n    } else if (tier === 'kg5') {\n      html += '<tr><th>Packs (5 kg)<\/th><td><strong>' + Math.ceil(plan.display \/ 5) + ' \u00d7 5 kg<\/strong><\/td><\/tr>';\n    } else {\n      html += '<tr><th>Bags (25 kg)<\/th><td><strong>' + discount.sacks + ' bags<\/strong><\/td><\/tr>';\n    }\n    html += '<\/table>';\n    if (discount.percent > 0) { if (tier === 'bag25') {\n      html += '<div class=\"discount-banner\">';\n      html += '<strong>' + discount.savings + '<\/strong><br>';\n      html += 'With ' + discount.sacks + ' bags (' + discount.label + ') you get an automatic <strong>' + discount.percent + '%<\/strong> discount in the cart!';\n      html += '<\/div>';\n    } }\n    if (strategy === 'full3') { if (!plan.isOneOff) {\n      if (plan.is4Year) {\n        html += '<h4>\ud83d\udcc5 4-year programme (New planting)<\/h4>';\n        html += '<p style=\"font-size:0.92rem;color:var(--za-muted);margin:0 0 0.5rem;\">A new planting starts with the planting dose and scales up to the full mature-plant dose over 4 years.<\/p>';\n        html += '<div class=\"timeline\" style=\"grid-template-columns:repeat(4,1fr);\">';\n        html += '<div class=\"year-card now\"><div class=\"year-label\">\ud83c\udf31 Year 1 (planting)<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year1) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year1 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Planting dose<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Year 2<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year2) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year2 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">40% of total<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Year 3<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year3) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year3 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Remainder \/ 2<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Year 4<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year4) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year4 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">Remainder \/ 2<\/div><\/div>';\n        html += '<\/div>';\n      } else {\n        html += '<h4>\ud83d\udcc5 3-year programme<\/h4>';\n        html += '<div class=\"timeline\">';\n        html += '<div class=\"year-card now\"><div class=\"year-label\">\ud83d\udfe2 Year 1 (now)<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year1) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year1 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">40% of the dose<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Year 2<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year2) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year2 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">30% of the dose<\/div><\/div>';\n        html += '<div class=\"year-card\"><div class=\"year-label\">\ud83d\udfe1 Year 3<\/div>';\n        html += '<div class=\"year-kg\">' + fmtKg(plan.year3) + '<\/div>';\n        html += '<div class=\"year-sacks\">' + Math.ceil(plan.year3 \/ packKg) + packWord + '<\/div>';\n        html += '<div class=\"year-percent\">30% of the dose<\/div><\/div>';\n        html += '<\/div>';\n      }\n    } }\n    html += '<h4>\u23f0 Application<\/h4>';\n    html += '<div class=\"info-box\">';\n    html += '<strong>\ud83d\udcc5 Best season:<\/strong>' + data.season + '<br>';\n    html += '<strong>\ud83d\udccf Depth \/ method:<\/strong>' + data.depth;\n    html += '<\/div>';\n    if (isWholesale) {\n      html += '<div class=\"wholesale-cta\">';\n      html += '<strong>\ud83d\ude9a Large quantity (>23 tonnes)<\/strong>';\n      html += 'For a special wholesale price, contact us:';\n      html += '<div class=\"wholesale-btns four\">';\n      html += '<a href=\"tel:+302311295520\">\ud83d\udcde +30 2311 29 55 20<\/a>';\n      html += '<a href=\"https:\/\/wa.me\/306985838343?text=' + encodeURIComponent('Hello! I am interested in a wholesale price for ' + fmtKg(plan.display) + ' of zeolite for ' + data.name + '.') + '\" target=\"_blank\">\ud83d\udcac WhatsApp<\/a>';\n      html += '<a href=\"viber:\/\/chat?number=306985838343\">\ud83d\udfe3 Viber<\/a>';\n      html += '<a href=\"mailto:info@zeolife.gr?subject=' + encodeURIComponent('Wholesale zeolite enquiry') + '\">\u2709\ufe0f Email<\/a>';\n      html += '<\/div><\/div>';\n    }\n    html += '<h4>\ud83d\udca1 Application tips<\/h4>';\n    html += '<ul style=\"line-height:1.8;\">';\n    html += '<li>Apply <strong>before rainfall<\/strong> or water well after application.<\/li>';\n    html += '<li>In <strong>organic farming<\/strong>, natural zeolite is 100% compatible.<\/li>';\n    html += '<li>Zeolite acts as a <strong>slow-release reservoir<\/strong>: it retains fertilisers, water and nutrients for many years.<\/li>';\n    html += '<li>Combine with <strong>regular fertilisation<\/strong> \u2014 zeolite does not replace fertilisers, it makes them more efficient.<\/li>';\n    if (soil === 'light') {\n      html += '<li>In <strong>light, sandy soil<\/strong> we do not recommend powder: it is easily washed or blown away. <strong>Fine gravel 1\u20132.5 mm<\/strong> (IMERYS 0.8\u20132.5 mm) stays in the root zone and keeps working for years.<\/li>';\n    }\n    if (crop === 'lawn') {\n      html += '<li>On an <strong>existing lawn<\/strong>: spread evenly (top-dressing) \u2014 ideally after aeration\/scarifying \u2014 and water well so it works down to the roots.<\/li>';\n      html += '<li>For a <strong>new planting<\/strong>: incorporate the zeolite into the soil before sowing or laying turf \u2014 it reduces water and fertiliser needs for years.<\/li>';\n    }\n    html += '<\/ul>';\n    html += '<div class=\"cta-row\">';\n    html += '<a href=\"' + recUrl + '\" class=\"btn\">\ud83d\uded2 Buy now<\/a>';\n    html += '<a href=\"https:\/\/zeolife.gr\/en\/zeolite-in-agriculture\/\" class=\"btn btn-secondary\">\ud83d\udcd6 Zeolite in agriculture<\/a>';\n    html += '<\/div>';\n    \/\/ === CROSS-SELL: Foliar spraying (complements soil incorporation) ===\n    \/\/ Not relevant for lawns (it concerns the foliage of trees\/crops).\n    if (crop !== 'lawn') {\n    html += '<div class=\"info-box\" style=\"background:#eef7e6;border-color:#d6e8c3;margin-top:1.25rem;\">';\n    html += '<strong>\ud83d\udca8 Complement with foliar spraying<\/strong>';\n    html += 'Soil incorporation works in the <strong>soil<\/strong>; spraying works on the <strong>foliage<\/strong> (sun protection, insect deterrence, higher yield) \u2014 the two <strong>combine<\/strong> for maximum results.<br>';\n    html += '\ud83d\udccb <a href=\"https:\/\/zeolife.gr\/en\/zete-dosage-guide\/\"><strong>ZeTe Dosage Guide<\/strong><\/a> (spray paste)<br>';\n    html += '\ud83e\udea8 Or <strong>Greek Thracian zeolite 20\u00b5<\/strong> for spraying (2% in water, ~5 L\/tree): ';\n    html += '<a href=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-thracian-zeolite-up-to-0-02-mm-20-microns-ultra-fine-powder-3-kg\/\">3 kg<\/a> \u00b7 ';\n    html += '<a href=\"https:\/\/shop.zeolife.gr\/en\/product\/greek-zeolite-20micron\/\">25 kg<\/a>';\n    html += '<\/div>';\n    }\n    html += '<p class=\"disclaimer\"><strong>Note:<\/strong> Dosages are indicative and based on official supplier guidelines for zeolite with \u226580% clinoptilolite. For special cases (organic certification, high salinity, unusual soil chemistry), consult an agronomist. Zeolife.gr provides technical support: +30 2311 29 55 20.<\/p>';\n    resultBody.innerHTML = html;\n    resultBox.classList.add('show');\n    resultBox.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  }\n  calcBtn.addEventListener('click', calculate);\n  \/\/ ===== STICKY PROGRESS BAR (JS-driven position:fixed) =====\n  \/\/ More reliable than CSS position:sticky, which breaks when a parent element\n  \/\/ of the theme (WordPress\/Kadence\/WPBakery) has overflow. Also accounts for the\n  \/\/ WP admin bar height so it shows correctly for logged-in users.\n  var progressEl = calc.querySelector('.progress');\n  var progressSpacer = document.getElementById('zaProgressSpacer');\n  var progFlowHeight = 0;\n  function zaMeasure() {\n    if (!progressEl) return;\n    var mb = parseFloat(window.getComputedStyle(progressEl).marginBottom) || 0;\n    progFlowHeight = progressEl.offsetHeight + mb;\n  }\n  \/\/ How high the pinned elements sit at the top: WP admin bar + Kadence sticky\n  \/\/ menu. Measured DYNAMICALLY on every scroll, so the bar always sits EXACTLY\n  \/\/ below the menu \u2014 on desktop and mobile, with or without the admin bar.\n  var ZA_EXTRA_OFFSET = 0; \/\/ optional extra gap in px (e.g. 6) if you want some breathing room\n  function zaFixedTopBottom(el) {\n    if (!el) return 0;\n    var cs = window.getComputedStyle(el);\n    if (cs.position !== 'fixed') return 0;\n    if (cs.display === 'none') return 0;\n    if (cs.visibility === 'hidden') return 0;\n    var r = el.getBoundingClientRect();\n    if (r.height === 0) return 0;\n    if (r.top > 300) return 0;   \/\/ must sit at the top, not somewhere lower\n    if (r.bottom <= 0) return 0;\n    return r.bottom;\n  }\n  function zaTopOffset() {\n    var offset = 0;\n    var ab = zaFixedTopBottom(document.getElementById('wpadminbar'));\n    if (ab > offset) { offset = ab; }\n    var heads = document.querySelectorAll('.kadence-sticky-header');\n    for (var i = 0; i < heads.length; i++) {\n      var hb = zaFixedTopBottom(heads[i]);\n      if (hb > offset) { offset = hb; }\n    }\n    return offset + ZA_EXTRA_OFFSET;\n  }\n  var zaPinned = false;\n  function zaUpdateSticky() {\n    if (!progressEl) return;\n    var offset = zaTopOffset();\n    var rect = calc.getBoundingClientRect();\n    \/\/ WordPress-safe: keep the comparison without less-than and without logical-AND\n    \/\/ on the same line, so the WP editor doesn't mistake it for an HTML tag.\n    var shouldPin = false;\n    if (offset >= rect.top) {\n      if (rect.bottom > (offset + 24)) { shouldPin = true; }\n    }\n    if (shouldPin) {\n      var s = progressEl.style;\n      s.position = 'fixed'; s.top = offset + 'px'; s.left = rect.left + 'px';\n      s.width = rect.width + 'px'; s.zIndex = '99999';\n      progressEl.classList.add('za-stuck');\n      if (progressSpacer) progressSpacer.style.height = progFlowHeight + 'px';\n      zaPinned = true;\n    } else if (zaPinned || progressEl.style.position === 'fixed') {\n      var s2 = progressEl.style;\n      s2.position = ''; s2.top = ''; s2.left = ''; s2.width = ''; s2.zIndex = '';\n      progressEl.classList.remove('za-stuck');\n      if (progressSpacer) progressSpacer.style.height = '0px';\n      zaPinned = false;\n    }\n  }\n  zaMeasure();\n  window.addEventListener('load', function() { zaMeasure(); zaUpdateSticky(); });\n  window.addEventListener('scroll', zaUpdateSticky, { passive: true });\n  window.addEventListener('resize', function() { zaMeasure(); zaUpdateSticky(); });\n  zaUpdateSticky();\n  updateProgress();\n})();\n<\/script>\n\n<!-- ==== ZL PRINT: \u03b5\u03ba\u03c4\u03c5\u03c0\u03ce\u03bd\u03b5\u03b9 \u039c\u039f\u039d\u039f \u03c4\u03bf \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bf\u03b4\u03b7\u03b3\u03bf\u03cd (\u03c7\u03c9\u03c1\u03af\u03c2 header\/\u03bc\u03b5\u03bd\u03bf\u03cd\/\u03c4\u03af\u03c4\u03bb\u03bf\/footer\/newsletter\/ZeoBot) ==== -->\n<script>\n(function(){\n  if (window.zlPrintOnlyResult) { return; }\n  window.zlPrintOnlyResult = true;\n  var zlHidden = null;\n  function zlHide(el) {\n    if (el.tagName === 'SCRIPT') { return; }\n    if (el.tagName === 'STYLE') { return; }\n    if (el.tagName === 'LINK') { return; }\n    zlHidden.push([el, el.style.getPropertyValue('display'), el.style.getPropertyPriority('display')]);\n    el.style.setProperty('display', 'none', 'important');\n  }\n  function zlStyle(el, prop, val) {\n    zlHidden.push([el, el.style.getPropertyValue(prop), el.style.getPropertyPriority(prop), prop]);\n    el.style.setProperty(prop, val, 'important');\n  }\n  function zlPrintPrep() {\n    if (zlHidden) { return; }\n    var res = document.querySelector('.zlcalc .result.show');\n    if (!res) { return; }\n    zlHidden = [];\n    var node = res;\n    while (node.parentElement) {\n      var parent = node.parentElement;\n      var sibs = parent.children;\n      for (var i = 0; i !== sibs.length; i++) {\n        if (sibs[i] !== node) { zlHide(sibs[i]); }\n      }\n      if (parent === document.body) { break; }\n      zlStyle(parent, 'margin', '0');\n      zlStyle(parent, 'padding', '0');\n      zlStyle(parent, 'border', '0');\n      zlStyle(parent, 'box-shadow', 'none');\n      zlStyle(parent, 'max-width', 'none');\n      node = parent;\n    }\n  }\n  function zlPrintRestore() {\n    if (!zlHidden) { return; }\n    for (var i = zlHidden.length - 1; i !== -1; i--) {\n      var h = zlHidden[i];\n      var prop = h[3] ? h[3] : 'display';\n      if (h[1]) { h[0].style.setProperty(prop, h[1], h[2]); } else { h[0].style.removeProperty(prop); }\n    }\n    zlHidden = null;\n  }\n  window.addEventListener('beforeprint', zlPrintPrep);\n  window.addEventListener('afterprint', zlPrintRestore);\n  if (window.matchMedia) {\n    var mq = window.matchMedia('print');\n    var onChange = function(e) { if (e.matches) { zlPrintPrep(); } else { zlPrintRestore(); } };\n    if (mq.addEventListener) { mq.addEventListener('change', onChange); } else if (mq.addListener) { mq.addListener(onChange); }\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf3e Zeolite Dosage Guide for Agricultural Use Give us 5 pieces of information and we&#8217;ll recommend the right product from our 3 ranges (Greek Thracian, IMERYS, ZeoGravel\u00ae ZEOCEM) with exact dosage, a 3-year programme and automatic discount calculation. \ud83d\udccb 5-step guide 15 crops 3 brands \u00d7 9 products 3-year programme Auto-discount up to 40% 1Choose&#8230;<\/p>\n","protected":false},"author":7,"featured_media":13886,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-17926","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.8 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Zeolite Agricultural Dosage Calculator<\/title>\n<meta name=\"description\" content=\"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.\" \/>\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\/en\/zeolite-agriculture-dosage-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zeolite Agricultural Dosage Calculator\" \/>\n<meta property=\"og:description\" content=\"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Greek Zeolite, Zeolite products and industrial minerals | Zeolife.gr\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/zeolifegr\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-04T10:19:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"413\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ZeolifeGr\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/\",\"name\":\"Zeolite Agricultural Dosage Calculator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"datePublished\":\"2026-06-09T15:18:51+00:00\",\"dateModified\":\"2026-10-04T10:19:40+00:00\",\"description\":\"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"contentUrl\":\"https:\\\/\\\/zeolife.gr\\\/wp-content\\\/uploads\\\/2014\\\/11\\\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg\",\"width\":600,\"height\":413,\"caption\":\"\u0391\u03b3\u03bf\u03c1\u03ac \u03b6\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c5 \u03ba\u03b1\u03b9 \u03c3\u03c5\u03bc\u03b2\u03bf\u03c5\u03bb\u03b5\u03c5\u03c4\u03b9\u03ba\u03ae \u03b1\u03c0\u03cc \u03c4\u03b7 Zeolife.gr\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/zeolite-agriculture-dosage-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zeolite Agricultural Dosage Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/\",\"name\":\"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0396\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2 & \u0392\u03b9\u03bf\u03bc\u03b7\u03c7\u03b1\u03bd\u03b9\u03ba\u03ac \u039f\u03c1\u03c5\u03ba\u03c4\u03ac \u2013 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ad\u03c2 & \u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 | Zeolife.gr\",\"description\":\"Applications and purchase of Greek zeolite, zeolite products and industrial minerals | Zeolife.gr\",\"publisher\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#organization\"},\"alternateName\":\"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0396\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2: \u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2, \u03a7\u03c1\u03ae\u03c3\u03b5\u03b9\u03c2 & \u03a0\u03c1\u03bf\u03ca\u03cc\u03bd\u03c4\u03b1 | Zeolife.gr\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#organization\",\"name\":\"Zeolite | Diatomite | Zeolife.gr\",\"alternateName\":\"Zeolife.gr\",\"url\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#\\\/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\":\"Zeolite | Diatomite | Zeolife.gr\"},\"image\":{\"@id\":\"https:\\\/\\\/zeolife.gr\\\/en\\\/#\\\/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\"],\"description\":\"\u03a6\u03c5\u03c3\u03b9\u03ba\u03cc\u03c2 \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u03ba\u03bb\u03b9\u03bd\u03bf\u03c0\u03c4\u03b9\u03bb\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03b3\u03b5\u03c9\u03c1\u03b3\u03af\u03b1, \u03c5\u03b3\u03b5\u03af\u03b1 \u03ba\u03b1\u03b9 \u03b2\u03b9\u03bf\u03bc\u03b7\u03c7\u03b1\u03bd\u03af\u03b1. \u0391\u03c0\u03cc \u03c4\u03bf 2010.\",\"email\":\"info@zeolife.gr\",\"telephone\":\"2311295520\",\"foundingDate\":\"2010-01-01\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1\",\"maxValue\":\"10\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Zeolite Agricultural Dosage Calculator","description":"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.","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\/en\/zeolite-agriculture-dosage-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Zeolite Agricultural Dosage Calculator","og_description":"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.","og_url":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/","og_site_name":"Greek Zeolite, Zeolite products and industrial minerals | Zeolife.gr","article_publisher":"https:\/\/www.facebook.com\/zeolifegr","article_modified_time":"2026-10-04T10:19:40+00:00","og_image":[{"width":600,"height":413,"url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@ZeolifeGr","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/","url":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/","name":"Zeolite Agricultural Dosage Calculator","isPartOf":{"@id":"https:\/\/zeolife.gr\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/#primaryimage"},"image":{"@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","datePublished":"2026-06-09T15:18:51+00:00","dateModified":"2026-10-04T10:19:40+00:00","description":"Interactive dosage calculator for agricultural zeolite use: olive trees, vineyard, walnut, fruit trees, cereals, lawn, ornamentals.","breadcrumb":{"@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/#primaryimage","url":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","contentUrl":"https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg","width":600,"height":413,"caption":"\u0391\u03b3\u03bf\u03c1\u03ac \u03b6\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c5 \u03ba\u03b1\u03b9 \u03c3\u03c5\u03bc\u03b2\u03bf\u03c5\u03bb\u03b5\u03c5\u03c4\u03b9\u03ba\u03ae \u03b1\u03c0\u03cc \u03c4\u03b7 Zeolife.gr"},{"@type":"BreadcrumbList","@id":"https:\/\/zeolife.gr\/en\/zeolite-agriculture-dosage-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zeolife.gr\/en\/"},{"@type":"ListItem","position":2,"name":"Zeolite Agricultural Dosage Calculator"}]},{"@type":"WebSite","@id":"https:\/\/zeolife.gr\/en\/#website","url":"https:\/\/zeolife.gr\/en\/","name":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0396\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2 & \u0392\u03b9\u03bf\u03bc\u03b7\u03c7\u03b1\u03bd\u03b9\u03ba\u03ac \u039f\u03c1\u03c5\u03ba\u03c4\u03ac \u2013 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ad\u03c2 & \u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 | Zeolife.gr","description":"Applications and purchase of Greek zeolite, zeolite products and industrial minerals | Zeolife.gr","publisher":{"@id":"https:\/\/zeolife.gr\/en\/#organization"},"alternateName":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u0396\u03b5\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2: \u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2, \u03a7\u03c1\u03ae\u03c3\u03b5\u03b9\u03c2 & \u03a0\u03c1\u03bf\u03ca\u03cc\u03bd\u03c4\u03b1 | Zeolife.gr","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zeolife.gr\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zeolife.gr\/en\/#organization","name":"Zeolite | Diatomite | Zeolife.gr","alternateName":"Zeolife.gr","url":"https:\/\/zeolife.gr\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zeolife.gr\/en\/#\/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":"Zeolite | Diatomite | Zeolife.gr"},"image":{"@id":"https:\/\/zeolife.gr\/en\/#\/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"],"description":"\u03a6\u03c5\u03c3\u03b9\u03ba\u03cc\u03c2 \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03cc\u03c2 \u03ba\u03bb\u03b9\u03bd\u03bf\u03c0\u03c4\u03b9\u03bb\u03cc\u03bb\u03b9\u03b8\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03b3\u03b5\u03c9\u03c1\u03b3\u03af\u03b1, \u03c5\u03b3\u03b5\u03af\u03b1 \u03ba\u03b1\u03b9 \u03b2\u03b9\u03bf\u03bc\u03b7\u03c7\u03b1\u03bd\u03af\u03b1. \u0391\u03c0\u03cc \u03c4\u03bf 2010.","email":"info@zeolife.gr","telephone":"2311295520","foundingDate":"2010-01-01","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1","maxValue":"10"}}]}},"taxonomy_info":[],"featured_image_src_large":["https:\/\/zeolife.gr\/wp-content\/uploads\/2014\/11\/amp-header-buy-zeolite-zeolifegr-600x413px.jpg",600,413,false],"author_info":{"display_name":"\u03a7\u03c1\u03c5\u03c3\u03bf\u03b2\u03b1\u03bb\u03ac\u03bd\u03c4\u03b7\u03c2 \u03a7\u03b1\u03c4\u03b6\u03b7\u03b3\u03b5\u03c9\u03c1\u03b3\u03af\u03bf\u03c5","author_link":"https:\/\/zeolife.gr\/en\/author\/valantis\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/pages\/17926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/comments?post=17926"}],"version-history":[{"count":10,"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/pages\/17926\/revisions"}],"predecessor-version":[{"id":18925,"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/pages\/17926\/revisions\/18925"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/media\/13886"}],"wp:attachment":[{"href":"https:\/\/zeolife.gr\/en\/wp-json\/wp\/v2\/media?parent=17926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}