/* =============================================================================
 * U-RTP Orchestration Engine · Visual System
 * 设计语言：深空黑 + 数学蓝青 + 精密网格。近似"金融终端 × 学术论文"。
 * ============================================================================= */

:root{
  --bg:#05070d;
  --bg-1:#080b14;
  --bg-2:#0c111c;
  --bg-3:#111826;
  --panel:rgba(13,19,31,.72);
  --panel-solid:#0d131f;
  --line:rgba(120,160,220,.12);
  --line-2:rgba(120,160,220,.22);
  --txt:#dbe6f5;
  --txt-2:#8fa3bf;
  --txt-3:#5d6f8a;
  --cyan:#22d3ee;
  --blue:#3b82f6;
  --violet:#a78bfa;
  --green:#34d399;
  --amber:#fbbf24;
  --rose:#f43f5e;
  --pink:#f472b6;
  --mono:'JetBrains Mono',ui-monospace,Menlo,monospace;
  --sans:'Inter','PingFang SC','Microsoft YaHei',system-ui,sans-serif;
  --serif:'Noto Serif SC',serif;
  --nav-w:246px;
  --r:14px;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);color:var(--txt);font-family:var(--sans);
  font-size:15px;line-height:1.65;-webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body::before{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(1100px 620px at 78% -8%,rgba(34,211,238,.10),transparent 62%),
    radial-gradient(900px 560px at 6% 14%,rgba(167,139,250,.09),transparent 60%),
    radial-gradient(760px 500px at 50% 108%,rgba(59,130,246,.08),transparent 60%);
}

/* ---------------- 导航 ---------------- */
.side-nav{
  position:fixed;left:0;top:0;bottom:0;width:var(--nav-w);z-index:50;
  background:linear-gradient(175deg,#070a12,#0a0e18 60%,#070a12);
  border-right:1px solid var(--line);display:flex;flex-direction:column;
  padding:26px 0 18px;transition:transform .3s ease;
}
.nav-brand{padding:0 22px 22px;border-bottom:1px solid var(--line)}
.nav-logo{font-family:var(--mono);font-size:27px;font-weight:600;letter-spacing:.06em;color:#e8f2ff}
.nav-logo span{color:var(--cyan)}
.nav-sub{font-family:var(--mono);font-size:8.5px;letter-spacing:.24em;color:var(--txt-3);margin-top:5px}
.nav-ver{font-family:var(--mono);font-size:9.5px;color:var(--cyan);margin-top:9px;opacity:.85}
.nav-list{list-style:none;padding:16px 12px;flex:1;overflow-y:auto}
.nav-link{
  display:flex;align-items:center;gap:11px;padding:10px 13px;border-radius:9px;
  color:var(--txt-2);text-decoration:none;font-size:13.5px;font-weight:500;
  transition:.16s;margin-bottom:2px;
}
.nav-link i{width:17px;text-align:center;font-size:13px;opacity:.75}
.nav-link:hover{background:rgba(34,211,238,.07);color:var(--txt)}
.nav-link.active{background:linear-gradient(90deg,rgba(34,211,238,.16),rgba(34,211,238,.02));color:#fff;box-shadow:inset 2px 0 0 var(--cyan)}
.nav-link.active i{opacity:1;color:var(--cyan)}
.nav-foot{padding:14px 22px 0;border-top:1px solid var(--line)}
.nav-badge{font-family:var(--mono);font-size:9px;color:var(--green);letter-spacing:.1em}
/* CORE 徽标可点：这里是"引擎自省"区，访问日志放在同一语义位置 */
.nav-badge.clickable{cursor:pointer;display:inline-flex;align-items:center;gap:5px;
  padding:3px 7px;margin:-3px -7px;border-radius:6px;transition:.18s}
.nav-badge.clickable::after{content:'\f0e0';font-family:'Font Awesome 6 Free';font-weight:900;
  font-size:8px;opacity:.5}
.nav-badge.clickable:hover{background:rgba(52,211,153,.12);color:#6ee7b7}
.nav-badge.clickable:hover::after{opacity:1}
.nav-badge.clickable:focus-visible{outline:1px solid var(--green);outline-offset:2px}

/* ===========================================================================
 * 访问记录面板
 * ======================================================================== */
.vp-mask{position:fixed;inset:0;z-index:9000;display:none;
  background:rgba(3,6,12,.78);backdrop-filter:blur(6px);
  padding:clamp(12px,4vh,48px) clamp(10px,4vw,48px)}
.vp-mask.show{display:flex;align-items:center;justify-content:center}
.vp-win{width:min(1120px,100%);max-height:100%;display:flex;flex-direction:column;
  background:var(--panel-solid);border:1px solid var(--line-2);border-radius:var(--r);
  box-shadow:0 30px 90px rgba(0,0,0,.6);overflow:hidden}
.vp-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:14px 18px;border-bottom:1px solid var(--line);background:var(--bg-2)}
.vp-head h3{margin:0;font-size:14px;font-weight:600;color:var(--txt);letter-spacing:.02em}
.vp-head h3 i{color:var(--green);margin-right:6px}
.vp-actions{margin-left:auto;display:flex;gap:6px}
.vp-btn{background:rgba(120,160,220,.08);border:1px solid var(--line-2);color:var(--txt-2);
  font-family:var(--sans);font-size:11.5px;padding:5px 11px;border-radius:7px;cursor:pointer;
  transition:.16s;white-space:nowrap}
.vp-btn:hover{background:rgba(34,211,238,.14);color:var(--cyan);border-color:rgba(34,211,238,.4)}
.vp-btn.on{background:rgba(34,211,238,.18);color:var(--cyan);border-color:rgba(34,211,238,.55)}
.vp-btn.vp-x:hover{background:rgba(244,63,94,.16);color:var(--rose);border-color:rgba(244,63,94,.45)}

.vp-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1px;
  background:var(--line);border-bottom:1px solid var(--line)}
.vp-stat{background:var(--bg-1);padding:11px 14px}
.vp-stat b{display:block;font-family:var(--mono);font-size:17px;color:var(--cyan);
  font-variant-numeric:tabular-nums;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-stat span{display:block;font-size:10px;color:var(--txt-3);margin-top:2px;letter-spacing:.04em}

.vp-body{flex:1;overflow:auto;padding:14px 16px}
.vp-empty{text-align:center;padding:52px 16px;color:var(--txt-3)}
.vp-empty i{font-size:26px;color:var(--txt-3);opacity:.55}
.vp-empty p{margin:12px 0 0;font-size:13px}
.vp-empty .vp-dim{font-size:11.5px;opacity:.68;margin-top:6px}

/* 会话卡：一个人连看多页 = 一次访问，不摊平 */
.vp-sess{border:1px solid var(--line);border-radius:10px;background:var(--bg-1);
  padding:11px 13px;margin-bottom:10px}
.vp-sess-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.vp-ip{font-family:var(--mono);font-size:13px;color:var(--green);font-weight:600}
.vp-geo{font-size:11.5px;color:var(--txt-2)}
.vp-tag{font-size:9.5px;font-family:var(--mono);color:var(--txt-3);
  border:1px solid var(--line-2);border-radius:4px;padding:1px 5px;letter-spacing:.04em}
.vp-cnt{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--amber);
  font-variant-numeric:tabular-nums}
.vp-org,.vp-ref{font-size:10.5px;color:var(--txt-3);margin-top:4px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-steps{list-style:none;margin:9px 0 0;padding:0;border-top:1px dashed var(--line);padding-top:8px}
.vp-step{display:grid;grid-template-columns:20px 108px 1fr 138px 54px 74px;gap:8px;
  align-items:center;padding:4px 0;font-size:11.5px}
.vp-idx{width:18px;height:18px;border-radius:50%;background:rgba(34,211,238,.14);
  color:var(--cyan);font-family:var(--mono);font-size:9.5px;display:flex;
  align-items:center;justify-content:center}
.vp-pg{font-family:var(--mono);font-size:11px;color:var(--blue)}
.vp-ttl{color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-meta{font-family:var(--mono);font-size:10.5px;color:var(--txt-3);
  font-variant-numeric:tabular-nums}
.vp-scroll{position:relative;height:13px;border-radius:3px;background:rgba(120,160,220,.1);
  overflow:hidden;display:flex;align-items:center}
.vp-scroll i{position:absolute;left:0;top:0;bottom:0;background:rgba(52,211,153,.34)}
.vp-scroll b{position:relative;font-family:var(--mono);font-size:9px;color:var(--txt-2);
  padding-left:5px;font-weight:500}

/* 时间线表格 */
.vp-tablewrap{overflow:auto;border:1px solid var(--line);border-radius:9px}
.vp-table{width:100%;border-collapse:collapse;font-size:11.5px}
.vp-table th{background:var(--bg-2);color:var(--txt-3);font-weight:500;font-size:10px;
  text-align:left;padding:8px 10px;letter-spacing:.05em;position:sticky;top:0;
  border-bottom:1px solid var(--line-2)}
.vp-table td{padding:7px 10px;border-bottom:1px solid rgba(120,160,220,.07);color:var(--txt-2)}
.vp-table tr:hover td{background:rgba(120,160,220,.05)}
.vp-mono{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:10.5px}
.vp-strong{color:var(--green)}

.vp-foot{padding:9px 16px;border-top:1px solid var(--line);background:var(--bg-2);
  font-size:10.5px;color:var(--txt-3);line-height:1.55}

@media(max-width:820px){
  .vp-step{grid-template-columns:18px 1fr;row-gap:2px}
  .vp-step .vp-meta,.vp-step .vp-scroll{grid-column:2}
  .vp-stats{grid-template-columns:repeat(2,1fr)}
}
.nav-conf{font-family:var(--mono);font-size:8px;color:var(--txt-3);letter-spacing:.14em;margin-top:6px}
.nav-toggle{
  display:none;position:fixed;top:14px;left:14px;z-index:60;width:42px;height:42px;
  border-radius:10px;background:var(--bg-2);border:1px solid var(--line-2);color:var(--txt);cursor:pointer;
}

/* ---------------- 布局 ---------------- */
.main{margin-left:var(--nav-w);position:relative;z-index:1;padding:0 34px 90px}
.section{max-width:1500px;margin:0 auto;padding:64px 0 26px;scroll-margin-top:20px}
.hero-section{padding-top:52px;position:relative}
.grid-bg{
  position:absolute;inset:-40px -40px auto;height:520px;opacity:.3;
  background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:52px 52px;mask-image:linear-gradient(#000,transparent 78%);
  -webkit-mask-image:linear-gradient(#000,transparent 78%);
}

/* ---------------- Hero ---------------- */
.hero{position:relative;padding:14px 0 34px;max-width:1080px}
.hero-eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.2em;color:var(--cyan);opacity:.85;margin-bottom:20px}
.hero-title{font-family:var(--serif);font-size:clamp(31px,4.1vw,54px);font-weight:700;line-height:1.2;letter-spacing:-.01em}
.hero-title-accent{
  background:linear-gradient(100deg,var(--cyan),var(--violet) 55%,var(--pink));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}
.hero-lead{margin-top:20px;font-size:16px;color:var(--txt-2);max-width:900px;line-height:1.8}
.hero-lead strong{color:var(--txt);font-weight:600}
.hero-lead em{color:var(--cyan);font-style:normal;font-weight:600}
.hero-pills{display:flex;flex-wrap:wrap;gap:9px;margin-top:24px}
.pill{
  font-family:var(--mono);font-size:11px;padding:6px 13px;border-radius:99px;
  border:1px solid var(--line-2);background:rgba(34,211,238,.05);color:var(--txt-2);
}
.pill i{color:var(--cyan);margin-right:5px;font-size:10px}

/* =============================================================================
 * 日常运营数据看板 (#dashboard)
 * ============================================================================= */
.dash-section{position:relative;padding-top:38px}
.dash-head{position:relative;z-index:2;max-width:1180px}
.dash-live{
  display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);
  font-size:9.5px;letter-spacing:.22em;color:var(--green);
  padding:5px 13px;border-radius:99px;border:1px solid rgba(52,211,153,.3);
  background:rgba(52,211,153,.07);
}
.live-dot{
  width:7px;height:7px;border-radius:50%;background:var(--green);
  box-shadow:0 0 0 0 rgba(52,211,153,.6);animation:livePulse 1.9s infinite;
}
@keyframes livePulse{
  0%{box-shadow:0 0 0 0 rgba(52,211,153,.55)}
  70%{box-shadow:0 0 0 8px rgba(52,211,153,0)}
  100%{box-shadow:0 0 0 0 rgba(52,211,153,0)}
}
.dash-title{
  font-family:var(--serif);font-size:40px;font-weight:700;
  letter-spacing:-.015em;margin:15px 0 12px;line-height:1.2;
}
.dash-lead{font-size:14.5px;color:var(--txt-2);line-height:1.85;max-width:960px}
.dash-lead strong{color:var(--cyan);font-weight:600}

/* 控制条 */
.dash-ctrl{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));
  gap:15px;align-items:end;margin-top:24px;padding:18px 20px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  backdrop-filter:blur(9px);
}
.dc-item{display:flex;flex-direction:column;gap:7px;min-width:0}
.dc-item>span{font-family:var(--mono);font-size:10px;color:var(--txt-3);letter-spacing:.08em}
.dc-item select,.dc-item input[type=text]{
  background:var(--bg-3);border:1px solid var(--line-2);color:var(--txt);
  border-radius:8px;padding:8px 10px;font-size:12px;font-family:var(--mono);outline:none;width:100%;
}
.dc-item select:focus,.dc-item input[type=text]:focus{border-color:var(--cyan)}
.dc-item input[type=range]{
  -webkit-appearance:none;appearance:none;height:4px;border-radius:3px;width:100%;
  background:linear-gradient(90deg,rgba(34,211,238,.55),rgba(34,211,238,.14));outline:none;cursor:pointer;
}
.dc-item input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--cyan);
  border:2px solid #06121a;box-shadow:0 0 0 3px rgba(34,211,238,.18);cursor:pointer;
}
.dc-item input[type=range]::-moz-range-thumb{
  width:14px;height:14px;border-radius:50%;background:var(--cyan);border:2px solid #06121a;cursor:pointer;
}
.dc-item output{font-family:var(--mono);font-size:11px;color:var(--cyan)}
.btn-run{
  background:linear-gradient(100deg,var(--cyan),var(--blue));color:#04121a;border:none;
  border-radius:9px;padding:11px 18px;font-size:12.5px;font-weight:700;cursor:pointer;
  font-family:var(--sans);display:inline-flex;align-items:center;justify-content:center;
  gap:8px;transition:.18s;height:38px;
}
.btn-run:hover{filter:brightness(1.12);transform:translateY(-1px)}
.btn-run:disabled{opacity:.5;cursor:wait;transform:none}

