:root{
  --ground:#F7F7F5; --card:#FFFFFF; --ink:#16161A; --ink-2:#44444C; --muted:#76767F;
  --hair:#E4E4E0; --hair-2:#CFCFC9; --accent:#002FA7; --accent-soft:#E8ECF8;
  --ok:#1E7A46; --ok-soft:#E4F3EA; --bad:#B42318; --bad-soft:#FDECEA;
  --f-m:ui-monospace,SFMono-Regular,Menlo,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ground:#0E0E11; --card:#16161B; --ink:#EDEDF0; --ink-2:#C4C4CC; --muted:#8E8E98;
    --hair:#26262D; --hair-2:#393942; --accent:#8AA4FF; --accent-soft:#1A2246;
    --ok:#6BCB93; --ok-soft:#143322; --bad:#FF8A80; --bad-soft:#3A1715;
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --ground:#0E0E11; --card:#16161B; --ink:#EDEDF0; --ink-2:#C4C4CC; --muted:#8E8E98;
  --hair:#26262D; --hair-2:#393942; --accent:#8AA4FF; --accent-soft:#1A2246;
  --ok:#6BCB93; --ok-soft:#143322; --bad:#FF8A80; --bad-soft:#3A1715;
  color-scheme:dark;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--ground);color:var(--ink);
  font:16px/1.65 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif}
a{color:var(--accent)}
.shell{max-width:440px;margin:0 auto;padding:40px 16px 60px}
.shell.wide{max-width:980px}
.brand{font-weight:600;letter-spacing:.02em;margin-bottom:28px;display:flex;align-items:center;gap:8px}
.brand i{width:10px;height:10px;background:var(--accent);display:inline-block}
h1{font-size:26px;line-height:1.3;margin:0 0 6px}
.sub{color:var(--muted);margin:0 0 24px;font-size:15px}
.card{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:22px 20px;margin-bottom:16px}
.card h2{font-size:15px;margin:0 0 12px}
label{display:block;font-size:14px;color:var(--ink-2);margin:0 0 6px}
.field{margin-bottom:16px}
.hint{font-size:13px;color:var(--muted);margin-top:4px}
input,select,textarea{width:100%;font:inherit;font-size:16px;padding:11px 12px;border:1px solid var(--hair-2);
  border-radius:8px;background:var(--card);color:var(--ink)}
input:focus,select:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}
.pw{position:relative}
.pw input{padding-right:64px}
.pw button{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:none;
  color:var(--muted);font-size:14px;padding:6px 8px;cursor:pointer}
.check{display:flex;gap:8px;align-items:flex-start;font-size:14px;color:var(--ink-2)}
.check input{width:18px;height:18px;margin:3px 0 0;flex:none}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;font:inherit;font-size:16px;
  padding:11px 18px;border-radius:8px;border:1px solid var(--ink);background:var(--ink);color:var(--ground);
  cursor:pointer;text-decoration:none;white-space:nowrap}
.btn.block{width:100%}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--hair-2)}
.btn.danger{background:transparent;color:var(--bad);border-color:var(--bad)}
.btn.sm{font-size:14px;padding:7px 12px}
.btn:disabled{opacity:.5;cursor:default}
.msg{padding:10px 14px;border-radius:8px;margin-bottom:16px;font-size:15px;display:none}
.msg.show{display:block}
.msg.ok{background:var(--ok-soft);color:var(--ok)}
.msg.bad{background:var(--bad-soft);color:var(--bad)}
.foot{margin-top:18px;font-size:14px;color:var(--muted);text-align:center}
.foot a{margin:0 4px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.muted{color:var(--muted)}
.mono{font-family:var(--f-m)}
.pill{display:inline-block;font-size:13px;padding:2px 9px;border-radius:99px;background:var(--hair);color:var(--ink-2);white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)}
.pill.bad{background:var(--bad-soft);color:var(--bad)}
.list{list-style:none;margin:0;padding:0}
.list li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--hair)}
.list li:first-child{border-top:0;padding-top:0}

/* 管理后台 */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:14px 16px}
.stat b{display:block;font-size:24px;font-family:var(--f-m);font-weight:600}
.stat span{font-size:13px;color:var(--muted)}
.admin-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:16px;align-items:start}
@media (max-width:820px){.admin-grid{grid-template-columns:minmax(0,1fr)}}
.users{list-style:none;margin:0;padding:0}
.users li{padding:12px 4px;border-top:1px solid var(--hair);cursor:pointer}
.users li:first-child{border-top:0}
.users li.on{background:var(--accent-soft);margin:0 -8px;padding:12px 12px;border-radius:8px}
.users .top{display:flex;justify-content:space-between;gap:8px}
.users .ms{margin-top:4px;display:flex;gap:6px;flex-wrap:wrap}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:480px){.grid2{grid-template-columns:1fr}}
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{text-align:left;padding:8px 6px;border-top:1px solid var(--hair);vertical-align:top}
th{color:var(--muted);font-weight:500;border-top:0}
.tw{overflow-x:auto}
.copybox{display:flex;gap:8px;margin-top:10px}
.copybox input{font-family:var(--f-m);font-size:13px}
.qr{display:block;width:180px;max-width:100%;border-radius:8px;border:1px solid var(--hair);margin-top:12px}
details.qrbox{margin-top:8px}
details.qrbox summary{cursor:pointer;color:var(--accent)}
details.qrbox .qr{margin-left:auto;margin-right:auto}
.prose h2{font-size:17px;margin:24px 0 8px}
.prose p,.prose li{color:var(--ink-2)}
