/* moongate-c.css — 月门 / MOONGATE override sheet for the C student shell (/c/ and /c/all-puzzles). Wyns 2026-10-21. v2 (Phase 2: bilingual page titles, eyebrows, gold numbering, corners).
   Loaded after the shell's inline <style> and goban.css; it re-values the shell's legacy tokens onto --mg-* and restyles the chrome by cascade.
   The inline legacy token literals and every locked rule are intentionally left in place; board painters, goban.css and all layout values are untouched. */

/* ---- 1. legacy token names → MOONGATE values (consumers keep their var() names) ---- */
:root{
  --bg:var(--mg-ground);--surface:var(--mg-card);--panel:var(--mg-card);--glass:var(--mg-card);
  --accent:var(--mg-blue);--accent-soft:var(--mg-blue-soft);
  --cyan:var(--mg-blue);--cyan2:var(--mg-blue-text);--cyan-dim:var(--mg-blue-soft);--cyan-line:var(--mg-glass-line);
  --gold:var(--mg-gold);--violet:var(--mg-blue);
  --text:var(--mg-text);--muted:var(--mg-muted);--line:var(--mg-line);
  --ok:var(--mg-ok);--warn:var(--mg-warn);--danger:var(--mg-bad);--bad:var(--mg-bad);
  --r:var(--mg-r-card);--r2:var(--mg-r-modal);
  --xz-curve-wr:#5FAEFF;--xz-curve-sc:#E3BE73;--xz-curve-mid:rgba(255,255,255,.18);
  --xz-curve-now:rgba(242,246,252,.82);--xz-curve-hover:rgba(242,246,252,.88);
  --xz-curve-tick:var(--mg-muted);--xz-curve-mark-problem:var(--mg-bad);--xz-curve-mark-good:var(--mg-ok);
}

