:root{--bg:#0b0b0f;--bg-elev:#14141b;--bg-elev-2:#1c1c26;--border:#2a2a36;--border-soft:#20202a;--text:#f4f4f7;--text-dim:#a3a3b2;--text-faint:#6e6e80;--accent:#8b5cf6;--accent-soft:rgba(139,92,246,.15);--accent-hover:#7c4ddb;--green:#34d399;--red:#f87171;--amber:#fbbf24;--radius:14px;--radius-sm:9px;--maxw:1080px}*{box-sizing:border-box}body,html{padding:0;margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;-webkit-font-smoothing:antialiased;line-height:1.55}a{color:inherit;text-decoration:none}h1,h2,h3,h4{line-height:1.2;margin:0;font-weight:650;letter-spacing:-.02em}p{margin:0}code,pre{font-family:SF Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:var(--radius-sm);border:1px solid transparent;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease,opacity .15s ease;white-space:nowrap;background:var(--bg-elev-2);color:var(--text)}.btn:hover{background:var(--border)}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-danger{background:transparent;border-color:var(--border);color:var(--red)}.btn-danger:hover{background:hsla(0,91%,71%,.12);border-color:hsla(0,91%,71%,.4)}.btn-ghost{background:transparent;border-color:var(--border)}.btn-ghost:hover{background:var(--bg-elev-2)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-sm{padding:6px 12px;font-size:13px}.card{background:var(--bg-elev);border:1px solid var(--border-soft);border-radius:var(--radius);padding:22px}.muted{color:var(--text-dim)}.faint{color:var(--text-faint)}.input{width:100%;padding:11px 13px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:14px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.label{display:block;font-size:13px;font-weight:600;margin-bottom:7px;color:var(--text-dim)}.field{margin-bottom:16px}.alert{padding:11px 14px;border-radius:var(--radius-sm);font-size:14px;margin-bottom:14px;border:1px solid transparent}.alert-error{background:hsla(0,91%,71%,.1);border-color:hsla(0,91%,71%,.35);color:#fca5a5}.alert-success{background:rgba(52,211,153,.1);border-color:rgba(52,211,153,.35);color:#6ee7b7}.alert-info{background:var(--accent-soft);border-color:rgba(139,92,246,.35);color:#c4b5fd}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{width:100%;max-width:400px}.auth-card .brand{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:22px}.progress{height:10px;background:var(--bg-elev-2);border-radius:999px;overflow:hidden}.progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),#a78bfa);border-radius:999px;transition:width .4s ease}.table{width:100%;border-collapse:collapse;font-size:14px}.table th{text-align:left;font-weight:600;color:var(--text-dim);font-size:12px;text-transform:uppercase;letter-spacing:.04em;padding:0 14px 12px}.table td,.table th{border-bottom:1px solid var(--border-soft)}.table td{padding:14px;vertical-align:middle}.table tr:last-child td{border-bottom:none}.table-wrap{overflow-x:auto}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600}.badge-active{background:rgba(52,211,153,.14);color:var(--green)}.badge-revoked{background:hsla(240,8%,47%,.18);color:var(--text-faint)}.mono{font-family:SF Mono,ui-monospace,monospace;font-size:13px}.logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--accent),#6d28d9);display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:16px;color:#fff;flex-shrink:0}.brand-name{font-weight:700;font-size:18px;letter-spacing:-.02em}.loading{justify-content:center;min-height:50vh;color:var(--text-dim)}.loading,.row{display:flex;align-items:center}.between{justify-content:space-between}.gap-sm{gap:10px}.gap{gap:16px}.wrap{flex-wrap:wrap}