:root{
  --bg:#f5f6f8; --card:#fff; --line:#e4e7ec; --ink:#1b1f24; --muted:#6b7280;
  --accent:#2f6bff; --green:#12855b; --amber:#b7791f; --red:#c0392b;
  --greenbg:#eef8f3; --amberbg:#fff8ec; --redbg:#fdf1f0; --bluebg:#eff4ff;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.6;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
.wrap{max-width:1180px;margin:0 auto;padding:0 20px}
nav{background:rgba(255,255,255,.88);backdrop-filter:saturate(1.5) blur(10px);
  -webkit-backdrop-filter:saturate(1.5) blur(10px);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;
  box-shadow:0 4px 18px -14px rgba(16,24,40,.25)}
nav .inner{display:flex;align-items:center;gap:14px;height:66px}
.brand{font-weight:750;font-size:15px;display:flex;align-items:center;gap:11px;letter-spacing:.2px;flex:none}
.brand .logo{display:block;flex:none}
.brand .sitename{font-size:24px;font-weight:800;color:var(--accent);letter-spacing:-.3px;
  line-height:1.2;white-space:nowrap}
.brand .env{font-size:10.5px;font-weight:700;color:var(--accent);background:var(--bluebg);
  border-radius:6px;padding:1px 7px;letter-spacing:.3px}
/* 第二行：大标签 */
.tabrow{padding-bottom:10px}
.tabs{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;
  min-width:0;padding:2px 0}
.tabs::-webkit-scrollbar{display:none}
nav a.link{color:#5b6a85;font-size:15.5px;font-weight:650;padding:9px 22px;border-radius:11px;
  white-space:nowrap;background:#fff;border:1px solid var(--line);
  transition:color .15s,background .15s,border-color .15s,box-shadow .15s,transform .15s}
nav a.link:hover{color:var(--ink);border-color:#c6d3f5;transform:translateY(-1px)}
nav a.link.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700;
  box-shadow:0 8px 18px -10px rgba(47,107,255,.75)}
nav .right{margin-left:auto;display:flex;align-items:center;gap:10px;flex:0 0 auto}
.srv{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--green);
  background:var(--greenbg);padding:4px 11px;border-radius:20px;white-space:nowrap}
.srv .sdot{width:7px;height:7px;border-radius:50%;background:var(--green);flex:none;
  box-shadow:0 0 0 3px rgba(18,133,91,.14);animation:pulse 2.4s ease-in-out infinite}
.srv.bad{color:var(--red);background:var(--redbg)}
.srv.bad .sdot{background:var(--red);box-shadow:0 0 0 3px rgba(192,57,43,.14);animation:none}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}
.uchip{width:28px;height:28px;border-radius:9px;background:var(--bluebg);color:var(--accent);
  display:inline-flex;align-items:center;justify-content:center;font-weight:750;font-size:13px;flex:none}
.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 12px;font-size:13px;
  cursor:pointer;color:var(--ink);transition:background .15s,border-color .15s}
