/* AIDR 擂台赛直播面板 — teal-hero 主题 · GGPoker 椭圆牌桌 · 三阵营
 * 与 /benchmark 同设计语言: 近黑带 teal 底 + teal 品牌主色 + 毛玻璃 + 流转发光边框。
 * 阵营色 AIDR=teal / 原生=金 / GTO=紫。注意: 所有类名/data-attr 被 app.js 读写, 仅换色不改名。 */
:root {
  /* 背景层级 (近黑带 teal 调) */
  --bg: #0A0E0D; --bg-1: #12161A; --bg-2: #1A1A1E; --bg-3: #24242A;
  /* 发丝描边 (teal 发丝) */
  --line: rgba(86,234,225,.10); --line-2: rgba(86,234,225,.20);
  /* 文字三档 */
  --tx: #F2FFFE; --tx-2: #A0A0AB; --tx-3: #8A8A95;  /* tx-3 提亮: 旧 #6A6A75 ~3.3:1 不达 AA (Codex P1), 次要文字/feed 理由可读性 */
  /* 阵营色: AIDR=teal (品牌主色) / 原生=金 / GTO=紫 + 各自淡底 */
  --aidr: #56EAE1; --aidr-d: rgba(86,234,225,.13);
  --raw:  #E0A04D; --raw-d:  rgba(224,160,77,.14);
  --gto:  #A78BFA; --gto-d:  rgba(167,139,250,.14);
  /* 语义色 */
  --pos: #3FB950; --neg: #F0616D;
  /* 品牌高亮 (原金色退役 → 全量重指向 teal; 牌桌点缀/底池/行动光晕沿用 --gold 引用) */
  --gold: #56EAE1;
  /* 牌毡: 深 teal (与 --glass-hero 同色系, 高级且贴品牌) */
  --felt-1: #0E3B36; --felt-2: #07211E; --felt-rim: #04100E;
  /* 玻璃层 (glassmorphism): 半透明卡底 + backdrop blur, 让背景光晕糊出质感 */
  --glass-2: rgba(26,26,30,.55); --glass-1: rgba(18,22,26,.55); --glass-hero: rgba(16,99,95,.22);
  --glass-blur: saturate(135%) blur(18px); --glass-blur-soft: saturate(125%) blur(14px);
  --hero-tint: rgba(16,99,95,.20); --glow: rgba(86,234,225,.12);
  /* 字体: 正文 Inter / 标题·显示数字 Poppins / 数据等宽 JetBrains Mono */
  --display: Poppins, Inter, -apple-system, system-ui, 'PingFang SC', 'Microsoft YaHei', sans-serif;
  /* 尺度 */
  --r: 16px; --r-s: 11px; --r-xs: 8px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; }
body {
  position: relative;
  color: var(--tx); font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
  font-size: 15px; line-height: 1.5; letter-spacing: -.01em; min-height: 100vh; padding: 18px 22px 36px;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  /* 极淡 teal 径向光晕: 给毛玻璃的 backdrop blur 提供可糊内容 (纯黑上 blur 无效)。非 fixed → iOS Safari 不抖 */
  background-color: var(--bg);
  background-image:
    radial-gradient(820px 620px at 16% -6%, rgba(86,234,225,.10), transparent 60%),
    radial-gradient(680px 560px at 92% 8%, rgba(16,99,95,.16), transparent 58%),
    radial-gradient(900px 700px at 78% 96%, rgba(60,120,140,.07), transparent 62%);
  background-repeat: no-repeat;
}
/* 极淡噪点 (z-index:-1 → 压在光晕之上、内容之下; 不挡交互) */
body::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; opacity: .35;
  background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNjAnIGhlaWdodD0nMTYwJz48ZmlsdGVyIGlkPSduJz48ZmVUdXJidWxlbmNlIHR5cGU9J2ZyYWN0YWxOb2lzZScgYmFzZUZyZXF1ZW5jeT0nLjknIG51bU9jdGF2ZXM9JzInIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLz48ZmVDb2xvck1hdHJpeCB0eXBlPSdzYXR1cmF0ZScgdmFsdWVzPScwJy8+PC9maWx0ZXI+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI24pJyBvcGFjaXR5PScuMDQnLz48L3N2Zz4=");
}
.num { font-family: 'JetBrains Mono', ui-monospace, monospace; font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; }
.muted { color: var(--tx-3); font-weight: 400; }
.r { text-align: right; }

