/* ============================================================
   风青云 · 素白皮肤（plain skin）
   全站统一为「白底黑字 + 系统黑体」，让做题和阅读更清楚。

   设计原则
   1. 只做覆盖层，不改任何既有 CSS。各 app 的 styles.css 一行没动，
      本文件在它们（以及 tokens.css / switcher.css）之后加载。
   2. 只作用于浅色主题：每个块都限定 :not([data-theme="dark"])，
      深色主题保持原有的墨黑配色，不受影响。
   3. 覆盖优先走变量。各 app 的 CSS 基本都是变量驱动的，
      换掉调色板就能贯通；变量盖不到的地方在文末单独列出。

   回滚：删掉各 app <head> 里这一行 <link>，或直接删除本文件。
   ============================================================ */

:root {
  /* 系统黑体栈：零下载、全字覆盖，各平台都落在本地最好的黑体上。
     iOS/macOS 苹方、鸿蒙 HarmonyOS Sans、Windows 微软雅黑。 */
  --plain-sans: -apple-system, BlinkMacSystemFont, "PingFang SC",
    "HarmonyOS Sans SC", "Source Han Sans SC", "Noto Sans SC",
    "Noto Sans CJK SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;

  /* 中性色阶 —— 全站唯一来源，各 app 的调色板都映射到这几个值 */
  --plain-bg:         #ffffff;   /* 页面底 */
  --plain-surface:    #ffffff;   /* 卡片、面板 */
  --plain-surface-2:  #fafafa;   /* 次级面 */
  --plain-sunken:     #f4f4f4;   /* 下沉面：输入框、代码块、页脚按钮 */
  --plain-ink:        #000000;   /* 正文 */
  --plain-ink-soft:   #3a3a42;   /* 次级文字 */
  --plain-ink-faint:  #6b6b73;   /* 弱化文字（仍满足 AA） */
  --plain-line:       rgba(0, 0, 0, .18);
  --plain-line-soft:  rgba(0, 0, 0, .10);
  --plain-line-strong:rgba(0, 0, 0, .34);

  /* 品牌色保留松绿与朱砂（站点识别），只按白底需要压深一档保证对比度：
     松绿 #2f5d4e→#1f5c49 约 7.9:1，朱砂 #b03d30 约 6.0:1，金 #97803f→#7d6a2f 约 5.4:1 */
  --plain-accent:      #1f5c49;
  --plain-accent-2:    #2f7d64;
  --plain-accent-soft: #eef3f0;
  --plain-on-accent:   #ffffff;
  --plain-seal:        #b03d30;
  --plain-seal-2:      #c2503f;
  --plain-seal-soft:   #fbecea;
  --plain-gold:        #7d6a2f;
  --plain-blue:        #26547f;
  --plain-amber:       #8a5214;
  --plain-good:        #1f6b45;
  --plain-bad:         #a81f14;

  --plain-shadow-sm:   0 1px 2px rgba(0, 0, 0, .06);
  --plain-shadow-card: 0 6px 22px -12px rgba(0, 0, 0, .22);
  --plain-shadow-pop:  0 20px 50px -24px rgba(0, 0, 0, .32);
}

