:root{--bg:#0f1115;--card:#171a21;--ink:#e6e9ef;--muted:#9aa4b2;--line:#262b36;--accent:#19b562;--warn:#e0a700;--danger:#e5484d;--blue:#4c8dff}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}.shell{max-width:1040px;margin:0 auto;padding:0 20px 64px}.topbar{display:flex;align-items:center;gap:20px;padding:18px 0;border-bottom:1px solid var(--line);margin-bottom:28px}.brand{font-weight:700;font-size:18px}.nav{display:flex;gap:16px}.nav a{color:#cdd6e4}h1{font-size:24px;margin:8px 0 4px}h2{font-size:18px;margin:28px 0 10px}.sub{color:var(--muted);margin:0 0 20px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:14px;gap:14px}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px}.card .label{color:var(--muted);font-size:13px;text-transform:uppercase;letter-spacing:.4px}.card .value{font-size:22px;font-weight:700;margin-top:4px}.card .value.net{color:var(--accent)}table{border-collapse:collapse;width:100%;font-size:14px}td,th{border-bottom:1px solid var(--line);padding:10px 12px;text-align:left;vertical-align:middle}th{color:#cdd6e4;font-size:13px;text-transform:uppercase;letter-spacing:.4px}tbody tr:hover{background:#1c212b}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12.5px}.right{text-align:right}.badge{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.3px;padding:2px 9px;border-radius:999px}.badge.ok{background:rgba(25,181,98,.15);color:var(--accent);border:1px solid rgba(25,181,98,.4)}.badge.danger{background:rgba(229,72,77,.15);color:var(--danger);border:1px solid rgba(229,72,77,.4)}.badge.warn{background:rgba(224,167,0,.15);color:var(--warn);border:1px solid rgba(224,167,0,.4)}.badge.muted{background:#222733;color:var(--muted);border:1px solid var(--line)}.notice{border-left:3px solid var(--danger);background:rgba(229,72,77,.07)}.notice,.tip-box{padding:12px 16px;border-radius:0 8px 8px 0;margin:16px 0}.tip-box{border-left:3px solid var(--accent);background:rgba(25,181,98,.08)}.gate-banner{background:rgba(224,167,0,.12);border:1px solid rgba(224,167,0,.4);color:var(--warn);border-radius:10px;padding:12px 16px;margin:0 0 20px;font-size:14px}.gate-banner a{color:var(--warn);font-weight:700}.pager{display:flex;gap:12px;margin-top:16px}.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:8px;padding:7px 14px}.kv{display:grid;grid-template-columns:180px 1fr;grid-gap:6px 16px;gap:6px 16px;margin:12px 0}.kv dt{color:var(--muted)}.kv dd{margin:0}.logout{margin-left:auto}.btn.primary{background:var(--accent);border-color:var(--accent);color:#07120b;font-weight:700}.login{max-width:380px;margin:48px auto 0}.form{display:flex;flex-direction:column;gap:6px;margin-top:18px}.form label{color:var(--muted);font-size:13px;margin-top:8px}.form input{background:var(--card);border:1px solid var(--line);border-radius:8px;color:var(--ink);padding:10px 12px;font-size:15px}.form input:focus{outline:none;border-color:var(--blue)}.form .btn{margin-top:18px;cursor:pointer}.form select{background:var(--card);border:1px solid var(--line);border-radius:8px;color:var(--ink);padding:10px 12px;font-size:15px}.head-row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.head-row h1{margin:8px 0}.linkbox{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin:10px 0}.linkbox a{flex:1 1;word-break:break-all}.linkbox .btn{cursor:pointer}