/* 日期回放条 */
.dash-daybar{
  display:flex;align-items:center;gap:16px;margin-top:16px;padding:13px 20px;
  background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:11px;flex-wrap:wrap;
}
.daybar-left{display:flex;align-items:center;gap:11px;flex-shrink:0;flex-wrap:wrap}
.daybar-label{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.1em}
.daybar-left strong{font-family:var(--mono);font-size:16px;color:var(--cyan)}
.phase-chip,.event-chip{
  font-family:var(--mono);font-size:10px;padding:3px 10px;border-radius:99px;
  border:1px solid var(--line-2);white-space:nowrap;
}
.event-chip{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.35);color:var(--amber)}
.event-chip i{margin-right:5px}
#ops-scrub{
  -webkit-appearance:none;appearance:none;flex:1;min-width:200px;height:5px;border-radius:3px;
  background:linear-gradient(90deg,rgba(34,211,238,.6),rgba(167,139,250,.35));outline:none;cursor:pointer;
}
#ops-scrub::-webkit-slider-thumb{
  -webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#e8f2ff;
  border:2px solid var(--cyan);box-shadow:0 0 10px rgba(34,211,238,.5);cursor:pointer;
}
#ops-scrub::-moz-range-thumb{
  width:16px;height:16px;border-radius:50%;background:#e8f2ff;border:2px solid var(--cyan);cursor:pointer;
}
.btn-mini{
  width:34px;height:34px;border-radius:8px;flex-shrink:0;cursor:pointer;
  background:rgba(34,211,238,.1);border:1px solid rgba(34,211,238,.32);color:var(--cyan);
  display:inline-flex;align-items:center;justify-content:center;font-size:12px;transition:.16s;
}
.btn-mini:hover{background:rgba(34,211,238,.2)}

/* 运营 KPI */
.dash-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:13px;margin-top:18px}
.okpi{
  --kc:var(--cyan);
  background:linear-gradient(160deg,rgba(16,23,37,.92),rgba(9,13,21,.92));
  border:1px solid var(--line);border-left:2px solid var(--kc);
  border-radius:11px;padding:14px 16px;position:relative;overflow:hidden;
}
.okpi::after{
  content:'';position:absolute;right:-30px;top:-30px;width:80px;height:80px;border-radius:50%;
  background:var(--kc);opacity:.06;
}
.okpi-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.okpi-top i{color:var(--kc);font-size:11px}
.okpi-k{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.09em;flex:1;min-width:0}
.kpi-delta{font-family:var(--mono);font-size:9.5px;padding:1px 6px;border-radius:4px;white-space:nowrap}
.kpi-delta.up{color:var(--green);background:rgba(52,211,153,.13)}
.kpi-delta.dn{color:var(--rose);background:rgba(244,63,94,.13)}
.okpi-v{font-family:var(--mono);font-size:23px;font-weight:600;margin-top:8px;color:var(--kc);line-height:1.15}
.okpi-sub{font-size:10.5px;color:var(--txt-3);margin-top:5px;line-height:1.55}

