@charset "UTF-8";
/* ==================================================================
   战术中心 · 页面级样式
   只放「某一页专用」的布局，通用组件都在 tokens.css
   ================================================================== */

/* ==================================================================
   HOME · Hero
   ================================================================== */
/* ==================================================================
   R10-2：首页 hero（.eye / .hero-lead / .hero-cta / .hero-note / .mb-home）、
   在线卡 .today、公告条 .announce-wrap 已随「首页极简单框」整块下线。
   注意：.hero-lead 仍被 stats.html / ban.html 使用（其样式由 assets/hero.css 提供）。
   ================================================================== */

/* ==================================================================
   工具网格（admin.html 仍在用，index.html 已移除六张工具卡）
   ================================================================== */
.tools{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:var(--gap);margin-bottom:var(--sec);
}
.tool{
  text-align:left;display:flex;flex-direction:column;
  background:var(--card);border-radius:var(--r-l);
  padding:clamp(22px,2.4vw,28px);
  min-height:clamp(150px,13vw,176px);
  box-shadow:var(--sh-1);
  transition:box-shadow var(--t-base),transform var(--t-base);
}
.tool:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.tool-i{
  width:36px;height:36px;border-radius:var(--r-md);
  background:var(--blue-soft);
  display:grid;place-items:center;margin-bottom:auto;
}
.tool-i svg{width:17px;height:17px;stroke:var(--blue);stroke-width:1.8;fill:none}
.tool-t{
  margin-top:clamp(20px,2.2vw,26px);
  font-size:var(--t-h3);font-weight:500;color:var(--ink);
}
.tool-d{margin-top:4px;font-size:var(--t-sm);line-height:1.6;color:var(--t2)}
.tool.hi{background:linear-gradient(158deg,var(--blue-deep-1),var(--blue-deep-2))}
.tool.hi .tool-i{background:var(--on-blue-wash)}
.tool.hi .tool-i svg{stroke:var(--card)}
.tool.hi .tool-t{color:var(--card)}
.tool.hi .tool-d{color:var(--on-blue-2)}

/* ==================================================================
   内页 · 页头（面包屑 + 标题）
   ================================================================== */
.page-hd{
  width:100%;padding:clamp(28px,3.4vw,48px) var(--pad) clamp(20px,2.4vw,30px);
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:clamp(16px,3vw,40px);flex-wrap:wrap;
}
.page-hd .crumb{
  display:flex;align-items:center;gap:7px;
  font-size:var(--t-xs);color:var(--t2);margin-bottom:10px;
}
.page-hd .crumb a:hover{color:var(--blue)}
.page-hd .crumb a + span{color:var(--t3)}
.page-hd .crumb span:last-child{color:var(--t2)}
.page-hd h1{
  font-size:var(--t-h2);font-weight:600;letter-spacing:-.014em;
  color:var(--ink);line-height:1.35;
}
.page-hd .sub{margin-top:6px;font-size:var(--t-body);color:var(--t2);max-width:46ch}
.page-hd .acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* 内页通用两栏：主内容 + 侧栏 */
.split{
  width:100%;padding-inline:var(--pad);
  display:grid;grid-template-columns:minmax(0,1fr) clamp(280px,26vw,340px);
  gap:var(--gap);align-items:start;
  padding-bottom:var(--sec);
}
.stack{display:flex;flex-direction:column;gap:var(--gap)}

.panel{
  background:var(--card);border-radius:var(--r-l);
  padding:clamp(20px,2.2vw,28px);
  box-shadow:var(--sh-1);
}
.panel-h{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-bottom:16px;
}
.panel-h h3{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.panel-h .more{
  font-size:var(--t-xs);color:var(--blue);font-weight:500;
}
.panel-h .more:hover{color:var(--blue-hover)}

/* 查询表单条 */
.search{
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;
}
.search .field{flex:1 1 220px}
.search .field-sel{flex:0 0 150px}
.search .btn{height:46px}

/* ==================================================================
   战绩页
   ================================================================== */
.player{
  display:flex;align-items:center;gap:clamp(14px,1.8vw,20px);
  padding:clamp(20px,2.4vw,28px);
  background:linear-gradient(158deg,var(--blue-deep-1),var(--blue-deep-2));
  border-radius:var(--r-l);color:var(--card);
  flex-wrap:wrap;
}
.player-av{
  width:56px;height:56px;border-radius:var(--r-m);
  background:var(--on-blue-wash);
  display:grid;place-items:center;flex-shrink:0;
  font-family:var(--f-mono);font-size:var(--t-h3);font-weight:500;
}
.player-meta{min-width:0;flex:1}
.player-meta .name{
  font-size:var(--t-h3);font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.player-meta .name .tag{background:var(--on-blue-wash);color:var(--on-blue)}
.player-meta .plat{margin-top:2px;font-size:var(--t-xs);color:var(--on-blue-3)}
.player-stats{display:flex;gap:clamp(16px,2.4vw,32px);flex-wrap:wrap}
.ps-item .k{font-size:var(--t-xs);color:var(--on-blue-3)}
.ps-item .v{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h3);font-weight:500;letter-spacing:-.02em;
}

.kpis{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:var(--gap-s);
}
.kpi{
  background:var(--card);border-radius:var(--r-m);
  padding:14px 16px;box-shadow:var(--sh-1);
}
.kpi .k{font-size:var(--t-xs);color:var(--t2)}
.kpi .v{
  margin-top:2px;
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h3);font-weight:500;letter-spacing:-.02em;color:var(--ink);
}
.kpi .v.is-up{color:var(--ok)}
.kpi .v.is-down{color:var(--red)}

/* 比赛列表 */
a.match{
  display:grid;grid-template-columns:auto 1fr auto;
  align-items:center;gap:clamp(12px,1.6vw,18px);
  padding:14px 0;border-bottom:1px solid var(--line-soft);
  transition:opacity var(--t-fast);
}
a.match:hover{opacity:.72}
.match:last-child{border-bottom:none}
.match-rk{
  width:38px;height:38px;border-radius:var(--r-s);
  display:grid;place-items:center;flex-shrink:0;
  font-family:var(--f-mono);font-size:var(--t-sm);font-weight:500;
  background:var(--wash);color:var(--t1);
}
.match-rk.is-top{background:var(--blue-soft);color:var(--blue)}
.match-main{min-width:0}
.match-mode{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.match-sub{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}
.match-nums{
  display:flex;gap:clamp(12px,1.6vw,22px);
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-sm);color:var(--t1);white-space:nowrap;
}
.match-nums b{color:var(--ink);font-weight:500}

