:root{--bg:oklch(98.5% .004 140);--bg-elev:oklch(100% 0 0);--bg-sunk:oklch(96% .006 140);--border:oklch(90% .008 140);--border-strong:oklch(82% .012 140);--text:oklch(18% .012 150);--text-muted:oklch(48% .012 150);--text-faint:oklch(65% .01 150);--accent:oklch(58% .14 145);--accent-soft:oklch(94% .04 145);--accent-ink:oklch(32% .1 145);--warn:oklch(68% .16 65);--warn-soft:oklch(95% .05 75);--danger:oklch(60% .18 28);--danger-soft:oklch(95% .04 28);--grid:oklch(93% .006 140);--shadow:0 1px 0 oklch(90% .008 140), 0 8px 24px -16px oklch(30% .02 150/.18)}[data-theme=dark]{--bg:oklch(16% .012 150);--bg-elev:oklch(20% .014 150);--bg-sunk:oklch(13% .01 150);--border:oklch(28% .014 150);--border-strong:oklch(40% .018 150);--text:oklch(96% .004 140);--text-muted:oklch(70% .012 140);--text-faint:oklch(50% .012 140);--accent:oklch(78% .16 145);--accent-soft:oklch(28% .06 145);--accent-ink:oklch(92% .1 145);--warn:oklch(78% .16 75);--warn-soft:oklch(28% .06 75);--danger:oklch(70% .18 28);--danger-soft:oklch(28% .06 28);--grid:oklch(22% .012 150);--shadow:0 1px 0 oklch(22% .014 150), 0 8px 24px -16px oklch(0% 0 0/.5)}[data-sun=on]{--bg:oklch(100% 0 0);--bg-elev:oklch(100% 0 0);--bg-sunk:oklch(94% .006 140);--border:oklch(78% .012 140);--border-strong:oklch(55% .014 140);--text:oklch(5% .01 150);--text-muted:oklch(25% .012 150);--text-faint:oklch(40% .01 150);--accent:oklch(45% .16 145);--accent-ink:oklch(20% .12 145)}*{box-sizing:border-box}html,body,#root{height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-family:Helvetica Neue,Helvetica,Arial,system-ui,sans-serif;font-size:14px;line-height:1.45}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mono{font-feature-settings:"zero", "ss01";font-family:JetBrains Mono,SF Mono,ui-monospace,Menlo,monospace}.app{background:var(--bg);grid-template-columns:220px 1fr;height:100vh;display:grid}.sidebar{background:var(--bg-elev);border-right:1px solid var(--border);flex-direction:column;gap:22px;padding:18px 14px;display:flex;overflow-y:auto}.brand{align-items:center;gap:10px;padding:4px 6px;display:flex}.brand-mark{background:var(--accent);color:oklch(18% .01 150);letter-spacing:-.02em;border-radius:7px;place-items:center;width:26px;height:26px;font-size:14px;font-weight:700;display:grid}[data-theme=dark] .brand-mark{color:oklch(16% .012 150)}.brand-name{letter-spacing:-.01em;font-weight:600}.brand-sub{color:var(--text-faint);letter-spacing:.06em;text-transform:uppercase;margin-top:1px;font-size:10.5px}.nav-group-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint);padding:0 8px 6px;font-size:10px}.nav{flex-direction:column;gap:1px;display:flex}.nav-item{color:var(--text-muted);text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;width:100%;padding:7px 8px;font-size:13px;display:flex}.nav-item:hover:not(:disabled){background:var(--bg-sunk);color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--accent-ink)}[data-theme=dark] .nav-item.active{color:var(--accent)}.nav-item:disabled{opacity:.45;cursor:default}.nav-item .nav-icon{opacity:.85;flex-shrink:0;width:14px;height:14px}.nav-item .nav-badge{color:var(--text-faint);margin-left:auto;font-size:10px}.sidebar-foot{border-top:1px solid var(--border);margin-top:auto;padding-top:14px}.farm-card{background:var(--bg-sunk);border:1px solid var(--border);border-radius:8px;padding:10px}.farm-card .farm-name{font-size:13px;font-weight:600}.farm-card .farm-meta{color:var(--text-muted);margin-top:2px;font-size:11px}.main{flex-direction:column;display:flex;overflow:hidden}.topbar{border-bottom:1px solid var(--border);background:var(--bg);align-items:center;gap:14px;min-height:60px;padding:14px 28px;display:flex}.topbar h1{letter-spacing:-.01em;margin:0;font-size:17px;font-weight:600}.crumb{color:var(--text-faint);margin-top:2px;font-size:12px}.topbar-actions{align-items:center;gap:8px;margin-left:auto;display:flex}.scroll{flex:1;padding:24px 28px 60px;overflow:auto}.btn{border:1px solid var(--border-strong);background:var(--bg-elev);color:var(--text);border-radius:6px;align-items:center;gap:7px;padding:7px 12px;font-size:13px;transition:background .1s,border-color .1s;display:inline-flex}.btn:hover{background:var(--bg-sunk)}.btn.primary{background:var(--accent);border-color:var(--accent);color:oklch(16% .012 150)}[data-theme=dark] .btn.primary{color:oklch(13% .01 150)}.btn.primary:hover{filter:brightness(1.05)}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--bg-sunk)}.btn.sm{padding:5px 9px;font-size:12px}.icon-btn{border:1px solid var(--border);background:var(--bg-elev);width:30px;height:30px;color:var(--text-muted);border-radius:6px;place-items:center;display:grid}.icon-btn:hover{color:var(--text);background:var(--bg-sunk)}.card{background:var(--bg-elev);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;padding:18px}.card-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.card-title{letter-spacing:-.005em;font-size:13px;font-weight:600}.card-sub{color:var(--text-faint);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.kpi{flex-direction:column;gap:6px;display:flex}.kpi-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);font-size:11px}.kpi-value{letter-spacing:-.02em;font-family:JetBrains Mono,monospace;font-size:30px;font-weight:500;line-height:1}.kpi-value .unit{color:var(--text-muted);letter-spacing:0;margin-left:4px;font-size:13px;font-weight:400}.kpi-delta{color:var(--text-muted);align-items:center;gap:4px;font-size:11.5px;display:flex}.kpi-delta.up{color:var(--accent-ink)}[data-theme=dark] .kpi-delta.up{color:var(--accent)}.grid-4{grid-template-columns:repeat(4,1fr);gap:14px;display:grid}.grid-3{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}.grid-2{grid-template-columns:1.4fr 1fr;gap:14px;display:grid}.badge{background:var(--bg-sunk);color:var(--text-muted);border:1px solid var(--border);border-radius:99px;align-items:center;gap:5px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-flex}.badge.healthy{background:var(--accent-soft);color:var(--accent-ink);border-color:#0000}[data-theme=dark] .badge.healthy{color:var(--accent)}.badge.warn{background:var(--warn-soft);color:oklch(40% .14 65);border-color:#0000}[data-theme=dark] .badge.warn{color:var(--warn)}.badge.danger{background:var(--danger-soft);color:var(--danger);border-color:#0000}.badge.lab{color:var(--text-faint);background:0 0;border-style:dashed}.upload{border:1.5px dashed var(--border-strong);text-align:center;background:var(--bg-sunk);cursor:pointer;border-radius:10px;padding:36px 24px;transition:border-color .15s,background .15s}.upload:hover,.upload.drag{border-color:var(--accent);background:#4a974a0d}[data-theme=dark] .upload:hover,[data-theme=dark] .upload.drag{background:#78c8780d}.upload-ico{background:var(--bg-elev);border:1px solid var(--border);width:40px;height:40px;color:var(--accent);border-radius:50%;place-items:center;margin:0 auto 12px;display:grid}.upload h3{margin:0 0 4px;font-size:14px;font-weight:600}.upload p{color:var(--text-muted);margin:0;font-size:12px}.source-tabs{background:var(--bg-sunk);border:1px solid var(--border);border-radius:8px;gap:4px;width:fit-content;padding:4px;display:flex}.source-tab{cursor:pointer;color:var(--text-muted);background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;padding:6px 14px;font-size:12px;display:flex}.source-tab.active{background:var(--bg-elev);color:var(--text);box-shadow:0 1px 2px oklch(0% 0 0/.06)}.section-head{justify-content:space-between;align-items:baseline;margin:28px 0 12px;display:flex}.section-head h2{letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);margin:0;font-size:13px;font-weight:600}.section-head .section-sub{color:var(--text-faint);font-size:12px}table.flights{border-collapse:collapse;width:100%}table.flights th{text-align:left;letter-spacing:.08em;text-transform:uppercase;color:var(--text-faint);border-bottom:1px solid var(--border);padding:8px 10px;font-size:10.5px;font-weight:500}table.flights td{border-bottom:1px solid var(--border);padding:12px 10px;font-size:13px}table.flights tr:last-child td{border-bottom:0}table.flights tr:hover td{background:var(--bg-sunk)}.row{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 0;display:flex}.row:last-child{border-bottom:0}.row-swatch{border-radius:2px;flex-shrink:0;width:8px;height:32px}.row-title{font-size:13px;font-weight:500}.row-sub{color:var(--text-muted);margin-top:1px;font-size:11.5px}.row-meta{text-align:right;margin-left:auto}.canvas{border:1px solid var(--border);background:linear-gradient(var(--grid) 1px, transparent 1px) 0 0 / 24px 24px, linear-gradient(90deg, var(--grid) 1px, transparent 1px) 0 0 / 24px 24px, var(--bg-sunk);border-radius:10px;min-height:360px;position:relative;overflow:hidden}.plot{border:1.5px solid var(--accent);cursor:pointer;background:#4a974a14;border-radius:4px;transition:background .15s;position:absolute}[data-theme=dark] .plot{background:#78c87814}.plot:hover{background:#4a974a2e}[data-theme=dark] .plot:hover{background:#78c8782e}.plot.warn{border-color:var(--warn);background:#cc8c281f}[data-theme=dark] .plot.warn{background:#dca03c1f}.plot.warn:hover{background:#cc8c2838}[data-theme=dark] .plot.warn:hover{background:#dca03c38}.plot-label{color:var(--text);background:var(--bg-elev);border:1px solid var(--border);white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:10.5px;font-weight:600;position:absolute;top:-10px;left:6px}.canvas-legend{color:var(--text-muted);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--border);background:#ffffffeb;border-radius:6px;gap:14px;padding:6px 10px;font-size:11px;display:flex;position:absolute;bottom:12px;left:12px}[data-theme=dark] .canvas-legend{background:#1e2420eb}.dot{vertical-align:middle;border-radius:2px;width:8px;height:8px;margin-right:6px;display:inline-block}.analysis-img{border:1px solid var(--border);aspect-ratio:4/3;background:var(--bg-sunk);border-radius:10px;position:relative;overflow:hidden}.aerial-bg{background:radial-gradient(circle at 20% 30%,oklch(55% .1 145) 0 16px,#0000 17px),radial-gradient(circle at 35% 60%,oklch(50% .09 145) 0 18px,#0000 19px),radial-gradient(circle at 55% 25%,oklch(58% .11 145) 0 14px,#0000 15px),radial-gradient(circle at 70% 55%,oklch(52% .1 145) 0 17px,#0000 18px),radial-gradient(circle at 85% 35%,oklch(56% .1 145) 0 15px,#0000 16px),radial-gradient(circle at 25% 80%,oklch(50% .08 145) 0 16px,#0000 17px),radial-gradient(circle at 50% 85%,oklch(55% .1 145) 0 15px,#0000 16px),radial-gradient(circle at 75% 80%,oklch(48% .08 145) 0 18px,#0000 19px),linear-gradient(135deg,oklch(32% .04 130),oklch(28% .05 150));position:absolute;inset:0}.detection{border:1.5px solid var(--accent);pointer-events:none;border-radius:50%;position:absolute}.detection.warn{border-color:var(--warn);border-style:dashed}.detection.danger{border-color:var(--danger)}.detection-tag{background:var(--accent);color:oklch(16% .012 150);white-space:nowrap;border-radius:3px;padding:1px 5px;font-family:JetBrains Mono,monospace;font-size:9.5px;position:absolute;top:-22px;left:-2px}.detection.warn .detection-tag{background:var(--warn)}.detection.danger .detection-tag{background:var(--danger);color:#fff}.scan-line{pointer-events:none;background:linear-gradient(#0000 0% 48%,#4a974a80 50%,#0000 52% 100%);animation:2.4s ease-in-out infinite scan;position:absolute;inset:0}[data-theme=dark] .scan-line{background:linear-gradient(#0000 0% 48%,#78c87880 50%,#0000 52% 100%)}@keyframes scan{0%{opacity:0;transform:translateY(-100%)}10%{opacity:1}90%{opacity:1}to{opacity:0;transform:translateY(100%)}}.thumbs{grid-template-columns:repeat(6,1fr);gap:8px;display:grid}.thumb{aspect-ratio:1;border:1px solid var(--border);cursor:pointer;background:var(--bg-sunk);border-radius:6px;position:relative;overflow:hidden}.thumb.active{outline:2px solid var(--accent);outline-offset:1px}.thumb-inner{background:radial-gradient(circle at 30% 40%,oklch(55% .1 145) 0 8px,#0000 9px),radial-gradient(circle at 60%,oklch(50% .09 145) 0 10px,#0000 11px),linear-gradient(135deg,oklch(30% .04 130),oklch(26% .05 150));position:absolute;inset:0}.progress{background:var(--bg-sunk);border-radius:99px;height:4px;overflow:hidden}.progress>span{background:var(--accent);border-radius:99px;height:100%;transition:width .6s;display:block}.lab-grid{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}.lab-card{border:1.5px dashed var(--border-strong);background:0 0;border-radius:10px;flex-direction:column;gap:10px;min-height:140px;padding:16px;display:flex}.lab-ico{background:var(--bg-sunk);border:1px solid var(--border);width:32px;height:32px;color:var(--text-muted);border-radius:7px;place-items:center;display:grid}.lab-title{font-size:13px;font-weight:600}.lab-desc{color:var(--text-muted);font-size:12px;line-height:1.5}.lab-card .badge{align-self:flex-start;margin-top:auto}svg{display:block}@media (width<=767px){.app{grid-template-rows:1fr auto;grid-template-columns:1fr}.sidebar{display:none}.grid-4{grid-template-columns:repeat(2,1fr)}.grid-3,.grid-2{grid-template-columns:1fr}.scroll{padding:16px 16px 60px}.topbar{padding:12px 16px}}
