:root{--bg: #eaeef2;--panel: #ffffff;--panel-raised: #eef2ee;--line: #d6dde2;--line-soft: #e6ebef;--text: #252525;--text-muted: #848484;--brand: #0a5452;--brand-soft: #709b99;--accent: #0a5452;--accent-bright: #51c551;--tooth-ring: #155a15;--tooth: #2563eb;--pathology: #ec4899;--treatment: #f59e0b;--selected: #fbbf24;color:var(--text);background:var(--bg);font-family:Segoe UI,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}button:disabled,input:disabled{cursor:not-allowed}h1,h2,h3,h4,p{margin-top:0}.app-shell{min-height:100vh;padding:20px}.workspace{width:min(1720px,100%);margin:0 auto}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px}.topbar h1{color:var(--brand)}.eyebrow{margin-top:4px;color:var(--brand-soft);font-size:.95rem;font-weight:400}h1{margin-bottom:0;font-size:1.5rem;line-height:1.2}h2{margin-bottom:12px;font-size:1.05rem}h3{margin-bottom:10px}.lab-grid{display:grid;grid-template-columns:290px minmax(0,1fr) 320px;gap:14px;align-items:start}.control-panel,.viewer-panel,.details-panel,.tooth-results{border:1px solid var(--line);border-radius:8px;background:var(--panel)}.control-panel,.details-panel,.tooth-results{padding:16px}.viewer-panel{position:relative;padding:14px}.details-panel{position:sticky;top:20px;max-height:calc(100vh - 40px);overflow-y:auto}.viewer-header{display:flex;justify-content:space-between;gap:16px;margin-bottom:12px}.viewer-header p,.muted{color:var(--text-muted);font-size:.85rem}.status-stack{display:grid;gap:3px;justify-items:end;color:var(--text-muted);font-size:.85rem;white-space:nowrap}.status-stack strong{color:var(--accent)}.dropzone{display:grid;place-items:center;min-height:120px;border:2px dashed var(--line);border-radius:8px;padding:18px;text-align:center;color:var(--text-muted);background:var(--panel-raised)}.dropzone input{display:none}.dropzone span{display:block;max-width:100%;overflow-wrap:anywhere;color:var(--text);font-weight:700}.dropzone small{display:block;margin-top:6px}.model-list{margin-top:18px}.model-list h3{font-size:.95rem}.model-class-catalog{padding:0 0 12px 24px;font-size:.8rem;overflow-wrap:anywhere}.model-usage-note{padding:0 12px 0 24px;font-size:.8rem;line-height:1.4}.model-class-catalog summary{cursor:pointer}.model-class-catalog ol{padding-left:24px;line-height:1.6}.model-row,.tuning-row{display:flex;gap:9px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line);font-size:.88rem}.tuning-row{display:grid;gap:6px}.model-row span{display:grid;gap:3px}.model-row small{color:var(--text-muted)}.disabled-row{opacity:.5}.control-panel button[type=submit]{width:100%;margin-top:18px;border:0;border-radius:6px;padding:12px 18px;color:#fff;background:var(--accent);font-weight:700}.control-panel button[type=submit]:disabled{opacity:.4}.alert{margin:14px 0 0;border:1px solid #7f1d1d;border-radius:6px;padding:10px;color:#fca5a5;background:#2c1618;font-size:.88rem}.filter-bar{display:flex;gap:12px;align-items:center;margin-bottom:12px}.filter-bar label{display:flex;flex:1;gap:12px;align-items:center;color:var(--text-muted);font-size:.9rem;font-weight:600}.filter-bar select{min-width:240px;appearance:none;border:1px solid var(--line);border-radius:6px;padding:9px 38px 9px 14px;color:var(--text);background-color:var(--panel-raised);background-image:linear-gradient(45deg,transparent 50%,var(--text-muted) 50%),linear-gradient(135deg,var(--text-muted) 50%,transparent 50%);background-position:calc(100% - 19px) calc(50% + 2px),calc(100% - 14px) calc(50% + 2px);background-size:5px 5px,5px 5px;background-repeat:no-repeat;font-size:.9rem;cursor:pointer;transition:border-color .12s}.filter-bar select:hover,.filter-bar select:focus-visible{border-color:var(--accent);outline:none}.filter-bar label{flex:0 0 auto}.class-filter-panel{margin-bottom:12px;border:1px solid var(--line);border-radius:6px;padding:10px;background:var(--panel-raised)}.class-filter-panel h3{margin-bottom:8px;color:var(--text-muted);font-size:.82rem}.class-filter-grid{display:flex;flex-wrap:wrap;gap:6px}.class-chip{display:inline-flex;gap:7px;align-items:center;border:1px solid var(--line);border-radius:999px;padding:5px 11px 5px 8px;color:var(--text);background:var(--panel);font-size:.8rem;cursor:pointer;transition:border-color .12s,background .12s,opacity .12s}.class-chip:hover{border-color:var(--accent)}.class-chip.off{opacity:.45}.class-chip input{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.class-chip:focus-within{outline:2px solid var(--accent);outline-offset:2px}.class-chip .dot{width:9px;height:9px;border-radius:50%}.class-chip em{color:var(--text-muted);font-style:normal;font-variant-numeric:tabular-nums}.radiograph-frame{position:relative;overflow:hidden;border-radius:8px;background:#141414}.radiograph-frame:fullscreen{display:grid;place-items:center;border-radius:0}.radiograph-frame .zoom-wrapper,.radiograph-frame .zoom-content{display:block;width:100%}.radiograph-frame .zoom-content{position:relative}.radiograph-frame img{display:block;width:100%;height:auto}.radiograph-frame .overlay{position:absolute;inset:0;width:100%;height:100%}.detection-shape{cursor:pointer}.zoom-controls{position:absolute;z-index:10;right:10px;bottom:10px;display:flex;gap:6px}.zoom-controls button{min-width:34px;border:1px solid var(--line);border-radius:6px;padding:6px 10px;color:var(--text);background:#ffffffe0;font-size:.85rem}.viewer-hints{display:flex;flex-wrap:wrap;gap:6px 22px;margin-top:8px;color:var(--text-muted);font-size:.78rem}.tooth-bar{display:grid;gap:6px;margin-top:12px}.tooth-arch{display:grid;grid-template-columns:1fr 1fr;gap:10px}.tooth-quadrant{display:flex;gap:3px}.tooth-chip{display:grid;flex:1 1 0;gap:2px;justify-items:center;min-width:0;padding:4px 2px 6px;border:1px solid var(--tooth-ring);border-radius:5px;color:var(--tooth-ring);background:var(--panel)}.tooth-chip-number{font-size:.72rem;font-variant-numeric:tabular-nums;font-weight:700}.tooth-glyph{width:20px;height:25px}.tooth-chip-absent{display:grid;place-items:center;height:25px;font-size:1.1rem}.tooth-chip.detected{color:#fff;border-color:var(--tooth);background:var(--tooth)}.tooth-chip.has_treatment{color:#fff;border-color:var(--treatment);background:var(--treatment)}.tooth-chip.has_pathology{color:#fff;border-color:#d93025;background:#d93025}.tooth-chip.selected{color:#1f2937;border-color:#b45309;background:var(--selected)}.tooltip{position:fixed;z-index:20;display:grid;gap:2px;max-width:260px;border:1px solid var(--line);border-radius:6px;padding:8px 10px;color:var(--text);background:#fffffff7;box-shadow:0 2px 8px #10282424;font-size:.8rem;pointer-events:none}.tooltip span{color:var(--text-muted)}.radiograph-placeholder{position:relative;display:grid;place-items:center;min-height:420px;overflow:hidden;background:var(--panel-raised);color:var(--text-muted);font-weight:700}.scan-line{position:absolute;inset:42% 10%;border-top:2px solid rgb(10 84 82 / 12%);border-bottom:2px solid rgb(10 84 82 / 6%)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin-top:12px}.metric-card,.tooth-card,.details-card{border:1px solid var(--line);border-radius:6px;background:var(--panel-raised)}.metric-card{display:grid;gap:3px;padding:10px;font-size:.82rem}.metric-card span{color:var(--text-muted)}.details-card{padding:14px}.details-card h3{margin-bottom:8px;font-size:1.35rem;line-height:1.2}.kind-badge{display:inline-block;margin-bottom:8px;border-radius:4px;padding:3px 8px;color:var(--text-muted);background:var(--panel);font-size:.72rem;text-transform:uppercase}.probability{margin-bottom:12px;color:var(--text-muted);font-size:.85rem}.feature-list{display:grid;gap:1px;margin-bottom:12px;overflow:hidden;border-radius:6px;background:var(--line)}.feature-list p{margin:0;padding:10px 12px;background:var(--panel);font-size:.9rem}.feature-list small{display:block;margin-top:2px;color:var(--text-muted);font-size:.78rem}.details-card dl{display:grid;gap:8px;margin:0;font-size:.85rem}.details-card dl>div{display:flex;gap:10px;justify-content:space-between}.details-card dt{color:var(--text-muted)}.details-card dd{margin:0;text-align:right}.candidate-note{margin-bottom:10px;color:#f9a8d4;font-size:.85rem;font-weight:600}.safety-note{margin:12px 0 0;border-left:3px solid var(--pathology);border-radius:0 4px 4px 0;padding:8px 10px;color:var(--text-muted);background:#ec48991a;font-size:.8rem}.tooth-results{grid-column:1 / -1}.tooth-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}.tooth-card{padding:12px;cursor:pointer;font-size:.85rem}.tooth-card strong{display:block;color:var(--accent);font-size:1.2rem}.tooth-card span{color:var(--text-muted)}.tooth-card p{margin:8px 0 0}@media(max-width:1400px){.lab-grid{grid-template-columns:270px minmax(0,1fr)}.details-panel{position:static;grid-column:2;max-height:none}}@media(max-width:1000px){.lab-grid{grid-template-columns:minmax(0,1fr)}.details-panel{grid-column:1}}.image-tools{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;margin-bottom:12px;border:1px solid var(--line-soft);border-radius:8px;padding:10px 14px;background:var(--panel-raised)}.image-tools label{display:inline-flex;gap:9px;align-items:center;color:var(--text-muted);font-size:.82rem}.image-tools input[type=range]{width:120px;accent-color:var(--accent)}.image-tools output{min-width:42px;color:var(--text);font-variant-numeric:tabular-nums}.tool-button{border:1px solid var(--line);border-radius:6px;padding:6px 14px;color:var(--text-muted);background:var(--panel);font-size:.82rem;transition:border-color .12s,color .12s,background .12s}.tool-button:hover{color:var(--text);border-color:var(--accent)}.tool-button.active{color:#fff;border-color:var(--accent);background:var(--accent)}.control-panel button[type=submit]:hover:not(:disabled){background:#0d6b68}.zoom-controls button:hover{border-color:var(--accent);color:#fff;background:var(--accent)}.tooth-chip{transition:transform 90ms,filter .12s}.tooth-chip:hover:not(:disabled){transform:translateY(-2px);filter:brightness(1.15)}.tooth-card:hover{border-color:var(--accent)}.model-row,.tuning-row{border-bottom-color:var(--line-soft)}.model-row:last-of-type{border-bottom:0}.control-panel input[type=range]{width:100%;accent-color:var(--accent)}.control-panel input[type=checkbox]{accent-color:var(--accent)}.radiograph-frame{border:1px solid var(--line);box-shadow:inset 0 0 0 1px #1028241f}.viewer-panel,.details-panel,.control-panel{box-shadow:0 1px 3px #1028241a}.details-panel .muted{border:1px dashed var(--line);border-radius:6px;padding:14px;text-align:center}.progress{display:grid;gap:8px;margin-bottom:12px;border:1px solid var(--line-soft);border-radius:8px;padding:12px 14px;background:var(--panel-raised)}.progress span{color:var(--text-muted);font-size:.82rem;font-variant-numeric:tabular-nums}.progress-bar{position:relative;overflow:hidden;height:4px;border-radius:999px;background:var(--line)}.progress-bar:after{content:"";position:absolute;inset:0 auto 0 0;width:35%;border-radius:999px;background:var(--accent);animation:progress-slide 1.1s ease-in-out infinite}@keyframes progress-slide{0%{transform:translate(-100%)}to{transform:translate(340%)}}@media(max-width:560px){.tooth-arch{gap:6px}.tooth-quadrant{gap:1px}.tooth-chip{padding:3px 1px 4px}.tooth-glyph{width:14px;height:18px}.tooth-chip-absent{height:18px;font-size:.9rem}.tooth-chip-number{font-size:.58rem}}@media(prefers-reduced-motion:reduce){.progress-bar:after{width:100%;animation:none;opacity:.5}}.feature-list p.empty{color:var(--text-muted);font-style:italic}.feature-list:empty{display:none}.detection-shape:focus{outline:none}.detection-shape:focus polygon,.detection-shape:focus polyline{stroke-width:4}