/* 迷你趋势柱 */
.bars{display:flex;align-items:flex-end;gap:3px;height:72px}
.bars i{
  flex:1;background:var(--blue-line);border-radius:var(--r-xs) var(--r-xs) 0 0;
  transition:background var(--t-fast);
}
.bars i.is-hi{background:var(--blue)}
.bars-cap{
  display:flex;justify-content:space-between;
  margin-top:6px;font-size:var(--t-xs);color:var(--t2);
}

/* ==================================================================
   封禁页
   ================================================================== */
.verdict{
  display:flex;align-items:center;gap:clamp(14px,1.8vw,20px);
  padding:clamp(20px,2.4vw,28px);
  border-radius:var(--r-l);
  background:var(--ok-soft);
  border:1px solid var(--ok-line);
}
.verdict-ico{
  width:44px;height:44px;border-radius:50%;
  background:var(--ok);display:grid;place-items:center;flex-shrink:0;
}
.verdict-ico svg{width:20px;height:20px;stroke:var(--card);stroke-width:2.2;fill:none}
.verdict h3{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.verdict p{margin-top:2px;font-size:var(--t-sm);color:var(--t1)}
.verdict.is-bad{background:var(--red-soft);border-color:var(--red-line)}
.verdict.is-bad .verdict-ico{background:var(--red)}
.verdict-ico.is-blue{background:var(--blue)}

/* 无底色版：与站点其他卡片同一套纸片格式（封禁页结论卡） */
.verdict.is-plain{
  background:var(--card);
  border:1px solid var(--line);
  box-shadow:var(--sh-1);
}
.verdict.is-plain .verdict-ico{background:var(--ok-soft)}
.verdict.is-plain .verdict-ico svg{stroke:var(--ok)}
.verdict.is-plain.is-bad{background:var(--card);border-color:var(--line)}
.verdict.is-plain.is-bad .verdict-ico{background:var(--red-soft)}
.verdict.is-plain.is-bad .verdict-ico svg{stroke:var(--red)}
.verdict.is-plain .tag{margin-left:auto;flex-shrink:0}

.timeline{display:flex;flex-direction:column;gap:0}
.tl-item{
  display:grid;grid-template-columns:auto 1fr;
  gap:14px;padding-bottom:18px;position:relative;
}
.tl-item::before{
  content:"";position:absolute;left:5px;top:14px;bottom:0;width:1px;background:var(--line);
}
.tl-item:last-child{padding-bottom:0}
.tl-item:last-child::before{display:none}
.tl-dot{
  width:11px;height:11px;border-radius:50%;
  background:var(--card);border:2px solid var(--blue-line);
  margin-top:4px;z-index:1;
}
.tl-dot.is-now{border-color:var(--blue);background:var(--blue)}
.tl-t{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.tl-d{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}

/* ==================================================================
   武器页
   ================================================================== */
.guns{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));
  gap:var(--gap-s);
}
.gun{
  text-align:left;background:var(--card);border-radius:var(--r-m);
  padding:14px;box-shadow:var(--sh-1);
  transition:box-shadow var(--t-fast),transform var(--t-fast);
  display:flex;flex-direction:column;gap:8px;
}
.gun:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.gun-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.gun-n{font-size:var(--t-sm);font-weight:500;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* R3-012：类别 / 弹药标签行，与名称同一卡片内 */
.gun-tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.gun-tags .tag{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* R3-012：伤害明细与熟练度的字段网格（两列，标签左、数值右） */
.gun-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 10px}
.gun-m{display:flex;align-items:baseline;justify-content:space-between;gap:6px;min-width:0}
.gun-mk{font-size:var(--t-xxs,10px);color:var(--t2);white-space:nowrap}
.gun-mv{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-xs);font-weight:500;color:var(--ink);
}
.gun-mv.is-none{color:var(--t2);font-weight:400}
.gun-prof{padding-top:8px;border-top:1px solid var(--line-soft)}
.gun-prof-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}
.gun-prof-t{font-size:var(--t-xxs,10px);color:var(--t2);font-weight:500}
.gun-prof-hd .tag{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 3.1 武器图片：固定占位 + contain 居中不裁切 */
.gun-media{
  height:96px;flex-shrink:0;border-radius:var(--r-s);background:var(--wash);
  display:flex;align-items:center;justify-content:center;overflow:hidden;
}
.gun-img{
  width:100%;height:100%;display:block;
  object-fit:contain;object-position:center;
}
/* 13.7-012：素材缺失态——居中「—」+ 虚线槽，图片仍按 contain 居中不裁切 */
.gun-media.is-miss{background:var(--wash);box-shadow:inset 0 0 0 1px var(--line)}
.gun-miss{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
.gun-miss > b{font-size:var(--t-h3);line-height:1;color:var(--t2);font-weight:500}
.gun-miss > em{font-style:normal;font-size:var(--t-xxs,10px);color:var(--t2);opacity:.9}

/* 3.2 伤害条：紧贴图片下方，加重填充色与对比 */
.gun-dmgbar{margin-top:2px}
.gun-dmgbar-hd{
  display:flex;align-items:baseline;justify-content:space-between;gap:6px;
  font-size:var(--t-xs);color:var(--t2);margin-bottom:4px;
}
.gun-dmgbar-hd b{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-sm);font-weight:600;color:var(--blue);
  text-shadow:0 1px 0 var(--card);
}
.gun-dmgbar-hd b.is-none{color:var(--t2);font-weight:500}
.gun-track{
  position:relative;height:10px;border-radius:999px;overflow:hidden;
  background:var(--wash-deep);
  box-shadow:inset 0 0 0 1px var(--blue-line);
}
/* 13.7-013：无官方伤害数值时轨道为空槽（0 宽填充），与「真实 0」区分 */
.gun-track.is-none{background:transparent;box-shadow:inset 0 0 0 1px var(--line)}
.gun-track.is-none .gun-fill{width:0;box-shadow:none}
.gun-fill{
  position:absolute;left:0;top:0;bottom:0;width:var(--w,0%);border-radius:999px;
  background:linear-gradient(90deg,var(--blue-hover),var(--blue-deep-1));
  box-shadow:inset 0 0 0 1px var(--blue-hover);
}
@media (prefers-color-scheme:dark){
  .gun-media{background:var(--blue-deep-2)}
  .gun-track{background:var(--blue-deep-2);box-shadow:inset 0 0 0 1px var(--blue-hover)}
  .gun-fill{background:linear-gradient(90deg,var(--blue-lt),var(--blue-deep-1));box-shadow:inset 0 0 0 1px var(--blue-soft)}
  .gun-dmgbar-hd b{color:var(--blue-soft);text-shadow:none}
  .gun-media.is-miss{box-shadow:inset 0 0 0 1px var(--blue-line)}
  .gun-track.is-none{box-shadow:inset 0 0 0 1px var(--blue-line)}
}

/* ==================================================================
   图鉴页
   ================================================================== */
.tiles{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));
  gap:var(--gap-s);
}
.tile{
  text-align:left;background:var(--card);border-radius:var(--r-m);
  overflow:hidden;box-shadow:var(--sh-1);
  transition:box-shadow var(--t-fast),transform var(--t-fast);
}
.tile:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.tile-img{
  aspect-ratio:4/3;background:var(--wash);
  display:grid;place-items:center;
}
.tile-img svg{width:34px;height:34px;stroke:var(--blue-line);stroke-width:1.4;fill:none}
.tile-body{padding:11px 13px}
.tile-n{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.tile-d{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}

.cats{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:var(--gap)}

/* ==================================================================
   地图页
   ================================================================== */
.mapwrap{display:grid;grid-template-columns:minmax(0,1fr) clamp(260px,24vw,320px);gap:var(--gap)}
.mapbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:var(--gap-s)}
.mapbar .seg{flex-wrap:wrap}
.range{display:flex;align-items:center;gap:10px;font-size:var(--t-sm);color:var(--t2)}
.range input[type=range]{
  width:120px;accent-color:var(--blue);
}