/* ── 共享令牌层：portal / tongji / chat 都从这里取色 ───────────── */
:root:not([data-theme="dark"]) {
  --fqy-bg:            var(--plain-bg);
  --fqy-bg-a:          var(--plain-bg);
  --fqy-bg-b:          var(--plain-surface-2);
  --fqy-panel:         var(--plain-surface);
  --fqy-panel-2:       var(--plain-surface-2);
  --fqy-paper:         var(--plain-surface);
  --fqy-ink:           var(--plain-ink);
  --fqy-ink-soft:      var(--plain-ink-soft);
  --fqy-ink-faint:     var(--plain-ink-faint);
  --fqy-line:          var(--plain-line);
  --fqy-line-soft:     var(--plain-line-soft);
  --fqy-line-strong:   var(--plain-line-strong);
  --fqy-accent:        var(--plain-accent);
  --fqy-accent-2:      var(--plain-accent-2);
  --fqy-accent-soft:   var(--plain-accent-soft);
  --fqy-on-accent:     var(--plain-on-accent);
  --fqy-seal:          var(--plain-seal);
  --fqy-seal-2:        var(--plain-seal-2);
  --fqy-seal-soft:     var(--plain-seal-soft);
  --fqy-gold:          var(--plain-gold);
  --fqy-gold-soft:     rgba(125, 106, 47, .28);
  --fqy-blue:          var(--plain-blue);
  --fqy-blue-soft:     #eef2f7;
  --fqy-amber:         var(--plain-amber);
  --fqy-amber-soft:    #f7efe4;
  --fqy-shadow-sm:     var(--plain-shadow-sm);
  --fqy-shadow-card:   var(--plain-shadow-card);
  --fqy-shadow-pop:    var(--plain-shadow-pop);
  --fqy-font-brush:    var(--plain-sans);
  /* --fqy-ink-panel / --fqy-heading 是「明暗两态都不翻浅」的墨绿实底面板，
     属于品牌语义（english 的 hero 等），白底上仍是高对比，保留不动。 */
}

/* ── zhenti（考研数学真题）自有调色板 ─────────────────────────── */
/* 注意：--accent 这类裸名在各 app 语义不同（zhenti 松绿 / chat 朱砂），
   所以必须按 app 限定作用域，不能写成裸 :root。 */
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) {
  --bg:          var(--plain-bg);
  --bg-grad-a:   var(--plain-bg);
  --bg-grad-b:   var(--plain-surface-2);
  --panel:       var(--plain-surface);
  --panel-2:     var(--plain-surface-2);
  --ink:         var(--plain-ink);
  --ink-soft:    var(--plain-ink-soft);
  --ink-faint:   var(--plain-ink-faint);
  --line:        var(--plain-line);
  --line-soft:   var(--plain-line-soft);
  --accent:      var(--plain-accent);
  --accent-2:    var(--plain-accent-2);
  --accent-soft: var(--plain-accent-soft);
  --seal:        var(--plain-seal);
  --seal-soft:   var(--plain-seal-soft);
  --gold:        var(--plain-gold);
  --good:        var(--plain-good);
  --warn:        var(--plain-amber);
  --bad:         var(--plain-bad);
  --paper:       var(--plain-surface);
  --rice:        var(--plain-surface);
  --on-accent:   var(--plain-on-accent);
  --rod:         #2f2f33;                       /* 卷杆漆色，去掉绿味 */
  --shadow-card: var(--plain-shadow-card);
  --shadow-pop:  var(--plain-shadow-pop);
  --font-brush:  var(--plain-sans);
}

/* ── english（考研英语）自有调色板 ───────────────────────────── */
html[data-fqy-app="english"]:not([data-theme="dark"]) {
  --paper:       var(--plain-bg);
  --ink:         var(--plain-ink);
  --ink-soft:    var(--plain-ink-soft);
  --ink-faint:   var(--plain-ink-faint);
  --line:        var(--plain-line);
  --line-soft:   var(--plain-line-soft);
  --gold:        var(--plain-gold);
  --surface:     var(--plain-surface);
  --surface-2:   var(--plain-surface-2);
  --paper-2:     var(--plain-surface-2);
  --oxblood:     var(--plain-seal);
  --oxblood-2:   var(--plain-seal-2);
  --gold-soft:   rgba(125, 106, 47, .28);
  --on-brand:    #ffffff;
  --ok:          var(--plain-good);
  --shadow-sm:   var(--plain-shadow-sm);
  --shadow-md:   var(--plain-shadow-card);
  --shadow-lg:   var(--plain-shadow-pop);
  /* 原 --font-display 是 Cormorant Garamond（拉丁衬线，中文回退到宋体），
     --font-serif 同理。屏幕上笔画偏细，统一收到黑体。 */
  --font-display: var(--plain-sans);
  --font-serif:   var(--plain-sans);
  --font-sans:    var(--plain-sans);
  /* --ivy / --brand 是墨绿实底面板的品牌语义，保留 */
}

