/* poker-all shell stylesheet — merged from two read-only source repos.
 * Base  = poker-post-flop/index.html <style> block (design tokens, layout, postflop screens).
 * Added = poker-preflop/gto-trainer.html <style> block, appended below under "PF module"
 *         (its own :root token block was dropped — the PO :root above is canonical for both).
 *
 * Class-name conflict cleanup (PO source vs PF source both had these; kept distinct to avoid
 * one module's markup silently repainting the other's, since both live in one shared stylesheet
 * now instead of two separate single-page apps):
 *
 *   Merged as-is (identical rule in both source files, PF's duplicate line dropped, no rename):
 *     .a-fold  .a-call  .red  .blk  .leak-row  .rv-chips
 *     (html/body/#app/* base rules: PO's copies are canonical; PF's page-container-level
 *      duplicates for *, html, body, #app were dropped entirely — PF's gto-trainer.html was
 *      its own full-page app with position:fixed #app etc, which does not apply once PF is
 *      just one <section> inside the shared shell's #app/main. If PF needs page-level mobile
 *      touches like overflow:hidden/user-select:none later, add them scoped to #mod-preflop,
 *      not to body/#app.)
 *
 *   Renamed with pf- prefix (PF semantics differ from PO's same-named class — Task 9 must
 *   update PF markup/JS to use the new class names when it ports gto-trainer.html's DOM):
 *     .a-raise -> .pf-a-raise      .screen -> .pf-screen (+ .hide/h1/h1 b/p)
 *     .fb-leak -> .pf-fb-leak (+ .hide/b)     .intro-ov -> .pf-intro-ov
 *     .intro-card -> .pf-intro-card (+ h3/p)  .intro-dots -> .pf-intro-dots
 *     .back-btn -> .pf-back-btn               .coach-card -> .pf-coach-card
 *     .coach-note -> .pf-coach-note           .prof-row -> .pf-prof-row (+ :first-child)
 *     .prof-k -> .pf-prof-k                   .prof-d -> .pf-prof-d
 *     .leak-lab -> .pf-leak-lab               .leak-trk -> .pf-leak-trk (+ i)
 *     .leak-n -> .pf-leak-n                   .leak-sub -> .pf-leak-sub
 *     .leak-hand -> .pf-leak-hand             .leak-drill -> .pf-leak-drill
 *     .rv-mini -> .pf-rv-mini                 .sbar -> .pf-sbar
 *     .rv-group -> .pf-rv-group               .rv-head -> .pf-rv-head (+ b)
 *     .rv-chip -> .pf-rv-chip (+ .wn/.st/.del/.del:active)
 *
 *   PO's own `.card` was NOT renamed, even though it collides with PF's `.card`, because it
 *   isn't just PO's — it's the class core/table.js (pre-existing, shared) renders when it
 *   builds card markup (cardHtml/backCardHtml emit class="card"/"face"/"back"/"rk"/"pip-c"
 *   plus the same mini/mid/sm/flip modifiers), ported verbatim off PO's original CSS. Renaming
 *   it would silently break that shared module for whichever of PF/PO ends up using it. So
 *   `.card` stays PO's/table.js's canonical playing-card, and the plan's original "index.html
 *   uses class=card for Home tiles" was changed to `class="tile"` instead (see index.html and
 *   the "shell" section below) — using `.card` for both a playing card and a clickable Home
 *   panel in the same stylesheet would have been the exact bug this cleanup pass exists to
 *   catch, just introduced fresh instead of inherited.
 *
 *   Left alone, not real conflicts (same class token appears in both files but as part of a
 *   different compound selector, e.g. PO's `.pseat.folded` vs PF's `.seat.folded` — different
 *   base class required alongside it, so no collision in practice): .folded .hero .on .k .v
 *   .big .wrong .badge (PO's bare `.badge` vs PF's `.scene .badge` — different selectors)
 *   fb-grade (PO's `.feedback-screen .fb-grade` vs PF's bare `.fb-grade` — different selectors).
 */