/* ==================================================================
   排行页
   ================================================================== */
.rank-top{
  display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap-s);
  margin-bottom:var(--gap);
}
.rank-card{
  background:var(--card);border-radius:var(--r-m);
  padding:16px;box-shadow:var(--sh-1);
  display:flex;flex-direction:column;gap:6px;
  position:relative;overflow:hidden;
}
.rank-card.is-1{background:linear-gradient(158deg,var(--blue-deep-1),var(--blue-deep-2));color:var(--card)}
.rank-card.is-1 .rk-k,.rank-card.is-1 .rk-name{color:var(--card)}
.rank-card.is-1 .rk-score{color:var(--card)}
.rk-no{
  font-family:var(--f-mono);font-size:var(--t-xs);font-weight:500;
  color:var(--blue);letter-spacing:.08em;
}
.rank-card.is-1 .rk-no{color:var(--on-blue-3)}
.rk-name{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.rk-score{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-body);font-weight:500;color:var(--blue);
}
.rk-k{font-size:var(--t-xs);color:var(--t2)}

/* ==================================================================
   状态页
   ================================================================== */
.svc{
  display:grid;grid-template-columns:1fr auto auto;
  align-items:center;gap:12px;
  padding:14px 0;border-bottom:1px solid var(--line-soft);
}
.svc:last-child{border-bottom:none}
.svc-n{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.svc-d{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}
.svc-v{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-sm);color:var(--t1);white-space:nowrap;
}
.uptime{
  display:flex;gap:2px;flex-wrap:wrap;
}
.uptime i{
  width:9px;height:22px;border-radius:var(--r-xs);background:var(--ok);
}
.uptime i.is-warn{background:var(--warn)}
.uptime i.is-down{background:var(--red)}

/* ==================================================================
   账号页
   ================================================================== */
.auth{
  width:100%;max-width:880px;margin:0 auto;
  padding:clamp(32px,4.4vw,64px) var(--pad);
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(24px,4vw,56px);align-items:start;
}
.auth-side h1{
  font-size:var(--t-h2);font-weight:600;letter-spacing:-.014em;
  color:var(--ink);line-height:1.35;
}
.auth-side p{margin-top:10px;font-size:var(--t-body);color:var(--t2);max-width:34ch}
.auth-list{margin-top:20px;display:flex;flex-direction:column;gap:10px}
.auth-list li{
  display:flex;align-items:flex-start;gap:9px;
  font-size:var(--t-sm);color:var(--t1);list-style:none;
}
.auth-list svg{
  width:15px;height:15px;stroke:var(--blue);stroke-width:2.2;fill:none;
  flex-shrink:0;margin-top:.34em;
}
.auth-form{padding:clamp(22px,2.6vw,30px)}
.auth-form .field + .field{margin-top:14px}
.auth-form .btn{width:100%;margin-top:20px;height:46px;font-size:var(--t-body)}
.auth-alt{
  margin-top:14px;text-align:center;
  font-size:var(--t-xs);color:var(--t2);
}
.auth-alt a{color:var(--blue);font-weight:500}
.auth-alt a:hover{text-decoration:underline}

/* 账号页 · 专属功能 */
.perks{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--gap-s);
}
.perk{
  display:flex;gap:10px;align-items:flex-start;
  padding:13px 14px;border-radius:var(--r-m);
  background:var(--wash);
}
.perk-ico{
  width:26px;height:26px;border-radius:var(--r-sm);flex-shrink:0;
  background:var(--card);display:grid;place-items:center;
}
.perk-ico svg{width:13px;height:13px;stroke:var(--blue);stroke-width:2;fill:none}
.perk-n{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.perk-d{margin-top:1px;font-size:var(--t-xs);color:var(--t2);line-height:1.55}

/* ==================================================================
   回放页
   ================================================================== */
.replay{display:grid;grid-template-columns:minmax(0,1fr) clamp(260px,24vw,320px);gap:var(--gap)}
.replay-ctl{
  display:flex;align-items:center;gap:10px;
  padding:12px 0 0;flex-wrap:wrap;
}
.scrub{
  flex:1;height:6px;border-radius:var(--r-xs);background:var(--wash);
  position:relative;min-width:120px;
}
.scrub::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:var(--p,38%);
  background:var(--blue);border-radius:var(--r-xs);
}
.scrub::after{
  content:"";position:absolute;left:var(--p,38%);top:50%;
  width:12px;height:12px;border-radius:50%;
  background:var(--card);border:2px solid var(--blue);
  transform:translate(-50%,-50%);
}
.time{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-xs);color:var(--t2);white-space:nowrap;
}

/* ==================================================================
   关于 / 文档页
   ================================================================== */
.doc{
  width:100%;max-width:760px;
  padding:0 var(--pad) var(--sec);
}
.doc h2{
  margin-top:clamp(28px,3.4vw,44px);
  font-size:var(--t-h3);font-weight:600;color:var(--ink);
}
.doc h2:first-child{margin-top:0}
.doc p{margin-top:8px;font-size:var(--t-body);line-height:1.82;color:var(--t2)}
.doc p b{color:var(--t1);font-weight:500}
.doc ul{margin-top:8px;padding-left:1.1em}
.doc li{
  font-size:var(--t-body);line-height:1.8;color:var(--t2);
  margin-top:4px;
}
.doc li::marker{color:var(--blue-line)}

/* ==================================================================
   通用小工具类（替代行内样式）
   · 只保留结构性用途，不做视觉修饰，修饰一律回到 tokens.css 令牌
   ================================================================== */
