AFB-Detect-YOLOv11 / app.html
AIforAFB's picture
Upload app.html
0252f85 verified
Raw History Blame Contribute Delete
140 kB
<!doctype html> <html lang="th" data-lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AFB Detection</title> <script src="https://cdn.tailwindcss.com/3.4.17"></script> <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Work+Sans:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet"> <style> :root { --ink:#17203a; --muted:#66708b; --muted-light:#a0a8c0; --glass:rgba(255,255,255,.62); --glass-line:rgba(255,255,255,.82); --shadow:0 18px 55px rgba(95,75,130,.15); --accent:#ef5d82; --accent-2:#7a62f4; --mint:#39cda5; --card-text:#534c6c; --value-color:#7a62f4; --border-color:rgba(200,189,223,.6); --saved-bg:#e9fff8; --saved-color:#23795f; } .dark { --ink:#f2f2fb; --muted:#a9afc9; --muted-light:#6a7090; --glass:rgba(18,24,52,.67); --glass-line:rgba(255,255,255,.14); --shadow:0 20px 55px rgba(0,0,0,.32); --card-text:#c8c0e0; --value-color:#8868ee; --border-color:rgba(150,140,200,.3); --saved-bg:rgba(35,121,95,.2); --saved-color:#39cda5; } *{box-sizing:border-box;} body{margin:0;font-family:"Work Sans",sans-serif;color:var(--ink);background:#f8f8fb;} .app-shell{ position:relative;width:100%;min-height:100vh;overflow-x:hidden;padding-bottom:108px; background: radial-gradient(circle at 8% 10%,rgba(255,189,175,.62),transparent 23rem), radial-gradient(circle at 92% 14%,rgba(179,203,255,.62),transparent 26rem), radial-gradient(circle at 57% 100%,rgba(218,157,252,.55),transparent 28rem), linear-gradient(145deg,#fbfafb 0%,#f6f7ff 48%,#f8ebf3 100%); transition:background .35s ease,color .35s ease; } .app-shell::before{ content:"";position:fixed;inset:0;pointer-events:none;opacity:.45; background-image:radial-gradient(rgba(255,255,255,.9) 1px,transparent 1px); background-size:18px 18px; mask-image:linear-gradient(to bottom,black,transparent 80%); } .dark .app-shell{ background: radial-gradient(circle at 8% 5%,rgba(244,103,130,.28),transparent 24rem), radial-gradient(circle at 92% 16%,rgba(81,126,255,.25),transparent 28rem), radial-gradient(circle at 48% 100%,rgba(185,67,221,.22),transparent 30rem), linear-gradient(145deg,#0b1021 0%,#111534 50%,#211334 100%); } .content-area{position:relative;z-index:1;width:100%;max-width:720px;margin:0 auto;padding:22px 16px 28px;} .glass-card{border:1px solid var(--glass-line);background:var(--glass);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);} .brand-orb{background:radial-gradient(circle at 32% 28%,#ffe1df 0 8%,#ff8794 31%,#8068ed 70%,#49399f 100%);box-shadow:0 5px 14px rgba(121,83,182,.35);} .view-panel{display:none;animation:rise .3s ease both;} .view-panel.active{display:block;} .upload-stage{ position:relative;overflow:hidden;min-height:260px; background:linear-gradient(135deg,rgba(255,255,255,.58),rgba(255,255,255,.2)), linear-gradient(120deg,#f7c6cd,#d5d4ff 48%,#a5e4d9); } .dark .upload-stage{ background:linear-gradient(135deg,rgba(20,25,57,.74),rgba(30,23,66,.46)), linear-gradient(120deg,#8c395e,#464291 48%,#176c6c); } .upload-stage::after{ content:"";position:absolute;width:190px;height:190px;top:-75px;right:-55px; border-radius:999px; background:radial-gradient(circle at 35% 35%,rgba(255,255,255,.86),rgba(255,255,255,.04) 64%); pointer-events:none; } .dropzone{border:1.5px dashed rgba(91,85,149,.43);transition:transform .2s,border-color .2s,background .2s;} .dark .dropzone{border-color:rgba(201,195,255,.43);} .dropzone.is-dragging{transform:scale(1.015);border-color:#ef5d82;background:rgba(255,255,255,.32);} .pill-flow{background:rgba(255,255,255,.42);border:1px solid rgba(255,255,255,.66);} .dark .pill-flow{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.13);} .input-style{color:var(--ink);border:1px solid rgba(111,103,156,.22);background:rgba(255,255,255,.52);} .dark .input-style{color:var(--ink);border-color:rgba(255,255,255,.15);background:rgba(7,11,31,.35);} .input-style::placeholder{color:var(--muted);} .mono-input{font-family:"Space Mono",monospace;} .nav-dock{ position:fixed;z-index:20;left:50%;bottom:16px; width:calc(100% - 28px);max-width:500px;transform:translateX(-50%); padding:8px;border-radius:25px; border:1px solid rgba(255,255,255,.67); background:rgba(255,255,255,.68); box-shadow:0 17px 40px rgba(75,51,112,.22); backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px); } .dark .nav-dock{border-color:rgba(255,255,255,.14);background:rgba(13,18,43,.82);box-shadow:0 17px 42px rgba(0,0,0,.38);} .tab-btn{color:var(--muted);transition:background .2s,color .2s,transform .15s;border-radius:18px;cursor:pointer;}.tab-btn *{pointer-events:none;} .tab-btn.active{color:#fff!important;background:linear-gradient(135deg,#ef6386,#8868ee)!important;box-shadow:0 6px 16px rgba(138,89,202,.28);} .tab-btn:not(.active):hover{transform:translateY(-1px);} h1,h2,h3{font-family:"Fraunces",serif;letter-spacing:-.025em;} .status-dot{animation:glow 1.8s ease-in-out infinite;} /* Camera */ #cam-preview-wrap{width:100%;height:180px;background:#0a0a08;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;border-radius:16px;} #cam-video{width:100%;height:100%;object-fit:cover;display:none;} #cam-canvas{display:none;} /* Canvas overlay */ .canvas-wrap{position:relative;} #det-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;} /* Slider */ .conf-slider{width:100%;height:6px;border-radius:3px;cursor:pointer;-webkit-appearance:none;appearance:none;outline:none;background:linear-gradient(90deg,#ef6386,#8868ee);} .conf-slider::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:rgba(150,140,200,.2);} .conf-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 0 0 3px #8868ee,0 2px 8px rgba(0,0,0,.25);cursor:pointer;margin-top:-6px;} .conf-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 0 0 3px #8868ee;border:none;cursor:pointer;} .conf-slider::-moz-range-track{height:6px;border-radius:3px;background:linear-gradient(90deg,#ef6386,#8868ee);} /* Lightbox */ .lightbox{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:300;display:none;align-items:center;justify-content:center;flex-direction:column;padding:20px;} .lightbox.open{display:flex;} .lightbox img{max-width:100%;max-height:calc(100vh - 120px);object-fit:contain;border-radius:8px;} .lb-bar{display:flex;align-items:center;gap:16px;margin-top:14px;} .lb-close{position:absolute;top:18px;right:18px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.1);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:20px;} .lb-switch{padding:8px 16px;border-radius:8px;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.1);color:#fff;cursor:pointer;font-family:"Work Sans",sans-serif;font-size:13px;display:flex;align-items:center;gap:6px;} /* Guide modal */ .overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:200;padding:16px;opacity:1;transition:opacity .2s;} .overlay.hidden{opacity:0;pointer-events:none;} .modal-box{background:var(--glass);backdrop-filter:blur(18px);border:1px solid var(--glass-line);border-radius:20px;width:100%;max-width:520px;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 16px 48px rgba(0,0,0,.18);} .dark .modal-box{background:rgba(13,18,43,.92);} .modal-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);padding:0 16px;} .modal-tab{padding:10px 14px;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;background:none;border-top:none;border-left:none;border-right:none;font-family:"Work Sans",sans-serif;transition:color .15s;} .modal-tab.active{color:var(--accent-2);border-bottom-color:var(--accent-2);} .modal-body{overflow-y:auto;flex:1;padding:20px;} /* Guide steps */ .g-step{display:flex;gap:12px;margin-bottom:16px;} .g-num{width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,#ef6386,#8868ee);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;} .g-line{width:2px;flex:1;background:var(--border-color);margin:4px 0;min-height:8px;} .g-tip{display:flex;align-items:flex-start;gap:6px;margin-top:8px;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.55;} .g-tip.amber{background:rgba(239,93,130,.1);color:#9e3d52;} .dark .g-tip.amber{background:rgba(239,93,130,.15);color:#f0a0b5;} .g-tip.green{background:rgba(57,205,165,.12);color:#1a6b55;} .dark .g-tip.green{background:rgba(57,205,165,.15);color:#39cda5;} .crop-demo{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center;margin-top:10px;} .crop-card{border-radius:10px;overflow:hidden;border:1px solid var(--border-color);} .crop-card img{width:100%;aspect-ratio:1;object-fit:cover;display:block;} .crop-lbl{font-size:10px;font-family:"Space Mono",monospace;color:var(--muted);padding:5px 8px;border-top:1px solid var(--border-color);display:flex;align-items:center;gap:4px;} /* WHO table */ .who-tbl{width:100%;border-collapse:collapse;font-size:13px;} .who-tbl th{text-align:left;padding:8px 10px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-family:"Space Mono",monospace;border-bottom:1px solid var(--border-color);} .who-tbl td{padding:10px;border-bottom:1px solid var(--border-color);color:var(--ink);vertical-align:top;line-height:1.5;} .who-tbl tr:last-child td{border-bottom:none;} .gb{display:inline-flex;font-size:11px;font-weight:700;padding:2px 10px;border-radius:20px;font-family:"Space Mono",monospace;} .gb-0{background:rgba(150,140,200,.15);color:var(--muted);border:1px solid var(--border-color);} .gb-s{background:rgba(239,93,130,.12);color:#9e3d52;border:1px solid rgba(239,93,130,.3);} .dark .gb-s{color:#f0a0b5;} .gb-1{background:#dbeafe;color:#1e40af;border:1px solid #bfdbfe;} .dark .gb-1{background:rgba(30,64,175,.2);color:#93c5fd;} .gb-2{background:#e0e7ff;color:#3730a3;border:1px solid #c7d2fe;} .dark .gb-2{background:rgba(55,48,163,.2);color:#a5b4fc;} .gb-3{background:rgba(239,93,130,.15);color:#9d174d;border:1px solid rgba(239,93,130,.3);} .dark .gb-3{color:#f9a8d4;} /* Toast */ .toast{position:fixed;bottom:90px;left:50%;transform:translateX(-50%) translateY(40px);background:rgba(239,93,130,.12);border:1px solid rgba(239,93,130,.3);color:#9e3d52;padding:10px 18px;border-radius:12px;font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.12);display:flex;align-items:center;gap:8px;max-width:90%;opacity:0;transition:transform .3s,opacity .3s;z-index:250;} .dark .toast{background:rgba(239,93,130,.2);color:#f0a0b5;} .toast.show{transform:translateX(-50%) translateY(0);opacity:1;} /* Saved banner */ .saved-banner{background:var(--saved-bg);color:var(--saved-color);} /* Submit btn */ .submit-btn:disabled{opacity:.45;cursor:not-allowed;filter:saturate(.4);} /* Zoom hint */ .zoom-hint-over{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);color:#fff;width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s;pointer-events:none;} .canvas-wrap:hover .zoom-hint-over{opacity:1;} @keyframes glow{0%,100%{box-shadow:0 0 0 0 rgba(57,205,165,.45);}50%{box-shadow:0 0 0 7px rgba(57,205,165,0);}} @keyframes rise{from{opacity:0;transform:translateY(9px);}to{opacity:1;transform:translateY(0);}} @keyframes spin{to{transform:rotate(360deg);}} .spin{animation:spin .9s linear infinite;display:inline-block;} @media(min-width:640px){.content-area{padding:34px 24px 36px;}.nav-dock{bottom:22px;}} </style> </head> <body> <div id="app-shell" class="app-shell"> <!-- ── HEADER ── --> <header class="relative z-10 w-full"> <div class="content-area flex items-center justify-between pb-2"> <div class="flex items-center gap-3"> <div class="brand-orb flex h-10 w-10 sm:h-11 sm:w-11 items-center justify-center rounded-2xl text-white"> <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M6 18h8"/><path d="M3 22h18"/><path d="M14 22a7 7 0 1 0 0-14h-1"/> <path d="M9 14h2"/><path d="M9 12a2 2 0 0 1-2-2V6l3-3 3 3v4a2 2 0 0 1-2 2Z"/> <path d="M12 9v3a2 2 0 0 1-2 2H9"/> </svg> </div> <div> <p class="font-bold text-[10px] tracking-[.12rem] hidden sm:block" style="color:#796e9a;">LEARNING ASSIST</p> <h1 class="font-bold mt-0.5 text-base sm:text-[19px]" id="app-title">AFB Detection</h1> </div> </div> <div class="flex items-center gap-1.5 flex-shrink-0"> <div class="pill-flow flex items-center gap-2 rounded-full px-3 py-2"> <span class="status-dot h-2 w-2 rounded-full bg-[#39cda5]"></span> <span class="font-bold text-xs" style="color:#327e6b;" id="status-text" data-th="ΰΈ­ΰΈ­ΰΈ™ΰΉ„ΰΈ₯ΰΈ™ΰΉŒ" data-en="Online">ΰΈ­ΰΈ­ΰΈ™ΰΉ„ΰΈ₯ΰΈ™ΰΉŒ</span> </div> <button id="lang-btn" class="glass-card flex h-9 items-center justify-center rounded-xl px-2 gap-1 font-bold text-xs" style="color:#665894;"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 8 6 6"/><path d="m4 14 6-6 2-3"/><path d="M2 5h12"/><path d="M7 2h1"/><path d="m22 22-5-10-5 10"/><path d="M14 18h6"/></svg> <span id="lang-label">EN</span> </button> <button id="theme-btn" class="glass-card flex h-9 w-9 items-center justify-center rounded-xl" style="color:#665894;" aria-label="Dark mode"> <svg id="theme-icon" style="width:19px;height:19px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9"/><path d="M20 3v4"/><path d="M22 5h-4"/></svg> </button> </div> </div> </header> <main class="content-area"> <!-- ══════════════════════════════════ VIEW 1: UPLOAD ══════════════════════════════════ --> <section id="view-upload" class="view-panel active"> <!-- Upload card --> <section class="upload-stage glass-card rounded-[28px] p-4 sm:p-5"> <div class="relative z-10"> <div class="mb-4 flex items-center justify-between"> <div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-white/60 text-[#6d59d5]"> <svg class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 7V5a2 2 0 0 1 2-2h2"/><path d="M17 3h2a2 2 0 0 1 2 2v2"/> <path d="M21 17v2a2 2 0 0 1-2 2h-2"/><path d="M7 21H5a2 2 0 0 1-2-2v-2"/> <circle cx="12" cy="12" r="3"/><path d="m16 16-1.9-1.9"/> </svg> </div> <span class="rounded-full px-3 py-1.5 font-bold text-[11px]" style="background:rgba(255,255,255,.72);color:#6a4fb1;" data-th="ΰΈͺΰΉΰΈΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ" data-en="NEW SCAN">ΰΈͺΰΉΰΈΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ</span> </div> <h3 class="font-bold max-w-sm" style="font-size:19px;" data-th="ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”ΰΈ ΰΈ²ΰΈžΰΈͺΰΉ€ΰΈ‘ΰΈ΅ΰΈ’ΰΈ£ΰΉŒ" data-en="Upload a smear image">ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”ΰΈ ΰΈ²ΰΈžΰΈͺΰΉ€ΰΈ‘ΰΈ΅ΰΈ’ΰΈ£ΰΉŒ</h3> <p class="mt-2 max-w-md leading-6" style="font-size:14px;color:#554d70;" data-th="ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI จากภาพ microscopy ΰΈ—ΰΈ΅ΰΉˆΰΈŠΰΈ±ΰΈ”ΰΉ€ΰΈˆΰΈ™" data-en="Start AI screening with a clear, high-quality microscopy image.">ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI จากภาพ microscopy ΰΈ—ΰΈ΅ΰΉˆΰΈŠΰΈ±ΰΈ”ΰΉ€ΰΈˆΰΈ™</p> <!-- Source tabs --> <div class="flex gap-2 mt-4 mb-1"> <button class="src-tab active flex items-center gap-1.5 rounded-xl px-3 py-2 font-bold text-xs transition-all" style="background:rgba(255,255,255,.72);color:#6a4fb1;" onclick="switchSrc('upload',this)" data-th="ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”" data-en="Upload"> <svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" x2="12" y1="3" y2="15"/></svg><span data-th="ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”" data-en="Upload">ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”</span> </button> <button class="src-tab flex items-center gap-1.5 rounded-xl px-3 py-2 font-bold text-xs transition-all" style="background:rgba(255,255,255,.35);color:var(--ink);opacity:.75;" onclick="switchSrc('camera',this)" data-th="กΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡" data-en="Camera"> <svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3z"/><circle cx="12" cy="13" r="3"/></svg><span data-th="กΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡" data-en="Camera">กΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡</span> </button> <button class="src-tab flex items-center gap-1.5 rounded-xl px-3 py-2 font-bold text-xs transition-all" style="background:rgba(255,255,255,.35);color:var(--ink);opacity:.75;" onclick="switchSrc('url',this)" data-th="URL" data-en="URL"> <svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg><span>URL</span> </button> </div> <!-- Upload panel --> <div id="src-upload" class="src-panel"> <div id="dropzone" class="dropzone mt-3 rounded-2xl bg-white/35 px-4 py-5 text-center cursor-pointer" onclick="document.getElementById('image-file').click()"> <svg class="mx-auto mb-2 h-8 w-8 text-[#7058d7]" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/> <polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/> <circle cx="18" cy="6" r="3" fill="#ef5d82" stroke="none"/> </svg> <p class="font-bold" style="font-size:15px;color:#393050;" data-th="ΰΈ₯ΰΈ²ΰΈΰΈ ΰΈ²ΰΈžΰΈ‘ΰΈ²ΰΈ§ΰΈ²ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΈ™ΰΈ΅ΰΉˆ" data-en="Drop your image here">ΰΈ₯ΰΈ²ΰΈΰΈ ΰΈ²ΰΈžΰΈ‘ΰΈ²ΰΈ§ΰΈ²ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΈ™ΰΈ΅ΰΉˆ</p> <p class="mt-1 text-[13px]" style="color:#716887;" data-th="JPG ΰΈ«ΰΈ£ΰΈ·ΰΈ­ PNG Β· ΰΈͺΰΈΉΰΈ‡ΰΈͺΰΈΈΰΈ” 10MB" data-en="JPG or PNG Β· maximum 10MB">JPG ΰΈ«ΰΈ£ΰΈ·ΰΈ­ PNG Β· ΰΈͺΰΈΉΰΈ‡ΰΈͺΰΈΈΰΈ” 10MB</p> <p id="selected-file" class="mt-2 min-h-[1.2rem] text-sm font-semibold text-[#504676]" aria-live="polite"></p> <label for="image-file" class="mt-3 inline-flex cursor-pointer items-center gap-2 rounded-xl px-4 py-2.5 font-bold text-white text-sm" style="background:linear-gradient(135deg,#ef6386,#8868ee);" onclick="event.stopPropagation()"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"/></svg> <span data-th="ΰΉ€ΰΈ₯ΰΈ·ΰΈ­ΰΈΰΉ„ΰΈŸΰΈ₯์" data-en="Choose image">ΰΉ€ΰΈ₯ΰΈ·ΰΈ­ΰΈΰΉ„ΰΈŸΰΈ₯์</span> </label> <input id="image-file" type="file" accept="image/jpeg,image/png,image/webp" class="sr-only"> </div> </div> <!-- Camera panel --> <div id="src-camera" class="src-panel hidden mt-3"> <div id="cam-preview-wrap"> <div id="cam-off-state" class="flex flex-col items-center gap-2" style="color:#333330;"> <svg class="inline-block" style="width:36px;height:36px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 2 22 22"/><path d="M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16"/><path d="M9.5 4h5l2 3h3a2 2 0 0 1 2 2v7.5"/><path d="M14.121 15.121A3 3 0 1 1 9.88 10.88"/></svg> <span class="text-xs font-mono" style="color:#555550;" data-th="กดเปิดกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘" data-en="Press start to open camera">กดเปิดกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘</span> </div> <video id="cam-video" autoplay playsinline></video> <canvas id="cam-canvas"></canvas> </div> <div class="flex gap-2 mt-3"> <button onclick="startCamera()" class="flex-1 flex items-center justify-center gap-2 rounded-xl py-2.5 font-bold text-white text-sm" style="background:linear-gradient(135deg,#ef6386,#8868ee);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3z"/><circle cx="12" cy="13" r="3"/></svg><span data-th="เปิดกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡" data-en="Start camera">เปิดกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡</span> </button> <button onclick="snapPhoto()" class="flex items-center justify-center gap-2 rounded-xl px-4 py-2.5 font-bold text-sm glass-card" style="color:var(--muted);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="m14.31 8 5.74 9.94"/><path d="M9.69 8h11.48"/><path d="m7.38 12 5.74-9.94"/><path d="M9.69 16 3.95 6.06"/><path d="M14.31 16H2.83"/><path d="m16.62 12-5.74 9.94"/></svg><span data-th="ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈž" data-en="Capture">ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈž</span> </button> </div> <p class="mt-2 text-[11px] font-mono flex gap-1.5 items-start" style="color:var(--muted);"> <svg class="inline-block flex-shrink-0" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> <span data-th="ΰΈ£ΰΈ­ΰΈ‡ΰΈ£ΰΈ±ΰΈš webcam แΰΈ₯ะกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ microscope แบบ USB" data-en="Supports webcam and USB microscope camera">ΰΈ£ΰΈ­ΰΈ‡ΰΈ£ΰΈ±ΰΈš webcam แΰΈ₯ะกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ microscope แบบ USB</span> </p> </div> <!-- URL panel --> <div id="src-url" class="src-panel hidden mt-3"> <div class="flex gap-2"> <input id="url-input" type="text" class="input-style flex-1 rounded-xl px-4 py-3 text-sm mono-input" placeholder="https://example.com/image.jpg"> <button onclick="loadFromUrl()" class="rounded-xl px-4 py-3 font-bold text-white text-sm" style="background:linear-gradient(135deg,#ef6386,#8868ee);" data-th="ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”" data-en="Load">ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”</button> </div> <p class="mt-2 text-[11px] font-mono flex gap-1.5" style="color:var(--muted);"> <svg class="inline-block flex-shrink-0" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> <span data-th="ΰΉƒΰΈͺ่ΰΈ₯ΰΈ΄ΰΈ‡ΰΈΰΉŒΰΈ ΰΈ²ΰΈžΰΉ‚ΰΈ”ΰΈ’ΰΈ•ΰΈ£ΰΈ‡ (.jpg ΰΈ«ΰΈ£ΰΈ·ΰΈ­ .png)" data-en="Enter a direct image URL (.jpg or .png)">ΰΉƒΰΈͺ่ΰΈ₯ΰΈ΄ΰΈ‡ΰΈΰΉŒΰΈ ΰΈ²ΰΈžΰΉ‚ΰΈ”ΰΈ’ΰΈ•ΰΈ£ΰΈ‡ (.jpg ΰΈ«ΰΈ£ΰΈ·ΰΈ­ .png)</span> </p> </div> </div> </section> <!-- Preview --> <div id="preview-box" class="hidden mt-4 rounded-2xl overflow-hidden glass-card relative"> <img id="preview-img" src="" alt="preview" class="w-full max-h-[240px] object-cover block"> <div class="absolute top-2 left-2 px-2 py-1 rounded-full text-[10px] font-mono text-white" style="background:rgba(0,0,0,.5);backdrop-filter:blur(4px);" id="preview-chip">β€”</div> </div> <!-- Form --> <div class="glass-card mt-4 rounded-[28px] p-5"> <div class="flex items-center justify-between gap-4"> <div> <h3 class="font-bold" style="font-size:18px;" data-th="ΰΈ£ΰΈ²ΰΈ’ΰΈ₯ΰΈ°ΰΉ€ΰΈ­ΰΈ΅ΰΈ’ΰΈ”ΰΈΰΈ²ΰΈ£ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒ" data-en="Analysis details">ΰΈ£ΰΈ²ΰΈ’ΰΈ₯ΰΈ°ΰΉ€ΰΈ­ΰΈ΅ΰΈ’ΰΈ”ΰΈΰΈ²ΰΈ£ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒ</h3> <p class="mt-1 text-[13px]" style="color:var(--muted);" data-th="ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΈΰΉˆΰΈ­ΰΈ™ΰΈͺΰΉˆΰΈ‡" data-en="Add a sample reference before submitting.">ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΈΰΉˆΰΈ­ΰΈ™ΰΈͺΰΉˆΰΈ‡</p> </div> <div class="flex h-10 w-10 flex-none items-center justify-center rounded-full" style="background:#f1eafe;color:#7a62f4;"> <svg class="inline-block" style="width:20px;height:20px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2v6l3.5 7a4 4 0 1 1-7 0l3.5-7V2"/><path d="M6.33 19.5a4 4 0 0 1-.33-1.5"/><path d="M10 2h4"/></svg> </div> </div> <div class="mt-4"> <label for="sample-id" class="block font-bold text-[13px] mb-2" style="color:var(--muted);" data-th="ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ (ΰΉ„ΰΈ‘ΰΉˆΰΈšΰΈ±ΰΈ‡ΰΈ„ΰΈ±ΰΈš)" data-en="Sample ID (optional)">ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ (ΰΉ„ΰΈ‘ΰΉˆΰΈšΰΈ±ΰΈ‡ΰΈ„ΰΈ±ΰΈš)</label> <input id="sample-id" type="text" maxlength="80" autocomplete="off" class="mono-input input-style w-full rounded-xl px-4 py-3.5 text-sm" data-th-ph="ΰΉ€ΰΈŠΰΉˆΰΈ™ slide-001, lab-2026-014" data-en-ph="e.g. slide-001, lab-2026-014" placeholder="ΰΉ€ΰΈŠΰΉˆΰΈ™ slide-001, lab-2026-014"> </div> <div class="mt-4 rounded-2xl p-4" style="background:rgba(255,255,255,.4);"> <div class="flex items-start gap-3"> <input id="consent" type="checkbox" checked class="mt-0.5 h-5 w-5 accent-[#7a62f4]" onchange="updateSubmitState()"> <label for="consent" class="cursor-pointer leading-6 text-[13px]" style="color:var(--card-text);" data-th="ΰΈ‰ΰΈ±ΰΈ™ΰΈ’ΰΈ΄ΰΈ™ΰΈ’ΰΈ­ΰΈ‘ΰΉƒΰΈ«ΰΉ‰ΰΉ€ΰΈΰΉ‡ΰΈšΰΈ ΰΈ²ΰΈžΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈΰΈ²ΰΈ£ΰΈ¨ΰΈΆΰΈΰΈ©ΰΈ²ΰΈ§ΰΈ΄ΰΈˆΰΈ±ΰΈ’ ΰΉ‚ΰΈ”ΰΈ’ΰΉ„ΰΈ‘ΰΉˆΰΈ‘ΰΈ΅ΰΈΰΈ²ΰΈ£ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈͺΰΉˆΰΈ§ΰΈ™ΰΈ•ΰΈ±ΰΈ§ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈœΰΈΉΰΉ‰ΰΈ›ΰΉˆΰΈ§ΰΈ’ แΰΈ₯ΰΈ°ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈˆΰΈ§ΰΉˆΰΈ²ΰΈœΰΈ₯ΰΈ₯ΰΈ±ΰΈžΰΈ˜ΰΉŒΰΈ™ΰΈ΅ΰΉ‰ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉˆΰΈΰΈ²ΰΈ£ΰΈ§ΰΈ΄ΰΈ™ΰΈ΄ΰΈˆΰΈ‰ΰΈ±ΰΈ’ΰΈ—ΰΈ²ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈžΰΈ—ΰΈ’ΰΉŒ" data-en="I consent to storing this image for research. No personal or patient data will be recorded. I understand this is not a medical diagnosis.">ΰΈ‰ΰΈ±ΰΈ™ΰΈ’ΰΈ΄ΰΈ™ΰΈ’ΰΈ­ΰΈ‘ΰΉƒΰΈ«ΰΉ‰ΰΉ€ΰΈΰΉ‡ΰΈšΰΈ ΰΈ²ΰΈžΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈΰΈ²ΰΈ£ΰΈ¨ΰΈΆΰΈΰΈ©ΰΈ²ΰΈ§ΰΈ΄ΰΈˆΰΈ±ΰΈ’ ΰΉ‚ΰΈ”ΰΈ’ΰΉ„ΰΈ‘ΰΉˆΰΈ‘ΰΈ΅ΰΈΰΈ²ΰΈ£ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈͺΰΉˆΰΈ§ΰΈ™ΰΈ•ΰΈ±ΰΈ§ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈœΰΈΉΰΉ‰ΰΈ›ΰΉˆΰΈ§ΰΈ’ แΰΈ₯ΰΈ°ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈˆΰΈ§ΰΉˆΰΈ²ΰΈœΰΈ₯ΰΈ₯ΰΈ±ΰΈžΰΈ˜ΰΉŒΰΈ™ΰΈ΅ΰΉ‰ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉˆΰΈΰΈ²ΰΈ£ΰΈ§ΰΈ΄ΰΈ™ΰΈ΄ΰΈˆΰΈ‰ΰΈ±ΰΈ’ΰΈ—ΰΈ²ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈžΰΈ—ΰΈ’ΰΉŒ</label> </div> </div> <button id="submit-btn" onclick="analyze()" disabled class="submit-btn mt-5 flex w-full items-center justify-center gap-2 rounded-2xl px-5 py-4 font-bold text-white" style="background:linear-gradient(135deg,#ef6386,#8868ee);"> <svg class="inline-block" style="width:20px;height:20px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"/><path d="M5 3v4"/><path d="M19 17v4"/><path d="M3 5h4"/><path d="M17 19h4"/></svg> <span id="submit-label" data-th="ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉΰΈ₯ΰΈ°ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈ" data-en="Analyze and save">ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉΰΈ₯ΰΈ°ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈ</span> </button> </div> </section> <!-- ══════════════════════════════════ VIEW 2: RESULT ══════════════════════════════════ --> <section id="view-result" class="view-panel"> <!-- Back --> <div class="mb-4 flex items-center gap-3"> <button onclick="goBack()" class="glass-card flex items-center gap-2 rounded-xl px-3 py-2 font-bold text-sm" style="color:var(--accent-2);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 19-7-7 7-7"/><path d="M19 12H5"/></svg> <span data-th="ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉƒΰΈ«ΰΈ‘ΰΉˆ" data-en="New analysis">ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉƒΰΈ«ΰΈ‘ΰΉˆ</span> </button> <div class="flex items-center gap-2"> <div class="brand-orb flex h-9 w-9 items-center justify-center rounded-xl text-white"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 18h8"/><path d="M3 22h18"/><path d="M14 22a7 7 0 1 0 0-14h-1"/><path d="M9 14h2"/><path d="M9 12a2 2 0 0 1-2-2V6l3-3 3 3v4a2 2 0 0 1-2 2Z"/></svg> </div> <span class="font-bold" style="font-size:16px;">AFB Detection</span> </div> </div> <h2 class="font-bold mb-3" style="font-size:24px;" data-th="ผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆ" data-en="Detection Results">ผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆ</h2> <!-- Images --> <div class="grid grid-cols-2 gap-3"> <article class="glass-card overflow-hidden rounded-2xl"> <div class="flex items-center gap-2 px-3 py-2"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg> <span class="font-bold text-sm" style="color:var(--card-text);" data-th="ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš" data-en="Original">ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš</span> </div> <div class="canvas-wrap cursor-zoom-in" onclick="openLightbox('orig')"> <div id="sk-orig" class="h-36 flex items-center justify-center" style="background:rgba(150,140,200,.1);"> <svg class="inline-block" style="width:28px;height:28px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg> </div> <img id="orig-img" src="" alt="ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš" class="w-full h-36 object-cover" style="display:none;"> <div class="zoom-hint-over"><svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" x2="16.65" y1="21" y2="16.65"/><line x1="11" x2="11" y1="8" y2="14"/><line x1="8" x2="14" y1="11" y2="11"/></svg></div> </div> </article> <article class="glass-card overflow-hidden rounded-2xl"> <div class="flex items-center gap-2 px-3 py-2"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7V5a2 2 0 0 1 2-2h2"/><path d="M17 3h2a2 2 0 0 1 2 2v2"/><path d="M21 17v2a2 2 0 0 1-2 2h-2"/><path d="M7 21H5a2 2 0 0 1-2-2v-2"/><path d="M7 12h10"/></svg> <span class="font-bold text-sm" style="color:var(--card-text);" data-th="detection" data-en="detection">detection</span> </div> <div class="canvas-wrap cursor-zoom-in" onclick="openLightbox('result')"> <div id="sk-result" class="h-36 flex items-center justify-center" style="background:rgba(150,140,200,.1);"> <svg class="inline-block" style="width:28px;height:28px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7V5a2 2 0 0 1 2-2h2"/><path d="M17 3h2a2 2 0 0 1 2 2v2"/><path d="M21 17v2a2 2 0 0 1-2 2h-2"/><path d="M7 21H5a2 2 0 0 1-2-2v-2"/><path d="M7 12h10"/></svg> </div> <img id="result-img" src="" alt="detection" class="w-full h-36 object-cover" style="display:none;"> <canvas id="det-canvas" class="absolute inset-0 w-full h-full pointer-events-none"></canvas> <div class="zoom-hint-over"><svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" x2="16.65" y1="21" y2="16.65"/><line x1="11" x2="11" y1="8" y2="14"/><line x1="8" x2="14" y1="11" y2="11"/></svg></div> </div> </article> </div> <!-- Stats --> <div class="mt-3 grid grid-cols-2 gap-3"> <div class="glass-card rounded-2xl p-4"> <p class="text-sm font-bold" style="color:var(--card-text);" data-th="AFB ΰΈ—ΰΈ΅ΰΉˆΰΈžΰΈš" data-en="AFB found">AFB ΰΈ—ΰΈ΅ΰΉˆΰΈžΰΈš</p> <strong id="stat-count" class="mt-1 block text-3xl font-bold" style="color:var(--accent-2);">β€”</strong> </div> <div class="glass-card rounded-2xl p-4"> <p class="text-sm font-bold" style="color:var(--card-text);">confidence</p> <strong id="stat-conf" class="mt-1 block text-3xl font-bold" style="color:var(--accent-2);">β€”</strong> </div> </div> <!-- Details --> <h3 class="font-bold mt-5 mb-2" style="font-size:18px;" data-th="ΰΈ£ΰΈ²ΰΈ’ΰΈ₯ΰΈ°ΰΉ€ΰΈ­ΰΈ΅ΰΈ’ΰΈ”" data-en="Details">ΰΈ£ΰΈ²ΰΈ’ΰΈ₯ΰΈ°ΰΉ€ΰΈ­ΰΈ΅ΰΈ’ΰΈ”</h3> <div class="glass-card divide-y rounded-2xl px-4" style="divide-color:rgba(150,140,200,.2);"> <div class="flex items-center justify-between py-4"> <span class="flex items-center gap-3 text-sm" style="color:var(--card-text);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 3v18h18"/><path d="M18 17V9"/><path d="M13 17V5"/><path d="M8 17v-3"/></svg>Avg confidence </span> <b id="detail-conf" class="font-mono font-bold" style="color:var(--accent-2);">β€”</b> </div> <div class="flex items-center justify-between py-4"> <span class="flex items-center gap-3 text-sm" style="color:var(--card-text);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"/><path d="m6.08 9.5-3.5 1.6a1 1 0 0 0 0 1.81l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9a1 1 0 0 0 0-1.83l-3.5-1.59"/><path d="m6.08 14.5-3.5 1.6a1 1 0 0 0 0 1.81l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9a1 1 0 0 0 0-1.83l-3.5-1.59"/></svg> <span data-th="ΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ detection" data-en="Total detections">ΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ detection</span> </span> <b id="detail-count" class="font-mono font-bold" style="color:var(--accent-2);">β€”</b> </div> </div> <!-- Slider --> <h3 class="font-bold mt-5 mb-2 text-[13px] tracking-[.08em] uppercase font-mono" style="color:var(--muted);" data-th="ΰΈ›ΰΈ£ΰΈ±ΰΈš CONFIDENCE THRESHOLD" data-en="CONFIDENCE THRESHOLD">ΰΈ›ΰΈ£ΰΈ±ΰΈš CONFIDENCE THRESHOLD</h3> <div class="glass-card rounded-2xl p-4"> <div class="flex items-center gap-2"> <svg class="inline-block flex-shrink-0" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="21" x2="14" y1="4" y2="4"/><line x1="10" x2="3" y1="4" y2="4"/><line x1="21" x2="12" y1="12" y2="12"/><line x1="8" x2="3" y1="12" y2="12"/><line x1="21" x2="16" y1="20" y2="20"/><line x1="12" x2="3" y1="20" y2="20"/><line x1="14" x2="14" y1="2" y2="6"/><line x1="8" x2="8" y1="10" y2="14"/><line x1="16" x2="16" y1="18" y2="22"/></svg> <span class="text-xs flex-1" style="color:var(--card-text);" data-th="ΰΈ„ΰΉˆΰΈ²ΰΈ•ΰΉˆΰΈ³ = ΰΈˆΰΈ±ΰΈšΰΉ„ΰΈ”ΰΉ‰ΰΈ‘ΰΈ²ΰΈΰΈ‚ΰΈΆΰΉ‰ΰΈ™ (false positive ΰΈ­ΰΈ²ΰΈˆΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘)" data-en="Lower = detect more (more false positives)">ΰΈ„ΰΉˆΰΈ²ΰΈ•ΰΉˆΰΈ³ = ΰΈˆΰΈ±ΰΈšΰΉ„ΰΈ”ΰΉ‰ΰΈ‘ΰΈ²ΰΈΰΈ‚ΰΈΆΰΉ‰ΰΈ™ (false positive ΰΈ­ΰΈ²ΰΈˆΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘)</span> <b id="slider-display" class="font-mono text-sm" style="color:var(--accent-2);">0.15</b> </div> <input id="conf-slider" type="range" min="5" max="95" step="1" value="15" class="conf-slider mt-3" oninput="onSliderInput(this.value)"> <div class="flex justify-between text-xs font-mono mt-1" style="color:var(--muted);"><span>0.05</span><span>0.50</span><span>0.95</span></div> <p class="mt-3 text-sm flex items-center gap-2" style="color:var(--card-text);"> <span data-th="พบ AFB" data-en="AFB found">พบ AFB</span> <b id="slider-count" style="color:var(--accent-2);">β€”</b> <span data-th="ΰΈˆΰΈΈΰΈ” ΰΈ—ΰΈ΅ΰΉˆ threshold ΰΈ™ΰΈ΅ΰΉ‰" data-en="detections at this threshold">ΰΈˆΰΈΈΰΈ” ΰΈ—ΰΈ΅ΰΉˆ threshold ΰΈ™ΰΈ΅ΰΉ‰</span> </p> </div> <!-- Saved banner --> <div id="saved-banner" class="saved-banner mt-4 flex items-center gap-3 rounded-2xl p-4 hidden" style="background:rgba(122,98,244,.12);color:var(--accent-2);"> <svg class="inline-block flex-shrink-0" style="width:20px;height:20px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg> <span class="font-bold text-sm" data-th="ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ ΰΈ²ΰΈžΰΉΰΈ₯ะผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈšΰΈ£ΰΉ‰ΰΈ­ΰΈ’ΰΉΰΈ₯ΰΉ‰ΰΈ§" data-en="Image and result saved successfully.">ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ ΰΈ²ΰΈžΰΉΰΈ₯ะผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈšΰΈ£ΰΉ‰ΰΈ­ΰΈ’ΰΉΰΈ₯ΰΉ‰ΰΈ§</span> </div> <div id="save-fail-banner" class="mt-4 flex items-center gap-3 rounded-2xl p-4 hidden" style="background:rgba(239,93,130,.12);color:#9e3d52;"> <svg class="inline-block flex-shrink-0" style="width:20px;height:20px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg> <span class="font-bold text-sm" id="save-fail-msg" data-th="ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ ΰΈ²ΰΈžΰΉ„ΰΈ‘ΰΉˆΰΈͺΰΈ³ΰΉ€ΰΈ£ΰΉ‡ΰΈˆ" data-en="Failed to save image">ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ ΰΈ²ΰΈžΰΉ„ΰΈ‘ΰΉˆΰΈͺΰΈ³ΰΉ€ΰΈ£ΰΉ‡ΰΈˆ</span> </div> <button onclick="goBack()" class="mt-4 flex w-full items-center justify-center gap-2 rounded-2xl px-5 py-3 font-bold text-sm glass-card" style="color:var(--muted);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="M12 5v14"/></svg> <span data-th="ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΈ ΰΈ²ΰΈžΰΉƒΰΈ«ΰΈ‘ΰΉˆ" data-en="Analyze new image">ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΈ ΰΈ²ΰΈžΰΉƒΰΈ«ΰΈ‘ΰΉˆ</span> </button> <div class="mt-5 rounded-2xl p-4 text-center leading-6 text-sm font-semibold" style="background:linear-gradient(135deg,rgba(239,93,130,.15),rgba(136,104,238,.15));border:1.5px solid rgba(239,93,130,.4);color:var(--ink);" data-th="⚠ App ΰΈ™ΰΈ΅ΰΉ‰ΰΈ’ΰΈ±ΰΈ‡ΰΈ­ΰΈ’ΰΈΉΰΉˆΰΉƒΰΈ™ΰΈ‚ΰΈ±ΰΉ‰ΰΈ™ΰΈ•ΰΈ­ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈžΰΈ±ΰΈ’ΰΈ™ΰΈ² แΰΈ₯ะผΰΈ₯ΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ„ΰΈ±ΰΈ”ΰΈΰΈ£ΰΈ­ΰΈ‡ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI ΰΉ€ΰΈ—ΰΉˆΰΈ²ΰΈ™ΰΈ±ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈΰΈΰΉˆΰΈ­ΰΈ™ΰΈ™ΰΈ³ΰΉ„ΰΈ›ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ΰΈ„ΰΈ₯ินิก" data-en="⚠ This app is still under development. This result is AI-assisted screening only and must be reviewed by a qualified professional before any clinical use.">⚠ App ΰΈ™ΰΈ΅ΰΉ‰ΰΈ’ΰΈ±ΰΈ‡ΰΈ­ΰΈ’ΰΈΉΰΉˆΰΉƒΰΈ™ΰΈ‚ΰΈ±ΰΉ‰ΰΈ™ΰΈ•ΰΈ­ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈžΰΈ±ΰΈ’ΰΈ™ΰΈ² แΰΈ₯ะผΰΈ₯ΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ„ΰΈ±ΰΈ”ΰΈΰΈ£ΰΈ­ΰΈ‡ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI ΰΉ€ΰΈ—ΰΉˆΰΈ²ΰΈ™ΰΈ±ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈΰΈΰΉˆΰΈ­ΰΈ™ΰΈ™ΰΈ³ΰΉ„ΰΈ›ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ΰΈ„ΰΈ₯ินิก</div> </section> </main> <!-- ── NAV DOCK (2 tabs) ── --> <nav class="nav-dock"> <div class="grid grid-cols-3 gap-1"> <button id="tab-upload" type="button" class="tab-btn active flex flex-col items-center rounded-2xl px-2 py-2.5" onclick="setView('upload')"> <svg class="inline-block" style="width:19px;height:19px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"/><rect width="7" height="5" x="14" y="3" rx="1"/><rect width="7" height="9" x="14" y="12" rx="1"/><rect width="7" height="5" x="3" y="16" rx="1"/></svg> <span class="mt-1 font-bold text-[11px]" style="pointer-events:none;" data-th="ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”" data-en="Upload">ΰΈ­ΰΈ±ΰΈ›ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”</span> </button> <button id="tab-result" type="button" class="tab-btn flex flex-col items-center rounded-2xl px-2 py-2.5" onclick="setView('result')"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="pointer-events:none;"> <rect x="2" y="5" width="3" height="10" rx="1.5" fill="currentColor" opacity=".5"/> <rect x="7" y="3" width="3" height="14" rx="1.5" fill="currentColor" opacity=".75"/> <rect x="12" y="1" width="3" height="18" rx="1.5" fill="currentColor"/> <circle cx="17" cy="5" r="2.5" fill="#ef5d82"/> </svg> <span class="mt-1 font-bold text-[11px]" style="pointer-events:none;" data-th="ผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆ" data-en="Results">ผΰΈ₯ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆ</span> </button> <button id="tab-guide" type="button" class="tab-btn flex flex-col items-center rounded-2xl px-2 py-2.5" onclick="openGuide('guide')"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/> </svg> <span class="mt-1 font-bold text-[11px]" style="pointer-events:none;" data-th="ΰΈ„ΰΈΉΰΉˆΰΈ‘ΰΈ·ΰΈ­" data-en="Guide">ΰΈ„ΰΈΉΰΉˆΰΈ‘ΰΈ·ΰΈ­</span> </button> </div> </nav> </div><!-- end app-shell --> <!-- ── TOAST ── --> <div class="toast" id="toast"> <svg class="inline-block flex-shrink-0" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg> <span id="toast-msg"></span> </div> <!-- ── LIGHTBOX ── --> <div class="lightbox" id="lightbox" onclick="closeLightboxBg(event)"> <button class="lb-close" onclick="closeLightbox()"><svg class="inline-block" style="width:20px;height:20px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg></button> <img id="lb-img" src="" alt=""> <div class="lb-bar"> <span id="lb-title" class="text-white text-sm font-mono opacity-80">β€”</span> <button class="lb-switch" onclick="switchLightbox()"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="16 3 21 3 21 8"/><line x1="4" x2="21" y1="3" y2="3"/><polyline points="8 21 3 21 3 16"/><line x1="21" x2="3" y1="21" y2="21"/></svg> <span id="lb-switch-label" data-th="ΰΈͺΰΈ₯ับภาพ" data-en="Switch view">ΰΈͺΰΈ₯ับภาพ</span> </button> </div> </div> <!-- ── GUIDE MODAL ── --> <div class="overlay hidden" id="guide-overlay" onclick="handleGuideOverlayClick(event)"> <div class="modal-box"> <div class="p-4 pb-0 flex-shrink-0"> <div class="flex items-center justify-between mb-3"> <span class="font-bold text-[15px]" id="guide-modal-title">ΰΈ„ΰΈΉΰΉˆΰΈ‘ΰΈ·ΰΈ­ΰΉΰΈ₯ΰΈ° WHO Grading</span> <button onclick="closeGuide()" class="flex h-8 w-8 items-center justify-center rounded-xl glass-card" style="color:var(--muted);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg> </button> </div> <div class="modal-tabs"> <button class="modal-tab active" id="gtab-guide" onclick="switchGuideTab('guide')"> <svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/></svg> <span data-th="ΰΈ„ΰΈΉΰΉˆΰΈ‘ΰΈ·ΰΈ­" data-en="Guide">ΰΈ„ΰΈΉΰΉˆΰΈ‘ΰΈ·ΰΈ­</span> </button> <button class="modal-tab" id="gtab-who" onclick="switchGuideTab('who')"> <svg class="inline-block" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"/></svg>WHO grading </button> </div> </div> <div class="modal-body"> <!-- Guide --> <div id="gpanel-guide"> <div class="g-step"> <div class="flex flex-col items-center flex-shrink-0"> <div class="g-num">1</div><div class="g-line"></div> </div> <div class="flex-1 pb-1"> <p class="font-bold text-[14px] mt-1" data-th="ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈžΰΈˆΰΈ²ΰΈΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΈˆΰΈΈΰΈ₯ΰΈ—ΰΈ£ΰΈ£ΰΈ¨ΰΈ™ΰΉŒ" data-en="Capture from microscope">ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈžΰΈˆΰΈ²ΰΈΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΈˆΰΈΈΰΈ₯ΰΈ—ΰΈ£ΰΈ£ΰΈ¨ΰΈ™ΰΉŒ</p> <p class="text-[13px] mt-1" style="color:var(--muted);" data-th="ΰΈͺΰΉˆΰΈ­ΰΈ‡ΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉ„ΰΈ₯ΰΈ”ΰΉŒ AFB แΰΈ₯ΰΉ‰ΰΈ§ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈž ΰΉƒΰΈŠΰΉ‰ΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ Digital ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΈ‘ΰΈ·ΰΈ­ΰΈ–ΰΈ·ΰΈ­ΰΉ„ΰΈ”ΰΉ‰" data-en="Photograph the AFB slide using a digital camera or smartphone.">ΰΈͺΰΉˆΰΈ­ΰΈ‡ΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉ„ΰΈ₯ΰΈ”ΰΉŒ AFB แΰΈ₯ΰΉ‰ΰΈ§ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈž ΰΉƒΰΈŠΰΉ‰ΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ Digital ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΈ‘ΰΈ·ΰΈ­ΰΈ–ΰΈ·ΰΈ­ΰΉ„ΰΈ”ΰΉ‰</p> <div class="crop-demo"> <div class="crop-card"> <img src="data:image/jpeg;base64,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" alt="ΰΈΰΉˆΰΈ­ΰΈ™ crop"> <div class="crop-lbl"><svg class="inline-block" style="width:12px;height:12px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg><span data-th="ΰΈ‘ΰΈ΅ΰΈ‚ΰΈ­ΰΈšΰΈ”ΰΈ³" data-en="Black border">ΰΈ‘ΰΈ΅ΰΈ‚ΰΈ­ΰΈšΰΈ”ΰΈ³</span></div> </div> <div style="color:var(--muted);font-size:18px;display:flex;align-items:center;">β†’</div> <div class="crop-card"> <img src="data:image/jpeg;base64,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" alt="ΰΈ«ΰΈ₯ΰΈ±ΰΈ‡ crop"> <div class="crop-lbl"><svg class="inline-block" style="width:12px;height:12px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span data-th="crop แΰΈ₯ΰΉ‰ΰΈ§" data-en="Cropped">crop แΰΈ₯ΰΉ‰ΰΈ§</span></div> </div> </div> <div class="g-tip amber"> <svg class="inline-block flex-shrink-0" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></svg> <span data-th="ΰΈ–ΰΉ‰ΰΈ²ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈœΰΉˆΰΈ²ΰΈ™ΰΉ€ΰΈ₯ΰΈ™ΰΈͺΰΉŒΰΈ”ΰΉ‰ΰΈ§ΰΈ’ΰΈ‘ΰΈ·ΰΈ­ΰΈ–ΰΈ·ΰΈ­ ΰΉƒΰΈ«ΰΉ‰ crop ΰΈ‚ΰΈ­ΰΈšΰΈ”ΰΈ³ΰΈ­ΰΈ­ΰΈΰΈΰΉˆΰΈ­ΰΈ™ upload ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ AI ΰΉ€ΰΈ«ΰΉ‡ΰΈ™ΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ°ΰΈͺΰΉˆΰΈ§ΰΈ™ΰΈͺΰΉ„ΰΈ₯ΰΈ”ΰΉŒ" data-en="If shooting through the lens with a phone, crop the black border first so AI sees only the slide area.">ΰΈ–ΰΉ‰ΰΈ²ΰΈ–ΰΉˆΰΈ²ΰΈ’ΰΈœΰΉˆΰΈ²ΰΈ™ΰΉ€ΰΈ₯ΰΈ™ΰΈͺΰΉŒΰΈ”ΰΉ‰ΰΈ§ΰΈ’ΰΈ‘ΰΈ·ΰΈ­ΰΈ–ΰΈ·ΰΈ­ ΰΉƒΰΈ«ΰΉ‰ crop ΰΈ‚ΰΈ­ΰΈšΰΈ”ΰΈ³ΰΈ­ΰΈ­ΰΈΰΈΰΉˆΰΈ­ΰΈ™ upload ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ AI ΰΉ€ΰΈ«ΰΉ‡ΰΈ™ΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ°ΰΈͺΰΉˆΰΈ§ΰΈ™ΰΈͺΰΉ„ΰΈ₯ΰΈ”ΰΉŒ</span> </div> </div> </div> <div class="g-step"> <div class="flex flex-col items-center flex-shrink-0"><div class="g-num">2</div><div class="g-line"></div></div> <div class="flex-1 pb-1"> <p class="font-bold text-[14px] mt-1" data-th="ΰΉ€ΰΈ₯ือกภาพแΰΈ₯ΰΈ° upload" data-en="Select and upload image">ΰΉ€ΰΈ₯ือกภาพแΰΈ₯ΰΈ° upload</p> <div class="g-tip green mt-2"><svg class="inline-block flex-shrink-0" style="width:14px;height:14px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg><span data-th="JPG, PNG Β· ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 10MB Β· ΰΈ’ΰΈ΄ΰΉˆΰΈ‡ΰΈ ΰΈ²ΰΈžΰΈŠΰΈ±ΰΈ”ΰΉ€ΰΈˆΰΈ™ ผΰΈ₯ΰΉΰΈ‘ΰΉˆΰΈ™ΰΈ’ΰΈ³ΰΈ‚ΰΈΆΰΉ‰ΰΈ™" data-en="JPG, PNG Β· Max 10MB Β· Sharper images give better results.">JPG, PNG Β· ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 10MB Β· ΰΈ’ΰΈ΄ΰΉˆΰΈ‡ΰΈ ΰΈ²ΰΈžΰΈŠΰΈ±ΰΈ”ΰΉ€ΰΈˆΰΈ™ ผΰΈ₯ΰΉΰΈ‘ΰΉˆΰΈ™ΰΈ’ΰΈ³ΰΈ‚ΰΈΆΰΉ‰ΰΈ™</span></div> </div> </div> <div class="g-step"> <div class="flex flex-col items-center flex-shrink-0"><div class="g-num">3</div><div class="g-line"></div></div> <div class="flex-1 pb-1"> <p class="font-bold text-[14px] mt-1" data-th='กด "ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉΰΈ₯ΰΈ°ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈ"' data-en='"Analyze &amp; Save"'>กด "ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉΰΈ₯ΰΈ°ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈ"</p> <p class="text-[13px] mt-1" style="color:var(--muted);" data-th="ΰΈ•ΰΈ΄ΰΉŠΰΈ checkbox ΰΈ’ΰΈ΄ΰΈ™ΰΈ’ΰΈ­ΰΈ‘ แΰΈ₯ΰΉ‰ΰΈ§ΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ ΰΈ£ΰΈ­ 10–60 ΰΈ§ΰΈ΄ΰΈ™ΰΈ²ΰΈ—ΰΈ΅" data-en="Check the consent box then press the button. Wait 10–60 seconds.">ΰΈ•ΰΈ΄ΰΉŠΰΈ checkbox ΰΈ’ΰΈ΄ΰΈ™ΰΈ’ΰΈ­ΰΈ‘ แΰΈ₯ΰΉ‰ΰΈ§ΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ ΰΈ£ΰΈ­ 10–60 ΰΈ§ΰΈ΄ΰΈ™ΰΈ²ΰΈ—ΰΈ΅</p> </div> </div> <div class="g-step"> <div class="flex flex-col items-center flex-shrink-0"><div class="g-num">4</div></div> <div class="flex-1 pb-1"> <p class="font-bold text-[14px] mt-1" data-th="ΰΈ”ΰΈΉΰΈœΰΈ₯แΰΈ₯ΰΈ°ΰΈ›ΰΈ£ΰΈ±ΰΈš confidence" data-en="View results and adjust confidence">ΰΈ”ΰΈΉΰΈœΰΈ₯แΰΈ₯ΰΈ°ΰΈ›ΰΈ£ΰΈ±ΰΈš confidence</p> <p class="text-[13px] mt-1" style="color:var(--muted);" data-th="ΰΈ›ΰΈ£ΰΈ±ΰΈš slider ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ›ΰΈ₯ΰΈ΅ΰΉˆΰΈ’ΰΈ™ threshold ΰΉ„ΰΈ”ΰΉ‰ΰΈ—ΰΈ±ΰΈ™ΰΈ—ΰΈ΅ ΰΈ„ΰΈ₯ΰΈ΄ΰΈΰΈ£ΰΈΉΰΈ›ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ”ΰΈΉΰΉ€ΰΈ•ΰΉ‡ΰΈ‘ΰΈˆΰΈ­" data-en="Adjust the slider to change threshold in real time. Click an image for full screen.">ΰΈ›ΰΈ£ΰΈ±ΰΈš slider ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ›ΰΈ₯ΰΈ΅ΰΉˆΰΈ’ΰΈ™ threshold ΰΉ„ΰΈ”ΰΉ‰ΰΈ—ΰΈ±ΰΈ™ΰΈ—ΰΈ΅ ΰΈ„ΰΈ₯ΰΈ΄ΰΈΰΈ£ΰΈΉΰΈ›ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ”ΰΈΉΰΉ€ΰΈ•ΰΉ‡ΰΈ‘ΰΈˆΰΈ­</p> </div> </div> <div class="mt-3 rounded-xl p-3 text-xs leading-relaxed flex gap-2" style="background:rgba(150,140,200,.1);color:var(--muted);"> <svg class="inline-block flex-shrink-0" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/></svg> <span data-th="⚠ App ΰΈ™ΰΈ΅ΰΉ‰ΰΈ’ΰΈ±ΰΈ‡ΰΈ­ΰΈ’ΰΈΉΰΉˆΰΉƒΰΈ™ΰΈ‚ΰΈ±ΰΉ‰ΰΈ™ΰΈ•ΰΈ­ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈžΰΈ±ΰΈ’ΰΈ™ΰΈ² แΰΈ₯ะผΰΈ₯ΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ„ΰΈ±ΰΈ”ΰΈΰΈ£ΰΈ­ΰΈ‡ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI ΰΉ€ΰΈ—ΰΉˆΰΈ²ΰΈ™ΰΈ±ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈΰΈΰΉˆΰΈ­ΰΈ™ΰΈ™ΰΈ³ΰΉ„ΰΈ›ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ΰΈ„ΰΈ₯ินิก" data-en="⚠ This app is still under development. This result is AI-assisted screening only and must be reviewed by a qualified professional before any clinical use.">⚠ App ΰΈ™ΰΈ΅ΰΉ‰ΰΈ’ΰΈ±ΰΈ‡ΰΈ­ΰΈ’ΰΈΉΰΉˆΰΉƒΰΈ™ΰΈ‚ΰΈ±ΰΉ‰ΰΈ™ΰΈ•ΰΈ­ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈžΰΈ±ΰΈ’ΰΈ™ΰΈ² แΰΈ₯ะผΰΈ₯ΰΈ™ΰΈ΅ΰΉ‰ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ„ΰΈ±ΰΈ”ΰΈΰΈ£ΰΈ­ΰΈ‡ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ AI ΰΉ€ΰΈ—ΰΉˆΰΈ²ΰΈ™ΰΈ±ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈΰΈΰΉˆΰΈ­ΰΈ™ΰΈ™ΰΈ³ΰΉ„ΰΈ›ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ΰΈ„ΰΈ₯ินิก</span> </div> </div> <!-- WHO --> <div id="gpanel-who" class="hidden"> <p class="text-[13px] mb-4 leading-relaxed" style="color:var(--muted);" data-th="ฑาตรฐาน WHO ΰΈͺำหรับ AFB smear microscopy (Ziehl-Neelsen) ΰΈ™ΰΈ±ΰΈšΰΉƒΰΈ™ 100 fields ΰΈ—ΰΈ΅ΰΉˆΰΈΰΈ³ΰΈ₯ΰΈ±ΰΈ‡ΰΈ‚ΰΈ’ΰΈ²ΰΈ’ 100Γ—" data-en="WHO standard for AFB smear microscopy (Ziehl-Neelsen stain), counted in 100 fields at 100Γ— magnification.">ฑาตรฐาน WHO ΰΈͺำหรับ AFB smear microscopy (Ziehl-Neelsen) ΰΈ™ΰΈ±ΰΈšΰΉƒΰΈ™ 100 fields ΰΈ—ΰΈ΅ΰΉˆΰΈΰΈ³ΰΈ₯ΰΈ±ΰΈ‡ΰΈ‚ΰΈ’ΰΈ²ΰΈ’ 100Γ—</p> <table class="who-tbl"> <thead><tr><th data-th="เกรด" data-en="Grade">เกรด</th><th data-th="ΰΉ€ΰΈΰΈ“ΰΈ‘ΰΉŒ" data-en="Criteria">ΰΉ€ΰΈΰΈ“ΰΈ‘ΰΉŒ</th><th data-th="ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ«ΰΈ‘ΰΈ²ΰΈ’" data-en="Meaning">ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ«ΰΈ‘ΰΈ²ΰΈ’</th></tr></thead> <tbody> <tr><td><span class="gb gb-0">No AFB</span></td><td data-th="ΰΉ„ΰΈ‘ΰΉˆΰΈžΰΈšΰΉƒΰΈ™ 100 fields" data-en="None in 100 fields">ΰΉ„ΰΈ‘ΰΉˆΰΈžΰΈšΰΉƒΰΈ™ 100 fields</td><td data-th="ผΰΈ₯ΰΈ₯บ" data-en="Negative">ผΰΈ₯ΰΈ₯บ</td></tr> <tr><td><span class="gb gb-s">Scanty</span></td><td data-th="1–9 ΰΉƒΰΈ™ 100 fields" data-en="1–9 in 100 fields">1–9 ΰΉƒΰΈ™ 100 fields</td><td data-th="ΰΈ£ΰΈ²ΰΈ’ΰΈ‡ΰΈ²ΰΈ™ΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ΰΈˆΰΈ£ΰΈ΄ΰΈ‡" data-en="Report actual count">ΰΈ£ΰΈ²ΰΈ’ΰΈ‡ΰΈ²ΰΈ™ΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ΰΈˆΰΈ£ΰΈ΄ΰΈ‡</td></tr> <tr><td><span class="gb gb-1">1+</span></td><td data-th="10–99 ΰΉƒΰΈ™ 100 fields" data-en="10–99 in 100 fields">10–99 ΰΉƒΰΈ™ 100 fields</td><td>Positive β€” few</td></tr> <tr><td><span class="gb gb-2">2+</span></td><td data-th="1–10 ΰΈ•ΰΉˆΰΈ­ field" data-en="1–10 per field">1–10 ΰΈ•ΰΉˆΰΈ­ field</td><td>Positive β€” moderate</td></tr> <tr><td><span class="gb gb-3">3+</span></td><td data-th="&gt;10 ΰΈ•ΰΉˆΰΈ­ field" data-en="&gt;10 per field">&gt;10 ΰΈ•ΰΉˆΰΈ­ field</td><td>Positive β€” many</td></tr> </tbody> </table> <div class="mt-3 rounded-xl p-3 text-xs leading-relaxed flex gap-2" style="background:rgba(122,98,244,.1);color:var(--accent-2);"> <svg class="inline-block flex-shrink-0" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> <span data-th="AI ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈˆΰΈ±ΰΈšΰΉΰΈ₯ΰΈ°ΰΈ™ΰΈ±ΰΈš AFB ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈ" data-en="AI assists in detecting and counting AFB. Must be confirmed by a specialist.">AI ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈˆΰΈ±ΰΈšΰΉΰΈ₯ΰΈ°ΰΈ™ΰΈ±ΰΈš AFB ΰΉ€ΰΈšΰΈ·ΰΉ‰ΰΈ­ΰΈ‡ΰΈ•ΰΉ‰ΰΈ™ ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉ‚ΰΈ”ΰΈ’ΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈŠΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈŠΰΈ²ΰΈ</span> </div> </div> </div> <div class="p-4 border-t flex justify-end" style="border-color:var(--border-color);"> <button onclick="closeGuide()" class="flex items-center gap-2 rounded-xl px-5 py-2.5 font-bold text-white text-sm" style="background:linear-gradient(135deg,#ef6386,#8868ee);"> <svg class="inline-block" style="width:16px;height:16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg> <span data-th="ΰΈ£ΰΈ±ΰΈšΰΈ—ΰΈ£ΰΈ²ΰΈšΰΉΰΈ₯ΰΉ‰ΰΈ§" data-en="Got it">ΰΈ£ΰΈ±ΰΈšΰΈ—ΰΈ£ΰΈ²ΰΈšΰΉΰΈ₯ΰΉ‰ΰΈ§</span> </button> </div> </div> </div> <script> // ══════════════════════════════════ // State // ══════════════════════════════════ let currentLang = localStorage.getItem('afb_lang') || 'th'; let currentView = 'upload'; let currentFile = null; let camStream = null; let allBoxes = []; let confThreshold = 0.15; let lbMode = 'orig'; let resultData = null; // guide always shows on load const ALLOWED = ['image/jpeg','image/png','image/webp','image/jpg']; const MAX_MB = 10; // ══════════════════════════════════ // Theme // ══════════════════════════════════ function applyTheme(dark) { document.documentElement.classList.toggle('dark', dark); const icon = document.getElementById('theme-icon'); icon.innerHTML = dark ? `<circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/>` : `<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9"/><path d="M20 3v4"/><path d="M22 5h-4"/>`; localStorage.setItem('afb_theme', dark ? '1' : '0'); } document.getElementById('theme-btn').addEventListener('click', () => { applyTheme(!document.documentElement.classList.contains('dark')); }); applyTheme(localStorage.getItem('afb_theme') === '1'); // ══════════════════════════════════ // Language // ══════════════════════════════════ function applyLang(lang) { currentLang = lang; document.getElementById('lang-label').textContent = lang === 'th' ? 'EN' : 'ΰΉ„ΰΈ—ΰΈ’'; document.querySelectorAll('[data-th]').forEach(el => { el.textContent = lang === 'th' ? el.getAttribute('data-th') : el.getAttribute('data-en'); }); document.querySelectorAll('[data-th-ph]').forEach(el => { el.placeholder = lang === 'th' ? el.getAttribute('data-th-ph') : el.getAttribute('data-en-ph'); }); localStorage.setItem('afb_lang', lang); } document.getElementById('lang-btn').addEventListener('click', () => applyLang(currentLang === 'th' ? 'en' : 'th')); applyLang(currentLang); // ══════════════════════════════════ // View switching // ══════════════════════════════════ function setView(v) { currentView = v; document.querySelectorAll('.view-panel').forEach(p => p.classList.toggle('active', p.id === 'view-' + v)); document.querySelectorAll('.tab-btn').forEach(b => { // tab-guide ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉˆ view tab β€” ΰΈ‚ΰΉ‰ΰΈ²ΰΈ‘ΰΉ„ΰΈ› if (b.id === 'tab-guide') return; const isActive = b.id === 'tab-' + v; b.classList.toggle('active', isActive); if (isActive) { b.style.background = 'linear-gradient(135deg,#ef6386,#8868ee)'; b.style.color = '#ffffff'; } else { b.style.background = 'transparent'; b.style.color = 'var(--muted)'; } }); // re-render icons after view becomes visible } function goBack() { stopCamera(); setView('upload'); // reset currentFile = null; document.getElementById('selected-file').textContent = ''; document.getElementById('preview-box').classList.add('hidden'); updateSubmitState(); } // ══════════════════════════════════ // Source tabs // ══════════════════════════════════ function switchSrc(name, el) { document.querySelectorAll('.src-tab').forEach(b => { b.classList.remove('active'); b.style.background = 'rgba(255,255,255,.35)'; b.style.color = '#7a6b9a'; }); el.classList.add('active'); el.style.background = 'rgba(255,255,255,.72)'; el.style.color = '#6a4fb1'; document.querySelectorAll('.src-panel').forEach(p => p.classList.add('hidden')); document.getElementById('src-' + name).classList.remove('hidden'); if (name !== 'camera') stopCamera(); } // ══════════════════════════════════ // File handling // ══════════════════════════════════ function validateFile(file) { if (!file) return currentLang === 'th' ? 'กรุณาเΰΈ₯ΰΈ·ΰΈ­ΰΈΰΈ ΰΈ²ΰΈžΰΈΰΉˆΰΈ­ΰΈ™' : 'Please select an image first'; if (!ALLOWED.includes(file.type)) return currentLang === 'th' ? 'ΰΈ£ΰΈ­ΰΈ‡ΰΈ£ΰΈ±ΰΈšΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ° JPG, PNG, WEBP' : 'Only JPG, PNG, WEBP supported'; if (file.size > MAX_MB * 1024 * 1024) return currentLang === 'th' ? 'ΰΉ„ΰΈŸΰΈ₯ΰΉŒΰΉƒΰΈ«ΰΈΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 10MB' : 'File exceeds 10MB'; return ''; } function handleFile(file) { const err = validateFile(file); if (err) { showToast(err); return; } currentFile = file; const reader = new FileReader(); reader.onload = e => { document.getElementById('preview-img').src = e.target.result; document.getElementById('preview-box').classList.remove('hidden'); document.getElementById('preview-chip').textContent = file.name; updateSubmitState(); }; reader.readAsDataURL(file); document.getElementById('selected-file').textContent = (currentLang === 'th' ? 'ΰΉ€ΰΈ₯ือกแΰΈ₯ΰΉ‰ΰΈ§: ' : 'Selected: ') + file.name; } document.getElementById('image-file').addEventListener('change', e => handleFile(e.target.files[0])); // Drag & drop const dz = document.getElementById('dropzone'); dz.addEventListener('dragover', e => { e.preventDefault(); dz.classList.add('is-dragging'); }); dz.addEventListener('dragleave', () => dz.classList.remove('is-dragging')); dz.addEventListener('drop', e => { e.preventDefault(); dz.classList.remove('is-dragging'); handleFile(e.dataTransfer.files[0]); }); // ══════════════════════════════════ // Camera // ══════════════════════════════════ async function startCamera() { try { camStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } }); const v = document.getElementById('cam-video'); v.srcObject = camStream; v.style.display = 'block'; document.getElementById('cam-off-state').style.display = 'none'; } catch(e) { showToast((currentLang === 'th' ? 'เปิดกΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰: ' : 'Camera error: ') + e.message); } } function snapPhoto() { if (!camStream) { showToast(currentLang === 'th' ? 'ΰΈ’ΰΈ±ΰΈ‡ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΈΰΈ₯ΰΉ‰ΰΈ­ΰΈ‡' : 'Camera not started'); return; } const v = document.getElementById('cam-video'), c = document.getElementById('cam-canvas'); c.width = v.videoWidth; c.height = v.videoHeight; c.getContext('2d').drawImage(v, 0, 0); c.toBlob(blob => { const f = new File([blob], 'camera.jpg', { type: 'image/jpeg' }); handleFile(f); }, 'image/jpeg', 0.92); } function stopCamera() { if (camStream) { camStream.getTracks().forEach(t => t.stop()); camStream = null; } const v = document.getElementById('cam-video'); v.style.display = 'none'; document.getElementById('cam-off-state').style.display = 'flex'; } window.addEventListener('pagehide', stopCamera); // ══════════════════════════════════ // URL load // ══════════════════════════════════ async function loadFromUrl() { const url = document.getElementById('url-input').value.trim(); if (!url) return; try { const res = await fetch(url); const blob = await res.blob(); handleFile(new File([blob], 'image.jpg', { type: blob.type || 'image/jpeg' })); } catch(e) { showToast(currentLang === 'th' ? 'ΰΉ‚ΰΈ«ΰΈ₯ΰΈ” URL ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰' : 'Cannot load image from URL'); } } // ══════════════════════════════════ // Submit state // ══════════════════════════════════ function updateSubmitState() { const ok = !!currentFile && document.getElementById('consent').checked; document.getElementById('submit-btn').disabled = !ok; } document.getElementById('consent').addEventListener('change', updateSubmitState); // ══════════════════════════════════ // Analyze // ══════════════════════════════════ async function analyze() { if (!currentFile) return; const btn = document.getElementById('submit-btn'); const label = document.getElementById('submit-label'); btn.disabled = true; label.innerHTML = '<i class="spin" style="display:inline-block;">⟳</i> ' + (currentLang === 'th' ? 'กำΰΈ₯ΰΈ±ΰΈ‡ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒ...' : 'Analyzing...'); stopCamera(); const fd = new FormData(); fd.append('file', currentFile); fd.append('consent', document.getElementById('consent').checked ? 'true' : 'false'); fd.append('sample_ref', document.getElementById('sample-id').value.trim()); const ctrl = new AbortController(); const timer = setTimeout(() => ctrl.abort(), 60000); try { const res = await fetch('/analyze', { method: 'POST', body: fd, signal: ctrl.signal }); clearTimeout(timer); if (!res.ok) { let detail = currentLang === 'th' ? 'ΰΉ€ΰΈΰΈ΄ΰΈ”ΰΈ‚ΰΉ‰ΰΈ­ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”' : 'An error occurred'; try { const j = await res.json(); if (j.detail) detail = j.detail; } catch(_){} throw new Error(detail); } resultData = await res.json(); renderResult(resultData); setView('result'); } catch(e) { clearTimeout(timer); showToast(e.name === 'AbortError' ? (currentLang === 'th' ? 'ΰΈ«ΰΈ‘ΰΈ”ΰΉ€ΰΈ§ΰΈ₯ΰΈ² กรุณาΰΈ₯ΰΈ­ΰΈ‡ΰΉƒΰΈ«ΰΈ‘ΰΉˆ' : 'Request timed out') : e.message); btn.disabled = false; label.textContent = currentLang === 'th' ? 'ΰΈ§ΰΈ΄ΰΉ€ΰΈ„ΰΈ£ΰΈ²ΰΈ°ΰΈ«ΰΉŒΰΉΰΈ₯ΰΈ°ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈ' : 'Analyze and save'; updateSubmitState(); } } // ══════════════════════════════════ // Render result // ══════════════════════════════════ function renderResult(d) { // load images loadImg('orig-img', 'sk-orig', d.orig_b64, null); loadImg('result-img', 'sk-result', d.orig_b64, () => initSlider(d)); // stats document.getElementById('stat-count').textContent = d.afb_count; document.getElementById('stat-conf').textContent = d.avg_conf > 0 ? d.avg_conf + '%' : 'β€”'; document.getElementById('detail-conf').textContent = d.avg_conf > 0 ? d.avg_conf + '%' : 'β€”'; document.getElementById('detail-count').textContent = d.afb_count + (currentLang === 'th' ? ' ΰΈˆΰΈΈΰΈ”' : ' pts'); // saved banner const sb = document.getElementById('saved-banner'); const sfb = document.getElementById('save-fail-banner'); if (d.saved) { sb.classList.remove('hidden'); sfb.classList.add('hidden'); } else { sb.classList.add('hidden'); sfb.classList.remove('hidden'); document.getElementById('save-fail-msg').textContent = d.save_error || (currentLang === 'th' ? 'ΰΈšΰΈ±ΰΈ™ΰΈ—ΰΈΆΰΈΰΈ ΰΈ²ΰΈžΰΉ„ΰΈ‘ΰΉˆΰΈͺΰΈ³ΰΉ€ΰΈ£ΰΉ‡ΰΈˆ' : 'Failed to save image'); } } function loadImg(imgId, skId, b64, onDone) { const img = document.getElementById(imgId); const sk = document.getElementById(skId); function show() { if (sk) { sk.style.display = 'none'; sk.classList.add('hidden'); } img.classList.remove('hidden'); img.style.cssText = 'display:block !important;'; if (onDone) requestAnimationFrame(() => requestAnimationFrame(onDone)); } img.onload = show; img.src = 'data:image/jpeg;base64,' + b64; if (img.complete && img.naturalWidth > 0) { if (sk) sk.style.display = 'none'; img.classList.remove('hidden'); img.style.display = 'block'; if (onDone) requestAnimationFrame(() => requestAnimationFrame(onDone)); } } // ══════════════════════════════════ // Slider + Canvas // ══════════════════════════════════ function initSlider(d) { allBoxes = d.all_boxes || []; confThreshold = d.conf_threshold || 0.15; const initVal = Math.round(confThreshold * 100); const slider = document.getElementById('conf-slider'); if (slider) slider.value = initVal; const disp = document.getElementById('slider-display'); if (disp) disp.textContent = (initVal / 100).toFixed(2); updateSliderStats(confThreshold); let attempts = 0; function tryDraw() { const img = document.getElementById('result-img'); if (img && img.offsetWidth > 0 && img.offsetHeight > 0) { requestAnimationFrame(() => drawBoxes(confThreshold)); } else if (attempts < 15) { attempts++; setTimeout(tryDraw, 200); } } tryDraw(); } function onSliderInput(val) { confThreshold = val / 100; document.getElementById('slider-display').textContent = confThreshold.toFixed(2); drawBoxes(confThreshold); updateSliderStats(confThreshold); } function drawBoxes(threshold) { const canvas = document.getElementById('det-canvas'); const img = document.getElementById('result-img'); if (!canvas || !img || !img.complete || img.naturalWidth === 0) return; const wrap = canvas.parentElement; const W = img.offsetWidth || wrap?.offsetWidth || 1; const H = img.offsetHeight || wrap?.offsetHeight || 1; if (!W || !H) return; canvas.width = W; canvas.height = H; const ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, W, H); allBoxes.filter(b => b.conf >= threshold).forEach(b => { const x = b.x1*W, y = b.y1*H, w = (b.x2-b.x1)*W, h = (b.y2-b.y1)*H; ctx.strokeStyle = '#ef5d82'; ctx.lineWidth = 2; ctx.strokeRect(x, y, w, h); const label = (b.conf*100).toFixed(0)+'%'; ctx.font = 'bold 11px "Space Mono",monospace'; const tw = ctx.measureText(label).width; ctx.fillStyle = '#ef5d82'; ctx.fillRect(x, y - 16, tw + 8, 16); ctx.fillStyle = '#fff'; ctx.fillText(label, x + 4, y - 4); }); } function updateSliderStats(threshold) { const filtered = allBoxes.filter(b => b.conf >= threshold); document.getElementById('slider-count').textContent = filtered.length; } window.addEventListener('resize', () => requestAnimationFrame(() => drawBoxes(confThreshold))); // ══════════════════════════════════ // Lightbox // ══════════════════════════════════ function openLightbox(mode) { if (!resultData) return; lbMode = mode; renderLightbox(); document.getElementById('lightbox').classList.add('open'); } function renderLightbox() { const isOrig = lbMode === 'orig'; const lbImg = document.getElementById('lb-img'); lbImg.src = ''; // clear ΰΈΰΉˆΰΈ­ΰΈ™ if (isOrig) { lbImg.src = 'data:image/jpeg;base64,' + resultData.orig_b64; } else { // ΰΉ‚ΰΈ«ΰΈ₯ΰΈ”ΰΈ ΰΈ²ΰΈžΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈšΰΉƒΰΈ™ Image object แฒก ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ naturalWidth ถูกต้อง const srcImg = new Image(); srcImg.onload = () => { const off = document.createElement('canvas'); off.width = srcImg.naturalWidth; off.height = srcImg.naturalHeight; const ctx = off.getContext('2d'); ctx.drawImage(srcImg, 0, 0); // ΰΈ§ΰΈ²ΰΈ” box ΰΈšΰΈ™ full resolution allBoxes.filter(b => b.conf >= confThreshold).forEach(b => { const x = b.x1*off.width, y = b.y1*off.height; const w = (b.x2-b.x1)*off.width, h = (b.y2-b.y1)*off.height; const lw = Math.max(2, off.width/300); ctx.strokeStyle = '#ef5d82'; ctx.lineWidth = lw; ctx.strokeRect(x, y, w, h); const label = (b.conf*100).toFixed(0)+'%'; const fs = Math.max(12, off.width/70); ctx.font = 'bold ' + fs + 'px monospace'; const tw = ctx.measureText(label).width; ctx.fillStyle = '#ef5d82'; ctx.fillRect(x, y - fs - 4, tw + 8, fs + 4); ctx.fillStyle = '#fff'; ctx.fillText(label, x + 4, y - 4); }); lbImg.src = off.toDataURL('image/jpeg', 0.92); }; srcImg.src = 'data:image/jpeg;base64,' + resultData.orig_b64; } document.getElementById('lb-title').textContent = isOrig ? (currentLang === 'th' ? 'ΰΈ ΰΈ²ΰΈžΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš' : 'Original') : (currentLang === 'th' ? 'ผΰΈ₯ detection' : 'Detection'); document.getElementById('lb-switch-label').textContent = currentLang === 'th' ? 'ΰΈͺΰΈ₯ับภาพ' : 'Switch view'; } function switchLightbox() { lbMode = lbMode === 'orig' ? 'result' : 'orig'; renderLightbox(); } function closeLightbox() { document.getElementById('lightbox').classList.remove('open'); } function closeLightboxBg(e) { if (e.target.id === 'lightbox') closeLightbox(); } // ══════════════════════════════════ // Guide modal // ══════════════════════════════════ function openGuide(tab) { document.getElementById('guide-overlay').classList.remove('hidden'); switchGuideTab(tab || 'guide'); } function closeGuide() { document.getElementById('guide-overlay').classList.add('hidden'); } function handleGuideOverlayClick(e) { if (e.target.id === 'guide-overlay') closeGuide(); } function switchGuideTab(name) { document.getElementById('gpanel-guide').classList.toggle('hidden', name !== 'guide'); document.getElementById('gpanel-who').classList.toggle('hidden', name !== 'who'); document.getElementById('gtab-guide').classList.toggle('active', name === 'guide'); document.getElementById('gtab-who').classList.toggle('active', name === 'who'); applyLang(currentLang); } document.getElementById('help-btn').addEventListener('click', () => openGuide('guide')); document.addEventListener('keydown', e => { if (e.key === 'Escape') { closeLightbox(); closeGuide(); } }); // ΰΉ€ΰΈ›ΰΈ΄ΰΈ” guide ΰΈ—ΰΈΈΰΈΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΉ‚ΰΈ«ΰΈ₯ดแอป openGuide('guide'); // ══════════════════════════════════ // Toast // ══════════════════════════════════ function showToast(msg) { const t = document.getElementById('toast'); document.getElementById('toast-msg').textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 3500); } // ══════════════════════════════════ // Init // ══════════════════════════════════ document.addEventListener('DOMContentLoaded', () => { setView('upload'); }); </script> </body> </html>
<!doctype html>
<html lang="th" data-lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AFB Detection</title>
<script src="https://cdn.tailwindcss.com/3.4.17"></script>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Work+Sans:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
<style>
:root {
--ink:#17203a; --muted:#66708b; --muted-light:#a0a8c0;
--glass:rgba(255,255,255,.62); --glass-line:rgba(255,255,255,.82);
--shadow:0 18px 55px rgba(95,75,130,.15);
--accent:#ef5d82; --accent-2:#7a62f4; --mint:#39cda5;
--card-text:#534c6c; --value-color:#7a62f4;
--border-color:rgba(200,189,223,.6);
--saved-bg:#e9fff8; --saved-color:#23795f;
}
.dark {
--ink:#f2f2fb; --muted:#a9afc9; --muted-light:#6a7090;
--glass:rgba(18,24,52,.67); --glass-line:rgba(255,255,255,.14);
--shadow:0 20px 55px rgba(0,0,0,.32);
--card-text:#c8c0e0; --value-color:#8868ee;
--border-color:rgba(150,140,200,.3);
--saved-bg:rgba(35,121,95,.2); --saved-color:#39cda5;
}
*{box-sizing:border-box;}
body{margin:0;font-family:"Work Sans",sans-serif;color:var(--ink);background:#f8f8fb;}
.app-shell{
position:relative;width:100%;min-height:100vh;overflow-x:hidden;padding-bottom:108px;
background:
radial-gradient(circle at 8% 10%,rgba(255,189,175,.62),transparent 23rem),
radial-gradient(circle at 92% 14%,rgba(179,203,255,.62),transparent 26rem),
radial-gradient(circle at 57% 100%,rgba(218,157,252,.55),transparent 28rem),
linear-gradient(145deg,#fbfafb 0%,#f6f7ff 48%,#f8ebf3 100%);
transition:background .35s ease,color .35s ease;
}
.app-shell::before{
content:"";position:fixed;inset:0;pointer-events:none;opacity:.45;
background-image:radial-gradient(rgba(255,255,255,.9) 1px,transparent 1px);
background-size:18px 18px;
mask-image:linear-gradient(to bottom,black,transparent 80%);
}
.dark .app-shell{
background:
radial-gradient(circle at 8% 5%,rgba(244,103,130,.28),transparent 24rem),
radial-gradient(circle at 92% 16%,rgba(81,126,255,.25),transparent 28rem),
radial-gradient(circle at 48% 100%,rgba(185,67,221,.22),transparent 30rem),
linear-gradient(145deg,#0b1021 0%,#111534 50%,#211334 100%);
}
.content-area{position:relative;z-index:1;width:100%;max-width:720px;margin:0 auto;padding:22px 16px 28px;}
.glass-card{border:1px solid var(--glass-line);background:var(--glass);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);}
.brand-orb{background:radial-gradient(circle at 32% 28%,#ffe1df 0 8%,#ff8794 31%,#8068ed 70%,#49399f 100%);box-shadow:0 5px 14px rgba(121,83,182,.35);}
.view-panel{display:none;animation:rise .3s ease both;}
.view-panel.active{display:block;}
.upload-stage{
position:relative;overflow:hidden;min-height:260px;
background:linear-gradient(135deg,rgba(255,255,255,.58),rgba(255,255,255,.2)),
linear-gradient(120deg,#f7c6cd,#d5d4ff 48%,#a5e4d9);
}
.dark .upload-stage{
background:linear-gradient(135deg,rgba(20,25,57,.74),rgba(30,23,66,.46)),
linear-gradient(120deg,#8c395e,#464291 48%,#176c6c);
}
.upload-stage::after{
content:"";position:absolute;width:190px;height:190px;top:-75px;right:-55px;
border-radius:999px;
background:radial-gradient(circle at 35% 35%,rgba(255,255,255,.86),rgba(255,255,255,.04) 64%);
pointer-events:none;
}
.dropzone{border:1.5px dashed rgba(91,85,149,.43);transition:transform .2s,border-color .2s,background .2s;}
.dark .dropzone{border-color:rgba(201,195,255,.43);}
.dropzone.is-dragging{transform:scale(1.015);border-color:#ef5d82;background:rgba(255,255,255,.32);}
.pill-flow{background:rgba(255,255,255,.42);border:1px solid rgba(255,255,255,.66);}
.dark .pill-flow{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.13);}
.input-style{color:var(--ink);border:1px solid rgba(111,103,156,.22);background:rgba(255,255,255,.52);}
.dark .input-style{color:var(--ink);border-color:rgba(255,255,255,.15);background:rgba(7,11,31,.35);}
.input-style::placeholder{color:var(--muted);}
.mono-input{font-family:"Space Mono",monospace;}
.nav-dock{
position:fixed;z-index:20;left:50%;bottom:16px;
width:calc(100% - 28px);max-width:500px;transform:translateX(-50%);
padding:8px;border-radius:25px;
border:1px solid rgba(255,255,255,.67);
background:rgba(255,255,255,.68);
box-shadow:0 17px 40px rgba(75,51,112,.22);
backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
}
.dark .nav-dock{border-color:rgba(255,255,255,.14);background:rgba(13,18,43,.82);box-shadow:0 17px 42px rgba(0,0,0,.38);}
.tab-btn{color:var(--muted);transition:background .2s,color .2s,transform .15s;border-radius:18px;cursor:pointer;}.tab-btn *{pointer-events:none;}
.tab-btn.active{color:#fff!important;background:linear-gradient(135deg,#ef6386,#8868ee)!important;box-shadow:0 6px 16px rgba(138,89,202,.28);}
.tab-btn:not(.active):hover{transform:translateY(-1px);}
h1,h2,h3{font-family:"Fraunces",serif;letter-spacing:-.025em;}
.status-dot{animation:glow 1.8s ease-in-out infinite;}
/* Camera */
#cam-preview-wrap{width:100%;height:180px;background:#0a0a08;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;border-radius:16px;}
#cam-video{width:100%;height:100%;object-fit:cover;display:none;}
#cam-canvas{display:none;}
/* Canvas overlay */
.canvas-wrap{position:relative;}