/* ==========================================================================
   快乐8多维度分析 · 前端样式
   设计方向：工业仪表盘（Industrial instrument panel）
   - 冷灰纸面 + 近黑墨，单一琥珀强调色（拒绝默认 SaaS 蓝）
   - 发丝线分格取代圆角卡片汤；KPI 做成「仪表条」而不是漂浮卡片
   - 数字全部等宽（tabular），微标签用大写字距（仪表面板的辨识特征）
   - 氛围：极淡的 24px 蓝图网格
   ========================================================================== */
:root{
  /* 面 */
  --paper:#eef1f4;
  --panel:#fff;
  --panel2:#f7f9fb;
  --rule:#d9e0e8;
  --rule2:#e8edf2;
  /* 墨 */
  --ink:#0d1117;
  --ink2:#54606e;
  --ink3:#8a95a3;
  /* 唯一强调色：琥珀 */
  --acc:#e8781a;
  --acc-d:#c25f0a;
  --acc-bg:#fdf2e7;
  /* 语义色（仅用于号码大小/冷热，不参与主视觉） */
  --hot:#b4341c;  --hot-bg:#fdeeec;  --hot-ln:#f2cfc8;
  --cold:#1f3d7a; --cold-bg:#eef2fb; --cold-ln:#cbd8f0;
  --ok:#1c6b4a;   --ok-bg:#eaf5ef;
  --warn:#a3520a; --warn-bg:#fdf4e6; --warn-ln:#f0dcc0;
  /* 几何 */
  --r:6px; --r2:4px;
  --mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,"Liberation Mono","DejaVu Sans Mono",monospace;
  --sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",-apple-system,"Segoe UI",sans-serif;
  --t-fast:.14s;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{
  background-color:var(--paper);
  /* 氛围：极淡的蓝图网格 */
  background-image:
    linear-gradient(to right,rgba(13,17,23,.035) 1px,transparent 1px),
    linear-gradient(to bottom,rgba(13,17,23,.035) 1px,transparent 1px);
  background-size:24px 24px,24px 24px;
  color:var(--ink);
  font:15px/1.62 var(--sans);
  -webkit-text-size-adjust:100%;
  text-rendering:optimizeLegibility;
}
.num,td.mono,th.mono,.kpi .v,.ball,.heat .h b,.mtx .c b,.mtx .c i,.metastrip,.hd .ver,.rowline .mlab,.pend .meta{font-variant-numeric:tabular-nums}
#app{max-width:1120px;margin:0 auto;padding:0 14px 48px}

/* ---------- 加载态 ---------- */
#boot{padding:72px 20px;text-align:center;color:var(--ink2);font-size:13px;letter-spacing:.06em}
#boot .sp{
  width:30px;height:30px;margin:0 auto 16px;border-radius:50%;
  border:2px solid var(--rule);border-top-color:var(--acc);animation:spin .75s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}
#boot .bar{max-width:300px;margin:20px auto 0;height:3px;background:var(--rule);overflow:hidden}
#boot .bar i{display:block;height:100%;width:34%;background:var(--acc);animation:sl 1.1s ease-in-out infinite}
@keyframes sl{0%{margin-left:-34%}100%{margin-left:100%}}