.u-mt-s{margin-top:var(--gap-s)}
.u-mt-m{margin-top:var(--gap)}
.u-mb-m{margin-bottom:var(--gap)}
.u-mb-sec{margin-bottom:var(--sec)}
.u-flush{padding:0;overflow:hidden}          /* 表格贴边的卡片 */
.u-stack{display:flex;flex-direction:column;gap:var(--gap-s)}
.u-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.u-row-b{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.u-wide{width:100%}
.u-t2{color:var(--t2)}
.u-ink{color:var(--ink)}
.u-ink-500{color:var(--ink);font-weight:500}
.u-between{justify-content:space-between}
.u-mb-0{margin-bottom:0}
.u-mt-xs{margin-top:4px}
.u-pb-sec{padding-bottom:var(--sec)}
.kpis-2{grid-template-columns:1fr 1fr}
.perks-1{grid-template-columns:1fr}
.perks-auto{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.split-flush{padding-inline:0}
.sec-h-tight{margin-bottom:clamp(22px,2.4vw,30px)}
.pager-foot{padding:0 clamp(20px,2.2vw,28px) clamp(16px,2vw,20px)}
.th-rank{width:60px}
.pref-k{width:auto;color:var(--t2)}
.ev-d.is-ok{background:var(--ok)}
.ev-d.is-warn{background:var(--warn)}
.ev-d.is-down{background:var(--red)}
.u-inline-btn{width:100%;margin-top:14px;height:44px}
.u-center{text-align:center}

/* 说明文字 */
.note{font-size:var(--t-xs);color:var(--t2);line-height:1.7}
.note-ink{font-size:var(--t-sm);color:var(--t1);line-height:1.7}
.note-h{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.lead-num{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h2);font-weight:500;color:var(--ink);letter-spacing:-.02em;
}

/* 键值明细（封禁页 / 图鉴页共用） */
.kv{width:100%;border-collapse:collapse;font-size:var(--t-sm)}
.kv th{
  width:40%;text-align:left;font-weight:400;color:var(--t2);
  padding:13px 0;border-bottom:1px solid var(--line-soft);
  vertical-align:middle;
}
.kv td{
  padding:13px 0;border-bottom:1px solid var(--line-soft);
  color:var(--t1);vertical-align:middle;
}
.kv tr:last-child th,.kv tr:last-child td{border-bottom:none}
.kv td.num{color:var(--ink);font-weight:500;text-align:left}

/* 侧栏紧凑型进度条（武器偏好 / 赛季进度） */
.pref{display:flex;align-items:center;gap:8px;font-size:var(--t-xs);color:var(--t2)}
.pref + .pref{margin-top:10px}
.pref > span:first-child{width:52px;flex-shrink:0}
.pref > i{flex:1;height:4px;border-radius:var(--r-xs);background:var(--wash);position:relative;overflow:hidden}
.pref > i::after{
  content:"";position:absolute;left:0;top:0;bottom:0;
  width:var(--w,50%);background:var(--blue-lt);border-radius:var(--r-xs);
}
.pref > b{width:auto;font-weight:500;color:var(--ink);flex-shrink:0}
.pref.is-wide > span:first-child{width:auto}

/* 图鉴详情两栏 */
.detail{
  display:grid;grid-template-columns:clamp(180px,24vw,280px) minmax(0,1fr);
  gap:clamp(20px,3vw,36px);align-items:start;
}
.detail .tile-img{border-radius:var(--r-m);aspect-ratio:1}
.detail .tile-img svg{width:52px;height:52px}
.detail h3{font-size:var(--t-h3);font-weight:600;color:var(--ink)}

/* ==================================================================
   排行榜
   ================================================================== */
.rk-sub{
  margin-top:4px;font-size:var(--t-xs);color:var(--t2);
}
.rk-sub.is-on{color:var(--on-blue-3)}
.rank-card .rk-score{font-size:var(--t-h3)}
.rank-card-hd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.field-season{flex:0 0 auto;min-width:150px}
.field-season .select{height:40px;background-position:calc(100% - 19px) 18px,calc(100% - 14px) 18px}
.rank-card .rk-meta{
  display:flex;gap:10px;flex-wrap:wrap;
  font-size:var(--t-xs);color:var(--t2);
}
.rank-card.is-1 .rk-meta{color:var(--on-blue-3)}

.tbl .rank-no{
  font-family:var(--f-mono);font-size:var(--t-sm);font-weight:500;
  color:var(--t2);
}
.tbl .rank-no.is-top{color:var(--blue)}
.tbl .who{display:flex;align-items:center;gap:9px;min-width:0}
.tbl .who-av{
  width:26px;height:26px;border-radius:var(--r-s);flex-shrink:0;
  background:var(--blue-soft);color:var(--blue);
  display:grid;place-items:center;
  font-family:var(--f-mono);font-size:var(--t-xs);font-weight:500;
}
.tbl .who-n{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.tbl .who-p{font-size:var(--t-xs);color:var(--t2)}

/* 分页 */
.pager{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  margin-top:16px;
}
.pager .pg{
  display:flex;align-items:center;gap:4px;
}
.pager button{
  min-width:32px;height:32px;padding:0 9px;border-radius:var(--r-s);
  /* R4-032：页码按钮统一走 --card 底，去掉浏览器默认按钮灰底 */
  background:var(--card);border:1px solid var(--line);
  font-size:var(--t-sm);color:var(--t2);
  transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast);
}
.pager button:hover{background:var(--wash);color:var(--ink)}
/* R4-017：上一页 / 下一页到头时给出禁用态，避免看着能点却没反应 */
.pager button:disabled{opacity:.4;cursor:default;color:var(--t2)}
.pager button[aria-current="true"]{
  background:var(--blue);color:var(--on-blue);border-color:var(--blue);font-weight:500;
}

/* ==================================================================
   地图页补充
   ================================================================== */
.plan-lg{aspect-ratio:16/11}
.plan .zone{
  fill:none;stroke:var(--blue-line);stroke-width:1;stroke-dasharray:4 4;
}
.plan .zone-fill{fill:var(--blue-soft);opacity:.55}
.plan .pin-hi{fill:var(--red)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:var(--t-xs);color:var(--t2);margin-top:12px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:8px;height:8px;border-radius:50%;background:var(--blue)}
.legend i.is-hi{background:var(--red)}
.legend i.is-line{width:14px;height:2px;border-radius:var(--r-xs);background:var(--blue-line)}

.pinfos h3{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.route{
  display:flex;flex-direction:column;gap:0;
}
.route-item{
  display:grid;grid-template-columns:auto 1fr;gap:12px;
  padding-bottom:14px;position:relative;
}
.route-item::before{
  content:"";position:absolute;left:5px;top:12px;bottom:0;width:1px;background:var(--line);
}
.route-item:last-child{padding-bottom:0}
.route-item:last-child::before{display:none}
.route-n{
  width:11px;height:11px;border-radius:50%;margin-top:3px;
  background:var(--card);border:2px solid var(--blue-line);z-index:1;
}
.route-item.is-now .route-n{border-color:var(--blue);background:var(--blue)}
.route-t{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.route-d{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}

/* ==================================================================
   状态页
   ================================================================== */
.overall{
  display:flex;align-items:center;gap:clamp(14px,1.8vw,20px);
  padding:clamp(20px,2.4vw,28px);
  border-radius:var(--r-l);
  background:var(--ok-soft);
  border:1px solid var(--ok-line);
  flex-wrap:wrap;
}
.overall .big-ico{
  width:44px;height:44px;border-radius:50%;flex-shrink:0;
  background:var(--ok);display:grid;place-items:center;
}
.overall .big-ico svg{width:20px;height:20px;stroke:var(--card);stroke-width:2.2;fill:none}
.overall h3{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.overall p{margin-top:2px;font-size:var(--t-sm);color:var(--t1)}
.overall .overall-n{margin-left:auto;text-align:right}
.overall .overall-n .v{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h3);font-weight:500;color:var(--ok);letter-spacing:-.02em;
}
.overall .overall-n .k{font-size:var(--t-xs);color:var(--t2)}
.overall.is-warn{background:var(--warn-soft);border-color:var(--warn-line)}
.overall.is-warn .big-ico{background:var(--warn)}
.overall.is-warn .overall-n .v{color:var(--warn)}

.svc-row{padding:14px 0;border-bottom:1px solid var(--line-soft)}
.svc-row:last-child{border-bottom:none}
.svc-main{display:flex;align-items:center;gap:9px}
.svc-main .svc-n{flex:1}
.svc-foot{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-top:8px;flex-wrap:wrap;
}
.svc-foot .uptime{flex:1;min-width:120px}
.svc-foot .svc-v{color:var(--t2);font-size:var(--t-xs)}

/* 事件流 */
.events{display:flex;flex-direction:column;gap:0}
.ev{
  display:grid;grid-template-columns:auto 1fr;gap:12px;
  padding:12px 0;border-bottom:1px solid var(--line-soft);
}
.ev:last-child{border-bottom:none}
.ev-d{width:7px;height:7px;border-radius:50%;margin-top:.6em;flex-shrink:0}
.ev-t{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.ev-d2{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}
.ev-time{
  font-family:var(--f-mono);font-size:var(--t-xs);color:var(--t2);
  white-space:nowrap;
}

/* ==================================================================
   账号页补充
   ================================================================== */
.auth-seg{
  display:flex;gap:2px;padding:3px;border-radius:999px;
  background:var(--wash);margin-bottom:18px;
}
.auth-seg button{
  flex:1;padding:8px;border-radius:999px;
  font-size:var(--t-sm);color:var(--t2);
  transition:background var(--t-fast),color var(--t-fast),box-shadow var(--t-fast);
}
.auth-seg button[aria-pressed="true"]{
  background:var(--card);color:var(--ink);font-weight:500;
  box-shadow:var(--sh-3);
}
.auth-terms{
  margin-top:14px;font-size:var(--t-xs);color:var(--t2);line-height:1.7;
}
.auth-terms a{color:var(--blue)}
.auth-free{
  margin-top:16px;padding-top:16px;border-top:1px solid var(--line-soft);
  font-size:var(--t-xs);color:var(--t2);line-height:1.7;
}
.auth-free b{color:var(--t1);font-weight:500}

/* ==================================================================
   回放页补充
   ================================================================== */
.replay-bar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin-bottom:var(--gap-s);
}
.replay-kpis{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:var(--gap-s);margin-top:var(--gap);
}
.ctl-btn{
  width:34px;height:34px;border-radius:50%;flex-shrink:0;
  display:grid;place-items:center;
  background:var(--blue);color:var(--card);
  transition:background var(--t-fast);
}
.ctl-btn:hover{background:var(--blue-hover)}
.ctl-btn svg{width:13px;height:13px;fill:currentColor;stroke:none}
.ctl-btn.is-ghost{
  background:transparent;color:var(--t2);
  box-shadow:inset 0 0 0 1px var(--line);
}
.ctl-btn.is-ghost:hover{background:var(--wash);color:var(--ink)}
.ctl-btn.is-ghost svg{fill:none;stroke:currentColor;stroke-width:2}

/* 击杀流 */
.kills{display:flex;flex-direction:column;gap:0}
.kill{
  display:grid;grid-template-columns:38px 1fr auto;align-items:center;
  gap:10px;padding:11px 0;border-bottom:1px solid var(--line-soft);
}
.kill:last-child{border-bottom:none}
.kill-t{
  font-family:var(--f-mono);font-size:var(--t-xs);color:var(--t2);
  white-space:nowrap;
}
.kill-m{font-size:var(--t-sm);color:var(--t1);min-width:0}
.kill-m b{color:var(--ink);font-weight:500}
.kill-g{
  font-size:var(--t-xs);color:var(--t2);white-space:nowrap;
}

/* ==================================================================
   关于页
   ================================================================== */
.doc-grid{
  display:grid;grid-template-columns:clamp(160px,18vw,200px) minmax(0,1fr);
  gap:clamp(24px,4vw,56px);align-items:start;
  width:100%;padding:0 var(--pad) var(--sec);
}
.doc-nav{position:sticky;top:calc(clamp(66px,5.2vw,78px) + 24px)}
.doc-nav a{
  display:block;padding:6px 0;
  font-size:var(--t-sm);color:var(--t2);
  transition:color var(--t-fast);
}
.doc-nav a:hover,.doc-nav a[aria-current="true"]{color:var(--blue)}
.doc-nav a[aria-current="true"]{font-weight:500}
.doc-body{max-width:70ch}
.doc-body h2{
  margin-top:clamp(30px,3.6vw,46px);
  font-size:var(--t-h3);font-weight:600;color:var(--ink);
  scroll-margin-top:100px;
}
.doc-body h2:first-child{margin-top:0}
.doc-body p{margin-top:8px;font-size:var(--t-body);line-height:1.85;color:var(--t2)}
.doc-body p b{color:var(--t1);font-weight:500}
.doc-body ul{margin-top:8px;padding-left:1.1em}
.doc-body li{font-size:var(--t-body);line-height:1.8;color:var(--t2);margin-top:5px}
.doc-body li::marker{color:var(--blue-line)}
.doc-facts{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:var(--gap-s);margin-top:16px;
}
.doc-fact{
  padding:14px 16px;border-radius:var(--r-m);background:var(--wash);
}
.doc-fact .v{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h3);font-weight:500;color:var(--ink);letter-spacing:-.02em;
}
.doc-fact .k{margin-top:1px;font-size:var(--t-xs);color:var(--t2)}

/* ==================================================================
   模块级标签切换（武器图鉴等合并模块）
   ================================================================== */
/* 管理后台 · 基础服务状态卡片 */
.svc-grid{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:var(--gap-s);margin-bottom:var(--sec);
}
.svc-box{
  background:var(--card);border-radius:var(--r-m);
  padding:16px 18px;box-shadow:var(--sh-1);
}

.modtabs{
  display:inline-flex;gap:2px;padding:4px;margin-bottom:var(--gap);
  background:var(--wash);border-radius:999px;
}
.modtabs button{
  padding:9px 20px;border-radius:999px;
  font-size:var(--t-sm);font-weight:400;color:var(--t2);white-space:nowrap;
  transition:color var(--t-fast),background var(--t-fast),box-shadow var(--t-fast);
}
.modtabs button:hover{color:var(--ink)}
.modtabs button[aria-selected="true"]{
  background:var(--card);color:var(--ink);font-weight:500;
  box-shadow:var(--sh-3);
}

/* ==================================================================
   账号模块 · 已登录控制台 / 注册流程 / 监控任务 / 邮件日报
   ================================================================== */

/* 窄卡（注册 / 验证码 / 忘记密码 / 重置密码） */
.authcard{
  width:100%;max-width:440px;margin:0 auto;
  padding:clamp(26px,3.2vw,40px);
  margin-bottom:var(--sec);
}
.authcard .logo{margin-bottom:22px}
.authcard h1{
  font-size:var(--t-h2);font-weight:600;letter-spacing:-.014em;
  color:var(--ink);line-height:1.35;
}
.authcard .sub{margin-top:6px;font-size:var(--t-sm);color:var(--t2);line-height:1.7}
.authcard .field{margin-top:16px}
.authcard .btn{width:100%;margin-top:22px;height:46px}
.auth-foot{
  margin-top:14px;text-align:center;
  font-size:var(--t-xs);color:var(--t2);
}
.auth-foot a{color:var(--blue);font-weight:500}
.auth-foot a:hover{text-decoration:underline}

/* 密码可见切换 */
.pwd-wrap{position:relative}
.pwd-wrap .input{padding-right:42px}
.pwd-eye{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:32px;height:32px;border-radius:var(--r-s);
  display:grid;place-items:center;color:var(--t2);
}
.pwd-eye:hover{color:var(--ink);background:var(--wash)}
.pwd-eye svg{width:16px;height:16px;stroke:currentColor;stroke-width:1.8;fill:none}

/* 强度条 + 规则清单 */
.meter{display:flex;gap:5px;margin-top:8px}
.meter i{flex:1;height:4px;border-radius:var(--r-xs);background:var(--line)}
.meter i.is-on{background:var(--ok)}
.meter-cap{margin-top:6px;font-size:var(--t-xs);color:var(--t2)}
.meter-cap b{color:var(--ok);font-weight:500}
.rules{
  margin-top:16px;padding:14px 16px;border-radius:var(--r-m);
  background:var(--blue-soft);display:flex;flex-direction:column;gap:6px;
}
.rules li{
  display:flex;align-items:flex-start;gap:7px;list-style:none;
  font-size:var(--t-xs);color:var(--t1);line-height:1.6;
}
.rules li.is-off{color:var(--t2)}
.rules svg{width:13px;height:13px;stroke:var(--ok);stroke-width:2.2;fill:none;flex-shrink:0;margin-top:.3em}
.rules li.is-off svg{stroke:var(--t2)}

/* 6 格验证码 */
.otp{display:flex;gap:8px;margin-top:18px}
.otp .input{
  height:52px;padding:0;text-align:center;
  font-family:var(--f-mono);font-size:var(--t-h3);font-weight:500;
}
.otp-foot{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:12px;font-size:var(--t-xs);color:var(--t2);
}
.otp-foot a{color:var(--blue);font-weight:500}
.otp-ico{
  width:40px;height:40px;border-radius:var(--r-m);
  background:var(--blue-soft);display:grid;place-items:center;margin-bottom:16px;
}
.otp-ico svg{width:18px;height:18px;stroke:var(--blue);stroke-width:1.8;fill:none}

/* 协议勾选行（R4-028）：自绘方框 + 勾选/未勾选的样式反馈，点击目标是真实 checkbox */
.agree{
  display:flex;align-items:flex-start;gap:10px;margin-top:16px;
  padding:10px 12px;border-radius:var(--r-s);
  background:var(--wash);box-shadow:inset 0 0 0 1px var(--line-soft);
  font-size:var(--t-xs);color:var(--t2);line-height:1.6;
  cursor:pointer;user-select:none;
  transition:background var(--t-fast),box-shadow var(--t-fast);
}
.agree input{
  appearance:none;-webkit-appearance:none;
  flex:0 0 auto;width:18px;height:18px;margin:0;
  display:grid;place-items:center;cursor:pointer;
  border:1.5px solid var(--line);border-radius:5px;background:var(--card);
  transition:background var(--t-fast),border-color var(--t-fast),box-shadow var(--t-fast);
}
.agree input::after{
  content:"";width:9px;height:5px;opacity:0;
  border-left:2px solid var(--on-blue);border-bottom:2px solid var(--on-blue);
  transform:rotate(-45deg) translateY(-1px);
  transition:opacity var(--t-fast);
}
.agree input:hover{border-color:var(--blue-line)}
.agree input:focus-visible{outline:none;box-shadow:0 0 0 3px var(--blue-soft)}
.agree input:checked{background:var(--blue);border-color:var(--blue)}
.agree input:checked::after{opacity:1}
.agree.is-on{background:var(--blue-soft);box-shadow:inset 0 0 0 1px var(--blue-line)}
.agree.is-err{background:var(--red-soft);box-shadow:inset 0 0 0 1px var(--red)}
.agree.is-err input{border-color:var(--red)}
.agree a{color:var(--blue);cursor:pointer}

/* R4-027：注册表单在桌面视口内水平 + 垂直居中，卡片宽统一 440px
   同时把表单竖向收紧（强度规则改横向排列、留白降一档），让整卡高度
   小于视口可用高度，真的能落在垂直中线上而不是顶在顶部。 */
body[data-page="account-register"]{display:flex;flex-direction:column;min-height:100vh}
body[data-page="account-register"] #main{
  flex:1 1 auto;display:flex;align-items:center;justify-content:center;
  padding-block:clamp(20px,2.4vw,28px);
}
body[data-page="account-register"] .authcard{margin:0;padding:clamp(22px,2.2vw,28px)}
body[data-page="account-register"] .authcard .logo{margin-bottom:12px}
body[data-page="account-register"] .authcard .field{margin-top:12px}
body[data-page="account-register"] .authcard .input{height:44px}
body[data-page="account-register"] .authcard .btn{height:44px;margin-top:16px}
body[data-page="account-register"] .authcard .sub{margin-top:4px}
body[data-page="account-register"] .authcard h1{line-height:1.25}
body[data-page="account-register"] .authcard .rules{
  margin-top:10px;padding:7px 10px;
  flex-direction:row;flex-wrap:wrap;column-gap:14px;row-gap:0;
}
body[data-page="account-register"] .authcard .rules li{align-items:center;gap:5px;white-space:nowrap}
body[data-page="account-register"] .authcard .rules svg{margin-top:0}
body[data-page="account-register"] .authcard .meter{margin-top:6px}
body[data-page="account-register"] .authcard .meter-cap{margin-top:4px}
body[data-page="account-register"] .authcard .agree{margin-top:12px;padding:8px 10px}
body[data-page="account-register"] .authcard .code-field{margin-top:12px}
body[data-page="account-register"] .authcard .code-field .hint{margin-top:4px;line-height:1.5}
@media (max-width:720px){
  /* 窄屏内容高于视口时垂直居中会把表单上下切掉，回到自然文档流 + 左右居中 */
  body[data-page="account-register"] #main{display:block;padding-block:clamp(20px,5vw,32px)}
}

/* 控制台 */
.minis{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:var(--gap-s);
}
.mini{
  background:var(--card);border-radius:var(--r-m);
  padding:16px 18px;box-shadow:var(--sh-1);
}
.mini .v{
  font-family:var(--f-mono);font-variant-numeric:tabular-nums;
  font-size:var(--t-h3);font-weight:500;color:var(--ink);letter-spacing:-.02em;
}
.mini .k{margin-top:2px;font-size:var(--t-xs);color:var(--t2)}
.dash-grid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--gap);align-items:start;
}
.fav,.mon{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;gap:10px;
  padding:13px 0;border-bottom:1px solid var(--line-soft);
}
.fav:last-child,.mon:last-child{border-bottom:none}
.fav-st,.mon-st{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.fav-st.is-ok,.mon-st.is-ok{background:var(--ok)}
.fav-st.is-red,.mon-st.is-red{background:var(--red)}
.fav-st.is-off,.mon-st.is-off{background:var(--line)}
.fav-n,.mon-n{font-size:var(--t-sm);font-weight:500;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fav-meta,.mon-meta{font-size:var(--t-xs);color:var(--t2);white-space:nowrap}
.kvline{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:11px 0;border-bottom:1px solid var(--line-soft);
}
.kvline:last-of-type{border-bottom:none}
.kvline .k{font-size:var(--t-sm);color:var(--t2)}
.kvline .v{font-size:var(--t-sm);color:var(--ink);font-weight:500}

/* 开关 */
.switch{
  position:relative;width:40px;height:22px;border-radius:999px;flex-shrink:0;
  background:var(--line);transition:background var(--t-fast);
}
.switch::after{
  content:"";position:absolute;left:3px;top:3px;
  width:16px;height:16px;border-radius:50%;
  background:var(--card);transition:left var(--t-fast);
  box-shadow:var(--sh-4);
}
.switch[aria-pressed="true"]{background:var(--blue)}
.switch[aria-pressed="true"]::after{left:21px}

/* 监控任务卡 */
.task{
  background:var(--card);border-radius:var(--r-m);
  padding:16px 18px;box-shadow:var(--sh-1);
}
.task-hd{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.task-n{font-size:var(--t-body);font-weight:500;color:var(--ink)}
.task-acts{margin-left:auto;display:flex;gap:12px}
.task-acts button{
  font-size:var(--t-xs);font-weight:500;color:var(--t2);
  transition:color var(--t-fast);
}
.task-acts button:hover{color:var(--ink)}
.task-acts button.is-red{color:var(--red)}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.task-foot{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft);
  font-size:var(--t-xs);color:var(--t2);flex-wrap:wrap;
}
.tipbar{
  display:flex;align-items:center;gap:9px;
  padding:13px 16px;border-radius:var(--r-m);
  background:var(--wash);font-size:var(--t-xs);color:var(--t2);
  flex-wrap:wrap;
}
.tipbar .more{margin-left:auto;color:var(--blue);font-weight:500;white-space:nowrap}

/* 抽屉（新建监控任务） */
.drawer{
  position:fixed;inset:0;z-index:200;display:flex;justify-content:flex-end;
}
.drawer[hidden]{display:none}
.drawer-mask{position:absolute;inset:0;background:var(--mask)}
.drawer-panel{
  position:relative;width:min(440px,100%);height:100%;
  background:var(--card);box-shadow:var(--sh-2);
  display:flex;flex-direction:column;overflow-y:auto;
}
.drawer-hd{
  padding:22px 24px;border-bottom:1px solid var(--line-soft);
  display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
}
.drawer-hd h2{font-size:var(--t-h3);font-weight:600;color:var(--ink)}
.drawer-hd p{margin-top:3px;font-size:var(--t-xs);color:var(--t2)}
.drawer-x{
  width:30px;height:30px;border-radius:var(--r-s);flex-shrink:0;
  display:grid;place-items:center;color:var(--t2);
}
.drawer-x:hover{background:var(--wash);color:var(--ink)}
.drawer-x svg{width:14px;height:14px;stroke:currentColor;stroke-width:2;fill:none}
.drawer-bd{padding:22px 24px;flex:1}
.drawer-bd .field{margin-bottom:20px}
.choice{
  display:flex;align-items:center;gap:10px;
  padding:13px 15px;border-radius:var(--r-m);
  border:1px solid var(--line);cursor:pointer;
  font-size:var(--t-sm);color:var(--t1);
  transition:border-color var(--t-fast),background var(--t-fast);
  margin-top:8px;
}
.choice:hover{border-color:var(--blue-line)}
.choice input{accent-color:var(--blue);flex-shrink:0}
.choice:has(input:checked){border-color:var(--blue);background:var(--blue-soft);color:var(--ink);font-weight:500}
.opts3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px}
.opts3 .choice{margin-top:0;justify-content:center;padding:11px 8px}
.opts2{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:8px}
.opts2 .choice{margin-top:0}
.opt-check{display:flex;align-items:center;gap:8px;padding:11px 14px;border-radius:var(--r-m);border:1px solid var(--line);cursor:pointer;font-size:var(--t-sm);color:var(--t1)}
.opt-check input{accent-color:var(--blue)}
.opt-check:has(input:checked){border-color:var(--blue);background:var(--blue-soft)}
.drawer-ft{
  padding:18px 24px;border-top:1px solid var(--line-soft);
  display:flex;align-items:center;justify-content:space-between;gap:10px;
}
.clearable{position:relative}
.clearable .input{padding-right:40px}
.clearable .clr{
  position:absolute;right:8px;top:50%;transform:translateY(-50%);
  width:24px;height:24px;border-radius:50%;
  display:grid;place-items:center;color:var(--blue);
}
.clearable .clr svg{width:11px;height:11px;stroke:currentColor;stroke-width:2.2;fill:none}

/* 邮件日报预览 */
.mail{
  border-radius:var(--r-m);border:1px solid var(--line-soft);
  background:var(--card);padding:18px 20px;
}
.mail-h{padding-bottom:12px;border-bottom:1px solid var(--line-soft)}
.mail-t{font-size:var(--t-sm);font-weight:500;color:var(--ink);line-height:1.6}
.mail-from{margin-top:4px;font-size:var(--t-xs);color:var(--t2)}
.mail-bd{padding-top:14px;display:flex;flex-direction:column;gap:10px}
.mail-bd .note-ink b{font-weight:500}
.mail-item{
  padding:12px 14px;border-radius:var(--r-m);
  background:var(--blue-soft);
}
.mail-item + .mail-item{margin-top:8px}
.mail-item .t{font-size:var(--t-sm);font-weight:500;color:var(--ink)}
.mail-item .d{margin-top:2px;font-size:var(--t-xs);color:var(--t1)}
.mail-item .d .dot-red{margin-right:6px;vertical-align:1px}
.mail-foot{margin-top:14px;font-size:var(--t-xs);color:var(--t2)}

/* 事件红点（邮件预览内） */
.ev-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--red);margin-right:7px;vertical-align:1px}

