
* { box-sizing: border-box; }
body { margin:0; font-family: -apple-system, "Segoe UI", "Microsoft YaHei", sans-serif;
       background:#f5f6f8; color:#1f2328; font-size:14px; }
a { color:#0969da; text-decoration:none; }
a:hover { text-decoration:underline; }
header { background:#24292f; color:#fff; padding:0 20px; display:flex; align-items:center; height:52px; }
header .brand { font-weight:600; margin-right:28px; }
header nav a { color:#d0d7de; margin-right:18px; }
header nav a.on { color:#fff; font-weight:600; }
header .right { margin-left:auto; color:#8b949e; font-size:13px; }
main { max-width:1200px; margin:22px auto; padding:0 20px; }
h1 { font-size:20px; margin:0 0 16px; }
h2 { font-size:16px; margin:24px 0 10px; }
.card { background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:16px; margin-bottom:18px; }
table { width:100%; border-collapse:collapse; background:#fff; }
th, td { text-align:left; padding:8px 10px; border-bottom:1px solid #eaeef2; }
th { background:#f6f8fa; font-weight:600; font-size:13px; }
tr:hover td { background:#fafbfc; }
.mono { font-family: ui-monospace, Consolas, monospace; }
.muted { color:#656d76; }
.tag { display:inline-block; padding:1px 8px; border-radius:10px; font-size:12px; }
.tag.ok { background:#dafbe1; color:#1a7f37; }
.tag.warn { background:#fff8c5; color:#7d4e00; }
.tag.err { background:#ffebe9; color:#cf222e; }
.tag.off { background:#eaeef2; color:#656d76; }
.grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; }
.stat { background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:14px; }
.stat .n { font-size:24px; font-weight:600; }
.stat .l { color:#656d76; font-size:13px; margin-top:4px; }
input, select, textarea { padding:6px 9px; border:1px solid #d0d7de; border-radius:6px;
       font-size:14px; font-family:inherit; background:#fff; }
input[type=text], input[type=password], input[type=number] { width:100%; }
label { display:block; font-size:13px; color:#656d76; margin:10px 0 4px; }
button { padding:7px 14px; border:1px solid #1f883d; background:#1f883d; color:#fff;
       border-radius:6px; cursor:pointer; font-size:14px; font-family:inherit; }
button:hover { background:#1a7f37; }
button.danger { background:#cf222e; border-color:#cf222e; }
button.danger:hover { background:#a40e26; }
button.ghost { background:#fff; color:#24292f; border-color:#d0d7de; }
button.ghost:hover { background:#f3f4f6; }
button.tiny { padding:1px 7px; font-size:12px; }
.pw { letter-spacing:1px; }
.pw[data-shown="1"] { letter-spacing:normal; }
form.inline { display:inline; }
.flash { background:#dafbe1; border:1px solid #aceebb; color:#1a7f37;
       padding:10px 14px; border-radius:6px; margin-bottom:16px; }
.error { background:#ffebe9; border:1px solid #ffcecb; color:#cf222e;
       padding:10px 14px; border-radius:6px; margin-bottom:16px; }
.login { max-width:340px; margin:90px auto; }
.login h1 { text-align:center; }
.filters { display:flex; gap:10px; align-items:flex-end; flex-wrap:wrap; margin-bottom:14px; }
.filters > div { flex:0 0 auto; }
.filters .grow { flex:1 1 200px; }
.pager { margin-top:14px; display:flex; gap:10px; align-items:center; }
dl { display:grid; grid-template-columns:150px 1fr; gap:6px 14px; margin:0; }
dt { color:#656d76; }
dd { margin:0; }
