/* chuan.ma — 学习内容页共享样式
   工具页（play.html / calculator.html / tiles.html）仍各自内联样式、保持单文件自包含；
   学习内容页共用本文件，便于统一演进设计。

   两条硬规则（破坏即失去「层次」）：
   1. **色板与版式尺度集中维护在 web/tokens.js** —— build.mjs 会把下面的占位展开成 :root{...}。
      本文件里不允许出现字面量的字号 / 间距 / 圆角 / 边框宽，一律引用变量。
      （本文件单独打开时没有变量定义，属预期：它是构建源，产物是 web/dist/site.css）
   2. **同语义元素跨页必须同尺寸**（h1 恒为 --fs-h1，卡片恒为 --r-md …）。
      新增元素先选 --fs-* / --sp-* 里已有的角色，不要新造数值 —— 层次来自「只有这几档」。
*/
:root{
  --bg:#f5f6f8;
  --card:#ffffff;
  --ink:#1a1d21;
  --sub:#5b6470;
  --line:#e4e8ed;
  --accent:#1f6feb;
  --gold:#c9971f;
  --felt:#2f6b4f;
  --wan:#c0392b;
  --tiao:#1e8e5a;
  --tong:#2b6cb0;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --cm-tiao-tile:#1c7d4d;
  --cm-tiao-red:#c0392b;
  --cm-accent-hi:#3d8ef8;
  --cm-accent-lo:#1a5fd0;
  --cm-tile-top:#fdf9ee;
  --cm-tile-mid:#f6efdd;
  --cm-tile-bot:#e7dcc3;
  --cm-tile-edge:#c6b99c;
  --cm-panel-top:#fffefa;
  --cm-panel-bot:#f7f2e5;
  --cm-panel-edge:#e2dac5;
  --cm-felt-hot:#2e7f5b;
  --cm-felt-deep:#0a2c1e;
  --cm-rim-gold:#d9b45c;
  --cm-rim-outer:#061c12;
  --cm-shell-bg:#0f1418;
  --cm-shell-head:#161c22;
  --cm-shell-line:#232b33;
  --cm-head-ink:#e9edf2;
  --cm-dim:#93a1b0;
  --cm-faint:#6b7784;
  --cm-panel:#1b2229;
  --cm-panel-line:#2c353f;
  --cm-panel-ink:#dfe6ee;
  --cm-link:#4b9bff;
  --cm-link-hi:#8ec2ff;
  --cm-btn-hi:#cfe0f0;
  --cm-accent-edge:#7ab2ff;
  --cm-ok-bg:#14351f;
  --cm-ok-ink:#7fd8a5;
  --cm-fail-bg:#3b1717;
  --cm-fail-ink:#f19a90;
  --cm-easy:#0f6e56;
  --cm-hard:#a32d2d;
  --cm-me:#f6f9ff;
  --cm-drawer-bg:rgba(14,20,26,.95);
  --cm-drawer-line:#2b343d;
  --cm-drawer-ink:#c3cdd8;
  --cm-overlay:rgba(8,12,16,.72);
  --cm-stage:#0b2a1c;
  --fs-meta:12px;
  --fs-small:13px;
  --fs-dense:14px;
  --fs-ui:15px;
  --fs-body:16px;
  --fs-h3:18px;
  --fs-h2:22px;
  --fs-h1:28px;
  --fs-num:40px;
  --sp-hair:2px;
  --sp-xs:4px;
  --sp-sm:8px;
  --sp-md:12px;
  --sp-lg:16px;
  --sp-xl:20px;
  --sp-xxl:24px;
  --sp-3xl:32px;
  --sp-4xl:40px;
  --sp-5xl:64px;
  --r-sm:6px;
  --r-md:12px;
  --r-lg:20px;
  --r-full:999px;
  --bw-hair:1px;
  --bw-rule:2px;
  --bw-accent:4px;
  --lh-tight:1.25;
  --lh-ui:1.5;
  --lh-body:1.7;
}

*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);
  font-size:var(--fs-body);line-height:var(--lh-body);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;text-size-adjust:100%}
a{color:var(--accent)}
img,svg,table{max-width:100%}
.wrap{max-width:820px;margin:0 auto;padding:0 var(--sp-xl) var(--sp-5xl)}

/* ── 顶部导航 ──
   链接的可点区域用「padding + 等量负 margin」放大到 ≥32px 高：
   视觉位置与间距完全不变，但满足触控目标下限（此前只有 22px 高）。 */
/* ── 全站统一顶栏：只有「品牌 + 设置」两件事，其余导航与语言都进设置面板 ──
   由 site.js 就地改写页面里的 <nav>，所以这里只留 .cmbar 一套样式。 */