/* 响应式规则统一放在文件末尾，此处不重复声明 */
   ================================================================== */
.prequery{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;gap:10px;
  padding:clamp(48px,7vw,96px) 24px;
}
.prequery .pq-ico{
  width:52px;height:52px;border-radius:var(--r-l);
  background:var(--blue-soft);display:grid;place-items:center;margin-bottom:6px;
}
.prequery .pq-ico svg{width:22px;height:22px;stroke:var(--blue);stroke-width:1.8;fill:none}
.prequery h3{font-size:var(--t-h3);font-weight:500;color:var(--ink)}
.prequery p{font-size:var(--t-sm);color:var(--t2);max-width:40ch;line-height:1.7}

/* ==================================================================
   响应式
   ================================================================== */
@media (max-width:1080px){
  .svc-grid{grid-template-columns:1fr}
  .minis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dash-grid{grid-template-columns:1fr}
  .opts3{grid-template-columns:1fr}
  .doc-grid{grid-template-columns:1fr}
  .doc-nav{position:static;display:flex;gap:16px;flex-wrap:wrap}
  .detail{grid-template-columns:1fr}
  .replay-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tools{grid-template-columns:repeat(2,minmax(0,1fr))}
  .split{grid-template-columns:1fr}
  .mapwrap,.replay{grid-template-columns:1fr}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .auth{grid-template-columns:1fr}
  .perks{grid-template-columns:1fr}
  .doc-facts{grid-template-columns:1fr}
}
@media (max-width:680px){
  .minis{grid-template-columns:1fr}
  .opts3{grid-template-columns:1fr}
  .tools{grid-template-columns:1fr}
  .rank-top{grid-template-columns:1fr}
  .kpis{grid-template-columns:1fr}
  .match{grid-template-columns:auto 1fr;grid-template-areas:"rk main" ". nums"}
  .match-rk{grid-area:rk}
  .match-main{grid-area:main}
  .match-nums{grid-area:nums;margin-top:6px;flex-wrap:wrap}
  .player-stats{gap:16px}
  .search .select{flex:1 1 100%;width:100%}
}