/* ---- 流转发光边框 (绕整张卡, 取代旧顶部静态色条) ----
   ::before 铺满卡, 画一圈 conic-gradient, 用 border-box 减 padding-box 的 mask 镂空内部 → 只剩
   padding 宽度的环 (边框). 起始角 --bd-angle 缓慢旋转 → 一道柔光沿周长流转。克制不霓虹。
   @property 注册才能补间; 不支持时角度不变 → 退化为静态发光环 (不闪)。 */
@property --bd-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
@keyframes spin-border { to { --bd-angle: 360deg; } }
/* (流转环直接实现在 .sb-faction::before, 见记分牌区) */

/* ---------- header ---------- */
.hdr { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; gap: 16px; flex-wrap: wrap; }
.hdr-brand { display: flex; align-items: center; gap: 14px; }
.hdr-logo { font-family: var(--display); font-weight: 700; font-size: 18px; letter-spacing: .1em;
  color: #06100E; background: linear-gradient(135deg, var(--aidr), #2FB9B0); padding: 7px 13px; border-radius: var(--r-xs);
  box-shadow: 0 0 18px var(--glow); }
.hdr-titles h1 { font-family: var(--display); font-size: 20px; font-weight: 700; letter-spacing: -.01em; }
.hdr-sub { font-size: 12.5px; color: var(--tx-2); margin-top: 1px; }
.hdr-status { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.status-meta { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 12.5px; color: var(--tx-3); }
.lang-toggle { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 12px; font-weight: 700; color: var(--tx-2);
  background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur-soft); backdrop-filter: var(--glass-blur-soft);
  border: 1px solid var(--line-2); border-radius: var(--r-xs); padding: 7px 11px; cursor: pointer;
  text-decoration: none; transition: color .15s, border-color .15s, background .15s; }
.lang-toggle:hover { color: var(--tx); border-color: var(--aidr); background: var(--aidr-d); }
.status-pill { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600;
  padding: 7px 14px; border-radius: 999px; border: 1px solid var(--line-2); background: var(--glass-2);
  -webkit-backdrop-filter: var(--glass-blur-soft); backdrop-filter: var(--glass-blur-soft); }
.status-pill .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--tx-3); }
.status-pill.is-ok { color: var(--pos); border-color: rgba(63,185,80,.4); background: rgba(63,185,80,.1); }
.status-pill.is-ok .dot { background: var(--pos); box-shadow: 0 0 0 0 rgba(63,185,80,.6); animation: pulse 2s infinite; }
.status-pill.is-stale { color: var(--raw); border-color: rgba(224,160,77,.4); background: rgba(224,160,77,.1); }
.status-pill.is-stale .dot { background: var(--raw); }
.status-pill.is-down { color: var(--neg); border-color: rgba(240,97,109,.4); background: rgba(240,97,109,.1); }
.status-pill.is-down .dot { background: var(--neg); }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(63,185,80,.5); } 70% { box-shadow: 0 0 0 7px rgba(63,185,80,0); } 100% { box-shadow: 0 0 0 0 rgba(63,185,80,0); } }