/* ── chat（AI 答疑）里 tokens 别名层没覆盖到的自有变量 ─────────── */
html[data-fqy-app="chat"]:not([data-theme="dark"]) {
  --sidebar-bg:        var(--plain-surface-2);
  --user-panel:        var(--plain-surface-2);
  --user-line:         var(--plain-line-soft);
  --active-line:       var(--plain-line-strong);
  --snippet:           var(--plain-sunken);
  --mark-bg:           #fff3bf;                 /* 高亮记号：白底上要看得见 */
  --brand-dark:        #174739;
  --brand-line:        rgba(31, 92, 73, .34);
  --danger-line:       rgba(176, 61, 48, .34);
  --warn-line:         rgba(138, 82, 20, .34);
  --warn-text:         var(--plain-amber);
  --code-bg:           var(--plain-sunken);
  --code-line:         var(--plain-line);
  --code-header:       #ececec;
  --code-muted:        var(--plain-ink-faint);
  --code-button:       var(--plain-surface);
  --code-button-hover: #ececec;
  --code-button-line:  var(--plain-line);
  --composer-drag:     var(--plain-surface-2);
  --preview-image-bg:  var(--plain-surface-2);
  --composer-shadow:   var(--plain-shadow-card);
  --card-shadow:       var(--plain-shadow-card);
  --btn-hover-shadow:  var(--plain-shadow-sm);
}

/* ── 正文字体：各 app 的 body 都统一到系统黑体 ─────────────────── */
html:not([data-theme="dark"]) body {
  font-family: var(--plain-sans);
}

/* ============================================================
   变量覆盖不到的地方
   ============================================================ */

/* tongji：body 底色写死在 CSS 里，令牌换了也盖不住 */
html[data-fqy-app="tongji"]:not([data-theme="dark"]) body {
  background: var(--plain-bg);
}
/* tongji：几处按钮/角标底色写死成米色 */
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button,
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-head button,
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-corner {
  background: var(--plain-surface-2);
}

/* zhenti：印章底色写死成米色 */
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .brand-art .brand-seal {
  background: var(--plain-surface-2);
}

/* 纸纹 / 米色晕染类的装饰层，在纯白上会变成脏斑，一并收掉 */
html:not([data-theme="dark"]) .cloud,
html:not([data-theme="dark"]) .paper-grain,
html:not([data-theme="dark"]) .grain {
  display: none;
}

/* ── 装饰层：色晕与纸纹 ────────────────────────────────────────
   这些层在米底上几乎看不出来，铺到纯白上就成了脏斑，一并收掉。 */
/* chat：body 上两团装饰光晕（蓝 + 暖米） */
html[data-fqy-app="chat"]:not([data-theme="dark"]) body {
  background-image: none;
}
/* english：body::before 是暖色光晕，body::after 是纸张肌理 */
html[data-fqy-app="english"]:not([data-theme="dark"]) body::before,
html[data-fqy-app="english"]:not([data-theme="dark"]) body::after {
  display: none;
}

/* ── 剩余写死的装饰字体 ──────────────────────────────────────── */
/* tongji：两个印章的字体写死成 Georgia / 楷体，统一到黑体 */
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .brand-seal,
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-seal {
  font-family: var(--plain-sans);
}

/* ============================================================
   以下为自动生成段：gen_neutral.py / gen_tongji.py
   这些 app 把颜色写死在自己的 CSS 里，换令牌盖不住，
   故逐条中性化。改动请改生成器后执行 build_plain.sh 重新生成。
   ============================================================ */