/* 图表尺寸 & 统计行 */
.chart-tall{height:400px}
.chart{width:100%;height:300px}
.stat-row{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));
  gap:9px;margin-top:15px;
}
.stat-cell{
  padding:9px 11px;border-radius:8px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);display:flex;flex-direction:column;gap:4px;min-width:0;
}
.stat-k{font-family:var(--mono);font-size:9px;color:var(--txt-3);letter-spacing:.06em;line-height:1.4}
.stat-v{font-family:var(--mono);font-size:13.5px;font-weight:600;color:var(--txt);word-break:break-all}

/* 小节标题 */
.sub-head{margin:30px 0 15px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.sub-head h3{font-size:17px;font-weight:600;display:flex;align-items:center;gap:9px}
.sub-head h3 i{color:var(--cyan);font-size:14px}
.sub-head p{font-size:12.5px;color:var(--txt-3);margin-top:6px;line-height:1.7}

/* 玩法卡片组 */
.game-deck{display:grid;grid-template-columns:repeat(auto-fill,minmax(288px,1fr));gap:15px}
.gcard{
  --gc:var(--cyan);
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:17px 18px;position:relative;overflow:hidden;transition:.2s;
  display:flex;flex-direction:column;
}
.gcard:hover{transform:translateY(-2px);border-color:var(--gc)}
.gcard::before{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--gc),transparent);
}
.gcard-head{display:flex;align-items:center;gap:12px;margin-bottom:11px}
.gcard-logo{
  width:42px;height:42px;border-radius:11px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;font-size:18px;
  color:var(--gc);background:color-mix(in srgb,var(--gc) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--gc) 34%,transparent);
}
.gcard-id{flex:1;min-width:0}
.gcard-id h4{font-size:15px;font-weight:600;line-height:1.25}
.gcard-en{font-family:var(--mono);font-size:9px;color:var(--txt-3);letter-spacing:.11em}
.gcard-flag{
  font-family:var(--mono);font-size:8.5px;padding:2px 7px;border-radius:4px;flex-shrink:0;
  background:rgba(244,63,94,.15);color:var(--rose);border:1px solid rgba(244,63,94,.3);
}
.gcard-desc{
  font-size:11.5px;color:var(--txt-2);line-height:1.65;margin-bottom:10px;
  min-height:38px;
}
.gcard-tags{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:12px}
.gtag{
  font-family:var(--mono);font-size:8.5px;padding:2px 7px;border-radius:4px;
  background:rgba(120,160,220,.1);color:var(--txt-3);border:1px solid var(--line);
}
.gcard-grid{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-bottom:13px;
}
.gc-cell{
  padding:7px 9px;border-radius:7px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);min-width:0;
}
.gc-k{display:block;font-family:var(--mono);font-size:8.5px;color:var(--txt-3);letter-spacing:.05em}
.gc-v{display:block;font-family:var(--mono);font-size:12.5px;font-weight:600;margin-top:2px;word-break:break-all}
.gc-v.pos{color:var(--green)}.gc-v.neg{color:var(--rose)}

/* 抽水条：±1σ 波动带可视化 */
.gcard-hold{margin-top:auto;padding-top:11px;border-top:1px solid var(--line)}
.gh-label{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.gh-label span{font-family:var(--mono);font-size:9px;color:var(--txt-3);letter-spacing:.07em}
.gh-label strong{font-family:var(--mono);font-size:14px}
.gh-label strong.pos{color:var(--green)}
.gh-label strong.neg{color:var(--rose)}
.gh-bar{position:relative;height:9px;border-radius:5px;background:rgba(0,0,0,.42);overflow:hidden;border:1px solid var(--line)}
.gh-band{position:absolute;top:0;bottom:0;background:color-mix(in srgb,var(--gc) 34%,transparent);border-radius:4px}
.gh-zero{position:absolute;top:-1px;bottom:-1px;width:1px;background:rgba(226,232,240,.45)}
.gh-mark{
  position:absolute;top:50%;width:8px;height:8px;border-radius:50%;
  transform:translate(-50%,-50%);background:#fff;border:2px solid var(--gc);
  box-shadow:0 0 7px color-mix(in srgb,var(--gc) 60%,transparent);
}
.gh-foot{display:flex;justify-content:space-between;margin-top:7px;font-family:var(--mono);font-size:9px;color:var(--txt-3)}
.gcard-jp{
  margin-top:11px;padding:7px 11px;border-radius:8px;font-family:var(--mono);font-size:10.5px;
  background:rgba(251,191,36,.13);border:1px solid rgba(251,191,36,.34);color:var(--amber);
}
.gcard-jp i{margin-right:6px}

/* 生命周期时间轴 */
.lifecycle{margin-top:8px}
.lc-track{position:relative;display:flex;height:56px;border-radius:10px;overflow:visible;margin-bottom:20px}
.lc-seg{
  --sc:var(--cyan);position:relative;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:2px;min-width:0;overflow:hidden;
  background:color-mix(in srgb,var(--sc) 17%,transparent);
  border-right:1px solid rgba(5,7,13,.7);
}
.lc-seg:first-child{border-radius:10px 0 0 10px}
.lc-seg:last-child{border-radius:0 10px 10px 0;border-right:none}
.lc-seg-label{font-size:11px;font-weight:600;color:var(--sc);white-space:nowrap}
.lc-seg-sub{font-family:var(--mono);font-size:8.5px;color:var(--txt-3);white-space:nowrap}
.lc-ev{
  position:absolute;top:-11px;transform:translateX(-50%);width:22px;height:22px;border-radius:50%;
  background:var(--bg-2);border:1px solid rgba(251,191,36,.5);color:var(--amber);
  display:flex;align-items:center;justify-content:center;font-size:9px;cursor:help;z-index:3;
}
.lc-ev:hover{background:rgba(251,191,36,.2)}
.lc-ev-tip{
  position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);white-space:nowrap;
  font-family:var(--mono);font-size:9.5px;padding:4px 9px;border-radius:5px;
  background:rgba(6,10,20,.96);border:1px solid rgba(251,191,36,.4);color:var(--amber);
  opacity:0;pointer-events:none;transition:.15s;z-index:5;
}
.lc-ev:hover .lc-ev-tip{opacity:1}
.lc-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:11px}
.lc-card{
  --sc:var(--cyan);padding:12px 14px;border-radius:10px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-top:2px solid var(--sc);
}
.lc-card-h{font-size:12.5px;font-weight:600;color:var(--sc);margin-bottom:8px}
.lc-card-r{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-top:4px}
.lc-card-r span{font-family:var(--mono);font-size:9.5px;color:var(--txt-3)}
.lc-card-r b{font-family:var(--mono);font-size:11.5px;color:var(--txt)}
.lc-card-r b.pos{color:var(--green)}
.lc-card-r b.neg{color:var(--rose)}

@media(max-width:900px){
  .dash-title{font-size:29px}
  .chart-tall{height:320px}
  .gcard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ---------------- 章节头 ---------------- */
.sec-head{display:flex;gap:20px;align-items:flex-start;margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--line)}
.sec-num{
  font-family:var(--mono);font-size:38px;font-weight:600;line-height:1;
  color:transparent;-webkit-text-stroke:1px rgba(34,211,238,.5);flex-shrink:0;
}
.sec-title{font-family:var(--serif);font-size:30px;font-weight:700;letter-spacing:-.01em}
.sec-sub{color:var(--txt-2);font-size:14.5px;margin-top:7px;max-width:1000px}
.sec-sub strong{color:var(--cyan);font-weight:600}

/* ---------------- 面板 ---------------- */
.panel-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:18px}
.panel{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:22px 24px;backdrop-filter:blur(9px);position:relative;overflow:hidden;
}
.panel::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(34,211,238,.4),transparent)}
.panel.span-2{grid-column:span 2}
.panel-title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:9px;margin-bottom:14px;flex-wrap:wrap}
.panel-title i{color:var(--cyan);font-size:13px}
.panel-hint{font-family:var(--mono);font-size:10px;color:var(--txt-3);font-weight:400;letter-spacing:.03em}
.panel-note{font-size:13px;color:var(--txt-2);margin-bottom:14px;line-height:1.75}
.panel-note strong{color:var(--txt)}
.sub-title{font-size:13px;font-weight:600;margin:18px 0 8px;color:var(--cyan)}

/* ---------------- 定理面板 ---------------- */
.theorem-panel{
  background:linear-gradient(150deg,rgba(34,211,238,.055),rgba(13,19,31,.8) 42%);
  border-color:rgba(34,211,238,.24);margin-top:18px;
}
.theorem-tag{
  display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.14em;
  padding:5px 12px;border-radius:5px;background:rgba(34,211,238,.14);
  color:var(--cyan);border:1px solid rgba(34,211,238,.3);margin-bottom:15px;
}
.theorem-body{font-size:14px;color:var(--txt);line-height:1.9;margin:11px 0}
.theorem-body strong{color:var(--cyan)}
.formula-block{
  margin:16px 0;padding:16px 18px;background:rgba(0,0,0,.36);border-radius:10px;
  border-left:2px solid var(--cyan);overflow-x:auto;text-align:center;
}
.formula-block.small{padding:11px 14px;margin:11px 0;font-size:.9em}
.theorem-why{
  margin-top:16px;padding:15px 17px;border-radius:10px;
  background:rgba(167,139,250,.07);border:1px solid rgba(167,139,250,.22);
  font-size:13.5px;color:var(--txt-2);line-height:1.85;
}
.theorem-why strong{color:var(--violet)}
.theorem-why em{color:var(--txt);font-style:normal;font-weight:600}
.katex{font-size:1.02em!important}
.katex-display{margin:0!important}