.btn:hover{background:#f6f7f9;border-color:#d5d9e0}
.btn.ghost{color:var(--muted);font-size:12.5px;padding:5px 11px}
.btn.ghost:hover{color:var(--red);border-color:#f0c9c4;background:var(--redbg)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{background:#2559e0;border-color:#2559e0}
@media(max-width:760px){
  .srv{display:none}
  .uchip{display:none}
  .wrap{padding:0 14px}
  nav .inner{gap:8px;height:56px}
  .brand{gap:8px}
  .brand .logo{width:20px;height:20px}
  .brand .env{display:none}
  .brand .sitename{font-size:15px;letter-spacing:0;white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis;min-width:0}
  .brand{min-width:0;flex:1 1 auto}
  nav a.link{font-size:13.5px;padding:7px 14px;border-radius:9px}
  .tabs{gap:6px}
  .btn.ghost{padding:5px 9px;font-size:12px}
}
@media(max-width:430px){
  .brand .sitename{font-size:13.5px}
  .brand .logo{width:18px;height:18px}
  nav a.link{font-size:13px;padding:6px 12px}
}
main{padding:22px 0 60px}
h2{font-size:16px;margin:0 0 12px;font-weight:650}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,1fr)}
.g2{grid-template-columns:1fr 1fr}
.g32{grid-template-columns:1.6fr 1fr}
@media(max-width:900px){.g4,.g2,.g32{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.g4,.g2,.g32{grid-template-columns:1fr}}
.kpi .l{font-size:12px;color:var(--muted)}
.kpi .v{font-size:27px;font-weight:700;letter-spacing:-.5px;line-height:1.25}
.kpi .s{font-size:12px;color:var(--muted)}
.hero{display:flex;align-items:center;gap:16px;padding:18px 20px}
.dot{width:14px;height:14px;border-radius:50%;flex:none;box-shadow:0 0 0 5px rgba(18,133,91,.12)}
.dot.ok{background:var(--green)} .dot.bad{background:var(--red);box-shadow:0 0 0 5px rgba(192,57,43,.12)}
.dot.warn{background:var(--amber);box-shadow:0 0 0 5px rgba(183,121,31,.12)}
.hero h1{font-size:19px;margin:0}
.hero .sub{color:var(--muted);font-size:12.5px}
.tag{display:inline-block;font-size:11.5px;padding:1px 8px;border-radius:20px;font-weight:600}
.t-green{background:var(--greenbg);color:var(--green)}
.t-amber{background:var(--amberbg);color:var(--amber)}
.t-red{background:var(--redbg);color:var(--red)}
.t-blue{background:var(--bluebg);color:var(--accent)}
.t-grey{background:#f1f2f4;color:#7b8189}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
th{color:var(--muted);font-size:12px;font-weight:600;background:#fafbfc}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fafbfc}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px}
.muted{color:var(--muted)}
.avatar{width:26px;height:26px;border-radius:7px;background:var(--bluebg);color:var(--accent);
  display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;margin-right:8px}
.ev{display:flex;gap:10px;padding:7px 0;border-bottom:1px dashed #eef0f3;font-size:13px}
.ev:last-child{border:none}
.ev .t{color:var(--muted);font-size:12px;width:78px;flex:none;font-variant-numeric:tabular-nums}
.bar{height:8px;border-radius:4px;background:#eef0f3;overflow:hidden}
.bar>i{display:block;height:100%;border-radius:4px;background:var(--accent)}
.chart{width:100%;height:auto;display:block}
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:
  radial-gradient(1200px 600px at 20% 0%,#eef3ff 0%,#f5f6f8 45%)}
.login form{width:340px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:26px}
.login h1{font-size:18px;margin:0 0 4px}
.login p{color:var(--muted);font-size:12.5px;margin:0 0 18px}
input[type=text],input[type=password],select{width:100%;border:1px solid var(--line);border-radius:8px;
  padding:9px 11px;font-size:14px;margin-bottom:12px;outline:none;background:#fcfcfd}
input:focus,select:focus{border-color:var(--accent);background:#fff}
.err{background:var(--redbg);color:var(--red);border-radius:8px;padding:8px 11px;font-size:12.5px;margin-bottom:12px}
.filters{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.filters select{width:auto;margin:0;padding:6px 10px;font-size:13px}
.pager{display:flex;gap:8px;justify-content:flex-end;margin-top:12px;font-size:13px}
.heat{display:flex;gap:3px;align-items:flex-end;height:60px}
.heat div{flex:1;height:100%;display:flex;align-items:flex-end;background:var(--bluebg);border-radius:3px 3px 0 0;min-height:2px}
.heat div>i{display:block;width:100%;background:var(--accent);border-radius:3px 3px 0 0;min-height:2px}
footer{color:var(--muted);font-size:12px;text-align:center;padding:20px 0 30px}

/* ---------------------------------------------------------------- 终端页 */
/* macOS 终端外观：圆角窗口 + 红黄绿三色圆点标题栏 + 柔和阴影 */
.term{background:#1d2229;border-radius:14px;overflow:hidden;
  box-shadow:0 10px 30px -18px rgba(16,24,40,.55);border:1px solid #14181e}
.term-head{display:flex;align-items:center;gap:12px;padding:10px 14px;background:#272d36;
  border-bottom:1px solid #14181e}
.ttitle{color:#9aa4b2;font-size:12px;flex:1;min-width:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tlive{display:flex;align-items:center;gap:6px;color:#5a6472;font-size:11px;font-weight:700;
  letter-spacing:1px;flex:none;transition:color .3s}
.tlive .tdot{width:7px;height:7px;border-radius:50%;background:#4a5460;flex:none}
.tlive.on{color:#3ddc84}
.tlive.on .tdot{background:#3ddc84;box-shadow:0 0 0 3px rgba(61,220,132,.18);
  animation:pulse 2.4s ease-in-out infinite}
.tdots{display:flex;gap:6px;flex:none}
.tdots i{width:11px;height:11px;border-radius:50%}
.tdots i:nth-child(1){background:#ff5f57}
.tdots i:nth-child(2){background:#febc2e}
.tdots i:nth-child(3){background:#28c840}
/* ---- 终端文字：普通平滑系统字体 ---- */
.term-body{height:52vh;min-height:320px;overflow:auto;padding:14px 16px;
  font-family:"Microsoft YaHei UI","Microsoft YaHei","PingFang SC",
    -apple-system,"Segoe UI",sans-serif;
  font-size:13.5px;line-height:1.72;letter-spacing:.1px;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
  -webkit-font-smoothing:antialiased;
  scroll-behavior:smooth;color:#c8d1dc;background:#1d2229}
.term-body::-webkit-scrollbar{width:9px}
.term-body::-webkit-scrollbar-thumb{background:#3a434f;border-radius:5px}
.term-body::-webkit-scrollbar-track{background:transparent}
.term-body.nowrap .tl{white-space:pre}
.tl{white-space:pre-wrap;word-break:break-all;border-radius:5px;padding:0 6px;margin:0 -6px}
.tl:hover{background:rgba(255,255,255,.045)}
.tl .tt{color:#7d8894;margin-right:10px;user-select:all;display:inline-block;
  width:70px;font-variant-numeric:tabular-nums}
.tl .tsrc{color:#8a97a8;background:rgba(255,255,255,.05);border-radius:6px;
  padding:0 7px;margin-right:10px;font-size:11.5px;display:inline-block;
  min-width:164px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  vertical-align:1px}
.tl.plain{color:#9aa4b2}
.tl.p .tm{color:#8ec2ff}      /* 进出服 */
.tl.w .tm{color:#f0c674}      /* 警告 */
.tl.e .tm{color:#ff8a80;font-weight:600}   /* 错误 */
.tl.a .tm{color:#c3a6ff}      /* 白名单/封禁/认证 */
.tl.s .tm{color:#5ee6a8}      /* 存档/启动完成 */
.tloading{color:#5a6472;padding:8px 0}

.tnote{color:#6f7b8a;font-size:12px;padding:2px 0 10px;border-bottom:1px dashed rgba(255,255,255,.08);
  margin-bottom:8px}
.tl.zh{margin:2px 0 6px}
.tl.zh .tm{color:#ffd98a;background:rgba(255,217,138,.08);border-left:3px solid #ffd98a;
  border-radius:4px;padding:4px 10px;display:inline-block;line-height:1.7}
.sprompt{color:#3ddc84;font-weight:700;margin-right:8px}
.trunning{color:#7d8894}
.trc{color:#5a6472;font-size:11.5px}
.term-body.sys{height:auto;min-height:120px;max-height:56vh}
/* 体检大按钮 */
.quiz-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:900px){.quiz-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.quiz-grid{grid-template-columns:1fr 1fr}}
.quiz{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 15px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;min-height:58px;text-align:center;
  text-align:left;display:flex;flex-direction:column;gap:3px;transition:all .18s;color:var(--ink)}
.quiz i{display:none}
.quiz b{font-size:14.5px;font-weight:650}
.quiz span{font-size:12px;color:var(--muted)}
.quiz:hover{border-color:var(--accent);transform:translateY(-2px);
  box-shadow:0 8px 20px -12px rgba(47,107,255,.45)}
.quiz:active{transform:translateY(0)}
.quiz.done{border-color:var(--green);background:var(--greenbg)}
.quiz.cur{border-color:var(--accent);background:rgba(47,107,255,.07);
  box-shadow:0 8px 20px -16px rgba(47,107,255,.55)}
.quiz.cur b{color:var(--accent)}
.quiz.cur b::after{content:' · 当前';color:var(--accent);font-weight:650}
/* 好玩的页 */
.fun-title{font-size:14px;font-weight:700;margin:20px 0 10px;color:var(--ink);
  padding-left:10px;border-left:3px solid var(--accent);line-height:1.2}
.fun-input{flex:1 1 320px;min-width:0;padding:10px 13px;border:1px solid var(--line);border-radius:10px;
  font-size:14px;font-family:inherit;color:var(--ink);background:#fff;outline:none}
.fun-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(47,107,255,.12)}
/* 随机送福利 */
.lucky{background:linear-gradient(135deg,#eef4ff 0%,#f6efff 100%);border:1px solid #dfe7fb;
  border-radius:18px;padding:20px 20px 16px;margin:14px 0 4px}
.lucky-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.lucky-title{font-size:19px;font-weight:750;color:#1b2a4a;letter-spacing:.5px}
.lucky-sub{font-size:12.5px;color:#5b6a85;margin-top:4px}
.lucky-sub b{color:#2f6bff}
.lucky-btn{padding:10px 20px;font-size:14px;font-weight:650;border-radius:11px;flex:none}
.lucky-btn:disabled{opacity:.55;cursor:default}
.lucky-stage{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:16px;min-height:52px;
  background:rgba(255,255,255,.72);border-radius:12px;padding:12px 14px}
.lucky-idle{font-size:13px;color:#6a7893}
.lucky-stage:empty{display:none;padding:0;border:0;background:none}
.luck-item{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:9px;
  font-size:13.5px;font-weight:600;background:#fff;border:1px solid #e3e9f3}
.luck-item b{font-weight:700}
.luck-item i{font-style:normal;font-size:10.5px;font-weight:600;opacity:.75;letter-spacing:.5px}
.luck-item.small{font-size:12px;padding:4px 9px}
.luck-item.r-common{color:#5a6472;border-color:#e2e7ef;background:#f7f9fc}
.luck-item.r-rare{color:#1a6ee0;border-color:#c9ddff;background:#eef5ff}
.luck-item.r-epic{color:#7b3fd4;border-color:#e0d0fb;background:#f6efff}
.luck-item.r-legend{color:#a8720a;border-color:#f6e2ad;background:#fff9e8;
  box-shadow:0 0 0 1px rgba(246,226,173,.6)}
.luck-item.shaking{animation:luckShake .07s linear infinite}
@keyframes luckShake{0%{transform:translateY(0)}50%{transform:translateY(-2px)}100%{transform:translateY(0)}}
.lucky-this{margin-top:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lucky-this-label{font-size:12.5px;color:#5b6a85;font-weight:600;flex:none}
.lucky-this-items{display:flex;gap:7px;flex-wrap:wrap}
.lucky-err{width:100%;font-size:12px;color:#c62828;margin-top:6px}
.draw-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:7px 0;
  border-bottom:1px dashed rgba(0,0,0,.06)}
.draw-row:last-child{border-bottom:0}
.draw-time{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;flex:none;width:44px}
/* 送礼表单 */
.gift-grid{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px;align-items:flex-end}
.gift-field{display:flex;flex-direction:column;gap:5px;flex:1 1 260px;min-width:0;
  font-size:12.5px;color:#5b6a85;font-weight:600}
.gift-field.narrow{flex:0 1 200px}
.gift-field .fun-input{flex:none;width:100%;font-weight:400;color:var(--ink);box-sizing:border-box}
.gift-field select.fun-input{height:42px;cursor:pointer}
/* 玩家列表 */
.player-list{display:flex;flex-wrap:wrap;gap:9px;margin-top:2px}
.player-card{display:flex;align-items:center;gap:8px;padding:7px 12px 7px 8px;background:#fff;
  border:1.5px solid #e3e9f3;border-radius:12px;cursor:pointer;transition:all .15s;
  font-size:13.5px;color:var(--ink);user-select:none}
.player-card b{font-weight:650;line-height:1.2}
.player-card i{font-style:normal;font-size:11px;color:#9aa6b6}
.player-card:hover{border-color:#b9cdf5;transform:translateY(-1px)}
.player-card.sel{border-color:#2f6bff;background:#eef4ff;box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.player-card.sel i{color:#2f6bff}
.pav{width:32px;height:32px;border-radius:8px;flex:none;object-fit:cover;background:#eef1f6;
  image-rendering:pixelated}
.pav-txt,.pav-all{display:flex;align-items:center;justify-content:center;font-size:14px;
  font-weight:700;color:#5a6472;background:#eef1f6;width:32px;height:32px;border-radius:8px;flex:none}
.pav-all{background:linear-gradient(135deg,#2f6bff,#7b5cff);color:#fff;font-size:13px}
.player-empty{font-size:12.5px;color:var(--muted);padding:9px 4px}
.player-card.off{opacity:.72;background:#fafbfd}
.player-card.off .pav{filter:grayscale(1)}
.player-card.off i{color:#a8b2c0}
/* 大结论卡片 */
.verdict{display:flex;gap:14px;align-items:flex-start;padding:18px 16px;border-radius:12px;margin:0}
.verdict .ve{font-size:19px;line-height:1.2;flex:none;font-weight:750;letter-spacing:1px;
  padding-top:6px;white-space:nowrap}
.verdict .vt{font-size:16px;font-weight:600;line-height:1.65;padding-top:3px}
.v-ok{background:var(--greenbg);color:var(--green)}
.v-warn{background:var(--amberbg);color:var(--amber)}
.v-bad{background:var(--redbg);color:var(--red)}
details.raw{margin:12px 16px 4px;font-size:12.5px;color:var(--muted)}
details.raw summary{cursor:pointer;user-select:none;padding:4px 0}
details.raw summary:hover{color:var(--accent)}
details.raw pre{white-space:pre-wrap;word-break:break-all;margin:8px 0 0;padding:12px 14px;
  background:#1d2229;color:#c8d1dc;border-radius:10px;font-size:12px;max-height:300px;overflow:auto}
.term-input{display:flex;align-items:center;gap:10px;padding:11px 14px;background:#22272f;
  border-top:1px solid #14181e}
.term-input .prompt{color:#3ddc84;font-weight:700;font-size:15px;flex:none;
  font-family:inherit}
.term-input input{flex:1;min-width:0;background:#1a1f26;border:1px solid #31394a;color:#e6ecf3;
  border-radius:9px;padding:9px 12px;font-size:13.5px;outline:none;caret-color:#3ddc84;
  font-family:"Microsoft YaHei UI","Microsoft YaHei","PingFang SC",
    -apple-system,"Segoe UI",sans-serif;
  letter-spacing:.1px;-webkit-font-smoothing:antialiased}
.term-input input::placeholder{color:#5a6472}
.term-input input:focus{border-color:#3ddc84;background:#1e242c;
  box-shadow:0 0 0 3px rgba(61,220,132,.12)}
.term-input .btn.primary{background:#2f6bff;border-color:#2f6bff;flex:none}
.term-input .btn.primary:hover{background:#2559e0}
.term-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.chk{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);cursor:pointer;user-select:none}
.chk input{accent-color:var(--accent);width:15px;height:15px;cursor:pointer}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{border:1px solid var(--line);background:#fff;border-radius:20px;padding:6px 14px;
  font-size:12.5px;cursor:pointer;color:var(--ink);transition:all .15s}
.chip:hover{background:var(--bluebg);border-color:#b9cdfa;color:var(--accent)}
.chip-danger:hover{background:var(--redbg);border-color:#f0c9c4;color:var(--red)}
@media(max-width:620px){.term-body{height:44vh;font-size:12.5px}}