nav{background:#fff;border-bottom:var(--bw-hair) solid var(--line);position:sticky;top:0;z-index:9}
nav.cmbar{display:flex;align-items:center;padding:var(--sp-xs) var(--sp-xl);gap:var(--sp-sm);min-height:0}
nav.cmbar .spacer{flex:1}
nav.cmbar .brand{font-weight:800;letter-spacing:-.01em;text-decoration:none;color:var(--ink);
  font-size:var(--fs-body);display:inline-flex;align-items:baseline;gap:var(--sp-sm)}
nav.cmbar .brand b span{color:var(--gold)}
nav.cmbar .brand i{font-style:normal;font-weight:600;color:var(--sub);font-size:var(--fs-small)}
nav.cmbar .brand:hover i{color:var(--accent)}
nav.cmbar .iconbtn{border:var(--bw-hair) solid var(--line);background:transparent;color:var(--ink);
  width:40px;height:40px;border-radius:var(--r-full);display:inline-flex;align-items:center;
  justify-content:center;cursor:pointer;padding:0;flex:0 0 auto}
nav.cmbar .iconbtn:hover{border-color:var(--accent);color:var(--accent)}
nav.cmbar .iconbtn svg{width:20px;height:20px}

/* ── 设置面板（语言 + 页面导航）── */
.cmsheet{position:fixed;inset:0;background:rgba(16,22,28,.55);display:none;z-index:60;
  align-items:flex-start;justify-content:flex-end;padding:var(--sp-4xl) var(--sp-xl)}
.cmsheet.show{display:flex}
.cmsheet-in{background:var(--card);border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);
  padding:var(--sp-xl);max-width:min(420px,92vw);width:100%;box-shadow:0 18px 50px rgba(0,0,0,.28)}
.cmgroup{margin-bottom:var(--sp-lg)}
.cmlbl{font-size:var(--fs-meta);font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:var(--sub);margin-bottom:var(--sp-sm)}
.cmpills{display:flex;flex-wrap:wrap;gap:var(--sp-xs)}
.cmpill{border:var(--bw-hair) solid var(--line);background:transparent;color:var(--ink);
  border-radius:var(--r-full);padding:0 var(--sp-md);min-height:32px;
  display:inline-flex;align-items:center;font-size:var(--fs-small);font-weight:600;
  text-decoration:none;cursor:pointer}