/* ==================================================================
   页脚 · 公安备案（图标 + 备案号，接在 ICP 备案之后）
   ================================================================== */
.ft-legal .ft-beian{display:inline-flex;align-items:center;gap:4px;color:var(--t2);text-decoration:none}
.ft-legal .ft-beian img{width:18px;height:20px;object-fit:contain}

/* ==================================================================
   站内公告（小喇叭）：页头铃铛 + 顶部公告条
   ================================================================== */
.hd-bell{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;border-radius:999px;border:1px solid var(--line);
  background:var(--wash);color:var(--t2);cursor:pointer;padding:0;
  transition:background .15s,color .15s;
}
.hd-bell:hover{background:var(--blue-soft);color:var(--blue)}
.hd-bell svg{width:18px;height:18px;display:block}
.hd-bell-dot{
  position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:999px;
  background:var(--red);opacity:0;transform:scale(.4);transition:opacity .15s,transform .15s;
}
.hd-bell-dot.is-on{opacity:1;transform:scale(1)}
.hub-notice{
  position:fixed;left:0;right:0;z-index:99;
  transform:translateY(calc(-100% - 40px));visibility:hidden;
  transition:transform .25s ease,visibility .25s;
  pointer-events:none;
}
.hub-notice.is-on{transform:translateY(0);visibility:visible;pointer-events:auto}
.hub-notice-in{
  max-width:var(--shell);margin-inline:auto;background:var(--card);
  border:1px solid var(--blue-line);border-top:none;border-radius:0 0 var(--r-m) var(--r-m);
  padding:12px clamp(14px,2vw,20px) 14px;
  display:grid;gap:6px;
}
.hub-notice-head{display:flex;align-items:baseline;gap:10px;min-width:0}
.hub-notice-date{font-size:var(--t-xs);color:var(--t2);white-space:nowrap;font-family:var(--f-mono)}
.hub-notice-title{font-size:var(--t-body);font-weight:600;color:var(--ink);min-width:0;overflow-wrap:anywhere}
.hub-notice-close{
  margin-left:auto;flex-shrink:0;width:26px;height:26px;border-radius:var(--r-s);
  border:none;background:transparent;color:var(--t2);cursor:pointer;font-size:var(--t-h3);line-height:1;
}
.hub-notice-close:hover{background:var(--wash);color:var(--ink)}
.hub-notice-body{margin:0;font-size:var(--t-body);color:var(--t2);line-height:1.6;overflow-wrap:anywhere}
.hub-notice-acts{display:flex;justify-content:flex-end}
.hub-notice-read{padding:4px 12px;font-size:var(--t-xs)}
@media (max-width:560px){
  .hub-notice-in{margin-inline:8px;border-radius:0 0 var(--r-s) var(--r-s)}
}