/* ---------------- KPI ---------------- */
.kpi-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:13px;margin:26px 0 8px}
.kpi{
  background:linear-gradient(160deg,rgba(16,23,37,.9),rgba(9,13,21,.9));
  border:1px solid var(--line);border-radius:12px;padding:15px 17px;position:relative;overflow:hidden;
}
.kpi-label{font-family:var(--mono);font-size:9.5px;letter-spacing:.13em;color:var(--txt-3);text-transform:uppercase}
.kpi-value{font-family:var(--mono);font-size:24px;font-weight:600;margin-top:7px;letter-spacing:-.01em;line-height:1.15}
.kpi-sub{font-size:11px;color:var(--txt-3);margin-top:5px;line-height:1.5}
.kpi-accent{position:absolute;right:-14px;top:-14px;font-size:52px;opacity:.05}
.c-cyan{color:var(--cyan)}.c-green{color:var(--green)}.c-amber{color:var(--amber)}
.c-rose{color:var(--rose)}.c-violet{color:var(--violet)}.c-blue{color:var(--blue)}.c-pink{color:var(--pink)}

/* ---------------- 架构图 ---------------- */
.arch-diagram{display:flex;flex-direction:column;gap:9px}
.arch-layer{
  display:flex;align-items:center;gap:14px;padding:13px 16px;border-radius:10px;
  background:rgba(0,0,0,.28);border:1px solid var(--line);position:relative;
}
.arch-layer:not(:last-child)::after{
  content:'▼';position:absolute;bottom:-11px;left:36px;font-size:8px;color:var(--cyan);opacity:.6;z-index:2;
}
.arch-idx{
  font-family:var(--mono);font-size:11px;width:26px;height:26px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;border-radius:7px;
  background:rgba(34,211,238,.12);color:var(--cyan);border:1px solid rgba(34,211,238,.28);
}
.arch-body{flex:1;min-width:0}
.arch-name{font-size:13.5px;font-weight:600}
.arch-desc{font-size:11.5px;color:var(--txt-3);margin-top:3px;line-height:1.55}
.arch-math{font-family:var(--mono);font-size:10px;color:var(--violet);flex-shrink:0;text-align:right;max-width:210px}

/* ---------------- 校验列表 ---------------- */
.verify-list{display:flex;flex-direction:column;gap:8px}
.verify-item{
  display:flex;align-items:flex-start;gap:11px;padding:10px 13px;border-radius:9px;
  background:rgba(0,0,0,.26);border:1px solid var(--line);font-size:12.5px;
}
.verify-icon{flex-shrink:0;width:19px;text-align:center;margin-top:1px}
.verify-pass .verify-icon{color:var(--green)}
.verify-warn .verify-icon{color:var(--amber)}
.verify-fail .verify-icon{color:var(--rose)}
.verify-body{flex:1;min-width:0}
.verify-name{font-weight:600;color:var(--txt)}
.verify-detail{font-family:var(--mono);font-size:10.5px;color:var(--txt-3);margin-top:3px;word-break:break-word}

/* ---------------- 控件 ---------------- */
.ctl{display:flex;flex-direction:column;gap:7px}
.ctl-label{font-family:var(--mono);font-size:10.5px;color:var(--txt-2);letter-spacing:.04em}
.ctl-label b{color:var(--cyan);font-weight:600}
.ctl-range{
  -webkit-appearance:none;appearance:none;height:4px;border-radius:3px;
  background:linear-gradient(90deg,rgba(34,211,238,.55),rgba(34,211,238,.14));outline:none;cursor:pointer;
}
.ctl-range::-webkit-slider-thumb{
  -webkit-appearance:none;width:15px;height:15px;border-radius:50%;background:var(--cyan);
  border:2px solid #06121a;box-shadow:0 0 0 3px rgba(34,211,238,.18);cursor:pointer;
}
.ctl-range::-moz-range-thumb{width:15px;height:15px;border-radius:50%;background:var(--cyan);border:2px solid #06121a;cursor:pointer}
.ctl-select,.ctl-text{
  background:var(--bg-3);border:1px solid var(--line-2);color:var(--txt);
  border-radius:8px;padding:8px 11px;font-size:12.5px;font-family:var(--mono);outline:none;width:100%;
}
.ctl-select:focus,.ctl-text:focus{border-color:var(--cyan)}
.tilt-controls,.alloc-controls,.pf-controls{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;margin-bottom:16px;align-items:end;
}
.ctl-wide{grid-column:span 2}
.ctl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:16px}
.ctl-grid-3{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:15px}
.alloc-beta{font-family:var(--mono);font-size:13px;color:var(--txt-2);align-self:end;padding-bottom:4px}
.alloc-beta b{color:var(--violet);font-size:16px}

.switch-row{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.switch{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--txt-2);cursor:pointer;user-select:none}
.switch input{display:none}
.switch span{
  width:34px;height:18px;border-radius:99px;background:var(--bg-3);border:1px solid var(--line-2);
  position:relative;transition:.18s;flex-shrink:0;
}
.switch span::after{
  content:'';position:absolute;left:2px;top:2px;width:12px;height:12px;border-radius:50%;
  background:var(--txt-3);transition:.18s;
}
.switch input:checked + span{background:rgba(34,211,238,.26);border-color:var(--cyan)}
.switch input:checked + span::after{left:18px;background:var(--cyan)}

.btn-primary,.btn-secondary{
  border:none;border-radius:9px;padding:11px 20px;font-size:13px;font-weight:600;
  cursor:pointer;font-family:var(--sans);transition:.18s;display:inline-flex;
  align-items:center;justify-content:center;gap:8px;
}
.btn-primary{background:linear-gradient(100deg,var(--cyan),var(--blue));color:#04121a;width:100%;margin-top:12px}
.btn-primary:hover{filter:brightness(1.12);transform:translateY(-1px)}
.btn-primary:disabled{opacity:.45;cursor:wait;transform:none}
.btn-secondary{background:rgba(34,211,238,.1);color:var(--cyan);border:1px solid rgba(34,211,238,.3)}
.btn-secondary:hover{background:rgba(34,211,238,.18)}
.btn-secondary:disabled{opacity:.45;cursor:wait}

/* ---------------- 图表 ---------------- */
.chart{width:100%}
.chart-sm{height:270px}
.chart-md{height:360px}
.chart-lg{height:420px}
.dual-chart{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}

/* ---------------- 指标行 ---------------- */
.metric-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:11px;margin-top:15px}
.metric{padding:11px 13px;border-radius:9px;background:rgba(0,0,0,.28);border:1px solid var(--line)}
.metric-label{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.08em}
.metric-value{font-family:var(--mono);font-size:17px;font-weight:600;margin-top:4px}
.metric-note{font-size:10px;color:var(--txt-3);margin-top:3px}

/* ---------------- 表格 ---------------- */
.table-wrap{overflow-x:auto;margin-top:15px;border-radius:10px;border:1px solid var(--line)}
table{width:100%;border-collapse:collapse;font-size:12px;font-family:var(--mono)}
thead th{
  background:rgba(34,211,238,.07);padding:10px 12px;text-align:right;font-weight:600;
  color:var(--txt-2);font-size:10px;letter-spacing:.06em;white-space:nowrap;
  border-bottom:1px solid var(--line-2);position:sticky;top:0;
}
thead th:first-child{text-align:left}
tbody td{padding:9px 12px;text-align:right;border-bottom:1px solid rgba(120,160,220,.06);white-space:nowrap}
tbody td:first-child{text-align:left;font-family:var(--sans);font-weight:500}
tbody tr:hover{background:rgba(34,211,238,.045)}
tbody tr:last-child td{border-bottom:none}
.t-dim{color:var(--txt-3)}
.t-pos{color:var(--green)}.t-neg{color:var(--rose)}.t-hi{color:var(--cyan)}.t-warn{color:var(--amber)}
.tag{
  display:inline-block;font-family:var(--mono);font-size:9px;padding:2px 7px;border-radius:4px;
  background:rgba(120,160,220,.12);color:var(--txt-2);letter-spacing:.04em;
}
.tag-bound{background:rgba(251,191,36,.16);color:var(--amber)}
.tag-ok{background:rgba(52,211,153,.16);color:var(--green)}
.tag-risk{background:rgba(244,63,94,.16);color:var(--rose)}
.game-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:middle}