.cmpill:hover{border-color:var(--accent);color:var(--accent)}
.cmpill.on{background:var(--accent);border-color:var(--accent);color:#fff}
.cmactions{display:flex;justify-content:flex-end}
.cmbtn{border:var(--bw-hair) solid var(--line);background:transparent;color:var(--ink);
  border-radius:var(--r-sm);padding:0 var(--sp-lg);min-height:36px;font-size:var(--fs-small);
  font-weight:700;cursor:pointer}
.cmbtn:hover{border-color:var(--accent);color:var(--accent)}

/* ── 页头 ── */
header.top{padding:var(--sp-4xl) 0 var(--sp-sm)}
.kicker{font-size:var(--fs-meta);letter-spacing:.18em;text-transform:uppercase;
  color:var(--sub);font-weight:800}
h1{font-size:var(--fs-h1);line-height:var(--lh-tight);margin:var(--sp-sm) 0;letter-spacing:-.02em}
.lede{color:var(--sub);font-size:var(--fs-body);line-height:var(--lh-body);margin:0}

/* ── 正文 ── */
h2{font-size:var(--fs-h2);line-height:var(--lh-tight);margin:var(--sp-4xl) 0 var(--sp-sm);
  letter-spacing:-.01em;padding-top:var(--sp-sm);border-top:var(--bw-hair) solid var(--line)}
h2:first-of-type{border-top:0;padding-top:0}
h3{font-size:var(--fs-h3);line-height:var(--lh-tight);margin:var(--sp-xxl) 0 var(--sp-xs)}
h4{font-size:var(--fs-ui);line-height:var(--lh-ui);margin:var(--sp-lg) 0 var(--sp-xs)}
p{margin:var(--sp-sm) 0}
ul,ol{margin:var(--sp-sm) 0;padding-left:var(--sp-xxl)}
li{margin:var(--sp-xs) 0}
.zh{font-size:.86em;color:var(--sub);font-family:var(--mono)}
b,strong{font-weight:700}

/* ── 表格 ──
   必须包在 .tbl-scroll 里：窄屏下表格内容撑破容器会让**整页**出现横向滚动条
   （实测 learn-rules 的 4 个裸表格把 375px 视口撑到 406px）。 */
.tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
table{width:100%;border-collapse:collapse;margin:var(--sp-lg) 0;font-size:var(--fs-dense);
  background:#fff;border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);overflow:hidden}
th,td{text-align:left;padding:var(--sp-md);border-bottom:var(--bw-hair) solid var(--line);vertical-align:top}
th{background:#f0f2f5;font-size:var(--fs-meta);text-transform:uppercase;letter-spacing:.06em;color:var(--sub)}
tr:last-child td{border-bottom:0}
td.n,th.n{font-variant-numeric:tabular-nums;white-space:nowrap}
td.c,th.c{text-align:center}

/* ── 提示框 ── */
.box{background:#fff;border:var(--bw-hair) solid var(--line);border-left:var(--bw-accent) solid var(--accent);
  border-radius:var(--r-md);padding:var(--sp-lg);margin:var(--sp-lg) 0}
.box.warn{border-left-color:#d9822b}
.box.good{border-left-color:var(--tiao)}
.box h4{margin:0 0 var(--sp-xs)}
.box p:last-child{margin-bottom:0}

/* ── 步骤 ── */
.steps{counter-reset:s;list-style:none;padding:0}
.steps>li{counter-increment:s;position:relative;padding:0 0 0 var(--sp-4xl);margin:var(--sp-lg) 0}
.steps>li::before{content:counter(s);position:absolute;left:0;top:2px;width:26px;height:26px;
  border-radius:var(--r-full);background:var(--accent);color:#fff;font-size:var(--fs-small);font-weight:800;
  display:flex;align-items:center;justify-content:center}

/* ── 手牌条（定缺练习的 13 张牌）──
   行高按「一整排牌」定，所以用 px 而不是倍数 */
.hand{background:#fff;border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);
  padding:var(--sp-md);margin:var(--sp-md) 0;font-size:var(--fs-ui);line-height:var(--sp-3xl)}

/* ── 真实牌面（web/tiles-ui.js 运行期生成的 SVG） ──────────────────────────
   教学页的核心资产：讲哪张牌就画哪张牌，与牌桌 / 算牌器共用同一份源码 ——
   纯图片方案做不到这一点（插图会跟真牌漂移）。尺寸只取 --sp-* 已有档位，不新造数值。
   （此前的 .tile 纯文字牌面编码已随本页改版下线：有真牌面之后，文字编码反而更慢认。） */
.face{display:inline-block;width:var(--sp-3xl);height:calc(var(--sp-3xl) * 1.4);line-height:0;vertical-align:middle}
.face.lg{width:var(--sp-4xl);height:calc(var(--sp-4xl) * 1.4)}
.face.xl{width:var(--sp-5xl);height:calc(var(--sp-5xl) * 1.4)}

/* 一副牌总览：一个花色一行、每行九张；牌宽随格子走（宽高比 = 60:84） */
.deckwrap{margin:var(--sp-lg) 0}
.suitrow{margin:var(--sp-lg) 0}
.suitcap{font-size:var(--fs-meta);letter-spacing:.06em;text-transform:uppercase;color:var(--sub);font-weight:800}
.suitcap .zh{text-transform:none;font-size:var(--fs-small)}
.deck{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:var(--sp-sm);margin:var(--sp-sm) 0 0}
.cell{display:flex;flex-direction:column;align-items:center;gap:var(--sp-hair);min-width:0}
.cell .face{width:100%;height:auto;aspect-ratio:5/7}
.cn{font-size:var(--fs-meta);color:var(--sub);font-variant-numeric:tabular-nums;font-weight:700}
.cn i{font-style:normal;margin-left:var(--sp-hair)}

/* 颜色锚点：四张「一眼认得出」的条子 */
.landmark{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-md);margin:var(--sp-lg) 0}
.lm{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:var(--sp-xs);
  background:#fff;border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);
  padding:var(--sp-md);text-align:center}
.lm b{font-size:var(--fs-dense)}
.lm-note{font-size:var(--fs-meta);color:var(--sub);line-height:var(--lh-ui)}
.lm-note em{font-style:normal;font-weight:800;color:var(--wan)}

/* ── 随堂练习 ──
   .fb 给固定 min-height：答完题文字长度会变，不留位的话按钮会被顶得上下跳。 */
.drill{background:#fff;border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);
  padding:var(--sp-lg);margin:var(--sp-lg) 0}
.drill .q{display:flex;justify-content:center;margin-bottom:var(--sp-lg)}
.opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-sm)}
.opts.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.btn{font:inherit;font-size:var(--fs-dense);font-weight:700;color:var(--ink);background:#fff;
  border:var(--bw-hair) solid var(--line);border-radius:var(--r-sm);
  padding:var(--sp-sm) var(--sp-md);cursor:pointer;text-align:center;line-height:var(--lh-ui)}
.btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.btn:disabled{cursor:default}
.btn .py{display:block;font-size:var(--fs-meta);font-weight:600;color:var(--sub);font-family:var(--mono)}
.btn.ok{border-color:var(--tiao);color:var(--tiao);box-shadow:inset 0 0 0 var(--bw-rule) var(--tiao)}
.btn.ok .py{color:var(--tiao)}
.btn.no{border-color:var(--wan);color:var(--wan);box-shadow:inset 0 0 0 var(--bw-rule) var(--wan)}
.btn.no .py{color:var(--wan)}
.fb{text-align:center;font-size:var(--fs-dense);color:var(--sub);min-height:var(--sp-3xl);margin:var(--sp-md) 0}
.fb.ok{color:var(--tiao)} .fb.no{color:var(--wan)}
.score{display:flex;align-items:center;justify-content:center;gap:var(--sp-lg);flex-wrap:wrap;
  font-size:var(--fs-dense);font-weight:700;color:var(--sub)}
.score .btn{font-size:var(--fs-small)}

/* ── 下一页 ── */
.next{display:flex;gap:var(--sp-md);flex-wrap:wrap;margin-top:var(--sp-3xl)}
.next a{flex:1 1 200px;background:#fff;border:var(--bw-hair) solid var(--line);border-radius:var(--r-md);
  padding:var(--sp-lg);text-decoration:none;color:inherit}
.next a:hover{border-color:var(--accent)}
.next .k{font-size:var(--fs-meta);letter-spacing:.14em;text-transform:uppercase;color:var(--sub);font-weight:800}
.next .t{font-weight:700;margin-top:var(--sp-xs);font-size:var(--fs-body)}
footer{color:var(--sub);font-size:var(--fs-meta);margin-top:var(--sp-4xl);text-align:center}

/* ── 首页：学习路径卡片 ── */
.path{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-lg);margin:var(--sp-xxl) 0 0}
a.step{position:relative;display:block;background:#fff;border:var(--bw-hair) solid var(--line);
  border-radius:var(--r-lg);padding:var(--sp-xl);text-decoration:none;color:inherit;
  transition:.16s;overflow:hidden}
