:root{--ink:#0b1626;--ink-2:#16243a;--ink-3:#1c2a3e;--ink-line:#2a3a52;--paper:#f5f6f8;--surface:#fff;--proof:#0a7d57;--proof-strong:#075e41;--proof-bright:#2ee6a0;--text:#0b1626;--text-2:#3e4957;--text-muted:#5b6676;--text-on-ink:#c9d4e3;--text-on-ink-muted:#9fb0c6;--line:#e3e6eb;--line-soft:#eef0f3;--focus:#3b6cf6;--danger:#b42318;--danger-bg:#fdecea;--warn:#8a4304;--warn-bg:#fff1df;--info:#1d45c4;--info-bg:#e6eeff;--ok:#0a6b4b;--ok-bg:#e2f6ee;--role-1:#3b6cf6;--role-2:#e8830c;--role-3:#0a9d6e;--role-4:#a23ee8;--role-5:#d92d6a;--role-6:#4a5462;--font-display:"Bricolage Grotesque", system-ui, sans-serif;--font-ui:"Instrument Sans", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:20px;--s-6:24px;--s-8:32px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-xl:20px;--shadow-pop:0 24px 48px -12px #0b162647;--shadow-card:0 1px 2px #0b16260f;--sidebar-w:248px;--topbar-h:68px}*,:before,:after{box-sizing:border-box}html,body{background:var(--paper);color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.5}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;margin:0;line-height:1.15}a{color:var(--proof)}a:hover{color:var(--proof-strong)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.btn{justify-content:center;align-items:center;gap:var(--s-2);min-height:44px;padding:0 var(--s-4);border-radius:var(--r-md);font:600 14px var(--font-ui);cursor:pointer;white-space:nowrap;border:1px solid #0000;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--ink);color:#fff}.btn-primary:hover:not(:disabled){background:var(--ink-3);color:#fff}.btn-secondary{background:var(--surface);color:var(--text);border-color:#c4cad3}.btn-secondary:hover:not(:disabled){border-color:var(--text-muted);color:var(--text)}.btn-ghost{color:var(--text-2);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--line-soft);color:var(--text)}.btn-danger{color:var(--danger);background:0 0}.btn-danger:hover:not(:disabled){background:var(--danger-bg)}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--text-2);font-size:13px;font-weight:600}.input{min-height:44px;padding:0 var(--s-3);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:400 15px var(--font-ui);border:1px solid #c4cad3;width:100%}.input:focus{border-color:var(--focus);outline:none;box-shadow:0 0 0 3px #3b6cf62e}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.pill{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:600;display:inline-flex}.alert{padding:var(--s-3) var(--s-4);border-radius:var(--r-md);font-size:14px}.alert-error{background:var(--danger-bg);color:var(--danger)}.alert-success{background:var(--ok-bg);color:var(--ok)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.mono{font-family:var(--font-mono)}.page{gap:var(--s-6);flex-direction:column;max-width:1200px;display:flex}.page-head{gap:var(--s-4);flex-wrap:wrap;justify-content:space-between;align-items:flex-end;display:flex}.page-head h1{font-size:32px}.page-head p{color:var(--text-muted);margin:6px 0 0}.table-scroll{overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);padding:12px var(--s-4);font-size:12px;font-weight:600}.table td{padding:12px var(--s-4);border-top:1px solid var(--line-soft);vertical-align:middle}.table tr.clickable{cursor:pointer}.table tr.clickable:hover td{background:#fafbfc}.dialog{border-radius:var(--r-lg,14px);border:none;width:min(520px,100vw - 32px);padding:0;box-shadow:0 24px 64px #0b162640}.dialog::backdrop{background:#0b162673}.dialog form{padding:var(--s-6);gap:var(--s-4);flex-direction:column;display:flex}.dialog h2{font-size:20px}.actions{gap:var(--s-3);flex-wrap:wrap;justify-content:flex-end;display:flex}.empty-state{padding:var(--s-8) var(--s-6);text-align:center;color:var(--text-muted)}