/* ---------------- 洞察 / 判定 ---------------- */
.insight{
  display:flex;gap:11px;margin-top:15px;padding:13px 15px;border-radius:10px;
  background:rgba(251,191,36,.06);border:1px solid rgba(251,191,36,.2);font-size:12.5px;
  color:var(--txt-2);line-height:1.75;
}
.insight i{color:var(--amber);margin-top:3px;flex-shrink:0}
.insight strong{color:var(--txt)}
.verdict{
  margin-top:15px;padding:14px 17px;border-radius:10px;font-size:13px;line-height:1.75;
  border:1px solid var(--line);background:rgba(0,0,0,.28);
}
.verdict.ok{border-color:rgba(52,211,153,.3);background:rgba(52,211,153,.07)}
.verdict.warn{border-color:rgba(251,191,36,.3);background:rgba(251,191,36,.07)}
.verdict.bad{border-color:rgba(244,63,94,.32);background:rgba(244,63,94,.07)}
.verdict b{font-family:var(--mono)}
.verdict-title{font-weight:700;margin-bottom:6px;display:flex;align-items:center;gap:8px}

/* ---------------- 游戏卡 ---------------- */
.game-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;margin-bottom:18px}
.game-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:19px 20px;position:relative;overflow:hidden;transition:.2s;
}
.game-card:hover{transform:translateY(-2px);border-color:var(--line-2)}
.game-card::after{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--gc)}
.gc-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.gc-icon{
  width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:16px;flex-shrink:0;
}
.gc-name{font-size:16px;font-weight:700}
.gc-en{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.09em;margin-top:2px}
.gc-family{font-family:var(--mono);font-size:9.5px;color:var(--violet);margin-top:4px}
.gc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:13px}
.gc-stat{padding:8px 9px;border-radius:8px;background:rgba(0,0,0,.3)}
.gc-stat-l{font-family:var(--mono);font-size:8.5px;color:var(--txt-3);letter-spacing:.06em}
.gc-stat-v{font-family:var(--mono);font-size:14px;font-weight:600;margin-top:3px}
.gc-formula{
  font-family:var(--mono);font-size:10.5px;color:var(--cyan);padding:9px 11px;border-radius:7px;
  background:rgba(34,211,238,.06);margin-bottom:11px;overflow-x:auto;white-space:nowrap;
}
.gc-mech{font-size:11.5px;color:var(--txt-3);line-height:1.65;margin-bottom:10px}
.gc-note{font-size:12px;color:var(--txt-2);line-height:1.7;padding-top:11px;border-top:1px solid var(--line)}
.gc-note strong{color:var(--txt)}
.gc-band{display:flex;align-items:center;gap:8px;margin-top:11px;font-family:var(--mono);font-size:10px;color:var(--txt-3)}
.gc-band-bar{flex:1;height:5px;border-radius:3px;background:var(--bg-3);position:relative;overflow:hidden}
.gc-band-fill{position:absolute;top:0;bottom:0;background:linear-gradient(90deg,var(--gc),transparent);opacity:.65}
.gc-band-mark{position:absolute;top:-2px;bottom:-2px;width:2px;background:#fff}

/* ---------------- 画像卡 ---------------- */
.persona-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:15px;margin-bottom:18px}
.persona-card{
  background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:17px 18px;
  position:relative;overflow:hidden;transition:.2s;
}
.persona-card:hover{transform:translateY(-2px)}
.persona-card::after{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--pc)}
.pc-head{display:flex;align-items:center;gap:11px;margin-bottom:12px}
.pc-icon{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.pc-name{font-size:15px;font-weight:700}
.pc-en{font-family:var(--mono);font-size:9px;color:var(--txt-3);letter-spacing:.1em}
.pc-desc{font-size:12px;color:var(--txt-2);line-height:1.7;margin-bottom:12px}
.pc-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:11px}
.pc-cell{padding:7px 9px;border-radius:7px;background:rgba(0,0,0,.3)}
.pc-cell-l{font-family:var(--mono);font-size:8.5px;color:var(--txt-3)}
.pc-cell-v{font-family:var(--mono);font-size:13px;font-weight:600;margin-top:2px}
.pc-flags{display:flex;flex-wrap:wrap;gap:6px}

/* ---------------- 决策盒 ---------------- */
.decision-box{
  margin-top:16px;padding:17px 19px;border-radius:12px;
  background:linear-gradient(140deg,rgba(34,211,238,.075),rgba(0,0,0,.32));
  border:1px solid rgba(34,211,238,.24);
}
.db-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:13px;margin-bottom:13px}
.db-cell-l{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.07em}
.db-cell-v{font-family:var(--mono);font-size:19px;font-weight:600;margin-top:3px}
.db-formula{font-family:var(--mono);font-size:11px;color:var(--txt-2);padding:10px 12px;border-radius:8px;background:rgba(0,0,0,.34);margin-bottom:12px;overflow-x:auto}
.db-interventions{display:flex;flex-direction:column;gap:8px}
.db-int{display:flex;align-items:flex-start;gap:10px;padding:10px 13px;border-radius:9px;font-size:12px}
.db-int.HIGH{background:rgba(244,63,94,.1);border:1px solid rgba(244,63,94,.28)}
.db-int.MED{background:rgba(251,191,36,.09);border:1px solid rgba(251,191,36,.26)}
.db-int-type{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;font-weight:600}

/* ---------------- 护栏列表 ---------------- */
.guard-list{list-style:none;display:flex;flex-direction:column;gap:9px}
.guard-list li{
  padding:10px 13px;border-radius:9px;background:rgba(0,0,0,.26);border:1px solid var(--line);
  font-size:12.5px;color:var(--txt-2);line-height:1.65;
}
.guard-list b{color:var(--cyan)}

/* ---------------- 模拟控制台 ---------------- */
.sim-console{margin-top:18px}
.sim-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:22px}
.sim-col{display:flex;flex-direction:column;gap:14px}
.sim-col-title{
  font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--cyan);
  padding-bottom:8px;border-bottom:1px solid var(--line);text-transform:uppercase;
}
.sim-status{font-family:var(--mono);font-size:10.5px;color:var(--txt-3);margin-top:8px;line-height:1.6}
.sim-status.busy{color:var(--amber)}
.sim-status.done{color:var(--green)}
.mix-sliders{display:flex;flex-direction:column;gap:10px;max-height:280px;overflow-y:auto;padding-right:5px}
.mix-item{display:flex;flex-direction:column;gap:5px}
.mix-head{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10px}
.mix-name{color:var(--txt-2)}
.mix-val{color:var(--cyan)}

/* ---------------- 风险仪表 ---------------- */
.risk-metrics{display:flex;flex-direction:column;gap:10px}
.rm{padding:12px 14px;border-radius:10px;background:rgba(0,0,0,.28);border:1px solid var(--line)}
.rm-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.rm-label{font-size:12px;color:var(--txt-2)}
.rm-value{font-family:var(--mono);font-size:16px;font-weight:600}
.rm-bar{height:4px;border-radius:3px;background:var(--bg-3);margin-top:8px;overflow:hidden}
.rm-fill{height:100%;border-radius:3px;transition:width .4s}
.rm-note{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);margin-top:6px}

