:root{--bg:#0b0c0f;--bg-raised:#12141a;--bg-panel:#161922;--bg-hover:#1c2029;--bg-input:#0e1015;--line:#23262f;--line-strong:#2e323d;--fg:#e8eaf0;--fg-muted:#9aa0ae;--fg-dim:#6b7280;--can:#4f8bea;--can-dim:#1e3a63;--data:#4bb567;--data-dim:#1c3d26;--power:#e2504f;--power-dim:#4a1f1f;--ign:#e8bf3c;--ign-dim:#463716;--feps:#a5744a;--accent:var(--can);--radius:10px;--radius-sm:6px;--radius-lg:16px;--shadow-1:0 1px 2px #0006;--shadow-2:0 4px 16px #00000073;--shadow-3:0 18px 50px #0000008c;--mono:ui-monospace, "SF Mono", "Cascadia Mono", "Consolas", monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;padding:0;font-size:14px;line-height:1.5}body{font-variant-numeric:tabular-nums}a{color:inherit;text-decoration:none}::selection{background:var(--can-dim);color:#fff}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{border:3px solid var(--bg);background:#262a34;border-radius:99px}::-webkit-scrollbar-thumb:hover{background:#333846}.shell{min-height:100vh;display:flex}.sidebar{background:var(--bg-raised);border-right:1px solid var(--line);flex-direction:column;flex:0 0 232px;width:232px;height:100vh;display:flex;position:sticky;top:0}.brand{border-bottom:1px solid var(--line);padding:22px 20px 18px}.brand-mark{letter-spacing:-.01em;align-items:center;gap:10px;font-size:15px;font-weight:600;display:flex}.brand-dot{background:var(--can);width:9px;height:9px;box-shadow:0 0 0 3px var(--can-dim);border-radius:99px;flex:none}.brand-sub{color:var(--fg-dim);letter-spacing:.04em;text-transform:uppercase;margin-top:5px;font-size:11px}.nav{flex-direction:column;flex:1;gap:2px;padding:12px 10px;display:flex}.nav-item{border-radius:var(--radius-sm);color:var(--fg-muted);align-items:center;gap:10px;padding:9px 11px;font-size:13.5px;font-weight:500;transition:background .12s,color .12s;display:flex}.nav-item:hover{background:var(--bg-hover);color:var(--fg)}.nav-item[data-active=true]{background:var(--bg-panel);color:var(--fg);box-shadow:inset 2px 0 0 var(--can)}.nav-item svg{opacity:.85;flex:none;width:16px;height:16px}.nav-foot{border-top:1px solid var(--line);padding:12px}.who{color:var(--fg-muted);padding:0 4px 9px;font-size:12px}.who b{color:var(--fg);font-weight:600;display:block}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:20;align-items:center;gap:16px;height:61px;padding:0 26px;display:flex;position:sticky;top:0}.topbar h1{letter-spacing:-.01em;margin:0;font-size:16px;font-weight:600}.topbar .spacer{flex:1}.content{width:100%;max-width:1500px;padding:26px}.panel{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-1)}.panel-head{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:15px 18px;display:flex}.panel-head h2{letter-spacing:.03em;text-transform:uppercase;color:var(--fg-muted);margin:0;font-size:13px;font-weight:600}.panel-body{padding:18px}.panel-body.tight{padding:0}.stats{grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;display:grid}.stat{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}.stat-label{letter-spacing:.05em;text-transform:uppercase;color:var(--fg-dim);margin-bottom:7px;font-size:11px}.stat-value{letter-spacing:-.02em;font-size:25px;font-weight:600;line-height:1.1}.stat-value.mono{font-family:var(--mono);font-size:20px}.stat-note{color:var(--fg-dim);margin-top:5px;font-size:12px}.stat-value[data-tone=can]{color:var(--can)}.stat-value[data-tone=data]{color:var(--data)}.stat-value[data-tone=power]{color:var(--power)}.stat-value[data-tone=ign]{color:var(--ign)}.table-wrap{overflow-x:auto}table.grid{border-collapse:collapse;width:100%;font-size:13px}table.grid th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--fg-dim);border-bottom:1px solid var(--line);white-space:nowrap;background:var(--bg-panel);padding:11px 14px;font-size:11px;font-weight:600;position:sticky;top:0}table.grid td{border-bottom:1px solid color-mix(in srgb, var(--line) 60%, transparent);vertical-align:middle;padding:12px 14px}table.grid tbody tr{transition:background .1s}table.grid tbody tr:hover{background:var(--bg-hover)}table.grid tbody tr:last-child td{border-bottom:none}table.grid td.mono,table.grid td .mono{font-family:var(--mono)}.row-link{cursor:pointer}.pill{letter-spacing:.02em;white-space:nowrap;border:1px solid #0000;border-radius:99px;align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.pill[data-tone=neutral]{color:var(--fg-muted);border-color:var(--line-strong);background:#1d212b}.pill[data-tone=can]{background:var(--can-dim);color:#a8c8f7;border-color:#2b4e80}.pill[data-tone=data]{background:var(--data-dim);color:#9fdcb0;border-color:#2a5c38}.pill[data-tone=power]{background:var(--power-dim);color:#f0a7a6;border-color:#6d2f2e}.pill[data-tone=ign]{background:var(--ign-dim);color:#edd48a;border-color:#6a5522}.pill-dot{background:currentColor;border-radius:99px;width:6px;height:6px}.btn{border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg-hover);color:var(--fg);cursor:pointer;justify-content:center;align-items:center;gap:7px;padding:8px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:background .12s,border-color .12s,transform 60ms;display:inline-flex}.btn:hover{background:#242936;border-color:#3a4050}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--can);border-color:var(--can);color:#07111f;font-weight:600}.btn-primary:hover{background:#6199ee;border-color:#6199ee}.btn-ghost{color:var(--fg-muted);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--bg-hover);color:var(--fg)}.btn-sm{padding:5px 10px;font-size:12px}.field{flex-direction:column;gap:6px;display:flex}.field label{letter-spacing:.05em;text-transform:uppercase;color:var(--fg-dim);font-size:11px;font-weight:600}.input,select.input{background:var(--bg-input);border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--fg);width:100%;padding:9px 11px;font-family:inherit;font-size:13.5px;transition:border-color .12s,box-shadow .12s}.input:focus,select.input:focus{border-color:var(--can);outline:none;box-shadow:0 0 0 3px #4f8bea29}.input::placeholder{color:#565d6b}.input.mono{font-family:var(--mono);letter-spacing:.04em}.filters{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:end;gap:12px;display:grid}.login-wrap{background:radial-gradient(1100px 620px at 50% -12%, #16202f 0%, transparent 62%), var(--bg);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;max-width:396px;box-shadow:var(--shadow-3);padding:32px}.login-brand{align-items:center;gap:11px;margin-bottom:4px;display:flex}.login-brand .brand-dot{width:11px;height:11px}.login-brand h1{letter-spacing:-.02em;margin:0;font-size:19px;font-weight:650}.login-sub{color:var(--fg-dim);margin:0 0 26px;font-size:12.5px}.login-card .field+.field{margin-top:15px}.login-card .btn-primary{width:100%;margin-top:22px;padding:10px}.login-foot{border-top:1px solid var(--line);color:var(--fg-dim);margin-top:20px;padding-top:18px;font-size:11.5px;line-height:1.6}.alert{border-radius:var(--radius-sm);border:1px solid var(--power-dim);color:#f0a7a6;background:#e2504f17;margin-top:16px;padding:10px 12px;font-size:12.5px}.alert[data-tone=info]{color:#a8c8f7;background:#4f8bea14;border-color:#2b4e80}.transcript{font-family:var(--mono);font-size:12px}.transcript-row{border-bottom:1px solid color-mix(in srgb, var(--line) 45%, transparent);grid-template-columns:74px 54px 58px 1fr 86px;align-items:baseline;gap:10px;padding:6px 14px;display:grid}.transcript-row:hover{background:var(--bg-hover)}.transcript-row[data-dir=req]{box-shadow:inset 2px 0 0 var(--can)}.transcript-row[data-dir=resp]{box-shadow:inset 2px 0 0 var(--data)}.transcript-row[data-nrc=true]{box-shadow:inset 2px 0 0 var(--power)}.t-time{color:var(--fg-dim)}.t-ecu{color:var(--can)}.t-svc{color:var(--fg-muted)}.t-name{color:var(--fg);font-family:var(--sans);font-size:12.5px}.t-name .t-detail{color:var(--fg-muted)}.t-name .t-nrc{color:var(--power);font-weight:600}.t-pdu{color:var(--fg-dim);text-align:right;text-overflow:ellipsis;overflow:hidden}.live-grid{grid-template-columns:1fr 296px;align-items:start;gap:18px;display:grid}@media (max-width:1080px){.live-grid{grid-template-columns:1fr}}.frame-row{font-family:var(--mono);border-bottom:1px solid color-mix(in srgb, var(--line) 40%, transparent);grid-template-columns:96px 62px 40px 34px 1fr;align-items:baseline;gap:10px;padding:5px 14px;font-size:12px;display:grid}.frame-row .f-id{color:var(--can);font-weight:600}.frame-row .f-t{color:var(--fg-dim)}.frame-row .f-dir[data-tx=true]{color:var(--ign)}.frame-row .f-dir[data-tx=false]{color:var(--data)}.frame-row .f-data{color:var(--fg);letter-spacing:.06em}.frame-row[data-changed=true] .f-data{color:var(--ign)}.idbar{background:var(--can-dim);border-radius:99px;height:4px;overflow:hidden}.idbar>i{background:var(--can);height:100%;display:block}.empty{text-align:center;color:var(--fg-dim);padding:56px 24px}.empty h3{color:var(--fg-muted);margin:0 0 8px;font-size:15px;font-weight:600}.empty p{max-width:430px;margin:0 auto;font-size:13px;line-height:1.65}.kv{grid-template-columns:auto 1fr;gap:9px 18px;font-size:13px;display:grid}.kv dt{color:var(--fg-dim);white-space:nowrap}.kv dd{font-family:var(--mono);overflow-wrap:anywhere;margin:0}.crumb{color:var(--fg-dim);margin-bottom:4px;font-size:12.5px}.crumb a:hover{color:var(--fg)}.section-gap>*+*{margin-top:18px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.muted{color:var(--fg-muted)}.dim{color:var(--fg-dim)}.mono{font-family:var(--mono)}.nowrap{white-space:nowrap}.right{text-align:right}