/* ---------- 头部 ---------- */
.hd{padding:22px 2px 6px}
.hd-row{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.hd h1{
  font-size:23px;margin:0;font-weight:700;letter-spacing:-.01em;line-height:1.1;
  padding-left:12px;border-left:3px solid var(--acc);
}
.hd .ver{font-family:var(--mono);font-size:11px;color:var(--ink3);letter-spacing:.05em}
.disclaimer{
  margin-top:12px;padding:9px 13px;border-radius:var(--r2);
  background:var(--warn-bg);color:var(--warn);font-size:12.5px;
  border:1px solid var(--warn-ln);border-left:3px solid var(--warn);
}
/* 仪表读数条 */
.metastrip{
  display:flex;gap:0;flex-wrap:wrap;align-items:stretch;
  margin-top:12px;border:1px solid var(--rule);border-radius:var(--r);background:var(--panel);
  font-size:11.5px;overflow:hidden;
}
.metastrip span{display:flex;align-items:center;gap:6px;padding:8px 13px;border-right:1px solid var(--rule2);color:var(--ink3);letter-spacing:.03em}
.metastrip span:last-child{border-right:none}
.metastrip b{color:var(--ink);font-weight:600;font-family:var(--mono)}
.metastrip .sep{display:none}

/* ---------- 页签：刻度条，激活态是下划线 ---------- */
.tabs{
  position:sticky;top:0;z-index:30;display:flex;gap:0;overflow-x:auto;
  padding:10px 0 0;margin:6px 0 14px;
  /* ★ 必须不透明：用半透明渐变时，滚动内容会从页签底下透出来（手机上看得很明显） */
  background:var(--paper);
  border-bottom:1px solid var(--rule);
  -webkit-overflow-scrolling:touch;scrollbar-width:none;
}
.tabs::-webkit-scrollbar{display:none}
/* 右缘渐隐：提示这一条还能横向滑（否则最后两个页签像不存在） */
.tabs::after{
  content:'';position:sticky;right:0;flex:0 0 18px;align-self:stretch;
  background:linear-gradient(90deg,rgba(238,241,244,0),var(--paper));pointer-events:none;
}
.tab{
  flex:0 0 auto;min-height:38px;padding:9px 13px 10px;border:none;background:none;
  color:var(--ink3);font-size:13px;font-family:var(--sans);cursor:pointer;white-space:nowrap;
  border-bottom:2px solid transparent;margin-bottom:-1px;letter-spacing:.02em;
  transition:color var(--t-fast),border-color var(--t-fast);
}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--acc-d);border-bottom-color:var(--acc);font-weight:600}
.tab:focus-visible{outline:2px solid var(--acc);outline-offset:-3px}

.pane{display:none}
.pane.on{display:block}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* 编排式入场：面板内的块依次浮现（约 60ms 递进） */
.pane.on .card{animation:rise .34s cubic-bezier(.16,1,.3,1) both}
.pane.on .card:nth-child(1){animation-delay:.02s}
.pane.on .card:nth-child(2){animation-delay:.08s}
.pane.on .card:nth-child(3){animation-delay:.14s}
.pane.on .card:nth-child(4){animation-delay:.20s}
.pane.on .card:nth-child(5){animation-delay:.26s}
.pane.on .kpis{animation:rise .3s cubic-bezier(.16,1,.3,1) both}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ---------- KPI 仪表条：一格一读数，发丝线分格 ---------- */
.kpis{
  display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);
  border:1px solid var(--rule);border-radius:var(--r);overflow:hidden;margin:0 0 16px;
}
@media(min-width:720px){.kpis{grid-template-columns:repeat(4,1fr)}}
.kpi{position:relative;background:var(--panel);padding:13px 14px 12px;transition:background var(--t-fast)}
.kpi:hover{background:var(--panel2)}
.kpi::before{content:'';position:absolute;left:0;top:0;width:2px;height:100%;background:var(--acc);opacity:0;transition:opacity var(--t-fast)}
.kpi:hover::before{opacity:1}
.kpi .k{
  font-size:10.5px;color:var(--ink3);margin-bottom:6px;font-weight:600;
  text-transform:uppercase;letter-spacing:.12em;
}
.kpi .v{font-family:var(--mono);font-size:20px;font-weight:600;letter-spacing:-.02em;line-height:1.2;color:var(--ink)}
.kpi .s{font-size:11px;color:var(--ink3);margin-top:5px;line-height:1.5}
.kpi.t-ok .v{color:var(--ok)}
.kpi.t-hot .v{color:var(--hot)}
.kpi.t-warn .v{color:var(--warn)}

