*,*::before,*::after{box-sizing:border-box}
:root{--brand:#1e5aa8;--ink:#1c2833;--muted:#667085;--line:#d9dee7;--bg:#f4f6f9}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;line-height:1.5;color:var(--ink);background:var(--bg)}
h1{font-size:1.5rem;margin:0 0 12px}h2{font-size:1.1rem;margin:0 0 10px}
a{color:var(--brand)}.muted{color:var(--muted)}.small{font-size:.85rem}.mono{font-family:ui-monospace,Consolas,monospace;width:100%}
.container{max-width:960px;margin:0 auto;padding:16px}.narrow{max-width:640px}
.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px;margin:14px 0}
.center-card{max-width:420px;margin:12vh auto;padding:28px;background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.08);text-align:center}
.auth-body{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:16px}
.auth-card{background:#fff;width:100%;max-width:420px;padding:26px;border-radius:14px;box-shadow:0 2px 14px rgba(0,0,0,.08)}
label{display:block;font-weight:600;margin:14px 0 4px}
input,select,textarea{width:100%;padding:11px 12px;font-size:1rem;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:1px}
.btn{display:inline-block;margin-top:18px;padding:12px 20px;font-size:1rem;font-weight:600;color:#fff;background:var(--brand);border:0;border-radius:8px;cursor:pointer;min-height:44px}
.btn:hover{filter:brightness(1.1)}.btn-small{margin:0;padding:6px 12px;min-height:36px;font-size:.9rem}
.btn-ghost{background:transparent;color:var(--brand);border:1px solid var(--brand)}
.alert{padding:12px 14px;border-radius:8px;margin:12px 0}
.alert-error{background:#fdecec;color:#8a1c1c}.alert-ok{background:#e8f6ec;color:#1b5e2e}.alert-info{background:#e8f1fb;color:#164a85}
.plain{list-style:none;padding:0;margin:6px 0}.plain li{margin:4px 0}
.table{width:100%;border-collapse:collapse}.table td{padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top}
.ok{color:#1b7a3a;font-weight:700}.bad{color:#b42318;font-weight:700}.warn{color:#b26a00;font-weight:700}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;background:#fff;border-bottom:1px solid var(--line)}
.inline{display:flex;align-items:center;gap:10px;margin:0}
@media (max-width:480px){.topbar{flex-direction:column;align-items:flex-start}}