/* ---------------- Provably Fair 输出 ---------------- */
.pf-out{margin-top:15px;display:flex;flex-direction:column;gap:8px}
.pf-commit{
  font-family:var(--mono);font-size:11px;padding:12px 14px;border-radius:9px;
  background:rgba(167,139,250,.08);border:1px solid rgba(167,139,250,.24);
  color:var(--violet);word-break:break-all;line-height:1.7;
}
.pf-rows{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.pf-row{
  font-family:var(--mono);font-size:10.5px;padding:9px 12px;border-radius:8px;
  background:rgba(0,0,0,.3);border:1px solid var(--line);display:flex;justify-content:space-between;gap:9px;
}
.pf-row b{color:var(--cyan)}
.pf-win{color:var(--green)}.pf-lose{color:var(--txt-3)}

/* ---------------- 合规网格 ---------------- */
.compliance-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.cg-item{padding:15px 17px;border-radius:11px;background:rgba(0,0,0,.28);border:1px solid var(--line)}
.cg-title{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:9px;margin-bottom:9px}
.cg-title i{color:var(--cyan)}
.cg-body{font-size:12px;color:var(--txt-2);line-height:1.75}
.cg-body code{font-family:var(--mono);font-size:11px;color:var(--cyan);background:rgba(34,211,238,.09);padding:1px 5px;border-radius:4px}

/* ---------------- 页脚 ---------------- */
.doc-foot{margin-top:44px;padding-top:26px;border-top:1px solid var(--line);text-align:center}
.foot-line{font-family:var(--mono);font-size:11px;color:var(--txt-2);letter-spacing:.06em}
.foot-note{font-size:12px;color:var(--txt-3);max-width:940px;margin:14px auto 0;line-height:1.85}
.foot-note strong{color:var(--txt-2)}
.foot-note em{color:var(--cyan);font-style:normal}
.foot-note.dim{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;opacity:.55;margin-top:18px}

/* ---------------- Toast ---------------- */
.toast{
  position:fixed;bottom:26px;left:50%;transform:translate(-50%,80px);
  background:var(--bg-3);border:1px solid var(--cyan);color:var(--txt);
  padding:12px 22px;border-radius:10px;font-size:13px;z-index:99;
  transition:.28s;opacity:0;pointer-events:none;font-family:var(--mono);
}
.toast.show{transform:translate(-50%,0);opacity:1}

/* =============================================================================
 * 顶栏 · 白话入口 + 中英切换（多页架构新增）
 * -----------------------------------------------------------------------------
 * 用户要求这两个入口位于"右上角 logo 边上"。因此顶栏在内容区之上横贯，
 * 左端复述品牌（保证深链进来的页面也有品牌锚点），右端并排放两个入口。
 * 顶栏 fixed ⇒ .main 必须有对应的上内边距，否则首屏标题会被盖住。
 * ============================================================================= */
:root{--tb-h:54px}
.topbar{
  position:fixed;top:0;left:var(--nav-w);right:0;height:var(--tb-h);z-index:45;
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:0 30px;background:rgba(6,9,16,.78);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.tb-brand{display:flex;align-items:baseline;gap:11px;text-decoration:none;min-width:0}
.tb-logo{font-family:var(--mono);font-size:17px;font-weight:600;letter-spacing:.05em;color:#e8f2ff}
.tb-logo span{color:var(--cyan)}
.tb-tag{font-family:var(--mono);font-size:8px;letter-spacing:.2em;color:var(--txt-3);white-space:nowrap}
.tb-right{display:flex;align-items:center;gap:9px;flex-shrink:0}
.tb-plain,.tb-lang{
  display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 13px;
  border-radius:99px;font-size:12px;font-weight:600;cursor:pointer;
  font-family:var(--sans);text-decoration:none;transition:.16s;white-space:nowrap;
}
.tb-plain{
  background:linear-gradient(100deg,rgba(251,191,36,.16),rgba(251,191,36,.05));
  border:1px solid rgba(251,191,36,.42);color:var(--amber);
}
.tb-plain:hover{background:rgba(251,191,36,.26);transform:translateY(-1px)}
.tb-plain.on{background:var(--amber);color:#1a1204;border-color:var(--amber)}
.tb-plain i{font-size:11px}
.tb-lang{
  background:rgba(34,211,238,.09);border:1px solid rgba(34,211,238,.34);color:var(--cyan);
  font-family:var(--mono);letter-spacing:.05em;
}
.tb-lang:hover{background:rgba(34,211,238,.2)}
.tb-lang i{font-size:13px}

/* 顶栏出现后，内容整体下移 */
.main{padding-top:calc(var(--tb-h) + 10px)}

/* 导航分组标题 */
.nav-group{padding:0 12px}
.nav-group:first-of-type{padding-top:14px}
.nav-group-title{
  font-family:var(--mono);font-size:8.5px;letter-spacing:.2em;color:var(--txt-3);
  padding:10px 13px 6px;opacity:.8;
}
.nav-list{padding:0 0 8px;flex:none}
.side-nav{overflow-y:auto}

/* =============================================================================
 * 跨页导流卡 / 行动号召
 * ============================================================================= */
.page-next{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
  gap:13px;margin-top:34px;padding-top:24px;border-top:1px solid var(--line);
}
.pn-card{
  display:flex;flex-direction:column;gap:4px;padding:15px 17px;border-radius:12px;
  background:rgba(0,0,0,.3);border:1px solid var(--line);text-decoration:none;
  transition:.18s;position:relative;overflow:hidden;
}
.pn-card:hover{transform:translateY(-2px);border-color:rgba(34,211,238,.42);background:rgba(34,211,238,.055)}
.pn-card i{color:var(--cyan);font-size:15px;margin-bottom:4px}
.pn-card b{font-size:13.5px;color:var(--txt);font-weight:600}
.pn-card span{font-size:11px;color:var(--txt-3);line-height:1.5}
.deck-cta{margin-top:18px;text-align:center}

/* =============================================================================
 * 白话页 (plain.html)
 * ============================================================================= */
.plain-section{max-width:960px;position:relative;padding-top:34px}
.plain-head{position:relative;z-index:2;margin-bottom:30px}
.plain-tagline{
  display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);
  font-size:10px;letter-spacing:.18em;color:var(--amber);padding:5px 13px;
  border-radius:99px;border:1px solid rgba(251,191,36,.32);background:rgba(251,191,36,.07);
}
.plain-h1{font-family:var(--serif);font-size:clamp(28px,4vw,42px);font-weight:700;margin:18px 0 14px;line-height:1.22}
.plain-lead{font-size:15.5px;color:var(--txt-2);line-height:1.9}
.plain-lead strong{color:var(--amber);font-weight:600}

.plain-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:26px 30px 28px;margin-top:20px;position:relative;backdrop-filter:blur(9px);
}
.plain-num{
  position:absolute;right:24px;top:16px;font-family:var(--mono);font-size:44px;
  font-weight:600;color:transparent;-webkit-text-stroke:1px rgba(34,211,238,.24);line-height:1;
}
.plain-card h2{
  font-family:var(--serif);font-size:22px;font-weight:700;line-height:1.35;
  margin-bottom:14px;padding-right:60px;
}
.plain-card h2 i{color:var(--cyan);font-size:18px;margin-right:9px}
.plain-card p{font-size:14.5px;color:var(--txt-2);line-height:1.92;margin-bottom:11px}
.plain-card p:last-child{margin-bottom:0}
.plain-card strong{color:var(--txt);font-weight:600}
.plain-card b{color:var(--cyan);font-weight:600}
.plain-card em{color:var(--amber);font-style:normal;font-weight:600}

.plain-analogy{
  display:flex;gap:16px;margin:16px 0;padding:17px 19px;border-radius:12px;
  background:rgba(251,191,36,.055);border:1px solid rgba(251,191,36,.2);
}
.plain-analogy>i{color:var(--amber);font-size:22px;flex-shrink:0;margin-top:3px}
.plain-analogy>div{font-size:14px;color:var(--txt-2);line-height:1.9}
.plain-analogy b{color:var(--amber)}

.plain-two{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:14px;margin:16px 0}
.plain-half{padding:16px 18px;border-radius:12px;background:rgba(0,0,0,.3);border:1px solid var(--line)}
.plain-half p{font-size:13.5px;line-height:1.85;margin-bottom:9px}
.plain-bad{border-color:rgba(244,63,94,.26);background:rgba(244,63,94,.05)}
.plain-good{border-color:rgba(52,211,153,.26);background:rgba(52,211,153,.05)}
.ph-tag{
  display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.06em;color:var(--txt-2);margin-bottom:10px;padding:4px 10px;
  border-radius:6px;background:rgba(120,160,220,.1);border:1px solid var(--line);
}
.plain-bad .ph-tag{color:var(--rose);border-color:rgba(244,63,94,.3);background:rgba(244,63,94,.1)}
.plain-good .ph-tag{color:var(--green);border-color:rgba(52,211,153,.3);background:rgba(52,211,153,.1)}
.ph-note{font-size:12.5px!important;color:var(--txt-3)!important;padding-top:9px;border-top:1px dashed var(--line);margin-bottom:0!important}

.plain-punch{
  display:flex;gap:14px;margin-top:17px;padding:16px 18px;border-radius:12px;
  background:linear-gradient(120deg,rgba(34,211,238,.08),rgba(167,139,250,.05));
  border:1px solid rgba(34,211,238,.26);
}
.plain-punch>i{color:var(--cyan);font-size:19px;flex-shrink:0;margin-top:3px}
.plain-punch>span{font-size:14px;color:var(--txt-2);line-height:1.9}
.plain-after{
  margin-top:14px;padding-top:13px;border-top:1px solid var(--line);
  font-size:13.5px!important;color:var(--txt-2)!important;
}
.plain-hero-card{background:linear-gradient(150deg,rgba(34,211,238,.06),rgba(13,19,31,.85) 45%);border-color:rgba(34,211,238,.24)}
.plain-guard-card{background:linear-gradient(150deg,rgba(244,63,94,.055),rgba(13,19,31,.85) 45%);border-color:rgba(244,63,94,.22)}
.plain-guards{list-style:none;display:flex;flex-direction:column;gap:10px;margin:15px 0}
.plain-guards li{
  display:flex;gap:14px;align-items:flex-start;padding:14px 16px;border-radius:11px;
  background:rgba(0,0,0,.3);border:1px solid var(--line);
}
.plain-guards li>i{color:var(--rose);font-size:16px;flex-shrink:0;margin-top:3px;width:19px;text-align:center}
.plain-guards b{display:block;font-size:13.5px;color:var(--txt);margin-bottom:3px}
.plain-guards span{font-size:12.5px;color:var(--txt-3);line-height:1.7}
.plain-final{background:linear-gradient(150deg,rgba(52,211,153,.07),rgba(13,19,31,.85) 48%);border-color:rgba(52,211,153,.26)}
.plain-final-line{font-size:16px!important;color:var(--txt)!important;line-height:1.95!important}
.plain-final-line strong{color:var(--green)}
.plain-final-sub{font-size:13.5px!important;color:var(--txt-3)!important;margin-top:12px!important}

/* =============================================================================
 * 赌场实况沙盘 (casino.html)
 * -----------------------------------------------------------------------------
 * 视觉目标：俯视赌场地板。深色毡面 + 环形座位 + 中央金库。
 * 所有尺寸用 % 定位在 .casino-floor 上，因此整块画面可等比缩放。
 * ============================================================================= */
.casino-section{position:relative;padding-top:34px}
.casino-head{position:relative;z-index:2;max-width:1120px}
.casino-live{
  display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);
  font-size:9.5px;letter-spacing:.22em;color:var(--amber);padding:5px 13px;
  border-radius:99px;border:1px solid rgba(251,191,36,.32);background:rgba(251,191,36,.07);
}
.casino-live .live-dot{background:var(--amber);animation:livePulseA 1.9s infinite}
@keyframes livePulseA{
  0%{box-shadow:0 0 0 0 rgba(251,191,36,.55)}
  70%{box-shadow:0 0 0 8px rgba(251,191,36,0)}
  100%{box-shadow:0 0 0 0 rgba(251,191,36,0)}
}
.casino-title{font-family:var(--serif);font-size:38px;font-weight:700;margin:15px 0 12px;line-height:1.2}
.casino-lead{font-size:14.5px;color:var(--txt-2);line-height:1.85;max-width:980px}
.casino-lead strong{color:var(--amber);font-weight:600}
.casino-ctrl{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:15px;
  align-items:end;margin-top:22px;padding:18px 20px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r);backdrop-filter:blur(9px);
}
.casino-ctrl .btn-secondary{height:38px;padding:0 16px;font-size:12px}

