:root{--bg: #f6f7f9;--panel: #fff;--line: #e3e6ea;--text: #1c2128;--muted: #6b7380;--accent: #0b6bcb;--warn: #b26a00;--warn-bg: #fff6e5;--bad: #b3261e;--ok: #1b7f3b;--phase: #e8530e;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button,select,input,textarea{font:inherit}button{cursor:pointer;padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:6px}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}a.button{display:inline-block;padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:6px;text-decoration:none;color:var(--text)}a.button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}select,input[type=text],textarea{padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:#fff}pre{background:#f0f2f5;padding:10px;border-radius:6px;overflow:auto;font-size:12px;white-space:pre-wrap}code{font-size:12px}h1{font-size:18px;margin:0}h2{font-size:15px;margin:0 0 10px}h3{font-size:14px;margin:0 0 8px}a{color:var(--accent)}.app{display:grid;grid-template-columns:300px 1fr;min-height:100vh}.sidebar{background:var(--panel);border-right:1px solid var(--line);padding:14px;display:flex;flex-direction:column;gap:14px}.main{padding:16px 20px;display:flex;flex-direction:column;gap:16px;max-width:1300px}.main.wide{max-width:none}.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px}.muted{color:var(--muted);font-size:12px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.row>label{display:flex;gap:6px;align-items:center;font-size:13px}.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;border:1px solid var(--line);background:#fafbfc}.badge.done,.badge.ready{color:var(--ok);border-color:#cfe9d8;background:#effaf2}.badge.failed,.badge.no_rider,.badge.expired{color:var(--bad);border-color:#f1c9c6;background:#fdf1f0}.badge.running,.badge.processing,.badge.queued,.badge.uploaded{color:var(--accent);border-color:#cfe0f5;background:#eef5fd}.warn{background:var(--warn-bg);border:1px solid #f3d9a8;color:var(--warn);padding:8px 12px;border-radius:8px;font-size:13px}.error{color:var(--bad);font-size:13px}.video-list{display:flex;flex-direction:column;gap:4px;overflow-y:auto}.video-item{text-align:left;padding:8px 10px;border-radius:8px;border:1px solid transparent;background:transparent;display:flex;flex-direction:column;gap:2px}.video-item:hover{background:#f3f5f8}.video-item.active{border-color:var(--accent);background:#eef5fd}.player video{width:100%;max-height:520px;background:#000;border-radius:8px;display:block}.timeline{position:relative;height:54px;margin-top:10px;-webkit-user-select:none;user-select:none}.timeline .track{position:absolute;left:0;right:0;top:24px;height:8px;background:#dfe3e8;border-radius:4px;cursor:pointer}.timeline .rider{position:absolute;top:24px;height:8px;background:#b9d5f2;border-radius:4px;pointer-events:none}.timeline .cursor{position:absolute;top:18px;width:2px;height:20px;background:var(--text);pointer-events:none;transform:translate(-1px)}.timeline .marker{position:absolute;top:0;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;cursor:pointer;background:none;border:none;padding:0}.timeline .marker .dot{width:12px;height:12px;border-radius:50%;background:var(--phase);border:2px solid #fff;box-shadow:0 0 0 1px var(--phase);margin-top:20px}.timeline .marker .lbl{font-size:11px;color:var(--phase);position:absolute;top:0;white-space:nowrap}.timeline .marker.sel .dot{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.timeline .marker.sel .lbl{color:var(--accent)}.timeline .marker:nth-child(odd) .lbl{top:40px}.timeline .frame-tick{position:absolute;top:34px;width:1px;height:6px;background:#8e97a3;pointer-events:none}.controls{display:flex;gap:8px;align-items:center;margin-top:6px;font-size:13px}.framestep{flex-wrap:wrap}.framestep button{font-size:14px;padding:6px 12px;min-width:44px}.framestep .frameno{min-width:170px;font-variant-numeric:tabular-nums;font-weight:600}.score{font-size:28px;font-weight:700}.keyframes{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}.kf{border:1px solid var(--line);border-radius:8px;padding:10px;cursor:pointer;background:#fff;text-align:start;display:flex;flex-direction:column;gap:6px}.kf:hover{border-color:#b9c3d0}.kf.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.kf .head{display:flex;justify-content:space-between;align-items:baseline}.kf .phase{font-weight:600;color:var(--phase)}.kf img{width:100%;border-radius:6px;background:#000}.kf p{margin:0;font-size:13px}.kf .label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:10px}.tabs button{border:none;border-bottom:2px solid transparent;border-radius:0;background:none;padding:8px 9px}.sidebar .tabs{flex-wrap:wrap}.tabs button.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.metrics{display:flex;gap:16px;flex-wrap:wrap;font-size:13px}.metrics b{font-variant-numeric:tabular-nums}.frames-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:6px;max-height:420px;overflow-y:auto}.frames-grid figure{margin:0;cursor:pointer}.frames-grid img{width:100%;border-radius:4px;background:#000;display:block}.frames-grid figcaption{font-size:11px;color:var(--muted);text-align:center}.frames-grid figure.sel img{outline:2px solid var(--accent)}details summary{cursor:pointer;font-size:13px;color:var(--muted);margin:6px 0}.analysis-list{display:flex;flex-direction:column;gap:4px}.analysis-item{display:flex;gap:10px;align-items:center;padding:6px 10px;border-radius:8px;border:1px solid transparent;background:none;text-align:left;font-size:13px}.analysis-item:hover{background:#f3f5f8}.analysis-item.active{border-color:var(--accent);background:#eef5fd}.log{max-height:140px;overflow-y:auto;font-size:12px}.models{display:flex;flex-direction:column;gap:4px}.models label{font-size:13px;display:flex;gap:5px;align-items:center;padding:2px 6px;border-radius:6px}.models label.on{background:#eef5fd}.timeline .marker.multi .dot{background:var(--mk);box-shadow:0 0 0 1px var(--mk)}.timeline .marker.multi .lbl{color:var(--mk)}.timeline .marker.multi.sel .dot{outline:2px solid var(--text);outline-offset:1px}.cmp table{border-collapse:collapse;width:100%;font-size:13px;margin-top:8px}.cmp th,.cmp td{padding:6px 8px;border-top:1px solid var(--line);vertical-align:top;text-align:left}.cmp thead th{border-top:none}.cmp .rowlabel{color:var(--muted);white-space:nowrap;width:130px}.cmp .delta{font-size:11px;margin-left:4px;font-variant-numeric:tabular-nums}.cmp td.diff{background:#fff8e6}.cmp tr.textrow td{line-height:1.45}.cmp tr.textrow ul,.cmp tr.textrow ol{margin:0;padding-left:18px}.cmp tr.textrow li+li{margin-top:3px}.cmp td.phase-cell{cursor:pointer}.cmp td.phase-cell:hover{background:#f3f5f8}.cmp td.phase-cell.sel{box-shadow:inset 0 0 0 1px var(--accent)}.cmp .diffcols{display:grid;gap:10px;margin-top:8px}.cmp .difftext{white-space:pre-wrap;font-size:13px;line-height:1.5;border:1px solid var(--line);border-radius:8px;padding:10px;max-height:520px;overflow-y:auto}.cmp .difftext .add{background:#e6ffed;color:#1b5e20}.cmp .difftext .del{background:#ffecec;color:#8a1f1f;text-decoration:line-through}.runchip{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle}.analysis-item input[type=checkbox]{margin:0}.timeline .marker.truth .dot{background:#fff;border:2px solid var(--muted);box-shadow:none;width:10px;height:10px}.timeline .marker.truth .lbl{color:var(--muted);font-style:italic}.timeline .marker.truth.sel .dot{border-color:var(--accent)}table.eval{border-collapse:collapse;width:100%;font-size:13px}table.eval th,table.eval td{padding:5px 8px;border-top:1px solid var(--line);text-align:left;vertical-align:top}table.eval thead th{border-top:none;color:var(--muted);font-weight:500;font-size:12px;white-space:nowrap}table.eval tbody tr:hover{background:#f3f5f8}.kpi-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-top:10px}.kpi-card{border:1px solid var(--line);border-radius:8px;padding:10px 12px}.kpi-value{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;margin:2px 0}input[type=date]{padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:#fff}table.library td{vertical-align:middle}table.library select,table.library input[type=number],table.library input[type=text]{font-size:12px;padding:2px 4px}table.library tr.runs>td{background:#f7f9fb;padding:8px 8px 10px 28px}table.library tr.runs:hover{background:transparent}