@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:500 700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}

    :root {
      --felt: #0c2a22;
      --felt2: #0a201a;
      --panel: #161d18;
      --line: #28332a;
      --ink: #f1f5ee;
      --muted: #8fa79a;
      --gold: #e8c66a;
      --gold2: #b8902f;
      --call: #34b074;
      --raise: #e0544f;
      --fold: #5b6f63;
      --best: #34b074;
      --wrong: #e0544f;
      /* M4 Task G2：规范四档 token（js/core/grade.js Grade.token()）。--best/--gold 已在上面；
         --good/--inacc 是 PF 6 档自留的更细色阶（Task G2 Step3，'好棋'/'两可'|'不准'，映射进
         规范档时都并入 perfect/ok，见 grade.js 头注释），--mistake/--blunder 是 blunder/
         bigBlunder 的 token。这四个变量此前在 js/preflop/app.js（gradeHand 的 gcolor）与
         css 里多处已被引用（var(--mistake,#e0954f) 等），但 :root 从未真正声明过（PF 旧
         :root 块被合并时漏带，见本文件顶部注释）——一直静默回落成"未设置"（color 继承父级，
         视觉上等于没上色）。这里补上真实取值，同时修好这个遗留 bug、也是 FS/PO bigBlunder
         徽标能正确显色的前提。 */
      --good: #e8c66a;
      --inacc: #d9a35c;
      --mistake: #e0954f;
      --blunder: #c0392b;
      /* M4.5 Task R2：6 级训练段位 token（js/core/skill.js Skill.rankToken()）。复用上面
         已有的调色板（不新造颜色数值）：novice→muted 依次到 elite→best，同 M4 四档 token
         "复用不新造" 的既有做法一致。段位徽章一次只显示一档，六色不会同屏相邻对比，
         --call/--best 复用同一色号不构成视觉冲突。 */
      --rank-1: var(--muted);
      --rank-2: var(--fold);
      --rank-3: var(--call);
      --rank-4: var(--gold2);
      --rank-5: var(--gold);
      --rank-6: var(--best);
      --card-r: 10px;
      --space-1: 6px;
      --space-2: 8px;
      --space-3: 12px;
      --space-4: 16px;
      --btn-h: 48px;
      --btn-h-sm: 40px;
      --btn-h-nav: 44px;
      --btn-radius: 12px;
      --btn-font: .9rem;
      --btn-font-sm: .78rem;
    }
    * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
    html, body { margin: 0; height: 100%; }
    body {
      font-family: "Space Grotesk", "Noto Sans SC", system-ui, sans-serif;
      color: var(--ink);
      background: radial-gradient(120% 80% at 50% -10%, #14463a 0%, var(--felt) 45%, var(--felt2) 100%);
      -webkit-font-smoothing: antialiased;
    }
    #app {
      max-width: 520px;
      margin: 0 auto;
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      border-left: 1px solid rgba(0,0,0,.3);
      border-right: 1px solid rgba(0,0,0,.3);
      box-shadow: 0 0 80px rgba(0,0,0,.5);
    }
    .topbar {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 14px 16px 8px;
    }
    .topbar h1 { margin: 0; font-size: 1.15rem; font-weight: 700; }
    .topbar .sub { font-size: .75rem; color: var(--muted); }
    .topbar-right { display: flex; align-items: center; gap: 8px; }
    .ios-badge {
      display: inline-flex; align-items: center; gap: 5px;
      border: 1px solid var(--gold2); border-radius: 8px;
      padding: 6px 10px; font-size: .8rem; font-weight: 700;
      color: var(--gold); text-decoration: none; white-space: nowrap;
      background: rgba(232,198,106,.12);
    }
    .ios-badge:hover { background: rgba(232,198,106,.25); }
    /* iOS 卡右侧二维码:手机上没意义(点徽章即达),仅桌面显示 */
    .ios-card { position: relative; }
    .ios-card .cc-qr { display: none; }
    @media (min-width: 700px) {
      /* .course-card 的 padding 规则在后面, 单类会被顶掉 → 双类提特异性 */
      .course-card.ios-card { padding-right: 104px; }
      .ios-card .cc-qr {
        display: block; position: absolute; right: 14px; top: 50%;
        transform: translateY(-50%); width: 76px;
        background: #fff; border-radius: 8px; padding: 4px;
      }
    }
    .lang-switch {
      display: flex;
      border: 1px solid var(--line);
      border-radius: 8px;
      overflow: hidden;
      background: rgba(0,0,0,.25);
    }
    .lang-switch button {
      border: 0;
      background: transparent;
      color: var(--muted);
      padding: 6px 10px;
      font-weight: 700;
      cursor: pointer;
      font-family: inherit;
      font-size: .8rem;
    }
    .lang-switch button + button { border-left: 1px solid var(--line); }
    .lang-switch button.active {
      background: rgba(232,198,106,.15);
      color: var(--gold);
    }
    /* ≥3 语时 syncLangButtons() 把按钮换成这个下拉(原生 select 在深色主题里默认是白底,必须压掉) */
    #lang-select {
      appearance: none; -webkit-appearance: none;
      border: 0; background: transparent; color: var(--gold);
      font-family: inherit; font-size: .8rem; font-weight: 700;
      padding: 6px 22px 6px 10px; cursor: pointer; outline: none;
      /* 自绘下拉箭头(去掉原生的) */
      background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%),
                        linear-gradient(135deg, var(--muted) 50%, transparent 50%);
      background-position: right 10px top 50%, right 6px top 50%;
      background-size: 4px 4px, 4px 4px;
      background-repeat: no-repeat;
    }
    /* 展开的选项列表由系统渲染,只能设底色/字色 */
    #lang-select option { background: var(--panel); color: var(--ink); }
    /* #screens:PO 源的 flex:1/overflow-y:auto/padding-bottom:80px 已删——进壳后父容器
       (#mod-postflop/main)不是 flex 且滚动归壳 main,flex/overflow 失效;80px 又与 main 的
       底 padding(64px+safe-area+16px)叠出 ~160px 尾白。底部留白统一由壳 main 一处供给。 */
    .screen { padding: 12px 16px 24px; animation: fadeIn .2s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
    .page-head h2 { margin: 0 0 4px; font-size: 1.4rem; }
    .muted { color: var(--muted); font-size: .9rem; margin: 0; }
    /* 课程 2 列网格(向 Preflop Camp 看齐);功能卡(每日/摸底/引导横幅/互链)占整行 */
    .course-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 16px; }
    .course-grid > .onboard-banner,
    .course-grid > .daily-card,
    .course-grid > .placement-card,
    .course-grid > .pro-card,
    .course-grid > .cross-card { grid-column: 1 / -1; }
    /* 整卡可点的课程卡(压缩版):课号进度环 + 标题 + 题数/正确率 */
    .lesson-card {
      display: flex; flex-direction: column; align-items: flex-start; gap: 8px;
      text-align: left; cursor: pointer; font-family: inherit; color: var(--ink);
      transition: transform .14s ease, border-color .18s;
    }
    .lesson-card:not(.locked):hover { transform: translateY(-3px); border-color: var(--gold); }
    .lesson-card:not(.locked):active { transform: translateY(-1px) scale(.98); }
    .lesson-card h3 { margin: 0; font-size: .95rem; line-height: 1.3; }
    .lesson-card .cc-sub { margin: 0; font-size: .76rem; }
    .lesson-card .cc-meta { margin: 0; margin-top: auto; }
    .lesson-card .cc-top { display: flex; align-items: center; gap: 8px; width: 100%; }
    .lesson-card .badges { display: flex; gap: 4px; margin-left: auto; }
    /* 课号进度环:弧长 = 该课正确率,颜色随评级 */
    .ring { position: relative; width: 34px; height: 34px; flex: none; }
    .ring svg { transform: rotate(-90deg); display: block; }
    .ring .num {
      position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
      font-weight: 700; font-size: .8rem; color: var(--gold);
    }
    .course-card {
      background: var(--panel);
      border: 1px solid var(--line);
      border-radius: 14px;
      padding: 14px 16px;
    }
    .course-card.locked { opacity: .72; }
    .course-card.done { border-color: rgba(52,176,116,.35); }
    .cc-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
    .cc-num {
      width: 28px; height: 28px; border-radius: 8px;
      background: rgba(232,198,106,.15);
      color: var(--gold);
      display: flex; align-items: center; justify-content: center;
      font-weight: 700; font-size: .85rem;
    }
    .badge {
      font-size: .65rem; font-weight: 700; letter-spacing: .06em;
      text-transform: uppercase; padding: 3px 8px; border-radius: 999px;
    }
    .badge.free { background: rgba(52,176,116,.2); color: #7dffc0; }
    .badge.pro { background: rgba(176,106,214,.2); color: #d9a8ff; }
    .badge.done-badge { background: rgba(52,176,116,.15); color: var(--call); }
    .badge.daily-badge { background: rgba(240,180,60,.18); color: var(--gold); }
    .badge.placement-badge { background: rgba(110,181,255,.18); color: #9fd0ff; }
    /* 趋势图:hover 气泡 + 十字线容器 */
    .trend-wrap { position: relative; }
    .trend-tip {
      position: absolute; top: -4px; pointer-events: none;
      background: #0d1511; border: 1px solid var(--line); border-radius: 8px;
      padding: 4px 9px; font-size: .74rem; color: var(--ink); white-space: nowrap;
      box-shadow: 0 4px 14px rgba(0,0,0,.45);
    }
    /* 反馈闭环:动作对比条 + 错误归因 */
    .fb-vs {
      display: flex; align-items: center; justify-content: center; gap: 14px;
      background: var(--panel); border: 1px solid var(--line); border-radius: 12px;
      padding: 10px 12px; margin: 0 0 10px;
    }
    .fb-vs-side { display: flex; flex-direction: column; align-items: center; gap: 3px; }
    .fb-chips { display: flex; gap: 4px; }
    /* chip 复用 .a-{act} 按钮渐变(色随实体,与刚按过的按钮一致),白字 */
    .fb-chip {
      color: #fff; font-weight: 800; font-size: .82rem;
      padding: 4px 14px; border-radius: 999px;
      text-shadow: 0 1px 2px rgba(0,0,0,.35);
    }
    .fb-chip-k { font-size: .68rem; color: var(--muted); }
    .fb-vs-arrow { color: var(--muted); font-weight: 700; }
    .fb-leak {
      display: flex; align-items: center; justify-content: space-between; gap: 10px;
      background: rgba(224,84,79,.08); border: 1px solid rgba(224,84,79,.25);
      border-radius: 12px; padding: 8px 12px; margin: 0 0 10px;
    }
    .fb-leak-txt { font-size: .84rem; color: var(--ink); }
    /* 新手引导 overlay（z-index 与 .pf-intro-ov 的 140 对齐:原 50 会被壳 tabbar 的 80 压穿,
       模态引导期间 tabbar 浮在遮罩上还能点） */
    .intro-ov {
      position: fixed; inset: 0; z-index: 140;
      background: rgba(6,14,11,.72); backdrop-filter: blur(3px);
      display: flex; align-items: center; justify-content: center; padding: 24px;
    }
    .intro-card {
      position: relative;
      background: var(--panel); border: 1px solid var(--line); border-radius: 18px;
      padding: 24px 20px; max-width: 340px; width: 100%; text-align: center;
      box-shadow: 0 18px 50px rgba(0,0,0,.5);
    }
    /* 引导内语言切换(顶栏被 overlay 盖住,首启必须能切中文) */
    .intro-lang {
      position: absolute; top: 10px; right: 10px;
      display: flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
      background: rgba(0,0,0,.25);
    }
    .intro-lang button {
      border: 0; background: transparent; color: var(--muted);
      padding: 4px 9px; font-weight: 700; font-size: .74rem; cursor: pointer; font-family: inherit;
    }
    .intro-lang button + button { border-left: 1px solid var(--line); }
    .intro-lang button.on { background: rgba(232,198,106,.15); color: var(--gold); }
    .intro-ic { font-size: 2rem; margin-bottom: 6px; }
    .intro-card h3 { margin: 0 0 8px; font-size: 1.12rem; }
    .intro-card p { margin: 0 0 14px; color: var(--muted); font-size: .88rem; line-height: 1.55; }
    .intro-dots { display: flex; justify-content: center; gap: 6px; margin-bottom: 14px; }
    .intro-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--line); }
    .intro-dot.on { background: var(--gold); }
    /* 姐妹站互链卡 */
    .cross-card { display: block; text-decoration: none; border-left: 3px solid #9fd0ff; }
    .cross-card h3 { color: var(--ink); }
    .cross-card .cc-sub { margin-bottom: 10px; }
    .cross-go { color: #9fd0ff; font-weight: 700; font-size: .88rem; }
    /* Pro 入口卡(首屏常驻,未解锁时;苹果 2.1(b) 要求内购显眼可达) */
    .pro-card {
      display: block; text-align: left; cursor: pointer; width: 100%;
      border: 1px solid var(--gold); border-left: 3px solid var(--gold);
      background: linear-gradient(180deg, rgba(232,198,106,.09), rgba(232,198,106,.03));
    }
    .pro-card h3 { color: var(--gold); }
    .pro-card .cc-sub { margin-bottom: 10px; }
    .pro-go { color: var(--gold); font-weight: 700; font-size: .88rem; }
    .badge.pro-badge { background: rgba(232,198,106,.18); color: var(--gold); }
    /* 课程评级徽章 (S/A/B/C) */
    .badge.grade-badge { font-weight: 800; min-width: 20px; text-align: center; }
    .grade-S { background: rgba(240,180,60,.22); color: var(--gold); }
    .grade-A { background: rgba(52,176,116,.2); color: #7dffc0; }
    .grade-B { background: rgba(110,181,255,.18); color: #9fd0ff; }
    .grade-C { background: rgba(255,255,255,.08); color: var(--muted); }
    /* 每日训练卡 */
    .daily-card { border-left: 3px solid var(--gold); }
    .daily-card.done { opacity: .92; }
    .daily-flame { color: var(--gold); font-size: .82rem; font-weight: 600; white-space: nowrap; }
    .big-flame { font-size: 1.15rem; margin: 4px 0 0; }
    /* 结算页评级大徽章 */
    .grade-hero {
      display: inline-block; font-size: 2.4rem; font-weight: 800; line-height: 1;
      padding: 14px 22px; border-radius: 16px; margin-top: 12px;
    }
    .course-card h3 { margin: 0 0 4px; font-size: 1.05rem; }
    .cc-sub { margin: 0 0 8px; color: var(--muted); font-size: .85rem; line-height: 1.45; }
    .cc-meta { margin: 0 0 12px; font-size: .78rem; color: var(--muted); }
    .cc-lock { margin: 0; font-size: .82rem; color: #e98a3c; }
    .btn,
    .choice-btn,
    .act-btn,
    .nav-btn,
    .back-btn {
      font-family: inherit;
      font-weight: 700;
      cursor: pointer;
      appearance: none;
      -webkit-tap-highlight-color: transparent;
      transition: transform .12s ease, filter .12s ease, background .12s ease;
    }
    .btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-height: var(--btn-h);
      padding: 0 var(--space-4);
      width: 100%;
      border: 0;
      border-radius: var(--btn-radius);
      font-size: var(--btn-font);
      line-height: 1.25;
      text-align: center;
    }
    .btn-sm {
      min-height: var(--btn-h-sm);
      padding: 0 var(--space-3);
      font-size: var(--btn-font-sm);
      width: auto;
      border-radius: 10px;
    }
    .btn-stack {
      display: flex;
      flex-direction: column;
      gap: var(--space-2);
      margin-top: var(--space-4);
    }
    .btn-row {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: var(--space-2);
      margin-top: var(--space-1);
    }
    .btn-row .btn { width: 100%; }
    .btn.primary {
      color: #16110a;
      background: linear-gradient(180deg, var(--gold), var(--gold2));
      box-shadow: 0 3px 0 rgba(0,0,0,.28);
    }
    .btn.secondary {
      color: var(--ink);
      background: rgba(0,0,0,.28);
      border: 1px solid var(--line);
      box-shadow: none;
    }
    .btn.outline {
      color: var(--gold);
      background: transparent;
      border: 1px solid var(--line);
      box-shadow: none;
    }
    .btn.outline:hover { background: rgba(232,198,106,.1); }
    .btn.success {
      color: #102018;
      background: linear-gradient(180deg, #4fd08f, var(--call));
      border: 0;
      box-shadow: 0 2px 0 rgba(0,0,0,.22);
    }
    .btn:disabled { opacity: .45; cursor: not-allowed; }
    .btn:active:not(:disabled),
    .choice-btn:active,
    .act-btn:active { transform: translateY(1px); filter: brightness(.98); }
    .drill-actions { margin-top: var(--space-4); }
    .bottom-nav {
      position: fixed; bottom: 0; left: 50%; transform: translateX(-50%);
      width: 100%; max-width: 520px;
      display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 6px;
      padding: 10px 12px calc(10px + env(safe-area-inset-bottom));
      background: rgba(10,20,16,.92);
      border-top: 1px solid var(--line);
      backdrop-filter: blur(8px);
    }
    .nav-btn {
      display: flex;
      align-items: center;
      justify-content: center;
      min-height: var(--btn-h-nav);
      border: 1px solid var(--line);
      background: transparent;
      color: var(--muted);
      border-radius: 10px;
      padding: 0 var(--space-2);
      font-size: var(--btn-font-sm);
    }
    .nav-btn.active { color: var(--gold); border-color: rgba(232,198,106,.4); background: rgba(232,198,106,.08); }
    .pill {
      display: inline-block; background: var(--raise); color: #fff;
      border-radius: 999px; padding: 1px 6px; font-size: .65rem; margin-left: 2px;
    }
    /* 反馈入口 + 就地纠错 + 写评论邀请卡(见 js/feedback.js / js/rating.js) */
    .fbk-entry {
      display: block; margin: 18px auto 6px; padding: 8px 14px;
      background: transparent; border: 1px solid var(--line); border-radius: 999px;
      color: var(--muted); font-size: .78rem; cursor: pointer;
    }
    .fbk-entry:active { background: rgba(255,255,255,.04); }
    .report-q {
      display: block; margin: 14px auto 0; padding: 6px 10px;
      background: transparent; border: 0; color: var(--fold);
      font-size: .74rem; text-decoration: underline; cursor: pointer;
    }
    .rate-invite {
      margin-top: var(--space-4); padding: 14px 16px;
      border: 1px solid rgba(232,198,106,.35); border-radius: var(--card-r);
      background: rgba(232,198,106,.06); text-align: left;
    }
    .rate-invite h4 { margin: 0 0 4px; font-size: .95rem; color: var(--gold); }
    .rate-invite p { margin: 0 0 10px; font-size: .8rem; color: var(--muted); line-height: 1.5; }
    .rate-invite .ri-row { display: flex; gap: 8px; }
    .rate-invite .ri-later, .rate-invite .ri-go {
      flex: 1; min-height: 38px; border-radius: 10px; font-size: .82rem; font-weight: 600; cursor: pointer;
    }
    .rate-invite .ri-later { background: transparent; border: 1px solid var(--line); color: var(--muted); }
    .rate-invite .ri-go {
      border: 0; color: #16110a;
      background: linear-gradient(180deg, var(--gold), var(--gold2));
    }
    .back-btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-width: 40px;
      min-height: 40px;
      border: 1px solid var(--line);
      background: rgba(0,0,0,.2);
      color: var(--gold);
      border-radius: 10px;
      padding: 0 var(--space-3);
      margin-bottom: var(--space-3);
      font-size: var(--btn-font-sm);
    }
    .eyebrow { color: var(--gold); font-size: .75rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 8px; }
    .learn-body {
      background: rgba(0,0,0,.22);
      border: 1px solid var(--line);
      border-radius: 12px;
      padding: 16px;
      line-height: 1.65;
      font-size: .95rem;
      margin: 12px 0;
    }
    .learn-body b { color: var(--gold); }
    .learn-summary {
      background: linear-gradient(180deg, rgba(202,162,60,.12), rgba(0,0,0,.22));
      border-color: var(--gold);
    }
    .slide-pager, .q-pager { color: var(--muted); font-size: .82rem; margin: 8px 0 16px; }
    .q-stem { font-size: 1.05rem; line-height: 1.5; margin: 12px 0; }
    .conf-chip {
      display: inline-block; font-size: .68rem; font-weight: 700;
      text-transform: uppercase; letter-spacing: .06em;
      padding: 4px 10px; border-radius: 999px; margin-bottom: 12px;
    }
    .conf-chip.precise { background: rgba(52,176,116,.2); color: #7dffc0; }
    .conf-chip.reference { background: rgba(232,198,106,.15); color: var(--gold); }
    .conf-chip.conceptual { background: rgba(127,198,255,.15); color: #7fc6ff; }
    .choice-grid, .action-grid { display: flex; flex-direction: column; gap: var(--space-2); }
    /* 动作栏:PO 源的 position:fixed 全屏吸底 + .has-actbar{padding-bottom:150px} 已删——
       进壳后被壳 tabbar(z-index:80)盖住,改为流内吸底,完整规则收敛在文件尾 Task 10 段
       的 #mod-postflop .actbar(margin-top:auto + 通栏渐变),此处只留仍生效的子项。 */
    .actbar .action-grid { flex-direction: row; }
    .actbar .act-btn { flex: 1; min-height: var(--btn-h); }
    .choice-btn {
      display: flex;
      align-items: center;
      min-height: var(--btn-h);
      padding: 0 var(--space-4);
      text-align: left;
      border: 1px solid var(--line);
      background: rgba(0,0,0,.25);
      color: var(--ink);
      border-radius: var(--btn-radius);
      font-size: var(--btn-font);
      line-height: 1.35;
    }
    .choice-btn:active { background: rgba(232,198,106,.12); border-color: var(--gold2); }
    .act-btn {
      display: flex;
      align-items: center;
      justify-content: center;
      min-height: var(--btn-h);
      padding: 0 var(--space-4);
      border: 0;
      border-radius: var(--btn-radius);
      font-size: var(--btn-font);
      color: #fff;
      box-shadow: 0 3px 0 rgba(0,0,0,.28);
    }
    .a-fold { background: linear-gradient(180deg, #6c8073, #52645a); }
    .a-check { background: linear-gradient(180deg, #5a6a80, #455268); }
    .a-call { background: linear-gradient(180deg, #3fc183, #2a8d5c); }
    .a-bet { background: linear-gradient(180deg, #ec6a64, #c5403b); }
    /* 质量修复:统一为红色(与 .pf-a-raise 同一渐变)——红=进攻是扑克通用语言,PF 侧的
       raise 已是红色,原先这里的紫色只在同一屏两色不一致时才有意义。核实过 PO/FS 的
       动作集是互斥的(facingBet(spot) 为假时只有 check/bet,为真时只有 fold/call/raise
       ——见 js/postflop/content.js drillActionsForQuestion() 与 js/fullstreet/engine.js
       街屏分支),bet 与 raise 从不同屏出现,不会撞色。紫色 #c07ce2/#9a4cca 仍是
       PF 的 --threebet 专用色(.a-3bet),未受影响。 */
    .a-raise { background: linear-gradient(180deg, #ec6a64, #c5403b); }
    .spot-mount { margin: 8px 0 16px; }

    /* ---- Poker table graphic ---- */
    /* Base geometry (shared): the near-circular sizing below is PO's 2-9-seat table —
       multiway needs the vertical room to fan seats out around an arc. Heads-up (the
       fullstreet drill, exactly two players) only ever has one opponent up top + hero
       at the bottom, so the same near-circle wasted ~half the 390px viewport height for
       nothing (quality bug: ~130px of dead space above the action bar). Split into two
       variants driven by the ".multiway" class table.js already adds (opps.length>1) —
       heads-up gets a flatter, wider ellipse; multiway keeps the original shape untouched. */
    .poker-table {
      position: relative; margin: 4px auto 12px; max-width: 320px;
      background: radial-gradient(125% 125% at 50% 36%, #1d6450, #0d3729 74%);
      border: 7px solid #123528;
      box-shadow: inset 0 0 34px rgba(0,0,0,.5), 0 10px 26px rgba(0,0,0,.4);
    }
    .poker-table:not(.multiway) { height: 245px; border-radius: 48% / 38%; }
    .poker-table.multiway { height: 360px; border-radius: 46% / 40%; }

    /* ---- Heads-up layout: flex column, NOT percentage absolute positioning ----
       History (read before touching): M4.5 compressed the heads-up table 340px -> 245px and
       pinned .tbl-center at top:30% so a 5-card river board could only ever grow downward.
       That was verified against the fullstreet drill only — and the fullstreet spot is the
       one heads-up caller that never passes heroLabel, so its hero block is 86px, not the
       109px every PO-sourced spot has (.hand-lbl adds ~23px). On onboarding / daily card /
       challenge / postflop drill the hero block therefore started 23px higher than the
       percentage math assumed and hero's cards ran straight through the board. Screenshots
       from users, geometry from tools; 836 unit tests + 165 smoke assertions were all green.

       Percentages can't express "these four layers must not touch" — so don't use them here.
       The four layers are laid out as a flex column with justify-content:space-between, which
       is self-balancing: whatever each layer actually measures (5 languages, with or without
       .hand-lbl, 0/3/4/5 board cards), the leftover height is shared out as gaps instead of
       being silently spent on an overlap. .tbl-center carries a min-height so the pot row
       does not jump when the board goes from preflop (no .tbl-board element at all) to flop.
       DOM order is opponent / opponent-bet / hero / center (table.js pushes seats first),
       so center and hero are re-ordered here rather than in JS — multiway relies on that
       same DOM and must keep its absolute-positioned arc.
       Locked by test/ui-smoke.js (see "牌桌几何" block): board-vs-hero bounding boxes must
       not intersect and every card must sit inside the table, checked on flop and river. */
    .poker-table:not(.multiway) {
      display: flex; flex-direction: column; align-items: center;
      justify-content: space-between; padding: 4px 8px;
    }
    .poker-table:not(.multiway) > * { flex: 0 0 auto; }
    .poker-table:not(.multiway) .pseat,
    .poker-table:not(.multiway) .bet-spot,
    .poker-table:not(.multiway) .tbl-center {
      position: static; transform: none; width: auto;
    }
    .poker-table:not(.multiway) .bet-spot { order: 1; }
    .poker-table:not(.multiway) .tbl-center { order: 2; width: 100%; min-height: 67px; }
    .poker-table:not(.multiway) .pseat.hero { order: 3; }
    /* Opponent: avatar and the two face-down cards side by side instead of stacked —
       33px of height back, which is what makes the whole stack fit in 245px without
       shrinking the board or hero cards into unreadability. .seat-d is absolute against
       .pseat in the multiway arc; here .pseat is static, so it would escape to the table
       corner — put it in the row. */
    .poker-table:not(.multiway) .pseat:not(.hero) {
      display: flex; align-items: center; justify-content: center; gap: 6px;
    }
    .poker-table:not(.multiway) .pseat:not(.hero) .seat-cards { margin-bottom: 0; }
    .poker-table:not(.multiway) .seat-d { position: static; }
    .poker-table:not(.multiway) .avatar { width: 36px; height: 36px; font-size: .62rem; }
    /* Hero: cards on their own row, then badge + hand label share one row (wrapping to two
       if a translation is long — flex-wrap makes that self-healing rather than an overlap). */
    .poker-table:not(.multiway) .pseat.hero {
      width: 100%; display: flex; flex-wrap: wrap;
      align-items: center; justify-content: center; gap: 0 8px;
    }
    .poker-table:not(.multiway) .pseat.hero .seat-cards { flex: 0 0 100%; margin-bottom: 4px; }
    .poker-table:not(.multiway) .pseat.hero .hand-lbl { margin: 0; font-size: .72rem; }
    .poker-table:not(.multiway) .seat-badge { padding: 2px 8px; font-size: .64rem; }
    /* The street name is already shown by the progress bar above the table (PREFLOP/FLOP/
       TURN/RIVER tabs) — the in-table caption was purely decorative and, at this compact
       height, one of the things crowding hero's cards. Multiway boards don't have that
       progress bar, so their .street-tag (unaffected by this selector) stays. */
    .poker-table:not(.multiway) .street-tag { display: none; }
    .poker-table:not(.multiway) .tbl-pot { margin-bottom: 2px; }
    .poker-table:not(.multiway) .tbl-board { margin-bottom: 0; min-height: 45px; }
    /* Card trims are scoped to heads-up so the multiway table keeps its original sizes. */
    .poker-table:not(.multiway) .card.mini { width: 32px; height: 45px; }
    .poker-table:not(.multiway) .card.mini .pip-c { font-size: 16px; }
    .poker-table:not(.multiway) .card.mid { width: 38px; height: 54px; }
    .poker-table:not(.multiway) .card.mid .pip-c { font-size: 19px; }
    /* A few more px back from the chip graphic itself — still reads fine at this scale,
       and every px matters when the whole cluster has to clear hero's cards below it. */
    .poker-table:not(.multiway) .chip-stack .discs { width: 14px; height: 18px; }
    .poker-table:not(.multiway) .chip-stack .disc { width: 14px; height: 14px; }
    .seat-cards { display: flex; gap: 4px; justify-content: center; margin-bottom: 5px; }
    .seat-cards.big { gap: 5px; }
    .seat-badge {
      display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px;
      border-radius: 999px; font-size: .68rem; font-weight: 700;
      background: #0b261f; border: 1px solid #2c5e4e; color: #cfeede;
    }
    .seat-badge.ip { border-color: var(--gold); }
    .seat-badge .pos-name { letter-spacing: .04em; }
    .seat-badge .pos-rel { font-size: .58rem; opacity: .75; }
    .seat-badge.ip .pos-rel { color: var(--gold); opacity: 1; }
    .seat-badge .dealer {
      width: 15px; height: 15px; line-height: 15px; border-radius: 50%;
      background: #f1f5ee; color: #1d2330; font-size: .58rem; font-weight: 800; text-align: center;
    }
    /* seats positioned around the table via inline left/top */
    .pseat { position: absolute; transform: translate(-50%,-50%); text-align: center; width: 60px; }
    .pseat.hero { transform: translateX(-50%); width: auto; }
    .avatar {
      width: 40px; height: 40px; border-radius: 50%; margin: 0 auto; position: relative;
      background: radial-gradient(circle at 50% 32%, #1c4a3d, #0b2820);
      border: 2px solid #2c5e4e; display: flex; align-items: center; justify-content: center;
      font-size: .66rem; font-weight: 700; color: #cfeede;
    }
    .avatar.has-d { border-color: var(--gold); color: var(--gold); }
    .pseat.folded { opacity: .4; filter: grayscale(.55); }
    .av-stack { display: block; font-size: .56rem; color: var(--muted); margin-top: 2px; }
    .seat-d {
      position: absolute; top: -3px; right: 8px;
      width: 15px; height: 15px; line-height: 15px; border-radius: 50%;
      background: #f1f5ee; color: #1d2330; font-size: .56rem; font-weight: 800; text-align: center;
      box-shadow: 0 1px 2px rgba(0,0,0,.4);
    }
    .bet-spot { position: absolute; transform: translate(-50%,-50%); }
    .tbl-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); width: 70%; text-align: center; }
    .tbl-pot { display: flex; align-items: center; justify-content: center; gap: 7px; margin-bottom: 6px; }
    .pot-lbl { font-size: .72rem; color: #e9f3ec; font-weight: 700; }
    .tbl-board { display: flex; gap: 4px; justify-content: center; margin-bottom: 5px; min-height: 48px; }
    .hand-lbl { display: block; color: var(--gold); font-size: .8rem; font-weight: 700; margin-top: 4px; }
    .street-tag { font-size: .62rem; color: var(--muted); letter-spacing: .14em; }

    /* chips */
    .chip-stack { display: inline-flex; align-items: center; gap: 6px; }
    .chip-stack .discs { position: relative; width: 18px; height: 24px; }
    .chip-stack .disc {
      position: absolute; left: 0; width: 18px; height: 18px; border-radius: 50%;
      background: repeating-conic-gradient(#c5403b 0 30deg, #f4f6f1 30deg 60deg);
      border: 2px solid #f4f6f1; box-shadow: 0 1px 2px rgba(0,0,0,.4);
    }
    .chip-stack.pot .disc { background: repeating-conic-gradient(#caa23c 0 30deg, #f4f6f1 30deg 60deg); }
    .chip-amt { font-size: .72rem; font-weight: 700; color: #fff; }

    /* card size variants used on the table */
    .card.mini { width: 34px; height: 48px; }
    .card.mini .pip-c { font-size: 17px; }
    .card.mini .rk { font-size: 9px; top: 2px; left: 3px; }
    .card.mini .rk.br { bottom: 2px; right: 3px; top: auto; left: auto; }
    .card.mid { width: 40px; height: 57px; }
    .card.mid .pip-c { font-size: 20px; }
    .card.mid .rk { font-size: 10px; top: 3px; left: 4px; }
    .card.mid .rk.br { bottom: 3px; right: 4px; top: auto; left: auto; }
    .card.sm { width: 22px; height: 31px; }
    .card.sm .pip-c { font-size: 11px; }
    .card.sm .rk { font-size: 7px; top: 1px; left: 2px; }
    .card.sm .rk.br { bottom: 1px; right: 2px; top: auto; left: auto; }
    .card {
      width: 52px; height: 74px; border-radius: var(--card-r); position: relative;
      transform-style: preserve-3d;
    }
    .card.flip { transform: rotateY(180deg); }
    .card .face, .card .back {
      position: absolute; inset: 0; border-radius: var(--card-r);
      backface-visibility: hidden; display: flex; align-items: center; justify-content: center;
      box-shadow: 0 4px 12px rgba(0,0,0,.35);
    }
    .card .back {
      background: repeating-linear-gradient(45deg, #7d2230 0 5px, #8c2a39 5px 10px);
      border: 2px solid #f1f5ee;
    }
    .card .face {
      background: #f7f8f4; border: 1px solid #d8ddd2;
      flex-direction: column; transform: rotateY(180deg);
    }
    .card .rk { position: absolute; top: 4px; left: 6px; font-weight: 700; font-size: 13px; }
    .card .rk.br { top: auto; left: auto; bottom: 4px; right: 6px; transform: rotate(180deg); }
    .card .pip-c { font-size: 26px; }
    .red { color: #d23b46; } .blk { color: #1d2330; }
    .feedback-screen .fb-grade { font-size: 2rem; font-weight: 700; margin-bottom: 8px; }
    .feedback-screen .fb-grade.best { color: var(--best); }
    .feedback-screen .fb-grade.wrong { color: var(--wrong); }
    /* 无障碍双编码(M3 U9 Part1排查补):PO 反馈屏("Correct"/"Incorrect")同样只靠 .best/.wrong
       文字颜色区分——加 ✓/✗ 字形前缀(::before,不动 textContent)。 */
    .feedback-screen .fb-grade.best::before { content: "✓ "; }
    .feedback-screen .fb-grade.wrong::before { content: "✗ "; }
    /* M4 Task G2 Step2：规范四档（js/core/grade.js）——ok（correct 数组的非首选项，此前
       跟"首选正确答案"一样显示绿色 ✓）与 bigBlunder（leak 结构性大错，此前跟一般错误
       一样只是红色 ✗）此前在二元 best/wrong 里被抹平，叠 fb-tier-* class 后用更具体的
       选择器覆写（3 class 比 2 class 具体，跟样式表先后顺序无关）。 */
    .feedback-screen .fb-grade.best.fb-tier-ok { color: var(--gold); }
    .feedback-screen .fb-grade.best.fb-tier-ok::before { content: "~ "; }
    .feedback-screen .fb-grade.wrong.fb-tier-bigBlunder { color: var(--blunder); }
    .feedback-screen .fb-grade.wrong.fb-tier-bigBlunder::before { content: "✗✗ "; }
    /* M4 Task G5：来源徽标（教学设计），紧跟评级横幅下方，答案文字之前——不挤占正文空间。 */
    .fb-source { margin: 0 0 8px; }
    .fb-correct { color: var(--muted); margin-bottom: 16px; }
    .fb-correct b { color: var(--gold); }
    /* M4 Task G4：剥削注解——视觉刻意弱化（比 .fb-correct 更小更淡），别喧宾夺主盖过 GTO 答案。 */
    .fb-exploit { color: var(--muted); font-size: .78rem; margin: -10px 0 14px; line-height: 1.5; }
    .fb-exploit i { font-style: normal; opacity: .75; margin-right: 2px; }
    .fb-block {
      background: rgba(0,0,0,.22);
      border: 1px solid var(--line);
      border-radius: 12px;
      padding: 12px 14px;
      margin-bottom: 10px;
    }
    .fb-block h4 { margin: 0 0 6px; font-size: .72rem; text-transform: uppercase; letter-spacing: .08em; color: var(--gold); }
    .fb-block p { margin: 0; line-height: 1.55; font-size: .92rem; }
    .over-screen { text-align: center; padding-top: 40px; }
    .over-screen .btn-stack { max-width: 320px; margin-left: auto; margin-right: auto; }
    .review-cleared { color: var(--best); }
    /* M4.5 Task R5：课程结算屏的「一键专项」结论卡，样式同 .cr-block(生涯页)一套语汇 */
    .over-diag {
      background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
      padding: 12px 16px; margin: 14px auto; max-width: 320px; text-align: left;
    }
    .over-diag-line { margin: 0 0 10px; font-size: .88rem; line-height: 1.5; }
    .over-diag .leak-drill { width: 100%; }
    .big-score { font-size: 2.2rem; font-weight: 700; color: var(--gold); margin: 16px 0 8px; }
    .stat-list { list-style: none; padding: 0; margin: 16px 0; }
    .stat-list li {
      display: flex; justify-content: space-between;
      padding: 12px 0; border-bottom: 1px solid var(--line);
      font-size: .92rem;
    }
    .stat-list b { color: var(--gold); }

    /* stats / coach cards */
    .stats-screen { padding-bottom: 72px; }
    .stat-tiles {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 12px 0 16px;
    }
    .stat-tile {
      background: rgba(0,0,0,.22); border: 1px solid var(--line); border-radius: 12px;
      padding: 12px 8px; text-align: center;
    }
    .stat-tile .v { font-size: 1.35rem; font-weight: 700; color: var(--gold); }
    .stat-tile .k { font-size: .68rem; color: var(--muted); margin-top: 4px; line-height: 1.3; }
    .coach-card {
      background: rgba(0,0,0,.22); border: 1px solid var(--line); border-radius: 14px;
      padding: 14px 16px; margin-bottom: 14px;
    }
    .coach-card h3 { margin: 0 0 10px; font-size: 1rem; color: var(--gold); }
    .coach-note { font-size: .82rem; color: var(--muted); margin: 0; line-height: 1.45; }
    .prof-row {
      display: grid; grid-template-columns: 88px 1fr; gap: 4px 10px;
      align-items: baseline; padding: 8px 0; border-bottom: 1px solid var(--line);
    }
    .prof-row:last-of-type { border-bottom: none; }
    .prof-k { font-size: .78rem; color: var(--muted); }
    .prof-d { grid-column: 2; font-size: .72rem; color: var(--muted); }
    .leak-row { display: flex; align-items: center; gap: 9px; margin: 7px 0; }
    .leak-lab { font-size: .78rem; min-width: 96px; color: var(--ink, #e8ecf0); flex-shrink: 0; display: flex; flex-direction: column; gap: 2px; }
    .leak-desc { font-size: .65rem; color: var(--muted); line-height: 1.25; font-weight: 400; }
    .leak-trk { flex: 1; height: 10px; border-radius: 6px; background: rgba(255,255,255,.06); overflow: hidden; }
    .leak-trk i { display: block; height: 100%; border-radius: 6px; }
    .leak-n { font-variant-numeric: tabular-nums; font-weight: 700; font-size: .78rem; min-width: 22px; text-align: right; color: var(--gold); }
    .leak-sub {
      font-size: .68rem; letter-spacing: .1em; text-transform: uppercase;
      color: var(--gold); opacity: .75; margin: 14px 0 6px;
    }
    .leak-hand {
      display: flex; align-items: center; gap: 8px; padding: 7px 0;
      border-top: 1px solid var(--line); font-size: .82rem;
    }
    .leak-qid, .plan-sp { flex: 1; color: var(--muted); line-height: 1.35; }
    .leak-x { color: var(--wrong); font-weight: 700; font-variant-numeric: tabular-nums; }
    .plan-rank { font-weight: 700; color: var(--gold); min-width: 18px; }
    .plan-meta { font-size: .72rem; color: var(--muted); }
    .leak-drill { white-space: nowrap; flex: none; }
    .rv-mini { flex: none; white-space: nowrap; }

    .sbar { display: flex; align-items: center; gap: 9px; font-size: .78rem; margin: 6px 0; }
    .sbar-nm {
      flex: none; width: 108px; color: var(--ink, #e8ecf0);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .sbar-trk { flex: 1; height: 12px; background: rgba(255,255,255,.07); border-radius: 7px; overflow: hidden; }
    .sbar-fil { display: block; height: 100%; border-radius: 7px; background: linear-gradient(90deg, var(--gold), var(--best)); }
    .sbar-pct { flex: none; width: 72px; text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; font-size: .72rem; }

    .review-screen { padding-bottom: 72px; }
    .review-sub { margin: 0 0 14px; font-size: .85rem; }
    .review-actions { margin: 16px 0 8px; }
    .review-all-btn { width: 100%; min-height: var(--btn-h); }
    .rv-group {
      background: rgba(0,0,0,.22); border: 1px solid var(--line); border-radius: 13px;
      padding: 11px 13px; margin-bottom: 12px;
    }
    .rv-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
    .rv-head b { font-size: .88rem; }
    .rv-chips { display: flex; flex-wrap: wrap; gap: 7px; }
    .rv-chip {
      display: inline-flex; align-items: center; gap: 5px;
      background: rgba(255,255,255,.06); border: 1px solid var(--line); border-radius: 8px;
      padding: 5px 8px; font-size: .78rem; font-variant-numeric: tabular-nums;
    }
    .rv-wn { color: var(--wrong); font-size: .68rem; font-weight: 700; }
    .rv-due { color: var(--gold); font-size: .68rem; font-weight: 700; }
    .rv-wait { color: var(--muted); font-size: .68rem; }
    .rv-box { color: var(--best); font-size: .6rem; letter-spacing: 1px; }
    .review-count { font-size: .82rem; margin: -6px 0 10px; }
    .rv-del {
      appearance: none; border: none; background: transparent; cursor: pointer;
      color: var(--muted); font-weight: 700; padding: 0 2px; line-height: 1;
    }
    .rv-del:hover { color: var(--wrong); }

    /* C3 range / equity chart */
    .range-chart-mount { margin: 12px 0; max-width: 100%; }
    .range-chart {
      background: rgba(0,0,0,.22);
      border: 1px solid var(--line);
      border-radius: 12px;
      padding: 14px 12px;
      max-width: 100%;
      overflow: hidden;
    }
    .range-chart-note { font-size: .72rem; color: var(--muted); margin: 0 0 12px; line-height: 1.45; }
    .range-chart-loading { font-size: .85rem; color: var(--gold); text-align: center; padding: 16px 0; }
    .eq-bars { display: flex; flex-direction: column; gap: 10px; margin-bottom: 12px; }
    .eq-bar-head {
      display: flex;
      justify-content: space-between;
      align-items: baseline;
      gap: 10px;
      font-size: .78rem;
      margin-bottom: 5px;
      line-height: 1.2;
    }
    .eq-bar-head span:first-child { min-width: 0; flex: 1; }
    .eq-pct { color: var(--gold); font-weight: 700; flex: none; font-variant-numeric: tabular-nums; }
    .eq-track { height: 8px; background: rgba(255,255,255,.08); border-radius: 999px; overflow: hidden; }
    .eq-track i { display: block; height: 100%; border-radius: 999px; transition: width .35s ease; }
    .range-edge-lbl {
      text-align: center;
      font-size: .8rem;
      font-weight: 700;
      color: var(--gold);
      margin: 0 0 12px;
      padding: 8px 6px;
      line-height: 1.4;
      background: rgba(232,198,106,.08);
      border: 1px solid rgba(232,198,106,.18);
      border-radius: 8px;
    }
    .range-matrix {
      width: 100%;
      max-width: 100%;
      margin-bottom: 10px;
    }
    .range-matrix-grid {
      display: grid;
      grid-template-columns: 22px repeat(13, minmax(0, 1fr));
      gap: 2px;
      width: 100%;
      align-items: center;
    }
    .rm-lbl {
      font-size: .58rem;
      font-weight: 700;
      color: var(--muted);
      display: flex;
      align-items: center;
      justify-content: center;
      line-height: 1;
      min-width: 0;
    }
    .rm-lbl.rm-row { justify-content: flex-end; padding-right: 3px; }
    .rm-corner { display: block; }
    .rm-cell {
      aspect-ratio: 1;
      width: 100%;
      border-radius: 3px;
      background: rgba(255,255,255,.05);
      border: 1px solid rgba(255,255,255,.04);
      min-width: 0;
      min-height: 0;
    }
    /* 无障碍双编码(M3 U9 Part 1 排查补):三态格子此前只靠底色区分(灰度/色弱下 rng-open 的
       金与 rng-call 的绿在小格子里明度接近,几乎不可辨)——加纹理(斜纹/十字纹)+ 边框样式
       双重形状编码,颜色仍保留给能分辨的用户,纹理/边框给灰度或色弱用户兜底。三态：
       rng-open 纯色实边(基线,无纹理)、rng-call 斜纹+虚线边、rng-both 十字纹+点线边
       （纹理密度 both > call > open 也是一层可辨的排序信号,不止"有没有纹理"）。图例
       (.range-legend .lg) 同步加同款纹理,否则灰度用户没法把格子里的纹理对应回图例文字。 */
    .rm-cell.rng-open { background: rgba(232,198,106,.42); border-color: rgba(232,198,106,.25); }
    .rm-cell.rng-call {
      background-color: rgba(52,176,116,.38); border-color: rgba(52,176,116,.22); border-style: dashed;
      background-image: repeating-linear-gradient(45deg, rgba(255,255,255,.4) 0 1.5px, transparent 1.5px 4px);
    }
    .rm-cell.rng-both {
      background-color: rgba(168,132,232,.42); border-color: rgba(168,132,232,.28); border-style: dotted; border-width: 2px;
      background-image:
        repeating-linear-gradient(45deg, rgba(255,255,255,.4) 0 1.5px, transparent 1.5px 4px),
        repeating-linear-gradient(-45deg, rgba(255,255,255,.4) 0 1.5px, transparent 1.5px 4px);
    }
    .range-legend {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 8px 6px;
      font-size: .64rem;
      color: var(--muted);
      line-height: 1.25;
    }
    .range-legend span {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 5px;
      min-width: 0;
      text-align: center;
    }
    .range-legend span { display: inline-flex; align-items: center; gap: 4px; }
    .range-legend .lg {
      flex-shrink: 0;
      width: 10px;
      height: 10px;
      min-height: 0;
      border-radius: 2px;
      display: inline-block;
    }
    .range-legend .lg.rng-open { background: rgba(232,198,106,.55); }
    .range-legend .lg.rng-call {
      background-color: rgba(52,176,116,.55); border: 1px dashed rgba(20,60,40,.5);
      background-image: repeating-linear-gradient(45deg, rgba(255,255,255,.45) 0 1.5px, transparent 1.5px 4px);
    }
    .range-legend .lg.rng-both {
      background-color: rgba(200,160,255,.55); border: 2px dotted rgba(60,30,80,.5);
      background-image:
        repeating-linear-gradient(45deg, rgba(255,255,255,.45) 0 1.5px, transparent 1.5px 4px),
        repeating-linear-gradient(-45deg, rgba(255,255,255,.45) 0 1.5px, transparent 1.5px 4px);
    }
    /* 初始测试入口卡:与课程卡同构,蓝边区分「测试」性质 */
    .placement-card {
      border-left: 3px solid #6eb5ff;
      text-align: left; cursor: pointer; width: 100%;
      font-family: inherit; color: var(--ink);
    }
    .placement-card h3 { margin: 0 0 4px; font-size: 1.05rem; }
    .placement-card .cc-sub { margin: 0; }
    .placement-card:active { transform: translateY(1px); }
    /* 新手引导横幅:品牌化(panel 底 + 金左边框 + 标准按钮) */
    .onboard-banner {
      background: var(--panel); border: 1px solid var(--line);
      border-left: 3px solid var(--gold);
      padding: 14px 16px; border-radius: 14px; margin-bottom: 4px;
    }
    .onboard-banner p { margin: 0 0 12px; line-height: 1.5; font-size: .92rem; }
    .theme-bar { display:flex; justify-content:space-between; padding:4px 0; }
    .theme-bar.weak { color:#d23b46; font-weight:bold; }
    .q-review summary { cursor:pointer; padding:4px 0; }
    .result .big-score { font-size:1.6em; }

/* ==== PF module ==== */
/* From poker-preflop/gto-trainer.html. Its :root token block and its page-container-level
 * *, html, body, #app rules were dropped (see header comment at top of this file). Class
 * names that collided with PO's above were renamed with a pf- prefix; see header for the
 * full list. Space Mono @font-face kept (PF's tabular/number font, PO doesn't have it). */
@font-face{font-family:'Space Mono';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAEFUABEAAAAAoJQAAEDvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFWG4wwHINwBmAAhRAIgRAJnAwRCAqB7mSB0nwLhAgAATYCJAOHfgQgBYQoB4gCDIFWG32PNWybFvO7HQTpZ3e/0UiEbieEqIIfHRmoXZTTUMH/f0pSGUOTytIUQGXOH+JMyw6y+piFpd6HhVWo4hP2NdAxVb6dsih5XNjnl00Wi8ViiR75V+RAB3cofuM7qiOOqvmKBxQp/vuUfPllxQs6+oOkwdtuNfdTuCiDPjLslVFmNtz6F523dpDISk5MJC8kTwx3usNqI6zvy/aNx7R2RgVp8SuMYLU7A9tG/iQnL8Hz6+B/zt0nKZmIUoIzGIUmfkZrj8fTv3tRpUH9aT1n6Ywv2KMGeLf147qXysPxoEJBBEHGYw0Z87EeKjhWISla4sJFmi/Ld1o0runV2dLGtrm9vnVlXb8x1o3drW3/b+rrzNzw3i7AH1KCwCjnvIfBCaIaAPxhCVU0HEqcdexqleb5l3t27v1fWltbErcw8oDSlgUeYBJ4GGIgAT/+/+Oe317n1iT6jeI8ahLgtOeXtt/mm6G2/JAbJnl4BRXD3iGip9NDUVGKVy1F0eD/p/Pzvhl7k7wrJbzAVAbbhQFb+qycVcJ12CojtQsMVZj9ner3d0MmV10tzG07oqnfO1AifhFDtSWxwW2yyiuhPrRn7/EV0asmRN3/zKVOAUiFr/7yjl2ggKfj0VIQ9ItS1tnDeQ9n3U5PCjmln9ysf4MFSIIMJgEGPLpZk3ei0tX/d032tD2Ix/30Ag+S/HYEGYFCDewmTCOkH0k1g9zsf2aNXVjEkwAxiB3PrboO6l9LVz3YAeN+yrZJWyDktF/nPxpRztjOwT8QCMbGrvfK1DKd2SVo3gL3CiDPl+XLmZxHeRNECiJFg95Z7u4MDLEL4IAljgIXPD4JngFA/h3P1AsLgC/QvETe8VV473mylIcAnvcyzoXeZcaHPgmV5IoSa4I0VhCJ4GnsW91ZuTtEUyLE0xrYL/pOEtDVQnEvXSOdkCgNTbfs6K0GEjROXt1JDUtmxqeQdnM87sNfCYN306VLbD8/z+9lrZofFDywByYUoQxFDCFEtJlzr0Pe7jKm9fTk5hQBBwVZiQTUX4bTCVwdaqwO1JMg96ECoVL5U7kboYckkJwcUlJCanbIyQkFCICCpEBp0qFMmVBNzaAWOkFddIG66Qb11AvqYwSU7QeZQn/KlPlbpjxiACEG6Al0BpoB9YAqECXHT/4QiCJ/C5xsk/abzv8o1o9KBNb8pgqgGLvaSO/PwaOpFv+sXkqFBuQ5AYFMWYLno5FJsfBnfyqqCxR4f3w/4QrU1EPZdtNF0mBpIBkKRsfcYTRNAdEwpNS8ECpjI+LOiu7Xpmx/dU64EE5mvtyZ7pBQA1w21XKtGyWC6antQrL3mRf0XNEhI9tkEboLNnzPjxRMd560aGL8pulzjZVaqy0FOUEAoXb3VkaejP0Yzi0XoigaXa6rEMQ3KjmalhcrUYLamuigvyoZUA2oAJSC+SVliNPm7RjGBCVpuV65ElmxGGPoEOtOq4MRfksEl4Hh1PJm44JAoZjgqDJUJOlO+/3dlLpvuV++8sYzD9xyxagRneTVTzlinyGbS4DvDVMbBLyyvM9CI7UeK2KjSHjCjnCYsJCgAJ/iWqYXCmHAympSMDY6CkiRcM1iILLsvigcXRlMqiDPFdQQURvpvy+C9jlR8DE9bCOaLoltXQ7Hh7i6YcNh1PHWgJ96GymAoZLbGbBtacZ7+WAJ7mTxKohyzlmI4aIojhVEI1zSLuMlifkiLxrFnoLx+LCasbdTA0q3EsfHZZeEmn+K61rwDHPcYZBYXLQmAT/hnIUoYhGAO/lYOyx2EtqlwGF1EiWiVJSJZtEiWsVYHL96AwkaaSZjjRJri83E5mKL2Vspj2jojluPcFtfm3UJN0C1jJCEy3vEll/TxDLxhHC6MSSF1itlObtjIUZTTL0wPZNQe+pIUDUhwpgCFQBMhSKelsNH/aaLE9S+4tjvjexlSWAL8Fh0pD5CaD295nIPXE9ECTG3DPFpL8pc3oEYL+qwePEkmpTjZpBssY7YXGwhtlyxdWKQQI/V5oRFfCVfNp6MAF1zvywcBD3rd8lywq152RIB9/CMWTZsbKwUVBN2cEZCSkaL3JZBQlNEMl6/PbGL9y831cB8DSdvuG4a87sUT2HHKIgDKARwXcWRganmAQ72nV/nmm8FjtKV4p1s/rWp9bFzGciYHh2TFUebAhQy84G6RlyYdZUJHKwgFMOogoE8uuRi5kSxCqdBhzGeLfpLHo2rZBogGmr+pXCAsFLYhAGdgJ7DaG5mbjplBb5BqIwaolPXDccA0biFIXuK1yY+JVdGCkZKEQKkwMRgHrBQBbafXtFG/KmvEPgnALiP6l/AwwHx44YDdRCQ40yrABwLF53Gfrh1xqP5ChVjvL2qI2GYoo3u0Z5cNEVTUsry6uVhHuc2e7zEK+wzrtetN/lb93C9cu2+/xzUIYi10X4RR+GpUVRGSe7Yw4M8+qQWedkYqHLEeeR1wP/tZ2Z7+9/P/PfqiwuAL15fzPtiS3i9i19IP3987n9e/uz6Z09FiwfG++h3iGPBFft6mmKPvv6vYxftc8cRb3zjmitOO+uIj3Y6Yadjdtvjuzc+td890WTklNQM3Ljz4MuPUQ08swBBgoUIJYgQKUq0WBccd9FXTqnQSZp0mWqqp74GGmqupVZaa6OdbnroqZc++hpksCGGGuGcF874aYf9XnnqkWceuOEvz2Bu+NKtRMNTn1tvg0rfuO5gYmCdUW5aa5U1DmIRNAkGR0pBT0NLx4cnL95UTOwsrJxsPuMKF0bkEiNQb0niJUiRKFmqDHXVUlsdzTTWRFNZ2uqkvQ666OiLagP1098Aw3Q3nL+usv3mgVFnfey8cz54q+ytvE0RNBRQTWspNIhg4wGNhCVPEJgV8vbp8vPjXvlXEK3dLqgldLUfOU0QZP4o7ZyVp9EeA3MCvLFdIZproB3NwZx8tfgwgvbKDSm8uYQw/shShZIBbyutAR+AW9xJICTO5CBAFg5zcGDNOgcPqndl783MtFEKOWei6G2beMkLhKyPCBMNTtq+hjocJZHLiTM4Zfe1MTMlfWNr92mWwSaVqsdTiwHP7Y6kRuUGRkIG7+CIJXKKXLnjkSqqCf8Oobyv6a6a0h10YQKrwRtZ/Wa3MlV4z3h++KRh03FMLD6+Eoro9jXuQSaJT1iztQX6l0ZDCv9FM6RqzmAZh6mEcIgOo05kZyvgDCYyAF5a4FGhaV1VQdhnpzu+yWjArNhoikVqL6DrciBIdgONsJEcIqhLEIyve2Iky5YS2sBSTGm9mwxzSNNOCLlUDGJDnWDcXjUO0KLQYSE1aPVSVCiwo94pF9dFA8FbsW5Z+VWxLFoIeGJBp+Ij39JcOUaAIq0E3HwjOV3RhgnQ78tDxEMwiSKwxVRAXqdrMmgUxUUDMv+E0tVwnWxTKpLSIumaV/oOQmP7HeWdiMWIYzsBZZy6JIwR1ZOuQzQzy3AcAU5cFNI4vZ2hJjLtJ4jpGKPgDmkwst3fjRuUD5atVqzllc6hI3K5AP/7u3MYKCqBqctsT54J2VTFBBK/xAbBoAlFmpxK1AiUhDFCLsdqKESSRcSbpZhbt1GlHXmCacYjA1k9K3Zu7RhUuohWSxsRaHtDLcQqYGSQOxlbShgT0xPOhoH9TOBNZ3EaO6CezPCXh+/OrOb9dsqreEh4uFT2CVLpTwh6zDyzVsxcbjMCergDCnCZiFLnN5mDLMIF6xaFNtRFog1iDTE05A43g2PUlV3PjDGRQHZlMIpVxeF/N/JYQpqLCE5LIk8gyBc4FAg8CgUBRYKIYkFCiTBCqSCjmaB0DeA0VIUJ59YtUwFy99SQd+zL806rTX1cv1i91qffliHDkgv3IhjtHzseCVMuU2AMK7EKq7EGa7EO67GY5BJU3rlolemwCanNc96eW5V/7NXS7VjDpbry8rE5NiDqU1It9uP8Dl88k6kooD16sGJSChZeLWxsFFVf176RYH3baSqam9wHfQxg4QEyjBO4NkHnU2HzVsHdAyAi/wuPx33VF/IL5BBUUj+MKHArk/cr6AjF7TLH8TUdoMOzN/wEkaP+p1QkE2BPTd9M+LuhWcqT3Var73Bt0hel+m68CpmnALjwrqAyo9Q9Gj3NK0bS2gmvNFEZjqGNsxAVsr2QtLEyCd/XluF4ZHcVn2QlUt7JYTEr7oAqFJhllHsujymPLXOrHv3iVEEQVzNE8XX2TINeEXMrXl7bmGc6SvO458dVMVXpfeEyVHG2Tkc7xtDYwdysxETjed7OJpR3M4LReCGvqDkuVbn85zHRyAyLHqJcjq80XBhQeWoPYHBIpv+SI42KRpwY9/HaFlSyVsqRkX8+oWPQGHXUzLcwdDYLLno5aUzf+/6rj1IS5JK5r3Tyjr19rqMI9kM0Cd98K3ZZrYqlUoq4Vr0t1/w3nnBVLY9/U6Joyxt8Czh1A6ffBs5cyBostWmGL9dkQJIC60N0xwB3mXq9BEQ9fKVTABeVdxdRweNusu8iqgVjcFbf278V/cUMocF6ds2Sx5VeNmEt/qJ7XXDaio52XyUtrHkvB6VMBX7gdR5/PeFJV6/bjYf2wXnY9wgRyDSII1Ife7WTO3qyMXC7TAX1whhFTX+KOzuIZZbxDAlgPWXieSbpxWFCXmaVXp0C2PA6k/TmMCFvs7r3HXYBSKL3haQPR9Ri+kUanIYow9I0OoIZF/OJa0GedpWEwxgxS9IpyCY5NymHMWq20PzjF71nyTiCMYuFhQ52aXKOYNzijocIm8mFTx6g866B7jyc/IHSm0YLgdwUNyxJw5Seg4vL6uX18wLDN7PRW5o3TIuGs+W1ilXFumJTsR0h7RqmfcPZAVZ1rDpVnasuI6Rrw3Rr6Egl7+D4G3+De/AwI0nI5QPLWmkR04KcIcyM/YV91jZFwF9N+El2GRAZAKkQQFQJyn1A5TfI1gdpddB2TxSSV8L080fLCAKNnLDRSpEjpLNcqRW2lAi760am5K0JJqUEE1VRYijqQgslTMVNgVjY3dr504WcLiAcxS9bVlRNQa5OKSoo0jbjWBSUSCpqjBlYukCEbJVEktn8DlFNGI6/k7BIfHj1vslM5ZNs611hkzALN1kbvrWFbTLv++SkXZPsv8WjusRdUA5J7cPQx3EWXpoi6W2w1UGT5P3d/LmstxO93/ofqEnZ4/g6Rfp69vnk/dknSTz0kd533qlaMaZqifval0jp6nxtT/amV5V73e2mqShqMURppUdyDnP3OauyY86ogspm3vSEWnt7zu5B8LTfKFmSKyprvdobu8m8GlEGbWrxiQ5qSEcV6Vj9q/W6ZzdKoGekg9egjqMc1mvlzFRGUygIPRFTt1VKqyVp0wO97mX8kG1SMzalSFWomiI2Xg+kj7xGVVCHp1id9Y+0PnXfo/CcrCaEpfECqfe3itONQ1TiwLbPzeahO/XYGCqfMMEXFPCIGo+NZVzhwLiGsJ0iQV2h4ma8vgnYy3sCkBE60FZUUqOixzu2aWjZUqsmJhoUDT+R/GS1lWz09mDk/EnFbs3U6KzlOovDoIyKZUYd0hH1Dj0dZqnJ1NeKoDwKHvKcKVnkQ/ySNzCN3n3R+YG0vk0N+UE8xPmRL9xNTSVzEhqfsPXUGu10xASW9VWNTR+xywgWGEpiUTNq4OP6HHoTIvPU7iC5HQ/0KS15DcWbe4RGDfcELu/366uDFCzOMOReTmc7sjRCpqWx52MDcWSPcJijHNKl2NLS0yqIYoi5ZOzChthBVzPtUJT+EhSUUhJJ8TpSLIHUGgrN+MhfryF6PQ1EAJK6HInlKbU0PXw19+po1Fn+dqc5K2PpiB31Yw8/rbUKDYfIrdG5xaiGR8u7k83v1Ebnt8j3c2WiPw6zpYndOIhdCOQil+CMVzC1c3aYd3DkNH7JPD97cmifd+EOzNKTE0k6fJY/XPUznizcvEpO4uStLYMQRJbxkjZgEaN1aUgu3dM0uw3QZQOQ2spMS2/XjeIhTY2heiP7PCnAH/KJ6Q24U1vaFPVcGmMjkXDw0KB6UCtIy9OOmWz0GcVfLgG9Sh/fQG+6QBtX3FKUl7vCpl/5kO0Lm/z6X4SztcY1xO9vza//SbJkrrJwbJn2fgcDgfZiqD6ItKkmn/pK+cdoRNc5btdl9D5GLeVJ/JRfmuGkcjotAPe6B3PjEbqGKpXyqroNfTPDHVW0ljDESSwPQU/+hxMusqrhtSpIp7E5MfIyfkimtSFCnAAGmcn8vCH9fTUORFU0y5kNXz3oy59jHc2AmPnKnBQYnuOxqkoIyE5KgQx4DJUS3AXlF646NL+m6mGJm0aoWj9OL2UG7raJjADMS2PgSs5WHfA8IkHv4vjTX7cYZ1OgTnqJ7vv+dSAFkFLr8mhCiYPwzFQSyWn6erCPVjuyfJwkW5quNkWyzop0nrBmbf/zqgAQox1oJCm+v7UKTxOdyx/EusFl/LVMHqZHz2ZcyBU5s6b0FjjPumZIBssIw1lIATPmy2QNuXNg5aZEbemJsdAw6i1prckUlQvFsc5IoDxebnsEowiSnT9YW3z/PEbQxljqDwhUsMo2KsT2LugYqlI0mYqgF2SiPIARZyZkCEsoeO1BelOWpc/RctyBYgUfk2apEgS/kYqwZMXMiuP1uf0ksN+Y3Ox7T5ODL0Qlyvsez+PCE6Z8fubMzzRaQ8OZVQh7S0mI7r/kEscVtmG/w8ZQeEeVjmciBYcF++HfPHGylj1LOz/Z/y6ooPV466Q1rxktjfuZv/2F6ks5Go0CUo7b0UDB9WlB0ML8D5C8EsLR2tmG9+VACg1jFUi2UiFxqnMhivtWoZ8WQvRk5oZ7IWoOCLg1PO+1ABz+kp6PJ46HNqpAjzl9+MiPfxg/iJKCxZ6Cl/q7NWAgSwYJYnmHjtqkBj7hI2haA1VZXmwSyrzvXnIo/RoBlmZE1dMuBE1XQAvthUwkfmMYrxll1E/+x/QEXNrfluFZPxRc4YK/TiiJoZxKyHcoJgrePAdL3ePmEgufClLtBJIf1JTcEoQLXMICqVADe0u5+IuSy/gsRvJ9vovXlzrYLvEMbMALBpw0ilwBeWZjph7WQuNKDRHv2Rze+Zr8+JV0hk3BE30MJWZQhf7WVYiGKkurhojJKLav2Hmh5xfxluq19eKvX7LaTzt4tJEEAlf9guG65YcaA/v8gSMFWTv03L/04MWp+79hLjlwoZQDpxy4tNUBBw588uReRC1RMJWwhnE1R6rLeNFCXvYMFyhAH+IKAdfO0nItpLqGQKcGSSQJRAtQDTCaOqKsDHFd1mYt/r6NsZX9Y5ySW5ohHilkL5F6TYjJhyxnq3nkznrtQbD3a5Vo2HsVsqrNnrj72kNqxV6/68psrOW73Z4i3bcyNuV3hTklXf06LrL/KIRqdH6XyEinuP9vo/YLT0XzmMjkPAndlL/0NpcsLeohoAm9Xr5gdxOOloOK+oW1Rnqv86e7fhTOXWn0i3+ANwWTZOLXzgCLqAjFKZbfaIEhj9yoAOzndpIiLMiwMbkvRQqZkHG8PyEFxjCut25Mv6Smw/4dOcDmPi16d17SWpl69KDWl+fpZTLP2aWipe2drKWihyWu6ExFXlXe0E4ofEfMitaIV8HBb0bAZ4stiyljd8uVv0OIkWZOpLE09VWWEkoqj7ViLtHk0srkoiWktFLKFoSosmP36bfJX7PNcCQRhubBK7drlYksWtGEfkLhRdt72KU7jgcknFicKz6tpAjn3+mWEJrZ3XIP3xreoGgubpb8Uv6/uOJjStf6+DKMqnKixs0TKs9QPDZXJG4//bt7IbP/uzWMpKP5NZAoNlejnqvvwPds3I5v33wIV68M896ApTBkFuPICIIrauprvaABcYkgIZKtB/Pqa2tC6wKwgg/wFXBgRMFKpHwjmRREbNHyRYPzF63EumcvwqAIxBxnmSQVLkx1wgfs2jKnokzCNn9Azpo9X994m9YQm2JroiaKwLjB+CRjFZiUF4yf3tcjc5jt4bmh2ACI+kn8FWzxp/91Ld9D/ofg//biM/Ar+G23erO6NQ61xTFiaHJoBGIc2YpgVFTHzW2txqr1hcOncPVGGIc3rzNJbD7sJg6P4IaNalzN4CcTLbUmY/fkreVId4fFk99m04ddYAQ0Wyz6LNTt/3BzRH9dOYQLqzEvdMymHDEOR+iv6JHhCOMVg4viQyND+B2N8R185HKJ9b3hJiSCiB1i4TvSZnRW7CxDc2j6NJVnOJKedoLeD9z3Qq+9wMAZelq6uHA4YjLh6eOHv+ASg5Qgl/jFMHaHsIGimDaqmkYhbLijNg7HFMyAuiLnLH6sjIi9Px/ofRXj0fmDi9Td6exEVWXOPcIUV71INIPiEu5xZuk+qPHc38RM89+SdRZdWZVxdAIaYlJLjkjb83qYC0vcdFY3PH/QcuDd3UCKu9aX3GsW2VGpiU0dUugJSBfSTxlV94hNV4L0OVUFZnQYQit0Yr+CohRXVhjQpbHzeoUSDsiRCHsFzuFIZGm3kyMxn5SkYC+vlucsTwouxUalYiox/qBBtBQT1j8BVU1yDglT0AaRqIuCCoecqkl69zCIVilkpWqKQJz9GmItYf0YuUVZkrY6dh4uTeOBLEiKK/VE/yzENM1Nj1DM7uxcwwr2hNLBiQ5CSGQqdABavS+kcBe16XXVWnaEAluMetkQi/11aWITNK3CD1bNb9e/NZ3Cf8dPmZgy4qz3FnRejlw26pxGk9ZpvKxOfAE7xunH1p1esGAGNKoLJlthMiacxhJJPoovnXQnfUemKvbU4rN0UoASqCRiLiuBlhUt60ijjOqyCSmoBKVXSpe+/ZV+6ULfMg+Eah+m038VxkoeLPKZ8/AfyzfwalwcQ9RP0evb8pPytG0Bg05lYWVCBtxHp5Kw0oyhdEiEckmdWVbUDJqTPyv7RJhJJVqDDL1TA0okiJclifeSZm4pKIkLCrKLphkNjfbiES9laqTGfLdFUqK0IkzN7fcngIUgaSuZvHXSFKLNqYyiKD6MkyFNrlCnr9LrW/OhAm1rla6mU4+6TaAJWup17mwjaEzvzCK6O3R2588mMN/R3mFC63obE8tmppf/pzv05NgAm8em1n3SM5OeWPZeoyz0HvHCyv+82qhpQPuZoaCl1j+26hT1CMR6dDptawGUb2idqjcYnEIeRMaHcRR6YVemdepRP8nN1OvcnhNI6xQSHWFDOpp8sMAYnqLXSfq50C1SxtEq2ic/jRFSm3Uem9odDzvQIewvqbHPn27L7tS50Bxzi+p0zvKOAhAnalMTs9tM5o4iINfW1mp2WMoFOgetkGsLUR0aqYTZ36gfyixhn0S/KvxWKhkx3ceW9IpBwVrBZWwlla7+GHv1SZZfxGIC67rdcVxjealRvCFjd8YR2eHN0J0/jNMgoVuqzg5UBjV4qkoozcrKNsdIDSzudB5vOlfbNMjChqLYPBXrw+rLmqZwu7hfmupr7AiduWMEMxUq20Q1bReb38mZ04fx2ZQ5RxcCG15B+78D+pacpZyT52D7rgxhHPtmjMt+i0sh36EM5qsGqEueKdcj+h7cP86eTOqklE5cU5Ogjmrv+ieXDcXliBRSL09catfdeOVSGdHeoXe1FYIFrjAye2MiXAAWGgQq2Dqzcp1GsinXsUN41EQ2qhsQvYs2MeHJ9tY8u7nGEvO5ISa3wt7ivfrH2w6MAPa1+b+S7HYdOT2vW0FGbDqyTpGZRXTM0Oe2FYJ52WHM6ATyWo365wC1i9ovezcx3gvb5TLYZlRcPIGjDwA3PhznnTRHpl4gYcntPpx85ROnzTFesekHLyYtgXWciD78fRKGsWCUL7+FQg9sQnH2JH/l+F5CAr8Phv9QbwxjW41ET4VM6qqalolLlRJhMnndm0JgitsJyFS2kgypuYDz5WCbaOEZVjqQTCFZx+aMrcy2Ae7GibJlRBXK4yKqGRPIi1NS+1K4cmHFGw4dT087woZl0rc4ZsAMEKKfWCXU6SoEmgIN4CkteAUJJSVstdcC5Pir/6NnGbsz4BXYiiv4lcPY4Vd06jxM9Q9xQx4snmhX4zSlQKZVouYx+FschRgl5SeXfL+g/TA0Vlyw5HumlPF9+7hOA4XMzhsUnUzV9qfjHlHJrZJSj/8MYV8sLj8KpcSizi+geeID/1kIUtIdF7HHj9J5M0qaBpTe3i3q8ltZqyB5+/orWWsgOyYm9qs9uW6X15tFh/bF0fLPJieRvbmQnB73QQnBQ+cwmRy6VmGmrJ9nY/IQmSx5ZC61GteTPp7JHJ+ePVtEX5CXujZkJGdU/5dqQvDRvyHr9zhYlBlj2oerrQvdmvJ6pTMxp6c8Db6o1trsRmFEgxiaW5G84hajeooGLKtub0n5FmEsoIF1uFhPzJtmNTVa4AhbanIYVfMEkssS7429EsiPX3pyUgVR5D6+psgCmtRTGrSuiojm2NneP08F8WDEHT2KQYdr1EZiSYfB0GCnREClxWE2ozaDdqIwTWN5ELmD55+B7nk0FutkrTxoA5yGjg7XXBnR0apDau3/Zd8OtegQW6PcXIFEWBlq9XcKHxSTA0t1k5XqKQ7QZQi1GHO6FVaDYv+G94Tp1KFFeWO6oXb8m2t/txkbqBSOjOiJaqNMZTpAzkLmfwHtN7ktgM6W3wgbjS8iozrAYuzbfuj3ThYiB3TGsrDMc1z0EYv1kajcJ6FW/wuP/7NeZ1HyeRaVS0W0h7w7IYP1XXrzL72hQpMVtIM2Y0OrMdfZorXUOv7LxcZmLTrD00BcZU1Zv/yU2Cc+Jf80Q+ZKfpOcz4NJP8N/Rz/n/n8A9UYAlx7wuVS+ByhqvziAiBrGjk0gEL5LSGd7AcmoUtLB5s38rX5f4ny0K6tfW88GvQCNTqfRM1Kdz+KmOc9W34ibYmcK2t+aB6SzqxxLF+6CnbD0/Q7D9Dh5SK3t17rZ3tjvEpNvEcGRhESff98lZ5c4biyb8Uwknfw/Wb/gU3G19BeecFOcN3aYSLxG4MXdZzKv8MUXhS7wr3j+CSZ/EvSvv78YSEy6dLAsEteLjtaXzGnoIYAcWX9q9Kf0tO9/iu3vTmOvheG17LTdd2LfeZ5G/zQ65aO4y3GnjNgOGoVCwzfPLkW/4DrsJacmHCAw4tBsiH2OKzkiFp2XVEs/hQ+DfxP4N1ikn5z0Ec9z/wc4e0BE2xQ8BPwHv/BBDj4kyofOrAfV89BmP3Rs5T0y4pftV5v622yvlEoHq+O5nQZUZ+7isDg8mbnzZI6ncbSoSzhwrh/FBHh80/fE0i270lX5rNLvb38R+cL6su1cQln0Taov136yIrwHt0u5di5JAAjgNXK13imBI2qDtr7ZmudqMOiDFkAN+/O1WhqdaezzEXo9oeDL3prfFcI7ZY/CJb7l5AKN5pL/5Zt/i4rpsqtcK4dj5fI4Funm8iwcN4/LsVZOja5poKK/MtwoiiB8mJvRglIbAg1RbZnRtmaG+1cqOnL2SjkbJoWDoWAud4dD4Vw72fEsd9ic8+6sMAv6eHkbC1gyCzosoXEY0P8wrAnTkY6eoXfRxN0wbAp/FeYkDmTPgWt82iXVsdVEPiRUzIZxtiMkN7f6f/cjwQwHGxfwB6x5TXITQdaEsWH7LfFqBkQLRJI0qrnPTE2TaN9pEayASidm7GYBEMDanUGkUwuw7BkDxrEiArqtQNLPk2KX1HGCJZTyRVjnz/utfXmOX9c+bka+ULd5FcEt3ZrDBL4SHjdOXTTGulXyj7pKtm7Bb331ZSt/WTUyNgNL9wagqUtTyXCsqYED7aNT1dTYXTaPCBwZCnSt6u76njbgddC+7+qWN3eI4n11C8XgO5Gxn+jwh8KAR1SVIxFzFkcgNsajUQEqDcAwBqarnlZbVwyX8GdmyjKhuS/HtvFFEkAi4mcuue/Oko/+mNpQmwfqkWwhJEJcBtCLb4qpTVgAVvMBWAW3FOKFftzP+KazZV8LrOMDfN2KMQ+vgY/NPCuP94nEi3kbWkhf2KkAS8GkD8eP/3BB1kOn250F+IDx9ygUGQgqVl6YmJA5bmNXeR2kQtUqK4JIAN+YBOYEKC2e+N4q9w5FUts6tD5Z4USgZyQgARrtJfWyYuNjPu8lr5WN006Fc3PhqVotJ0C0sbR0JY1HM0ml8mVpVJOkW5PlU5FEkOD+Fcg+EfvFn8jkJ8VJ3iTwdXLya9C/8+DFJD65d4g3PpfRIPqeoXovLun3hMzrIlwFCYGhpFQKJTWpMWWAESFcYINswoUII/crkE28ECDC7n31z4Mc9A2a88ApGxC4+HyXQMh3SrdA6OS7hQK+a6mgkXyFXJ1Dq1yRk5jSRXOPn/XrZvb/Cm1qW2tUsdvC+F8GfsZ+pv+y5gx2plN1e0NIxlLNOyeb1fUu0KluqLCusQYsHkLtFIK7JaWwzMfzNbRMjhREg1PzQHPlftZSZY4KyFK4JM2e3NwrQpIt0x26EvvO2siZmZydpZw0so0Ao2GHo+5MG+ncXDvvl0oer/IXnv57Njuaas0nolVGcjhhPDQpZCd4rWZAtARhdZgDiA10F+sSwgng6Oe+NWQcsOUXobGmynl5434mpIc7XgbjiYkPVjnzyvJ6cmkuW0BKlwZsNHR2Xp6lRmIpmd+S0rjflF6mbAwspy8PNCyw8s0jvpaUVZaSoKS8tiZkQA0Bg6G4clJuTmBiERQmU/oZ6dsoFjSAoo9CM36sQXoCPfSegLb0+rz862B+IoVrDQfRg1j7ZjXJqaQ5ITnw++LVq8PVysIAO7w5TN/zfn7+nNnkzs+PzM6hVgdkoywmm81kacGfNp1MvvHYELMGZsbgpr23dH6gFyvyQSkT2zTtBhDTWwhQw+nA75vmDK3PiRPbO03ovMOPlRPPU1nz+w79d6tgZYlJ3Qd4gZqxYP/hfxPwKlXfuSoN6b84rTvmku6M7sW+m1AlcfbFEzhZJnQaDPFwZGT8LU6Hlq9msVYvhz6bemKA48wQ2CRSASLdHK4jwy2VCGzb4xSlFKYzClJSChjphQ7ZV2rneN5pq81V/m7b0Q1Q7YFAfv7A4KWR3MmMzGcEunewr9p2pWF2ORunfYYuHUdVVMzVFs2fp5jP6dUqJCrSZLq6B94GM+AyEC4rOarRuS3aBB8AucaNc0GAL0GLWorXZYm+E1XvIvQQo/Q37OAcVKeycdtSuHtfeAhE8YyP3Zosx7hpqWRGTJ2ZSDR2aWTaICfIcTBJ5WCVMSl+MA4UJVKbUmyxDTTJGwl7BZ/kR8Fsve5hHvjP33VwT/9s1SVI384TPwe1S0IRYg9BFIZcm9wlHz/f5sfPM/au2WAPy3Os55QXOIJTCrX3qR1J0iemXmfjqDYB1bbh9vCwZtUn9VCPk/fCuo9mMTWrWc00W3sVVFBBhTEaKe5RCL55oEJez5B9WHNm79H9bceYCzu0moLYlGtibK6Jc66J9a2RXbeCCnmDl+xjAZa2Ni4xzrfz7Xw7tjtQJKb2sb6+r+/r+/ZDcQ3lblRhWPv+P1tyHddzAzdyEzdzC7dim1/gvuCwbkIgut4aHEYAVm6ioFE3tlEc1MxCmi+ySW6YIJZ3NaLZzNKOoqifDKCfo+NcOVgOz4UcE9D0oiUmVurrN6fb88cfpw7r825jBt74mJf635aruLr94IylQRpzS/WxltBt7XY8cQ3WWK1i51OB3cA1x66BwG7ghOGNbzBhfp5Sz6fG2g3ix5FYbFcElKxfCtIk1JxwXvadwxiPceIluW6kV/l2PhV4jGuWgVQSYmHgDbA3XmM3/CV6vmysxyB+7MU0uyKQm5Vq1L497vz8aSNO10XFJYxuigK/aSaAz2u3QLsLeDvg1EGcXpWcggIkZqROGy5c4gE4BPfcc7Hfena7a9u0xZI33a3Osp2TKdHzphbgJ1sercb6S6p/uX7fjTbgx96FbezJCONA0P16QTg1Vec12Cm3MI+hNSpVtWgAkA7rKWqJ2iNSMyTOK4pHPgF72742rt94ddyffyXDYbCr3tyesQcF0dXTwBzgaZGayAlXELVNRUG5mpsjd3e+Fvz6C4Hz0Nd/tJ13gHgOAlZlPYf0mn1BOt1viMe8DkVM9ArKwjQgxeWrlejYPfzOls+0WMXZERR46YWQGqXDkgBy7swmcgWPW5HNEt+FGtXp5VTc3b0/BmFhioG6hW+wcQm5ews6lkJv+bdYQx7vQ58ak6gmnvEcuFvzo110vED9S1euKEEZQev6o13ePn9oIDVkU8pJO/Z4Nz5IvbcOQWfNqANXspZN1RSxWbNGsWjFpC+J7y5A4qwBXmMdcqwLkShfiZ+DbTPwVBptesP3h+TWV4msyDYsjMX6Pp+LiOcVOSKITx+jZh3DjyEmBN/9cniwXg0dy5M48PRka1QCP+Qv727N2M60KNTrmm1taNjC+OnCvE88lqmGRLA372KfE18ci/S8WlrtmyZeI7Ap5MhOBbrP5oYJTsHzxGRYdQlEGJ1ADjS6+w4qX+XYr+M6sFabJXKfKI3zHJqfQpK7Nz/aueMFLkFYmnLgHFHXDMIz+iA1bYm3B8SolfSV8oqBT8atJCoPssS3TJhR3FQZHzAgeH7OMws2hv6qetJWvOQl9FKtEgg3eh+hRvjRs91t54E1v5rPGgt/EntAk1GDrHQ5SBmsX8sRLtjWZN5kfbFwUGw6TqxbMkCNf2LeOAqqkFok0kT8c2pEbcHdmXFLx8acjsRLHPNo2HI29xGmWi2ZMzcpiUxBr7XUIDORhcMUg0t63+giQ+vylpcucbvWhnSwBlvcyteIoPhY8ECLJEx3nJRIs252hN8G/I0LlwK8Wab9FPa4XtZ9K7h70L2qhId5rzYVhPluUdB655g7YMa6SgmubWlQXlZvm5q4yjxMZSdIdBjriXGv6GAll62t1yfJyc1zIEKPviAJBkzJ/M5tSzcGciRfUlQQsjXxnGzPTQMKQvhA3In7pNYdn+DpwW+CxrUnIW6zDY4Wm3EoedFb35zHfeBBg2aM81ERaaGC4WymgnI2rMn28NI2Xo7ZLArGLgO7fDPukpQjYEO/YJa8rWJRxzxVaFCfdJZpQINFsR5ZlpSmQVl4tFV7MIl5LvVH/OmMhRddCzXqyG2/e6EtVCd6AqFStDbRCYRCiMGkEeW7hYMceKEH7LATlVfMoMy8nluM4h8qnEigc7NyOWbqYFGHsCsgkMeWvYVI2qaLBKOTwF2DyG6ZUtBuLzBJYoIX57hLusB3bcsMZ8/nVvfZRW+etzrZJVIPqP0hEd6dE8HfKVZ60FdIQSEtakHEFJUva4J393rZLIs8fKkeBSdRcj3hQb42swLlakZEZu/AuGUsaRwsy2ViGad5rBN/EFoE0mSQ36/MGXnuVh/1LvOY5tumlgw3bBTClZZROPVuyhHJSgtseLPpkDuNqYcVDzloGrRJdz6kiWDiKoOkPciJa/58fjsZgx622qghqjUyS4plzdQxOI9v1B00FJxbS7BJPQg0r7JoZNL43uZ2uMx0wcC+8ehYfw5wzQw21Y2ihWuGAusb7zdrKhqOgsrmkt/h19Dz9yYQUCCeRLbKIP4g/AJDnEEFTSNZuXRgHMki9NiBwt8iOuUDccW6JArqpMZFRfDZU7WpN6pu9YJTUOPMJVK3CRN81pktiuo1+8k+jmxqRFLnPe60aHOnXAtwERRRXpXTZSRzYnh6gSKnOSsLZffAXoE+8AddtaVIs60pRUukvQUAs3CGvmOSXxlkNBiyYgcSeFt4aQK4jEmf9tCjy2lT0HzsHsy4AMpFHyihpGfUAQYOqVCNVoFr5qNdjVDJEQGn4H1KU/h0yzNz7lcLs22RAQsxHaz6Dh8YTDwxvsl81XqesQRGHDXEixIq13Thp6Pm9SWu15VLy6LwjA3tkIpmjiwsSKrozbvjW59+K9RWRRwA7BZ3kJ93tcjXhisSxuhAtjgippj6ELzDeY2ZzGQwY9jcHC+TdRXjZR2ZIKMnxwPh9IEUgIk1jpZZ0KI58D2eiEUGIPChOsZReQI7KkLwd4F4IcGrbbCh0Q6Z3AqvjYOqa5Tg3obOrJlqCz82G8eiTwxOEeyWLnXrAH5ACZt5f8KRp52ezhJO8VHFSd0kzJK05Dw/60W/tw2tmaKKO2wNKileimwxFrJFSqSuvUWOmkAnDoI+SK/xDmTOMND1XEAlsERT0WCVYrJNY+un4icvrj+t4Iq9KNc7RAI0aIxkHHEKeVHEI3FmlymSsZwDq/YnuyxAdp+7NCcNkBvj4kFIzoFPW9QzBQtXyiTY4rRhAwWcVPjjcUIwNIKdlL2InafmPENDt4oBwA670jXcrPWADpwqKqeFbcaWA8mqPB48Rwnwjk//9D+6vINxOEKbfSzZ2poPYqtz4nXJ1V2LDSlztkzVTpW9h2V7CoLF4Cx7wu1DfgiVHlUTaroFeKHg+XrZZtO+TRA6+cRi0O6rxbwuW+Lake9SQ4+bgm/yE+N7W7XkZ3EOiuNY2E4pGnL1KDweEbJluMbCpuFqEWhBAQItTHuxzC8V0GYu5A6HCkDZd9DHuEVQMKTW4/FusJroy13BLBvb5JjsmoOHxcsH7+UZtkCXN+6SEbaCXGdVATrsSmbnNK8BCrUHD/a09a2hd/xCPJvvGfcNPxV/gRetfyY+m2FA2sG+Mixdp+uG5snZS+AON1F0C9Rb/wI9kwNGWtxoZEZHKVzm5exSZ6ArPVqyavLxSGH6Yfqynpdj2s26Zh83QdzugP0Hi6AwrK8KFThYubPH+GpRGwcgDLQBwAPSjt9WWu/2gktfWsPG8HbgW1Qwzu68Ral35QZKPnapN/3B7lTZMPUIvNVzjvbAtrqUkp2QES70TO7y/KMZwHGBhRbtcQmXN3Z88K/jJpuFs7iG9hkYtoSVEyVcdIHl0OfnYF5tpcL2LJH04KP+PxlcgdfiysFW4OFBsTNRZi8DRckoa2evvs3Tghw4D1+wRei7DjW6h055ytNlsLHRHjfnZOmOGbLcu4/bUag6D4UM6c8ddbLsfHqv7tZVSfCtj+uzzdnQlatqZZnW97oraOH0NJftcubChDN9tV8UdgtfAKJ6mxLOVrqG/v9f4+PkweTZ1R9juc/yj3bd8Xv0DKVRbIql4CasaswWSadD+NiXSaSDBJnhVqV1aXf+xf6eu9GtFt8D9JCFnrixl0StSa8UDfZBaAnXgZNUCTUmiODRm7z51x09tpXyLDJVbWRJmlKFhRdg1HNFB938/Zt0nlprGqBHv2Fml3Srqr/a1pMwNwTHsxYgnW7rRwBALjnKS0fd6GUS54ADx4eGTJPrPIRPQxnF8aUhv25KvJACQ0sL0ctxasNhw1TKkjGNYutS99kF6PB8GYf/DyPGNwy39zGHoFotljqnMdelJ8UCbSh4G9jKNsYiTpgoXsX0cC0dUnPNdi0+HpSzu5hCS3FqXNPt+KQh7J6DFkXXBDbsF2yq5CaRcgHLulniCzUDx949QPKt/2OlqMB2QbB1uGt7e2XMy4ZNG9fSHveMlUh8Sk5Y8f2P4ojg2TGq49q1LarHo7Ym7nEHg8ereoVE0P/A0A+ywJrLsj9VEVFZospJBbeDVnxh8GzRWNLVEhVzDGbNoB6aBj6t2PC1YinhcayQhOPjUKY9undR1yYxwXRuV92K5XGTNHocyNhR/+y0VpjFmOvMWOwCZKllZ+AyIoOR70kFSzZmx/JNgQpxI63E4vzyRFaPpIpVUaIw24rojnXbW8KNaT977/58TXBem9A3OrYIhlSyIjNozI+9qEaw5tUg+N9IQC5Y2XO5Amy9rY9WFEBhVYOg510dY+As2C8Pa9PixJHL0KUXIcz7o3SskREgV18UKUFaW6ygcOEbbB2bWSBSzP4OiE/bzwWLG9Tvn0lcU2SN7Lli9ZQNM76ahb/M9VID0AflrXxsT0Xik2Bx4h9yP5ho/nUwtFMfifDgMzoL31xKqZCKfioaI7B15E6I2Yg+kZ6LW2TDiLx9RIUm5ZAjNBaXuvV2lgFkerG1FemylTppimSuUk+NdFjRGQg33Gsm62IohD6KJlhjJUIV6SrF/5GMD+2RYoyXE6PRrtELBLBWumSae0+ss0Nczydt3KYu5KlnJpE+qwpD8VHTCMVpE0OutJ75xB+cuva9tRCl1B7kvShDdX3HL249jwefBaxQoVnQCREcdhVrSAeixi/H5RCTJuMCFbngfQ/oOJShHkJW06xxUATTv9zsHMwxvHisAVTAV5COt9CWSaxpz4y1kpx+GTiQNwtZAcvgNeGE0620yi1dhMt9XyoszCxrIpPbwECe+qoydW7YRmN9R482uOKrxFcNSw782V/n+lAfp4nzhDMYYfHxHuYWOJf6jDplybkrMuLDq7cZbqVRvAs81fRzEycs4nFayKYmQOGwtH+b30+TMHAdasrUq5PmHNx+2XeSFmvAOsTQLKETQfQOxYqKI4DXeJ2H4QhXR4O3tCWOW2FE9MqvxGLko/dLUxfM0InwVER/nA4dOvCnPAgrh3mSPlsNIwCJ2aoFRRd4BP0Zy2eZ0JW6Nh8+BBH6WyAUll9hQJ765kzDCbsfPR63uMut5EtCVLnjhjS4ADmnwU4AtticmqFkL+9BlYocGCq5wXDZrGGCJZ29XCCYsQULh4LjkGfHOHRZNhraghJQ874QFAzxtcpgbggs3HqKROQKBAUz8MdKKMcAI86nkpmFnSNJSjXFXpiJc3S08EoSxQ/Y92IvzMQ5PoIwHs72RQ2pbU6so1AUEixrpV7tXlccCfBhGw6gfjhtXJREvpuBoLY4LaYC1mys8ceHYWBXrJuO819N+yKnc7vyWDdYhdjpibvA77wRDYzV2F1OhnYzBa2lvoq5EgTUsVLkvdlOyQzcnHIzSKc3KeSUsC77rcl0FxiD6YIzH8xvNajyQQqfbbWa/jtuDdqX89I2jJ/SlkQ90MfGlN6LXmluM+HwN1yXPkD6kLlbBxL+aoZQkx1BenTGYQYQw5ISpffdgkEwo982Wme7QqhQPZ+Wop0cm46S+hIWFhFby58dWARXQGHkCaUF4d7lfUew97o77A/rimVR4LuWsdgb3BS84T2e1tB11T+2KI1dfwFXbTwDoLBEWr18RvaE14DjgaKRwsI7r/76bVqd7Z0dMDjMlbCC4NVUDGxArPXQt2fAeHBEyQErHSltznqVZllagF56NwIHjemLhT3mDIAIrORAX3zFx4LQTgZtJW7oU89MyyXQOBm1HGoC6tIMaIB+WWadKzjI6uP/88nRxpXIcefNwmzGWBMRSrCNNAXia0kufrlBbXgIC9FpcuB0TV/l1ZTPkki1YYg+DmDApoq1PAFTmpLuV2tzScJi3bttbkxX9a8aAeK0QShUhwgnHc+ygKhIVFE9q27fLANZVTo2wY+fz08PtuvVvC9vVbeSyGYOGztcZxkrbODns8vi7wPRzXoZezpB23iL+OGms1t1Igj107U4iY2f5aj+kKLH5RF7CYf7m/Vi3lT3jmTvXm5JvMJnpYSWlag9PQPPDsTmsz0uEUY7WrcBVWdPuhASpxYE+0bNSIoHlrCTKiaKmPNj6O1qbEUvCr8BeIP1kgwhTss0VLeMgN+oq4Zzd+ZqNK+tSIE9MtNsUbpNYbKj3AFVvGTIiab6LI0D37FNYxpyPF4VLOTWA4burX+PGqp1w91yJFz2tA+JoqxbUQR+2wl/AyAFW2UidZrRoK2IJ6fF0BUbtlnNxcrs0a1u5lqC4Dfu2VhBO1eVTjl+gDUhCdtAtQRMkccb7+6GW5061d9Tk5P+6sJR6mZr7G8z45Umt75QS47Enh+ITvlHWE4wwknIs38YNtm1I4nib/kY4nhKcDWrUDg3fbR4pVQicffToWkwc4CbVw2ao44LuXOugVP3fP+AITdjiJl7Ey8llJX9d5HH69g96Lxgy6WgtPL79IwWk5GNjgFaXDRMp43dctMetlZ030LG+Kmy5ZcRFYK2rUILWU/d45QGJpUKP1kx7qmWn8ckHYd4dNYg9DHwfnt1fi+56iadbOnEOwUPqpGojEy892d6i/u3ZzpAgUrFsCpZo94bvagluyX4LV3iqZbKC4Aa1MlZU5aCu2eJNGrZ8HjbXeMvEOAMlYcQRx1dxC/vB8oHjiNpqQrpTJCieOKGEJyAuLSgI0clLRrnZi5Ry8vcBt/mcUthi5sb7Zxnx0oUhDqB3Aj598SpN7y7RVtQyGL7r8TnlAh7TOghg7DO9UNpOl6cuwczlunLyn1PrXfrPDMN38x6uiZb5atBDI8HYa7FbQNy5HFkKP4rkv9APdhtXRqpKK3BzpYn+NITbkm5nRdEBaARRwY9zkphavwtAxAgNQBBfJHQzE18Ycdw7T7O8CFYSuZt55w5V/WBTv/SxKBB4pn++655Kh21bv7f7w/U4dI4VHaS9dPPNE/faNMF/nmClKmb20dhz7UZRX/XLmVbhEjHV0kefjfHI28kTkImH2QiHZlj73nB6r8E8MSXAWDmJpFHFxc70PA/zHJ8eSO5Reh6490bYAz0fLOL7wMmvuDsY1wdz5Z32px1cmGp47v7RTncyansHjTSMxALD9emfG8caUqvaOGlyYbsjEJiuDxyeM+pfFlsr8OMuZf9wkDPtrooZ36v22x5Q+aybTE+IfGnuJL8Jm14r7G5A/w7iTsKJL38gL1tjiUUIeD/kRAI1y5d5T+flmj4i02kfhbFV//jzQFff2tP/e/+fVr+5guxCECAP8M+SLMHuFJGt360Mv3XcVCtz07UwBYQN2kTb1VoIiHj5uiwDI+N8c34tlIVFIlwZtzYb6NWKGIxWxzJdnk0tE0ZQts36SEbLH+zsijUhYRNl4MdXmxXSviykgLzSWB5kxcEEl+nNyu30DrSUHPpgkPTMoSCct5oXKo7E1ew99D8nPhk5JTvS2wvStTrbtdfHkdBmtnm0KFNsZINEEYu2HZdvomlMi9Vq4mbgFGPTDgtQb2hoAFdfzyxiV9BI0NdMHQlWFEF/q2qgguIHIy5HCe4V2DnI3RrK9AOcPVe9yyZzXRdsw2eiAaRQUusjhhEiHbmAft3IFAQKKI7ChaQArgUiLozMqjSiNdRdGeK6OqdaUbb78xoqvGdWb4iucrj2HxD2WkHGiJWqDYg9HfTX/ek9XcM9NVLF4M2pGshqX+wHpq4eSfF611I6A+WasCRq6vmeDDvxdgWL0wIgcAlDu+0v7tOhsmBAXrq5WyA5zTcQovuWnj45KMEi9BVhM783Qb4op63O4rV14Bf4Axxvip6QXmeFovVRxmslx56eukSCf2ReE0N3K0Iz2INDUatt8m72POUcEniAyIDyBv3zh56MYm/v7MQXTLvZ9QGsGU99NUtIdoQOzDEua9fnvRHVJ6+/DpigfB+jAxAA7cSAzdU26eL/RaysevK4Reebm667P/4AgQKctdV11zfTMChh+lO9NBNtZ74wAEHufyj3GbAgT11V53ntGLFifeHUXq5b731189GGTINkOU31MC4+Ab9K/47quuFdsONMEy9vLM1gbdmIyM1NsoYY422yTiHNPFfsWaam6WFlsabaJIJWxjYdFt/ndLOOuvpt0hANxjwz6cP34xBBlnkUIJSlKEcFahEFapRIxmEhGyc8SZ0VoHf/B4UKVJR0aShS8fAjApzWmp+jPagbWG22RXzKbF0kmgcdkQqOYX2OkqU7KoLjjjmuBN22e28CxgyFlIzTTfHbHNNCQu7Dn6KOIcLW9MsDyeVbG/dwjOpYYlOtkoJN0k48cEEhETEvhWJQmOwOHyW6gWf3vrknfc+K7RiqKRKLXENilby38WDV7boqXuu0hCKMwNvbsSeFqzxijYyETZS/i0iI5deSIeepe3l0HPYNXqmruBVMAC0AQCgkC4UcKIAAKQTBb1QACjgBGFZDArlbSn8cdBnPJ/DEY50lKNlmfjivI6Pt7olHVZ+6Wnp2MhHhyChQwgfk1niNwDbxpEYKxlatFBIvzDYERuClMSEzPGxdOR6VmLDlplruuqeZwmiJ5Rsy168uZ2c4y1Yl/X/cMd2YOff45H2wVKBf2R5K/6jwv8bgyZQuW3cQXWhOjl+YvoMnxg8Uay11egeL4/Nn5o6Nnrsw5Yna/+z1UvVuepMdarKSvWIzDCwRrHVI+CJ/Dipl5VL/Hn5h0apcI83lvZZ5IuKTZH22z5npOCP/HfaASq7XV0wxyeP2VPtY8PHii3bkP8jCp8xt5a9q9NTmd8BAAA=) format('woff2')}

  input,textarea{-webkit-user-select:text;user-select:text}
  #fx{position:fixed;inset:0;pointer-events:none;z-index:60}

  /* ---------- top HUD ---------- */
  .hud{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 16px 8px;gap:10px;overflow:hidden}
  .hud-left{display:flex;align-items:center;gap:9px}
  .exit-btn{appearance:none;border:1px solid var(--line);background:transparent;cursor:pointer;color:var(--gold);font-family:inherit;font-weight:700;font-size:15px;line-height:1;border-radius:9px;padding:5px 9px}
  .exit-btn:hover{background:rgba(232,198,106,.12)}
  .hp{display:flex;gap:5px;font-size:19px;line-height:1}
  .hp i{filter:drop-shadow(0 1px 2px rgba(0,0,0,.4));transition:.25s}
  .hp i.dead{filter:grayscale(1) brightness(.5);transform:scale(.8)}
  .hud-right{display:flex;align-items:center;gap:9px;min-width:0}
  .hud-score{text-align:right;min-width:0;overflow:hidden}
  .hud-score .lvl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .hud2{display:flex;align-items:center;gap:10px;padding:0 16px 6px}
  .end-btn{flex:none;appearance:none;border:1px solid var(--raise);background:rgba(224,84,79,.16);cursor:pointer;color:#ff9a93;font-family:inherit;font-weight:700;font-size:12.5px;line-height:1;border-radius:9px;padding:6px 12px;white-space:nowrap}
  .end-btn:hover{background:rgba(224,84,79,.3)}
  .score{font-family:"Space Grotesk";font-weight:700;font-size:22px;letter-spacing:-.02em;line-height:1}
  .lvl{font-family:"Space Mono";font-size:10px;letter-spacing:.2em;color:var(--gold);text-transform:uppercase}
  .combo-wrap{display:flex;align-items:center;gap:7px}
  .combo{font-family:"Space Grotesk";font-weight:700;font-size:16px;color:var(--gold);opacity:0;transform:scale(.6);transition:.18s}
  .combo.show{opacity:1;transform:scale(1)}
  .combo.big{font-size:21px;text-shadow:0 0 16px rgba(232,198,106,.7)}

  /* ---------- table center ---------- */
  .table{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:8px 18px;position:relative}
  .table.fb-hide{display:none}   /* 反馈/结果面板出现时收起牌桌区，避免与说明重叠 */
  .scene{text-align:center}
  .scene .badge{display:inline-flex;align-items:center;gap:8px;background:rgba(0,0,0,.28);
    border:1px solid rgba(232,198,106,.35);border-radius:999px;padding:7px 16px;
    font-weight:700;font-size:14px}
  .scene .badge .pip{width:9px;height:9px;border-radius:50%;background:var(--gold)}
  .scene .who{margin-top:9px;color:var(--muted);font-size:12.5px}
  /* 训练牌桌可视化 */
  .felt{position:relative;width:min(370px,88vw);height:150px;margin:2px auto 0;
    border-radius:50%/46%;background:radial-gradient(120% 120% at 50% 32%,#1b5a48,#0e3a2e 70%,#0b2c23);
    border:3px solid #14342a;box-shadow:inset 0 2px 18px rgba(0,0,0,.45)}
  .felt:empty{display:none}
  .felt-pot{position:absolute;left:50%;top:28%;transform:translate(-50%,-50%);font-size:10px;color:var(--muted);letter-spacing:.08em}
  .seat{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:3px;white-space:nowrap}
  .seat-pos{font-family:"Space Mono";font-size:10px;font-weight:700;color:var(--ink);background:rgba(0,0,0,.42);
    border:1px solid var(--line);border-radius:8px;padding:2px 7px;line-height:1.25}
  .seat.hero .seat-pos{color:#16110a;background:linear-gradient(180deg,var(--gold),var(--gold2));border-color:var(--gold)}
  .seat.folded{opacity:.34}
  .seat .bet{font-family:"Space Grotesk";font-weight:700;font-size:11px;color:var(--gold);background:rgba(0,0,0,.55);border-radius:9px;padding:1px 6px}
  .seat .bet small{font-size:8px;opacity:.7;font-weight:500;margin-left:1px}
  .dlr{display:inline-block;background:#f1f5ee;color:#16110a;border-radius:50%;width:13px;height:13px;line-height:13px;text-align:center;font-size:9px;font-weight:800}

  .cards{display:flex;gap:12px;perspective:900px}
  .pf-card{width:88px;height:124px;border-radius:var(--card-r);position:relative;
    transform-style:preserve-3d;transition:transform .42s cubic-bezier(.2,.8,.25,1)}
  .pf-card .face,.pf-card .back{position:absolute;inset:0;border-radius:var(--card-r);backface-visibility:hidden;
    display:flex;align-items:center;justify-content:center;box-shadow:0 8px 22px rgba(0,0,0,.4)}
  .pf-card .back{background:
      repeating-linear-gradient(45deg,#7d2230 0 7px,#8c2a39 7px 14px);
    border:3px solid #f1f5ee}
  .pf-card .face{background:#f7f8f4;border:1px solid #d8ddd2;flex-direction:column;transform:rotateY(180deg)}
  .pf-card.flip{transform:rotateY(180deg)}
  .pf-card .rk{position:absolute;top:6px;left:9px;font-family:"Space Grotesk";font-weight:700;font-size:20px;line-height:1}
  .pf-card .rk.br{top:auto;left:auto;bottom:6px;right:9px;transform:rotate(180deg)}
  .pf-card .pip-c{font-size:44px;line-height:1}

  .timer{width:min(260px,72vw);height:8px;border-radius:6px;background:rgba(0,0,0,.3);overflow:hidden}
  .timer > i{display:block;height:100%;width:100%;background:linear-gradient(90deg,var(--call),var(--gold));transition:none}
  .timer.warn > i{background:linear-gradient(90deg,var(--mistake),var(--blunder))}

  /* feedback flash */
  .verdict{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.7);
    text-align:center;opacity:0;pointer-events:none;transition:.2s;z-index:30}
  .verdict.show{opacity:1;transform:translate(-50%,-50%) scale(1)}
  .verdict .grade{font-family:"Space Grotesk";font-weight:700;font-size:42px;letter-spacing:-.02em;
    text-shadow:0 4px 24px rgba(0,0,0,.5)}
  .verdict .tip{margin-top:6px;font-size:13.5px;color:var(--ink);background:rgba(0,0,0,.55);
    padding:6px 13px;border-radius:8px;display:inline-block;max-width:78vw}
  .verdict .tip b{color:var(--gold)}

  /* ---------- actions ---------- */
  .actions{display:grid;gap:10px;padding:12px 16px calc(16px + env(safe-area-inset-bottom));}
  .actions.n2{grid-template-columns:1fr 1fr}
  .actions.n3{grid-template-columns:1fr 1fr 1fr}
  .act{appearance:none;border:0;cursor:pointer;font-family:inherit;font-weight:700;font-size:17px;
    color:#fff;padding:18px 8px;border-radius:14px;position:relative;overflow:hidden;
    box-shadow:0 6px 0 rgba(0,0,0,.35), 0 10px 20px rgba(0,0,0,.3);transition:transform .08s, box-shadow .08s}
  .act:active{transform:translateY(4px);box-shadow:0 2px 0 rgba(0,0,0,.35),0 6px 12px rgba(0,0,0,.3)}
  .act small{display:block;font-weight:500;font-size:11px;opacity:.8;margin-top:2px;font-family:"Space Mono"}
  .act[disabled]{opacity:.45;cursor:default}
  .pf-a-raise{background:linear-gradient(180deg,#ec6a64,#c5403b)}
  .a-3bet{background:linear-gradient(180deg,#c07ce2,#9a4cca)}
  .act.correct{animation:pop .4s}
  .act.wrong{animation:shake .4s}

  .feedback{padding:14px 16px calc(16px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:11px;
    flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;animation:fbUp .25s ease}
  .feedback.hide{display:none}
  @keyframes fbUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
  .fb-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .fb-grade{font-family:"Space Grotesk";font-weight:700;font-size:18px}
  .fb-ans{font-size:13.5px;color:var(--muted)}
  .fb-ans b{color:var(--gold);font-weight:700}
  .fb-reason{font-size:14px;line-height:1.6;color:var(--ink);background:rgba(0,0,0,.26);
    border:1px solid var(--line);border-radius:12px;padding:12px 14px}
  .fb-reason .you{color:var(--muted);display:block;margin-bottom:5px;font-size:12.5px}
  /* 你的选择 vs 参考：视觉动作对比条 */
  .fb-cmp{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
    background:rgba(0,0,0,.26);border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:14.5px;font-weight:700}
  .fb-cmp.hide{display:none}
  .fb-cmp-side{display:inline-flex;align-items:center;gap:6px}
  .fb-cmp-side i{font-style:normal;font-weight:400;font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em}
  .fb-cmp-vs{color:var(--muted);font-weight:400;font-size:15px}
  .fb-cmp-ok{color:var(--best);font-size:12px}
  .fb-cmp-freq{flex-basis:100%;display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:400;color:var(--muted);margin-top:2px}
  .fb-cmp-bar{flex:1;height:9px;border-radius:5px;overflow:hidden;display:flex;background:rgba(0,0,0,.4)}
  .fb-cmp-bar i{display:block;height:100%}
  /* 你的毛病：错误类型归因 + 累计 + 去练（串到漏洞分析） */
  .pf-fb-leak{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
  .pf-fb-leak.hide{display:none}
  .pf-fb-leak b{font-weight:700}
  .fb-leak-go{margin-left:auto;appearance:none;border:1px solid var(--line);background:rgba(255,255,255,.05);
    color:var(--ink);font-family:inherit;font-weight:700;font-size:12px;border-radius:8px;padding:5px 11px;cursor:pointer;white-space:nowrap}
  .fb-leak-go:active{transform:scale(.97)}
  /* M4.5 Task R5：局终结算屏「一键专项」结论卡（js/preflop/app.js pfRenderOverDiag()） */
  .pf-over-diag{background:rgba(0,0,0,.26);border:1px solid var(--line);border-radius:12px;
    padding:10px 12px;margin:12px auto;max-width:320px;text-align:left;font-size:12.5px;color:var(--muted)}
  .pf-over-diag.hide{display:none}
  .pf-over-diag .fb-leak-go{display:block;width:100%;margin:8px 0 0;text-align:center}
  /* wrong-answer range table popped into the feedback panel */
  .fbmx{width:100%;max-width:300px;margin:0 auto;background:rgba(0,0,0,.24);border:1px solid var(--line);border-radius:12px;padding:11px 11px 9px}
  .fbmx.hide{display:none}
  .fbmx-h{font-size:12px;color:var(--muted);text-align:center;margin-bottom:8px;line-height:1.5}
  .fbmx-h b{color:var(--ink)}
  /* 13×13 等分正方格：列+行都用 1fr + 容器正方形，格子不随内容变形 */
  .fbmx-grid{display:grid;grid-template-columns:repeat(13,1fr);grid-template-rows:repeat(13,1fr);gap:1px;aspect-ratio:1/1;width:100%}
  /* Nash 查询器：13×13 EV 格，显示手牌 + chip-EV，背景按 EV 绿红渐变 */
  .nmatrix{display:grid;grid-template-columns:repeat(13,1fr);grid-template-rows:repeat(13,1fr);gap:1px;aspect-ratio:1/1;width:100%;margin-top:6px;background:rgba(220,226,216,.5);border-radius:5px;overflow:hidden}
  .ncell{display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.05;overflow:hidden;cursor:default}
  .ncell .h{font-weight:700;color:inherit;font-size:clamp(5.5px,1.5vw,11px)}
  .ncell .e{color:inherit;opacity:.88;font-size:clamp(4.5px,1.2vw,9px);font-family:'Space Mono'}
  /* 主页：训练计划顶部横幅 + 6 个功能卡网格 */
  .home-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;width:100%;max-width:440px;margin:6px auto 0}
  .home-card{text-decoration:none;position:relative;display:flex;flex-direction:column;align-items:center;gap:9px;background:linear-gradient(165deg,#1b2a20,#131c16);border:1px solid var(--line);border-radius:20px;padding:26px 12px 22px;cursor:pointer;color:var(--ink);overflow:hidden;transition:transform .14s ease,border-color .18s,box-shadow .18s}
  .home-card::before{content:'';position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,transparent,var(--gold),transparent);opacity:.45;transition:opacity .18s}
  .home-card:hover{transform:translateY(-4px);border-color:var(--gold);box-shadow:0 14px 28px -12px rgba(0,0,0,.65),0 0 0 1px rgba(232,198,106,.16)}
  .home-card:hover::before{opacity:1}
  .home-card:active{transform:translateY(-1px) scale(.98)}
  .hc-ic{display:flex;align-items:center;justify-content:center;width:58px;height:58px;border-radius:50%;background:radial-gradient(circle at 50% 36%,rgba(232,198,106,.18),rgba(232,198,106,.04));font-size:29px;line-height:1}
  .hc-t{font-family:'Space Grotesk';font-weight:700;font-size:16px;letter-spacing:.2px}
  .hc-s{font-size:11.5px;color:var(--muted)}
  .hc-pro{position:absolute;top:10px;right:10px;font-family:'Space Grotesk';font-weight:800;font-size:9px;letter-spacing:1px;color:#1a1208;background:linear-gradient(135deg,var(--gold),#b8902f);padding:2px 7px;border-radius:999px;box-shadow:0 2px 6px -2px rgba(0,0,0,.5)}
  /* 顶部横幅式宽卡(训练计划) —— 跨整行、图标+文字横排、金边突出 */
  .home-card.wide{grid-column:1/-1;flex-direction:row;align-items:center;justify-content:flex-start;gap:16px;padding:17px 20px;text-align:left;border-color:rgba(232,198,106,.42);background:linear-gradient(115deg,#21301f,#15201a)}
  .home-card.wide::before{opacity:1}
  .home-card.wide .hc-ic{width:50px;height:50px;font-size:25px;flex:none}
  .home-card.wide .hc-txt{display:flex;flex-direction:column;gap:3px;min-width:0}
  .home-card.wide .hc-t{font-size:17px}
  .home-card.wide .hc-s{font-size:12px}
  .fbmx .ccell{cursor:default;font-size:0;border-radius:2px;min-height:0;min-width:0}
  .fbmx .ccell.now{font-size:7.5px;color:#fff;box-shadow:0 0 0 2px var(--blunder),0 0 0 4px rgba(255,255,255,.6);z-index:4}
  .fbmx .ccell.now.ok{box-shadow:0 0 0 2px var(--best),0 0 0 4px rgba(255,255,255,.6)}   /* 答对/两可：绿框 */
  .fbmx .ccell.adj{box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.5);z-index:2}          /* 邻牌：展示范围边界 */
  .fbmx-leg{display:flex;flex-wrap:wrap;gap:5px 12px;justify-content:center;margin-top:9px}
  .fbmx-leg .it{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}
  .fbmx-leg .sw,.fbmx-sw{width:11px;height:11px;border-radius:3px}
  .fbmx-sw{display:inline-block;vertical-align:-1px;margin-right:4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.35)}
  .fb-next{appearance:none;border:0;cursor:pointer;font-family:inherit;font-weight:700;font-size:17px;
    color:#16110a;background:linear-gradient(180deg,var(--gold),var(--gold2));
    padding:16px;border-radius:14px;box-shadow:0 6px 0 rgba(0,0,0,.3)}
  .fb-next:active{transform:translateY(3px);box-shadow:0 3px 0 rgba(0,0,0,.3)}
  @keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.06)}100%{transform:scale(1)}}
  @keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}

  /* floating score */
  .float{position:fixed;font-family:"Space Grotesk";font-weight:700;font-size:24px;z-index:55;
    pointer-events:none;color:var(--gold);text-shadow:0 2px 10px rgba(0,0,0,.6);
    animation:floatUp .9s ease-out forwards}
  @keyframes floatUp{0%{opacity:0;transform:translateY(8px) scale(.8)}15%{opacity:1}100%{opacity:0;transform:translateY(-46px) scale(1.1)}}

  /* toast */
  .toast{position:fixed;left:50%;top:74px;transform:translateX(-50%) translateY(-14px);
    background:linear-gradient(180deg,#1d3a30,#142a22);border:1px solid var(--gold2);
    color:var(--ink);padding:10px 16px;border-radius:12px;font-weight:700;font-size:14px;z-index:58;
    box-shadow:0 10px 30px rgba(0,0,0,.5);opacity:0;transition:.3s;display:flex;gap:9px;align-items:center}
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
  .toast .em{font-size:18px}

  .banner{position:absolute;left:0;right:0;top:38%;text-align:center;z-index:40;opacity:0;pointer-events:none}
  .banner.show{animation:bannerIn 1.4s ease forwards}
  .banner .l{font-family:"Space Mono";letter-spacing:.3em;color:var(--gold);font-size:12px}
  .banner .b{font-family:"Space Grotesk";font-weight:700;font-size:40px;text-shadow:0 0 30px rgba(232,198,106,.6)}
  @keyframes bannerIn{0%{opacity:0;transform:scale(.7)}20%{opacity:1;transform:scale(1)}80%{opacity:1}100%{opacity:0;transform:scale(1.1)}}

  /* ---------- overlay screens ---------- */
  .pf-screen{position:absolute;inset:0;z-index:50;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:18px;padding:30px;text-align:center;
    background:radial-gradient(120% 80% at 50% 0%, rgb(20,70,58), rgb(8,26,21))}
  .pf-screen.hide{display:none}
  #startScreen{justify-content:flex-start;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;gap:13px;padding-top:calc(26px + env(safe-area-inset-top));padding-bottom:calc(26px + env(safe-area-inset-bottom))}
  /* 内容可能超高的整页 screen:可滚 + safe center(溢出自动改顶对齐,不裁头)。
     否则 flex center 溢出会把顶部 logo 裁出视口且滚不动(主页 9 卡 + SEO 文后必溢出)。 */
  #homeScreen,#overScreen{justify-content:safe center;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
    padding-top:calc(26px + env(safe-area-inset-top));padding-bottom:calc(26px + env(safe-area-inset-bottom))}
  .logo-suit{font-size:40px;letter-spacing:6px;margin-bottom:-6px}
  .logo-suit .r{color:#e0544f}.logo-suit .k{color:#f1f5ee}
  .pf-screen h1{font-family:"Space Grotesk";font-weight:700;font-size:34px;margin:0;letter-spacing:-.02em;line-height:1.05}
  .pf-screen h1 b{color:var(--gold)}
  .pf-screen p{color:var(--muted);font-size:14px;max-width:34ch;margin:0;line-height:1.6}
  .big-btn{appearance:none;border:0;cursor:pointer;font-family:inherit;font-weight:700;font-size:18px;
    color:#16110a;background:linear-gradient(180deg,var(--gold),var(--gold2));
    padding:16px 40px;border-radius:14px;box-shadow:0 8px 24px rgba(232,198,106,.35);margin-top:6px}
  .big-btn:active{transform:translateY(2px)}
  .ghost-btn{appearance:none;border:1px solid rgba(255,255,255,.14);cursor:pointer;font-family:inherit;font-weight:600;font-size:14px;
    color:var(--muted);background:transparent;padding:11px 24px;border-radius:12px;margin-top:-2px}
  .ghost-btn:active{transform:translateY(1px)}

  /* charts screen */
  .chart-screen{position:absolute;inset:0;z-index:50;display:flex;flex-direction:column;
    background:radial-gradient(120% 80% at 50% 0%, rgb(20,70,58), rgb(8,26,21))}
  .chart-screen.hide{display:none}
  #coachOnboard.hide,#coachDiag.hide,#coachReport.hide,#coachDay.hide{display:none}
  .chart-bar{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 16px 8px;border-bottom:1px solid var(--line);gap:8px}
  .chart-title{font-family:"Space Grotesk";font-weight:700;font-size:18px}
  .pf-back-btn{appearance:none;border:0;background:transparent;cursor:pointer;color:var(--gold);font-family:inherit;font-weight:600;font-size:14px;padding:4px 2px}
  .chart-body{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:16px 16px calc(30px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:6px;align-items:center}
  .chart-body .sel-group{max-width:360px}
  /* range-vs-range calculator */
  .chart-body.calc{gap:10px}
  .calc .cnote{max-width:380px}
  .calc code{background:rgba(255,255,255,.07);border-radius:4px;padding:1px 5px;font-size:12px}
  .calc-row{width:100%;max-width:380px;display:flex;flex-direction:column;gap:5px}
  .calc-lab{font-size:13px;font-weight:600;color:var(--ink)}
  .calc-n{color:var(--gold-dim,#9c8240);font-weight:500;font-size:12px}
  .calc-in{width:100%;box-sizing:border-box;font-family:inherit;font-size:15px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-variant-numeric:tabular-nums}
  .calc-in:focus{outline:none;border-color:var(--gold)}
  .calc-vs{font-weight:700;color:var(--foldink,#7c8c82);letter-spacing:1px;font-size:13px}
  .calc .big-btn{max-width:380px;width:100%;margin-top:4px}
  .calc-out{width:100%;max-width:380px;min-height:10px}
  .calc-bars{display:flex;flex-direction:column;gap:10px;margin-top:6px}
  .calc-bar{display:flex;flex-direction:column;gap:4px}
  .calc-bar .bl{display:flex;justify-content:space-between;font-size:13px;font-weight:600}
  .calc-bar .bl .pct{font-variant-numeric:tabular-nums}
  .calc-track{height:14px;border-radius:7px;background:rgba(255,255,255,.07);overflow:hidden}
  .calc-track i{display:block;height:100%;border-radius:7px}
  .calc-edge{text-align:center;font-size:13px;color:var(--ink);margin-top:10px}
  .calc-err{color:var(--mistake,#e0954f);font-size:13px;text-align:center}
  .cchips{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-bottom:8px;max-width:430px}
  .cchip{appearance:none;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--ink);
    background:rgba(0,0,0,.28);border:1px solid rgba(255,255,255,.1);border-radius:999px;padding:7px 13px;transition:.15s}
  .cchip[aria-selected="true"]{background:linear-gradient(180deg,rgba(232,198,106,.18),rgba(232,198,106,.06));border-color:var(--gold);color:var(--gold)}

  .cmatrix-wrap{width:100%;max-width:430px;background:var(--panel,#161d18);border:1px solid var(--line);border-radius:14px;padding:14px;margin-top:4px}
  .cmatrix-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
  .cmatrix-who{font-size:12px;color:var(--muted);margin-bottom:10px}
  .cmatrix-head>span:first-child{font-family:"Space Grotesk";font-weight:700;font-size:15px}
  .cmatrix-stat{font-family:"Space Mono";font-size:12px;color:var(--muted)}
  .cmatrix-stat b{color:var(--gold)}
  .cmatrix{display:grid;grid-template-columns:repeat(13,1fr);gap:2px;width:100%;aspect-ratio:1/1}
  .ccell{display:flex;align-items:center;justify-content:center;border-radius:3px;overflow:hidden;
    font-family:"Space Mono";font-weight:700;font-size:clamp(6px,1.7vw,11px);
    background:var(--fold);color:#54655a;cursor:pointer;position:relative;letter-spacing:-.04em}
  .ccell span{position:relative;z-index:2}
  .ccell.pair{box-shadow:inset 0 0 0 1px rgba(232,198,106,.4)}
  .ccell.raise,.ccell.shove{background:var(--raise);color:#1a0f0e}
  .ccell.call{background:var(--call);color:#06150d}
  .ccell.threebet{background:var(--threebet);color:#fff}
  .ccell.mix{color:#fff}
  .ccell.mix::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(118deg,var(--threebet) 0 50%,var(--call) 50% 100%)}
  .ccell.mixjam::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(118deg,var(--raise) 0 50%,var(--call) 50% 100%)}
  .ccell.mixjam{color:#fff}
  .ccell.edge-raise,.ccell.edge-shove,.ccell.edge-call{color:#cdd8cf}
  .ccell.edge-raise::before,.ccell.edge-shove::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(118deg,var(--raise) 0 50%,var(--fold) 50% 100%)}
  .ccell.edge-call::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(118deg,var(--call) 0 50%,var(--fold) 50% 100%)}
  .ccell.sel{box-shadow:0 0 0 2px var(--gold);z-index:3}
  .clegend{display:flex;flex-wrap:wrap;gap:10px 16px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
  .clegend .it{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
  .clegend .sw{width:13px;height:13px;border-radius:3px}
  .cinfo{margin-top:12px;font-size:13px;color:var(--ink);min-height:20px;text-align:center}
  .cinfo b{color:var(--gold)}
  .cinfo .cfreq{color:var(--good);font-variant-numeric:tabular-nums;font-weight:600}
  .cnote{max-width:430px;color:var(--foldink);font-size:11px;line-height:1.6;text-align:center;margin:14px 0 0}
  .about{gap:12px}
  .ab-card{width:100%;max-width:430px;background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:14px 16px;text-align:left}
  .ab-card.ab-ok{border-color:rgba(52,176,116,.5)}
  .ab-card.ab-warn{border-color:rgba(224,84,79,.55);background:rgba(224,84,79,.06)}
  .ab-card h3{margin:0 0 7px;font-family:"Space Grotesk";font-weight:700;font-size:15px}
  .ab-card p{margin:0;font-size:13.5px;line-height:1.65;color:var(--muted)}
  .ab-card p b{color:var(--ink)}
  .ab-card ul{margin:0;padding-left:18px}
  .ab-card li{font-size:13px;line-height:1.7;color:var(--muted)}
  .ab-card li b{color:var(--ink)}
  .gd-spine{width:100%;max-width:430px;display:flex;flex-direction:column;align-items:stretch;gap:0}
  .gd-node{width:100%;max-width:430px;display:flex;align-items:center;gap:11px;background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:12px 13px;margin:5px 0;text-align:left}
  .gd-badge{flex:none;width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-family:"Space Grotesk";font-weight:700;font-size:15px;background:var(--threebet);color:#fff}
  .gd-badge.alt{background:var(--accent2,#7fc6ff);color:#06222e}
  .gd-txt{flex:1;min-width:0}
  .gd-txt b{font-size:14px;display:block}
  .gd-txt small{display:block;color:var(--muted);font-size:12px;line-height:1.5;margin-top:2px}
  .gd-go{flex:none;background:var(--best,#e8c66a);color:#1a1410;border:none;border-radius:9px;padding:8px 12px;font-weight:700;font-size:13px;cursor:pointer}
  .gd-go:active{transform:scale(.95)}
  .gd-arrow{width:100%;max-width:430px;text-align:center;color:var(--muted);font-size:11.5px;padding:3px 0}
  .pf-sbar{display:flex;align-items:center;gap:9px;font-size:12.5px}
  .pf-sbar .nm{flex:none;width:108px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .pf-sbar .trk{flex:1;height:14px;background:rgba(255,255,255,.07);border-radius:7px;overflow:hidden}
  .pf-sbar .fil{height:100%;border-radius:7px;background:linear-gradient(90deg,var(--raise),var(--best))}
  .pf-sbar .pct{flex:none;width:62px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}
  .pf-rv-group{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:11px 13px}
  .pf-rv-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
  .pf-rv-head b{font-size:13.5px}
  .pf-rv-mini{flex:none;background:var(--best,#e8c66a);color:#1a1410;border:none;border-radius:8px;padding:5px 10px;font-weight:700;font-size:12px;cursor:pointer}
  .pf-rv-chip{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:8px;padding:5px 8px;font-size:13px;font-variant-numeric:tabular-nums}
  .pf-rv-chip .wn{color:var(--mistake,#e0954f);font-size:11px}
  .pf-rv-chip .st{color:var(--best,#34b074);font-size:11px}
  .pf-rv-chip .del{cursor:pointer;color:var(--muted);font-weight:700;padding:0 2px}
  .pf-rv-chip .del:active{color:var(--raise)}
  .navrow{display:flex;gap:7px;width:100%;max-width:430px}
  .navbtn{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:9px 3px;color:var(--ink);font-size:11px;cursor:pointer;transition:transform .08s}
  .navbtn .ic{font-size:17px;line-height:1}
  .navbtn:active{transform:scale(.94)}
  details.adv{width:100%;max-width:430px;border:1px solid var(--line);border-radius:11px;background:rgba(255,255,255,.02)}
  details.adv>summary{cursor:pointer;color:var(--muted);font-size:12.5px;padding:10px 12px;list-style:none;text-align:center;user-select:none}
  details.adv>summary::-webkit-details-marker{display:none}
  details.adv[open]>summary{color:var(--ink);border-bottom:1px solid var(--line)}
  details.adv .sel-group{padding:10px 12px 4px}
  details.adv .sel-group:last-child{padding-bottom:12px}
  .rules{display:flex;flex-direction:column;gap:8px;background:rgba(0,0,0,.25);border:1px solid rgba(255,255,255,.06);
    border-radius:14px;padding:16px 18px;font-size:13px;color:var(--muted);max-width:330px}
  .rules .row{display:flex;justify-content:space-between;gap:14px}
  .rules .row b{color:var(--ink);font-weight:600}
  .grade-chip{padding:2px 8px;border-radius:6px;font-weight:700;font-size:12px;color:#11160f}
  .conf{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;white-space:nowrap;vertical-align:middle;cursor:help}
  .conf-precise{background:rgba(52,176,116,.18);color:#7fe0a8;border:1px solid rgba(52,176,116,.55)}
  .conf-curated{background:rgba(232,198,106,.14);color:#e8c66a;border:1px solid rgba(232,198,106,.5)}
  .sel-group{width:100%;max-width:430px}   /* 开始页统一列宽：与图表预览 / 导航一致 */
  .sel-label{font-family:"Space Mono";font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin:0 0 8px;text-align:left}
  .opts{display:flex;gap:8px;margin-bottom:14px}
  .opts-wrap{flex-wrap:wrap}
  /* 场景选择：固定 3 列网格，各按钮等宽等高（避免最后一行被 flex 拉宽，更整齐） */
  #selFormat{display:grid;grid-template-columns:repeat(3,1fr);align-items:stretch}
  #selFormat .opt{min-width:0}
  .opt-group{flex-basis:100%;width:100%;text-align:left;font-family:"Space Mono";font-size:10.5px;letter-spacing:.12em;
    text-transform:uppercase;color:var(--gold);margin:11px 0 2px;border-top:1px solid var(--line);padding-top:9px}
  .opts-wrap .opt-group:first-child{border-top:0;margin-top:2px;padding-top:0}
  /* leak analyzer */
  /* Pro 尝鲜：锁住的内容模糊 + 浮层解锁按钮 */
  .pro-prev{position:relative}
  .pro-locked{filter:blur(16px) saturate(.6);opacity:.45;pointer-events:none;user-select:none}
  .pro-gate{position:absolute;left:50%;top:55%;transform:translate(-50%,-50%);z-index:3;appearance:none;
    border:1px solid var(--gold);background:linear-gradient(180deg,var(--gold),var(--gold2));color:#16110a;
    font-family:inherit;font-weight:700;font-size:13px;padding:9px 15px;border-radius:11px;cursor:pointer;
    box-shadow:0 6px 18px rgba(0,0,0,.45);white-space:nowrap;max-width:92%}
  .pf-leak-lab{font-size:12.5px;min-width:118px;color:var(--ink)}
  .pf-leak-trk{flex:1;height:12px;border-radius:6px;background:rgba(255,255,255,.06);overflow:hidden}
  .pf-leak-trk i{display:block;height:100%;border-radius:6px}
  .pf-leak-n{font-variant-numeric:tabular-nums;font-weight:700;font-size:12.5px;min-width:24px;text-align:right}
  .pf-leak-sub{font-family:"Space Mono";font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-dim,#9c8240);margin:14px 0 6px}
  .pf-leak-hand{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px solid var(--line)}
  .pf-leak-hand .h{font-weight:700;color:var(--gold)}
  .pf-leak-hand .sp{font-size:12px;color:var(--muted);flex:1}
  .pf-leak-hand .x{font-variant-numeric:tabular-nums;font-size:12px;color:var(--mistake)}
  .pf-leak-drill{appearance:none;border:1px solid var(--line);background:transparent;color:var(--gold);cursor:pointer;
    font-family:inherit;font-size:12px;font-weight:600;border-radius:8px;padding:4px 10px}
  .pf-leak-drill:hover{background:rgba(232,198,106,.12)}
  /* personal profile */
  .pf-prof-row{display:flex;align-items:baseline;gap:8px;font-size:13.5px;padding:6px 0;border-top:1px solid var(--line)}
  .pf-prof-row:first-child{border-top:0}
  .pf-prof-k{min-width:62px;color:var(--muted);font-size:12px}
  .pf-prof-d{color:var(--muted);font-size:12px;margin-left:auto;text-align:right}
  .opts-wrap .opt{flex:1 1 28%;min-width:92px}
  .opt{flex:1;appearance:none;cursor:pointer;font-family:inherit;font-weight:700;font-size:14px;color:var(--ink);
    background:rgba(0,0,0,.28);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:11px 6px;transition:.15s;line-height:1.15}
  .opt small{display:block;font-weight:400;font-size:10.5px;color:var(--muted);margin-top:3px;font-family:"Space Mono"}
  .opt:active{transform:scale(.97)}
  .opt[aria-selected="true"]{background:linear-gradient(180deg,rgba(232,198,106,.18),rgba(232,198,106,.06));
    border-color:var(--gold);color:var(--gold);box-shadow:0 0 0 1px var(--gold) inset}
  .opt[aria-selected="true"] small{color:var(--gold2)}

  /* gameover stats */
  .stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%;max-width:330px}
  .stat{background:rgba(0,0,0,.28);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:13px}
  .stat .v{font-family:"Space Grotesk";font-weight:700;font-size:26px;line-height:1}
  .stat .k{color:var(--muted);font-size:11px;margin-top:4px;letter-spacing:.05em}
  .ach-list{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;max-width:340px}
  .ach{background:rgba(232,198,106,.12);border:1px solid var(--gold2);color:var(--gold);
    font-size:11.5px;font-weight:600;padding:5px 10px;border-radius:999px}

  .scene-foot{position:absolute;bottom:8px;left:0;right:0;text-align:center;color:var(--muted);
    font-size:10.5px;font-family:"Space Mono";opacity:.6}
  @media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.05ms!important}}
  @media (max-height:680px){.pf-card{width:74px;height:104px}.pf-card .pip-c{font-size:34px}.pf-screen h1{font-size:28px}}
  /* 推弃特训选档 chips */
  .push-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
  .push-chips .opt{flex:0 1 auto;min-width:64px;padding:9px 14px}
  /* 学习路径:导览节点上的真实准确率 chip */
  .gd-acc{display:inline-block;margin-left:7px;font-family:"Space Mono";font-size:10px;font-weight:700;
    padding:2px 7px;border-radius:999px;background:rgba(0,0,0,.35);vertical-align:1px}
  /* 新手引导(首启一次) */
  .pf-intro-ov{position:fixed;inset:0;z-index:140;display:flex;align-items:center;justify-content:center;
    background:rgba(6,14,10,.72);backdrop-filter:blur(3px);padding:20px}
  .pf-intro-card{width:min(400px,94vw);background:var(--panel);border:1px solid var(--line);border-radius:16px;
    padding:22px 20px calc(18px + env(safe-area-inset-bottom));box-shadow:0 18px 50px rgba(0,0,0,.55)}
  .pf-intro-card h3{margin:0 0 10px;font-size:18px}
  .pf-intro-card p{margin:0;color:var(--muted);font-size:13.5px;line-height:1.65}
  .pf-intro-card p b{color:var(--ink)}
  .pf-intro-dots{display:flex;gap:6px;justify-content:center;margin:16px 0 14px}
  .pf-intro-dots i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.18)}
  .pf-intro-dots i.on{background:var(--gold)}
  .intro-btns{display:flex;gap:10px}
  .intro-btns .ib{flex:1;appearance:none;cursor:pointer;font-family:inherit;font-weight:700;font-size:14.5px;
    border-radius:11px;padding:12px 8px;border:1px solid var(--line);background:rgba(255,255,255,.05);color:var(--muted)}
  .intro-btns .ib.pri{background:linear-gradient(180deg,var(--gold),var(--gold2));border:0;color:#16110a}
  /* 矮屏（小手机 / 浏览器工具栏占位）逐级压缩牌桌，保证动作按钮始终可见 */
  @media (max-height:600px){.table{gap:10px}.felt{height:120px}.pf-card{width:68px;height:96px}.pf-card .pip-c{font-size:30px}.scene .who{margin-top:5px;font-size:11.5px}}
  @media (max-height:520px){.table{gap:6px;padding-top:4px}.felt{height:98px}.pf-card{width:60px;height:84px}.pf-card .pip-c{font-size:26px}.scene .badge{padding:5px 13px;font-size:13px}}

  /* ---- coach 诊断+计划 UI ---- */
  .coach-body{gap:12px}
  .pf-coach-card{width:100%;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:16px;margin-top:6px}
  .coach-lbl{color:var(--gold);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:10px;font-weight:700;font-family:"Space Grotesk"}
  .coach-verdict{font-family:"Space Grotesk";font-size:24px;font-weight:800;text-align:center;color:var(--gold)}
  .coach-verdict small{display:block;font-size:12px;color:var(--muted);font-weight:500;margin-top:4px}
  .pf-coach-note{font-size:10.5px;color:var(--muted);margin-top:8px;font-style:italic;line-height:1.5}
  .coach-bar-row{display:flex;align-items:center;gap:10px;margin:8px 0}
  .coach-bar-name{width:90px;font-size:12.5px;font-weight:600;flex:none;color:var(--ink)}
  .coach-bar-track{flex:1;height:9px;background:rgba(255,255,255,.05);border-radius:6px;overflow:hidden}
  .coach-bar-fill{height:100%;border-radius:6px;transition:width .4s ease}
  .coach-bar-pct{width:36px;text-align:right;font-size:11.5px;font-family:"Space Grotesk";font-variant-numeric:tabular-nums;color:var(--muted)}
  .coach-leak-item{display:flex;gap:11px;align-items:flex-start;padding:11px 0;border-top:1px solid var(--line)}
  .coach-leak-item:first-of-type{border-top:none;padding-top:0}
  .coach-leak-n{width:22px;height:22px;border-radius:50%;background:rgba(224,84,79,.18);color:var(--red);font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center;flex:none;margin-top:2px}
  .coach-leak-t{font-size:13px;font-weight:700}
  .coach-leak-d{font-size:11.5px;color:var(--muted);margin-top:2px}
  .coach-leak-ex{font-size:11px;color:var(--muted);margin-top:5px;padding-left:8px;border-left:2px solid var(--line);line-height:1.5}
  .coach-tag{display:inline-block;font-size:10px;font-weight:700;padding:2px 7px;border-radius:99px;background:rgba(224,84,79,.16);color:var(--red);margin-left:6px;vertical-align:middle}
  .coach-tag.g{background:rgba(74,184,120,.16);color:var(--green)}
  .coach-strong{display:flex;gap:8px;flex-wrap:wrap}
  .coach-chip{font-size:12px;font-weight:600;padding:6px 11px;border-radius:99px;background:rgba(74,184,120,.12);color:var(--green);border:1px solid rgba(74,184,120,.25)}
  .coach-plan-row{display:flex;align-items:center;gap:10px;font-size:12.5px;padding:7px 0;border-top:1px solid var(--line)}
  .coach-plan-row:first-child{border-top:none}
  .coach-plan-day{width:54px;font-family:"Space Grotesk";font-weight:700;color:var(--gold);flex:none;font-size:12px}
  .coach-big-btn{display:block;width:100%;text-align:center;margin-top:16px;padding:15px;border-radius:14px;
    background:linear-gradient(135deg,var(--gold),var(--gold2));color:#1a1208;
    font-family:"Space Grotesk";font-weight:800;font-size:15px;border:none;cursor:pointer}
  .coach-big-btn small{font-weight:600;opacity:.7;font-size:11px;display:block;margin-top:2px}
  .coach-big-btn:active{transform:scale(.98)}
  .coach-big-btn.ghost{background:transparent;border:1px solid var(--gold);color:var(--gold);margin-top:10px;font-size:13px;padding:12px}
  .coach-q{margin-bottom:18px}
  .coach-q-title{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:8px}
  .coach-chips{display:flex;flex-wrap:wrap;gap:7px}
  .coach-opt{appearance:none;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;
    color:var(--ink);background:rgba(0,0,0,.28);border:1px solid rgba(255,255,255,.1);border-radius:999px;
    padding:7px 13px;transition:.15s}
  .coach-opt.sel{background:rgba(232,198,106,.16);border-color:var(--gold);color:var(--gold)}
  /* day card */
  .coach-day-hd{display:flex;justify-content:space-between;align-items:flex-start}
  .coach-streak{font-size:13px;font-weight:700;color:var(--gold)}
  .coach-theme{font-family:"Space Grotesk";font-size:21px;font-weight:800;margin:4px 0 2px}
  .coach-seg{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--line)}
  .coach-seg:last-child{border-bottom:none}
  .coach-seg-ic{width:40px;height:40px;border-radius:11px;background:rgba(232,198,106,.12);display:flex;align-items:center;justify-content:center;font-size:20px;flex:none}
  .coach-seg-t{font-size:14px;font-weight:700}
  .coach-seg-s{font-size:11.5px;color:var(--muted)}
  .coach-prog{height:7px;background:rgba(255,255,255,.05);border-radius:5px;overflow:hidden;margin:14px 0 4px}
  .coach-prog-bar{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--green));border-radius:5px;transition:width .4s ease}
  .coach-prog-txt{font-size:11px;color:var(--muted);text-align:right}
  .coach-diag-prog{font-size:12px;color:var(--muted);text-align:center;letter-spacing:.08em;margin-bottom:8px}
  .coach-scene-lbl{font-size:11px;color:var(--gold);font-weight:700;text-transform:uppercase;letter-spacing:1px;text-align:center;margin-bottom:6px}
  .coach-reset-link{display:block;text-align:center;font-size:11.5px;color:var(--muted);text-decoration:underline;cursor:pointer;margin-top:12px;background:none;border:none;font-family:inherit}

/* PF 模块容器局部化（Task 9）:PF 原来把防误选/防双击缩放挂在 body 上,这里收进模块根;
 * .pf-screen 是 position:absolute;inset:0 —— #mod-preflop 必须是定位上下文,屏才不逃逸到壳外 */
#mod-preflop{position:relative;touch-action:manipulation;user-select:none;-webkit-user-select:none;}

/* 训练屏 UX(Task 9 5b):压缩 HUD 与位置标签间的垂直空白(原 .table 靠 justify-content:center
 * 在整屏 flex 里居中,进壳后上方留出大片空白) + 顶部细进度条(金色系,x/20,renderHUD 驱动) */
#mod-preflop .table{justify-content:flex-start;gap:14px;padding-top:10px}
.pf-progress{height:3px;margin:0 16px;border-radius:2px;background:rgba(232,198,106,.14);overflow:hidden}
.pf-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--gold),var(--gold2));border-radius:2px;transition:width .25s ease}

/* PO 模块容器局部化（Task 10）:PO 源无 body 级 touch-action/user-select 规则(那是 PF 的),
 * 这里只需定位上下文——#paywall 等 fixed 弹层不受影响,但未来任何 absolute 屏不逃逸到壳外 */
#mod-postflop{position:relative}

/* PO 答题/反馈屏吸底（Task 10 5b）:原版选项/CTA 跟内容流,27 题每题都要够屏幕中上部。
 * 屏容器撑满可视高(100dvh − 壳 topbar≈60 − main 上 padding 12 − tabbar 区≈80,留余量取 164),
 * 选项区/「下一题」CTA 经 margin-top:auto 锚到底部(壳 tabbar 上方)。
 * .actbar 原是 position:fixed 全屏吸底(z-index:20),进壳后会被壳 tabbar(z-index:80)盖住 ——
 * 一并改为流内吸底,负 margin 抵掉 .screen 左右 padding 保持通栏渐变。 */
#mod-postflop .drill-screen,
#mod-postflop .feedback-screen{
  display:flex;flex-direction:column;
  min-height:calc(100vh - 164px);
  min-height:calc(100dvh - 164px);
}
#mod-postflop .drill-screen .choice-grid{margin-top:auto}
#mod-postflop .feedback-screen>.btn-stack{margin-top:auto}
/* PO 源 .actbar 的 fixed 基准规则已删(见上方 PO 段注释),这里是唯一的 .actbar 容器规则:
 * margin-top:auto 吸底,负 margin 抵掉 .screen 左右 padding 保持通栏渐变 */
#mod-postflop .actbar{
  margin:auto -16px 0;
  padding:26px 16px calc(4px + env(safe-area-inset-bottom));
  background:linear-gradient(180deg,transparent,rgba(10,32,26,.92) 30%,#0a201a 70%);
}

/* PO drill 顶部细进度条（Task 10 5b,参照 PF .pf-progress;renderDrill 内联宽度驱动） */
.po-progress{height:3px;margin:2px 0 8px;border-radius:2px;background:rgba(232,198,106,.14);overflow:hidden}
.po-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--gold),var(--gold2));border-radius:2px;transition:width .25s ease}

/* ==== shell ==== */
/* App chrome that neither source repo had: top bar + bottom tabbar + Home screen cards.
 * Reuses PO's design tokens (--panel/--line/--gold/--ink/--muted/--card-r) so it looks native
 * next to both embedded modules instead of a third, mismatched visual language. */

.hide { display: none; }

#app { position: relative; }

main {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 12px 16px calc(64px + env(safe-area-inset-bottom) + 16px);
}

#topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 14px 16px 8px;
}

/* btn-home + streak 火苗徽标分组:同一个左侧簇,靠 #topbar 自身的 space-between 跟右边的
   语言选择器分两端——btn-home 在 Home 屏是 .hide(display:none),分组保证徽标不会因为
   btn-home 消失而在 3 元素的 space-between 布局里跳位置(见 js/app-boot.js syncChrome())。 */
.topbar-left { display: flex; align-items: center; gap: 8px; min-width: 0; }
.topbar-streak {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: .82rem; font-weight: 700; color: var(--gold);
}
.tb-flame { font-size: .92em; line-height: 1; }
.tb-days { line-height: 1; }
/* streak 火苗统一图标源(core/icons.js flameIconHtml())的尺寸规则:svg 本身不带 width/
   height 属性,靠 1em 跟随各消费点(.tb-flame/.st-streak-ic/.st-flame/.hd-flame)自己的
   font-size 缩放,行为等同此前内联的 🔥 字符——一条规则覆盖全部四个消费点,不必每处各写
   一遍。vertical-align 微调让 SVG 视觉基线贴近同行文字,不比原 emoji 字符明显偏高/偏低。 */
.icon-flame { width: 1em; height: 1em; vertical-align: -0.14em; fill: currentColor; }
/* M4.5 Task R3：挑战模式图标(core/icons.js boltIconHtml())，同 .icon-flame 一套缩放规则。 */
.icon-bolt { width: 1em; height: 1em; vertical-align: -0.14em; fill: currentColor; }

.ghost {
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--gold);
  font-family: inherit;
  font-weight: 600;
  font-size: .85rem;
  cursor: pointer;
  padding: 4px 2px;
}

#lang-switch { display: flex; align-items: center; gap: 8px; }

/* Shell's generic clickable panel (Home/Review/Stats tiles). Named .tile, not .card:
 * bare .card is already spoken for — it's core/table.js's canonical playing-card component
 * (ported straight off PO's .card/.face/.back/.rk/.pip-c, mini/mid/sm/flip modifiers and all),
 * so a second, unrelated .card here would silently corrupt any rendered table. */
.tile {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 16px;
  margin-bottom: 12px;
  cursor: pointer;
  font-weight: 700;
  color: var(--ink);
  transition: transform .14s ease, border-color .18s;
}
.tile:hover { border-color: var(--gold); }
.tile:active { transform: translateY(1px) scale(.99); }
.tile .cont-detail {
  display: block;
  margin-top: 4px;
  font-weight: 400;
  font-size: .82rem;
  color: var(--muted);
}
/* Card icons (design doc: suit glyphs / plain CSS / inline SVG — no emoji). Plain black-suit
 * glyphs read as near-invisible ink on this dark panel (card.js's .blk is #1d2330, meant for
 * white card faces), so these get their own light-on-dark palette instead of reusing .red/.blk. */
.tile-ic { display: inline-block; width: 1.1em; margin-right: 8px; font-size: 1.15em; text-align: center; color: var(--ink); vertical-align: -2px; }
.tile-ic-red { color: #e2626b; }
.tile-ic-gold { color: var(--gold); }
/* Hero tile: Full-Street Play(M2 交付)。.disabled = 视觉弱化 + 不可点(pointer-events 掐掉
 * hover/active 反馈,cursor 兜底给触屏外的边缘情形)。 */
.tile-hero { padding: 22px 16px; font-size: 1.02rem; }
.tile.disabled { opacity: .45; cursor: default; pointer-events: none; }
/* Go Pro 卡:金色系(--gold token),与 PO .pro-card 同语汇但保持 tile 形制 */
.tile-gold {
  background: linear-gradient(180deg, rgba(232,198,106,.16), rgba(232,198,106,.05));
  border-color: var(--gold2);
  color: var(--gold);
}
.tile-gold:hover { border-color: var(--gold); }
/* M4.5 Task R3：挑战入口卡——独立于上面三张训练卡的配色（不用 --gold 免得跟 Go Pro 混淆，
   不用任何一张训练卡的配色免得看起来像"第四个训练模块"），提醒这是节奏不同的街机化玩法。 */
.tile-challenge {
  background: linear-gradient(180deg, rgba(126,140,255,.14), rgba(126,140,255,.04));
  border-color: rgba(126,140,255,.35); color: #b9c2ff;
}
.tile-challenge:hover { border-color: #7e8cff; }
.tile-challenge .tile-ic { color: #9aa6ff; }
/* M4 Task G5：Home「解从哪来」入口——刻意做成纯文字链接而非 .tile，不与上面的功能卡/
   Go Pro 竞争视觉权重（"非首屏黄金位"）。 */
.home-about-link {
  display: block; width: 100%; margin: 4px 0 0; padding: 10px 0;
  appearance: none; border: 0; background: transparent; cursor: pointer;
  font-family: inherit; font-size: .78rem; font-weight: 600; color: var(--muted);
  text-align: center; text-decoration: underline;
}
/* M4 Task G6：极简设置区（触感/快刷开关），同 .home-about-link 一样是 Home 底部弱化区,
   不是 tile,不与功能卡/Go Pro 竞争视觉权重。
   质量修复:两开关 + 各两行说明文字展开渲染比任何训练卡都高、喧宾夺主——.settings-block
   现在是 <details>(js/shell/settings.js blockHtml()),默认折叠、标题一行即 <summary>,
   点开才露出下面的开关/说明。 */
.settings-block { margin: 14px 0 4px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 12px; }
.settings-title {
  margin: 0; font-size: .78rem; font-weight: 700; color: var(--muted); text-transform: uppercase;
  letter-spacing: .02em; cursor: pointer; list-style: none;
}
.settings-title::-webkit-details-marker { display: none; }
.settings-title::before { content: '▸'; display: inline-block; width: 1em; }
.settings-block[open] .settings-title::before { content: '▾'; }
.settings-row { display: flex; align-items: center; gap: 8px; font-size: .88rem; color: var(--ink); cursor: pointer; margin-top: 8px; }
.settings-row input { accent-color: var(--gold); }
.settings-hint { margin: 2px 0 0; font-size: .74rem; color: var(--muted); }

#tabbar {
  display: flex;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  max-width: 520px;
  margin: 0 auto;
  gap: 2px;
  background: var(--panel);
  border-top: 1px solid var(--line);
  padding-bottom: env(safe-area-inset-bottom);
  z-index: 80;
}
#tabbar button {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--muted);
  font-family: inherit;
  font-weight: 700;
  font-size: .82rem;
  padding: 12px 4px calc(10px + env(safe-area-inset-bottom, 0px) * 0);
  cursor: pointer;
}
#tabbar button.active { color: var(--gold); }

/* ==== fullstreet ==== */
/* M2 全街实战:fs- 前缀,复用既有 token(--best/--gold/--wrong/--muted/--panel/--line)
 * 与 PO 的 .act-btn / .a-* / .fb-chip / .action-grid / .btn 语汇。
 * ⚠ 注释里列类名时 `*` 后面务必留空格:".a-*"+"/" 会拼成注释结束符,
 *   把注释提前闭合、紧随其后的第一条规则被当成非法选择器整条丢弃(已踩坑三次)。
 * 布局同 PO 吸底方案:屏容器撑满可视高,动作条/反馈条经 margin-top:auto 锚到底部
 * (壳 tabbar 上方拇指区),负 margin 抵掉 main 左右 padding 保持通栏。
 * M4 死区修复:街屏(renderStreet())的牌桌+提示行整块包了 .fs-mid(js/fullstreet/app.js),
 * 靠 .fs-mid 自己的上下 auto margin 在 .fs-screen 剩余空间里居中,.fs-actbar 相应改回
 * margin-top:0(不再跟 .fs-mid 抢同一份 auto 空间)——此前动作条独占 margin-top:auto,
 * 内容顶对齐、空白整段堆在提示行与动作条之间(实测 191px);现在同一份空白由 .fs-mid
 * 的上下 auto margin 对半分,动作条仍贴 .fs-screen 底(可用空间不够时 auto margin 退化
 * 成 0,行为同修复前,不会比原来更容易溢出)。反馈屏(.fs-fb-screen/.fs-fb)不在本次范围,
 * 沿用原顶对齐布局。 */
#mod-fullstreet { position: relative; }
.fs-screen {
  display: flex; flex-direction: column;
  min-height: calc(100vh - 164px);
  min-height: calc(100dvh - 164px);
  animation: fadeIn .2s ease;
}
.fs-mid { margin: auto 0; }
.fs-eyebrow {
  margin: 0 0 6px; font-size: .72rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em; color: var(--muted);
}
/* 街进度四格 PRE/FLOP/TURN/RIVER */
.fs-progress { display: flex; gap: 6px; margin: 0 0 10px; }
.fs-progress span {
  flex: 1; text-align: center; font-size: .6rem; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--muted);
  padding: 5px 0; border-radius: 8px; background: rgba(255,255,255,.05);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fs-progress span.on { background: rgba(232,198,106,.18); color: var(--gold); }
.fs-progress span.done { background: rgba(52,176,116,.12); color: var(--best); }
/* 无障碍双编码(M3 U9 Part1排查补):四格街进度此前只靠底色/字色区分「已过/当前/未到」三态
   （四格文字本身都是固定街名,不随状态变化）——用 ::before 伪元素加字形前缀(灰度可辨),
   不改 JS 侧 textContent(避免动 test/ui-smoke.js 里对 .fs-progress span.on 的精确文本断言;
   伪元素内容不计入 textContent,零回归风险)。 */
.fs-progress span.done::before { content: "✓ "; }
.fs-progress span.on::before { content: "▸ "; }
.fs-table { margin: 2px 0 4px; }
.fs-villain-act { margin: 0 0 4px; text-align: center; font-size: .82rem; font-weight: 600; }
.fs-villain-note { margin: 0 0 6px; text-align: center; font-size: .68rem; color: var(--muted); }
/* 动作条吸底(拇指区)。margin-top 由 auto 改回 0:居中的是上面 .fs-mid,不是这里——
   两处都用 auto 会把可用空间摊成三份(.fs-mid 上/下各一份 + 这里一份),挤压/上方比下方
   空隙小一倍,不是「均衡」。 */
.fs-actbar {
  margin: 0 -16px 0;
  padding: 26px 16px calc(4px + env(safe-area-inset-bottom));
  background: linear-gradient(180deg, transparent, rgba(10,32,26,.92) 30%, #0a201a 70%);
}
.fs-actbar .action-grid { flex-direction: row; }
.fs-actbar .act-btn { flex: 1; min-height: var(--btn-h); }
/* 反馈条:verdict 色条 + 讲解,整屏可点继续 */
.fs-fb-screen { cursor: pointer; }
.fs-fb {
  margin: auto -16px 0;
  padding: 12px 16px calc(10px + env(safe-area-inset-bottom));
  background: rgba(10,32,26,.95); border-top: 1px solid var(--line);
}
.fs-verdict {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px 12px; border-radius: 10px; border-left: 4px solid var(--muted);
  background: rgba(255,255,255,.05); margin-bottom: 8px;
}
.fs-verdict-head { font-weight: 700; font-size: .95rem; }
.fs-verdict.best { border-left-color: var(--best); }
.fs-verdict.best .fs-verdict-head { color: var(--best); }
.fs-verdict.ok { border-left-color: var(--gold); }
.fs-verdict.ok .fs-verdict-head { color: var(--gold); }
.fs-verdict.wrong { border-left-color: var(--wrong); }
.fs-verdict.wrong .fs-verdict-head { color: var(--wrong); }
/* 无障碍双编码(M3 U9 Part1排查补):verdict 三态文字本身虽已不同("Best play"/"Fine.../
   "A mistake here"),但小屏一眼扫色条时仍主要靠色块——加跟复盘时间线(.fs-mark,同一套
   ✓/~/✗)一致的字形前缀。用 ::before 而非 DOM 拼接:不改 JS 侧 textContent,不动
   test/ui-smoke.js 里对 .fs-verdict-head 精确文本(zhVerdicts 数组)的既有断言。 */
.fs-verdict.best .fs-verdict-head::before { content: "✓ "; }
.fs-verdict.ok .fs-verdict-head::before { content: "~ "; }
.fs-verdict.wrong .fs-verdict-head::before { content: "✗ "; }
/* M4 Task G2 Step1：规范四档（js/core/grade.js）只加字段不改字段——verdict 仍是三态
   best/ok/wrong，class 与文案原样不动（保护上面 test/ui-smoke.js 的 zhVerdicts 精确文本
   断言）；wrong 里进一步用 tier（fs-tier-bigBlunder）区分"失误"与"严重失误"，三类选择器
   叠 class 让它比单 .wrong 规则更具体，颜色/字形都升级，不用管样式表里的先后顺序。 */
.fs-verdict.wrong.fs-tier-bigBlunder { border-left-color: var(--blunder); }
.fs-verdict.wrong.fs-tier-bigBlunder .fs-verdict-head { color: var(--blunder); }
.fs-verdict.wrong.fs-tier-bigBlunder .fs-verdict-head::before { content: "✗✗ "; }
.fs-ref { margin: 0 0 6px; font-size: .82rem; color: var(--muted); }
/* M4 Task G4：剥削注解——视觉刻意弱化（比 .fs-ref 更淡），紧跟参考行动之下、别喧宾夺主。 */
.fs-exploit { margin: 0 0 6px; font-size: .76rem; color: var(--muted); line-height: 1.5; }
.fs-exploit i { font-style: normal; opacity: .75; margin-right: 2px; }
.fs-note { margin: 0 0 6px; font-size: .76rem; color: var(--gold); }
.fs-explain { margin: 0 0 6px; font-size: .88rem; line-height: 1.5; }
.fs-continue {
  margin: 8px 0 0; text-align: center; font-size: .72rem; color: var(--muted);
  animation: fadeIn 1s ease;
}
/* 复盘屏 */
.fs-grade-wrap { text-align: center; margin: 6px 0 14px; }
.fs-grade { font-size: 3.4rem; font-weight: 800; line-height: 1; }
.fs-grade-A { color: var(--best); }
.fs-grade-B { color: var(--gold); }
.fs-grade-C { color: var(--muted); }
.fs-grade-lbl { margin: 4px 0 8px; font-size: .72rem; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); }
.fs-hand { display: flex; justify-content: center; gap: 4px; }
.fs-tl { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.fs-tl-street {
  background: rgba(0,0,0,.22); border: 1px solid var(--line);
  border-radius: 12px; padding: 10px 12px;
}
.fs-tl-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.fs-tl-name { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--gold); }
.fs-tl-cards { display: flex; gap: 3px; }
.fs-tl-entry { border-top: 1px dashed var(--line); padding-top: 6px; margin-top: 6px; }
.fs-tl-entry:first-of-type { border-top: 0; padding-top: 0; margin-top: 0; }
.fs-tl-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.fs-mark { font-weight: 800; }
.fs-mark.best { color: var(--best); }
.fs-mark.ok { color: var(--gold); }
.fs-mark.wrong { color: var(--wrong); }
/* M4 Task G2 Step1：复盘时间线 .fs-mark 的字形内容直接用 Grade.glyph(tier) 拼（app.js
   entryHtml），✓/~/✗ 三态字形与旧 VERDICT_MARK 完全一致，只多一档 ✗✗；这里补 bigBlunder
   的颜色覆写（同上面 .fs-verdict 的叠 class 手法）。 */
.fs-mark.wrong.fs-tier-bigBlunder { color: var(--blunder); }
.fs-tl-you, .fs-tl-ref { display: inline-flex; align-items: center; gap: 4px; font-size: .72rem; color: var(--muted); }
.fs-tl-ctx { margin: 4px 0 0; font-size: .7rem; color: var(--muted); }
.fs-tl-villain { margin: 3px 0 0; font-size: .74rem; color: var(--muted); }
.fs-tl-explain { margin: 3px 0 0; font-size: .78rem; line-height: 1.45; }
/* F5 真解参考小卡（复盘时间线内,金色系=confidence 徽标语义） */
.fs-solved {
  margin: 6px 0 0; padding: 8px 10px;
  border: 1px solid rgba(232,198,106,.35); border-radius: 10px;
  background: rgba(232,198,106,.06);
}
.fs-solved-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.fs-solved-title { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--gold); }
.fs-solved-badge {
  font-size: .62rem; font-weight: 700; padding: 2px 7px; border-radius: 999px;
  background: rgba(232,198,106,.18); color: var(--gold); white-space: nowrap;
}
.fs-solved-freq { margin: 4px 0 0; font-size: .78rem; font-weight: 600; }
.fs-solved-note { margin: 3px 0 0; font-size: .72rem; color: var(--muted); line-height: 1.45; }
.fs-solved-src { margin: 3px 0 0; font-size: .64rem; color: var(--muted); }

/* ==== M3 U5: 全街免费层软墙(native 免费档每日耗尽后拦截,js/fullstreet/app.js renderSoftWall) ====
 * 三件套竖向排布,居中——成绩单(今日成绩单卡)→ 倒计时 → CTA 大按钮 → 信任行小字。
 * 复用 .btn/.btn.primary 语汇(同复盘屏「再来一手」按钮),不新开按钮样式体系。 */
.fs-wall { align-items: center; text-align: center; justify-content: center; gap: 4px; }
.fs-wall-receipt {
  width: 100%; margin: 8px 0 4px; padding: 14px 16px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
}
.fs-wall-total { margin: 0 0 4px; font-size: .92rem; font-weight: 700; }
.fs-wall-today { margin: 0; font-size: .8rem; color: var(--muted); }
.fs-wall-countdown {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  margin: 10px 0 16px;
}
.fs-wall-countdown-lbl { font-size: .68rem; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); }
.fs-wall-countdown-val { font-size: 1.6rem; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--gold); }
.fs-wall-cta { width: 100%; max-width: 320px; }
.fs-wall-trust { margin: 10px 0 0; font-size: .74rem; color: var(--muted); line-height: 1.5; max-width: 340px; }

/* ==== M3 U2: Home「每日一题」卡 + 弹层单题流 ====
 * hd- 前缀,复用既有 token 与 .act-btn / .a-* / .fb-chip / .action-grid / .spot-mount 语汇
 * (同 fullstreet 段的做法)。层级表(计划文档):tabbar 80 < 弹层 150 < paywall 200(M3 U6 落真,
 * 见文件尾 .pw-overlay 段)。 */
.hd-tile { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.hd-status { font-size: .82rem; color: var(--muted); font-weight: 600; }
.hd-flames { display: flex; gap: 3px; width: 100%; margin-top: 2px; }
.hd-flame { flex: 1; text-align: center; font-size: .78rem; opacity: .35; }
.hd-flame.on { opacity: 1; }
.hd-makeup {
  width: 100%; margin-top: 2px; font-size: .78rem; font-weight: 700; color: var(--gold);
}
.hd-makeup:hover { text-decoration: underline; }

.hd-modal {
  position: fixed; inset: 0; z-index: 150;
  display: flex; align-items: flex-end; justify-content: center;
  background: rgba(6,12,10,.72);
  padding: 0 0 env(safe-area-inset-bottom);
}
.hd-modal.hide { display: none; }
.hd-sheet {
  position: relative; width: 100%; max-width: 520px; max-height: 88vh; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-top-left-radius: 20px;
  border-top-right-radius: 20px; padding: 20px 16px calc(18px + env(safe-area-inset-bottom));
  animation: fadeIn .16s ease;
}
.hd-x {
  position: absolute; top: 10px; right: 10px; width: 30px; height: 30px; border-radius: 50%;
  border: 0; background: rgba(255,255,255,.06); color: var(--muted); font-size: .9rem;
  cursor: pointer; line-height: 30px; padding: 0;
}
.hd-stem { margin: 0 30px 10px 0; font-weight: 700; line-height: 1.4; }
.hd-actbar.action-grid { flex-direction: row; margin-top: 6px; }
.hd-actbar .act-btn { flex: 1; min-height: var(--btn-h); }
.hd-hint { margin: 10px 0 0; font-size: .72rem; color: var(--muted); text-align: center; }
.hd-fb { cursor: pointer; }
.hd-verdict { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.hd-verdict-head { font-weight: 800; font-size: 1.05rem; }
.hd-verdict.ok .hd-verdict-head { color: var(--best); }
.hd-verdict.wrong .hd-verdict-head { color: var(--wrong); }
/* 无障碍双编码(M3 U9 Part1排查补):每日一题弹层的对/错反馈同 .fs-verdict 一样只靠
   .ok/.wrong 文字颜色区分——加 ✓/✗ 字形前缀(::before,不动 DOM/textContent)。 */
.hd-verdict.ok .hd-verdict-head::before { content: "✓ "; }
.hd-verdict.wrong .hd-verdict-head::before { content: "✗ "; }
.hd-correct { margin: 0 0 8px; font-size: .85rem; color: var(--muted); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.hd-explain { margin: 0 0 10px; line-height: 1.5; font-size: .9rem; }
.hd-done-title { margin: 0 0 4px; font-weight: 700; color: var(--gold); }
.hd-tapclose { margin: 0; font-size: .72rem; color: var(--muted); text-align: center; }

/* ==== M3 U3: 统计聚合屏(#mod-stats,js/shell/stats.js) ====
 * st- 前缀,复用既有 token(--panel/--line/--gold/--muted/--best)与 .tile 的圆角/边框语汇,
 * 但用独立类名(不是 .tile)——这屏内容是分区块(顶部条/badges 行/三张卡),不是一叠可点面板。 */
.st-top {
  display: flex; flex-direction: column; gap: 8px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 14px 16px; margin-bottom: 12px;
}
.st-streak { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; }
.st-streak-ic { font-size: 1.1rem; }
.st-streak-txt { font-weight: 800; font-size: 1.02rem; color: var(--gold); }
.st-streak-lbl { font-size: .74rem; color: var(--muted); }
.st-freeze { margin-left: auto; font-size: .78rem; color: var(--muted); white-space: nowrap; }
.st-daily { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.st-daily-lbl { font-size: .74rem; color: var(--muted); font-weight: 600; }
.st-flames { display: flex; gap: 3px; flex: 1; min-width: 90px; }
.st-flame { flex: 1; text-align: center; font-size: .78rem; opacity: .35; }
.st-flame.on { opacity: 1; }

/* M4.5 Task R2：6 级训练段位徽章（js/shell/stats.js skillBadgeHtml()）。--rank-c 由行内
   style 按当前段位切换成 --rank-1..6 之一（js/core/skill.js Skill.rankToken()）；圆形字形
   （罗马数字 I-VI）与文字标签双编码，不靠颜色单独传达段位（M3 无障碍双编码规矩）。 */
.st-skill {
  display: flex; align-items: center; gap: 10px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 10px 16px; margin-bottom: 12px;
}
.st-skill-glyph {
  display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: 30px; height: 30px; border-radius: 50%;
  font-weight: 800; font-size: .8rem; color: #0e1a14;
  background: var(--rank-c, var(--muted));
}
.st-skill-txt { display: flex; flex-direction: column; gap: 1px; }
.st-skill-kicker {
  font-size: .72rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: var(--muted);
}
.st-skill-lbl { font-weight: 800; font-size: .94rem; }
.st-skill-sub { font-size: .74rem; color: var(--muted); margin-left: auto; white-space: nowrap; }

.st-badges {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin-bottom: 12px; font-size: .78rem;
}
.st-badges-lbl { color: var(--muted); font-weight: 600; margin-right: 2px; }
.st-badge {
  padding: 3px 9px; border-radius: 999px; font-weight: 700;
  background: rgba(232,198,106,.14); color: var(--gold); border: 1px solid rgba(232,198,106,.3);
}

/* M4 Task G2 Step4：三模块规范四档分布条（复用 .st-card-title/.st-card-body/.st-empty/
   .st-card-cta 的字号/配色基座，不重造）。 */
.st-tiers {
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 14px 16px; margin-bottom: 12px;
}
.st-tiers.st-tiers-empty { cursor: pointer; transition: border-color .18s; }
.st-tiers.st-tiers-empty:hover { border-color: var(--gold); }
.st-tier-bar {
  display: flex; height: 10px; border-radius: 999px; overflow: hidden;
  background: rgba(255,255,255,.06); margin: 4px 0 10px;
}
.st-tier-seg { height: 100%; }
/* 无障碍双编码：色条只是摘要，下面图例的字形(✓/~/✗/✗✗)+文字标签+数字才是信息真值，
   不靠颜色单独传达档位（同项目 streak/freeze 的形状+颜色双编码惯例）。 */
.st-tier-legend { display: flex; flex-wrap: wrap; gap: 10px; font-size: .78rem; color: var(--muted); }
.st-tier-leg { display: inline-flex; align-items: center; gap: 5px; }
.st-tier-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }

.st-cards { display: flex; flex-direction: column; gap: 12px; }
.st-card {
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 14px 16px; cursor: pointer; transition: border-color .18s;
}
.st-card:hover { border-color: var(--gold); }
.st-card-title {
  margin: 0 0 4px; font-size: .78rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .06em; color: var(--muted);
}
.st-card-body { margin: 0 0 8px; font-size: .92rem; font-weight: 600; }
.st-card-body.st-empty { font-weight: 400; color: var(--muted); }
.st-card-cta { font-size: .8rem; font-weight: 700; color: var(--gold); }

/* ==== M3 U6: 统一付费墙 + exit offer(#paywall-root,js/shell/paywall.js) ====
 * pw- 前缀,复用 .btn/.btn.primary/.btn.secondary/.btn.outline 基座(不重造按钮视觉,同
 * .fs-wall-cta 的做法)。层级表(计划文档,daily-card 段的注释同步更新):
 * tabbar 80 < 弹层(每日一题) 150 < paywall 200 < feedback(表单) 210。 */
.pw-overlay {
  position: fixed; inset: 0; z-index: 200;
  display: flex; align-items: center; justify-content: center;
  background: rgba(6,12,10,.72); padding: 20px;
}
.pw-overlay.hide { display: none; }
.pw-card {
  width: 100%; max-width: 380px; max-height: 90vh; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-radius: 18px;
  padding: 22px 20px; box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
.pw-title { font-weight: 800; font-size: 1.3rem; color: var(--gold); text-align: center; }
.pw-why { text-align: center; color: var(--muted); font-size: .82rem; margin: 4px 0 14px; }
.pw-pitch { display: flex; flex-direction: column; gap: 6px; font-size: .86rem; margin-bottom: 10px; }
.pw-trust { margin: 0 0 4px; font-size: .8rem; font-weight: 700; color: var(--best); }
.pw-compare { margin: 0 0 14px; font-size: .76rem; color: var(--muted); }
/* M4 Task G5：paywall 内「解从哪来」链接，对冲「便宜=浅」质疑——放在权益列表之后、档位
   按钮之前，购买决策前顺路可查。 */
.pw-trust-link {
  display: block; width: 100%; margin: -6px 0 12px; padding: 4px 0;
  appearance: none; border: 0; background: transparent; cursor: pointer;
  font-family: inherit; font-size: .76rem; font-weight: 600; color: var(--gold);
  text-align: left; text-decoration: underline;
}
.pw-tiers { display: flex; flex-direction: column; gap: 9px; }
.pw-tier {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: 1px;
  min-height: 52px;
}
.pw-tier-price { font-weight: 800; font-size: 1rem; }
.pw-tier-note { font-weight: 500; font-size: .72rem; opacity: .78; }
/* 3.1.2(c)：免费试用披露必须是计费金额下方的小字附注，不能做成同级或更大的字号（见
   js/core/i18n.js pwYearTrial/pwYearTrialNote 的历史注释——曾做大字被拒）。字号故意与
   .pw-tier-note 一致（都是"次要小字"），不单独放大。 */
.pw-tier-trial { font-weight: 500; font-size: .68rem; opacity: .78; text-align: center; }
.pw-tier.pw-featured { border: 2px solid var(--gold); }
.pw-badge {
  position: absolute; top: -10px; right: 10px;
  background: var(--panel); border: 1px solid var(--gold); color: var(--gold);
  font-size: .64rem; font-weight: 800; padding: 2px 8px; border-radius: 999px;
}
.pw-comingsoon { margin: 6px 0 0; font-size: .72rem; text-align: center; color: var(--muted); }
.pw-restore {
  appearance: none; border: 0; cursor: pointer; font-family: inherit; font-size: .78rem;
  color: var(--muted); background: transparent; width: 100%; padding: 10px 0 0; text-decoration: underline;
}
.pw-maybe { margin-top: 10px; }
.pw-webcta {
  text-align: center; font-weight: 700; color: var(--gold); border: 1px solid var(--gold2);
  border-radius: 12px; padding: 12px; margin-top: 4px;
}
.pw-legal { text-align: center; font-size: .68rem; color: var(--muted); margin-top: 10px; }
.pw-legal a { color: var(--muted); }
.pw-msg { text-align: center; color: var(--wrong,#e0544f); font-size: .74rem; margin: 8px 0 0; min-height: 1em; }
.pw-exit-card .pw-exit-cta { width: 100%; margin-top: 4px; }
.pw-exit-close {
  appearance: none; border: 0; cursor: pointer; font-family: inherit; font-size: .8rem;
  color: var(--muted); background: transparent; width: 100%; padding: 10px 0 0;
}

/* ==== M3 U7: 首启 onboarding(#onboard-root,js/shell/onboard.js) ====
 * ob- 前缀,复用 .btn/.btn.primary/.btn.secondary 基座 + .act-btn / .a-* / .fb-chip / .action-grid /
 * .spot-mount 语汇(同 hd-/pw- 两段的做法,不重造按钮与牌桌视觉)。层级表(计划文档,随本段
 * 更新为最终版):tabbar 80 < 弹层(每日一题) 150 < 本层(onboarding 首启) 190 <
 * paywall 200 < feedback(反馈表单) 210 —— onboarding 特意选一个低于 paywall 的值:
 * 它只在 Router.go('home') 之后、shared.onboard 缺席时展示一次,理论上不会与 paywall
 * 同屏,但仍留出「onboarding 之下、paywall 之上」的语义边界,不占用 200 那个数字。 */
.ob-overlay {
  position: fixed; inset: 0; z-index: 190;
  display: flex; align-items: center; justify-content: center;
  background: rgba(6,12,10,.72); padding: 20px;
}
.ob-overlay.hide { display: none; }
.ob-card {
  position: relative; width: 100%; max-width: 400px; max-height: 90vh; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-radius: 18px;
  padding: 22px 20px; box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
.ob-skip {
  position: absolute; top: 14px; right: 16px; appearance: none; border: 0; cursor: pointer;
  font-family: inherit; font-size: .76rem; font-weight: 700; color: var(--muted); background: transparent;
}
/* 右 margin 给 .ob-skip(绝对定位,浮在右上角)留净空——34px 只够英文"Skip"，德语
   "Überspringen"/日语"スキップ"更宽，M5 视觉验收发现日语标题首行会贴到跳过按钮上；
   .ob-progress/.ob-survey-title 两处已经用 40px，这里再放宽到 60px 对齐同一套安全边距。 */
.ob-title { font-weight: 800; font-size: 1.2rem; color: var(--gold); text-align: center; margin: 6px 60px 0 0; }
.ob-pitch { margin: 10px 0 18px; font-size: .9rem; line-height: 1.55; text-align: center; }
.ob-cta { width: 100%; }
.ob-progress { margin: 6px 40px 8px 0; font-size: .74rem; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.ob-stem { margin: 0 0 10px; font-weight: 700; line-height: 1.4; }
.ob-actbar.action-grid { flex-direction: row; margin-top: 6px; }
.ob-actbar .act-btn { flex: 1; min-height: var(--btn-h); }
.ob-hint { margin: 10px 0 0; font-size: .72rem; color: var(--muted); text-align: center; }
.ob-fb { cursor: pointer; }
.ob-verdict { display: flex; align-items: center; gap: 10px; margin: 6px 0 8px; }
.ob-verdict-head { font-weight: 800; font-size: 1.05rem; }
.ob-verdict.ok .ob-verdict-head { color: var(--best); }
.ob-verdict.wrong .ob-verdict-head { color: var(--wrong); }
/* 无障碍双编码(M3 U9 Part1排查补):onboarding 体验题反馈同 daily-card 的 .hd-verdict 双胞胎
   （同一手法照抄,见 js/shell/onboard.js 头注释）——同款 ✓/✗ 字形前缀。 */
.ob-verdict.ok .ob-verdict-head::before { content: "✓ "; }
.ob-verdict.wrong .ob-verdict-head::before { content: "✗ "; }
.ob-correct { margin: 0 0 8px; font-size: .85rem; color: var(--muted); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ob-explain { margin: 0 0 10px; line-height: 1.5; font-size: .9rem; }
.ob-badge-toast {
  margin: 0 0 10px; padding: 8px 10px; border-radius: 10px; font-size: .82rem; font-weight: 700;
  color: var(--gold); background: rgba(232,198,106,.14); border: 1px solid rgba(232,198,106,.3);
}
.ob-tapclose { margin: 0; font-size: .72rem; color: var(--muted); text-align: center; }
.ob-survey-title { font-weight: 700; font-size: 1.05rem; line-height: 1.4; margin: 8px 40px 16px 0; }
.ob-survey-opts { display: flex; flex-direction: column; gap: 9px; }

/* ==== M4 Task G5: "解从哪来"信任页(#trust-root,js/shell/trust.js) ====
 * tr- 前缀,复用 .pw-overlay/.ob-overlay 的 fixed 遮罩手法与 .conf/.conf-precise/.conf-curated
 * 徽标语汇(不重造徽标视觉,同 PF pushfold 反馈已在用的那套)。z-index 210:高于 paywall(200),
 * 允许从 paywall 卡片内的链接叠一层打开(层级表见 .pw-overlay 段注释,该段"预留 210 给
 * feedback"的表格里这就是那个 210 的第一个真实占用者)。 */
.tr-overlay {
  position: fixed; inset: 0; z-index: 210;
  display: flex; align-items: center; justify-content: center;
  background: rgba(6,12,10,.78); padding: 16px;
}
.tr-overlay.hide { display: none; }
.tr-card {
  position: relative; width: 100%; max-width: 460px; max-height: 92vh; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-radius: 18px;
  padding: 24px 20px 20px; box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
.tr-close {
  position: absolute; top: 12px; right: 12px; width: 30px; height: 30px; border-radius: 50%;
  border: 0; background: rgba(255,255,255,.06); color: var(--muted); font-size: 1.1rem;
  cursor: pointer; line-height: 28px; padding: 0;
}
.tr-title { margin: 0 34px 6px 0; font-weight: 800; font-size: 1.25rem; color: var(--gold); }
.tr-intro { margin: 0 0 18px; font-size: .88rem; color: var(--muted); line-height: 1.55; }
.tr-section {
  border-top: 1px solid var(--line); padding-top: 14px; margin-top: 14px;
}
.tr-section:first-of-type { border-top: 0; padding-top: 0; margin-top: 0; }
.tr-section h3 {
  margin: 0 0 10px; font-size: 1.02rem; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.tr-sub { margin: 0 0 10px; }
.tr-sub h4 {
  margin: 0 0 3px; font-size: .74rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .05em; color: var(--muted);
}
.tr-sub p { margin: 0; font-size: .86rem; line-height: 1.55; }
.tr-datanote { margin: 4px 0 0; font-size: .7rem; color: var(--muted); font-variant-numeric: tabular-nums; }
.tr-bottom-close { width: 100%; margin-top: 18px; }
/* 来源徽标(sourceBadge()):点击可达本页(data-act="show-trust");本页内自身徽标不带这个
   data-act(sourceBadgeInline,已经在本页里,点了也无意义),故不加 cursor:pointer 到基座
   .conf(该 class 本身已有 cursor:help,两处含义不同但视觉共用同一枚小胶囊,足够) */
.tr-src-badge { cursor: pointer; }

/* ==== M4.5 Task R3: 挑战模式 Rush/Streak(#challenge-root,js/shell/challenge.js) ====
 * ch- 前缀,复用 .fs-screen/.fs-eyebrow(节奏化整屏)、.btn/.btn.primary/.btn.secondary/
 * .btn.outline(按钮基座)、.action-grid/.act-btn/.a-*(动作条)、.spot-mount(牌桌挂载点)
 * 语汇,不重造——挑战模式只是"同一套訓練 UI 换一种节奏包装"，视觉基座该跟练习屏一致，
 * 让用户一眼认出这是同一个 app，不是另开的小游戏皮肤。 */
.ch-screen { display: flex; flex-direction: column; animation: fadeIn .2s ease; }
.ch-eyebrow {
  margin: 0 0 4px; font-size: .72rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em; color: var(--muted);
}
.ch-note { margin: 0 0 16px; font-size: .78rem; color: var(--muted); }
.ch-card {
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 16px; margin-bottom: 12px;
}
.ch-card-title {
  margin: 0 0 6px; font-size: 1.05rem; display: flex; align-items: center; gap: 8px;
}
.ch-card-title .icon-bolt { color: #9aa6ff; }
.ch-card-desc { margin: 0 0 8px; font-size: .84rem; color: var(--muted); line-height: 1.5; }
.ch-card-stat { margin: 0 0 12px; font-size: .8rem; color: var(--ink); font-variant-numeric: tabular-nums; }
.ch-locked { margin: 0 0 8px; font-size: .78rem; color: var(--muted); }
.ch-card .btn { width: 100%; }
/* 进行中：顶部 HUD(倒计时+连击，或连胜数+跳过) + 退出按钮 */
.ch-hud {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  margin-bottom: 10px; font-variant-numeric: tabular-nums;
}
.ch-clock { font-size: 1.3rem; font-weight: 800; color: var(--gold); }
.ch-combo { font-size: .82rem; font-weight: 700; color: #9aa6ff; margin-left: 8px; }
.ch-streak { font-size: 1.05rem; font-weight: 800; color: var(--best); }
.ch-skip, .ch-quit {
  appearance: none; border: 1px solid var(--line); background: rgba(255,255,255,.05);
  color: var(--muted); border-radius: 8px; padding: 5px 10px; font-size: .74rem;
  font-weight: 700; cursor: pointer;
}
.ch-skip-used { font-size: .74rem; color: var(--muted); opacity: .6; }
.ch-actbar.action-grid { flex-direction: row; margin-top: 10px; }
/* 结算屏 */
.ch-result { text-align: center; padding-top: 12px; }
.ch-newbest {
  margin: 0 0 10px; font-weight: 800; color: var(--gold); font-size: .95rem;
  text-transform: uppercase; letter-spacing: .04em;
}
.ch-result-line { margin: 0 0 6px; font-size: 1rem; }
.ch-result .btn { width: 100%; margin-top: 10px; }

/* ==== M4.5 Task R4: 生涯成长页(#career-root,js/shell/career.js) ====
 * cr- 前缀，rank 区块直接复用 stats.js 已有的 .st-skill* 语汇(同一份技能分展示，不重造)；
 * 其余叙事/趋势/漏洞区块是本页独有内容，走自己的最小样式集。 */
.cr-hero { margin: 0 0 16px; font-size: 1.02rem; line-height: 1.55; }
.cr-block {
  background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 14px 16px; margin-bottom: 12px;
}
.cr-block h3.st-card-title { margin: 0 0 8px; }
.cr-line { margin: 0; font-size: .9rem; line-height: 1.55; }
.cr-delta-up { color: var(--best); font-weight: 700; }
.cr-delta-down { color: var(--mistake); font-weight: 700; }
.cr-empty { color: var(--muted); font-size: .85rem; }
.cr-cta {
  display: inline-block; margin-top: 8px; font-size: .8rem; font-weight: 700;
  color: var(--gold); cursor: pointer;
}
.cr-page-empty { text-align: center; padding: 30px 10px; }
.cr-page-empty .cr-empty { font-size: .92rem; margin-bottom: 10px; }

/* ==== M4.5 Task R6：技能雷达（纯 SVG 手绘，js/shell/career.js radarSvg()） ====
 * 灰态(数据不足)与实态用形状区分——不只靠颜色：实心圆点=有数据，空心菱形=数据不足，
 * 折线只在连续有数据段内出现，绝不用 0 填充缺失轴（见 radarSvg() 头注释）。 */
.cr-radar-block { text-align: center; }
/* overflow:visible——轴标签故意画在 viewBox 边界外一点(左右两轴文字较长)，靠这条规则不被裁掉；
   父级 .cr-radar-block 没设 overflow:hidden，允许溢出内容照常显示。 */
.cr-radar-svg { width: 100%; max-width: 320px; height: auto; margin: 4px auto 0; display: block; overflow: visible; }
.cr-radar-grid { fill: none; stroke: var(--line); stroke-width: 1; }
.cr-radar-fill { fill: rgba(232, 198, 106, .16); stroke: none; }
.cr-radar-spoke { stroke: var(--line); stroke-width: 1; }
.cr-radar-spoke-empty { stroke-dasharray: 2 3; opacity: .5; }
.cr-radar-path { fill: none; stroke: var(--gold); stroke-width: 2.2; stroke-linejoin: round; }
.cr-radar-dot { fill: var(--gold); }
.cr-radar-nodata { fill: none; stroke: var(--muted); stroke-width: 1.6; }
.cr-radar-label { fill: var(--ink, #f1f5ee); font-size: 8.6px; font-weight: 700; }
.cr-radar-val { fill: var(--gold); font-size: 8px; }
.cr-radar-val-empty { fill: var(--muted); font-style: italic; }
.cr-radar-note { margin-top: 6px; }

/* ==== M4.5 Task R6：课程路径图（js/shell/career.js pathBlockHtml()） ====
 * 三态双编码：已完成=对勾(线条)，当前可练=实心三角，锁定=挂锁(矩形+弧)——三种截然不同
 * 的形状，灰度/色弱下也能分辨（不只靠颜色，本项目无障碍红线）。 */
.cr-path-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 12px; font-size: .78rem; color: var(--muted); }
.cr-path-lg { display: inline-flex; align-items: center; gap: 5px; }
.cr-path-lg .cr-path-node { width: 20px; height: 20px; pointer-events: none; }
.cr-path-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.cr-path-node {
  appearance: none; cursor: pointer; display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 1px; width: 34px; height: 34px; border-radius: 9px;
  background: rgba(255, 255, 255, .04); border: 1px solid var(--line); color: var(--muted);
  font-family: inherit; padding: 0;
}
.cr-path-ic { width: 13px; height: 13px; }
.cr-path-n { font-size: 8px; line-height: 1; }
.cr-path-node.done { color: var(--best); border-color: var(--best); background: rgba(52, 176, 116, .12); }
.cr-path-node.current { color: var(--gold); border-color: var(--gold); background: rgba(232, 198, 106, .14); }
.cr-path-node.locked { color: var(--muted); opacity: .65; }
.cr-path-node:active { transform: scale(.94); }