/* ---- 2. ground, type, links ---- */
html,body{background:var(--mg-ground);color:var(--mg-text);font-family:var(--mg-font-body)}
body::before{background:var(--mg-ground-wash)}
a{color:var(--mg-blue-text)}
.main h2,.main h3,.main h4,.card h3,.mini h3,.top h1,.brand b,.c-welcome-card h1,.c-modal-card h3,.settings-drawer h2,.settings-drawer h3,.me-id h3,.puz-info h2,.menu-grid .mg h4,.soul-actions .sa h4,.growth-dim h4,.play-top h2,.kifu-desk-head h2{font-family:var(--mg-font-zh);font-weight:700}
.sub,.card p,.mini p,.article-prose p,.empty,.lesson-fallback,.puz-mode-hint,.growth-dim p,.menu-grid .mg p{color:var(--mg-text-2)}
.footnote,.stat span,.list-item .li-sub,.bub .who,.float-chip .k,.soul-actions .sa p,.play-opp .who span,.play-player .rk,.puz-card-meta,.toggle-row .tg-copy span,.me-go-read span{color:var(--mg-muted)}
.empty strong{font-family:var(--mg-font-zh);font-weight:700;color:var(--mg-text)}
/* KPI / clocks / counters: condensed display face, tabular digits, white (gold where it is GO or the hero rank) */
.stat b,.rank-hero-rank,.me-go-read b,.review-live-stats b,.play-clock b,.play-meta b,.growth-dim b,.float-chip .v,.badge.go,.bind-input,#cLivePickCode{font-family:var(--mg-font-display);font-weight:700;font-variant-numeric:tabular-nums}
.stat b,.review-live-stats b,.play-meta b,.growth-dim b,.float-chip .v{color:var(--mg-text)}
.rank-hero-rank,.me-go-read b{color:var(--mg-gold-text)}
.play-clock b{color:var(--mg-text)}
.play-clock.on b{color:var(--mg-blue-text)}
.class-live-total b,.kifu-cand .n,.steps .st b,.review-stage-side h4,.rank-dims summary,.lesson-script-box summary,.course-stage,.kicker,.soul-path,.back,.mini .ic,.soul-actions .sa .ic,.class-quick .q-ic,.navbtn.on .ni,.upload-zone:hover,.list-item:hover,.list-item.on,.rank-table tr.me td,.kifu-navix #kifuPlyLabel,.review-desk .navix .cnt,.xz-cand-head b{color:var(--mg-blue-text)}
.kicker,.course-stage{font-family:var(--mg-font-zh);font-weight:700}
.xz-wr-win{color:var(--mg-gold-text)}
.kifu-photo-warn{color:var(--mg-gold-text)}
.xz-wr-mini-b{color:var(--mg-text)}
.xz-wr-mini-w{color:#C8D0D8}

/* ---- 3. shell: side nav, brand, top bar ---- */
.side{background:var(--mg-slate);border-right-color:var(--mg-slate-line)}
.brand{border-bottom-color:var(--mg-line)}
.brand span{color:var(--mg-muted)}
/* the brand dot's inline style="" gradient now carries the MOONGATE blue itself (Phase 2 markup edit); only the ring/glow is added here */
.brand > div:first-child{box-shadow:0 0 0 1px var(--mg-blue-line),0 6px 16px var(--mg-blue-glow)}
.navbtn{color:var(--mg-text-2);border-radius:var(--mg-r-ctl)}
.navbtn:hover{background:var(--mg-blue-soft-2);color:var(--mg-text)}
.navbtn.on{background:var(--mg-blue-soft);border-color:transparent;color:var(--mg-text);font-weight:700;box-shadow:inset 3px 0 0 var(--mg-blue)}
.navbtn .plus-badge{background:var(--mg-blue);color:#fff}
.top h1{color:var(--mg-text)}
.badge{color:var(--mg-text-2);border-color:var(--mg-glass-line);background:var(--mg-blue-soft-2)}
.badge.go{color:var(--mg-gold-text);border-color:var(--mg-gold-line);background:var(--mg-gold-soft)}
@media (max-width:820px){
  .side{border-bottom-color:var(--mg-slate-line)}
  .navbtn.on{box-shadow:inset 0 -3px 0 var(--mg-blue)}
}

/* ---- 4. cards (glass gradient, no blur in grids) and slate rows ---- */
.card,.mini{background:var(--mg-card);background-image:var(--mg-glass);border-color:var(--mg-glass-line);box-shadow:var(--mg-glass-shadow)}
.card:hover,.mini:hover{border-color:var(--mg-blue-line)}
.c-welcome-card{box-shadow:var(--mg-float-shadow)}
.menu-grid .mg,.soul-actions .sa,.puz-card,.puz-info,.plus-panel{background:var(--mg-card);background-image:var(--mg-glass);border-color:var(--mg-glass-line);border-radius:var(--mg-r-card);box-shadow:var(--mg-glass-shadow)}
.puz-card:hover{background:var(--mg-card);background-image:var(--mg-glass);border-color:var(--mg-blue-line)}
.stat,.steps .st,.movebar,.review-curve,.review-stage-side,.pay,.kifu-cand,.play-opp,.play-players,.play-clock,.match-status,.puz-answer-meta,.puz-study-legend,.live-bar,.hw-asset-box,.growth-dim,.growth-acc,.rank-dims,.sgf-qrow,.lesson-script-box,.soul-status,.soul-side .float-chip,.class-quick button,.class-quick a,.xz-curve-tip{background:var(--mg-slate);border-color:var(--mg-slate-line)}
.stat,.steps .st,.movebar,.review-stage-side,.pay,.play-opp,.play-players,.play-clock,.live-bar,.hw-asset-box,.growth-dim,.rank-dims,.class-quick button,.class-quick a,.soul-side .float-chip{border-radius:var(--mg-r-card)}
.kifu-cand,.sgf-qrow,.match-status,.puz-answer-meta,.puz-study-legend{border-radius:var(--mg-r-ctl)}
.keyhands .list-item.on{background:var(--mg-blue-soft-2)}
button.hist-row:hover{background:var(--mg-blue-soft-2)}
.growth{background:linear-gradient(180deg,var(--mg-blue-soft-2),transparent 78%);border-color:var(--mg-slate-line)}
.xz-curve-tip{background:rgba(6,11,20,.96);color:var(--mg-text);border-color:var(--mg-glass-line)}
.xz-curve-mark{stroke:var(--mg-ground)}
.course-lesson .cover,.lesson-board{background:var(--mg-slate);border-color:var(--mg-slate-line)}
.lesson-player{background:var(--mg-ground);border-color:var(--mg-glass-line)}
.lesson-fallback{background:rgba(6,11,20,.88)}
.upload-zone{border-style:solid;border-color:var(--mg-blue-line);background:var(--mg-blue-soft-2);color:var(--mg-text-2);border-radius:var(--mg-r-card)}
.upload-zone:hover{border-color:var(--mg-blue)}
.prog i,.puz-progress i{background:var(--mg-blue)}

/* ---- 5. buttons, chips, segments ---- */
.btn{background:var(--mg-blue-grad);color:#fff;font-weight:700;border-radius:var(--mg-r-ctl);box-shadow:0 8px 24px var(--mg-blue-glow),inset 0 1px 0 rgba(255,255,255,.25)}
.btn.sm{border-radius:var(--mg-r-ctl);box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}
.btn.ghost{background:var(--mg-blue-soft-2);border-color:var(--mg-blue-line);color:var(--mg-text);font-weight:600;box-shadow:none}
.btn.ghost:hover{background:var(--mg-blue-soft);border-color:var(--mg-blue-text)}
.btn.bad{background:var(--mg-bad-soft);border-color:rgba(242,109,109,.4);color:var(--mg-bad);box-shadow:none}
/* the one pay / GO CTA on C keeps the gold button (spec §5); every other primary is blue */
#payReviewBtn.btn{background:var(--mg-gold-grad);color:var(--mg-gold-ink);box-shadow:0 8px 24px rgba(212,168,87,.28),inset 0 1px 0 rgba(255,255,255,.35)}
.btn:focus-visible,.chip:focus-visible,.navbtn:focus-visible{outline:2px solid var(--mg-blue-text);outline-offset:2px}
.chip{color:var(--mg-text-2);border-color:var(--mg-glass-line);background:var(--mg-blue-soft-2)}
.chip.on{color:#fff;background:var(--mg-blue);border-color:transparent;font-weight:700}
.color-pick .btn.on{background:var(--mg-blue);color:#fff}
.puz-toggles .btn.on{background:var(--mg-blue-soft);border-color:var(--mg-blue-line);color:var(--mg-blue-text)}
.puz-modes .btn.on{background:var(--mg-blue-grad);color:#fff;border-color:transparent}
.plus-panel button{background:var(--mg-blue-soft-2);border-color:var(--mg-blue-line);border-radius:var(--mg-r-ctl)}
.plus-panel button:hover{background:var(--mg-blue-soft)}
.switch{background:rgba(255,255,255,.12)}
.switch.on{background:var(--mg-blue)}
#classHomeSeg.seg{background:rgba(6,11,20,.55);border-color:var(--mg-glass-line)}
#classHomeSeg.seg button{color:var(--mg-text-2)}
#classHomeSeg.seg button.on{color:#fff;background:var(--mg-blue);box-shadow:0 4px 12px var(--mg-blue-glow)}
#discoverSeg.seg{background:rgba(6,11,20,.55);border-color:var(--mg-glass-line)}
#discoverSeg.seg button{color:var(--mg-text-2)}
#discoverSeg.seg button.on{color:#fff;background:var(--mg-blue);box-shadow:0 4px 12px var(--mg-blue-glow)}
.kifu-rail-toggle{color:var(--mg-blue-text);border-color:var(--mg-glass-line);background:var(--mg-blue-soft-2)}
.kifu-rail-toggle:hover{border-color:var(--mg-blue-line)}
.kifu-tools .mk{background:var(--mg-slate);box-shadow:inset 0 0 0 1px var(--mg-slate-line)}
.kifu-tools .mk.on{background:var(--mg-blue-soft);box-shadow:inset 0 0 0 1px var(--mg-blue)}
.kifu-navix .ib{border-color:var(--mg-blue-line);background:var(--mg-slate);color:var(--mg-text);border-radius:var(--mg-r-ctl)}
.kifu-navix #kifuMvSlider,.review-desk .navix input[type=range],.game-replay-nav input[type="range"],.review-toggle input{accent-color:var(--mg-blue)}
.review-desk .navix .ib{background:var(--mg-slate);border-color:var(--mg-blue-line)}
.wx-tool{border-color:var(--mg-glass-line);border-radius:var(--mg-r-ctl)}
.wx-tool.on{border-color:var(--mg-blue-line);color:var(--mg-blue-text);background:var(--mg-blue-soft)}
.hist-del:hover{color:var(--mg-bad)}

/* ---- 6. inputs ---- */
.inputbar,.wx-composer{background:var(--mg-slate);border-color:rgba(120,185,255,.22);border-radius:var(--mg-r-modal)}
.inputbar:focus-within,.wx-composer:focus-within{border-color:var(--mg-blue);box-shadow:0 0 0 3px var(--mg-blue-soft)}
.field,.bind-input,.prof-input,.search-row input,.thread-bar select,.level-select,.class-switch,.kifu-field select,.kifu-field input[type="number"],.kifu-title,#cLivePickCode,.c-chat-detail-panel input{background:var(--mg-slate);border-color:rgba(120,185,255,.22);border-radius:var(--mg-r-ctl);color:var(--mg-text);color-scheme:dark}
.c-chat-detail-panel input,.settings-drawer .prof-input,.settings-drawer .field{background:var(--mg-ground)}
.field:focus,.bind-input:focus,.prof-input:focus,.search-row input:focus,.thread-bar select:focus,.level-select:focus,.class-switch:focus,.kifu-field select:focus,.kifu-field input:focus,.kifu-title:focus,#cLivePickCode:focus,.c-chat-detail-panel input:focus{outline:none;border-color:var(--mg-blue);box-shadow:0 0 0 3px var(--mg-blue-soft)}
.inputbar input::placeholder,.wx-row input::placeholder,.bind-input::placeholder,.prof-input::placeholder,.search-row input::placeholder,.field::placeholder{color:var(--mg-muted)}

/* ---- 7. tags, status, pills (always with their icon/text, never colour alone) ---- */
.tag{color:var(--mg-blue-text);border-color:var(--mg-glass-line);background:var(--mg-blue-soft-2)}
.tag.good{color:var(--mg-ok);border-color:rgba(57,194,122,.4);background:var(--mg-ok-soft)}
.tag.bad,.keyhands .list-item .tag.bad{color:var(--mg-bad);border-color:rgba(242,109,109,.4);background:var(--mg-bad-soft)}
.tag.sel{color:#fff;background:var(--mg-blue);border-color:transparent}
.move-idx{color:var(--mg-blue-text);border-color:var(--mg-blue-line);background:var(--mg-blue-soft-2)}
.feedback{border-color:rgba(57,194,122,.35);background:var(--mg-ok-soft);color:var(--mg-ok)}
.feedback.wrong{border-color:rgba(242,109,109,.4);background:var(--mg-bad-soft);color:var(--mg-bad)}
.puz-pass{background:var(--mg-warn-soft);border-color:rgba(240,163,58,.4);color:var(--mg-warn)}
.puz-pass[data-pass="1"]{background:var(--mg-ok-soft);border-color:rgba(57,194,122,.4);color:var(--mg-ok)}
.match-status.on{color:var(--mg-blue-text);border-color:var(--mg-blue-line);background:var(--mg-blue-soft-2)}
.match-status.err{border-color:rgba(242,109,109,.45);background:var(--mg-bad-soft)}
.play-clock.on{border-color:var(--mg-blue-line);background:var(--mg-blue-soft-2)}
.live-bar.on{border-color:rgba(57,194,122,.4);background:var(--mg-ok-soft)}
.live-bar.off{border-color:rgba(240,163,58,.35);background:var(--mg-warn-soft)}
.live-bar.on .live-dot{box-shadow:0 0 0 0 rgba(57,194,122,.55)}
@keyframes livePulse{0%{box-shadow:0 0 0 0 rgba(57,194,122,.5)}70%{box-shadow:0 0 0 8px rgba(57,194,122,0)}100%{box-shadow:0 0 0 0 rgba(57,194,122,0)}}
.soul-status .dot{background:var(--mg-ok);box-shadow:0 0 8px rgba(57,194,122,.55)}
.wx-voice-bar{background:var(--mg-bad-soft);border-color:rgba(242,109,109,.3)}
.pill{color:var(--mg-gold-text);border-color:var(--mg-gold-line);background:var(--mg-gold-soft);letter-spacing:.06em}
.pill::before{background:var(--mg-gold)}

/* ---- 8. 棋魂 hero + chat ---- */
.soul-portrait{border-radius:var(--mg-r-modal);background:var(--mg-slate);border-color:var(--mg-glass-line);box-shadow:0 12px 36px rgba(0,0,0,.45),0 0 0 1px rgba(212,168,87,.35)}
.soul-portrait::after{background:linear-gradient(180deg,transparent 62%,rgba(6,11,20,.45) 100%)}
.soul-av{border-color:var(--mg-blue-line);background:var(--mg-slate)}
.soul-side .hero.card{box-shadow:var(--mg-glass-shadow),0 0 32px var(--mg-blue-soft-2)}
.bub{border-radius:var(--mg-r-modal)}
.bub.ai{background:var(--mg-card);background-image:var(--mg-glass);border-color:var(--mg-glass-line)}
.bub.me{background:var(--mg-blue-soft);border-color:var(--mg-blue-line)}
.soul-mini{background:rgba(18,31,52,.9);background-image:var(--mg-glass);border-color:var(--mg-glass-line);border-radius:var(--mg-r-modal);box-shadow:var(--mg-float-shadow);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.soul-fab{border-color:var(--mg-blue-line);background:var(--mg-slate);box-shadow:0 8px 24px var(--mg-blue-glow),0 10px 28px rgba(0,0,0,.38)}

/* ---- 9. avatars, discs ---- */
.av,.c-chat-member .av,.empty-bind .plus{color:var(--mg-blue-text);background:var(--mg-blue-soft);border-color:var(--mg-blue-line);box-shadow:inset 0 0 0 1px var(--mg-blue-line)}
.me-avatar{color:#fff;background:var(--mg-blue-grad);border-radius:var(--mg-r-card);box-shadow:0 8px 20px var(--mg-blue-glow)}
.play-av{color:var(--mg-text);background:var(--mg-slate);box-shadow:inset 0 0 0 1px var(--mg-glass-line)}
.play-av.ai{color:#fff;background:var(--mg-blue-grad);box-shadow:0 0 0 1px var(--mg-blue-line),0 0 18px var(--mg-blue-glow)}
.me-go-read{border-color:var(--mg-gold-line);background:var(--mg-gold-soft);border-radius:var(--mg-r-card)}

/* ---- 10. tables, lists ---- */
.rank-table th{color:var(--mg-muted);font-weight:500;border-bottom-color:var(--mg-glass-line)}
.rank-table td{border-bottom-color:var(--mg-line);font-variant-numeric:tabular-nums}
.rank-table tbody tr:hover td{background:var(--mg-blue-soft-2)}
.list-item,.hist-row,.hist-line,.toggle-row,.c-chat-detail-row,.wx-sheet-item{border-bottom-color:var(--mg-line)}
.xz-cand-head{color:var(--mg-muted)}
.dim-row span,.dim-tag{color:var(--mg-muted)}

/* ---- 11. floating layers: modals, drawers, sheets, menus, toast (blur only here; never on .app/.main/.page) ---- */
.c-modal{background:rgba(6,11,20,.72)}
.c-modal-card{background:rgba(18,31,52,.92);background-image:var(--mg-glass);border-color:var(--mg-glass-line);border-radius:var(--mg-r-modal);box-shadow:var(--mg-float-shadow);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.settings-backdrop{background:rgba(6,11,20,.6)}
.settings-drawer{background:var(--mg-slate);border-left-color:var(--mg-glass-line);box-shadow:var(--mg-float-shadow)}
.toggle-row .tg-copy strong{color:var(--mg-text)}
.toast{background:rgba(18,31,52,.94);background-image:var(--mg-glass);border-color:var(--mg-blue-line);border-radius:var(--mg-r-card);box-shadow:var(--mg-float-shadow);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.c-chat-detail{background:rgba(6,11,20,.72)}
.c-chat-detail-panel{background:var(--mg-slate);border-left-color:var(--mg-glass-line);box-shadow:var(--mg-float-shadow)}
.wx-menu,.wx-fwd-bar,.wx-sheet-card{background:rgba(18,31,52,.94);background-image:var(--mg-glass);color:var(--mg-text);border-color:var(--mg-glass-line);box-shadow:var(--mg-float-shadow);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.wx-menu{border-radius:var(--mg-r-card)}
.wx-fwd-bar{border-radius:var(--mg-r-card)}
.wx-sheet-card{border-radius:var(--mg-r-modal) var(--mg-r-modal) var(--mg-r-card) var(--mg-r-card)}
.wx-sheet{background:rgba(6,11,20,.55)}
.wx-menu button:hover,.wx-menu button:focus,.wx-sheet-item:hover,.wx-emoji-cell:hover,.wx-at-cell:hover{background:var(--mg-blue-soft)}
.wx-quote{border-left-color:var(--mg-blue);background:var(--mg-blue-soft-2)}
.wx-quote-bar{background:var(--mg-blue-soft-2);border-color:var(--mg-glass-line)}
.wx-lightbox{background:rgba(6,11,20,.82)}
/* 保存棋谱弹窗：奶油色改月门深色（Luluu msg 1a51e639 Q20，取代 10-12 奶油弹窗）；字段、按键、提交逻辑不动 */
.kifu-save-card{background:var(--mg-card);background-image:var(--mg-glass);border:1px solid var(--mg-glass-line);border-radius:var(--mg-r-modal);color:var(--mg-text);box-shadow:var(--mg-float-shadow)}
.kifu-save-card h3{color:var(--mg-text)}
.kifu-save-x{color:var(--mg-muted)}
.kifu-save-x:hover{color:var(--mg-text)}
.kifu-save-field label{color:var(--mg-text-2)}
.kifu-save-field input,.kifu-save-field select{background:var(--mg-slate);border-color:rgba(120,185,255,.22);border-radius:var(--mg-r-ctl);color:var(--mg-text);color-scheme:dark}
.kifu-save-field input:focus,.kifu-save-field select:focus{outline:none;border-color:var(--mg-blue);box-shadow:0 0 0 3px var(--mg-blue-soft)}
.kifu-save-btn{background:var(--mg-blue-grad);color:#fff;border-radius:var(--mg-r-ctl);box-shadow:0 8px 24px var(--mg-blue-glow),inset 0 1px 0 rgba(255,255,255,.25)}
.kifu-save-btn.ghost{background:var(--mg-blue-soft-2);border:1px solid var(--mg-blue-line);color:var(--mg-text);font-weight:600;box-shadow:none}
.kifu-save-btn.ghost:hover{background:var(--mg-blue-soft);border-color:var(--mg-blue-text)}

/* ---- 12. board hosts: gold hairline + deep frame shadow ONLY (wood, lines, stones, marks, goban.css and painters untouched) ---- */
.play-goban{box-shadow:0 0 0 2px #2a1608,inset 0 0 0 1px rgba(42,22,8,.28),0 30px 70px rgba(0,0,0,.6),0 0 0 3px rgba(212,168,87,.35)}
#page-learn-kifu-desk #kifuBoardHost.goban{box-shadow:var(--mg-board-shadow)}
#page-learn-review-points #reviewBoardHost.goban{box-shadow:var(--mg-board-shadow)}
.puz-play .puz-mini{box-shadow:var(--mg-board-shadow)}
.puz-card .puz-mini{box-shadow:0 0 0 1px rgba(212,168,87,.25)}
.kifu-photo-board{box-shadow:var(--mg-board-shadow)}
.class-replay-board svg{box-shadow:var(--mg-board-shadow)}
.puz-desk:fullscreen,.puz-desk:-webkit-full-screen{background:var(--mg-ground)}
/* goban.css hover / trial / candidate accents (not test-asserted) → blue, scoped to the two C hosts */
#kifuBoardHost .goban-hover,#reviewBoardHost .goban-hover{fill:var(--mg-blue-soft);stroke:var(--mg-blue-text)}
#kifuBoardHost .goban-stones .stone.try,#reviewBoardHost .goban-stones .stone.try{stroke:var(--mg-blue-text)}
#kifuBoardHost .goban-cand,#reviewBoardHost .goban-cand{stroke:var(--mg-blue-text)}

/* ---- 13. JS-painted SVG charts: presentation attributes are overridable from CSS ---- */
.radar polygon{stroke:rgba(95,174,255,.3)}
#rankRadarPoly{fill:rgba(46,139,255,.28);stroke:var(--mg-blue-text)}
.radar circle{fill:var(--mg-blue-text)}
.radar line{stroke:rgba(95,174,255,.4)}
.radar text,.growth text,.growth-acc text,.review-curve text{fill:var(--mg-muted)}
.growth-acc path,.growth-acc polyline{stroke:var(--mg-blue-text)}
.growth-acc circle{fill:var(--mg-blue-text)}
.review-curve polyline:not(.xz-curve-line){stroke:var(--mg-blue-text)}

/* ---- 14. Phase 2 — the deck's bilingual page title: ENGLISH (display, white) / 中文 (JS-written, blue). One content per page id; browsers without :has() show the Chinese only. ---- */
#pageTitle{font-family:var(--mg-font-zh);color:var(--mg-blue-text)}
#pageTitle::before{font-family:var(--mg-font-display);font-weight:700;font-size:26px;letter-spacing:.03em;text-transform:uppercase;line-height:1;color:var(--mg-text);margin-right:.1em}
.app:has(#page-soul.on) #pageTitle::before{content:"QIHUN / "}
.app:has(#page-soul-archive.on) #pageTitle::before{content:"RANK ARCHIVE / "}
.app:has(#page-find-academy.on) #pageTitle::before{content:"ACADEMIES / "}
.app:has(#page-me-progress.on) #pageTitle::before{content:"GROWTH / "}
.app:has(#page-park-friends.on) #pageTitle::before{content:"FRIENDS / "}
.app:has(#page-learn.on) #pageTitle::before{content:"LEARN / "}
.app:has(#page-learn-test.on) #pageTitle::before{content:"RATING TEST / "}
.app:has(#page-learn-rank.on) #pageTitle::before{content:"RATING REPORT / "}
.app:has(#page-learn-puzzles.on) #pageTitle::before{content:"PUZZLES / "}
.app:has(#page-learn-puzzle.on) #pageTitle::before{content:"PUZZLE / "}
.app:has(#page-learn-wrong.on) #pageTitle::before{content:"MISTAKES / "}
.app:has(#page-learn-course.on) #pageTitle::before{content:"COURSES / "}
.app:has(#page-learn-enroll.on) #pageTitle::before{content:"ENROLL / "}
.app:has(#page-learn-lesson.on) #pageTitle::before{content:"LESSON / "}
.app:has(#page-learn-review.on) #pageTitle::before{content:"REVIEW / "}
.app:has(#page-learn-review-points.on) #pageTitle::before{content:"REVIEW REPORT / "}
.app:has(#page-learn-kifu.on) #pageTitle::before{content:"KIFU STUDIO / "}
.app:has(#page-learn-kifu-desk.on) #pageTitle::before{content:"KIFU STUDIO / "}
.app:has(#page-learn-kifu-photo.on) #pageTitle::before{content:"PHOTO KIFU / "}
.app:has(#page-learn-play.on) #pageTitle::before{content:"AI PLAY / "}
.app:has(#page-play-match.on) #pageTitle::before{content:"AI PLAY / "}
.app:has(#page-class.on) #pageTitle::before{content:"CLASS / "}
.app:has(#page-class-hw.on) #pageTitle::before{content:"HOMEWORK / "}
.app:has(#page-class-hw-do.on) #pageTitle::before{content:"HOMEWORK / "}
.app:has(#page-class-report.on) #pageTitle::before{content:"CLASS REPORT / "}
.app:has(#page-class-replay.on) #pageTitle::before{content:"REPLAY / "}
.app:has(#page-class-chat.on) #pageTitle::before{content:"CLASS CHAT / "}
.app:has(#page-class-dm.on) #pageTitle::before{content:"TEACHER CHAT / "}
.app:has(#page-class-mates.on) #pageTitle::before{content:"CLASSMATES / "}
.app:has(#page-discover.on) #pageTitle::before{content:"DISCOVER / "}
.app:has(#page-discover-article.on) #pageTitle::before{content:"NEWS / "}
.app:has(#page-discover-friends.on) #pageTitle::before{content:"FRIENDS / "}
.app:has(#page-discover-rank.on) #pageTitle::before{content:"RANKING / "}
.app:has(#page-me.on) #pageTitle::before{content:"ME / "}
.app:has(#page-me-games.on) #pageTitle::before{content:"GAMES / "}
.app:has(#page-me-game.on) #pageTitle::before{content:"REPLAY / "}
.app:has(#page-me-msg.on) #pageTitle::before{content:"MESSAGES / "}
.app:has(#page-invite.on) #pageTitle::before{content:"JOIN / "}
.app:has(#page-join-org.on) #pageTitle::before{content:"JOIN / "}
@media(max-width:900px){#pageTitle::before{font-size:22px}}
/* phones: long English halves (DISCOVER, RATING REPORT…) wrap the .top row, so phones keep the Phase 1 Chinese-only title */
@media(max-width:560px){#pageTitle::before{display:none}}

/* ---- 15. Phase 2 — English eyebrows drawn as ::before on the three block headings whose inline margin-top would detach a sibling span (markup eyebrows elsewhere) ---- */
#page-soul > h3::before,#archiveBody > h3::before,#classPaneHw > h3::before{display:block;font-family:var(--mg-font-display);font-weight:600;font-size:11px;letter-spacing:.2em;text-transform:uppercase;line-height:1.2;color:var(--mg-muted);margin:0 0 4px}
#page-soul > h3::before{content:"RECOMMENDED"}
#archiveBody > h3::before{content:"HISTORY"}
#classPaneHw > h3::before{content:"THIS WEEK"}

/* ---- 16. Phase 2 — (gold 01 02 03 counters removed 2026-10-23, Luluu msg 3cf3ed92: 站内卡片不再加装饰序号) ---- */
.soul-actions .sa{position:relative}
.menu-grid .mg{position:relative}

/* ---- 17. Phase 2 — gold corner ornaments (background trick from moongate.css .mg-corners) on the two hero panels: 棋魂 hero card and the 我的 student card ---- */
.soul-side .hero.card::after,.me-card::after{content:"";position:absolute;inset:6px;pointer-events:none;border-radius:2px;background-image:linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner)),linear-gradient(var(--mg-gold-corner),var(--mg-gold-corner));background-repeat:no-repeat;background-size:14px 1px,1px 14px,14px 1px,1px 14px,14px 1px,1px 14px,14px 1px,1px 14px;background-position:left top,left top,right top,right top,left bottom,left bottom,right bottom,right bottom}

/* ---- 18. Phase 2 — GO: numeral white, the unit/hint gold (the hint is already its own text node) ---- */
.me-go-read b{color:var(--mg-text)}
.me-go-read span{color:var(--mg-gold-text);font-weight:700;letter-spacing:.04em}

/* ---- 19. Phase 2 — hero / KPI numerals at the deck size, only on full-width blocks that have the room (no test asserts these sizes; neither sits in a nowrap row) ---- */
.rank-hero-rank{font-size:40px}
.me-go-read b{font-size:36px}

/* ---- 20. phones ≤720px only: body 16px, secondary text ≥13–14px, small controls ≥44px tall (Luluu msg 1a51e639 Q13「可以」, lock c-mobile-font-touch-size). Desktop sizes above and in the shell's inline <style> are untouched. ---- */
@media (max-width:720px){
  html,body{font-size:16px}
  .sub,.card p,.mini p{font-size:14px}
  .footnote,.tag,.badge,.kicker{font-size:13px}
  .btn.sm,.chip{font-size:14px}
  .btn.sm,.chip,.navbtn,.list-item{min-height:var(--mg-ctl-h,44px)}
}