a.step:hover{transform:translateY(-3px);box-shadow:0 12px 30px rgba(20,30,50,.10);border-color:var(--accent)}
a.step::before{content:'';position:absolute;left:0;top:0;bottom:0;width:var(--bw-accent);background:var(--accent)}
a.step.t2::before{background:var(--tiao)}
a.step.t3::before{background:var(--gold)}
a.step.t4::before{background:var(--wan)}
.stepno{font-size:var(--fs-meta);letter-spacing:.16em;text-transform:uppercase;color:var(--sub);font-weight:800}
a.step h3{margin:var(--sp-sm) 0 var(--sp-xs);font-size:var(--fs-h3)}
a.step p{margin:0 0 var(--sp-sm);color:var(--sub);font-size:var(--fs-dense);line-height:var(--lh-ui)}
/* 卡片行动号召：此前 HTML 用了 .go 但样式表里没有这条规则，8 个 CTA 完全裸奔 */
.go{margin-top:var(--sp-md);font-size:var(--fs-small);font-weight:700;color:var(--accent)}
a.step:hover .go{text-decoration:underline}
.hero-dots{letter-spacing:var(--sp-sm);font-weight:800;font-size:var(--fs-h3);
  margin-top:var(--sp-md);line-height:var(--lh-tight)}
.hero-dots span:nth-child(1){color:var(--wan)}
.hero-dots span:nth-child(2){color:var(--tiao)}
.hero-dots span:nth-child(3){color:var(--tong)}

@media(max-width:680px){
  .path{grid-template-columns:1fr}
  /* 窄屏 h1 退到二级标题尺寸 —— 仍取自同一套尺度，不新造数值 */
  h1{font-size:var(--fs-h2)}
}
@media(max-width:600px){
  .navin{gap:var(--sp-md);padding:var(--sp-sm) var(--sp-lg)}
  .wrap{padding:0 var(--sp-lg) var(--sp-4xl)}
  header.top{padding:var(--sp-xxl) 0 var(--sp-sm)}
  h2{margin-top:var(--sp-3xl)}
  /* 窄屏保留「一门一行九张」的行结构（换成 3 列会让总览变成九行长条），
     只把列间距收到发丝级 —— 375px 下每张牌仍有 36px 宽，认形足够。 */
  .deck{gap:var(--sp-hair)}
  .landmark{grid-template-columns:repeat(2,minmax(0,1fr))}
}
