:root{--bg: #0f172a;--surface: #1e293b;--surface-2: #273449;--text: #e2e8f0;--muted: #94a3b8;--border: #334155;--primary: #38bdf8;--primary-contrast: #082f49;--danger: #f87171;--ok: #4ade80;--warn: #facc15;font-family:Segoe UI,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-size:15px;line-height:1.5}a{color:var(--primary);text-decoration:none}.muted{color:var(--muted)}.small{font-size:13px}.center{text-align:center}.mono{font-family:Cascadia Code,Consolas,monospace;word-break:break-all}.link{font-weight:600}.spread{justify-content:space-between;align-items:center}.page-center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.landing{text-align:center}.login-card{padding:40px 48px;max-width:420px}.login-card h1{margin:0 0 4px}.layout{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;justify-content:space-between;align-items:center;padding:14px 28px;background:var(--surface);border-bottom:1px solid var(--border)}.brand-logo{width:34px;height:34px;border-radius:50%}.brand{display:inline-flex;align-items:center;gap:10px}.brand-name{font-weight:700;letter-spacing:.2px}.login-logo{display:block;width:100%;max-width:320px;margin:0 auto 14px}.content{flex:1;padding:28px;max-width:1100px;width:100%;margin:0 auto}.narrow{max-width:640px}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.page-head h2{margin:0}.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px 24px;margin-bottom:16px}.card h3{margin:0 0 14px}.card.danger{border-color:var(--danger)}.row{display:flex;gap:10px;margin-top:12px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:18px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 16px;cursor:pointer;font-size:14px;font-weight:600}.tab:hover{color:var(--text)}.tab.active{color:var(--primary);border-bottom-color:var(--primary)}.key-row-body{min-width:0}input:disabled{opacity:.6;cursor:not-allowed}.btn{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:7px;padding:8px 16px;cursor:pointer;font-size:14px}.btn:hover{border-color:var(--primary)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--primary);color:var(--primary-contrast);border-color:var(--primary);font-weight:600}.btn.small{padding:5px 12px;font-size:13px}.btn.active{border-color:var(--primary);background:var(--primary);color:var(--primary-contrast)}.btn.danger{background:var(--danger);color:#450a0a;border-color:var(--danger)}input,select{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:7px;padding:8px 12px;font-size:14px;width:100%}input:focus,select:focus{outline:none;border-color:var(--primary)}.form label{display:block;margin-bottom:14px}.form label span,.form label{font-weight:600}.form input{margin-top:6px}.filters{display:flex;gap:10px;margin-bottom:18px;align-items:center}.filters input{flex:1}.filters select{width:auto;min-width:180px}.table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}.table th,.table td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--border)}.table th{background:var(--surface-2);font-size:13px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted)}.table tr:last-child td{border-bottom:none}.table tr:hover td{background:#38bdf80d}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700}.badge.active{background:#4ade8026;color:var(--ok)}.badge.cancelled{background:#facc1526;color:var(--warn)}.badge.revoked{background:#f8717126;color:var(--danger)}.error{background:#f871711f;border:1px solid var(--danger);color:var(--danger);padding:10px 14px;border-radius:8px;margin:10px 0}.dl{display:grid;grid-template-columns:160px 1fr;gap:8px 16px;margin:0}.dl dt{color:var(--muted)}.dl dd{margin:0}.key-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid var(--border)}.key-row:last-child{border-bottom:none}.spinner{width:34px;height:34px;margin:0 auto 14px;border:3px solid var(--surface-2);border-top-color:var(--primary);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
