:root{
  --bg:#f4f6f8; --card:#fff; --ink:#1f2733; --ink2:#5b6675; --ink3:#9aa4b2;
  --border:#e2e7ec; --primary:#2e9e5b; --primary-d:#1f7d44; --danger:#e0524d; --blue:#1769ff;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--ink)}
a{text-decoration:none;color:inherit}
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh}
.login-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:32px 28px;width:320px;box-shadow:0 8px 30px rgba(0,0,0,.06)}
.login-logo{font-size:20px;font-weight:700}
.login-sub{color:var(--ink3);font-size:12px;margin-bottom:18px}
.login-card label{display:block;font-size:13px;color:var(--ink2);margin:12px 0 6px}
.login-card input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:9px;font-size:14px}
.login-hint{margin-top:14px;color:var(--ink3);font-size:12px;text-align:center}
.alert{background:#fdecea;color:var(--danger);padding:9px 12px;border-radius:9px;font-size:13px;margin-bottom:8px}
.topbar{display:flex;align-items:center;justify-content:space-between;background:var(--card);border-bottom:1px solid var(--border);padding:0 20px;height:56px}
.brand{font-weight:700;font-size:16px}
.top-right{display:flex;align-items:center;gap:12px}
.who{color:var(--ink2);font-size:13px}
.container{max-width:1100px;margin:24px auto;padding:0 20px}
.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}
.page-head h1{font-size:22px;margin:0}
.btn{padding:9px 16px;border-radius:9px;border:1px solid transparent;font-size:14px;cursor:pointer;display:inline-block}
.btn.primary{background:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-d)}
.btn.ghost{background:#fff;border-color:var(--border);color:var(--ink2)}
.btn.ghost:hover{border-color:var(--ink3)}
.empty{background:var(--card);border:1px dashed var(--border);border-radius:12px;padding:48px;text-align:center;color:var(--ink3)}
.tbl{width:100%;background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;border-collapse:collapse}
.tbl th,.tbl td{padding:12px 14px;text-align:left;font-size:14px;border-bottom:1px solid var(--border)}
.tbl th{background:#fafbfc;color:var(--ink2);font-weight:600}
.tbl tr:last-child td{border-bottom:none}
.muted{color:var(--ink3)}
.ops{display:flex;gap:10px;align-items:center}
.link{color:var(--blue);font-size:13px;cursor:pointer;background:none;border:none;padding:0}
.link.danger{color:var(--danger)}
