| <!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> |
| |
| |
| |
| |
| |
| |
| 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 }; |
| } |
| |
| 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> |
|
|