:root{--bg:#fff;--bg2:#f5f5f0;--bg3:#e8e8e2;--text:#0a0a0a;--muted:#888;--border:#0a0a0a;--ok:#062;--err:#c00;--warn:#b85c00;--info:#003b9a;--shadow-sm:2px 2px 0 #0a0a0a;--shadow-md:3px 3px 0 #0a0a0a;--F:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:var(--F);font-size:12px;line-height:1.5;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}.app-shell{flex-direction:column;height:100vh}.app-main,.app-shell{display:flex;overflow:hidden}.app-main{flex:1 1}.app-content{flex:1 1;overflow-y:auto;padding:24px;background-color:var(--bg);background-image:radial-gradient(circle,#c4c4bc 1px,transparent 0);background-size:20px 20px}.topbar{height:48px;border-bottom:1px solid var(--border);background:var(--bg);display:flex;align-items:center;padding:0 16px;gap:10px;flex-shrink:0;z-index:10}.topbar-divider{color:var(--bg3);font-size:14px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:14px}.app-sidebar{width:220px;flex-shrink:0;border-right:1px solid var(--border);background:var(--bg);display:flex;flex-direction:column;overflow-y:auto}.nav-section{padding:12px 0;border-bottom:1px solid var(--bg3)}.nav-section:last-child{border-bottom:none}.nav-label{font-size:8px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);padding:4px 16px 8px}.nav-item{display:block;padding:8px 16px;font-size:11px;color:var(--text);text-decoration:none;transition:background .1s;letter-spacing:.03em;cursor:pointer}.nav-item:hover{background:var(--bg2)}.nav-item.active{background:var(--text);color:var(--bg)}.nav-item.indent{padding-left:28px;font-size:10px;color:var(--muted)}.nav-item.indent.active{color:var(--bg)}.card{background:var(--bg);border:1px solid var(--border);box-shadow:var(--shadow-sm);padding:16px}.card-hd{font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--bg3);display:flex;justify-content:space-between;align-items:center}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:12px;gap:12px;margin-bottom:20px}.kpi-num{font-size:32px;font-weight:700;line-height:1;letter-spacing:-.02em}.kpi-sub{font-size:9px;color:var(--muted);margin-top:4px}.kpi-label{letter-spacing:.12em;color:var(--muted);margin-bottom:8px}.badge,.kpi-label{font-size:8px;text-transform:uppercase}.badge{display:inline-block;letter-spacing:.08em;border:1px solid;padding:1px 6px}.badge.ok{color:var(--ok)}.badge.err{color:var(--err)}.badge.warn{color:var(--warn)}.badge.info{color:var(--info)}.badge.muted{color:var(--muted)}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.dot.ok{background:var(--ok)}.dot.err{background:var(--err)}.dot.warn{background:var(--warn)}.dot.info{background:var(--info)}.dot.muted{background:var(--muted)}.meter-track{height:8px;background:var(--bg3);border:1px solid #c4c4bc;overflow:hidden}.meter-fill{height:100%;background:var(--text);transition:width .6s cubic-bezier(.34,1.56,.64,1)}.meter-fill.ok{background:var(--ok)}.meter-fill.danger{background:var(--err)}.meter-fill.warn{background:var(--warn)}.data-table{width:100%;border-collapse:collapse;font-size:11px}.data-table th{text-align:left;padding:6px 10px;font-size:8px;letter-spacing:.1em;color:var(--muted);font-weight:400;text-transform:uppercase}.data-table td,.data-table th{border-bottom:1px solid var(--bg3)}.data-table td{padding:10px;vertical-align:middle}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--bg2)}.field-label{display:block;font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}.field-input{width:100%;padding:7px 10px;border:1px solid var(--border);background:var(--bg);font-family:var(--F);font-size:11px;color:var(--text);outline:none}.field-input:focus{box-shadow:0 0 0 2px hsla(0,0%,4%,.12)}.field-input::placeholder{color:var(--muted)}.btn{font-family:var(--F);font-size:10px;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--border);padding:8px 20px;cursor:pointer;background:var(--bg);color:var(--text);transition:background .12s}.btn:hover{background:var(--bg2)}.btn.primary{background:var(--text);color:var(--bg);box-shadow:var(--shadow-sm)}.btn.primary:hover{background:#222}.btn.danger{color:var(--err);border-color:var(--err)}.btn.danger:hover{background:#fff5f5}.btn:disabled{opacity:.4;cursor:not-allowed}.trace-row{display:grid;grid-template-columns:90px 180px 52px 1fr;grid-gap:8px;gap:8px;padding:4px 0;font-size:9px;border-bottom:1px solid var(--bg3);align-items:start}.trace-row:last-child{border-bottom:none}.trace-ts{color:var(--muted);font-size:8.5px}.trace-check{letter-spacing:.04em}.trace-result-PASS{color:var(--ok);font-weight:700}.trace-result-FAIL{color:var(--err);font-weight:700}.trace-result-WARN{color:var(--warn);font-weight:700}.trace-result-SKIP{color:var(--muted)}.trace-detail{color:var(--text);line-height:1.4}.trace-context{margin-top:3px;padding:4px 6px;background:var(--bg2);font-size:8px;color:var(--muted);border-left:2px solid var(--bg3);white-space:pre-wrap;word-break:break-all}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes slideIn{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes cbPulse{0%,to{opacity:1}50%{opacity:.5}}.blink{animation:blink 1s step-end infinite}.slide-in{animation:slideIn .22s ease}.fade-in{animation:fadeIn .3s ease}.cb-pulse{animation:cbPulse 1.4s ease-in-out infinite}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:var(--bg2)}::-webkit-scrollbar-thumb{background:var(--bg3)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono{font-family:var(--F)}.page-title{font-size:20px;font-weight:700;letter-spacing:.02em;margin-bottom:20px}.page-label{font-size:9px;color:var(--muted);letter-spacing:.15em;text-transform:uppercase;margin-bottom:4px}.section-gap{margin-bottom:16px}