/* ── tongji：镜像自 assets/styles/theme.css 的暗色枚举 ──────────────
   该 app 约 140 处颜色写死在 wall/reader/responsive.css 里，改令牌盖不住。
   theme.css 为做暗色已把这些规则逐条列出，且用的是 --fqy-* 令牌；
   这里把同一批规则镜像到浅色作用域，令牌在浅色下即白底黑字。
   自动生成，勿手改：改动请改 gen_tongji.py 后重新生成。 */
html[data-fqy-app="tongji"]:not([data-theme="dark"]) {
  color-scheme: dark;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) body {
  background: radial-gradient(circle at 18% 8%, rgba(201, 86, 74, 0.07), transparent 26rem),
    linear-gradient(168deg, var(--fqy-bg-a), var(--fqy-bg-b)),
    var(--fqy-bg);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs .tab-link.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .toolbar-actions button:first-child {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .brand-seal, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-seal {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn.is-active .school-chip {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .fact-prog {
  color: var(--fqy-seal-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-topic-chip.is-active {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .chips button.is-active {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-card {
  background: linear-gradient(180deg, rgba(93, 156, 133, 0.14) 0 8px, transparent 8px),
    linear-gradient(165deg, var(--fqy-paper), var(--fqy-panel-2));
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-actions button:first-child {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-card mark, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-panel mark {
  color: var(--fqy-ink);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .topic-pill, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-meta span {
  color: var(--fqy-accent-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .topic-pill:nth-child(2n) {
  color: var(--fqy-seal-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .program-pill {
  color: var(--fqy-seal-2) !important;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-cell {
  color: var(--fqy-ink);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-mark {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button {
  background: var(--fqy-panel-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button:first-child {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) #exportClose, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-body select, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-panel > footer button, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-collection-button {
  background: var(--fqy-panel-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-panel > footer .export-primary, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-collection-button.is-active {
  color: var(--fqy-on-accent);
  background: var(--fqy-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-head button {
  background: var(--fqy-panel-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-content {
  color: var(--fqy-ink);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-tabs button.is-active {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-question-nav button.is-active {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-work summary::before {
  color: var(--fqy-on-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs .tab-link.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .toolbar-actions button:first-child, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .next-list button:first-child, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .chips button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-actions button:first-child, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-topic-chip.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-tabs button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-question-nav button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button:first-child {
  border-color: transparent;
  color: var(--fqy-on-accent);
  background: var(--fqy-accent);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn.is-active .school-chip {
  color: var(--fqy-ink);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-work summary {
  color: var(--fqy-accent-2);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-work summary::before {
  color: var(--fqy-on-accent);
  background: var(--fqy-accent);
}

/* ── tongji：颜色写死在 CSS 里，令牌盖不住，这里逐条中性化 ────────
   规则由 gen_neutral.py 自动生成：把低饱和的米色纸面/暖灰去饱和拉白，
   品牌色（松绿 / 朱砂 / 金）原样保留。勿手改，改生成器后重新生成。 */
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement {
  background: rgba(253, 253, 253, 0.99);
  box-shadow: 0 28px 80px rgba(16, 16, 16, 0.26);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement::backdrop {
  background: rgba(17, 17, 17, 0.38);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-mark {
  color: #fdfdfd;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button {
  background: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .site-announcement-actions button:first-child {
  color: #fdfdfd;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog {
  background: rgba(253, 253, 253, 0.99);
  box-shadow: 0 30px 90px rgba(16, 16, 16, 0.3);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog::backdrop {
  background: rgba(17, 17, 17, 0.46);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) #exportClose {
  background: rgba(253, 253, 253, 0.82);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-body select {
  background: rgba(253, 253, 253, 0.92);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-panel > footer button {
  background: rgba(253, 253, 253, 0.86);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .export-dialog-panel > footer .export-primary {
  color: #fdfdfd;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader {
  background: rgba(253, 253, 253, 0.98);
  box-shadow: 0 30px 90px rgba(16, 16, 16, 0.28);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader::backdrop {
  background: rgba(17, 17, 17, 0.42);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-head {
  background: rgba(253, 253, 253, 0.94);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-head button {
  background: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-content {
  color: #151515;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-tabs {
  background: rgba(253, 253, 253, 0.94);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-tabs button {
  background: rgba(253, 253, 253, 0.78);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .reader-tabs button.is-active {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-toolbar {
  background: rgba(253, 253, 253, 0.95);
  box-shadow: 0 8px 22px rgba(30, 30, 30, 0.1);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-question-nav button.is-active {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-question.is-blocked {
  background: rgba(252, 252, 252, 0.72);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-collection-button {
  background: rgba(253, 253, 253, 0.82);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-collection-button.is-active {
  color: #fdfdfd;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .solution-work summary::before {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .sidebar {
  background: rgba(250, 250, 250, 0.96);
  box-shadow: 0 6px 16px rgba(23, 23, 23, 0.1);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn {
  background: rgba(253, 253, 253, 0.7);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn.is-active .school-chip {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-card:hover {
  box-shadow: 0 18px 38px rgba(25, 25, 25, 0.16);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-topic:hover, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-cell:hover {
  background: rgba(253, 253, 253, 0.92);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .empty-actions button, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .practice-cta-mobile {
  background: rgba(253, 253, 253, 0.9);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .topic-bars {
  background: linear-gradient(90deg, rgba(251, 251, 251, 0.96), transparent 18px) left / 22px 100% no-repeat,
    linear-gradient(270deg, rgba(251, 251, 251, 0.96), transparent 18px) right / 22px 100% no-repeat;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-corner {
  background: #fafafa;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-topic {
  box-shadow: 8px 0 12px -12px rgba(23, 23, 23, 0.7);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .sidebar {
  background: rgba(250, 250, 250, 0.96);
  box-shadow: 0 6px 16px rgba(23, 23, 23, 0.1);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) body {
  background: radial-gradient(circle at 18% 8%, rgba(201, 91, 79, 0.09), transparent 26rem),
    linear-gradient(120deg, #f9f9f9 0%, #fcfcfc 48%, #fafafa 100%);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .ink-bg path:last-child {
  fill: #bcbcbc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .topbar {
  background: rgba(251, 251, 251, 0.9);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .practice-cta {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .brand-seal, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-seal {
  color: #fafafa;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .search {
  background: rgba(253, 253, 253, 0.78);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs {
  background: rgba(253, 253, 253, 0.68);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs button, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs .tab-link, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .toolbar-actions button, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .next-list button {
  background: rgba(253, 253, 253, 0.82);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs button.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .mode-tabs .tab-link.is-active, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .toolbar-actions button:first-child, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .next-list button:hover {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .sidebar {
  background: rgba(251, 251, 251, 0.72);
  box-shadow: 0 12px 32px rgba(23, 23, 23, 0.08);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn:hover, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn.is-active {
  background: rgba(253, 253, 253, 0.86);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .school-btn .logo {
  background: #fbfbfb;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-topic-chip {
  background: rgba(253, 253, 253, 0.82);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-topic-chip.is-active {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-panel {
  background: linear-gradient(135deg, rgba(253, 253, 253, 0.92), rgba(252, 252, 252, 0.88));
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .chips button {
  background: rgba(253, 253, 253, 0.76);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .chips button.is-active {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .wall-section, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .topic-section, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .note-card {
  background: rgba(251, 251, 251, 0.76);
  box-shadow: 0 16px 36px rgba(23, 23, 23, 0.08);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-card {
  background: linear-gradient(180deg, rgba(27, 27, 27, 0.12) 0 8px, transparent 8px),
    linear-gradient(160deg, rgba(253, 253, 253, 0.98), rgba(249, 249, 249, 0.84));
  box-shadow: 0 12px 30px rgba(25, 25, 25, 0.1);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-logo {
  background: #fcfcfc;
  box-shadow: 0 8px 18px rgba(26, 26, 26, 0.13), inset 0 0 0 1px rgba(100, 81, 52, 0.12);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-year {
  background: rgba(253, 253, 253, 0.86);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-actions button {
  background: rgba(253, 253, 253, 0.9);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .paper-actions button:first-child {
  color: #fcfcfc;
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-topic, html[data-fqy-app="tongji"]:not([data-theme="dark"]) .heatmap-cell {
  background: rgba(253, 253, 253, 0.72);
}
html[data-fqy-app="tongji"]:not([data-theme="dark"]) .hero-seal.has-logo {
  background: #fbfbfb;
}

/* ── zhenti：颜色写死在 CSS 里，令牌盖不住，这里逐条中性化 ────────
   规则由 gen_neutral.py 自动生成：把低饱和的米色纸面/暖灰去饱和拉白，
   品牌色（松绿 / 朱砂 / 金）原样保留。勿手改，改生成器后重新生成。 */
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .drawer-scrim {
  background: rgba(10, 10, 10, 0.42);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .brand-art {
  box-shadow: 0 6px 16px -6px rgba(20, 20, 20, 0.5);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .brand-art .brand-seal {
  color: #fafafa;
  background: radial-gradient(circle at 50% 42%, transparent 13px, color-mix(in srgb, #fafafa 22%, transparent) 14px, transparent 15px),
    linear-gradient(150deg, #191919, #101010);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .seg-btn.is-active {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .access-buy:hover {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .vseal {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .hero-plaque {
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 35%, transparent), 0 8px 18px -12px rgba(20, 20, 20, 0.6);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .col::after {
  background: radial-gradient(closest-side, rgba(25, 25, 25, 0.24), transparent 72%);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .col.match .col-year {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .card {
  background: linear-gradient(90deg, rgba(255,255,255,.22), transparent 15%, transparent 84%, rgba(24, 24, 24, 0.08)),
    var(--paper);
  box-shadow: 0 20px 42px -30px rgba(16, 16, 16, 0.72),
    -8px 0 18px -18px rgba(16, 16, 16, 0.55),
    8px 0 18px -18px rgba(16, 16, 16, 0.42);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .card:hover {
  box-shadow: 0 34px 66px -34px rgba(16, 16, 16, 0.78),
    0 14px 28px -24px var(--accent),
    -10px 0 22px -20px rgba(16, 16, 16, 0.48),
    10px 0 22px -20px rgba(16, 16, 16, 0.38);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .card .sheen {
  background: radial-gradient(420px circle at var(--mx,50%) var(--my,0%), rgba(253, 253, 253, 0.55), transparent 42%);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .card .open-hint {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .year-badge {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .topic-row.active .topic-rank {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .site-announcement-scrim {
  background: color-mix(in srgb, #0b0b0b 58%, transparent);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .reader-scrim {
  background: rgba(10, 10, 10, 0.5);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sheet-year {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tool.toggle.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .mode-btn.is-active {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-scrim {
  background: color-mix(in srgb, #0b0b0b 58%, transparent);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-video-wrap {
  background: #090909;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-video {
  background: #090909;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .access-scrim {
  background: color-mix(in srgb, #0b0b0b 54%, transparent);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .access-buy-wide:hover {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .paper .q.is-done > .q-no {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .paper .q.is-correct > .q-no {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .paper .q.is-wrong > .q-no {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q-mark.done.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q-mark.star.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q-mark.eval.correct.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q-mark.eval.wrong.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .ana-btn.on {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .fill-check:hover {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .ans-k {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q.q-hit > .q-no {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .foot-seal {
  color: #fafafa;
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .cloud {
  background: radial-gradient(closest-side, rgba(252, 252, 252, 0.7) 0%, transparent 78%);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .topbar {
  background: rgba(252, 252, 252, 0.92);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .brand-art .brand-seal {
  background: linear-gradient(150deg, #191919, #101010);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-chip {
  background: rgba(248, 248, 248, 0.52);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sidebar {
  background: rgba(252, 252, 252, 0.55);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .hero {
  background: linear-gradient(120deg, rgba(252, 252, 252, 0.92), rgba(249, 249, 249, 0.8));
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .hero-plaque {
  background: linear-gradient(160deg, rgba(252, 252, 252, 0.9), #f9f9f9);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .card::before {
  background: linear-gradient(180deg, rgba(27, 27, 27, 0.92), #1b1b1b);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .choice-stamp {
  background: rgba(252, 252, 252, 0.82);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .progress {
  background: rgba(252, 252, 252, 0.62);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sheet-rod {
  background: linear-gradient(180deg, rgba(27, 27, 27, 0.92), #1b1b1b);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sheet-bar {
  background: rgba(249, 249, 249, 0.75);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .reader-mode {
  background: rgba(249, 249, 249, 0.86);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-scrim {
  background: rgba(11, 11, 11, 0.58);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q-badge.topic {
  background: rgba(21, 21, 21, 0.08);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .fill-answer {
  background: rgba(249, 249, 249, 0.76);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .summary {
  background: linear-gradient(120deg, rgba(252, 252, 252, 0.92), rgba(249, 249, 249, 0.82));
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sum-seal {
  background: rgba(248, 248, 248, 0.55);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .scroll-arr {
  background: rgba(252, 252, 252, 0.9);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .dash {
  background: rgba(252, 252, 252, 0.4);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .dash-card {
  background: rgba(252, 252, 252, 0.88);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .heatmap-wrap {
  background: rgba(252, 252, 252, 0.62);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .sidebar {
  background: rgba(252, 252, 252, 0.96);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .q.q-hit-active::before {
  background: rgba(248, 248, 248, 0.6);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .hit-nav {
  background: rgba(252, 252, 252, 0.92);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .md-table tbody tr:nth-child(even) td {
  background: rgba(249, 249, 249, 0.6);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .paper code {
  background: rgba(248, 248, 248, 0.42);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .reader-scrim {
  background: rgba(10, 10, 10, 0.7);
}
html[data-fqy-app="zhenti"]:not([data-theme="dark"]) .tutorial-scrim {
  background: rgba(11, 11, 11, 0.72);
}

/* ── english：颜色写死在 CSS 里，令牌盖不住，这里逐条中性化 ────────
   规则由 gen_neutral.py 自动生成：把低饱和的米色纸面/暖灰去饱和拉白，
   品牌色（松绿 / 朱砂 / 金）原样保留。勿手改，改生成器后重新生成。 */
html[data-fqy-app="english"]:not([data-theme="dark"]) .hero-section {
  color: #f9f9f9;
  background: radial-gradient(900px 380px at 50% -30%, rgba(184, 137, 59, 0.22), transparent 70%),
        linear-gradient(155deg, #1c4536 0%, #101010 70%);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .hero-title {
  color: #fafafa;
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .hero-subtitle {
  color: rgba(249, 249, 249, 0.8);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .stat-label {
  color: rgba(249, 249, 249, 0.7);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .progress-stat-value {
  color: #fafafa;
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .progress-stat-label {
  color: rgba(248, 248, 248, 0.72);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .site-announcement-scrim {
  background: rgba(8, 8, 8, 0.56);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .vocab-modal {
  background: rgba(8, 8, 8, 0.5);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .mock-page-hero {
  background: radial-gradient(circle at 82% 16%, rgba(232, 190, 105, .18), transparent 28%),
        linear-gradient(132deg, #111111 0%, #174537 62%, #5f2727 145%);
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .mock-page-hero h2 {
  color: #fcfcfc;
}
html[data-fqy-app="english"]:not([data-theme="dark"]) .mock-date-seal {
  background: rgba(9, 9, 9, 0.3);
}