.casino-bar{
  display:flex;align-items:center;gap:16px;margin-top:15px;padding:12px 20px;
  background:rgba(0,0,0,.34);border:1px solid var(--line);border-radius:11px;flex-wrap:wrap;
}
.cb-left{display:flex;align-items:center;gap:11px;flex-wrap:wrap;flex-shrink:0}
.cb-left strong{font-family:var(--mono);font-size:16px;color:var(--amber)}
#cas-scrub{
  -webkit-appearance:none;appearance:none;flex:1;min-width:190px;height:5px;border-radius:3px;
  background:linear-gradient(90deg,rgba(251,191,36,.6),rgba(34,211,238,.35));outline:none;cursor:pointer;
}
#cas-scrub::-webkit-slider-thumb{
  -webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#fff7e6;
  border:2px solid var(--amber);box-shadow:0 0 10px rgba(251,191,36,.55);cursor:pointer;
}
#cas-scrub::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff7e6;border:2px solid var(--amber);cursor:pointer}
#cas-play.on{background:rgba(251,191,36,.18);border-color:rgba(251,191,36,.45);color:var(--amber)}
.cb-speed{display:flex;align-items:center;gap:8px;flex-shrink:0}
.cb-speed span{font-family:var(--mono);font-size:9.5px;color:var(--txt-3);letter-spacing:.08em}
.cb-speed select{
  background:var(--bg-3);border:1px solid var(--line-2);color:var(--txt);border-radius:7px;
  padding:6px 9px;font-size:11px;font-family:var(--mono);outline:none;
}

.casino-legend{display:flex;flex-wrap:wrap;gap:18px;margin-top:13px;font-size:11.5px;color:var(--txt-3)}
.casino-legend .lg{display:inline-flex;align-items:center;gap:7px}
.casino-legend i{font-size:8px}
.lg-house i{color:var(--green)}
.lg-player i{color:var(--rose)}
.lg-seat i{color:var(--cyan);font-size:10px}
.lg-flow i{color:var(--amber);font-size:10px}

/* ---- 日内时钟条 ---- */
.casino-clockbar{
  display:flex;align-items:center;gap:13px;margin-top:10px;padding:9px 18px;
  border-radius:10px;background:rgba(0,0,0,.3);border:1px solid var(--line);
}
.cc-open{font-family:var(--mono);font-size:9px;letter-spacing:.16em;color:var(--txt-3);flex-shrink:0}
.cc-track{flex:1;min-width:120px;height:6px;border-radius:4px;background:rgba(0,0,0,.55);overflow:hidden}
.cc-fill{
  display:block;height:100%;width:0;border-radius:4px;
  background:linear-gradient(90deg,rgba(96,165,250,.45),var(--cyan) 55%,var(--amber));
  box-shadow:0 0 12px rgba(34,211,238,.38);
}
/* tabular-nums 对持续跳动的数字是必需的：
 * 否则字符宽度随数字变化而抽动，整行会“呼吸”—— 这是它不协调的真正原因。 */
.cc-time{
  font-family:var(--mono);font-size:16px;font-weight:600;color:var(--cyan);
  font-variant-numeric:tabular-nums;min-width:56px;text-align:right;
}
.cc-pct{font-family:var(--mono);font-size:10px;color:var(--txt-3);min-width:40px;text-align:right}
.cc-pct b{color:var(--txt-2);font-weight:600}

/* ---- 地板 ---- */
.casino-stage{margin-top:16px}
/* 地板比例从 16/9 改为 7/5。这不是审美偏好，是几何约束：
 * 台子宽度用 % 对齐地板宽，但它是正圆，高度也等于该宽度。
 * 地板越扁，台子就占据越大比例的地板高 —— 16/9 下一张台子高达
 * 地板高的 36%，环形排列必然上下裁切。改为 7/5 后降到 23%，
 * 环形才能展开到 y=±37% 而不跳出画面，也才让出中央金库的竖直空间。 */
