:root{--bg: #1a1d23;--bg-panel: #242830;--bg-elev: #2d323c;--fg: #e6e8eb;--fg-muted: #9aa1aa;--accent: #4aa3ff;--accent-warm: #ff8a4a;--good: #5fd07a;--warn: #f0c94a;--bad: #ff5c6c;--border: #353a45;--radius: 6px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px;color:var(--fg);background:var(--bg)}*{box-sizing:border-box}body,html,#app{margin:0;padding:0;height:100%;width:100%;overflow:hidden}#app{display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid var(--border);background:var(--bg-panel)}.app-header h1{margin:0;font-size:1.1rem;font-weight:600}.header-right{display:flex;align-items:center;gap:.85rem}.header-reset{padding:.32rem .7rem;font-size:.78rem;color:var(--bad);border:1px solid rgba(255,92,108,.5);background:transparent}.header-reset:hover{background:#ff5c6c1f;border-color:var(--bad)}.status{display:inline-flex;align-items:center;font-size:.85rem;color:var(--fg-muted)}.status.busy{color:var(--warn)}.status.busy:before{content:"";flex-shrink:0;width:12px;height:12px;box-sizing:border-box;margin-right:6px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:status-spin .8s linear infinite}@keyframes status-spin{to{transform:rotate(360deg)}}.status.error{color:var(--bad)}.status.ok{color:var(--good)}.modal-overlay{position:fixed;inset:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:1000;backdrop-filter:blur(2px)}.modal-overlay.hidden{display:none}.modal-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:1.2rem 1.4rem;max-width:420px;box-shadow:0 8px 30px #0009}.modal-card h3{margin:0 0 .6rem;font-size:1rem;font-weight:600}.modal-card p{margin:0 0 1rem;font-size:.85rem;line-height:1.4}.modal-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.4rem}.modal-actions button{font-size:.8rem}.status.with-progress{position:relative;padding:.15rem .5rem;border-radius:3px;background:linear-gradient(to right,rgba(74,163,255,.28) var(--progress, 0%),rgba(255,255,255,.04) var(--progress, 0%))}.app-main{flex:1;display:grid;grid-template-columns:320px 1fr;min-height:0;transition:grid-template-columns .2s ease;position:relative}.app-main.sidebar-collapsed{grid-template-columns:0 1fr}.sidebar{background:var(--bg-panel);border-right:1px solid var(--border);overflow-y:auto;overflow-x:hidden;padding:.6rem .6rem 1rem;display:flex;flex-direction:column;gap:.6rem;position:relative;scrollbar-width:thin}.sidebar::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.sidebar-collapsed .sidebar{padding:0;border-right:none;overflow:hidden;pointer-events:none}.sidebar-collapsed .sidebar>.panel{display:none}.sidebar-toggle{position:absolute;top:14px;left:320px;transform:translate(-50%);width:22px;height:44px;background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);color:var(--fg);font-size:14px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;z-index:30;box-shadow:0 1px 4px #00000059;transition:left .2s ease,background .15s}.sidebar-collapsed .sidebar-toggle{left:0;transform:translate(0);border-radius:0 var(--radius) var(--radius) 0}.sidebar-toggle:hover{background:var(--border)}.panel{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .75rem;transition:padding .15s ease}.sidebar-divider{margin:.6rem .1rem .1rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted);border-top:1px solid var(--border);padding-top:.55rem}.panel.collapsed{padding:.5rem .75rem}.panel>h2{cursor:pointer;user-select:none;position:relative;padding-right:1.4rem;transition:color .12s}.panel>h2:hover{color:var(--fg)}.panel>h2:after{content:"›";position:absolute;right:.1rem;top:50%;transform:translateY(-50%) rotate(90deg);transition:transform .15s ease;font-size:1rem;line-height:1;color:var(--fg-muted);font-weight:400}.panel.collapsed>h2{margin-bottom:0}.panel.collapsed>h2:after{transform:translateY(-50%) rotate(0)}.panel.collapsed>*:not(h2){display:none!important}.panel h2{margin:0 0 .5rem;font-size:.9rem;text-transform:uppercase;letter-spacing:.05em;color:var(--fg-muted);font-weight:600}.subsection{border-top:1px solid var(--border);padding-top:.55rem;margin-top:.55rem}.subsection:first-of-type{border-top:none;padding-top:0;margin-top:0}.subsection h3{margin:0 0 .4rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-muted);font-weight:600}.subsection-hint{font-size:.72rem;margin:.4rem 0 .3rem}.tf-axes{display:flex;align-items:center;gap:.4rem;padding:.3rem .4rem;border:1px solid transparent;border-radius:4px;margin-bottom:.3rem;transition:background .12s ease,border-color .12s ease}.tf-axes.active{border-color:var(--accent);background:#4aa3ff12}.tf-axes .tf-label{flex:0 0 30px;font-size:.78rem;color:var(--fg-muted)}.tf-axis{flex:1;display:flex;align-items:center;gap:.25rem;min-width:0}.tf-axis label{font-weight:700;font-size:.78rem;min-width:1ch;text-align:center}.tf-axis input{flex:1;min-width:0}.ax-x{color:#ff5c6c}.ax-y{color:#5fd07a}.ax-z{color:#4aa3ff}.viewer-area{display:grid;grid-template-rows:1fr 180px;min-height:0}#viewer{position:relative;background:#0d0f13}#viewer canvas{display:block}#histogram{background:var(--bg-panel);border-top:1px solid var(--border);padding:.5rem;overflow:hidden}button,.btn{background:var(--bg-elev);border:1px solid var(--border);color:var(--fg);padding:.4rem .7rem;border-radius:var(--radius);cursor:pointer;font-size:.85rem;transition:background .15s}button:hover,.btn:hover{background:var(--border)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#0d0f13;font-weight:600}button.primary:hover{background:#6cb3ff}button.primary.step-running{background:var(--warn);border-color:var(--warn);color:#1a1d23}button.primary.step-running:hover{background:#f3d568}button.primary.step-done{background:var(--good);border-color:var(--good);color:#1a1d23}button.primary.step-done:hover{background:#7ed991}input[type=number],input[type=text],select{background:var(--bg);border:1px solid var(--border);color:var(--fg);padding:.3rem .5rem;border-radius:var(--radius);font-size:.85rem;width:100%}select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path fill='none' stroke='%23a0a0a0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M3 4.5l3 3 3-3'/></svg>");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px 12px;padding-right:1.6rem}label{font-size:.8rem;color:var(--fg-muted)}.row{display:flex;gap:.5rem;align-items:center;margin-bottom:.4rem}.row>*{flex:1}.dropzone{border:1px dashed var(--border);border-radius:var(--radius);padding:.6rem;text-align:center;font-size:.8rem;color:var(--fg-muted);margin-bottom:.4rem;cursor:pointer;transition:all .15s}.dropzone:hover,.dropzone.dragover{border-color:var(--accent);color:var(--fg)}.dropzone.loaded{border-style:solid;border-color:var(--good);color:var(--fg)}.dropzone.loading{border-style:dashed;border-color:var(--warn);color:var(--fg)}.zone-info.loading:before{content:"";display:inline-block;width:10px;height:10px;box-sizing:border-box;margin-right:.4rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:status-spin .8s linear infinite;vertical-align:-1px}.dropzone strong{display:block;margin-bottom:.15rem;color:var(--fg)}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-top:.4rem}.stat{background:var(--bg);padding:.4rem .5rem;border-radius:var(--radius)}.stat-label{font-size:.7rem;color:var(--fg-muted);text-transform:uppercase}.stat-value{font-size:1rem;font-weight:600;font-variant-numeric:tabular-nums}.legend{display:flex;align-items:center;gap:.5rem;margin-top:.4rem;font-size:.75rem;color:var(--fg-muted)}.legend-bar{flex:1;height:12px;border-radius:3px;background:linear-gradient(to right,#22f,#0af,#0fa,#8f0,#ff0,#f80,red)}.legend-tick{font-variant-numeric:tabular-nums;min-width:3em;text-align:center}.point-marker{display:inline-block;width:16px;height:16px;border-radius:50%;margin-right:.3rem;vertical-align:middle}.point-marker.p1{background:#ff5c6c}.point-marker.p2{background:#5fd07a}.point-marker.p3{background:#4aa3ff}.muted{color:var(--fg-muted);font-size:.8rem}.cs-modes{display:flex;gap:.25rem;margin-bottom:.6rem;flex-wrap:wrap}.cs-modes button{flex:1;min-width:0;padding:.35rem .4rem;font-size:.78rem;white-space:nowrap}.cs-modes button:disabled{opacity:.4;cursor:not-allowed}.cs-section{margin-top:.2rem}.cs-section[hidden]{display:none}.legend-tol,.legend-thk{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.4rem}.legend-chip{display:inline-block;padding:.15rem .5rem;border-radius:3px;font-size:.72rem;font-weight:600;color:#1a1d23}.legend-chip-blue{background:#4d99ff;color:#fff}.legend-chip-green{background:#66d973}.legend-chip-orange{background:#f2994a;color:#1a1d23}.legend-chip-red{background:#f25940;color:#fff}.legend-chip-yellow{background:#f2cc47}.th-overall{display:flex;align-items:center;gap:.5rem;margin-top:.5rem}.th-overall-label{font-size:.78rem;color:var(--muted, #888)}.th-overall-badge{display:inline-block;padding:.2rem .7rem;border-radius:4px;font-weight:700;font-size:.85rem;color:#1a1d23;letter-spacing:.04em}.th-chips{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.4rem}.th-chip{display:inline-block;padding:.15rem .5rem;border-radius:3px;font-size:.72rem;font-weight:600;color:#1a1d23}input[type=range]{flex:1;accent-color:var(--accent)}input[type=checkbox]{accent-color:var(--accent)}.vis-block .row{margin-bottom:.2rem}.setting-label{position:relative;cursor:help;text-decoration:underline dotted rgba(255,255,255,.25);text-underline-offset:3px}.setting-label[data-tip]:before{content:attr(data-tip);position:absolute;bottom:calc(100% + 6px);left:0;background:#0d0f13f5;color:var(--fg);border:1px solid var(--border);padding:.45rem .6rem;border-radius:6px;font-size:.78rem;line-height:1.4;width:max-content;max-width:260px;white-space:normal;pointer-events:none;opacity:0;transition:opacity .12s ease .25s;z-index:100;box-shadow:0 4px 14px #00000073;font-weight:400;text-transform:none;letter-spacing:normal}.setting-label[data-tip]:after{content:"";position:absolute;bottom:calc(100% + 1px);left:14px;width:8px;height:8px;background:#0d0f13f5;border-right:1px solid var(--border);border-bottom:1px solid var(--border);transform:rotate(45deg);pointer-events:none;opacity:0;transition:opacity .12s ease .25s;z-index:100}.setting-label:hover[data-tip]:before,.setting-label:hover[data-tip]:after{opacity:1}.viewer-toolbar{position:absolute;top:.75rem;right:.75rem;background:#242830d9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:8px;padding:.4rem;display:flex!important;flex-direction:column;gap:.25rem;z-index:50;box-shadow:0 4px 14px #0006;pointer-events:auto;visibility:visible!important}#viewer{overflow:visible}.vt-btn-wrap{position:relative;display:flex}.vt-btn{width:34px;height:34px;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--fg-muted);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:background .12s,color .12s,border-color .12s}.vt-btn:hover{background:#ffffff0f;color:var(--fg)}.vt-btn.active{background:#4aa3ff2e;color:var(--accent);border-color:#4aa3ff73}.vt-sep{height:1px;background:var(--border);margin:.2rem .3rem}.vt-flyout{position:absolute;top:0;right:calc(100% + 8px);background:#242830f5;border:1px solid var(--border);border-radius:6px;padding:.5rem .6rem;display:none;align-items:center;gap:.5rem;white-space:nowrap;box-shadow:0 4px 14px #0006;pointer-events:auto}.vt-flyout:before{content:"";position:absolute;top:0;bottom:0;left:100%;width:12px}.vt-btn-wrap:hover .vt-flyout{display:flex}.vt-flyout label{font-size:.75rem;color:var(--fg-muted)}.vt-flyout input[type=range]{width:110px}.vt-flyout span{font-variant-numeric:tabular-nums;font-size:.75rem;min-width:2.6em;text-align:right}.vt-flyout-rich{flex-direction:column;align-items:stretch;gap:.4rem;max-width:260px}.vt-flyout-tip{font-size:.78rem;color:var(--fg);line-height:1.35;white-space:normal}.vt-flyout-row{display:flex;align-items:center;gap:.5rem}.vt-flyout-views .vt-views-grid{display:grid;grid-template-columns:repeat(3,64px);gap:4px}.vt-flyout-views .vt-views-grid>button{padding:.35rem .4rem;font-size:.78rem;background:#ffffff0d;color:var(--fg);border:1px solid var(--border);border-radius:4px;cursor:pointer}.vt-flyout-views .vt-views-grid>button:hover{background:#4aa3ff2e;border-color:var(--accent)}.vt-flyout-views .vt-views-grid>span{display:block}#histSvg rect.hist-hit{cursor:pointer}#histSvg rect.hist-hit:hover{fill:#ffffff0f}.vt-btn[data-tip]:before,.vt-btn[data-tip]:after{pointer-events:none;opacity:0;transition:opacity .12s ease .25s;position:absolute;white-space:nowrap}.vt-btn[data-tip]:before{content:attr(data-tip);right:calc(100% + 10px);top:50%;transform:translateY(-50%);background:#0d0f13f5;color:var(--fg);border:1px solid var(--border);padding:.4rem .6rem;border-radius:6px;font-size:.78rem;font-weight:400;max-width:280px;white-space:normal;width:max-content;line-height:1.35;box-shadow:0 4px 14px #0006}.vt-btn[data-tip]:after{content:"";right:calc(100% + 4px);top:50%;transform:translateY(-50%) rotate(45deg);width:8px;height:8px;background:#0d0f13f5;border-right:1px solid var(--border);border-top:1px solid var(--border)}.vt-btn-wrap,.vt-btn[data-tip]{position:relative}.vt-btn-wrap:hover .vt-btn[data-tip]:before,.vt-btn-wrap:hover .vt-btn[data-tip]:after{opacity:1}.log-entries{max-height:320px;overflow-y:auto;font-size:.78rem;line-height:1.45;color:var(--text-secondary, #c8ccd2);background:#0000002e;border:1px solid rgba(255,255,255,.06);border-radius:4px;padding:.4rem .55rem}.log-entry{padding:.15rem 0;border-bottom:1px dotted rgba(255,255,255,.06);word-break:break-word}.log-entry:last-child{border-bottom:none}