/* #4: AI 熔断器跳闸警报条 (平时 hidden) */
.alert-banner { background: rgba(240,97,109,.14); border: 1px solid var(--neg); color: var(--neg); border-radius: var(--r-s); padding: 11px 16px; margin-bottom: 14px; font-size: 14px; font-weight: 700; text-align: center; }
/* ---------- scoreboard: 三阵营 = 带流转边框的玻璃迷你卡 ---------- */
.scoreboard { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; align-items: stretch; margin-bottom: 16px; }
.scoreboard.has-gto { grid-template-columns: repeat(3, 1fr); }
.sb-faction { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 16px 12px 14px;
  border-radius: var(--r); position: relative; overflow: hidden;
  background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); box-shadow: 0 1px 3px rgba(0,0,0,.45); }
/* ADR-0025: hidden 属性要真隐藏 (flex 默认会覆盖 display:none) — 6-max 后无 GTO data 时 sbGto 必须不占位 */
.sb-faction[hidden] { display: none; }
/* 流转环 (替代旧顶部色条): 每阵营色 */
.sb-faction::before {
  content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit; padding: 1.5px;
  background: conic-gradient(from var(--bd-angle, 0deg),
    transparent 0deg, var(--ring-dim) 40deg, var(--ring) 90deg, var(--ring-dim) 140deg, transparent 200deg, transparent 360deg);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  animation: spin-border 7s linear infinite; pointer-events: none;
}
.sb-faction > * { position: relative; z-index: 1; }
/* mask 合成不支持时 (老浏览器): 不画环, 退回卡自身 1px 描边 (graceful) */
@supports not ((-webkit-mask-composite: xor) or (mask-composite: exclude)) {
  .sb-faction::before { display: none; }
}
.sb-faction[data-team="raw"] { --ring: rgba(224,160,77,.55); --ring-dim: rgba(224,160,77,.16); }
.sb-faction[data-team="gto"] { --ring: rgba(167,139,250,.55); --ring-dim: rgba(167,139,250,.16); }
/* AIDR 英雄卡: teal 玻璃 tint + 环更亮一档 + 略快 (6s) */
.sb-faction[data-team="aidr"] {
  --ring: rgba(86,234,225,.85); --ring-dim: rgba(86,234,225,.22);
  background: linear-gradient(180deg, rgba(86,234,225,.10), transparent 62%), var(--glass-hero);
  border-color: rgba(86,234,225,.30); box-shadow: 0 1px 3px rgba(0,0,0,.45), 0 0 0 1px var(--glow), 0 8px 32px -12px var(--glow); }
.sb-faction[data-team="aidr"]::before { animation-duration: 6s; }
.sbf-tag { font-size: 13px; font-weight: 700; color: var(--tx-2); letter-spacing: .02em; }
.sb-faction[data-team="aidr"] .sbf-tag { color: var(--aidr); }
.sb-faction[data-team="raw"] .sbf-tag { color: var(--raw); }
.sb-faction[data-team="gto"] .sbf-tag { color: var(--gto); }
.sbf-net { font-family: var(--display); font-size: 40px; font-weight: 700; line-height: 1.05; font-variant-numeric: tabular-nums; }
.sbf-net.pos { color: var(--pos); } .sbf-net.neg { color: var(--neg); }
.sbf-unit { font-size: 12px; color: var(--tx-3); }
.sb-verdict { grid-column: 1 / -1; text-align: center; font-size: 13.5px; color: var(--tx-2);
  background: var(--glass-1); -webkit-backdrop-filter: var(--glass-blur-soft); backdrop-filter: var(--glass-blur-soft);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 11px 16px; }

/* ---------- stage: 牌桌 + 决策流 ---------- */
.stage { display: grid; grid-template-columns: minmax(0, 1.62fr) minmax(280px, .9fr); gap: 16px; margin-bottom: 16px; }
@media (max-width: 1080px) { .stage { grid-template-columns: minmax(0, 1fr); } }
/* 网格子项可收缩 (min-width:0): 否则 nowrap 内容 (排行榜 9 列表) 撑爆列 → 整页横向溢出 */
.felt-wrap, .feed-panel, .card, .metric { min-width: 0; }