/* ---------- 面板 ---------- */
.card{
  background:var(--panel);border:1px solid var(--rule);border-radius:var(--r);
  padding:15px 16px;margin-bottom:16px;
}
.card h3{
  margin:0 0 13px;font-size:14px;font-weight:650;letter-spacing:.01em;
  display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  padding-bottom:9px;border-bottom:1px solid var(--rule2);
}
.tag{
  font-size:10.5px;font-weight:600;color:var(--acc-d);background:var(--acc-bg);
  border-radius:3px;padding:2px 7px;letter-spacing:.06em;text-transform:uppercase;
  border:1px solid #f3ddc6;
}
.tag.g{color:var(--ok);background:var(--ok-bg);border-color:#cfe6da}
.tag.r{color:var(--hot);background:var(--hot-bg);border-color:var(--hot-ln)}
.tag.n{color:var(--ink2);background:var(--panel2);border-color:var(--rule2)}
.muted{color:var(--ink2);font-size:12px;margin:11px 0 0;line-height:1.75}
.muted b{color:var(--ink)}

.chart{width:100%;height:258px}
@media(min-width:720px){.chart{height:296px}}

/* ---------- 号码球 ---------- */
.balls{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.ball{
  width:33px;height:33px;border-radius:50%;background:var(--panel);
  border:1px solid var(--rule);display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--ink);aspect-ratio:1/1;
}
.ball.hot{background:var(--hot-bg);border-color:var(--hot-ln);color:var(--hot)}
.ball.cold{background:var(--cold-bg);border-color:var(--cold-ln);color:var(--cold)}
.ball.sm{width:29px;height:29px;font-size:11.5px}

/* ★ 连号高亮：连号组内的号码用琥珀实心 + 白字，一眼可见 */
.ball.cons{
  background:var(--acc);border-color:var(--acc);color:#fff;font-weight:700;
  box-shadow:0 1px 0 rgba(194,95,10,.35) inset;
}
/* 连号组托盘：把「哪几个号是连着的一串」在视觉上框起来，组尾标注「连 N」 */
.balls .run{
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 8px 3px 3px;border-radius:999px;
  background:var(--acc-bg);border:1px solid #f3ddc6;
}
.balls .run .bt{
  font-family:var(--mono);font-size:10px;font-weight:700;color:var(--acc-d);
  letter-spacing:.02em;padding-left:2px;
}
.balls.tight{gap:4px}
.balls.tight .run{gap:3px;padding:2px 7px 2px 2px}
.balls.lg{gap:7px}
.balls.lg .run{padding:3px 10px 3px 3px}
.balls.lg .ball{width:36px;height:36px;font-size:13.5px}

.ball.pick{cursor:pointer;user-select:none;transition:transform var(--t-fast),background var(--t-fast),border-color var(--t-fast)}
.ball.pick:hover{transform:translateY(-2px);border-color:var(--acc)}
.ball.sel{background:var(--acc-bg);border-color:var(--acc);color:var(--acc-d);font-weight:700}
.ball.sel.cons{background:var(--acc);border-color:var(--acc);color:#fff}
.ball.hitball{background:var(--ok-bg);border-color:#a8d5c0;color:var(--ok)}

/* ---------- 热区 / 矩阵 ---------- */
.heat{display:grid;grid-template-columns:repeat(10,1fr);gap:5px}
.heat .h{border-radius:var(--r2);padding:6px 2px;text-align:center;font-size:11.5px;line-height:1.35;border:1px solid var(--rule2)}
.heat .h b{display:block;font-size:13px;font-family:var(--mono);font-weight:600}
.heat .h.t0{background:var(--hot-bg);color:var(--hot);border-color:var(--hot-ln)}
.heat .h.t1{background:#fdf9ea;color:#7d6410;border-color:#f0e5bf}
.heat .h.t2{background:var(--cold-bg);color:var(--cold);border-color:var(--cold-ln)}

.mtx{display:grid;grid-template-columns:repeat(10,1fr);gap:4px}
.mtx .c{
  border-radius:var(--r2);padding:5px 1px;text-align:center;line-height:1.3;
  border:1px solid var(--rule2);color:var(--ink3);cursor:default;
  transition:box-shadow var(--t-fast),transform var(--t-fast),border-color var(--t-fast);
}
.mtx .c:hover{transform:translateY(-2px);z-index:2;position:relative;box-shadow:0 6px 16px rgba(13,17,23,.14);border-color:var(--acc)}
.mtx .c b{display:block;font-family:var(--mono);font-size:12.5px;color:var(--ink);font-weight:600}
.mtx .c i{font-style:normal;font-family:var(--mono);font-size:10px;color:var(--ink3)}
.mtx .lg{display:flex;gap:14px;flex-wrap:wrap;margin-top:11px;font-size:11.5px;color:var(--ink3);align-items:center}
.mtx .lg i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:-1px}

/* ---------- 表格 ---------- */
.tbl{overflow:auto;max-height:470px;border:1px solid var(--rule);border-radius:var(--r)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}
th,td{padding:8px 11px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--rule2)}
th:first-child,td:first-child{text-align:left}
thead th{
  position:sticky;top:0;z-index:2;color:var(--ink3);font-weight:600;font-size:10.5px;
  background:var(--panel2);border-bottom:1px solid var(--rule);
  text-transform:uppercase;letter-spacing:.08em;
}
tbody tr:nth-child(even){background:#fbfcfd}
tbody tr:hover{background:var(--acc-bg)}
tbody tr:last-child td{border-bottom:none}
td.mono,th.mono{font-family:var(--mono);font-size:12px}

/* ---------- 声明 ---------- */
.notes{margin:0;padding:0;list-style:none;counter-reset:n}
.notes li{
  counter-increment:n;position:relative;padding:9px 0 9px 34px;line-height:1.75;
  color:var(--ink2);border-bottom:1px solid var(--rule2);
}
.notes li:last-child{border-bottom:none}
.notes li::before{
  content:counter(n,decimal-leading-zero);position:absolute;left:0;top:9px;
  font-family:var(--mono);font-size:11px;color:var(--acc);font-weight:600;
}
.notes li b{color:var(--ink)}

.ft{
  margin-top:14px;padding:16px 2px;color:var(--ink3);font-size:11.5px;text-align:center;
  line-height:1.9;border-top:1px solid var(--rule);letter-spacing:.02em;
}

/* ---------- 推荐 / 选号 / 待开奖 ---------- */
.rec{border:1px solid var(--rule);border-radius:var(--r);padding:12px 13px;margin-bottom:11px;background:var(--panel2)}
.rec-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;font-weight:600;margin-bottom:10px}
.rec-acts{display:flex;gap:8px;flex-wrap:wrap}
.btn{
  min-height:34px;border:1px solid var(--acc);background:var(--acc);color:#fff;
  border-radius:var(--r2);padding:7px 15px;font-size:12.5px;font-weight:600;font-family:var(--sans);
  letter-spacing:.03em;cursor:pointer;transition:background var(--t-fast),transform var(--t-fast);
}
.btn:hover{background:var(--acc-d);border-color:var(--acc-d)}
.btn:active{transform:translateY(1px)}
.btn.btng{background:var(--panel);color:var(--acc-d)}
.btn.btng:hover{background:var(--acc-bg)}
.btn.btnd{background:var(--panel);color:var(--hot);border-color:var(--hot-ln)}
.btn.btnd:hover{background:var(--hot-bg)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

.rowline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.rowline .lbl{font-size:11.5px;color:var(--ink3);width:54px;flex:0 0 auto;letter-spacing:.04em}
.rowline .mlab{
  font-size:10.5px;color:var(--ink3);background:var(--panel);border:1px solid var(--rule2);
  border-radius:3px;padding:2px 7px;font-family:var(--mono);letter-spacing:.02em;
}
.balls.tight{gap:4px}

.pend{border:1px solid var(--rule);border-radius:var(--r);padding:11px 12px;margin-bottom:9px;background:var(--panel)}
.pend-h{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;margin-bottom:8px}
.pend .meta{font-size:11.5px;color:var(--ink3);margin-top:7px;font-family:var(--mono)}
.pend.exp{border-left:3px solid var(--acc);background:linear-gradient(90deg,var(--acc-bg),var(--panel) 62%)}

.picker{display:grid;grid-template-columns:repeat(10,1fr);gap:5px}
@media(min-width:720px){.picker{gap:6px}}

.empty{
  padding:20px 12px;text-align:center;color:var(--ink3);font-size:12.5px;
  background:var(--panel2);border:1px dashed var(--rule);border-radius:var(--r);
}

/* ---- 「这一注怎么来的」折叠说明 ---- */
.why{margin-top:11px;border:1px solid var(--rule2);border-radius:var(--r2);background:var(--panel)}
.why>summary{
  cursor:pointer;padding:9px 12px;font-size:12.5px;color:var(--acc-d);font-weight:600;
  letter-spacing:.02em;list-style:none;display:flex;align-items:center;gap:7px;
}
.why>summary::-webkit-details-marker{display:none}
.why>summary::before{content:'?';display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;border-radius:50%;background:var(--acc);color:#fff;font-size:11px;font-weight:700}
.why[open]>summary{border-bottom:1px solid var(--rule2)}
.why>summary:focus-visible{outline:2px solid var(--acc);outline-offset:-2px}
.why ol{margin:0;padding:12px 14px 4px 30px;counter-reset:w}
.why ol li{font-size:12.5px;color:var(--ink2);line-height:1.7;margin-bottom:5px}
.why ol li::marker{color:var(--acc);font-family:var(--mono);font-weight:600}
.why #recHowExtra{padding:0 14px 12px}
.why #recHowExtra .muted{margin-top:6px}
