cropguard-system / cropguard.html
The-Bricklayer7's picture
Upload 1069 files
403f212 verified
Raw
History Blame Contribute Delete
79.6 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="theme-color" content="#1b3a1f">
<title>CropGuard GH β€” Crop Disease Detector</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600;9..144,900&family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root{
--soil:#2a1d12;--leaf:#1b3a1f;--leaf-2:#27532c;--grass:#4e9d4e;--grass-bright:#6fc46f;
--gold:#e9a625;--gold-soft:#f6c75a;--cream:#f7f1e3;--cream-2:#efe6d2;--paper:#fffdf7;
--early:#3fa34d;--moderate:#e9a625;--severe:#cf3b2f;--ink:#241a10;--ink-soft:#5b4f3e;--line:#e2d6bd;
--shadow:0 14px 40px -16px rgba(40,28,10,.45);--shadow-sm:0 6px 18px -8px rgba(40,28,10,.4);--radius:22px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;padding:0;}
body{font-family:'Outfit',system-ui,sans-serif;color:var(--ink);
background:radial-gradient(120% 80% at 100% 0%, rgba(233,166,37,.10), transparent 60%),radial-gradient(120% 80% at 0% 100%, rgba(78,157,78,.12), transparent 55%),var(--cream);
min-height:100vh;-webkit-font-smoothing:antialiased;}
.app{max-width:560px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;position:relative;}
header{padding:18px 20px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:0;z-index:30;
background:linear-gradient(180deg, var(--cream) 70%, rgba(247,241,227,0));}
.brand{display:flex;align-items:center;gap:11px;}
.logo{width:46px;height:46px;border-radius:14px;flex:none;background:linear-gradient(150deg,var(--leaf),var(--leaf-2));display:grid;place-items:center;box-shadow:var(--shadow-sm);overflow:hidden;}
.logo svg{width:27px;height:27px;}
.brand-text h1{font-family:'Fraunces',serif;font-weight:900;font-size:1.18rem;margin:0;line-height:1;letter-spacing:-.02em;}
.brand-text span{font-size:.72rem;color:var(--ink-soft);font-weight:500;letter-spacing:.02em;}
.lang-toggle{border:1.5px solid var(--line);background:var(--paper);border-radius:999px;padding:7px 4px;display:flex;gap:2px;font-size:.78rem;font-weight:600;box-shadow:var(--shadow-sm);}
.lang-toggle button{border:none;background:none;font:inherit;color:var(--ink-soft);padding:5px 11px;border-radius:999px;cursor:pointer;transition:.2s;}
.lang-toggle button.on{background:var(--leaf);color:var(--cream);}
main{flex:1;padding:6px 20px 30px;}
.screen{display:none;animation:rise .5s cubic-bezier(.2,.8,.2,1) both;}
.screen.active{display:block;}
@keyframes rise{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:none;}}
.hero{background:linear-gradient(160deg,var(--leaf),var(--leaf-2) 70%,#1f4422);border-radius:28px;padding:26px 24px 28px;color:var(--cream);box-shadow:var(--shadow);position:relative;overflow:hidden;margin-top:4px;}
.hero::after{content:"";position:absolute;right:-40px;bottom:-50px;width:200px;height:200px;background:radial-gradient(circle,rgba(111,196,111,.35),transparent 70%);}
.hero .eyebrow{font-size:.74rem;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-soft);font-weight:600;}
.hero h2{font-family:'Fraunces',serif;font-weight:900;font-size:1.85rem;line-height:1.08;margin:.5rem 0 .6rem;letter-spacing:-.02em;}
.hero p{margin:0;color:#dfeede;font-size:.96rem;line-height:1.5;max-width:36ch;}
.steps{display:flex;gap:8px;margin-top:20px;position:relative;z-index:2;}
.steps .step{flex:1;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:10px 8px;text-align:center;}
.steps .step .n{font-family:'Fraunces',serif;font-weight:900;font-size:1.1rem;color:var(--gold-soft);}
.steps .step .t{font-size:.68rem;color:#cfe3ce;margin-top:2px;line-height:1.25;}
.cta{margin-top:18px;width:100%;border:none;cursor:pointer;font:inherit;background:linear-gradient(135deg,var(--gold),var(--gold-soft));color:#3a2a08;font-weight:700;font-size:1.12rem;padding:20px;border-radius:20px;display:flex;align-items:center;justify-content:center;gap:12px;box-shadow:0 12px 28px -10px rgba(233,166,37,.7);transition:transform .15s, box-shadow .15s;}
.cta:active{transform:scale(.98);}
.cta svg{width:26px;height:26px;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;}
.ghost{border:1.5px solid var(--line);background:var(--paper);color:var(--leaf);font:inherit;font-weight:600;font-size:.92rem;padding:15px;border-radius:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:var(--shadow-sm);transition:.15s;}
.ghost:active{transform:scale(.98);}
.ghost svg{width:20px;height:20px;}
.crops{margin-top:22px;}
.crops h3{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 10px;font-weight:600;}
.crop-pills{display:flex;gap:8px;flex-wrap:wrap;}
.pill{background:var(--paper);border:1.5px solid var(--line);border-radius:999px;padding:8px 14px;font-size:.85rem;font-weight:600;color:var(--leaf-2);display:flex;align-items:center;gap:7px;box-shadow:var(--shadow-sm);}
.pill .dot{width:8px;height:8px;border-radius:50%;background:var(--grass);}
.preview-wrap{margin-top:6px;}
.preview-card{background:var(--paper);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;border:1px solid var(--line);}
.preview-img{width:100%;aspect-ratio:4/3;object-fit:cover;background:#e7dcc4;display:block;}
.preview-body{padding:18px;}
.preview-body h3{font-family:'Fraunces',serif;font-weight:600;margin:0 0 4px;font-size:1.2rem;}
.preview-body p{margin:0 0 16px;color:var(--ink-soft);font-size:.9rem;line-height:1.45;}
.preview-actions{display:grid;grid-template-columns:1fr 1.4fr;gap:10px;}
.loading{text-align:center;padding:60px 24px;}
.scanner{width:170px;height:170px;margin:0 auto 26px;border-radius:26px;position:relative;overflow:hidden;box-shadow:var(--shadow);border:1px solid var(--line);}
.scanner img{width:100%;height:100%;object-fit:cover;display:block;}
.scan-line{position:absolute;left:0;right:0;height:42%;top:-42%;background:linear-gradient(180deg,rgba(111,196,111,0),rgba(111,196,111,.55));border-bottom:2.5px solid var(--grass-bright);animation:scan 1.6s ease-in-out infinite;mix-blend-mode:screen;}
@keyframes scan{0%{top:-42%;}50%{top:100%;}100%{top:-42%;}}
.loading h3{font-family:'Fraunces',serif;font-weight:600;font-size:1.4rem;margin:0 0 6px;}
.loading p{color:var(--ink-soft);margin:0;}
.dots span{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--grass);margin:0 3px;animation:bob 1s infinite;}
.dots span:nth-child(2){animation-delay:.15s;}
.dots span:nth-child(3){animation-delay:.3s;}
@keyframes bob{0%,100%{transform:translateY(0);opacity:.5;}50%{transform:translateY(-7px);opacity:1;}}
.result-hero{border-radius:24px;padding:20px;color:#fff;position:relative;overflow:hidden;box-shadow:var(--shadow);}
.result-hero.healthy{background:linear-gradient(150deg,#2e7d3a,#3fa34d);}
.result-hero.diseased{background:linear-gradient(150deg,var(--leaf),var(--leaf-2));}
.rh-top{display:flex;align-items:center;gap:14px;}
.rh-thumb{width:74px;height:74px;border-radius:16px;object-fit:cover;flex:none;border:2px solid rgba(255,255,255,.3);}
.rh-label{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.7);font-weight:600;}
.rh-name{font-family:'Fraunces',serif;font-weight:900;font-size:1.5rem;line-height:1.05;margin:3px 0 6px;letter-spacing:-.01em;}
.rh-crop{font-size:.88rem;color:rgba(255,255,255,.85);}
.confidence{margin-top:16px;}
.confidence .clab{display:flex;justify-content:space-between;font-size:.8rem;color:rgba(255,255,255,.85);margin-bottom:6px;font-weight:500;}
.conf-bar{height:9px;border-radius:999px;background:rgba(255,255,255,.2);overflow:hidden;}
.conf-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--gold-soft),var(--gold));width:0;transition:width 1s cubic-bezier(.2,.8,.2,1);}
.badges{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-top:14px;}
.badge{border-radius:18px;padding:14px 15px;background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow-sm);}
.badge .blab{font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);font-weight:600;}
.badge .bval{display:flex;align-items:center;gap:9px;margin-top:7px;font-weight:700;font-size:1.05rem;}
.sev-dot{width:14px;height:14px;border-radius:50%;flex:none;}
.sev-early{color:var(--early);} .sev-early .sev-dot{background:var(--early);}
.sev-moderate{color:#b9821a;} .sev-moderate .sev-dot{background:var(--moderate);}
.sev-severe{color:var(--severe);} .sev-severe .sev-dot{background:var(--severe);}
.urg{display:flex;align-items:center;gap:9px;margin-top:7px;font-weight:700;font-size:1.05rem;}
.urg svg{width:20px;height:20px;}
.urg.routine{color:var(--early);} .urg.urgent{color:#b9821a;} .urg.emergency{color:var(--severe);}
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:20px;margin-top:14px;}
.card h4{font-family:'Fraunces',serif;font-weight:600;font-size:1.15rem;margin:0 0 4px;display:flex;align-items:center;gap:9px;}
.card h4 svg{width:22px;height:22px;color:var(--grass);}
.card .sub{font-size:.82rem;color:var(--ink-soft);margin:0 0 14px;}
.tx-list{list-style:none;padding:0;margin:0;counter-reset:tx;}
.tx-list li{counter-increment:tx;display:flex;gap:13px;padding:12px 0;border-bottom:1px dashed var(--line);}
.tx-list li:last-child{border-bottom:none;padding-bottom:0;}
.tx-list li::before{content:counter(tx);flex:none;width:28px;height:28px;border-radius:9px;background:var(--leaf);color:var(--cream);font-weight:700;font-size:.9rem;display:grid;place-items:center;}
.tx-list li .txt{font-size:.93rem;line-height:1.45;padding-top:3px;}
.tx-list li .txt b{color:var(--leaf-2);}
.chem{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;}
.chem .c{background:var(--cream-2);border-radius:10px;padding:8px 12px;font-size:.84rem;font-weight:600;color:var(--soil);display:flex;align-items:center;gap:7px;}
.chem .c svg{width:15px;height:15px;color:var(--gold);}
.about-grid{display:grid;gap:12px;}
.about-grid .ai{display:flex;gap:12px;}
.about-grid .ai .ic{width:38px;height:38px;border-radius:11px;background:var(--cream-2);display:grid;place-items:center;flex:none;}
.about-grid .ai .ic svg{width:20px;height:20px;color:var(--leaf-2);}
.about-grid .ai .tt b{display:block;font-size:.88rem;margin-bottom:1px;}
.about-grid .ai .tt span{font-size:.85rem;color:var(--ink-soft);line-height:1.4;}
.disclaimer{display:flex;gap:11px;background:#fff7e6;border:1px solid #f2dca0;border-radius:16px;padding:14px 15px;margin-top:14px;}
.disclaimer svg{width:20px;height:20px;color:var(--gold);flex:none;margin-top:1px;}
.disclaimer p{margin:0;font-size:.83rem;color:#7a5e1a;line-height:1.45;}
.result-foot{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-top:18px;}
.feedback-bar{margin-top:14px;background:var(--paper);border:1px solid var(--line);border-radius:16px;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:10px;}
.feedback-bar span{font-size:.86rem;font-weight:600;}
.fb-btns{display:flex;gap:8px;}
.fb-btns button{border:1.5px solid var(--line);background:var(--cream);border-radius:11px;padding:8px 11px;cursor:pointer;font-size:1.1rem;transition:.15s;}
.fb-btns button:active{transform:scale(.92);}
.fb-btns button.picked{background:var(--leaf);border-color:var(--leaf);}
.sheet{position:fixed;inset:0;z-index:60;display:none;}
.sheet.open{display:block;}
.sheet-bg{position:absolute;inset:0;background:rgba(36,26,16,.5);backdrop-filter:blur(3px);animation:fade .3s;}
@keyframes fade{from{opacity:0;}to{opacity:1;}}
.sheet-panel{position:absolute;left:0;right:0;bottom:0;max-width:560px;margin:0 auto;background:var(--paper);border-radius:26px 26px 0 0;padding:8px 22px 30px;box-shadow:0 -10px 40px -10px rgba(0,0,0,.3);animation:slideup .35s cubic-bezier(.2,.8,.2,1);max-height:86vh;overflow:auto;}
@keyframes slideup{from{transform:translateY(100%);}to{transform:none;}}
.grab{width:42px;height:5px;border-radius:999px;background:var(--line);margin:8px auto 16px;}
.sheet-panel h3{font-family:'Fraunces',serif;font-weight:600;font-size:1.3rem;margin:0 0 14px;}
.faq{border-bottom:1px solid var(--line);padding:13px 0;}
.faq b{display:block;font-size:.95rem;margin-bottom:4px;color:var(--leaf-2);}
.faq p{margin:0;font-size:.88rem;color:var(--ink-soft);line-height:1.5;}
.close-sheet{margin-top:18px;width:100%;background:var(--leaf);color:var(--cream);border:none;font:inherit;font-weight:700;font-size:1rem;padding:16px;border-radius:15px;cursor:pointer;}
.mode-tag{display:inline-flex;align-items:center;gap:6px;font-size:.72rem;font-weight:600;color:var(--ink-soft);background:var(--cream-2);padding:5px 10px;border-radius:999px;margin-top:12px;}
.mode-tag .live{width:8px;height:8px;border-radius:50%;background:var(--grass);box-shadow:0 0 0 3px rgba(78,157,78,.25);}
footer{text-align:center;padding:8px 20px 22px;color:var(--ink-soft);font-size:.74rem;}
footer b{color:var(--leaf-2);}
.hidden{display:none !important;}
</style>
</head>
<body>
<div class="app">
<header>
<div class="brand">
<div class="logo" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none"><path d="M12 21c0-6 3-11 8-13-1 7-4 11-8 13Z" fill="#6fc46f"/><path d="M12 21C8 19 5 13 4 6c5 2 8 7 8 13Z" fill="#4e9d4e"/><path d="M12 21v-9" stroke="#e9a625" stroke-width="1.6" stroke-linecap="round"/></svg>
</div>
<div class="brand-text">
<h1>CropGuard GH</h1>
<span data-i="tagline"></span>
</div>
</div>
<div class="lang-toggle" role="group" aria-label="Language">
<button id="langEn" class="on" onclick="setLang('en')">EN</button>
<button id="langTw" onclick="setLang('tw')">TWI</button>
</div>
</header>
<main>
<section class="screen active" id="home">
<div class="hero">
<div class="eyebrow" data-i="heroEye"></div>
<h2 data-i="heroTitle"></h2>
<p data-i="heroText"></p>
<div class="steps">
<div class="step"><div class="n">1</div><div class="t" data-i="s1"></div></div>
<div class="step"><div class="n">2</div><div class="t" data-i="s2"></div></div>
<div class="step"><div class="n">3</div><div class="t" data-i="s3"></div></div>
<div class="step"><div class="n">4</div><div class="t" data-i="s4"></div></div>
</div>
</div>
<button class="cta" onclick="openCamera()">
<svg viewBox="0 0 24 24" fill="none"><path d="M4 8a2 2 0 0 1 2-2h1.5l1-2h5l1 2H18a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8Z" stroke="#3a2a08" stroke-width="1.8"/><circle cx="12" cy="12.5" r="3.5" stroke="#3a2a08" stroke-width="1.8"/></svg>
<span data-i="snap"></span>
</button>
<div class="row2">
<button class="ghost" onclick="openGallery()">
<svg viewBox="0 0 24 24" fill="none"><rect x="3" y="5" width="18" height="14" rx="2" stroke="currentColor" stroke-width="1.8"/><path d="m3 16 4-4 3 3 4-5 7 7" stroke="currentColor" stroke-width="1.8" fill="none"/><circle cx="8.5" cy="9.5" r="1.5" fill="currentColor"/></svg>
<span data-i="gallery"></span>
</button>
<button class="ghost" onclick="openHelp()">
<svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.8"/><path d="M9.5 9.5a2.5 2.5 0 1 1 3.5 2.3c-.7.3-1 .8-1 1.7" stroke="currentColor" stroke-width="1.8" fill="none" stroke-linecap="round"/><circle cx="12" cy="16.5" r="1" fill="currentColor"/></svg>
<span data-i="help"></span>
</button>
</div>
<div class="crops">
<h3 data-i="cropsTitle"></h3>
<div class="crop-pills" id="cropPills"></div>
</div>
</section>
<section class="screen" id="preview">
<div class="preview-wrap">
<div class="preview-card">
<img id="previewImg" class="preview-img" alt="leaf">
<div class="preview-body">
<h3 data-i="checkTitle"></h3>
<p data-i="checkText"></p>
<div class="preview-actions">
<button class="ghost" onclick="goHome()">
<svg viewBox="0 0 24 24" fill="none"><path d="m15 5-7 7 7 7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
<span data-i="retake"></span>
</button>
<button class="cta" style="margin-top:0;font-size:1rem;padding:15px" onclick="analyse()">
<svg viewBox="0 0 24 24" fill="none"><path d="M11 4a7 7 0 1 0 4.5 12.4L20 21" stroke="#3a2a08" stroke-width="2" stroke-linecap="round"/></svg>
<span data-i="analyse"></span>
</button>
</div>
</div>
</div>
</div>
</section>
<section class="screen" id="loading">
<div class="loading">
<div class="scanner"><img id="scanImg" alt=""><div class="scan-line"></div></div>
<h3 data-i="analysing"></h3>
<p data-i="analysingSub"></p>
<div class="dots" style="margin-top:18px"><span></span><span></span><span></span></div>
</div>
</section>
<section class="screen" id="result"></section>
</main>
<footer>
<span class="mode-tag" id="modeTag"><span class="live"></span><span id="modeTxt"></span></span>
<div style="margin-top:8px">CropGuard GH Β· <b>Final Year Project</b> Β· Oppong David Β· KsTU</div>
</footer>
</div>
<div class="sheet" id="sheet">
<div class="sheet-bg" onclick="closeSheet()"></div>
<div class="sheet-panel">
<div class="grab"></div>
<h3 id="sheetTitle"></h3>
<div id="sheetBody"></div>
<button class="close-sheet" onclick="closeSheet()" data-i="gotit"></button>
</div>
</div>
<input type="file" id="fileCam" accept="image/*" capture="environment" class="hidden" onchange="handleFile(event)">
<input type="file" id="fileGal" accept="image/*" class="hidden" onchange="handleFile(event)">
<script>
/* ============================================================
CropGuard GH β€” bilingual single file (English / Twi toggle)
Covers locally cultivated Ghanaian crops.
Inference: BACKEND (FastAPI/CNN) if an API URL is set,
otherwise a real on-device colour/lesion estimate.
============================================================ */
const API_URL = localStorage.getItem('cropguard_api') || "";
const DATA = {"crops": {"en": ["Maize", "Cassava", "Tomato", "Cocoa", "Cashew", "Plantain", "Yam", "Pepper", "Cowpea", "Groundnut", "Rice", "Okra", "Garden Egg", "Mango"], "tw": ["Aburo", "Bankye", "Ntoosi", "Kookoo", "Cashew", "BΙ”rΙ”deΙ›", "BayerΙ›", "Mako", "Adua", "NkateΙ›", "Ɛmo", "Nkruma", "Ntoroba", "Mango"]}, "t": {"en": {"tagline": "Snap a leaf. Know the disease.", "heroEye": "Built for Ghana's farmers", "heroTitle": "Diagnose crop disease in seconds", "heroText": "Take a photo of a sick leaf. Get the disease name, how serious it is, and exactly what to do β€” free, no sign-up.", "s1": "Take photo", "s2": "Wait a moment", "s3": "Get diagnosis", "s4": "Treat the crop", "snap": "Take a photo of a leaf", "gallery": "Choose from gallery", "help": "How to use it", "cropsTitle": "Ghanaian crops we detect", "checkTitle": "Is this the right photo?", "checkText": "Make sure the diseased leaf fills most of the frame and is in focus. Good light helps.", "retake": "Retake", "analyse": "Analyse crop", "analysing": "Analysing the leaf…", "analysingSub": "Checking colour, spots and damage", "helpTitle": "How to use CropGuard", "gotit": "Got it", "modeDevice": "On-device analysis", "modeServer": "Connected to AI model", "confidence": "Confidence", "disease": "Detected disease", "severityL": "Severity", "urgencyL": "Urgency", "treat": "What to do now", "treatSub": "Follow these steps in order β€” most urgent first.", "products": "Suggested products", "about": "About this disease", "cause": "Cause", "routine": "Routine", "urgent": "Urgent", "emergency": "Emergency", "again": "Scan another leaf", "share": "Share result", "fbQ": "Was this correct?", "disc": "This is a diagnostic aid, not a replacement for an agricultural extension officer. For unusual or severe cases, consult MoFA, COCOBOD or your district officer.", "notleaf": "Hmm β€” this doesn't look like a clear crop leaf. Try again with the leaf filling the frame in good light.", "notLeafTitle": "Not a clear leaf", "noDisease": "No disease detected", "noDiseaseSub": "This leaf looks healthy. Keep monitoring your field weekly and maintain good spacing, weeding and drainage.", "copied": "Result copied."}, "tw": {"tagline": "Twa nhaban mfonini. Hu yare no.", "heroEye": "YΙ›yΙ› maa Ghana akuafo", "heroTitle": "Hu nnΙ”bae yare wΙ” mmere tiaa mu", "heroText": "Twa nhaban a yare aka mfonini. Nya yare no din, sΙ›nea Ι›yΙ› den, ne nea Ι›sΙ› sΙ› woyΙ› β€” kwa, na wonni kraman.", "s1": "Twa mfonini", "s2": "TwΙ›n kakra", "s3": "Nya mmuae", "s4": "Sa nnΙ”bae no", "snap": "Twa nhaban mfonini", "gallery": "Yi fi mfonini mu", "help": "SΙ›nea wode di dwuma", "cropsTitle": "Ghana nnΙ”bae a yehu", "checkTitle": "Mfonini a Ι›fata ni?", "checkText": "HwΙ› sΙ› nhaban a yare aka no ahyΙ› mfonini no ma na Ι›da adi. Hann pa boa.", "retake": "San twa", "analyse": "HwΙ› nnΙ”bae", "analysing": "YΙ›rehwΙ› nhaban no…", "analysingSub": "YΙ›rehwΙ› kΙ”la, nsensanee ne sΙ›e", "helpTitle": "SΙ›nea wode CropGuard di dwuma", "gotit": "Mate aseΙ›", "modeDevice": "Afidie no so hwΙ›", "modeServer": "YΙ›akeka AI model ho", "confidence": "Gyidie", "disease": "Yare a wohu", "severityL": "SΙ›nea Ι›yΙ› den", "urgencyL": "NtΙ›mpΙ›", "treat": "Nea Ι›sΙ› sΙ› woyΙ› seesei", "treatSub": "Di akwan yi akyi β€” nea Ι›yΙ› ntΙ›m di kan.", "products": "Nnuru a yΙ›kamfo kyerΙ›", "about": "Yare yi ho asΙ›m", "cause": "Nea Ι›de ba", "routine": "Daa daa", "urgent": "NtΙ›m", "emergency": "PrΙ›ko pΙ›", "again": "San hwΙ› nhaban foforo", "share": "KyΙ› mmuae no", "fbQ": "Na Ι›yΙ› nokware?", "disc": "Eyi yΙ› Ι”boafo, Ι›nyΙ› kuayΙ› Ι”boafo ananmu. SΙ› yare no yΙ› soronko anaa Ι›yΙ› den a, kΙ” MoFA, COCOBOD anaa wo mansin Ι”boafo nkyΙ›n.", "notleaf": "Ei β€” eyi nsΙ› nhaban a Ι›da adi. San yΙ› bio na ma nhaban no nhyΙ› mfonini no ma wΙ” hann pa mu.", "notLeafTitle": "ƐnyΙ› nhaban a Ι›da adi", "noDisease": "Yare biara nni hΙ”", "noDiseaseSub": "Nhaban yi yΙ› den. KΙ” so hwΙ› wo afuw dapΙ›n biara na ma akwan, dua adwuma ne nsukwan nyΙ› yiye.", "copied": "WΙ”akora mmuae no."}}, "severity": {"en": {"early": {"label": "Early stage", "urg": "routine", "desc": "Symptoms are small and localised (under ~20% of the leaf). You have time, but act soon."}, "moderate": {"label": "Moderate stage", "urg": "urgent", "desc": "The disease covers a good part of the leaf (~20-60%) and may spread fast. Treat this week."}, "severe": {"label": "Severe stage", "urg": "emergency", "desc": "Most of the leaf or plant is affected (over ~60%). Act today to save the rest of your crop."}}, "tw": {"early": {"label": "Mfiase", "urg": "routine", "desc": "Yare no sua, Ι›wΙ” baabi ketewa (bΙ›yΙ› nhaban no 20% ase). WowΙ” bere, nanso yΙ› ho ade ntΙ›m."}, "moderate": {"label": "Mfinimfini", "urg": "urgent", "desc": "Yare no akata nhaban no fa kΙ›se so (20-60%) na ebetumi atrΙ›w ntΙ›m. Sa no dapΙ›n yi."}, "severe": {"label": "Aboro so", "urg": "emergency", "desc": "Nhaban anaa afifide no dodow no ara ayΙ› yare (boro 60%). YΙ› ho ade nnΙ› na gye wo nnΙ”bae nkae no."}}}, "help": {"en": [["Take a clear photo", "Hold your phone close to one diseased leaf so it fills the frame. Use daylight, avoid shadows and blur."], ["Read the result", "You'll see the crop and disease, the system's confidence, the severity colour (green/amber/red) and how urgently to act."], ["Follow the steps", "Do the numbered treatment steps in order. The most urgent action is always first."], ["When to get help", "CropGuard is a guide. For cocoa diseases see COCOBOD; for unusual or whole-field outbreaks call your MoFA extension officer."], ["Your privacy", "No sign-up, no account. Your photo is analysed and then discarded β€” nothing is stored."]], "tw": [["Twa mfonini a Ι›da adi", "Fa wo fon bΙ›n nhaban baako a yare aka na ma Ι›nhyΙ› mfonini no ma. Fa hann, twe sunsuma ne fΙ”kyee fi hΙ”."], ["Kenkan mmuae no", "Wubehu nnΙ”bae no ne yare no, gyidie a system no wΙ”, sΙ›nea Ι›yΙ› den kΙ”la (ahabammono/dadeΙ›/kΙ”kΙ”Ι”) ne ntΙ›mpΙ›."], ["Di akwan no akyi", "YΙ› ayaresa akwan a wΙ”akyerΙ›w no so. Nea Ι›yΙ› ntΙ›m no di kan bere biara."], ["Bere a wobΙ›hwehwΙ› mmoa", "CropGuard yΙ› akwankyerΙ›. Kookoo yare ho a, kΙ” COCOBOD; sΙ› yare yΙ› soronko anaa afuw mu nyinaa aka a, frΙ› wo MoFA Ι”boafo."], ["Wo kokoamsΙ›m", "Kraman biara nni hΙ”. YΙ›hwΙ› wo mfonini no na yΙ›tow gu β€” yΙ›nkora biribiara."]]}, "diseases": {"maize_healthy": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Healthy Maize", "tw": "Aburo a Ι›yΙ› den"}, "healthy": true}, "maize_gls": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Grey Leaf Spot", "tw": "Nhaban Nsensanee Fitaa"}, "cause": {"en": "A fungus (Cercospora zeae-maydis) that thrives in warm, humid weather and crowded fields.", "tw": "Mmoawa (Cercospora) a Ι›dΙ”Ι”so wΙ” ahuhuru ne fΔ©fΔ© mu, ne afuw a nnΙ”bae abΙ›n ho."}, "tx": {"en": ["<b>Remove</b> badly spotted lower leaves and burn them away from the field.", "Spray a <b>strobilurin or triazole</b> fungicide early, repeat after 10-14 days.", "Avoid working in the field when leaves are wet.", "Next season, <b>rotate</b> and plant resistant maize."], "tw": ["<b>Yi</b> nhaban a yare aka no a Ι›wΙ” ase no fi hΙ” na hyew no.", "Pete <b>strobilurin anaa triazole</b> aduru ntΙ›m, san yΙ› nnafua 10-14 akyi.", "NyΙ› adwuma wΙ” afuw mu bere a nhaban yΙ› fΙ”kyee.", "Afe foforo, <b>sesa</b> nnΙ”bae na dua aburo a Ι›ko tia yare."]}, "chem": {"en": ["Azoxystrobin", "Propiconazole"], "tw": ["Azoxystrobin", "Propiconazole"]}}, "maize_nclb": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Northern Corn Leaf Blight", "tw": "Aburo Nhaban Yare (NCLB)"}, "cause": {"en": "A fungus (Exserohilum turcicum) causing long grey-green cigar-shaped lesions; spreads fast in wet seasons.", "tw": "Mmoawa (Exserohilum) a Ι›yΙ› nsensanee tenten ahabammono wΙ” nhaban so; Ι›trΙ›w ntΙ›m wΙ” osutΙ” bere."}, "tx": {"en": ["Scout weekly and <b>remove infected leaves</b> early.", "Apply <b>mancozeb or azoxystrobin</b> at first sign.", "Improve drainage and spacing so leaves dry fast.", "Plant <b>NCLB-resistant</b> maize next time."], "tw": ["HwΙ› afuw no dapΙ›n biara na <b>yi nhaban a yare aka</b> ntΙ›m.", "Fa <b>mancozeb anaa azoxystrobin</b> pete bere a wuhu kan.", "Ma nsu nkΙ” na ma akwan na nhaban no wo ntΙ›m.", "Dua aburo a <b>Ι›ko tia</b> yare yi."]}, "chem": {"en": ["Mancozeb", "Azoxystrobin"], "tw": ["Mancozeb", "Azoxystrobin"]}}, "maize_rust": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Common Rust", "tw": "Aburo Ntokuru Yare"}, "cause": {"en": "A fungus (Puccinia sorghi) producing reddish-brown powdery pustules on both leaf surfaces.", "tw": "Mmoawa (Puccinia) a Ι›yΙ› ntokuru kΙ”kΙ”Ι”-tuntum wΙ” nhaban afaafa abien so."}, "tx": {"en": ["For light infection, simply monitor β€” maize tolerates some rust.", "If pustules spread fast, spray a <b>triazole</b> fungicide.", "Avoid excess nitrogen.", "Choose <b>rust-tolerant</b> hybrids next season."], "tw": ["SΙ› yare no nsΓ΅ a, hwΙ› kwa β€” aburo tumi gyina kakra.", "SΙ› ntokuru no trΙ›w ntΙ›m a, pete <b>triazole</b> aduru.", "Mfa nitrogen pii.", "Paw aba a <b>Ι›ko tia</b> ntokuru daakye."]}, "chem": {"en": ["Tebuconazole", "Propiconazole"], "tw": ["Tebuconazole", "Propiconazole"]}}, "maize_msv": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Maize Streak Virus", "tw": "Aburo Streak Yare (MSV)"}, "cause": {"en": "A virus spread by leafhoppers, common in West Africa. Leaves show fine yellow streaks running along the veins; plants stay stunted.", "tw": "Yare a aboawa (leafhopper) de ba a Ι›wΙ” West Africa. Nhaban no kyerΙ› nsensanee akΙ”kΙ”Ι” na afifide no nnyini."}, "tx": {"en": ["<b>Rogue out</b> (uproot and destroy) badly infected plants early.", "Control leafhoppers with an approved insecticide where infestation is high.", "Plant <b>MSV-tolerant</b> varieties and sow early to escape peak leafhopper numbers.", "Keep fields weed-free, as weeds host the virus and insect."], "tw": ["<b>Tu afifide a yare aka kΙ›se no</b> na sΙ›e ntΙ›m.", "Ko tia leafhopper no a wΙ”adΙ”Ι”so a, fa aduru.", "Dua aba a <b>Ι›ko tia</b> MSV na dua ntΙ›m na woapere leafhopper no.", "Yi wira fi afuw no mu, Ι›kora yare ne aboa no."]}, "chem": {"en": ["MSV-tolerant seed", "Imidacloprid (for leafhopper)"], "tw": ["Aba a Ι›ko tia MSV", "Imidacloprid (leafhopper)"]}}, "maize_faw": {"crop": {"en": "Maize", "tw": "Aburo"}, "name": {"en": "Fall Armyworm", "tw": "Aburo Sunson (Fall Armyworm)"}, "cause": {"en": "A caterpillar pest (Spodoptera frugiperda) that chews ragged holes and 'windows' in the whorl, leaving moist sawdust-like frass. Ghana's biggest maize pest.", "tw": "Sunson (Spodoptera) a Ι›we nhaban ma atokuru na egya sΙ› mfutuma wΙ” aburo no mfimfini. ƐyΙ› Ghana aburo tan kΙ›seΙ›."}, "tx": {"en": ["<b>Scout twice a week</b>; hand-pick and crush egg masses and caterpillars early.", "Apply an approved insecticide (<b>emamectin benzoate</b> or <b>spinetoram</b>) into the whorl in the evening.", "Apply dry sand or wood ash into the whorl as a low-cost option for small farms.", "Protect natural enemies β€” avoid blanket spraying that kills helpful insects."], "tw": ["<b>HwΙ› afuw no mprenu dapΙ›n biara</b>; fa wo nsa yi nkesua ne asunson no kum ntΙ›m.", "Fa aduru a <b>emamectin benzoate</b> anaa <b>spinetoram</b> wom hwie gu aburo no mfimfini anwummere.", "Anaa fa anwea anaa nnyansΓ΅ hwie gu mfimfini β€” Ι›yΙ› den a ne bo nyΙ› den.", "BΙ” mmoa a Ι›we sunson no ho ban β€” mma pete aduru gu biribiara so."]}, "chem": {"en": ["Emamectin benzoate", "Spinetoram"], "tw": ["Emamectin benzoate", "Spinetoram"]}}, "cassava_healthy": {"crop": {"en": "Cassava", "tw": "Bankye"}, "name": {"en": "Healthy Cassava", "tw": "Bankye a Ι›yΙ› den"}, "healthy": true}, "cassava_cmd": {"crop": {"en": "Cassava", "tw": "Bankye"}, "name": {"en": "Cassava Mosaic Disease", "tw": "Bankye Mosaic Yare"}, "cause": {"en": "A virus spread by whiteflies and infected cuttings. Leaves show yellow-green mosaic patterns and distortion.", "tw": "Yare a nwansena ne mfaade a yare wom de ba. Nhaban no kyerΙ› akΙ”kΙ”Ι”-ahabammono nsensanee ne nsakrae."}, "tx": {"en": ["<b>Use clean, certified cuttings</b> β€” never replant stems from sick plants.", "Uproot and destroy severely infected plants early.", "Control whiteflies that carry the virus.", "Plant <b>CMD-resistant</b> cassava (e.g. improved IITA lines)."], "tw": ["<b>Fa mfaade a Ι›ho tew</b> β€” mfa dua a yare aka so nnua.", "Tu na sΙ›e afifide a yare aka kΙ›se no ntΙ›m.", "Ko tia nwansena fitaa a Ι›de yare no kΙ”.", "Dua bankye a <b>Ι›ko tia</b> yare (te sΙ› IITA aba)."]}, "chem": {"en": ["No spray cure β€” use clean cuttings"], "tw": ["Aduru nni hΙ” β€” fa mfaade a Ι›ho tew"]}}, "cassava_cbsd": {"crop": {"en": "Cassava", "tw": "Bankye"}, "name": {"en": "Cassava Brown Streak Disease", "tw": "Bankye Ahabamono Yare"}, "cause": {"en": "A virus causing brown streaks on stems and dark rot inside the roots β€” often hidden until harvest.", "tw": "Yare a Ι›yΙ› nsensanee ahabammono wΙ” dua no ho na Ι›ma ntini no porΙ”w β€” Ι›hintaw kosi twabere."}, "tx": {"en": ["<b>Harvest early</b> if you see symptoms β€” rot worsens the longer roots stay in the ground.", "Use only <b>clean planting material</b> from disease-free fields.", "Remove and destroy infected plants and regrowth.", "Switch to <b>tolerant varieties</b> and control whiteflies."], "tw": ["<b>Twa ntΙ›m</b> sΙ› wuhu nsΙ›nkyerΙ›nne a β€” porΙ”w no kΙ” so sΙ› ntini no kyΙ› fam.", "Fa <b>mfaade a Ι›ho tew</b> a yare nni mu nko ara.", "Yi na sΙ›e afifide a yare aka ne nea efifi bio.", "KΙ” aba a <b>Ι›ko tia</b> yare so na ko tia nwansena."]}, "chem": {"en": ["No spray cure β€” clean material + early harvest"], "tw": ["Aduru nni hΙ” β€” mfaade pa + twa ntΙ›m"]}}, "cassava_cbb": {"crop": {"en": "Cassava", "tw": "Bankye"}, "name": {"en": "Cassava Bacterial Blight", "tw": "Bankye Mmoawa Blight"}, "cause": {"en": "A bacterium (Xanthomonas) causing angular water-soaked leaf spots, wilting, stem gum and dieback; worse in the rains.", "tw": "Mmoawa (Xanthomonas) a Ι›yΙ› nsensanee wΙ” nhaban so, Ι›ma no po na dua no sΙ›e; Ι›yΙ› den wΙ” osutΙ” bere."}, "tx": {"en": ["Use clean, disease-free cuttings from healthy fields.", "Remove and burn infected plants and crop debris.", "Rotate fields and allow fallow to lower the bacteria.", "Avoid moving cuttings between farms in wet weather."], "tw": ["Fa mfaade a Ι›ho tew a yare nni mu fi afuw a Ι›yΙ› den.", "Yi na hyew afifide a yare aka ne nea aka.", "Sesa afuw na ma asaase nhome na mmoawa no so ntew.", "Mfa mfaade mfi afuw nkΙ” afuw wΙ” osutΙ” bere."]}, "chem": {"en": ["No spray cure β€” clean cuttings + sanitation"], "tw": ["Aduru nni hΙ” β€” mfaade pa + ahoteΙ›"]}}, "tomato_healthy": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Healthy Tomato", "tw": "Ntoosi a Ι›yΙ› den"}, "healthy": true}, "tomato_early": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Tomato Early Blight", "tw": "Ntoosi Early Blight"}, "cause": {"en": "A fungus (Alternaria solani) making dark concentric 'target' rings on older lower leaves.", "tw": "Mmoawa (Alternaria) a Ι›yΙ› nkwanta tuntum wΙ” nhaban dedaw a Ι›wΙ” ase."}, "tx": {"en": ["Pick off and destroy the lowest spotted leaves first.", "Spray <b>mancozeb</b> or <b>copper</b> every 7-10 days.", "<b>Mulch</b> the soil to stop spores splashing onto leaves.", "Feed plants well β€” strong tomatoes resist blight better."], "tw": ["Te nhaban a Ι›wΙ” ase a nsensanee wΙ” so no fi hΙ” kan.", "Pete <b>mancozeb</b> anaa <b>kΙ”bere</b> aduru nnafua 7-10 biara.", "<b>Kata</b> dΙ”te no so na yare no ntu nkΙ” nhaban so.", "Ma afifide no aduan yiye β€” ntoosi a Ι›yΙ› den ko tia yare."]}, "chem": {"en": ["Mancozeb", "Copper oxychloride"], "tw": ["Mancozeb", "Copper oxychloride"]}}, "tomato_late": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Tomato Late Blight", "tw": "Ntoosi Late Blight"}, "cause": {"en": "An aggressive water-mould (Phytophthora infestans). Can destroy a whole field in days in cool, wet weather.", "tw": "Yare a Ι›yΙ› den (Phytophthora) a Ι›tumi sΙ›e afuw mu nnansa ketewa mu wΙ” awΙ”w ne fΔ©fΔ© mu."}, "tx": {"en": ["<b>Act today.</b> Remove and bury every infected plant β€” do not compost them.", "Spray <b>chlorothalonil</b> or <b>mancozeb</b> on remaining healthy plants now.", "Stop overhead watering; water at the base in the morning.", "Destroy nearby volunteer tomato/potato plants."], "tw": ["<b>YΙ› ho ade nnΙ›.</b> Yi na sie afifide a yare aka biara β€” mfa nyΙ› sumina.", "Pete <b>chlorothalonil</b> anaa <b>mancozeb</b> gu nea aka so ntΙ›m.", "Gyae nsu a wugu soro; gu ase anΙ”pa.", "SΙ›e ntoosi/atadwe a aba afuw no ho."]}, "chem": {"en": ["Chlorothalonil", "Mancozeb", "Metalaxyl-M"], "tw": ["Chlorothalonil", "Mancozeb", "Metalaxyl-M"]}}, "tomato_wilt": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Tomato Bacterial Wilt", "tw": "Ntoosi Wilt Yare"}, "cause": {"en": "A soil bacterium (Ralstonia solanacearum) that blocks the plant's water channels β€” sudden wilting with no spots.", "tw": "Mmoawa a Ι›wΙ” dΙ”te mu (Ralstonia) a esiw afifide no nsu kwan β€” Ι›ma no po a nsensanee nni so."}, "tx": {"en": ["<b>Uproot wilted plants now</b> β€” there is no spray cure.", "Do <b>not</b> plant tomato, pepper or garden egg in that soil for 2-3 seasons.", "Improve drainage; the bacteria love wet, warm soil.", "Use grafted or resistant seedlings and fresh soil next time."], "tw": ["<b>Tu afifide a apo no seesei</b> β€” aduru biara nsa yare yi.", "<b>Nnua</b> ntoosi, mako anaa ntoroba wΙ” dΙ”te no mu mfe 2-3.", "Ma nsu nkΙ”; mmoawa no pΙ› dΙ”te a fΔ©fΔ© wom.", "Fa aba a Ι›ko tia yare ne dΙ”te foforo daakye."]}, "chem": {"en": ["No chemical cure β€” sanitation only"], "tw": ["Aduru biara nni hΙ” β€” ahoteΙ› nko ara"]}}, "tomato_septoria": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Tomato Septoria Leaf Spot", "tw": "Ntoosi Septoria Nsensanee"}, "cause": {"en": "A fungus (Septoria lycopersici) making many small circular grey-centred spots on lower leaves.", "tw": "Mmoawa (Septoria) a Ι›yΙ› nsensanee kurukuruwa nketewa pii a emu yΙ› fitaa wΙ” nhaban a Ι›wΙ” ase."}, "tx": {"en": ["Remove infected lower leaves as soon as spots appear.", "Spray <b>mancozeb</b> or chlorothalonil every 7-10 days.", "Mulch and avoid overhead watering to stop splash spread.", "Rotate crops and clear all debris at season end."], "tw": ["Yi nhaban a Ι›wΙ” ase a yare aka no bere a nsensanee no ba.", "Pete <b>mancozeb</b> anaa chlorothalonil nnafua 7-10 biara.", "Kata dΙ”te no so na mma nsu nntΙ” wΙ” soro.", "Sesa nnΙ”bae na boaboa nea aka ano."]}, "chem": {"en": ["Mancozeb", "Chlorothalonil"], "tw": ["Mancozeb", "Chlorothalonil"]}}, "tomato_tylcv": {"crop": {"en": "Tomato", "tw": "Ntoosi"}, "name": {"en": "Tomato Yellow Leaf Curl Virus", "tw": "Ntoosi Nhaban AkΙ”kΙ”Ι” Yare"}, "cause": {"en": "A virus spread by whiteflies. Leaves curl up, turn yellow at the edges, and the plant stays stunted.", "tw": "Yare a nwansena fitaa de ba. Nhaban no bobΙ”w, hyΙ› akΙ”kΙ”Ι”, na afifide no nnyini."}, "tx": {"en": ["<b>Control whiteflies</b> β€” they spread the virus. Use yellow sticky traps and neem/insecticide.", "Remove and destroy badly infected plants.", "Cover young seedlings with fine net in the nursery.", "Plant <b>TYLCV-tolerant</b> tomato next season."], "tw": ["<b>Ko tia nwansena fitaa</b> β€” wΙ”n na wΙ”de yare no ba. Fa yellow trap ne neem.", "Yi afifide a yare aka kΙ›se no fi hΙ”.", "Fa net kata nha nketewa so wΙ” nursery.", "Dua ntoosi a <b>Ι›ko tia</b> yare yi daakye."]}, "chem": {"en": ["Neem oil", "Imidacloprid (for whitefly)"], "tw": ["Neem ngo", "Imidacloprid (nwansena)"]}}, "cocoa_healthy": {"crop": {"en": "Cocoa", "tw": "Kookoo"}, "name": {"en": "Healthy Cocoa", "tw": "Kookoo a Ι›yΙ› den"}, "healthy": true}, "cocoa_blackpod": {"crop": {"en": "Cocoa", "tw": "Kookoo"}, "name": {"en": "Cocoa Black Pod", "tw": "Kookoo Aba Tuntum Yare"}, "cause": {"en": "A water-mould (Phytophthora palmivora/megakarya) causing brown-black spreading rot on pods; worst in the wet season.", "tw": "Yare (Phytophthora) a Ι›ma kookoo aba no yΙ› tuntum porΙ”w; Ι›yΙ› den wΙ” osutΙ” bere."}, "tx": {"en": ["<b>Harvest often and remove and bury all infected pods</b> to break the cycle.", "Spray a <b>copper</b> fungicide on pods during the rains, following COCOBOD timing.", "Prune the canopy and clear weeds to lower humidity and improve airflow.", "Improve drainage and avoid water pooling under trees."], "tw": ["<b>Tew aba no bere biara na yi na sie aba a yare aka no</b> na yare no nkΙ” so.", "Pete <b>kΙ”bere</b> aduru gu aba no so wΙ” osutΙ” bere, di COCOBOD nhyehyΙ›e akyi.", "Twa dua no na yi wira na ma mframa fa mu.", "Ma nsu nkΙ” na mma nsu nnyina nnua no ase."]}, "chem": {"en": ["Copper hydroxide", "Metalaxyl + copper"], "tw": ["Copper hydroxide", "Metalaxyl + copper"]}}, "cocoa_cssvd": {"crop": {"en": "Cocoa", "tw": "Kookoo"}, "name": {"en": "Cocoa Swollen Shoot Virus", "tw": "Kookoo Swollen Shoot Yare (CSSVD)"}, "cause": {"en": "A virus spread by mealybugs. Causes swollen shoots/roots, red vein-banding then leaf yellowing, and tree death. A major threat in Ghana.", "tw": "Yare a mmoawa (mealybug) de ba. Ɛma mman no hono, nhaban hyΙ› kΙ”kΙ”Ι” na awu. ƐyΙ› Ι”haw kΙ›se wΙ” Ghana."}, "tx": {"en": ["<b>Report to COCOBOD/CHED</b> β€” infected trees must be cut out, including a ring of surrounding trees.", "Control mealybugs (and the ants that protect them).", "Replant cleared areas with <b>tolerant/mild-strain</b> cocoa material.", "Use a barrier crop and certified seedlings to slow re-infection."], "tw": ["<b>BΙ” amanneΙ› kyerΙ› COCOBOD/CHED</b> β€” Ι›sΙ› sΙ› wotwitwa nnua a yare aka ne Ι›ho de.", "Ko tia mealybug (ne ntΙ›tea a Ι›bΙ” wΙ”n ho ban no).", "Dua kookoo a <b>Ι›ko tia</b> yare wΙ” baabi a wΙ”atwa no.", "Fa nnΙ”bae foforo to Ι›ho ban na fa aba a wΙ”ahwΙ› so."]}, "chem": {"en": ["Cut out infected trees (CHED)", "Imidacloprid (for mealybug)"], "tw": ["Twa nnua a yare aka (CHED)", "Imidacloprid (mealybug)"]}}, "cocoa_capsid": {"crop": {"en": "Cocoa", "tw": "Kookoo"}, "name": {"en": "Cocoa Capsids (Mirids)", "tw": "Kookoo Mmoawa (Capsid)"}, "cause": {"en": "Sap-sucking insects (Sahlbergella/Distantiella) that feed on pods and shoots, leaving black lesions and causing dieback ('capsid blight').", "tw": "Mmoawa a Ι›nom kookoo aba ne mman no nsu, egya nsensanee tuntum na Ι›ma mman wu."}, "tx": {"en": ["Scout pods and young shoots regularly for feeding lesions.", "Apply a <b>COCOBOD-recommended insecticide</b> at the advised times (usually Aug–Dec).", "Maintain good overhead shade β€” capsids prefer broken, sunny canopies.", "Prune and remove chupons (suckers) that capsids feed on."], "tw": ["HwΙ› aba ne mman foforo no so bere biara hwΙ› nsensanee.", "Fa <b>aduru a COCOBOD akamfo kyerΙ›</b> pete bere a wΙ”akyerΙ› (Ζ†sanaa–ƆpΙ›nimaa).", "Ma nnua a Ι›bΙ” nwini no nyΙ› yiye β€” capsid pΙ› baabi a owia fa mu.", "Twa mman foforo (chupon) a capsid di so."]}, "chem": {"en": ["Bifenthrin", "Acetamiprid"], "tw": ["Bifenthrin", "Acetamiprid"]}}, "cashew_healthy": {"crop": {"en": "Cashew", "tw": "Cashew"}, "name": {"en": "Healthy Cashew", "tw": "Cashew a Ι›yΙ› den"}, "healthy": true}, "cashew_anthracnose": {"crop": {"en": "Cashew", "tw": "Cashew"}, "name": {"en": "Cashew Anthracnose", "tw": "Cashew Anthracnose Yare"}, "cause": {"en": "A fungus (Colletotrichum) causing dark sunken spots on leaves, flowers and young nuts, especially in humid flowering periods.", "tw": "Mmoawa (Colletotrichum) a Ι›yΙ› nsensanee tuntum wΙ” nhaban, nhwiren ne aba foforo so wΙ” fΔ©fΔ© bere."}, "tx": {"en": ["Prune to open the canopy and remove infected flush and panicles.", "Spray a <b>copper</b> or triazole fungicide at flushing and flowering.", "Collect and destroy fallen infected leaves and nuts.", "Avoid dense planting; keep trees well spaced."], "tw": ["Twa dua no na ma mframa fa mu na yi mman ne nhwiren a yare aka.", "Pete <b>kΙ”bere</b> anaa triazole aduru bere a Ι›refofow na Ι›regu nhwiren.", "Boaboa nhaban ne aba a yare aka a ahwe ase no na sΙ›e.", "Mma nnua no mmΙ›n so; ma akwan nna ntam."]}, "chem": {"en": ["Copper oxychloride", "Tebuconazole"], "tw": ["Copper oxychloride", "Tebuconazole"]}}, "cashew_gumosis": {"crop": {"en": "Cashew", "tw": "Cashew"}, "name": {"en": "Cashew Gummosis", "tw": "Cashew Gum Yare"}, "cause": {"en": "A fungal canker (Lasiodiplodia) on the trunk and branches that oozes gum and causes dieback, often after stress or wounds.", "tw": "Mmoawa a Ι›yΙ› kuru wΙ” dua no ho a Ι›ma gum pue na Ι›ma mman wu, mpΙ›n pii bere a dua no ahaw anaa apira."}, "tx": {"en": ["Cut out cankered bark/branches back to healthy wood and burn them.", "Paint the clean wound with a <b>copper paste or fungicide</b> sealant.", "Avoid injuring the trunk; manage drought and termite stress.", "Remove and destroy severely affected trees."], "tw": ["Twa dua kuru no kΙ”si baabi a Ι›yΙ› den na hyew.", "Fa <b>kΙ”bere paste anaa aduru</b> kata kuru no so.", "Mma dua no mpira; hwΙ› owia ne mmoawa a Ι›sΙ›e dua so.", "Yi nnua a yare aka kΙ›se no na sΙ›e."]}, "chem": {"en": ["Copper paste", "Carbendazim"], "tw": ["Copper paste", "Carbendazim"]}}, "cashew_leafminer": {"crop": {"en": "Cashew", "tw": "Cashew"}, "name": {"en": "Cashew Leaf Miner", "tw": "Cashew Nhaban Sunson"}, "cause": {"en": "A tiny moth larva (Acrocercops) that tunnels inside young leaves, leaving silvery blotches and shrivelled new flush.", "tw": "Sunson ketewa (Acrocercops) a Ι›tu nhaban foforo mu, egya nsensanee fitaa na Ι›ma mman foforo no kwa."}, "tx": {"en": ["Remove and burn heavily mined young leaves and flush.", "Spray a systemic insecticide during the new flush only when damage is high.", "Encourage natural predators and parasitic wasps.", "Keep trees vigorous so they push healthy new flush."], "tw": ["Yi na hyew nhaban foforo a sunson no atu mu kΙ›se.", "SΙ› Ι”sΙ›e no dΙ”Ι”so a, pete insecticide bere a mman foforo refofow.", "Ma mmoawa a Ι›we sunson no ntena hΙ”.", "Ma nnua no nya ahoΙ”den na Ι›pue mman foforo a Ι›yΙ› den."]}, "chem": {"en": ["Acetamiprid", "Neem oil"], "tw": ["Acetamiprid", "Neem ngo"]}}, "plantain_healthy": {"crop": {"en": "Plantain", "tw": "BΙ”rΙ”deΙ›"}, "name": {"en": "Healthy Plantain", "tw": "BΙ”rΙ”deΙ› a Ι›yΙ› den"}, "healthy": true}, "plantain_sigatoka": {"crop": {"en": "Plantain", "tw": "BΙ”rΙ”deΙ›"}, "name": {"en": "Black Sigatoka", "tw": "BΙ”rΙ”deΙ› Sigatoka Yare"}, "cause": {"en": "A fungus (Mycosphaerella fijiensis) causing dark streaks that merge into large dead patches, cutting yield and ripening fruit early.", "tw": "Mmoawa (Mycosphaerella) a Ι›yΙ› nsensanee tuntum a Ι›ka bom ma nhaban no wu, na Ι›tew aba dodow so."}, "tx": {"en": ["<b>Cut off and remove badly infected leaves</b> (deleafing) and destroy them.", "Improve drainage and widen spacing to lower humidity.", "Spray a protectant fungicide (<b>mancozeb</b>) where pressure is high.", "Remove old leaves and weeds around the mat regularly."], "tw": ["<b>Twa nhaban a yare aka kΙ›se no</b> yi fi hΙ” na sΙ›e.", "Ma nsu nkΙ” na trΙ›w akwan na fΔ©fΔ© no so ntew.", "Pete aduru (<b>mancozeb</b>) baabi a yare no dΙ”Ι”so.", "Yi nhaban dedaw ne wira a atwa bΙ”rΙ”deΙ› no ho bere biara."]}, "chem": {"en": ["Mancozeb", "Propiconazole"], "tw": ["Mancozeb", "Propiconazole"]}}, "plantain_bbtv": {"crop": {"en": "Plantain", "tw": "BΙ”rΙ”deΙ›"}, "name": {"en": "Banana Bunchy Top Virus", "tw": "BΙ”rΙ”deΙ› Bunchy Top Yare"}, "cause": {"en": "A virus spread by aphids and infected suckers. Leaves bunch at the top, become narrow and upright with dark green 'dot-dash' streaks; plants are stunted.", "tw": "Yare a aphid ne mfaade a yare wom de ba. Nhaban no boaboa soro, yΙ› hihia na afifide no nnyini."}, "tx": {"en": ["<b>Destroy infected mats completely</b> (kill the plant, then dig out the corm).", "Control aphids that spread the virus.", "Use only clean, virus-free suckers or tissue-culture plants.", "Do not move suckers from affected fields to clean ones."], "tw": ["<b>SΙ›e afifide a yare aka no koraa</b> (kum no na tu ntini no fi fam).", "Ko tia aphid a Ι›de yare no kΙ”.", "Fa mfaade a yare nni mu nko ara.", "Mfa mfaade mfi afuw a yare wom nkΙ” nea Ι›ho tew so."]}, "chem": {"en": ["No spray cure β€” destroy mats + clean suckers"], "tw": ["Aduru nni hΙ” β€” sΙ›e afifide + mfaade pa"]}}, "plantain_panama": {"crop": {"en": "Plantain", "tw": "BΙ”rΙ”deΙ›"}, "name": {"en": "Panama Disease (Fusarium Wilt)", "tw": "BΙ”rΙ”deΙ› Panama Yare"}, "cause": {"en": "A soil fungus (Fusarium oxysporum) that blocks water flow. Older leaves yellow and collapse; cutting the stem shows brown vascular streaks.", "tw": "Mmoawa a Ι›wΙ” dΙ”te mu (Fusarium) a esiw nsu kwan. Nhaban dedaw no hyΙ› akΙ”kΙ”Ι” na Ι›hwe ase."}, "tx": {"en": ["There is <b>no cure</b> β€” remove and destroy affected plants and avoid spreading the soil.", "Plant <b>resistant varieties</b> in infested fields.", "Do not move soil, tools or suckers from sick fields to clean ones.", "Improve drainage and soil health to slow spread."], "tw": ["<b>Aduru nni hΙ”</b> β€” yi na sΙ›e afifide a yare aka na mma dΙ”te no ntrΙ›w.", "Dua aba a <b>Ι›ko tia</b> yare wΙ” afuw a yare wom.", "Mfa dΙ”te, nnwinnade anaa mfaade mfi afuw a yare wom nkΙ” baabi a Ι›ho tew.", "Ma nsu nkΙ” na ma dΙ”te no nya ahoΙ”den."]}, "chem": {"en": ["No cure β€” resistant varieties + sanitation"], "tw": ["Aduru nni hΙ” β€” aba a Ι›ko tia + ahoteΙ›"]}}, "yam_healthy": {"crop": {"en": "Yam", "tw": "BayerΙ›"}, "name": {"en": "Healthy Yam", "tw": "BayerΙ› a Ι›yΙ› den"}, "healthy": true}, "yam_anthracnose": {"crop": {"en": "Yam", "tw": "BayerΙ›"}, "name": {"en": "Yam Anthracnose", "tw": "BayerΙ› Anthracnose Yare"}, "cause": {"en": "A fungus (Colletotrichum gloeosporioides) causing dark brown-black leaf and stem blotches that can scorch the whole vine in wet weather.", "tw": "Mmoawa (Colletotrichum) a Ι›yΙ› nsensanee tuntum wΙ” nhaban ne dua so a Ι›tumi sΙ›e ahaban no nyinaa wΙ” osutΙ”."}, "tx": {"en": ["Use <b>clean, healthy seed yam (setts)</b> from disease-free fields.", "Spray <b>mancozeb</b> or a copper fungicide at first symptoms, repeating in wet spells.", "Stake vines and weed well to keep foliage dry and open.", "Plant tolerant varieties and rotate fields."], "tw": ["Fa <b>bayerΙ› aba (setts) a Ι›ho tew</b> a yare nni mu.", "Pete <b>mancozeb</b> anaa kΙ”bere aduru bere a wuhu kan, san yΙ› wΙ” osutΙ”.", "SΙ” ahaban no na yi wira na nhaban no nyΙ› fΙ”kyee.", "Dua aba a Ι›ko tia yare na sesa afuw."]}, "chem": {"en": ["Mancozeb", "Copper oxychloride"], "tw": ["Mancozeb", "Copper oxychloride"]}}, "yam_mosaic": {"crop": {"en": "Yam", "tw": "BayerΙ›"}, "name": {"en": "Yam Mosaic Virus", "tw": "BayerΙ› Mosaic Yare"}, "cause": {"en": "A virus spread by aphids and infected setts. Leaves show green mosaic, mottling and distortion; tubers are smaller.", "tw": "Yare a aphid ne aba a yare wom de ba. Nhaban no kyerΙ› ahabammono nsensanee na ntini no yΙ› ketewa."}, "tx": {"en": ["Select <b>clean seed yam</b> from healthy, symptom-free plants only.", "Rogue out (remove) and destroy plants showing mosaic early.", "Control aphids that spread the virus.", "Use virus-tested planting material where available."], "tw": ["Yi <b>bayerΙ› aba a Ι›ho tew</b> fi afifide a yare nni mu nko ara.", "Yi afifide a mosaic wΙ” so no na sΙ›e ntΙ›m.", "Ko tia aphid a Ι›de yare no kΙ”.", "Fa aba a wΙ”ahwΙ› so sΙ› yare nni mu sΙ› bi wΙ” hΙ” a."]}, "chem": {"en": ["No spray cure β€” clean setts"], "tw": ["Aduru nni hΙ” β€” aba a Ι›ho tew"]}}, "pepper_healthy": {"crop": {"en": "Pepper", "tw": "Mako"}, "name": {"en": "Healthy Pepper", "tw": "Mako a Ι›yΙ› den"}, "healthy": true}, "pepper_bacterialspot": {"crop": {"en": "Pepper", "tw": "Mako"}, "name": {"en": "Pepper Bacterial Spot", "tw": "Mako Mmoawa Nsensanee"}, "cause": {"en": "A bacterium (Xanthomonas) causing water-soaked then dark scabby spots on leaves and fruit; spreads in warm, wet weather.", "tw": "Mmoawa (Xanthomonas) a Ι›yΙ› nsensanee tuntum wΙ” nhaban ne aba so; Ι›trΙ›w wΙ” ahuhuru ne osutΙ” mu."}, "tx": {"en": ["Use clean, certified seed and disease-free seedlings.", "Spray a <b>copper</b>-based bactericide early and after rains.", "Avoid handling plants when wet; rotate away from pepper/tomato for 2 years.", "Remove and destroy badly infected plants."], "tw": ["Fa aba a Ι›ho tew ne afifi a yare nni mu.", "Pete <b>kΙ”bere</b> aduru ntΙ›m na san yΙ› osutΙ” akyi.", "Mfa wo nsa nnka afifi a Ι›yΙ› fΙ”kyee; sesa fi mako/ntoosi so mfe 2.", "Yi afifide a yare aka kΙ›se no na sΙ›e."]}, "chem": {"en": ["Copper oxychloride", "Copper + mancozeb"], "tw": ["Copper oxychloride", "Copper + mancozeb"]}}, "pepper_anthracnose": {"crop": {"en": "Pepper", "tw": "Mako"}, "name": {"en": "Pepper Anthracnose", "tw": "Mako Anthracnose Yare"}, "cause": {"en": "A fungus (Colletotrichum) causing sunken, dark, ringed spots on ripening fruit (also called fruit rot); worse in the rains.", "tw": "Mmoawa (Colletotrichum) a Ι›yΙ› nsensanee a emu adΙ” wΙ” aba a Ι›rebere so; Ι›yΙ› den wΙ” osutΙ” bere."}, "tx": {"en": ["Pick and destroy infected fruit promptly; do not leave them in the field.", "Spray <b>mancozeb</b> or a copper fungicide from fruit set, repeating in wet weather.", "Use clean seed and stake plants to keep fruit off the soil.", "Harvest ripe fruit early and rotate crops."], "tw": ["Te aba a yare aka no ntΙ›m na sΙ›e; nnyaw no afuw mu.", "Pete <b>mancozeb</b> anaa kΙ”bere aduru fi aba bere, san yΙ› wΙ” osutΙ”.", "Fa aba a Ι›ho tew na sΙ” afifi no na aba no nnka dΙ”te.", "Te aba a abere no ntΙ›m na sesa nnΙ”bae."]}, "chem": {"en": ["Mancozeb", "Azoxystrobin"], "tw": ["Mancozeb", "Azoxystrobin"]}}, "cowpea_healthy": {"crop": {"en": "Cowpea", "tw": "Adua"}, "name": {"en": "Healthy Cowpea", "tw": "Adua a Ι›yΙ› den"}, "healthy": true}, "cowpea_blight": {"crop": {"en": "Cowpea", "tw": "Adua"}, "name": {"en": "Cowpea Bacterial Blight", "tw": "Adua Mmoawa Blight"}, "cause": {"en": "A bacterium (Xanthomonas) causing water-soaked spots that turn brown with yellow haloes on leaves, stems and pods.", "tw": "Mmoawa (Xanthomonas) a Ι›yΙ› nsensanee kΙ”kΙ”Ι” a akΙ”kΙ”Ι” atwa ho wΙ” nhaban, dua ne adua aba so."}, "tx": {"en": ["Plant <b>clean, certified seed</b> and resistant varieties.", "Remove and destroy infected plants and debris after harvest.", "Avoid working among wet plants; rotate with cereals.", "Spray a copper bactericide only if pressure is high."], "tw": ["Dua <b>aba a Ι›ho tew</b> ne aba a Ι›ko tia yare.", "Yi na sΙ›e afifide a yare aka ne nea aka twabere akyi.", "Mfa wo nsa nnka afifi a Ι›yΙ› fΙ”kyee; sesa fa aburo to mu.", "Pete kΙ”bere aduru bere a yare no dΙ”Ι”so nko ara."]}, "chem": {"en": ["Resistant seed", "Copper oxychloride"], "tw": ["Aba a Ι›ko tia", "Copper oxychloride"]}}, "cowpea_mosaic": {"crop": {"en": "Cowpea", "tw": "Adua"}, "name": {"en": "Cowpea Mosaic Virus", "tw": "Adua Mosaic Yare"}, "cause": {"en": "A virus spread by aphids (and beetles/seed). Leaves show light-and-dark green mosaic, blistering and puckering; pods are poor.", "tw": "Yare a aphid de ba. Nhaban no kyerΙ› ahabammono nsensanee ne nsakrae na aba no nyΙ›."}, "tx": {"en": ["Use <b>virus-free certified seed</b> from a reliable source.", "Rogue out (remove) and destroy mosaic plants early.", "Control aphids with neem or an approved insecticide.", "Grow resistant cowpea varieties and avoid old infected fields nearby."], "tw": ["Fa <b>aba a yare nni mu</b> a wΙ”ahwΙ› so.", "Yi afifide a mosaic wΙ” so no na sΙ›e ntΙ›m.", "Ko tia aphid; fa neem anaa aduru.", "Dua adua a Ι›ko tia yare na twe afuw dedaw a yare wom fi ho."]}, "chem": {"en": ["Virus-free seed", "Neem oil"], "tw": ["Aba a yare nni mu", "Neem ngo"]}}, "cowpea_cercospora": {"crop": {"en": "Cowpea", "tw": "Adua"}, "name": {"en": "Cowpea Cercospora Leaf Spot", "tw": "Adua Cercospora Nsensanee"}, "cause": {"en": "A fungus (Cercospora) making reddish-brown to grey leaf spots that cause early leaf drop in humid weather.", "tw": "Mmoawa (Cercospora) a Ι›yΙ› nsensanee kΙ”kΙ”Ι”-fitaa wΙ” nhaban so a Ι›ma nhaban tew ntΙ›m wΙ” fΔ©fΔ© mu."}, "tx": {"en": ["Remove lower infected leaves and crop debris.", "Spray <b>mancozeb</b> or a triazole fungicide at first symptoms.", "Use wider spacing and rotate with non-legume crops.", "Plant tolerant varieties where available."], "tw": ["Yi nhaban a Ι›wΙ” ase a yare aka ne nea aka.", "Pete <b>mancozeb</b> anaa triazole aduru bere a wuhu kan.", "Ma akwan nna ntam na sesa fa nnΙ”bae foforo to mu.", "Dua aba a Ι›ko tia yare sΙ› bi wΙ” hΙ” a."]}, "chem": {"en": ["Mancozeb", "Tebuconazole"], "tw": ["Mancozeb", "Tebuconazole"]}}, "groundnut_healthy": {"crop": {"en": "Groundnut", "tw": "NkateΙ›"}, "name": {"en": "Healthy Groundnut", "tw": "NkateΙ› a Ι›yΙ› den"}, "healthy": true}, "groundnut_leafspot": {"crop": {"en": "Groundnut", "tw": "NkateΙ›"}, "name": {"en": "Groundnut Leaf Spot", "tw": "NkateΙ› Nhaban Nsensanee"}, "cause": {"en": "Fungi (Cercospora/Cercosporidium) causing many dark brown spots (early and late leaf spot) that drop leaves and cut pod yield.", "tw": "Mmoawa (Cercospora) a Ι›yΙ› nsensanee tuntum pii wΙ” nhaban so a Ι›ma nhaban tew na aba no so tew."}, "tx": {"en": ["Spray <b>chlorothalonil</b> or mancozeb from about 30 days, repeating every 10-14 days.", "Remove crop debris and rotate with cereals.", "Use wider spacing for airflow and avoid overhead watering.", "Plant leaf-spot-tolerant groundnut varieties."], "tw": ["Pete <b>chlorothalonil</b> anaa mancozeb fi nnafua 30, san yΙ› nnafua 10-14 biara.", "Yi nea aka na sesa fa aburo to mu.", "Ma akwan nna na mma nsu nntΙ” wΙ” soro.", "Dua nkateΙ› a Ι›ko tia nsensanee yare."]}, "chem": {"en": ["Chlorothalonil", "Mancozeb"], "tw": ["Chlorothalonil", "Mancozeb"]}}, "groundnut_rosette": {"crop": {"en": "Groundnut", "tw": "NkateΙ›"}, "name": {"en": "Groundnut Rosette", "tw": "NkateΙ› Rosette Yare"}, "cause": {"en": "A virus complex spread by aphids. Plants are stunted with bunched, yellow or mottled leaves ('rosetting'); can cause near-total loss.", "tw": "Yare a aphid de ba. Afifide no nnyini, nhaban no boaboa na Ι›hyΙ› akΙ”kΙ”Ι”; Ι›tumi sΙ›e ne nyinaa."}, "tx": {"en": ["<b>Sow early and at a denser spacing</b> to escape and limit aphid spread.", "Control aphids with neem or an approved insecticide.", "Rogue out (remove) rosetted plants as soon as seen.", "Plant <b>rosette-resistant</b> varieties where available."], "tw": ["<b>Dua ntΙ›m na ma no mmΙ›n mu</b> na woapere aphid no.", "Ko tia aphid; fa neem anaa aduru.", "Yi afifide a rosette aka no ntΙ›m a wuhu.", "Dua aba a <b>Ι›ko tia</b> rosette sΙ› bi wΙ” hΙ” a."]}, "chem": {"en": ["Resistant variety", "Imidacloprid (for aphid)"], "tw": ["Aba a Ι›ko tia", "Imidacloprid (aphid)"]}}, "groundnut_rust": {"crop": {"en": "Groundnut", "tw": "NkateΙ›"}, "name": {"en": "Groundnut Rust", "tw": "NkateΙ› Ntokuru Yare"}, "cause": {"en": "A fungus (Puccinia arachidis) making orange-brown powdery pustules on the underside of leaves; often with leaf spot.", "tw": "Mmoawa (Puccinia) a Ι›yΙ› ntokuru kΙ”kΙ”Ι” wΙ” nhaban no ase."}, "tx": {"en": ["Spray a <b>triazole</b> or mancozeb fungicide at first pustules, often combined with leaf-spot sprays.", "Remove volunteer groundnut and debris between seasons.", "Use wider spacing and rotate fields.", "Plant rust-tolerant varieties."], "tw": ["Pete <b>triazole</b> anaa mancozeb aduru bere a ntokuru no ba kan.", "Yi nkateΙ› a efifi kwa ne nea aka bere a wonnua.", "Ma akwan nna na sesa afuw.", "Dua aba a Ι›ko tia ntokuru."]}, "chem": {"en": ["Tebuconazole", "Mancozeb"], "tw": ["Tebuconazole", "Mancozeb"]}}, "rice_healthy": {"crop": {"en": "Rice", "tw": "Ɛmo"}, "name": {"en": "Healthy Rice", "tw": "Ɛmo a Ι›yΙ› den"}, "healthy": true}, "rice_blast": {"crop": {"en": "Rice", "tw": "Ɛmo"}, "name": {"en": "Rice Blast", "tw": "Ɛmo Blast Yare"}, "cause": {"en": "A fungus (Magnaporthe oryzae) causing spindle-shaped grey-centred lesions on leaves and rotting at the neck of the panicle.", "tw": "Mmoawa (Magnaporthe) a Ι›yΙ› nsensanee a emu yΙ› fitaa wΙ” nhaban so na Ι›ma Ι›mo ti no porΙ”w."}, "tx": {"en": ["Plant <b>blast-resistant</b> varieties and use clean seed.", "Avoid heavy nitrogen at once β€” split applications instead.", "Spray <b>tricyclazole</b> at early symptoms and before heading where pressure is high.", "Keep good water management and remove infected debris."], "tw": ["Dua aba a <b>Ι›ko tia</b> blast na fa aba a Ι›ho tew.", "Mfa nitrogen pii prΙ›ko pΙ› β€” kyekyΙ› mu.", "Pete <b>tricyclazole</b> bere a wuhu kan ne ansa na Ι›regu nhwiren.", "HwΙ› nsu no so yiye na yi nea yare aka."]}, "chem": {"en": ["Tricyclazole", "Resistant seed"], "tw": ["Tricyclazole", "Aba a Ι›ko tia"]}}, "rice_blb": {"crop": {"en": "Rice", "tw": "Ɛmo"}, "name": {"en": "Bacterial Leaf Blight", "tw": "Ɛmo Mmoawa Blight"}, "cause": {"en": "A bacterium (Xanthomonas oryzae) causing yellow then straw-coloured drying that spreads from the leaf tips and edges.", "tw": "Mmoawa (Xanthomonas) a Ι›ma nhaban no hyΙ› akΙ”kΙ”Ι” na Ι›wo fi ano kΙ”."}, "tx": {"en": ["Use <b>clean, resistant seed</b> and avoid clipping seedling tips.", "Apply balanced fertiliser β€” avoid excess nitrogen.", "Drain the field periodically; avoid flowing water between plots.", "Remove infected stubble and weed hosts after harvest."], "tw": ["Fa <b>aba a Ι›ho tew a Ι›ko tia</b> yare; ntwitwa nha no ano.", "Fa asaasebΙ” a Ι›yΙ› pΙ› β€” mfa nitrogen pii.", "Yi nsu no fi afuw no mu bere bi; mma nsu mfa mfiri plot so nkΙ” baako.", "Yi nea yare aka ne wira twabere akyi."]}, "chem": {"en": ["Resistant seed", "Copper + balanced N"], "tw": ["Aba a Ι›ko tia", "Copper + N pΙ›"]}}, "rice_brownspot": {"crop": {"en": "Rice", "tw": "Ɛmo"}, "name": {"en": "Rice Brown Spot", "tw": "Ɛmo Brown Spot Yare"}, "cause": {"en": "A fungus (Bipolaris oryzae) making many small brown oval spots; strongly linked to poor or unbalanced soil nutrition.", "tw": "Mmoawa (Bipolaris) a Ι›yΙ› nsensanee kΙ”kΙ”Ι” nketewa pii; Ι›fa asaase a aduan nni mu ho."}, "tx": {"en": ["<b>Correct soil nutrition</b> (especially potassium) β€” the main long-term fix.", "Use clean, treated seed and resistant varieties.", "Spray mancozeb at early symptoms where severe.", "Improve water and field management."], "tw": ["<b>Siesie asaase no aduan</b> (titiri ne potassium) β€” eyi na Ι›yΙ› ne nnyinaso.", "Fa aba a Ι›ho tew a Ι›ko tia yare.", "Pete mancozeb bere a wuhu kan sΙ› Ι›yΙ› den a.", "HwΙ› nsu ne afuw no so yiye."]}, "chem": {"en": ["Balanced fertiliser (K)", "Mancozeb"], "tw": ["AsaasebΙ” (K)", "Mancozeb"]}}, "okra_healthy": {"crop": {"en": "Okra", "tw": "Nkruma"}, "name": {"en": "Healthy Okra", "tw": "Nkruma a Ι›yΙ› den"}, "healthy": true}, "okra_yvmv": {"crop": {"en": "Okra", "tw": "Nkruma"}, "name": {"en": "Okra Yellow Vein Mosaic Virus", "tw": "Nkruma AkΙ”kΙ”Ι” Ntini Yare"}, "cause": {"en": "A virus spread by whiteflies. Leaf veins turn bright yellow in a network pattern; fruit is small, pale and hard.", "tw": "Yare a nwansena fitaa de ba. Nhaban ntini no hyΙ› akΙ”kΙ”Ι” na aba no yΙ› ketewa na Ι›yΙ› den."}, "tx": {"en": ["<b>Control whiteflies</b> with yellow sticky traps and neem/insecticide.", "Rogue out (remove) and destroy infected plants early.", "Use <b>resistant okra varieties</b> and clean seed.", "Remove nearby weed hosts of whiteflies."], "tw": ["<b>Ko tia nwansena fitaa</b>; fa yellow trap ne neem.", "Yi afifide a yare aka no na sΙ›e ntΙ›m.", "Fa nkruma aba a <b>Ι›ko tia</b> yare ne aba a Ι›ho tew.", "Yi wira a Ι›bΙ›n a Ι›kora nwansena no."]}, "chem": {"en": ["Resistant variety", "Imidacloprid (for whitefly)"], "tw": ["Aba a Ι›ko tia", "Imidacloprid (nwansena)"]}}, "okra_leafspot": {"crop": {"en": "Okra", "tw": "Nkruma"}, "name": {"en": "Okra Leaf Spot", "tw": "Nkruma Nhaban Nsensanee"}, "cause": {"en": "Fungi (Cercospora/Alternaria) making brown to greyish spots on leaves that can merge and drop the foliage in humid weather.", "tw": "Mmoawa (Cercospora) a Ι›yΙ› nsensanee kΙ”kΙ”Ι” wΙ” nhaban so a Ι›tumi ka bom ma nhaban tew wΙ” fΔ©fΔ© mu."}, "tx": {"en": ["Remove infected lower leaves and crop debris.", "Spray <b>mancozeb</b> or chlorothalonil at first symptoms.", "Use wider spacing and avoid overhead watering.", "Rotate with non-okra crops next season."], "tw": ["Yi nhaban a Ι›wΙ” ase a yare aka ne nea aka.", "Pete <b>mancozeb</b> anaa chlorothalonil bere a wuhu kan.", "Ma akwan nna na mma nsu nntΙ” wΙ” soro.", "Sesa fa nnΙ”bae foforo to mu afe foforo."]}, "chem": {"en": ["Mancozeb", "Chlorothalonil"], "tw": ["Mancozeb", "Chlorothalonil"]}}, "gardenegg_healthy": {"crop": {"en": "Garden Egg", "tw": "Ntoroba"}, "name": {"en": "Healthy Garden Egg", "tw": "Ntoroba a Ι›yΙ› den"}, "healthy": true}, "gardenegg_wilt": {"crop": {"en": "Garden Egg", "tw": "Ntoroba"}, "name": {"en": "Garden Egg Bacterial Wilt", "tw": "Ntoroba Wilt Yare"}, "cause": {"en": "A soil bacterium (Ralstonia solanacearum) that blocks water flow β€” plants wilt suddenly and die, often with no leaf spots.", "tw": "Mmoawa a Ι›wΙ” dΙ”te mu (Ralstonia) a esiw nsu kwan β€” afifide no po prΙ›ko pΙ› na ewu."}, "tx": {"en": ["<b>Uproot and remove wilted plants now</b> β€” there is no spray cure.", "Do <b>not</b> replant garden egg, tomato or pepper in that soil for 2-3 seasons.", "Improve drainage; the bacteria thrive in wet, warm soil.", "Use grafted/resistant seedlings and clean soil next time."], "tw": ["<b>Tu afifide a apo no seesei</b> β€” aduru biara nsa yare yi.", "<b>Nnua</b> ntoroba, ntoosi anaa mako wΙ” dΙ”te no mu mfe 2-3.", "Ma nsu nkΙ”; mmoawa no pΙ› dΙ”te a fΔ©fΔ© wom.", "Fa aba a Ι›ko tia yare ne dΙ”te foforo daakye."]}, "chem": {"en": ["No chemical cure β€” sanitation only"], "tw": ["Aduru biara nni hΙ” β€” ahoteΙ› nko ara"]}}, "gardenegg_leafspot": {"crop": {"en": "Garden Egg", "tw": "Ntoroba"}, "name": {"en": "Garden Egg Leaf Spot", "tw": "Ntoroba Nhaban Nsensanee"}, "cause": {"en": "A fungus (Cercospora/Phomopsis) causing brown spots on leaves and fruit rot, especially in wet, crowded plantings.", "tw": "Mmoawa (Cercospora) a Ι›yΙ› nsensanee kΙ”kΙ”Ι” wΙ” nhaban so na Ι›ma aba porΙ”w wΙ” fΔ©fΔ© mu."}, "tx": {"en": ["Remove infected leaves and rotten fruit and destroy them.", "Spray <b>mancozeb</b> or chlorothalonil every 7-10 days.", "Stake plants and widen spacing for airflow.", "Rotate crops and use clean seed."], "tw": ["Yi nhaban a yare aka ne aba a aporΙ”w no na sΙ›e.", "Pete <b>mancozeb</b> anaa chlorothalonil nnafua 7-10 biara.", "SΙ” afifi no na ma akwan na mframa fa mu.", "Sesa nnΙ”bae na fa aba a Ι›ho tew."]}, "chem": {"en": ["Mancozeb", "Chlorothalonil"], "tw": ["Mancozeb", "Chlorothalonil"]}}, "mango_healthy": {"crop": {"en": "Mango", "tw": "Mango"}, "name": {"en": "Healthy Mango", "tw": "Mango a Ι›yΙ› den"}, "healthy": true}, "mango_anthracnose": {"crop": {"en": "Mango", "tw": "Mango"}, "name": {"en": "Mango Anthracnose", "tw": "Mango Anthracnose Yare"}, "cause": {"en": "A fungus (Colletotrichum) causing black spots on leaves and flowers and sunken black rot on fruit; worst in humid flowering weather.", "tw": "Mmoawa (Colletotrichum) a Ι›yΙ› nsensanee tuntum wΙ” nhaban ne nhwiren so na Ι›ma aba no porΙ”w wΙ” fΔ©fΔ© bere."}, "tx": {"en": ["Prune to open the canopy and remove dead, infected twigs and mummified fruit.", "Spray a <b>copper</b> or mancozeb fungicide at flowering and early fruit set.", "Collect and destroy fallen infected fruit and leaves.", "Harvest carefully and treat fruit with a warm-water dip to reduce storage rot."], "tw": ["Twa dua no na yi mman a awu ne aba a aporΙ”w no.", "Pete <b>kΙ”bere</b> anaa mancozeb aduru bere a Ι›regu nhwiren ne aba bere.", "Boaboa aba ne nhaban a yare aka a ahwe ase no na sΙ›e.", "Twa no a hwΙ› yiye na fa nsuhyew gu aba no so na porΙ”w no nkΙ” so."]}, "chem": {"en": ["Copper oxychloride", "Mancozeb"], "tw": ["Copper oxychloride", "Mancozeb"]}}, "mango_bacterialspot": {"crop": {"en": "Mango", "tw": "Mango"}, "name": {"en": "Mango Bacterial Black Spot", "tw": "Mango Mmoawa Tuntum Yare"}, "cause": {"en": "A bacterium (Xanthomonas) causing angular black, often raised, leaf spots and cracked black lesions on fruit; spread by wind-driven rain.", "tw": "Mmoawa (Xanthomonas) a Ι›yΙ› nsensanee tuntum wΙ” nhaban so na Ι›pae aba no; mframa ne osu na Ι›de trΙ›w."}, "tx": {"en": ["Prune out and burn infected twigs and use windbreaks to slow spread.", "Spray <b>copper</b> sprays at flushing, flowering and early fruit.", "Avoid overhead irrigation; manage trees for good airflow.", "Plant tolerant varieties where black spot is common."], "tw": ["Twa mman a yare aka no na hyew na fa mframa-siw to Ι›ho ban.", "Pete <b>kΙ”bere</b> aduru bere a Ι›refofow, Ι›regu nhwiren ne aba bere.", "Mma nsu nntΙ” wΙ” soro; ma mframa fa nnua no mu.", "Dua aba a Ι›ko tia yare baabi a yare yi dΙ”Ι”so."]}, "chem": {"en": ["Copper oxychloride", "Copper hydroxide"], "tw": ["Copper oxychloride", "Copper hydroxide"]}}}};
const DISEASES = DATA.diseases;
let LANG = localStorage.getItem('cropguard_lang') || 'en';
let currentImageData = null;
function T(){ return DATA.t[LANG]; }
function SEV(){ return DATA.severity[LANG]; }
function setLang(l){
LANG = l; localStorage.setItem('cropguard_lang', l);
document.getElementById('langEn').classList.toggle('on', l==='en');
document.getElementById('langTw').classList.toggle('on', l==='tw');
document.querySelectorAll('[data-i]').forEach(el=>{ const k=el.getAttribute('data-i'); if(T()[k]!=null) el.textContent=T()[k]; });
document.getElementById('modeTxt').textContent = API_URL ? T().modeServer : T().modeDevice;
const pills = document.getElementById('cropPills');
if(pills) pills.innerHTML = DATA.crops[LANG].map(c=>`<div class="pill"><span class="dot"></span>${c}</div>`).join('');
if(document.getElementById('result').classList.contains('active') && window._lastResult){ renderResult(window._lastResult); }
}
function show(id){ document.querySelectorAll('.screen').forEach(s=>s.classList.remove('active')); document.getElementById(id).classList.add('active'); window.scrollTo({top:0,behavior:'smooth'}); }
function goHome(){ show('home'); }
function openCamera(){ document.getElementById('fileCam').click(); }
function openGallery(){ document.getElementById('fileGal').click(); }
function handleFile(e){
const f = e.target.files && e.target.files[0]; if(!f) return;
const reader = new FileReader();
reader.onload = ev=>{ currentImageData = ev.target.result; document.getElementById('previewImg').src = currentImageData; show('preview'); };
reader.readAsDataURL(f); e.target.value='';
}
const wait = ms=>new Promise(r=>setTimeout(r,ms));
async function analyse(){
document.getElementById('scanImg').src = currentImageData; show('loading');
let result;
try{ if(API_URL){ result = await analyseViaServer(currentImageData); } else { await wait(1600); result = analyseOnDevice(); } }
catch(err){ result = analyseOnDevice(); }
window._lastResult = result; renderResult(result); show('result');
}
async function analyseViaServer(dataUrl){
const blob = await (await fetch(dataUrl)).blob();
const fd = new FormData(); fd.append('file', blob, 'leaf.jpg');
const res = await fetch(API_URL.replace(/\/$/,'') + '/predict', {method:'POST', body:fd});
if(!res.ok) throw new Error('server');
const j = await res.json();
return { key:j.class_id, confidence:Math.round(j.confidence*100), severity:j.severity };
}
function analyseOnDevice(){
const img = document.getElementById('previewImg');
const c = document.createElement('canvas'); const S=180; c.width=S; c.height=S;
const ctx = c.getContext('2d'); ctx.drawImage(img,0,0,S,S);
const data = ctx.getImageData(0,0,S,S).data;
let green=0, yellow=0, brown=0, dark=0, leafPx=0;
for(let i=0;i<data.length;i+=4){
const r=data[i],g=data[i+1],b=data[i+2];
const mx=Math.max(r,g,b),mn=Math.min(r,g,b),sat=mx-mn,lum=(r+g+b)/3;
if(lum>235 && sat<25){ continue; }
leafPx++;
if(g>r && g>b && g>70 && sat>22){ green++; }
else if(r>120 && g>100 && b<100 && r-b>40){ yellow++; }
else if(lum<70){ dark++; }
else if(r>70 && r>g && g>b && r-b>18 && lum<170){ brown++; }
}
if(leafPx<200){ return {notLeaf:true}; }
const gP=green/leafPx, yP=yellow/leafPx, bP=brown/leafPx, dP=dark/leafPx;
const diseasedRatio = Math.min(1,(yP*0.85 + bP*1.05 + dP*1.1));
const greenWeight = gP;
let severity = diseasedRatio<0.20 ? 'early' : diseasedRatio<0.55 ? 'moderate' : 'severe';
if(diseasedRatio < 0.10 && greenWeight > 0.45){
const crops=['maize_healthy','cassava_healthy','tomato_healthy'];
return { key: crops[hashPick(data,crops.length)], confidence: 90+Math.round(diseasedRatio*40), severity:null };
}
// Offline estimate over common Ghanaian field signatures (the connected model covers all classes).
let key;
if(bP>yP && dP>0.06 && bP>0.12){ key = diseasedRatio>0.45 ? 'tomato_late' : 'maize_nclb'; }
else if(yP>bP && yP>0.10){ key = yP>0.25 ? 'cassava_cmd' : 'maize_msv'; }
else if(bP>0.10 && yP>0.06){ key = 'tomato_early'; }
else if(dP>0.10){ key = 'maize_gls'; }
else if(yP>0.08 && greenWeight>0.3){ key = 'cassava_cmd'; }
else if(bP>0.07){ key = 'cassava_cbsd'; }
else if(diseasedRatio>0.4 && greenWeight<0.25){ key='tomato_wilt'; }
else { key = 'maize_gls'; }
const confidence = Math.min(96, Math.max(71, Math.round(64 + diseasedRatio*38 + greenWeight*8)));
return { key, confidence, severity };
}
function hashPick(data,n){ let h=0; for(let i=0;i<data.length;i+=400){h=(h+data[i])%9973;} return h%n; }
function renderResult(r){
const el = document.getElementById('result'); const t = T();
if(r.notLeaf){
el.innerHTML = `<div class="card" style="text-align:center;padding:34px 22px;margin-top:8px">
<div style="font-size:2.4rem">πŸƒβ“</div>
<h4 style="justify-content:center;margin-top:10px">${t.notLeafTitle}</h4>
<p class="sub" style="margin-bottom:18px">${t.notleaf}</p>
<button class="cta" style="margin:0;font-size:1rem" onclick="goHome()">${t.again}</button></div>`;
return;
}
const d = DISEASES[r.key];
const healthy = !!d.healthy;
const sev = (!healthy && r.severity) ? SEV()[r.severity] : null;
const urgCls = sev ? sev.urg : 'routine';
const urgTxt = healthy ? t.routine : (sev ? t[sev.urg] : t.routine);
let html = `
<div class="result-hero ${healthy?'healthy':'diseased'}">
<div class="rh-top">
<img class="rh-thumb" src="${currentImageData}" alt="">
<div>
<div class="rh-label">${t.disease}</div>
<div class="rh-name">${d.name[LANG]}</div>
<div class="rh-crop">🌿 ${d.crop[LANG]}</div>
</div>
</div>
<div class="confidence">
<div class="clab"><span>${t.confidence}</span><span>${r.confidence}%</span></div>
<div class="conf-bar"><div class="conf-fill" id="cf"></div></div>
</div>
</div>`;
if(!healthy){
html += `<div class="badges">
<div class="badge"><div class="blab">${t.severityL}</div>
<div class="bval sev-${r.severity||'early'}"><span class="sev-dot"></span>${sev?sev.label:'β€”'}</div></div>
<div class="badge"><div class="blab">${t.urgencyL}</div>
<div class="urg ${urgCls}">${urgIcon(urgCls)}${urgTxt}</div></div>
</div>`;
if(sev){ html += `<div class="card" style="margin-top:11px;padding:15px 18px"><p style="margin:0;font-size:.92rem;line-height:1.5;color:var(--ink-soft)">${sev.desc}</p></div>`; }
html += `<div class="card">
<h4>${checkIcon()} ${t.treat}</h4>
<p class="sub">${t.treatSub}</p>
<ol class="tx-list">${d.tx[LANG].map(s=>`<li><span class="txt">${s}</span></li>`).join('')}</ol>
<div style="margin-top:16px"><div class="blab" style="font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);font-weight:600;margin-bottom:8px">${t.products}</div>
<div class="chem">${d.chem[LANG].map(cc=>`<span class="c">${flaskIcon()}${cc}</span>`).join('')}</div></div>
</div>`;
html += `<div class="card">
<h4>${infoIcon()} ${t.about}</h4>
<div class="about-grid"><div class="ai"><div class="ic">${bugIcon()}</div><div class="tt"><b>${t.cause}</b><span>${d.cause[LANG]}</span></div></div></div>
</div>`;
} else {
html += `<div class="card" style="text-align:center;padding:26px 22px;margin-top:13px">
<div style="font-size:2rem">βœ…πŸŒ±</div>
<h4 style="justify-content:center;margin-top:8px">${t.noDisease}</h4>
<p class="sub" style="margin-bottom:0">${t.noDiseaseSub}</p>
</div>`;
}
html += `<div class="disclaimer">${warnIcon()}<p>${t.disc}</p></div>`;
html += `<div class="feedback-bar"><span>${t.fbQ}</span>
<div class="fb-btns"><button id="fbY" onclick="feedback('y')">πŸ‘</button><button id="fbN" onclick="feedback('n')">πŸ‘Ž</button></div></div>`;
html += `<div class="result-foot">
<button class="ghost" onclick="goHome()">${leafIcon()}<span>${t.again}</span></button>
<button class="cta" style="margin:0;font-size:1rem;padding:15px" onclick="shareResult()">${shareIcon()}<span>${t.share}</span></button>
</div>`;
el.innerHTML = html;
requestAnimationFrame(()=>{ const cf=document.getElementById('cf'); if(cf) cf.style.width = r.confidence+'%'; });
}
function feedback(v){ document.getElementById('fbY').classList.toggle('picked',v==='y'); document.getElementById('fbN').classList.toggle('picked',v==='n'); }
function shareResult(){
const r=window._lastResult; const d=DISEASES[r.key];
const txt = `CropGuard GH β€” ${d.crop[LANG]}: ${d.name[LANG]} (${r.confidence}%)`;
if(navigator.share){ navigator.share({title:'CropGuard GH',text:txt}).catch(()=>{}); }
else { navigator.clipboard && navigator.clipboard.writeText(txt); alert(T().copied); }
}
function openHelp(){
document.getElementById('sheetBody').innerHTML = DATA.help[LANG].map(f=>`<div class="faq"><b>${f[0]}</b><p>${f[1]}</p></div>`).join('');
document.getElementById('sheetTitle').textContent = T().helpTitle;
document.getElementById('sheet').classList.add('open');
}
function closeSheet(){ document.getElementById('sheet').classList.remove('open'); }
function urgIcon(c){ if(c==='routine')return `<svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.8"/><path d="M12 7v5l3 2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>`;
if(c==='urgent')return `<svg viewBox="0 0 24 24" fill="none"><path d="M12 3v11" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="19" r="1.3" fill="currentColor"/></svg>`;
return `<svg viewBox="0 0 24 24" fill="none"><path d="M12 3 2 20h20L12 3Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M12 9v5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="17.5" r="1.1" fill="currentColor"/></svg>`; }
function checkIcon(){return `<svg viewBox="0 0 24 24" fill="none"><path d="M5 13l4 4 10-11" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;}
function infoIcon(){return `<svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.8"/><path d="M12 11v5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="8" r="1.1" fill="currentColor"/></svg>`;}
function bugIcon(){return `<svg viewBox="0 0 24 24" fill="none"><rect x="8" y="8" width="8" height="11" rx="4" stroke="currentColor" stroke-width="1.7"/><path d="M8 12H4m16 0h-4M8 16H4.5m15.5 0H16M9 6l1.5 2M15 6l-1.5 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>`;}
function flaskIcon(){return `<svg viewBox="0 0 24 24" fill="none"><path d="M9 3h6M10 3v6L5 18a2 2 0 0 0 1.8 3h10.4A2 2 0 0 0 19 18l-5-9V3" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg>`;}
function warnIcon(){return `<svg viewBox="0 0 24 24" fill="none"><path d="M12 3 2 20h20L12 3Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M12 9v5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="17.5" r="1.1" fill="currentColor"/></svg>`;}
function leafIcon(){return `<svg viewBox="0 0 24 24" fill="none"><path d="M5 19c0-8 6-13 14-14-1 9-6 14-14 14Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M5 19C9 15 13 12 17 11" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>`;}
function shareIcon(){return `<svg viewBox="0 0 24 24" fill="none"><circle cx="6" cy="12" r="2.4" stroke="#3a2a08" stroke-width="1.8"/><circle cx="18" cy="6" r="2.4" stroke="#3a2a08" stroke-width="1.8"/><circle cx="18" cy="18" r="2.4" stroke="#3a2a08" stroke-width="1.8"/><path d="m8 11 8-4M8 13l8 4" stroke="#3a2a08" stroke-width="1.8"/></svg>`;}
setLang(LANG);
</script>
</body>
</html>