/* felt-wrap: 玻璃框 (无 overflow:hidden — 座位 pod 需溢出到牌桌外缘的 rail 上) */
.felt-wrap { background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 26px; box-shadow: 0 1px 3px rgba(0,0,0,.45); }
.felt { position: relative; width: 100%; aspect-ratio: 16 / 10;
  border-radius: 46% / 60%;
  background: radial-gradient(120% 120% at 50% 38%, var(--felt-1), var(--felt-2) 70%);
  border: 9px solid var(--felt-rim);
  box-shadow: inset 0 0 60px rgba(0,0,0,.55), inset 0 0 0 2px rgba(86,234,225,.12), 0 10px 40px rgba(0,0,0,.4);
}
.felt::after { content: "AIDR ARENA"; position: absolute; top: calc(48% - 124px); left: 50%; transform: translateX(-50%);
  font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 12px; letter-spacing: .42em; color: rgba(86,234,225,.14);
  font-weight: 700; pointer-events: none; }
@media (max-width: 760px) { .felt::after { display: none; } }
.felt-center { position: absolute; top: 48%; left: 50%; transform: translate(-50%, -50%);
  display: flex; flex-direction: column; align-items: center; gap: 14px; }
.board { display: flex; gap: 7px; min-height: 88px; align-items: center; }

/* GGPoker 风四色纯卡面: 黑桃黑/红心红/方块蓝/梅花绿, 白字 (扑克 UX 标准四色, 不 teal 化) */
.gcard { position: relative; border-radius: 7px; color: #fff; font-weight: 800; overflow: hidden;
  box-shadow: 0 3px 9px rgba(0,0,0,.5); flex-shrink: 0; }
.gc-corner { position: absolute; top: .1em; left: .16em; display: flex; flex-direction: column; align-items: center;
  font-size: .72em; line-height: .96; letter-spacing: -.02em; }