.casino-floor{
  position:relative;width:100%;aspect-ratio:7/5;min-height:560px;
  border-radius:22px;overflow:hidden;
  background:
    radial-gradient(58% 46% at 50% 50%,rgba(251,191,36,.055),transparent 72%),
    radial-gradient(120% 90% at 50% 118%,rgba(34,211,238,.05),transparent 68%),
    repeating-linear-gradient(45deg,rgba(255,255,255,.012) 0 13px,transparent 13px 26px),
    linear-gradient(168deg,#080e17,#0b1422 52%,#05090f);
  border:1px solid var(--line-2);
  box-shadow:inset 0 0 110px rgba(0,0,0,.72),0 24px 70px rgba(0,0,0,.45);
}
#chip-canvas{position:absolute;inset:0;z-index:3;pointer-events:none}

/* ---- 中央金库（庄家大收益台） ---- */
.vault{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(32%,380px);z-index:4;padding:15px 17px 13px;border-radius:16px;
  background:linear-gradient(165deg,rgba(12,20,32,.96),rgba(6,10,17,.97));
  border:1px solid rgba(251,191,36,.34);
  box-shadow:0 20px 60px rgba(0,0,0,.6),0 0 0 1px rgba(0,0,0,.5);
}
.vault-glow{
  position:absolute;inset:-2px;border-radius:17px;pointer-events:none;
  background:radial-gradient(circle at 50% 0%,rgba(251,191,36,.16),transparent 62%);
}
.vault.v-neg{border-color:rgba(244,63,94,.4)}
.vault.v-neg .vault-glow{background:radial-gradient(circle at 50% 0%,rgba(244,63,94,.18),transparent 62%)}
.vault-title{
  font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;color:var(--amber);
  display:flex;align-items:center;gap:8px;position:relative;
}
.vault-net{
  font-family:var(--mono);font-size:29px;font-weight:600;line-height:1.15;
  margin:6px 0 3px;position:relative;font-variant-numeric:tabular-nums;
}
.vault-net.pos{color:var(--green)}
.vault-net.neg{color:var(--rose)}
.vault-meta{
  display:grid;grid-template-columns:repeat(3,auto);gap:5px 12px;justify-content:start;
  font-family:var(--mono);font-size:9.5px;font-variant-numeric:tabular-nums;
  color:var(--txt-3);padding-bottom:9px;border-bottom:1px solid var(--line);position:relative;
}
.vault-meta span{cursor:help;white-space:nowrap}
.vault-meta i{color:var(--amber);opacity:.75;margin-right:4px;font-size:9px}
.vault-meta b{color:var(--txt-2);font-weight:500}
/* 盈亏平衡时刻：摊平模型给不出的信息，值得单独占一行 */
.vault-be-wrap{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  margin-top:8px;padding:5px 9px;border-radius:7px;position:relative;
  background:rgba(0,0,0,.34);border:1px solid var(--line);
}
.vbe-k{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;color:var(--txt-3)}
.vault-be{font-family:var(--mono);font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.vault-be.ok{color:var(--green)}
.vault-be.wait{color:var(--amber)}
.vault-be.neg{color:var(--rose)}
.vault-rows{display:flex;flex-direction:column;gap:3px;margin-top:9px;position:relative}
.vr{
  display:grid;grid-template-columns:13px 1fr 46px 72px 36px;align-items:center;gap:6px;
  font-family:var(--mono);font-size:9.5px;font-variant-numeric:tabular-nums;
}
.vr>i{font-size:10px}
.vr-name{color:var(--txt-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--sans);font-size:10.5px}
.vr-bar{height:5px;border-radius:3px;background:rgba(0,0,0,.5);overflow:hidden}
.vr-fill{display:block;height:100%;border-radius:3px;opacity:.85}
.vr.neg .vr-fill{background:var(--rose)!important;opacity:.9}
.vr-val{text-align:right;color:var(--green);font-size:9.5px}
.vr.neg .vr-val{color:var(--rose)}
.vr-share{text-align:right;color:var(--txt-3);font-size:9px;font-style:normal}
.vault-check{
  margin-top:11px;padding:8px 10px;border-radius:8px;font-family:var(--mono);
  font-size:9px;line-height:1.6;position:relative;
}
.vault-check.ok{background:rgba(52,211,153,.09);border:1px solid rgba(52,211,153,.26);color:var(--green)}
.vault-check.warn{background:rgba(251,191,36,.09);border:1px solid rgba(251,191,36,.3);color:var(--amber)}
.vault-check i{margin-right:5px}

/* ---- 台子 ---- */
.ctable{
  position:absolute;transform:translate(-50%,-50%);width:min(16.5%,198px);z-index:2;
}
.ct-felt{
  position:relative;width:100%;aspect-ratio:1/1;border-radius:50%;
  background:
    radial-gradient(circle at 50% 34%,color-mix(in srgb,var(--gc) 20%,transparent),transparent 62%),
    radial-gradient(circle at 50% 50%,#0f2a24,#08161a 68%,#060c12);
  border:1px solid color-mix(in srgb,var(--gc) 34%,transparent);
  box-shadow:0 12px 32px rgba(0,0,0,.6),inset 0 0 26px rgba(0,0,0,.55);
  transition:box-shadow .3s,border-color .3s;
}
.t-win .ct-felt{box-shadow:0 12px 32px rgba(0,0,0,.6),inset 0 0 26px rgba(0,0,0,.5),0 0 0 1px rgba(52,211,153,.3)}
.t-lose .ct-felt{box-shadow:0 12px 32px rgba(0,0,0,.6),inset 0 0 26px rgba(0,0,0,.5),0 0 22px rgba(244,63,94,.24)}
.t-jackpot .ct-felt{animation:jpFlash 1.1s ease-in-out infinite}
@keyframes jpFlash{
  0%,100%{box-shadow:0 12px 32px rgba(0,0,0,.6),0 0 0 1px rgba(251,191,36,.4)}
  50%{box-shadow:0 12px 32px rgba(0,0,0,.6),0 0 34px rgba(251,191,36,.6)}
}
.ct-ring{
  position:absolute;inset:11%;border-radius:50%;
  border:1px dashed color-mix(in srgb,var(--gc) 20%,transparent);
}
.ct-seat{
  position:absolute;transform:translate(-50%,-50%);font-size:8px;
  color:rgba(120,160,220,.14);transition:color .3s,text-shadow .3s;
}
.ct-seat.on{color:var(--gc);text-shadow:0 0 7px color-mix(in srgb,var(--gc) 70%,transparent)}

/* ---- 台面 HUD（数据就在台子上，不再另起一张卡片） ----
 * 所有数字都开 tabular-nums：日内累加意味着数字每帧在变，
 * 比例字体下行宽会随位数抽动，整个 HUD 看起来在拖。 */
.ct-hud{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:78%;display:flex;flex-direction:column;align-items:center;gap:1px;
  text-align:center;pointer-events:none;z-index:2;
}
.ct-top{display:flex;align-items:center;gap:5px;justify-content:center;max-width:100%}
.ct-top>i{font-size:10.5px;color:var(--gc);flex-shrink:0;
  filter:drop-shadow(0 0 6px color-mix(in srgb,var(--gc) 55%,transparent))}
.ct-name{
  font-size:9.5px;font-weight:600;color:var(--txt);line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ct-ggr{
  font-family:var(--mono);font-size:15px;font-weight:600;line-height:1.25;
  letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:1px;
}
.ct-ggr.pos{color:var(--green);text-shadow:0 0 10px rgba(52,211,153,.3)}
.ct-ggr.neg{color:var(--rose);text-shadow:0 0 10px rgba(244,63,94,.3)}
.ct-sub{
  display:flex;align-items:center;gap:4px;font-family:var(--mono);font-size:8.5px;
  color:var(--txt-3);font-variant-numeric:tabular-nums;
}
.ct-sub em{opacity:.4;font-style:normal}
.ct-occ{
  display:flex;align-items:center;gap:4px;margin-top:3px;font-family:var(--mono);
  font-size:9px;color:var(--txt-2);font-variant-numeric:tabular-nums;
}
.ct-occ>i{font-size:8px;color:var(--cyan);opacity:.8}
.ct-occ b{color:var(--txt);font-weight:600}
.ct-flow{display:inline-flex;gap:3px;font-size:8px}
.cf-in{color:var(--green);font-style:normal;opacity:.9}
.cf-out{color:var(--rose);font-style:normal;opacity:.9}
.ct-heat{
  position:relative;width:62%;height:3px;border-radius:2px;
  background:rgba(0,0,0,.6);margin-top:6px;overflow:hidden;
}
.ct-heat-fill{
  display:block;height:100%;border-radius:2px;
  background:linear-gradient(90deg,rgba(251,191,36,.45),var(--amber));transition:width .4s;
}

.ct-jp{
  position:absolute;left:50%;bottom:7%;transform:translateX(-50%);white-space:nowrap;
  font-family:var(--mono);font-size:7.5px;padding:2px 8px;border-radius:99px;
  background:var(--amber);color:#1a1204;font-weight:700;letter-spacing:.06em;z-index:4;
}

/* ---- 进出浮标：把“有人进 / 有人出”变成台面上飘起的 +1 / −1 ---- */
.ct-badges{position:absolute;inset:0;border-radius:50%;overflow:hidden;pointer-events:none;z-index:3}
.ct-badge{
  position:absolute;bottom:18%;font-family:var(--mono);font-size:9px;font-weight:700;
  font-style:normal;text-shadow:0 1px 6px rgba(0,0,0,.95);
  animation:badgeUp 1.5s ease-out forwards;
}
.ct-badge.in{color:var(--green)}
.ct-badge.out{color:var(--rose)}
@keyframes badgeUp{
  0%{opacity:0;transform:translateY(7px) scale(.75)}
  16%{opacity:1;transform:translateY(0) scale(1)}
  100%{opacity:0;transform:translateY(-36px) scale(.92)}
}
.floor-note{margin-top:13px;font-size:12px;color:var(--txt-3);line-height:1.75}
.floor-note strong{color:var(--amber)}
.ledger-wrap{margin-top:6px}
.tr-total td{
  background:rgba(34,211,238,.06);border-top:1px solid var(--line-2);
  border-bottom:none!important;font-weight:600;
}

/* ---------------- 响应式 ---------------- */
@media (max-width:1180px){
  .panel-grid{grid-template-columns:1fr}
  .panel.span-2{grid-column:span 1}
  .ctl-wide{grid-column:span 1}
  .vault{width:min(38%,330px);padding:13px 14px 11px}
  .vault-net{font-size:23px}
  .vault-meta{grid-template-columns:repeat(2,auto);font-size:9px}
  .vr{grid-template-columns:12px 1fr 34px 62px 32px;font-size:9px}
  .ctable{width:min(19%,168px)}
  .ct-ggr{font-size:13px}
  .ct-name{font-size:8.5px}
  .casino-floor{aspect-ratio:6/5}
}
@media (max-width:900px){
  .side-nav{transform:translateX(-100%)}
  .side-nav.open{transform:translateX(0)}
  .nav-toggle{display:flex;align-items:center;justify-content:center}
  .main{margin-left:0;padding:calc(var(--tb-h) + 54px) 16px 70px}
  .topbar{left:0;padding:0 14px 0 64px}
  .tb-tag{display:none}
  .sec-head{gap:13px}
  .sec-num{font-size:28px}
  .sec-title{font-size:23px}
  .hero-title{font-size:30px}
  .chart-lg{height:330px}
  .chart-md{height:300px}
  .casino-title{font-size:27px}
  .plain-h1{font-size:26px}
  .plain-card{padding:20px 18px 22px}
  .plain-card h2{font-size:19px;padding-right:44px}
  .plain-num{font-size:32px;right:16px}
  /* 手机上"俯视七台"环形布局会挤成一团 ⇒ 改为纵向卡片流。
   * 这是有意的降级：信息完整保留（每台数据不变），只是放弃空间隐喻。 */
  .casino-floor{aspect-ratio:auto;min-height:0;padding:16px;display:flex;flex-direction:column;gap:13px}
  #chip-canvas{display:none}
  .vault{position:static;transform:none;width:100%;order:-1}
  .vault-meta{grid-template-columns:repeat(2,auto)}
  #floor-tables{display:grid;grid-template-columns:repeat(auto-fit,minmax(152px,1fr));gap:13px}
  .ctable{position:static;transform:none;width:100%}
  .ct-felt{aspect-ratio:1/1}
  .ct-ggr{font-size:14px}
  .ct-name{font-size:9.5px}
  .casino-clockbar{padding:9px 14px;gap:10px}
  .cc-time{font-size:14px;min-width:50px}
}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:var(--bg-1)}
::-webkit-scrollbar-thumb{background:rgba(120,160,220,.22);border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:rgba(120,160,220,.36)}
