:root{--bg: #0b0d10;--panel: #14171c;--border: #262b33;--text: #e6e8eb;--dim: #8a919c;--accent: #f5a623;--ok: #3ecf8e;--err: #ef5350;font-family:-apple-system,Segoe UI,Roboto,sans-serif;color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}.app{min-height:100vh}.topbar{display:flex;align-items:center;gap:24px;padding:12px 24px;border-bottom:1px solid var(--border);background:var(--panel)}.brand{font-weight:700;color:var(--accent);text-decoration:none;display:flex;align-items:center}.brand-logo{height:22px;width:auto;display:block}.topbar nav{display:flex;gap:16px;flex:1}.topbar a{color:var(--text);text-decoration:none;opacity:.85}.topbar a:hover{opacity:1}.logout{background:none;border:1px solid var(--border);color:var(--dim);padding:6px 12px;border-radius:6px;cursor:pointer}main{padding:24px;max-width:1320px;margin:0 auto}.dim{color:var(--dim)}.error{color:var(--err)}.login-screen{display:flex;align-items:center;justify-content:center;height:100vh}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:32px;width:320px;display:flex;flex-direction:column;gap:8px}.login-logo{height:40px;width:auto;margin:0 0 4px;align-self:flex-start}.login-card input{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:8px;border-radius:6px;margin-bottom:8px}.login-card button{background:var(--accent);border:none;color:#1a1200;font-weight:600;padding:10px;border-radius:6px;cursor:pointer;margin-top:8px}.turnstile{margin:8px 0}.filters{display:flex;gap:8px;margin-bottom:16px}.filters input,.filters select{background:var(--panel);border:1px solid var(--border);color:var(--text);padding:8px;border-radius:6px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);font-size:14px}.sync-done{color:var(--ok)}.sync-pending,.sync-uploading{color:var(--accent)}.sync-failed{color:var(--err)}.dl-wrap{white-space:nowrap}.dl-pair{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}.dl-btn{background:var(--panel);border:1px solid var(--border);color:var(--text);padding:5px 10px;border-radius:6px;cursor:pointer;font-size:13px}.dl-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.dl-btn:disabled{opacity:.45;cursor:not-allowed}.run-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.run-detail-head h2{margin:0}.run-detail-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.data-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:56vh;gap:14px}.data-loading-label{margin:0;font-size:13px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.data-loading-track{width:min(420px,80vw);height:4px;border-radius:99px;background:#1c2128;overflow:hidden}.data-loading-bar{display:block;height:100%;width:38%;background:var(--accent);border-radius:99px;animation:data-load 1.15s ease-in-out infinite}@keyframes data-load{0%{transform:translate(-110%)}to{transform:translate(280%)}}.run-detail section{margin-top:28px}.run-plots h4{margin:22px 0 8px;font-size:14px;font-weight:600}.signal-stage{display:grid;grid-template-columns:minmax(180px,280px) 1fr;gap:0;margin:12px 0 28px;min-height:480px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--panel)}.signal-nav{display:flex;flex-direction:column;border-right:1px solid var(--border);min-height:480px;max-height:520px;background:#101318}.signal-nav-head{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--border);font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.signal-nav-list{flex:1;overflow-y:auto}.signal-nav-list button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:8px 12px;border:0;border-bottom:1px solid #1c2128;background:transparent;color:var(--text);text-align:left;cursor:pointer}.signal-nav-list button:hover{background:#1a1f26}.signal-nav-list button.on{background:#1e2833;box-shadow:inset 3px 0 0 var(--accent)}.signal-nav-list button.avg{position:sticky;top:0;z-index:2;background:#161b22}.signal-nav-idx{font-size:13px;font-weight:600}.signal-nav-meta{font-size:11px;color:var(--dim)}.signal-view{padding:8px 16px 16px;min-width:0;min-height:480px}.signal-view h4{margin:8px 0 4px}@media(max-width:640px){.signal-stage{grid-template-columns:160px 1fr}}.plot-split{display:grid;grid-template-columns:1fr 1fr;gap:24px}@media(max-width:800px){.plot-split{grid-template-columns:1fr}}.heat-row{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:12px 0 8px}@media(max-width:800px){.heat-row{grid-template-columns:1fr}}.heat-wrap h4{margin:0 0 4px}.heat-caption,.heat-axes{margin:4px 0 8px;font-size:12px}.heat{display:grid;gap:1px;background:var(--border);width:max-content;max-width:100%;overflow:auto}.heat-cell{width:100%;height:100%}.heat-cell:not(.empty){cursor:pointer}.heat-cell.selected{outline:2px solid var(--accent);outline-offset:-2px;z-index:1}.point-table-wrap{max-height:360px;overflow:auto;margin-top:12px;border:1px solid var(--border);border-radius:6px}.point-table{margin:0}.point-table thead th{position:sticky;top:0;background:var(--panel);z-index:1}.point-table tbody tr{cursor:pointer}.point-table tbody tr:hover{background:#1a1f26}.point-table tbody tr.selected{background:#1e2833}.point-table tbody tr.selected td{color:var(--text)}.example-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:800px){.example-grid{grid-template-columns:1fr}}.example-cell p{margin:0 0 4px;font-size:12px}.events{list-style:none;padding:0;max-height:220px;overflow-y:auto}.events li{padding:4px 0;border-bottom:1px solid var(--border);font-size:13px}.level-err{color:var(--err)}.level-warn{color:var(--accent)}.level-ok{color:var(--ok)}.method{font-family:monospace;font-weight:700;padding:2px 6px;border-radius:4px;font-size:12px}.method-GET{background:#1b3a2e;color:var(--ok)}.method-POST{background:#3a2e1b;color:var(--accent)}.method-PUT{background:#1b2c3a;color:#4fc3f7}.method-DELETE{background:#3a1b1b;color:var(--err)}.api-docs h3{margin:28px 0 8px;font-size:16px}.api-docs ul,.api-docs ol{margin:8px 0 16px;padding-left:22px}.api-docs li{margin:4px 0}.api-docs .key-value{word-break:break-all;-webkit-user-select:all;user-select:all}