.gc-corner i { font-style: normal; font-size: .98em; }
.gc-big { position: absolute; right: .13em; bottom: .03em; font-size: 1.5em; line-height: .95; letter-spacing: -.04em; }
.gc-s { background: #2a2a30; } .gc-h { background: #d8403a; } .gc-d { background: #2c7fd6; } .gc-c { background: #18a04f; }
.board .gcard { width: 62px; height: 88px; font-size: 28px; }
.pot-chips { display: flex; gap: 4px; height: 20px; align-items: flex-end; }
.pot-chips i { width: 16px; height: 16px; border-radius: 50%; background: radial-gradient(circle at 40% 35%, #BFF7F2, var(--gold));
  border: 2px dashed rgba(0,0,0,.32); box-shadow: 0 2px 4px rgba(0,0,0,.4); }
.pot { display: inline-flex; align-items: baseline; gap: 6px; background: rgba(4,16,14,.78);
  border: 1px solid rgba(86,234,225,.3); border-radius: 999px; padding: 7px 20px; box-shadow: 0 3px 12px rgba(0,0,0,.45); }
.pot-label { font-size: 11px; color: var(--gold); letter-spacing: .08em; }
.pot .num { font-size: 22px; font-weight: 700; color: var(--gold); }
.pot-unit { font-size: 11px; color: var(--tx-3); }

/* 座位 (绝对定位, JS 计算角度)。GGPoker 布局: 手牌浮在框上方, 框只圈名牌+筹码 */
.seat { position: absolute; width: 150px; transform: translate(-50%, -50%);
  display: flex; flex-direction: column; align-items: center; transition: opacity .3s; }
.seat-cards { display: flex; justify-content: center; gap: 3px; height: 54px; margin-bottom: -8px; z-index: 2; }
.seat-cards .gcard { width: 38px; height: 54px; font-size: 17px; }
.hole-back { width: 38px; height: 54px; border-radius: 5px;
  background: repeating-linear-gradient(45deg, #0E3B36, #0E3B36 4px, #082420 4px, #082420 8px);
  border: 1px solid rgba(86,234,225,.32); box-shadow: 0 3px 8px rgba(0,0,0,.5); }
.seat-pod { background: var(--bg-2); border: 1px solid var(--line-2); border-radius: var(--r-s);
  padding: 11px 10px 8px; position: relative; box-shadow: 0 4px 14px rgba(0,0,0,.45); width: 100%; text-align: center; }
.seat[data-team="aidr"] .seat-pod { border-color: rgba(86,234,225,.55); }
.seat[data-team="raw"] .seat-pod { border-color: rgba(224,160,77,.5); }
.seat[data-team="gto"] .seat-pod { border-color: rgba(167,139,250,.5); }
.seat.is-acting .seat-pod { box-shadow: 0 0 0 2px var(--gold), 0 0 26px rgba(86,234,225,.55); animation: act-glow 1.6s ease-in-out infinite; }
@keyframes act-glow { 0%,100% { box-shadow: 0 0 0 2px var(--gold), 0 0 18px rgba(86,234,225,.4); } 50% { box-shadow: 0 0 0 2px var(--gold), 0 0 32px rgba(86,234,225,.75); } }
.seat.is-folded { opacity: .4; }
.seat-name { font-size: 12px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seat[data-team="aidr"] .seat-name { color: var(--aidr); }
.seat[data-team="raw"] .seat-name { color: var(--raw); }
.seat[data-team="gto"] .seat-name { color: var(--gto); }
.seat-stack { font-size: 12.5px; margin-top: 1px; }
.seat-stack .num { font-weight: 700; color: var(--tx); } .seat-stack .bb { color: var(--tx-3); font-size: 10px; margin-left: 2px; }
.seat-think { display: none; align-items: center; justify-content: center; gap: 4px; font-size: 10.5px;
  font-weight: 700; color: var(--gold); height: 12px; margin-top: 2px; }
.seat.is-acting .seat-think { display: flex; }
.seat-think .td { width: 4px; height: 4px; border-radius: 50%; background: var(--gold); animation: think-dot 1.2s infinite; }
.seat-think .td:nth-child(2) { animation-delay: .2s; } .seat-think .td:nth-child(3) { animation-delay: .4s; }
@keyframes think-dot { 0%,60%,100% { opacity: .25; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-3px); } }
/* 动作文字徽标: 桌上每座一眼看懂最后干了啥 (加注/跟注/弃牌/过牌 + 尺寸) */
.seat-act { margin-top: 3px; min-height: 13px; text-align: center; font-size: 10.5px; font-weight: 700; letter-spacing: .3px; color: var(--tx-2); transition: opacity .18s; }
.seat-act:empty { opacity: 0; }
.seat-act[data-act="raise"], .seat-act[data-act="bet"], .seat-act[data-act="all_in"] { color: var(--gold); }
.seat-act[data-act="call"] { color: var(--aidr); }
.seat-act[data-act="fold"] { color: var(--tx-3); }
.bet-chip { position: absolute; transform: translate(-50%, -50%); display: none; align-items: center; gap: 5px;
  background: rgba(4,16,14,.82); border: 1px solid rgba(86,234,225,.3); border-radius: 999px; padding: 2px 9px 2px 4px; z-index: 1; }
.bet-chip.show { display: inline-flex; }
.bet-chip i { width: 14px; height: 14px; border-radius: 50%; background: radial-gradient(circle at 40% 35%, #BFF7F2, var(--gold));
  border: 2px dashed rgba(0,0,0,.32); }
.bet-chip .num { font-size: 12px; font-weight: 700; color: var(--gold); }
.fly-chip { position: absolute; width: 15px; height: 15px; border-radius: 50%; transform: translate(-50%, -50%); z-index: 5;
  background: radial-gradient(circle at 40% 35%, #BFF7F2, var(--gold)); border: 2px dashed rgba(0,0,0,.3);
  box-shadow: 0 2px 5px rgba(0,0,0,.5); }
.seat-pos { position: absolute; top: -9px; right: -8px; width: 22px; height: 22px; border-radius: 50%;
  font-size: 10px; font-weight: 800; display: none; align-items: center; justify-content: center;
  color: #06100E; border: 2px solid var(--bg-1); }
.seat-pos.btn { display: flex; background: #fff; }
.seat-pos.sb { display: flex; background: #8aa0b5; }
.seat-pos.bb { display: flex; background: var(--gold); }

/* 决策流 */
.feed-panel { background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 16px 18px; display: flex; flex-direction: column; min-height: 0;
  box-shadow: 0 1px 3px rgba(0,0,0,.45); }
.panel-title { font-size: 14px; font-weight: 700; display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.panel-title small { margin-left: auto; }
.dot-live { width: 7px; height: 7px; border-radius: 50%; background: var(--neg); animation: pulse-r 1.4s infinite; }
@keyframes pulse-r { 0%,100% { opacity: 1; } 50% { opacity: .35; } }
.feed { display: flex; flex-direction: column; gap: 5px; overflow: hidden; max-height: 520px; }
.fi { display: grid; grid-template-columns: auto auto auto 1fr; align-items: center; gap: 9px;
  padding: 7px 9px; border-radius: var(--r-xs); background: rgba(26,26,30,.5); font-size: 13px; }
.fi-hand { color: var(--tx-3); font-size: 11px; grid-column: 1; }
.fi-chip { font-size: 11.5px; font-weight: 700; padding: 2px 8px; border-radius: 5px; white-space: nowrap; grid-column: 2; }
.fi-chip[data-team="aidr"] { color: var(--aidr); background: var(--aidr-d); }
.fi-chip[data-team="raw"] { color: var(--raw); background: var(--raw-d); }
.fi-chip[data-team="gto"] { color: var(--gto); background: var(--gto-d); }
.fi-action { font-size: 11px; font-weight: 700; letter-spacing: .03em; padding: 2px 7px; border-radius: 5px;
  grid-column: 3; justify-self: start; background: var(--bg); color: var(--tx-2); }
.fi-action.fold { color: var(--tx-3); }
.fi-action.raise, .fi-action.bet, .fi-action.all_in { color: var(--gold); background: rgba(86,234,225,.12); }
.fi-action.call, .fi-action.check { color: var(--aidr); }
.fi-say { grid-column: 4; color: var(--tx-3); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- 硬指标 ---------- */
.metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 16px; }
@media (max-width: 720px) { .metrics { grid-template-columns: 1fr; } }
.metric { background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 14px 16px; box-shadow: 0 1px 3px rgba(0,0,0,.45); }
.m-label { font-size: 13px; font-weight: 600; color: var(--tx-2); display: flex; justify-content: space-between; margin-bottom: 10px; }
.m-label small { color: var(--tx-3); font-weight: 400; }
.m-bars { display: flex; flex-direction: column; gap: 7px; }
.m-side { display: flex; align-items: center; gap: 9px; }
/* ADR-0025: m-gto 同 sb-faction[hidden] 同理 */
.m-side[hidden] { display: none; }
.m-val { font-size: 14px; font-weight: 700; min-width: 52px; }
.m-side:nth-child(1) .m-val { color: var(--aidr); } .m-side:nth-child(2) .m-val { color: var(--raw); }
.m-side:nth-child(3) .m-val { color: var(--gto); }   /* 第三阵营 GTO 数值色, 跟记分牌一致 */
.m-bar { flex: 1; height: 8px; background: var(--bg-2); border-radius: 4px; overflow: hidden; }
.m-bar i { display: block; height: 100%; width: 0; border-radius: 4px; transition: width .5s ease; }
.m-bar i[data-team="aidr"] { background: var(--aidr); } .m-bar i[data-team="raw"] { background: var(--raw); }
.m-bar i[data-team="gto"] { background: var(--gto); }

/* ---------- 累计层 ---------- */
.cumband { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 16px; }
@media (max-width: 1080px) { .cumband { grid-template-columns: minmax(0, 1fr); } }
.card { background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 16px 18px; box-shadow: 0 1px 3px rgba(0,0,0,.45); }
.lb-scroll { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.lb { width: 100%; border-collapse: collapse; font-size: 13px; }
.lb th { text-align: left; color: var(--tx-3); font-weight: 600; font-size: 11.5px; padding: 0 8px 9px; border-bottom: 1px solid var(--line-2); white-space: nowrap; }
.lb td { padding: 8px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.lb .r { text-align: right; }   /* 修对齐: 特异性 (0,2,0) 盖过 .lb th 的 left, 数字列表头+表体一致右对齐 */
.lb tr:last-child td { border-bottom: 0; }
.lb .chip { font-size: 12px; font-weight: 700; padding: 3px 9px; border-radius: 6px; }
.lb .chip[data-team="aidr"], .lb .chip.chip--aidr { color: var(--aidr); background: var(--aidr-d); }
.lb .chip[data-team="raw"], .lb .chip.chip--raw { color: var(--raw); background: var(--raw-d); }
.lb .chip[data-team="gto"], .lb .chip.chip--gto { color: var(--gto); background: var(--gto-d); }
.lb .pos { color: var(--pos); } .lb .neg { color: var(--neg); }
.ci-card { overflow: hidden; }
#cumChart { width: 100%; overflow: hidden; }
#cumChart .uplot, #cumChart canvas { max-width: 100%; }
.u-legend { display: none; }

/* ---------- footer ---------- */
.ftr { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-top: 18px;
  font-size: 11.5px; color: var(--tx-3); border-top: 1px solid var(--line-2); padding-top: 12px; }

/* ---------- 打法雷达 (每风格 AIDR vs 原生) ---------- */
.radars-band { margin-top: 16px; }
.radars { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 4px; }
.radar-card { background: var(--glass-2); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--line-2); border-radius: var(--r); padding: 14px 14px 12px; box-shadow: 0 1px 3px rgba(0,0,0,.45);
  display: flex; flex-direction: column; align-items: center; min-width: 0; }
.radar-title { font-family: var(--display); font-size: 14px; font-weight: 600; color: var(--tx); align-self: flex-start; }
.radar-svg { width: 100%; max-width: 230px; height: auto; overflow: visible; margin: 2px 0; }
.radar-axis { fill: var(--tx-2); font-size: 9px; font-family: 'JetBrains Mono', ui-monospace, monospace; }
.radar-legend { width: 100%; display: flex; flex-direction: column; gap: 5px; margin-top: 6px; }
.rl-row { display: flex; align-items: center; gap: 8px; font-size: 11px; flex-wrap: wrap; }
.rl-name { font-weight: 700; min-width: 40px; }
.rl-row[data-team="aidr"] .rl-name { color: var(--aidr); }
.rl-row[data-team="raw"] .rl-name { color: var(--raw); }
.rl-stat { color: var(--tx-3); font-size: 10px; letter-spacing: .02em; }
.rl-stat b { color: var(--tx); font-family: 'JetBrains Mono', ui-monospace, monospace; font-weight: 700; margin-left: 3px; }
.radar-empty { padding: 36px 0; font-size: 12px; }
@media (max-width: 880px) { .radars { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .radars { grid-template-columns: 1fr; gap: 11px; } .radar-svg { max-width: 260px; } }

/* ============================================================
   响应式 — 手机优化 (含 9 人桌缩放 · 排行榜横滑 · tap 目标≥44px)
   ============================================================ */
/* 平板 (≤880px): 记分牌不挤 */
@media (max-width: 880px) {
  .hdr-titles h1 { font-size: 18px; }
}

/* 手机 (≤560px) */
@media (max-width: 560px) {
  body { padding: 14px 15px 36px; }
  /* 顶栏: 品牌一行, 状态/导航自然换行; tap 目标拉高 */
  .hdr { gap: 10px; margin-bottom: 14px; }
  .hdr-titles h1 { font-size: 17px; }
  .hdr-sub { font-size: 11.5px; }
  .hdr-status { gap: 8px; width: 100%; }
  .lang-toggle { padding: 10px 12px; min-height: 44px; display: inline-flex; align-items: center; }
  .status-pill { padding: 9px 13px; min-height: 40px; }

  /* 记分牌: 单列竖叠; 流转边框放慢一档省电 */
  .scoreboard { grid-template-columns: 1fr; gap: 10px; }
  .scoreboard.has-gto { grid-template-columns: 1fr; }
  .sb-faction { flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: baseline; gap: 6px; padding: 13px 14px; }
  .sb-faction::before { animation-duration: 11s; }
  .sb-faction[data-team="aidr"]::before { animation-duration: 10s; }
  .sbf-tag { font-size: 12.5px; flex: 1 0 100%; text-align: center; }
  .sbf-net { font-size: 30px; }
  .sb-verdict { font-size: 12.5px; padding: 10px 13px; }

  /* 牌桌: 竖向给 9 座留空间 + 缩小座位 pod/手牌, 防重叠溢出。% 定位由 app.js 给, 不动。 */
  .felt-wrap { padding: 12px; }
  .felt { aspect-ratio: 5 / 6; }
  .felt-center { gap: 8px; }
  .board { gap: 5px; min-height: 62px; }
  .board .gcard { width: 44px; height: 62px; font-size: 20px; }
  .pot { padding: 5px 14px; } .pot .num { font-size: 18px; }
  .seat { width: clamp(74px, 25vw, 104px); }
  .seat-cards { height: 40px; margin-bottom: -7px; gap: 2px; }
  .seat-cards .gcard { width: 27px; height: 40px; font-size: 12px; }
  .hole-back { width: 27px; height: 40px; }
  .seat-pod { padding: 7px 6px 6px; }
  .seat-name { font-size: 10px; }
  .seat-stack { font-size: 10.5px; } .seat-stack .bb { font-size: 8.5px; }
  .seat-pos { width: 18px; height: 18px; font-size: 8.5px; top: -7px; right: -6px; }
  .seat-think { font-size: 9px; }

  /* 决策流: 牌桌下方, 限高不喧宾夺主 */
  .feed { max-height: 320px; }

  /* 排行榜: 9 列横滑 (容器 overflow-x), 不撑爆视口 */
  .lb { font-size: 12.5px; }
  .lb th, .lb td { padding: 7px 7px; }

  .ftr { font-size: 11px; }
}

/* 极窄 (≤380px) 微调: 牌桌更高 + 座位/牌再缩, 缓解 9 座横向拥挤 */
@media (max-width: 380px) {
  body { padding: 12px 12px 32px; }
  .hdr-titles h1 { font-size: 16px; }
  .sbf-net { font-size: 27px; }
  .felt { aspect-ratio: 3 / 4; }
  .felt-wrap { padding: 10px; }
  .seat { width: clamp(58px, 24vw, 82px); }
  .seat-pod { padding: 6px 5px 5px; }
  .seat-name { font-size: 9.5px; }
  .seat-stack { font-size: 9.5px; }
  .seat-cards { height: 32px; margin-bottom: -6px; }
  .seat-cards .gcard { width: 21px; height: 31px; font-size: 10px; }
  .hole-back { width: 21px; height: 31px; }
  .board { gap: 4px; min-height: 48px; }
  .board .gcard { width: 33px; height: 47px; font-size: 15px; }
  .pot { padding: 4px 12px; } .pot .num { font-size: 16px; }
}

/* prefers-reduced-motion: 流转边框 + 状态脉冲停转 */
@media (prefers-reduced-motion: reduce) {
  .sb-faction::before { animation: none; }
  .status-pill.is-ok .dot, .dot-live, .seat.is-acting .seat-pod, .seat-think .td { animation: none; }
}
