[data-theme=neon-light] {
  --bg: #f7f8fc;
  --bg-soft: #eef0f7;
  --bg-card: #ffffff;
  --bg-card-hover: #f1f4fb;
  --ink: #15181f;
  --ink-mid: #2e3442;
  --ink-dim: #4a5160;
  --line: rgba(11, 114, 133, .3);
  --line-strong: rgba(11, 114, 133, .55);
  --neon-pink: #b3186b;
  --neon-cyan: #0b7285;
  --neon-purple: #5b21b6;
  --accent: #0b7285;
  /* 2026-10-31 补：彩底上的字（本主题此前缺此令牌）＝ 页面底色，同 neon 契约 */
  --on-accent: var(--bg);
  --ok: #0f9d58;
  --warn: #c98a00;
  --shadow-glow: 0 4px 16px rgba(11, 114, 133, .13);
  --shadow-pink: 0 4px 16px rgba(179, 24, 107, .15);
  --grid-color: rgba(11, 114, 133, .05);
  --radius: 10px;
  --st-rest: #5b21b6;

  /* ⚠️ 2026-10-14 修：原来是 `----warn-text`（四连字符）—— 那是**另一个**合法属性名，
     `--warn-text` 实际 10/10 主题全缺，而 check:contrast 找不到时只 skip 不报错，
     所以「对比度全绿」并不能证明它存在。现修正拼写并补值。 */
  --warn-text: #8a5e00;
  /* 2026-10-19：原 #0b7285 在浅青提示底 #d3e1e9 上只有 4.18:1（ⓘ 图标不合格） */
  --accent-text: #096273;}
[data-theme=neon-light] * {
  text-shadow:none!important}
[data-theme=neon-light] .af-相声 {
  color:#0b7285;
  border-color:#086d848c;
  background:#086d8414}
[data-theme=neon-light] .af-鼓曲 {
  color:#b3186b;
  border-color:#b3186b8c;
  background:#b3186b14}
[data-theme=neon-light] .af-评书 {
  color:#9b6a00;   /* 2026-11-03 对比度：#c98a00 在 #fff 上 2.95:1 → 4.71:1 */
  border-color:#c98a008c;
  background:#c98a0014}
[data-theme=neon-light] .af-戏剧 {
  color:#5b21b6;
  border-color:#5b21b68c;
  background:#5b21b614}

/* ---- 霓虹：节目单大卡片（2026-10-06 从 themes-v4.css 迁入） ---- */
[data-theme=neon] .flip-card,
[data-theme=neon-light] .flip-card {
  border: 1px solid rgba(25, 238, 255, 0.45);
  box-shadow:
    0 0 14px rgba(25, 238, 255, 0.26),
    inset 0 0 22px rgba(25, 238, 255, 0.06);
}

/* =====================================================================
   themes-v2.css —— 2026-10-06 清空（主题收编 P1）

   本文件原本只有两个主题：**paper / paper-dark（思致·纸页）** 与
   **paper2 / paper2-dark（糖果）**，共 44 条规则。
   收编时它们已按原加载顺序搬进：
     · theme-sizhi.css    —— paper / paper-dark
     · theme-tangguo.css  —— paper2 / paper2-dark
   文件因此变空。

   ⚠️ 本文件**必须保留**（哪怕是空的）：`vite.config.ts` 的 THEME_CORE_FILES
      列了它，构建 theme-core.css 时按文件名读取，删文件会让构建缺一块。
   ⚠️ 独立页的那部分内容没有丢：两个新主题文件里 §A（原 v2）已被
      theme-core:include 标记括起来，由 emitThemeCore 自动补回 theme-core.css。

   收编前备份：/tmp/cssbak5/themes-v2.css
   ===================================================================== */

/* =====================================================================
   themes-v3.css —— 2026-10-06 清空（波普治本 P1）

   本文件原本只有一个主题：**pop2 / pop2-dark**。
   但 `src/composables/theme.ts` 的 THEME_KEYS 里**没有任何主题映射到 pop2**
   （tangguo 用的是 paper2 / paper2-dark），也就是说这 20 条规则从来不会命中，
   是纯粹的死代码。

   波普治本时把 pop / pop-dark 收归 `theme-pop.css`（唯一声明源），
   顺带把这批死规则一并删掉 —— 文件因此变空。

   ⚠️ 本文件**必须保留**（哪怕是空的）：`vite.config.ts` 的 THEME_CORE_FILES
      列了它，构建 theme-core.css 时按文件名读取，删文件会让构建缺一块。
      原文备份：/tmp/cssbak3/themes-v3.css
   ===================================================================== */

/* ==========================================================================
 * 主题元素增强 —— 纯追加（2026-09-24 风格化第二轮：见各段内注释）
 *   1) 每个主题按「明 / 暗」各自定义装饰色板变量，元素全部引用变量 → 明暗开关自动适配
 *   2) 背景元素：position:fixed + pointer-events:none + z-index:-1，永远位于内容之下
 *   3) 结构元素：报头 / 导航 / 卡片 / 页脚 / 返回顶部 的主题化元素与造型
 *   4) 可读性铁律：装饰不许垫在正文/卡片文字下 —— 靠遮罩、让位、降透明度解决，
 *      而不是靠把内容垫实底色（那会丢主题氛围）
 * ========================================================================== *//* ============================== 撕纸 · 做旧剪报 ============================== *//* —— 背景：笔记本横格线（极淡，只添"纸"感，不干扰阅读） —— *//* —— 背景：再补一批不同形状、不同颜色的撕纸碎片 / 胶带 / 印章斑点 —— *//* —— 结构：报头贴胶带 —— *//* —— 结构：导航下面一条歪扭纸边 + 页签撕边 —— *//* —— 结构：卡片加纸纹、页脚撕边、返回顶部不规则纸片 —— *//* ============================== 糖果 · 甜系 ============================== *//* —— 背景：泡泡（带高光更像糖球）+ 三角糖 + 撒糖粒 —— *//* —— 结构：报头糖果、导航糖果条、页签糖豆 —— *//* —— 结构：卡片糖霜高光、页脚扇贝边、返回顶部圆糖 —— *//* ============================== 波普 · 浓重图形 ============================== *//* —— 背景：半调网点（只在左右边栏留白处）+ 粗描边色块 + 黑色斜杠 + 爆炸射线 —— *//* 2026-09-24 可读性修复：网点曾满屏铺在正文下面，波普浅色主题看字费劲。
   现在用纵向遮罩把网点限制在两侧边栏，正文列保持干净；透明度同时下调。 *//* —— 结构：报头爆炸射线、导航警示条、页签粗黑边、卡片网点、页脚警示边 —— *//* 卡片不再铺网点 —— 网点垫在文字下是波普主题"内容看不清"的主因
   （2026-09-24 修复；与移动端规则一致）。风格由粗描边+硬投影保留。 *//* ============================== 胶囊 / 徽标：按风格改造 ============================== *//* 只改形状、描边、投影，不覆盖原有配色语义（语义色由业务类自带） *//* ============================== 数据中心页：概览条按主题上纹理 ============================== *//* 数据中心页主题控件的小修正（与 .back 同排时不抢自动边距） */

.yqdy-theme, .yqdy-dark {
  margin-left: 0;
  cursor: pointer
}/* ============================== 移动端：可读性优先 ============================== *//* 小屏可用宽度少，背景元素容易压到正文；此处只做减淡/收敛，不改变原有观感 */



@media (max-width: 768px) {/* 波普：网点与色块在小屏最易挡字 —— 正文区垫实底色，大图形收敛 *//* 卡片上的网点在手机上最影响阅读，直接去掉 *//* 撕纸 / 糖果：新增层适度减淡，保留风格但轻压字 */}/* ============================== 主题下拉：按风格重绘 ============================== *//* 通用：主题标识小圆点（按钮与选项共用） */



.theme-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  display: inline-block;
  flex: 0 0 auto;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .14)
}
.theme-btn.icon-btn .theme-dot {
  margin-right: 1px
}
/* 大众版 / 高级版开关已于 2026-10-28 删除，.adv-btn / .adv-hint 一并移除。
   原因：那个开关全站只控制一个组件（三页履历区的 ScheduleExplorer），
   名字叫「高级版」实际只折叠一块 —— 名不副实的开关比没有更糟。 */
/* 重绘全部四主题（v1.4.3：霓虹此前漏加，下拉比其他主题宽出一截空白 —— 与撕纸/糖果/波普统一） */[data-theme=neon-light] .theme-dropdown, [data-theme=neon] .theme-dropdown{
  min-width: 104px;
  padding: 5px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--bg-card);
  border: 1px solid var(--line);
  box-shadow: 0 8px 20px rgba(0, 0, 0, .15)
}[data-theme=neon-light] .theme-opt, [data-theme=neon] .theme-opt{
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  padding: 6px 8px;
  font-family: var(--font-sans);
  font-size: 12.5px;
  letter-spacing: .02em;
  color: var(--ink);
  background: none;
  border: none;
  text-align: left;
  transition: background .16s, color .16s
}
.theme-opt-name {
  flex: 1 1 auto
}
.theme-check {
  font-weight: 700;
  opacity: .9
}/* ⚙ 设置菜单（2026-10-02 · P4）：主题选择器收进 ⚙ 后，菜单里多了「后台」入口与分组标题。
   这两类是新增类名、没有同名规则竞争，所以写成不带 data-theme 的通用规则即可。 */


.dd-sep {
  height: 1px;
  margin: 3px 2px;
  background: var(--line);
  opacity: .7
}
.dd-label {
  padding: 4px 8px 2px;
  font-family: var(--font-sans);
  font-size: 11px;
  letter-spacing: .08em;
  color: var(--ink-dim)
}/* 顶栏「浏览」下拉（2026-10-02）：与主题下拉同一套观感，只是触发器是导航胶囊 */

.nav-browse { position: relative; display: inline-flex; }
.nav-drop { cursor: pointer; font-family: inherit; }
.browse-menu {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 60;
  min-width: 120px;
  padding: 5px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--bg-card);
  border: 1px solid var(--line);
  border-radius: 8px;
  box-shadow: 0 8px 20px rgba(0, 0, 0, .15)
}
.browse-item {
  padding: 6px 10px;
  font-family: var(--font-sans);
  font-size: 12.5px;
  color: var(--ink);
  text-decoration: none;
  border-radius: 6px;
  white-space: nowrap
}
.browse-item:hover { background: rgba(127, 127, 127, .12); color: var(--accent) }

.theme-opt.dd-admin {
  text-decoration: none
}/* 撕纸：不规则圆角 + 纸纹面板 *//* 糖果：大圆角 + 粉色柔影面板 *//* 波普：粗黑描边 + 硬投影面板 *//* ============================== 数据中心：口径浮层 / 数据质量条 ============================== */


.cal-modal {
  position: fixed;
  inset: 0;
  z-index: 999;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(0, 0, 0, .5)
}
.cal-box {
  width: min(560px, 100%);
  max-height: 78vh;
  overflow: auto;
  background: var(--bg-card);
  color: var(--ink);
  border: 1px solid var(--line-strong);
  border-radius: var(--radius);
  box-shadow: 0 20px 50px rgba(0, 0, 0, .4)
}
.cal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 14px;
  border-bottom: 1px solid var(--line);
  position: sticky;
  top: 0;
  background: var(--bg-card)
}
.cal-close {
  background: none;
  border: 1px solid var(--line);
  color: var(--ink-mid);
  border-radius: 999px;
  padding: 3px 12px;
  cursor: pointer;
  font-size: 12px
}
.cal-body {
  padding: 12px 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 12px
}
.cal-item {
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 10px 12px
}
.cal-t {
  font-weight: 700;
  font-size: 14px;
  margin-bottom: 4px
}
.cal-c {
  margin-left: 8px;
  font-weight: 400;
  font-size: 11px;
  color: var(--ink-dim)
}
.cal-d {
  font-size: 13px;
  line-height: 1.7;
  color: var(--ink-mid)
}
.cal-f {
  font-size: 12px;
  color: var(--ink-dim);
  margin-top: 4px;
  font-family: var(--font-mono)
}
.cal-m {
  font-size: 12px;
  color: var(--ink-dim);
  margin-top: 4px
}
.cal-w {
  font-size: 12px;
  color: var(--warn);
  margin-top: 6px;
  line-height: 1.6
}
.cal-empty {
  color: var(--ink-dim);
  font-size: 13px
}
.cal-ico {
  margin-left: 8px;
  font-size: 12px;
  font-weight: 400;
  color: var(--ink-dim);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 1px 9px;
  cursor: pointer;
  white-space: nowrap
}
.cal-ico:hover {
  color: var(--neon-cyan);
  border-color: var(--neon-cyan)
}
.dqstrip {
  margin: 10px 0 4px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12px;
  color: var(--ink-dim)
}
.dq-row {
  line-height: 1.7
}
.dq-warn {
  color: var(--warn)
}
.dq-note {
  color: var(--ink-mid)
}
.yqdy-cal {
  cursor: pointer
}/* ==========================================================================
 * 数据中心：去掉波点，风格改由「框」与「胶囊」承载
 *   · 作用域限定为 body.yqdy-stats（仅数据中心），不影响前台
 *   · 撕纸：纸纹 + 不规则纸边 + 胶带角标；胶囊改手撕边
 *   · 糖果：大圆角 + 糖霜高光 + 糖果角球；胶囊改全圆
 *   · 波普：粗黑描边 + 硬投影 + 直角 + 色块角标；胶囊加粗边硬影
 * ========================================================================== *//* ① 波普：数据中心不再出现网点（满屏层 / 卡片 / 概览条） *//* ② 撕纸 *//* ③ 糖果 *//* ④ 波普 *//* ============================== 数据中心：P2 进阶指标板块 ============================== */


.p2-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  padding: 12px
}
.p2-h {
  font-size: 12px;
  letter-spacing: 1px;
  color: var(--ink-dim);
  margin-bottom: 6px
}
.mom-row, .life-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  padding: 5px 0;
  border-bottom: 1px dashed var(--line)
}
.mom-row:last-child, .life-row:last-child {
  border-bottom: none
}
.mom-n, .life-n {
  flex: 1 1 auto;
  cursor: pointer;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap
}
.mom-n:hover, .life-n:hover {
  color: var(--neon-cyan)
}
.mom-d {
  font-weight: 700;
  white-space: nowrap
}
.mom-d.up {
  color: var(--ok)
}
.mom-d.down {
  color: var(--warn)
}
.mom-c, .life-c, .life-m, .life-s {
  font-size: 11.5px;
  color: var(--ink-dim);
  white-space: nowrap
}
.newtag {
  margin-left: 6px;
  font-size: 10px;
  color: var(--neon-pink);
  border: 1px solid currentColor;
  border-radius: 999px;
  padding: 0 6px
}
.fp-v {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 5px 0
}
.fp-v b {
  width: 76px;
  font-size: 12px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap
}
.fp-cells {
  display: flex;
  gap: 4px;
  flex: 1 1 auto
}
.fp-c {
  flex: 1 1 0;
  height: 22px;
  border-radius: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(90deg, var(--neon-cyan), var(--neon-pink))
}
.fp-c i {
  font-style: normal;
  font-size: 11px;
  font-weight: 700;
  color: #0d031a
}
@media (max-width: 768px) {
  .p2-grid {
    grid-template-columns: 1fr
  }
  .life-m {
    display: none
  }
  .fp-v b {
    width: 58px
  }}/* ============================== 数据中心：P3 搭档网络（中心性 + 替代弹性） ============================== */


.p3-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px
}
.net-wrap {
  position: relative
}
.net-svg {
  display: block;
  width: 100%;
  height: auto;
  max-height: 520px
}
.net-edge {
  fill: none;
  stroke: var(--neon-cyan)
}
.net-node {
  cursor: pointer
}
.net-node circle {
  stroke: var(--bg);
  stroke-width: 1.5;
  transition: stroke-width .15s
}
.net-node:hover circle,
.net-node.on circle {
  stroke: var(--neon-pink);
  stroke-width: 2.5
}
.net-node text {
  font-size: var(--fs-6, 9.5px);
  fill: var(--ink-mid);
  pointer-events: none
}
.net-node.on text {
  fill: var(--ink);
  font-weight: 700
}
.net-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 8px;
  font-size: 12px;
  color: var(--ink-dim)
}
.net-legend b {
  color: var(--neon-cyan);
  font-family: var(--font-mono)
}
.ego-h {
  font-size: 13px;
  font-weight: 700;
  margin: 12px 0 4px
}
.ego-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 5px 0;
  border-bottom: 1px dashed var(--line);
  font-size: 13px
}
.ego-row:last-child {
  border-bottom: none
}
.ego-n {
  font-weight: 600;
  min-width: 76px;
  cursor: pointer
}
.ego-n:hover {
  color: var(--neon-cyan)
}
.ego-c {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--ink-mid)
}
.ego-s {
  font-size: 12px;
  color: var(--ink-dim)
}
.ego-t {
  border-radius: 999px;
  padding: 0 7px;
  font-size: 11px;
  border: 1px solid var(--line)
}
.ego-t.hard {
  color: var(--warn)
}
.ego-t.mid {
  color: var(--neon-purple)
}
.ego-t.easy {
  color: var(--ok)
}
.sub-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 5px 0;
  border-bottom: 1px dashed var(--line);
  font-size: 13px
}
.sub-row:last-child {
  border-bottom: none
}
.sub-n {
  flex: 1 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap
}
.sub-e {
  flex: 0 0 52px;
  text-align: right;
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--ink-dim)
}
@media (max-width: 768px) {
  .p3-grid {
    grid-template-columns: 1fr
  }
  .net-svg {
    max-height: 400px
  }}/* ============================== 数据中心：P4 呈现升级（自动解读 / 要点条 / 联动 / 移动端） ============================== */


.pts-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 10px;
  margin: 0 0 14px
}
.pts-item {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  background: var(--bg-card);
  border: 1px solid var(--line);
  border-left: 3px solid var(--neon-pink);
  border-radius: 10px;
  padding: 9px 12px;
  font-size: 13px;
  line-height: 1.6;
  min-width: 0
}
.pts-item .pi {
  font-size: 16px;
  line-height: 1.4;
  flex: 0 0 auto
}
.ins-line {
  display: flex;
  gap: 7px;
  margin: -2px 0 12px;
  padding: 8px 12px;
  border: 1px dashed var(--line);
  border-radius: 8px;
  background: rgba(25, 238, 255, .04);
  color: var(--ink-mid);
  font-size: 12.5px;
  line-height: 1.7
}
.ins-line:before {
  content: "\1F4A1";
  flex: 0 0 auto
}
.net-link {
  flex: 0 0 auto;
  border: 1px solid var(--line);
  background: transparent;
  color: var(--ink-dim);
  border-radius: 999px;
  font-size: 11px;
  padding: 1px 7px;
  cursor: pointer;
  font-family: inherit
}
.net-link:hover {
  color: var(--neon-cyan);
  border-color: var(--neon-cyan)
}
.peak-lab {
  fill: var(--warn);
  font-size: var(--fs-6, 9.5px)
}
.sub-n {
  min-width: 0
}
@media (max-width: 768px) {
  .pts-strip {
    grid-template-columns: 1fr
  }}
@media (max-width: 560px) {/* 移动端不横向溢出：老作品行改为换行布局，卡片内边距收紧 */
  
  .wrap {
    padding: 20px 12px 40px
  }
  .lg-row {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 10px
  }
  .lg-name {
    flex: 1 1 100%
  }
  .lg-qz, .lg-date {
    flex: 0 0 auto
  }
  .lg-fp {
    flex: 1 1 100%
  }
  .ins-line {
    font-size: 12px
  }
  .mom-row, .life-row, .ego-row, .sub-row {
    flex-wrap: wrap
  }}/* ============================== 霓虹 · 扫描线（仅暗色，CRT 感） ============================== */


[data-theme=neon] body:after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: repeating-linear-gradient(0deg, rgba(255, 255, 255, .022) 0 1px, transparent 1px 3px)
}/* ============================== 可访问性（2026-09-24） ============================== *//* 键盘焦点可见：默认浏览器 outline 在霓虹/波普主题下不明显，统一成高对比描边。
   覆盖所有可交互元素（含表单控件），此前只覆盖 a/button/option/tabindex，
   搜索框、下拉、文本域这些键盘高频目标反而没有焦点环。 */



:where(
  a,
  button,
  input,
  select,
  textarea,
  summary,
  [role="option"],
  [role="button"],
  [role="tab"],
  [tabindex]
):focus-visible {
  outline: 2px solid var(--neon-cyan);
  outline-offset: 2px;
  border-radius: 3px;
}/* 移动端体验（2026-09-25）：触屏设备把纯图标按钮的点击热区放大到 40px。
   只针对图标类按钮，普通文字按钮不受影响，避免破坏既有排版。 */


@media (pointer: coarse) {
  :where(.icon-btn, .wk-btn, .theme-btn, .net-zoom button, .ch-btn) {
    min-width: 40px;
    min-height: 40px;
  }}/* 鼠标点击时不画焦点环（避免出现"点一下留个圈"），但键盘聚焦不受影响：
   :focus:not(:focus-visible) 只匹配鼠标/触摸产生的聚焦。 */


:where(a, button, input, select, textarea, summary, [tabindex]):focus:not(:focus-visible) {
  outline: none;
}/* 偏好「减少动效」：除 .reveal 外，把跑马灯 / 脉冲 / 闪烁 / 浮动也一并停掉。
   此前只覆盖 .reveal，跑马灯与状态栏动画在系统开启该偏好后仍在动。 */


@media (prefers-reduced-motion: reduce) {
  .marquee-track,
  .marquee-track * {
    animation: none !important;
    transform: none !important;
  }
  .pulse,
  .rec,
  .diamond,
  .kicker,
  .sub-line.sub-brand,
  [class*="shimmer"],
  [class*="skeleton"] {
    animation: none !important;
  }/* 兜底：上述列举之外的所有 CSS 动画 / 过渡（pin 流光、入场 viewIn、脉冲 lawPulse、
     跑马灯 popSpark、Hero fanGradient 等）统一「瞬间完成」，不用再逐个维护类名清单。
     ⚠️ 必须用 duration 归零，不能写 animation: none ——
        后者会让依赖动画入场的元素（如 viewIn 的 opacity:0→1）停在初始态而不可见。 */
  
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }}

/* ---- 通用布局（2026-10-06 从 themes-v4.css 迁入；该文件已退役） ----
   这些是**不带主题前缀**的通用类，给工具条 / 章节条用，
   全站只有这一份定义，搬来搬去只要不被同优先级规则压住就不会变样。 */
.tb {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  align-items: center;
  gap: 8px 16px;
}
.tb-group { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tb-end { margin-left: auto; }
.chapters { flex-wrap: wrap; }

/* =====================================================================
 * 恒定令牌层（Color Tokens · 跨主题恒定）
 * ─────────────────────────────────────────────────────────────────
 * 为什么有这一层（2026-10-14，主题层 5×2 重写 · 批 -1）：
 *   颜色**不止来自主题文件**。`utils/format.ts` 里裸着 3 套色板（字辈 10 色 /
 *   节目 10 色 / 演出队 16 色）、角色胶囊、曲种胶囊、`NetworkView` 图色、
 *   `FanDangHero` 内联色 —— 共 **8 组 · 60+ 色完全不受 `data-theme` 控制**，
 *   既不知道当前主题也不知道明暗。这是「换个主题就翻车」的另一半根因
 *   （另一半是主题层 1405 个 `!important`）。本层把它们收编为令牌。
 *
 * 两类令牌的边界（契约见 docs/主题令牌重建规划.md §11.1）：
 *   · 主题令牌：随 `--theme` 变，10/10 必须齐全 → 写在各 theme-*.css
 *   · 恒定令牌：跨主题不变，但**必须分明暗两版** → 写在本文件
 *
 * 明暗落点（为什么用 data-mode 而不是写 10 遍）：
 *   `applyTheme()` 每次都会写 `data-mode`，亮色恒为 `light`、暗色恒为 `dark`。
 *   所以「暗版 `:root` + 亮版 `[data-mode='light']`」两份就能覆盖 5 主题 × 明暗，
 *   **一个颜色只有一个定义处**（规划 §11.1 铁律 1）。
 *
 * 独立页（/guide /ops …）：本文件已列进 `vite.config.ts` 的 THEME_CORE_FILES，
 *   整份拼进 theme-core.css，独立页同样拿得到。
 * ===================================================================== */

:root {
  /* ── 1. 身份 / 类别色板（原字辈 10 + 节目 10 + 演出队 16 = 36 色 → 10 色 ×2 版）
   *   语义是「识别这个人/这个节目/这个队」，跨主题恒定是**特性**（同一个人
   *   在 10 套皮肤下该是同一个颜色）。约束：只用于描边 / 头像圈 / 小色块，
   *   不作大面积底色；`--pal-ink` 是它上面的字色。 */
  --pal-1: #6fa3d9;  /* 蓝 */
  --pal-2: #4fb98c;  /* 绿 */
  --pal-3: #d98a4e;  /* 橙棕 */
  --pal-4: #9e82d6;  /* 紫 */
  --pal-5: #c85f7e;  /* 玫红 */
  --pal-6: #3fb0b9;  /* 青 */
  --pal-7: #b58d3e;  /* 金棕 */
  --pal-8: #6c7ed1;  /* 靛 · 2026-10-19 提亮：原 #6274c4 白/黑字都卡在 4.35 边界 */
  --pal-9: #d178ae;  /* 品红 */
  --pal-10: #8b99ad; /* 灰蓝 · 其他 */
  /* ⚠️ 2026-10-19 根因修复：暗色版调色板是**浅/中明度**色（头像圈底色），
     白字只有 2.4~4.4:1（pop-dark/persons 实测 8 个头像全不达标）。
     深色字 #111 在 10 色上全部 ≥4.85:1，故暗色版统一用深字。
     亮色版调色板已压深，仍用白字（见下方 [data-mode='light']）。 */
  --pal-ink: #111;

  /* ── 1b. 合作网络「纵深阶梯」色（2026-10-19 用户「颜色丑，换多巴胺颜色」）
   *   原用 --pal-7 金棕 / --pal-6 青 / --pal-4 紫：金棕压在深 navy 底上是一坨脏泥，
   *   用户原话「特别特别难看」。换成**多巴胺四色**（亮红粉 → 亮黄 → 亮青 → 亮紫）：
   *   暗底下发亮、彼此拉得开，也跟本站「SYS://DATA_STACK」的霓虹气质同源。
   *   语义：焦点本人 / 一度 / 二度 / 三度，越远越冷。
   *   ⚠️ 亮色版另有一组压深的值（见本文件 [data-mode='light'] 块）——
   *      同样的荧光色放在米/白底上会糊。 */
  /* ⚠️ 2026-10-20（第二轮）：用户「颜色难看，用亮橙 + 咏庆德云对应的颜色」。
     方案（用户拍板）：焦点=亮橙，一度=咏庆红（海报红），二度=咏庆粉，三度=暖金。
     焦点那颗最大的球用亮橙最跳；一度红是品牌主色；二/三度用粉、金拉开层次，
     且焦点橙在北极、三度金在南极，空间上分开不会和橙混。 */
  --depth-focus: #ff8c1a;   /* 焦点本人：亮橙（2026-10-20 试过亮蓝 #3fb0ff，用户「不好看」——
                               蓝与既有的红/粉/金暖色族像两套体系；亮橙与咏庆红邻近和谐、
                               与邻居高亮的冷青互补，悬停主次一眼分，故定位在此 */
  --depth-1: #f4514a;       /* 一度：咏庆红（海报红） */
  --depth-2: #ff6fa3;       /* 二度：咏庆粉 */
  --depth-3: #f0a93b;       /* 三度：暖金 */

  /* ── 1c. 合作网络「冷色高亮」（2026-10-20 用户：「悬停后不要黑圈，换别的效果」+
        「捧逗的颜色要亮的清新的」）
   *   用途：悬停时**邻居**的外圈、捧逗模式「捧哏侧」的球色。
   *   原来这两处用 --ink 黑圈 / --pal-6 青：黑圈在两种主题下都是糊的一片，
   *   亮主题下 --pal-6 是暗青（#1c7d85）—— 用户明确「这个黑色也不要」「要亮的清新」。
   *   语义与 --depth-* 同族（暗底发亮 / 亮底压深一档），但偏冷，和焦点亮橙拉开。 */
  --net-cool: #2ee6d6;      /* 暗色版：亮青 */

  /* ── 2. 角色胶囊（逗/捧/伴奏/主持）
   *   ⚠️ 前景与描边**引用主题变量**（`--neon-pink`/`--neon-cyan`/`--warn`），
   *   所以亮色主题下会自动换成深色 —— 白/米底上不会变荧光字。
   *   底色是 ≤12% 极低透明，随主题影响可忽略，保留原值。 */
  --role-act-fg:  var(--neon-pink);
  --role-act-bg:  rgba(255, 61, 181, .12);
  --role-act-bd:  var(--neon-pink);
  --role-peng-fg: var(--neon-cyan);
  --role-peng-bg: rgba(25, 238, 255, .10);
  --role-peng-bd: var(--neon-cyan);
  --role-acc-fg:  #a3a7b3;
  --role-acc-bg:  rgba(163, 167, 179, .10);
  --role-acc-bd:  rgba(163, 167, 179, .45);
  --role-host-fg: var(--warn);
  --role-host-bg: rgba(255, 194, 75, .10);
  --role-host-bd: rgba(255, 194, 75, .50);

  /* ── 3. 曲种胶囊：暖金橙。前景跟 `--warn` 走，亮色主题自动变深 */
  --qz-fg:   var(--warn);
  --qz-bg:   rgba(255, 194, 75, .10);
  --qz-bd:   rgba(255, 194, 75, .55);
  --qz-glow: rgba(255, 194, 75, .35);

  /* ── 4. 图表分类色（决策⑦：跨主题**统一一套**，只分明暗）
   *   为什么统一：它承载的是**数据语义**（哪根柱子是哪类），不是装饰；
   *   每主题一套要配 80 个色，且让读者每换主题就要重新认色。
   *   ⚠️ 洛基原本有自己的 `--chart-*`（绿金两族，主题性太强），已删除。 */
  --chart-1: #4e9ee8;
  --chart-2: #f2a93b;
  --chart-3: #4fc98a;
  --chart-4: #e8657f;
  --chart-5: #a87be0;
  --chart-6: #3fc4c4;
  --chart-7: #e5c65c;
  --chart-8: #8fa3bf;
  --chart-hi: #4fc98a;

  /* ── 5. 网络图边（原 `stroke:#ff8c42` 硬编码橙）
   *  ⚠️ 2026-10-20：辐条已改成亮橙加粗（edgeStyle），这里把"其他人之间"的线压暗，
   *     让橙辐条明显跳出来 —— 否则橙 vs 浅灰同亮度，用户说"两个颜色的线太近了"。 */
  --edge-base:  var(--ink-mid);
  --edge-op:    .3;
  --edge-cross: .2;
  --edge-dim:   .12;

  /* ── 6. 浮层（tooltip / 提示条 / 摘要条）
   *   ⚠️ 别再用 `--bg-card` / `--bg-soft` 当浮层底 —— 在黄底主题必撞色，
   *   这是已经踩过三轮的结论。统一「半透明黑底 + 白字 + 细白边」。 */
  --bg-elevated:       rgba(0, 0, 0, .72);
  --bg-elevated-soft:  rgba(0, 0, 0, .35);
  --bg-elevated-ink:   #fff;
  --bg-elevated-dim:   rgba(255, 255, 255, .82);
  --bg-elevated-line:  rgba(255, 255, 255, .28);

  /* ── 7. 交互态令牌 → **已迁到基础层 `neon.css` 的 `:root`**（2026-10-19）
   *   ⚠️ 教训（实测，不是推测）：交互态令牌**不能定义在本文件的 `:root`**。
   *   本文件在 main.ts 里**最后**加载（批 -1 的刻意设计：让恒定层压过主题层），
   *   于是这里的 `--sel-*` 会盖掉 `[data-theme=pop]` 的覆写 —— 实测波普选中态
   *   仍是 accent 粉底，黄底黑字根本没生效。
   *   → `--sel-*` 是**主题令牌**（必须能被主题覆写），默认值改写在最先加载的
   *     基础层（neon.css），主题文件自然覆盖它。语义与用法见 neon.css 同段注释。 */

  /* ── 8. 语义状态色（正向/负向；跨主题恒定，只分明暗）
   *   设计系统 §4「正向/负向」语义。原有 `--ok`（成功绿）仍保留给旧引用，
   *   **新代码请用 `--pos` / `--neg`**（10/10 在 check:contrast 受检）。
   *   on-pos / on-neg = 彩底上的反相字，与 --on-accent 同构（暗底亮色→深字、
   *   亮底深色→浅字），统一用 var(--bg) 即可。 */
  --pos:     #4ade80;
  /* 2026-10-19：原 #f87171 在暗色卡片悬停底 #3a3340 上只有 4.39:1 */
  --neg:     #ff9b9b;
  --on-pos:  var(--bg);
  --on-neg:  var(--bg);
}

/* ── 亮色版：压深一档，保证在浅底上仍清晰 ── */
[data-mode='light'] {
  /* 2026-10-19：4 个色号再压深一档，保证 15px 白字 ≥4.5:1
     （原值白字仅 3.99~4.20，头像首字母在浅色主题下同样看不清）。 */
  --pal-1: #44739f;
  --pal-2: #2a8160;
  --pal-3: #ad6229;
  --pal-4: #7c5bbf;
  --pal-5: #a83a5a;
  --pal-6: #1c7d85;
  --pal-7: #8f6b1f;
  --pal-8: #3d4e9e;
  --pal-9: #b5548d;
  --pal-10: #64748b;
  --pal-ink: #fff;

  /* 纵深阶梯色的亮色版：亮底上压深一档，保证名片上的字仍清晰（inkOn 自动选深/浅墨）。 */
  --depth-focus: #d97706;   /* 焦点：橙压深（亮底上仍鲜亮；蓝已试被否，见暗色版注释） */
  --depth-1: #c0392b;       /* 一度：红压深 */
  --depth-2: #d6336c;       /* 二度：粉压深 */
  --depth-3: #b7791f;       /* 三度：金压深 */

  /* 网络图冷色高亮的亮色版：压深一档，白底上仍鲜亮（与 --depth-* 同一套逻辑）。 */
  --net-cool: #0e7490;      /* 亮色版：青压深 */

  --chart-1: #1f6fb2;
  --chart-2: #b96f14;
  --chart-3: #1f8256;
  --chart-4: #c03a5c;
  --chart-5: #7148b0;
  --chart-6: #14858c;
  --chart-7: #a07c15;
  --chart-8: #5b6b82;
  --chart-hi: #1f8256;

  /* 语义状态色亮版：压深，保证浅底上清晰（反相字 --on-pos/--on-neg 继承 :root 的 var(--bg)） */
  --pos: #15803d;
  --neg: #dc2626;
}

/* ── 3. 字号阶梯 --fs-1…6（主题层重写 · 批 6，2026-10-18）─────────────────
 * 把 docs/设计系统.md §2 的「允许值」落成令牌：**跨主题恒定**（字号不随皮肤变）。
 * 取每档的**下限**：既有页面是从裸 px 迁过来的，取下限最接近原观感；
 * 也保证 `--fs-6` = 9.5px 是设计系统规定的**绝对下限**（< 9.5px 一律禁止）。
 *
 * 用法：`font-size: var(--fs-6)`（组件里写 `var(--fs-6, 9.5px)` 更稳，令牌缺失时也不会塌）。
 * ⚠️ 禁止再发明中间值（12.6 / 13.5 / 14.5 / 17…），只能在这 6 档里选。
 */
:root {
  --fs-1: 20px;    /* 页面主标题（big-name 用 20px+ 时直接写 clamp/具体值） */
  --fs-2: 14px;    /* 区块标题、结论条正文强调 */
  --fs-3: 12.5px;  /* 正文、榜单行主文字、KPI 数值 */
  --fs-4: 12px;    /* 次级说明、图例 */
  --fs-5: 11px;    /* 标签、chip、按钮文字 */
  --fs-6: 9.5px;   /* 图表轴文字、峰值标注、气泡卡 —— 绝对下限，不得再小 */
}

/* == 以下为 theme-pop.css 的主题变量块（唯一声明源；构建时自动抽取，勿手改）== */
[data-theme=pop] {
  --bg: #ffe800;   /* 2026-09-30 回滚：组件内有 background: var(--bg)，不可改墨 */
  --bg-soft: #fff3a0;
  --neon-pink: #ff2d95;
  --neon-purple: #7c4dff;
  --accent: #ff2d95;
  --ok: #1b9e5a;
  --warn: #d99300;
  --shadow-pink: 5px 5px 0 #ff2d95;
  --grid-color: transparent;
  --st-rest: #00a8bd;

  /* ── 选中态（主题层重写 · 批「交互态」2026-10-19）──
   * 波普的选中是**实底**（黄底黑字 + 黑边硬影），不是 7% 淡 tint ——
   * 这正是「--sel-bg 不能只定义在恒定层」的原因（规划 §11.4b 决策 ⑭）。
   * ⚠️ 消费方给了 --sel-bg 必须顺手给 --row-ink: var(--sel-ink)，
   *    否则黄底上的后代仍是波普通配白字 = 黄底白字事故。 */
  --sel-bg: #ffe600;
  --sel-ink: #1a1a1a;
  --sel-border: #111111;

  /* ⚠️ 2026-10-14 修四连字符拼写事故（见 themes.css 同处注释） */
  --warn-text: #8a3d00;
  /* ⚠️ 2026-10-19 修「黄底粉字/橙字看不清」：
     --accent-text 原来直接等于 --accent（#ff2d95），在黄底上只有 2.77:1。
     按设计系统「填充色 ≠ 文字色」的契约，文字版必须是压深后的同色相：
       #a3005a 在黄底 6.21:1 / 白卡 7.76:1，两处都过 AA。
     填充场景继续用 --accent，不受影响。 */
  --accent-text: #9c0055;}
[data-theme=pop-dark] {
  /* ── 背景（层级：bg < bg-soft < bg-card）── */
  --bg: #1a1a1a;
  --bg-soft: #2a2a2a;
  --bg-card: #1a1a1a;          /* 有意为之：卡=底同色，靠金边 + 硬影区分（海报感） */
  --bg-card-hover: #2e2e2e;    /* 比卡底亮一档 */

  /* ── 文字 ── */
  --ink: #fff;
  --ink-mid: #bbb;
  --ink-dim: #c7c7c7;          /* 中性灰（原 #c5c9d6 带蓝紫调） */

  /* ── 线 ── */
  --line: #e8c86a;             /* 亮金边，与金框语言一致 */
  --line-strong: #ffe800;

  /* ── 强调 / 状态 ── */
  --accent: #ff2d95;           /* 波普粉。历史轨迹：#b388ff → #c9a84a → #e60012 → 定粉 */
  --accent-text: #ff8ac2;      /* 2026-10-19：暗底文字版。
                                   #ff2d95 在 #2a2a2a 只有 4.14:1；
                                   #ff7ab8 在正文够（5.97:1），但在关于页「青底代码块」只有 4.23:1；
                                   再提亮到 #ff8ac2 → 正文 6.61:1、代码块 4.69:1，全部过 4.5。 */
  --on-accent: #1a1a1a;        /* 彩底反黑字（2026-10-03 修：曾漏定义 → 回退 #fff，金底白字 2.29:1） */
  --ok: #ffe800;               /* 波普不用语义绿（2026-09-30 裁定） */
  --warn: #ffe800;
  --st-rest: #2ec6d8;

  /* ── 选中态（批「交互态」）：暗色波普也是**黄底黑字**，与亮版对仗 */
  --sel-bg: #ffe800;
  --sel-ink: #1a1a1a;
  --sel-border: #ffe800;

  /* ── 形制 / 特效 ── */
  --radius: 6px;
  --shadow-glow: 5px 5px 0 #ff8c1a;
  --shadow-pink: 5px 5px 0 #ff2d95;
  --grid-color: transparent;

  /* ⚠️ 这里**不能**覆写 --chart-*（2026-10-19 批「图表数据色」实测）：
     --chart-* 是**恒定令牌**，定义在 `theme-tokens.css` 的 `:root`，而该文件在 main.ts 里
     **最后**加载（批 -1 的刻意设计），会盖掉本块的任何覆写 —— 此前写的
     `--chart-3:#ffe800 / --chart-4:#ff8c1a` 一直是**死代码**（从不生效）。已删除，
     免得后来者以为「波普图表第 3 色是黄的」。
     决策⑦（规划 §11.5）：图表数据色跨主题统一一套、只分明暗 —— 它承载的是**数据语义**
     不是装饰。若将来要恢复波普专属图表色，必须先把 --chart-* 迁到基础层 neon.css。 */

  /* ── 主题私有装饰（批 4 将统一命名空间，此处保持原名）── */
  --theme-pop-dot: rgba(242, 242, 245, .08);
  --theme-pop-block: var(--neon-cyan);
  --theme-pop-block2: var(--neon-pink);
  --theme-pop-block3: var(--neon-purple);

  /* ── 旧别名（组件仍在用，迁移前保留）── */
  --accent-2: #ffe600;
  --card: #2a2a2a;
  --ink-soft: #c8c0a8;
}
[data-theme=pop] {
  --theme-pop-dot: rgba(17, 17, 17, .10);
  --theme-pop-block: var(--neon-pink);
  --theme-pop-block2: var(--neon-cyan);
  --theme-pop-block3: var(--neon-purple)
}
[data-theme=pop] {
  /* 2026-11-03（用户裁定）：**黄底是对的，别改**。
     用户原话：「上面黄底白框再黄框是有层次的，是对的；下面那部分是黄底黄框再黄框，
     没层次，按上面的改」→ 即：
       ① 页面底色保持亮黄 #ffe800（不动）；
       ② 承载内容的**容器**必须是白面（--bg-card）；
       ③ 容器**内部**的小块保持黄面（--bg-soft）。
     所以「没层次」的根因不是页面太黄，而是**下面那几块容器没有白面**
     （`*` 杀渐变把它们的 gradient 填充一起杀了 → 透明 → 直接露页面黄）。 */
  --bg: #ffe800;
  /* 「彩底上的字色」：波普底色是亮黄，反白字必须是黑。 */
  --on-accent: #1a1a1a;
  --bg-soft: #ffd600;
  --bg-card: #ffffff;
  --bg-card-hover: #fff3c4;
  --ink: #1a1a1a;
  --ink-mid: #333;
  --ink-dim: #555;
  --line: #1a1a1a;
  --line-strong: #1a1a1a;
  /* 2026-09-30 清理：这三个变量此前一直是**紫 #9b5de5**，且从未被后面的补丁块覆盖
     —— 是「截图里反复冒紫」的真正源头（--neon-cyan / --neon-purple 后来
     被 v11/v24 覆盖过，唯独 accent 与 pink 漏了）。现按波普六色裁定。 */
  --accent: #ff2d95;      /* 紫 → 波普粉（与暗色块 v24 的 --accent 一致） */
  --neon-pink: #ff2d95;   /* 紫 → 波普粉 */
  --neon-cyan: #00a8bd;   /* 烤橙(新色) → 回原有青；与文件末尾 v24 的裁定一致 */
  --neon-purple: #e60012; /* 紫 → 海报红（与 v11 一致） */
  --ok: #00a8bd;          /* 天青 #2ec4b6 已裁定弃用 → 回原有青 */
  --warn: #ff8c1a;
  --shadow-glow: 5px 5px 0 #1a1a1a;
  --radius: 14px;
}
[data-theme=pop-dark] {
  --font-display: 'Hannotate SC','Xingkai SC','Baoli SC','Marker Felt','Bradley Hand','Comic Sans MS','PingFang SC',cursive,sans-serif;
}
[data-theme=pop-dark] { --ink: #c9b878; }
[data-theme=pop] {   /* 烤橙 → 青（2026-09-30 清残留；与末尾 v24 裁定一致） */
  --neon-purple: #e60012;   /* 紫 → 海报红 */
  --chart-3: #ff8c1a; --chart-4: #e60012;   /* 烤橙 #c94f00（已裁定废除）→ 橙 */
}
[data-theme=pop-dark] {
  --theme-pop-doodle: 255px 15px 225px 15px / 15px 225px 15px 255px;
}
[data-theme=pop] {
  --neon-cyan: var(--accent-text);   /* #a3005a：黄底 6.21:1 */
  --neon-pink: var(--warn-text);     /* #8a3d00：黄底 6.11:1 */
  --neon-purple: #005f6b;            /* 暗青文字版：黄底 5.89:1 */
}
[data-theme=pop-dark] {
  --neon-cyan: var(--accent-text);   /* #ff7ab8：暗底 5.97:1 */
  --neon-pink: var(--warn-text);     /* #ffe800：暗底 13.7:1 */
  --neon-purple: var(--st-rest);     /* #2ec6d8：暗底 8.9:1 */
}
/* == 以下为 theme-pop.css 的视觉皮肤段（构建时自动抽取，勿手改）== */
/* ============================== 波普 · 浓重图形 ============================== */




[data-theme=pop] {
  --theme-pop-dot: rgba(17, 17, 17, .10);
  --theme-pop-block: var(--neon-pink);
  --theme-pop-block2: var(--neon-cyan);
  --theme-pop-block3: var(--neon-purple)
}

/* 2026-11-03 补：本行注释的开头「斜杠星」丢了（只剩结尾的星斜杠），
   于是这行中文被当成选择器、连同下一条 body:before 一起非法 ——
   波普的半调网点遮罩一直是死的（线上也如此），没有任何报错。 */
/* 现在用纵向遮罩把网点限制在两侧边栏，正文列保持干净；透明度同时下调。 */


[data-theme=pop] body:before,
[data-theme=pop-dark] body:before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: radial-gradient(circle, var(--theme-pop-dot) 22%, transparent 24%) 0 0 / 24px 24px;
  -webkit-mask-image: linear-gradient(90deg, #000 0 11%, transparent 23% 77%, #000 89% 100%);
  mask-image: linear-gradient(90deg, #000 0 11%, transparent 23% 77%, #000 89% 100%)
}

[data-theme=pop] body:after,
[data-theme=pop-dark] body:after {
  content: "";
  position: fixed;
  right: 3%;
  top: 7%;
  z-index: -1;
  pointer-events: none;
  transform: rotate(-8deg);
  background: var(--theme-pop-block);
  border: 6px solid var(--line);}

[data-theme=pop] #app:before,
[data-theme=pop-dark] #app:before {
  content: "";
  position: fixed;
  left: -40px;
  bottom: 6%;
  z-index: -1;
  pointer-events: none;
  transform: rotate(7deg);
  background: repeating-linear-gradient(45deg, var(--line) 0 10px, transparent 10px 26px),
    var(--theme-pop-block2);
  border: 6px solid var(--line)
}

[data-theme=pop] #app:after,
[data-theme=pop-dark] #app:after {
  content: "";
  position: fixed;
  left: -5%;
  top: 2%;
  width: 240px;
  height: 240px;
  z-index: -1;
  pointer-events: none;
  border-radius: 50%;
  background: repeating-conic-gradient(from 0deg, var(--theme-pop-block3) 0 7deg, transparent 7deg 14deg);
  opacity: .3
}

[data-theme=pop] .wrap:before,
[data-theme=pop-dark] .wrap:before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    linear-gradient(var(--theme-pop-block2), var(--theme-pop-block2)) 91% 76% / 104px 76px no-repeat,
    linear-gradient(var(--theme-pop-block3), var(--theme-pop-block3)) 13% 82% / 78px 78px no-repeat,
    linear-gradient(var(--theme-pop-block), var(--theme-pop-block)) 4% 22% / 68px 52px no-repeat
}

[data-theme=pop] .wrap:after,
[data-theme=pop-dark] .wrap:after {
  content: "";
  position: fixed;
  right: 6%;
  bottom: 14%;
  width: 150px;
  height: 150px;
  z-index: -1;
  pointer-events: none;
  transform: rotate(12deg);
  background: var(--theme-pop-block3);
  clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)
}/* —— 结构：报头爆炸射线、导航警示条、页签粗黑边、卡片网点、页脚警示边 —— */


[data-theme=pop] .masthead,
[data-theme=pop-dark] .masthead {
  position: relative
}

[data-theme=pop] .masthead:before,
[data-theme=pop-dark] .masthead:before {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 400px;
  height: 400px;
  max-width: 96%;
  z-index: -1;
  pointer-events: none;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: repeating-conic-gradient(from 0deg, var(--theme-pop-block) 0 6deg, transparent 6deg 12deg);
  opacity: .45;
  /* 漫画放射环：径向遮罩三段式——中心掏空（标题干净）、中段显环、外缘渐隐
     （渐隐是为了不压到报头下方的跑马灯文字，2026-09-24 二次调整） */
  -webkit-mask-image: radial-gradient(circle, transparent 0 34%, #000 52%, transparent 90%);
  mask-image: radial-gradient(circle, transparent 0 34%, #000 52%, transparent 90%)
}

[data-theme=pop] .top-nav:before,
[data-theme=pop-dark] .top-nav:before {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -4px;
  width: min(880px, 94%);
  height: 9px;
  z-index: -1;
  pointer-events: none;
  transform: translateX(-50%);
  border: 2px solid var(--line);
  background: repeating-linear-gradient(45deg, var(--line) 0 12px, transparent 12px 26px),
    var(--theme-pop-block)
}

[data-theme=pop] .nav-tab,
[data-theme=pop-dark] .nav-tab {
  outline: 3px solid var(--line);
  outline-offset: -3px
}/* 卡片不再铺网点 —— 网点垫在文字下是波普主题"内容看不清"的主因
   （2026-09-24 修复；与移动端规则一致）。风格由粗描边+硬投影保留。 */


[data-theme=pop] [class*="-card"],
[data-theme=pop-dark] [class*="-card"] {}

[data-theme=pop] footer:before,
[data-theme=pop-dark] footer:before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -8px;
  height: 12px;
  z-index: -1;
  pointer-events: none;
  border-top: 3px solid var(--line);
  background: repeating-linear-gradient(45deg, var(--line) 0 12px, transparent 12px 26px),
    var(--theme-pop-block)
}

[data-theme=pop] .back-top,
[data-theme=pop-dark] .back-top {
  border-radius: 4px;
  box-shadow: 5px 5px 0 var(--line)
}

[data-theme=pop] [class*="-pill"], [data-theme=pop] [class*="-chip"], [data-theme=pop] [class*="badge"],
[data-theme=pop-dark] [class*="-pill"], [data-theme=pop-dark] [class*="-chip"], [data-theme=pop-dark] [class*="badge"] {
  border-radius: 4px;
  outline: 2px solid var(--line);
  outline-offset: -2px;
  box-shadow: 3px 3px 0 var(--line)
}

[data-theme=pop] .ovs, [data-theme=pop-dark] .ovs {
  background-image: none
}/* ============================== 移动端：可读性优先 ============================== *//* 小屏可用宽度少，背景元素容易压到正文；此处只做减淡/收敛，不改变原有观感 *//* 波普：网点与色块在小屏最易挡字 —— 正文区垫实底色，大图形收敛 */


[data-theme=pop] .wrap,
  [data-theme=pop-dark] .wrap {
    background: var(--bg)
  }

[data-theme=pop] body:before,
  [data-theme=pop-dark] body:before {
    opacity: .45
  }

[data-theme=pop] body:after,
  [data-theme=pop-dark] body:after {
    width: 118px;
    height: 92px;
    opacity: .4;
    border-width: 4px;
    box-shadow: 6px 6px 0 var(--line)
  }

[data-theme=pop] #app:before,
  [data-theme=pop-dark] #app:before {
    width: 168px;
    height: 78px;
    opacity: .35;
    border-width: 4px
  }

[data-theme=pop] #app:after,
  [data-theme=pop-dark] #app:after,
  [data-theme=pop] .wrap:after,
  [data-theme=pop-dark] .wrap:after {
    display: none
  }

[data-theme=pop] .wrap:before,
  [data-theme=pop-dark] .wrap:before {
    opacity: .5
  }/* 卡片上的网点在手机上最影响阅读，直接去掉 */


[data-theme=pop] [class*="-card"],
  [data-theme=pop-dark] [class*="-card"] {
    background-image: none
  }/* 重绘全部四主题（v1.4.3：霓虹此前漏加，下拉比其他主题宽出一截空白 —— 与撕纸/糖果/波普统一） */[data-theme=pop] .theme-dropdown, [data-theme=pop-dark] .theme-dropdown{
  min-width: 104px;
  padding: 5px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--bg-card);}[data-theme=pop] .theme-opt, [data-theme=pop-dark] .theme-opt{
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  padding: 6px 8px;
  font-family: var(--font-sans);
  font-size: 12.5px;
  letter-spacing: .02em;
  color: var(--ink);
  background: none;
  border: none;
  text-align: left;
  transition: background .16s, color .16s
}/* 波普：粗黑描边 + 硬投影面板 */


[data-theme=pop] .theme-dropdown, [data-theme=pop-dark] .theme-dropdown {
  border-radius: 4px;
  border: 3px solid var(--line);
  box-shadow: 6px 6px 0 var(--line)
}

[data-theme=pop] .theme-opt, [data-theme=pop-dark] .theme-opt {
  border-radius: 2px;
  font-weight: 600
}

[data-theme=pop] .theme-opt:hover, [data-theme=pop-dark] .theme-opt:hover {
  background: var(--theme-pop-block);
  color: #fff
}

[data-theme=pop] .theme-opt.active, [data-theme=pop-dark] .theme-opt.active {
  box-shadow: inset 4px 0 0 var(--accent)
}/* ==========================================================================
 * 数据中心：去掉波点，风格改由「框」与「胶囊」承载
 *   · 作用域限定为 body.yqdy-stats（仅数据中心），不影响前台
 *   · 撕纸：纸纹 + 不规则纸边 + 胶带角标；胶囊改手撕边
 *   · 糖果：大圆角 + 糖霜高光 + 糖果角球；胶囊改全圆
 *   · 波普：粗黑描边 + 硬投影 + 直角 + 色块角标；胶囊加粗边硬影
 * ========================================================================== *//* ① 波普：数据中心不再出现网点（满屏层 / 卡片 / 概览条） */


[data-theme=pop] body.yqdy-stats:before,
[data-theme=pop-dark] body.yqdy-stats:before {
  background-image: none;
  -webkit-mask-image: none;
  mask-image: none
}

[data-theme=pop] body.yqdy-stats [class*="-card"],
[data-theme=pop-dark] body.yqdy-stats [class*="-card"],
[data-theme=pop] body.yqdy-stats .ovs,
[data-theme=pop-dark] body.yqdy-stats .ovs {
  background-image: none
}/* ④ 波普 */


[data-theme=pop] body.yqdy-stats .panel, [data-theme=pop-dark] body.yqdy-stats .panel,
[data-theme=pop] body.yqdy-stats .yr-card, [data-theme=pop-dark] body.yqdy-stats .yr-card,
[data-theme=pop] body.yqdy-stats .iw-card, [data-theme=pop-dark] body.yqdy-stats .iw-card,
[data-theme=pop] body.yqdy-stats .ovs, [data-theme=pop-dark] body.yqdy-stats .ovs,
[data-theme=pop] body.yqdy-stats .tb-group, [data-theme=pop-dark] body.yqdy-stats .tb-group,
[data-theme=pop] body.yqdy-stats .seg, [data-theme=pop-dark] body.yqdy-stats .seg,
[data-theme=pop] body.yqdy-stats .search, [data-theme=pop-dark] body.yqdy-stats .search {
  position: relative;
  border: 3px solid var(--line);
  border-radius: 4px;
  box-shadow: 6px 6px 0 var(--line)
}

[data-theme=pop] body.yqdy-stats .panel:before,
[data-theme=pop-dark] body.yqdy-stats .panel:before {
  content: "";
  position: absolute;
  left: -10px;
  top: -10px;
  width: 32px;
  height: 32px;
  z-index: 1;
  pointer-events: none;
  background: var(--theme-pop-block);
  border: 3px solid var(--line)
}

[data-theme=pop] body.yqdy-stats .seg button, [data-theme=pop-dark] body.yqdy-stats .seg button,
[data-theme=pop] body.yqdy-stats .fpill, [data-theme=pop-dark] body.yqdy-stats .fpill,
[data-theme=pop] body.yqdy-stats .back, [data-theme=pop-dark] body.yqdy-stats .back {
  border-radius: 3px;
  outline: 2px solid var(--line);
  outline-offset: -2px;
  box-shadow: 3px 3px 0 var(--line);
  font-weight: 700
}
/* == 以下为 theme-loki.css 的主题变量块（唯一声明源；构建时自动抽取，勿手改）== */
[data-theme=loki-dark] {
  --bg:            #0A120C;
  --bg-soft:       #0F1A12;
  --bg-card:       #16301F;
  --bg-card-hover: #1D3A26;
  --ink:           #F1F7F0;
  --ink-mid:       #C9D8CB;
  --ink-dim:       #8FA794;
  --line:          rgba(217, 180, 74, .26);   /* 金线描边（宫廷） */
  --line-strong:   rgba(217, 180, 74, .55);
  --neon-cyan:     #37C968;   /* 翡翠（主强调位） */
  --neon-pink:     #D9B44A;   /* 鎏金 */
  /* 2026-10-19：原 #2E8F55 在 #16301F 上只有 3.5:1；
     小标题/实体名用亮一档的翡翠绿 */
  --neon-purple:   #66BD8E;   /* 并入绿系，不再出现紫 */
  --accent:        #37C968;
  /* 2026-10-31 补：彩底上的字。本主题此前**缺** --on-accent（引用处会解析失败退回默认色），
     按 neon 的同一契约 = 页面底色（var(--bg)），与 accent 天然对仗。 */
  --on-accent:     var(--bg);
  --warn:          #E8C173;
  /* 2026-10-31 补：loki 此前**没有** --warn-text（neon/pop/sizhi/tangguo 都有），
     引用处只能靠 var(--warn-text, ...) 兜底。暗底上 #E8C173 浅金已经够读，
     与 neon 同一做法（--warn-text: var(--warn)）。 */
  --warn-text:     var(--warn);   /* 法力光晕 */
  --shadow-pink:   0 0 22px rgba(217, 180, 74, .30);  /* 鎏金光晕 */
  --grid-color:    rgba(55, 201, 104, .05);
  --radius:        12px;
  /* 图表色板（--chart-1..8）：2026-10-14 已上移到 styles/theme-tokens.css 统一为
     跨主题一套（决策⑦：图表承载数据语义，不是装饰；每主题一套要配 80 个色）。
     洛基原有的「绿金两族」色板随之删除，图表配色改为全站一致。 */
  /* 金属渐变（金角盔质感），供标题 / 按钮取用 */
  --theme-loki-grad: linear-gradient(180deg, #F3D98B 0%, #D9B44A 42%, #8F6B1D 68%, #E8C86A 100%);
  --st-rest: #e5c76e;
  /* 批 5（2026-10-18）：洛基标题宋体提为 --font-serif */
  --font-serif: "Songti SC", "STSong", "Noto Serif SC", "Source Han Serif SC", "SimSun", serif;
}
[data-theme=loki] {
  --bg-soft:       #EFEAD9;
  --bg-card:       #FFFFFF;
  --bg-card-hover: #FBF8EF;
  --ink:           #1C2418;
  --ink-mid:       #3A4A38;
  /* 2026-10-19 对比度治本：羊皮纸底 #EFEAD9 上，原
     #1E7A44 / #A67C1B / #2E7A4A 只有 4.2 / 3.0 / 4.1:1，
     页头时钟、页脚链接、正文强调都低于 AA。亮色统一压深一档，
     暗色仍保留翡翠亮绿（#37C968，见下方 dark 变量）。 */
  --ink-dim:       #4F5F49;
  --line:          rgba(176, 141, 42, .38);
  --line-strong:   rgba(176, 141, 42, .62);
  --neon-cyan:     #166637;
  --neon-pink:     #7A5411;
  --neon-purple:   #166637;
  --accent:        #166637;
  /* 2026-10-31 补：彩底上的字，同上（本主题此前缺此令牌） */
  --on-accent:     var(--bg);
  --ok:            #10673A;
  --warn:          #7A5411;
  /* 2026-10-31 补：同上。亮底上 #7A5411 深棕对白底约 6.5:1，够读。 */
  --warn-text:     var(--warn);
  --shadow-glow:   0 4px 16px rgba(28, 36, 24, .10);
  --shadow-pink:   0 4px 16px rgba(166, 124, 27, .16);
  --grid-color:    rgba(28, 36, 24, .04);
  --radius:        12px;
  --st-rest: #D9B44A;
  /* 比 --accent 再深一档：ⓘ 图标落在 #C4CDC1 灰底上时为 5.0:1 */
  --accent-text: #124f2a;
  /* 批 5（2026-10-18）：洛基标题宋体提为 --font-serif */
  --font-serif: "Songti SC", "STSong", "Noto Serif SC", "Source Han Serif SC", "SimSun", serif;
}
[data-theme=loki] {
  --radius: 16px 3px 16px 3px;
}
[data-theme=loki-dark] {
  --theme-loki-grad: #D9B44A;                 /* 原为多段金属渐变 → 改为单色 */
  --theme-loki-line: rgba(217, 180, 74, .55); /* 原为渐变线 → 改为实色线 */
}
[data-theme=loki] {
  --theme-loki-grad: #A67C1B;
}
[data-theme=loki] {
  --bg:      #F2EEE2;   /* 原 #F6F3E9 → 压深一档 */
  --bg-soft: #E9E2D0;   /* 原 #EFEAD9 */
}
[data-theme=loki-dark] {
  /* 2026-10-19：文字/链接与图表填充共用 --neon-cyan。原 #2E9E55 在
     卡片悬停底 #193D25 上只有 3.54:1，页头时钟/页脚链接全部不合格。
     文字必须亮回 #37C968（5.6:1）；图表若需更沉稳，走 --chart-* 色板。 */
  --neon-cyan:   #37C968;
  --accent:      #37C968;
  --ok:          #66BD8E;
  --shadow-glow: 0 0 22px rgba(46, 158, 85, .16);
  --chart-1: #2E9E55; --chart-3: #5CB873; --chart-5: #46C93F; --chart-hi: #4FDB4F;
}
/* == 以下为 theme-sizhi.css 的主题变量块（唯一声明源；构建时自动抽取，勿手改）== */
[data-theme=paper] {
  --bg: #fbf6ee;
  --bg-soft: #f3eada;
  --bg-card: #fffdf8;
  --bg-card-hover: #fff8ec;
  --ink: #5a4a3a;
  --ink-mid: #6f5d4d;
  --line: #c9b49b;
  --line-strong: #b89a7d;
  /* 2026-10-19 对比度治本：亮色纸页上这些色同时被当「填充」和「文字」用。
     原值 #7ac5c7 / #4a989a / #6ab5b7 在 #fbf6ee 上只有 1.67 / 2.85 / 2.19:1，
     页头时钟、页脚链接、正文强调全部低于 AA。现在亮色取「同色系深版」，
     深色模式仍保留原来的浅色（暗底上对比足够）。 */
  --neon-pink: #a34f6d;
  --neon-cyan: #2f6f70;
  --neon-purple: #356f73;
  --accent: #2f6f70;
  /* 2026-10-31 补：彩底上的字（本主题此前缺此令牌）＝ 页面底色，同 neon 契约 */
  --on-accent: var(--bg);
  --ok: #4f6f3a;
  --warn: #8a6215;
  --shadow-glow: 0 4px 10px rgba(120, 90, 60, .16);
  --shadow-pink: 0 4px 10px rgba(232, 144, 125, .22);
  --grid-color: transparent;
  --radius: 18px 8px 20px 7px;
  --font-serif: "KaiTi", "STKaiti", "Kaiti SC", serif;
  --st-rest: #356f73;

  /* ⚠️ 2026-10-14 修四连字符拼写事故：`----warn-text` / `----ink-dim` 都是无效名 */
  --warn-text: #8a6215;
  /* 比 --accent 再深一档：ⓘ 图标落在 #cdd3d1 灰底上时为 4.78:1 */
  --accent-text: #285f60;
  --ink-dim: #6f5e4d;}
[data-theme=paper-dark] {
  --bg: #1b1610;
  --bg-soft: #241d15;
  --bg-card: #241d15;
  --bg-card-hover: #2c241a;
  --ink: #ecdcc4;
  --ink-mid: #d6c3ab;
  --ink-dim: #a38f78;
  --line: #5a4a38;
  --line-strong: #8a7560;
  --neon-pink: #9ad8da;
  --neon-cyan: #8ac5c7;
  --neon-purple: #8ac5c7;
  --accent: #8ac5c7;
  /* 2026-10-31 补：彩底上的字，同上（本主题此前缺此令牌） */
  --on-accent: var(--bg);
  --ok: #7fa06a;
  --warn: #d9a441;
  --shadow-glow: 0 4px 12px rgba(0, 0, 0, .5);
  --shadow-pink: 0 4px 12px rgba(232, 116, 92, .3);
  --grid-color: transparent;
  --radius: 18px 8px 20px 7px;
  --font-serif: "KaiTi", "STKaiti", "Kaiti SC", serif;
  --st-rest: #8fc7c9;
}
[data-theme=paper] {
  --theme-paper-paper: rgba(242, 212, 155, .5);
  --theme-paper-green: rgba(168, 198, 134, .34);
  --theme-paper-blue: rgba(143, 184, 216, .3);
  --theme-paper-tape: rgba(226, 201, 150, .72);
  --theme-paper-stamp: rgba(120, 85, 45, .2);
  --theme-paper-grain: repeating-linear-gradient(118deg, rgba(120, 85, 45, .045) 0 2px, transparent 2px 7px);
  --theme-paper-edge: rgba(184, 154, 125, .5);
  --theme-paper-rule: rgba(120, 85, 45, .07)
}
[data-theme=paper-dark] {
  --theme-paper-paper: rgba(201, 123, 94, .26);
  --theme-paper-green: rgba(127, 160, 106, .2);
  --theme-paper-blue: rgba(94, 134, 168, .2);
  --theme-paper-tape: rgba(90, 74, 56, .6);
  --theme-paper-stamp: rgba(236, 220, 196, .13);
  --theme-paper-grain: repeating-linear-gradient(118deg, rgba(255, 220, 170, .05) 0 2px, transparent 2px 7px);
  --theme-paper-edge: rgba(138, 117, 96, .55);
  --theme-paper-rule: rgba(236, 220, 196, .055)
}
/* == 以下为 theme-sizhi.css 的视觉皮肤段（构建时自动抽取，勿手改）== */




[data-theme=paper] {
  --bg: #fbf6ee;
  --bg-soft: #f3eada;
  --bg-card: #fffdf8;
  --bg-card-hover: #fff8ec;
  --ink: #5a4a3a;
  --ink-mid: #6f5d4d;
  --line: #c9b49b;
  --line-strong: #b89a7d;
  /* 2026-10-19 对比度治本：亮色纸页上这些色同时被当「填充」和「文字」用。
     原值 #7ac5c7 / #4a989a / #6ab5b7 在 #fbf6ee 上只有 1.67 / 2.85 / 2.19:1，
     页头时钟、页脚链接、正文强调全部低于 AA。现在亮色取「同色系深版」，
     深色模式仍保留原来的浅色（暗底上对比足够）。 */
  --neon-pink: #a34f6d;
  --neon-cyan: #2f6f70;
  --neon-purple: #356f73;
  --accent: #2f6f70;
  /* 2026-10-31 补：彩底上的字（本主题此前缺此令牌）＝ 页面底色，同 neon 契约 */
  --on-accent: var(--bg);
  --ok: #4f6f3a;
  --warn: #8a6215;
  --shadow-glow: 0 4px 10px rgba(120, 90, 60, .16);
  --shadow-pink: 0 4px 10px rgba(232, 144, 125, .22);
  --grid-color: transparent;
  --radius: 18px 8px 20px 7px;
  --font-serif: "KaiTi", "STKaiti", "Kaiti SC", serif;
  --st-rest: #356f73;

  /* ⚠️ 2026-10-14 修四连字符拼写事故：`----warn-text` / `----ink-dim` 都是无效名 */
  --warn-text: #8a6215;
  /* 比 --accent 再深一档：ⓘ 图标落在 #cdd3d1 灰底上时为 4.78:1 */
  --accent-text: #285f60;
  --ink-dim: #6f5e4d;}
[data-theme=paper] * {
  text-shadow:none!important}
/* 2026-11-03 对比度：四个门类标签原色在 #fffdf8 上只有 3.39～4.19:1，
   按同色相压深一档到 ≥4.6:1（底色是半透明淡色，实际观感几乎不变）。 */
[data-theme=paper] .af-相声 {
  color:#56778d;
  border-color:#b89a7d;
  background:#8fb8d838}
[data-theme=paper] .af-鼓曲 {
  color:#ba5741;
  border-color:#b89a7d;
  background:#e8907d33}
[data-theme=paper] .af-评书 {
  color:#907127;
  border-color:#b89a7d;
  background:#f2d49b59}
[data-theme=paper] .af-戏剧 {
  color:#687850;
  border-color:#b89a7d;
  background:#a8c6863d}
[data-theme=paper-dark] {
  --bg: #1b1610;
  --bg-soft: #241d15;
  --bg-card: #241d15;
  --bg-card-hover: #2c241a;
  --ink: #ecdcc4;
  --ink-mid: #d6c3ab;
  --ink-dim: #a38f78;
  --line: #5a4a38;
  --line-strong: #8a7560;
  --neon-pink: #9ad8da;
  --neon-cyan: #8ac5c7;
  --neon-purple: #8ac5c7;
  --accent: #8ac5c7;
  /* 2026-10-31 补：彩底上的字，同上（本主题此前缺此令牌） */
  --on-accent: var(--bg);
  --ok: #7fa06a;
  --warn: #d9a441;
  --shadow-glow: 0 4px 12px rgba(0, 0, 0, .5);
  --shadow-pink: 0 4px 12px rgba(232, 116, 92, .3);
  --grid-color: transparent;
  --radius: 18px 8px 20px 7px;
  --font-serif: "KaiTi", "STKaiti", "Kaiti SC", serif;
  --st-rest: #8fc7c9;
}
[data-theme=paper-dark] * {
  text-shadow:none!important}
[data-theme=paper-dark] .af-相声 {
  color:#8fb8d8;
  border-color:#5a4a38;
  background:#5e86a838}
[data-theme=paper-dark] .af-鼓曲 {
  color:#f2a98c;
  border-color:#5a4a38;
  background:#e8745c2e}
[data-theme=paper-dark] .af-评书 {
  color:#e8c98c;
  border-color:#5a4a38;
  background:#d9a4412e}
[data-theme=paper-dark] .af-戏剧 {
  color:#a8c686;
  border-color:#5a4a38;
  background:#7fa06a33}
[data-theme=paper] body:before {
  background-image:repeating-linear-gradient(118deg,rgba(120,85,45,.05) 0 2px,transparent 2px 7px);
  -webkit-mask-image:none;
  mask-image:none}
[data-theme=paper] body:after,[data-theme=paper] #app:before,[data-theme=paper] #app:after {
  content:"";
  position:fixed;
  pointer-events:none;
  z-index:-1}
[data-theme=paper] body:after {
  right:-60px;
  top:6%;
  width:260px;
  height:210px;
  background:#f2d49b;
  opacity:.5;
  transform:rotate(-8deg);
  clip-path:polygon(3% 8%,12% 3%,24% 9%,38% 2%,52% 8%,65% 3%,78% 9%,90% 3%,98% 9%,96% 92%,87% 97%,74% 91%,60% 98%,47% 92%,34% 98%,21% 92%,9% 98%,2% 91%)}
[data-theme=paper] #app:before {
  left:-70px;
  bottom:8%;
  width:230px;
  height:190px;
  background:#a8c686;
  opacity:.32;
  transform:rotate(10deg);
  clip-path:polygon(2% 5%,15% 10%,28% 4%,44% 11%,58% 4%,72% 11%,86% 4%,97% 10%,95% 95%,83% 89%,69% 96%,55% 89%,41% 96%,27% 89%,13% 96%,4% 90%)}
[data-theme=paper] #app:after {
  right:8%;
  bottom:-50px;
  width:190px;
  height:150px;
  background:#8fb8d8;
  opacity:.28;
  transform:rotate(-14deg);
  clip-path:polygon(4% 9%,18% 3%,33% 10%,49% 3%,64% 10%,79% 3%,93% 10%,96% 90%,84% 96%,71% 89%,57% 96%,43% 89%,29% 96%,15% 89%,5% 95%)}
[data-theme=paper-dark] body:before {
  background-image:repeating-linear-gradient(118deg,rgba(255,220,170,.05) 0 2px,transparent 2px 7px);
  -webkit-mask-image:none;
  mask-image:none}
[data-theme=paper-dark] body:after,[data-theme=paper-dark] #app:before,[data-theme=paper-dark] #app:after {
  content:"";
  position:fixed;
  pointer-events:none;
  z-index:-1}
[data-theme=paper-dark] body:after {
  right:-60px;
  top:6%;
  width:260px;
  height:210px;
  background:#c97b5e;
  opacity:.3;
  transform:rotate(-8deg);
  clip-path:polygon(3% 8%,12% 3%,24% 9%,38% 2%,52% 8%,65% 3%,78% 9%,90% 3%,98% 9%,96% 92%,87% 97%,74% 91%,60% 98%,47% 92%,34% 98%,21% 92%,9% 98%,2% 91%)}
[data-theme=paper-dark] #app:before {
  left:-70px;
  bottom:8%;
  width:230px;
  height:190px;
  background:#7fa06a;
  opacity:.22;
  transform:rotate(10deg);
  clip-path:polygon(2% 5%,15% 10%,28% 4%,44% 11%,58% 4%,72% 11%,86% 4%,97% 10%,95% 95%,83% 89%,69% 96%,55% 89%,41% 96%,27% 89%,13% 96%,4% 90%)}
[data-theme=paper-dark] #app:after {
  right:8%;
  bottom:-50px;
  width:190px;
  height:150px;
  background:#5e86a8;
  opacity:.22;
  transform:rotate(-14deg);
  clip-path:polygon(4% 9%,18% 3%,33% 10%,49% 3%,64% 10%,79% 3%,93% 10%,96% 90%,84% 96%,71% 89%,57% 96%,43% 89%,29% 96%,15% 89%,5% 95%)}/* ==================== §B 视觉皮肤（原 theme-elements.css） ==================== *//* ==========================================================================
 * 主题元素增强 —— 纯追加（2026-09-24 风格化第二轮：见各段内注释）
 *   1) 每个主题按「明 / 暗」各自定义装饰色板变量，元素全部引用变量 → 明暗开关自动适配
 *   2) 背景元素：position:fixed + pointer-events:none + z-index:-1，永远位于内容之下
 *   3) 结构元素：报头 / 导航 / 卡片 / 页脚 / 返回顶部 的主题化元素与造型
 *   4) 可读性铁律：装饰不许垫在正文/卡片文字下 —— 靠遮罩、让位、降透明度解决，
 *      而不是靠把内容垫实底色（那会丢主题氛围）
 * ========================================================================== *//* ============================== 撕纸 · 做旧剪报 ============================== */


[data-theme=paper] {
  --theme-paper-paper: rgba(242, 212, 155, .5);
  --theme-paper-green: rgba(168, 198, 134, .34);
  --theme-paper-blue: rgba(143, 184, 216, .3);
  --theme-paper-tape: rgba(226, 201, 150, .72);
  --theme-paper-stamp: rgba(120, 85, 45, .2);
  --theme-paper-grain: repeating-linear-gradient(118deg, rgba(120, 85, 45, .045) 0 2px, transparent 2px 7px);
  --theme-paper-edge: rgba(184, 154, 125, .5);
  --theme-paper-rule: rgba(120, 85, 45, .07)
}
[data-theme=paper-dark] {
  --theme-paper-paper: rgba(201, 123, 94, .26);
  --theme-paper-green: rgba(127, 160, 106, .2);
  --theme-paper-blue: rgba(94, 134, 168, .2);
  --theme-paper-tape: rgba(90, 74, 56, .6);
  --theme-paper-stamp: rgba(236, 220, 196, .13);
  --theme-paper-grain: repeating-linear-gradient(118deg, rgba(255, 220, 170, .05) 0 2px, transparent 2px 7px);
  --theme-paper-edge: rgba(138, 117, 96, .55);
  --theme-paper-rule: rgba(236, 220, 196, .055)
}/* —— 背景：笔记本横格线（极淡，只添"纸"感，不干扰阅读） —— */

[data-theme=paper] body:before,
[data-theme=paper-dark] body:before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: repeating-linear-gradient(180deg, transparent 0 27px, var(--theme-paper-rule) 27px 28px)
}/* —— 背景：再补一批不同形状、不同颜色的撕纸碎片 / 胶带 / 印章斑点 —— */

[data-theme=paper] .wrap:before,
[data-theme=paper-dark] .wrap:before {
  content: "";
  position: fixed;
  left: -70px;
  top: 16%;
  width: 230px;
  height: 170px;
  z-index: -1;
  pointer-events: none;
  background: var(--theme-paper-paper);
  transform: rotate(-9deg);
  clip-path: polygon(3% 9%, 14% 3%, 27% 10%, 41% 4%, 55% 11%, 69% 4%, 82% 10%, 96% 5%, 97% 88%, 86% 95%, 72% 89%, 58% 96%, 44% 90%, 30% 96%, 16% 90%, 2% 94%)
}
[data-theme=paper] .wrap:after,
[data-theme=paper-dark] .wrap:after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    /* 彩色纸片：上一层斜向纸纹，像从横格本上撕下来的 */
    repeating-linear-gradient(118deg, rgba(255, 255, 255, .28) 0 2px, transparent 2px 9px) 86% 12% / 104px 76px no-repeat,
    linear-gradient(var(--theme-paper-green), var(--theme-paper-green)) 86% 12% / 104px 76px no-repeat,
    repeating-linear-gradient(118deg, rgba(255, 255, 255, .28) 0 2px, transparent 2px 9px) 6% 74% / 128px 88px no-repeat,
    linear-gradient(var(--theme-paper-blue), var(--theme-paper-blue)) 6% 74% / 128px 88px no-repeat,
    /* 和纸胶带：斜纹镂空，不再是一整坨色块 */
    repeating-linear-gradient(45deg, var(--theme-paper-tape) 0 7px, transparent 7px 14px) 44% 34% / 96px 24px no-repeat,
    repeating-linear-gradient(-45deg, var(--theme-paper-tape) 0 6px, transparent 6px 12px) 66% 84% / 64px 20px no-repeat,
    radial-gradient(circle, var(--theme-paper-stamp), var(--theme-paper-stamp) 40%, transparent 42%) 28% 22% / 70px 70px no-repeat,
    radial-gradient(circle, var(--theme-paper-stamp), var(--theme-paper-stamp) 40%, transparent 42%) 76% 58% / 52px 52px no-repeat
}/* —— 结构：报头贴胶带 —— */

[data-theme=paper] .masthead,
[data-theme=paper-dark] .masthead {
  position: relative
}
[data-theme=paper] .masthead:before,
[data-theme=paper-dark] .masthead:before {
  content: "";
  position: absolute;
  left: -8px;
  top: -4px;
  width: 92px;
  height: 22px;
  z-index: -1;
  pointer-events: none;
  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, .3) 0 5px, transparent 5px 10px), var(--theme-paper-tape);
  transform: rotate(-13deg)
}
[data-theme=paper] .masthead:after,
[data-theme=paper-dark] .masthead:after {
  content: "";
  position: absolute;
  right: -6px;
  top: 46%;
  width: 78px;
  height: 20px;
  z-index: -1;
  pointer-events: none;
  background: repeating-linear-gradient(-45deg, rgba(255, 255, 255, .3) 0 5px, transparent 5px 10px), var(--theme-paper-tape);
  transform: rotate(10deg)
}/* —— 结构：导航下面一条歪扭纸边 + 页签撕边 —— */

[data-theme=paper] .top-nav:before,
[data-theme=paper-dark] .top-nav:before {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -2px;
  width: min(880px, 92%);
  height: 8px;
  z-index: -1;
  pointer-events: none;
  transform: translateX(-50%) rotate(-.4deg);
  opacity: .8;
  background:
    linear-gradient(45deg, transparent 50%, var(--theme-paper-edge) 50%) 0 0 / 18px 8px repeat-x,
    linear-gradient(-45deg, transparent 50%, var(--theme-paper-edge) 50%) 0 0 / 18px 8px repeat-x
}
[data-theme=paper] .nav-tab,
[data-theme=paper-dark] .nav-tab {
  clip-path: polygon(2% 6%, 20% 2%, 41% 7%, 62% 2%, 80% 7%, 98% 3%, 100% 78%, 96% 96%, 78% 99%, 58% 93%, 38% 99%, 20% 94%, 1% 97%)
}/* —— 结构：卡片加纸纹、页脚撕边、返回顶部不规则纸片 —— */

[data-theme=paper] [class*="-card"],
[data-theme=paper-dark] [class*="-card"] {
  background-image: var(--theme-paper-grain)
}
[data-theme=paper] footer:before,
[data-theme=paper-dark] footer:before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -9px;
  height: 12px;
  z-index: -1;
  pointer-events: none;
  opacity: .85;
  background:
    linear-gradient(45deg, transparent 50%, var(--theme-paper-paper) 50%) 0 0 / 16px 12px repeat-x,
    linear-gradient(-45deg, transparent 50%, var(--theme-paper-paper) 50%) 0 0 / 16px 12px repeat-x
}
[data-theme=paper] .back-top,
[data-theme=paper-dark] .back-top {
  clip-path: polygon(12% 4%, 46% 1%, 74% 6%, 96% 3%, 100% 62%, 94% 96%, 62% 100%, 30% 95%, 4% 88%, 2% 44%)
}/* ============================== 波普 · 浓重图形 ============================== *//* —— 背景：半调网点（只在左右边栏留白处）+ 粗描边色块 + 黑色斜杠 + 爆炸射线 —— *//* 2026-09-24 可读性修复：网点曾满屏铺在正文下面，波普浅色主题看字费劲。
   现在用纵向遮罩把网点限制在两侧边栏，正文列保持干净；透明度同时下调。 *//* —— 结构：报头爆炸射线、导航警示条、页签粗黑边、卡片网点、页脚警示边 —— *//* 卡片不再铺网点 —— 网点垫在文字下是波普主题"内容看不清"的主因
   （2026-09-24 修复；与移动端规则一致）。风格由粗描边+硬投影保留。 *//* ============================== 胶囊 / 徽标：按风格改造 ============================== *//* 只改形状、描边、投影，不覆盖原有配色语义（语义色由业务类自带） */

[data-theme=paper] [class*="-pill"], [data-theme=paper] [class*="-chip"], [data-theme=paper] [class*="badge"],
[data-theme=paper-dark] [class*="-pill"], [data-theme=paper-dark] [class*="-chip"], [data-theme=paper-dark] [class*="badge"] {
  clip-path: polygon(3% 8%, 22% 2%, 44% 9%, 66% 2%, 86% 9%, 99% 4%, 100% 74%, 95% 96%, 74% 99%, 52% 92%, 30% 99%, 8% 93%, 1% 70%);
  box-shadow: 0 1px 0 var(--theme-paper-edge)
}/* ============================== 数据中心页：概览条按主题上纹理 ============================== */

[data-theme=paper] .ovs, [data-theme=paper-dark] .ovs {
  background-image: var(--theme-paper-grain)
}/* ============================== 移动端：可读性优先 ============================== *//* 小屏可用宽度少，背景元素容易压到正文；此处只做减淡/收敛，不改变原有观感 *//* 波普：网点与色块在小屏最易挡字 —— 正文区垫实底色，大图形收敛 *//* 卡片上的网点在手机上最影响阅读，直接去掉 *//* 撕纸 / 糖果：新增层适度减淡，保留风格但轻压字 */

[data-theme=paper] .wrap:before,
  [data-theme=paper-dark] .wrap:before {
    opacity: .4
  }[data-theme=paper] .wrap:after, [data-theme=paper-dark] .wrap:after{
    opacity: .5
  }/* 重绘全部四主题（v1.4.3：霓虹此前漏加，下拉比其他主题宽出一截空白 —— 与撕纸/糖果/波普统一） */[data-theme=paper] .theme-dropdown, [data-theme=paper-dark] .theme-dropdown{
  min-width: 104px;
  padding: 5px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--bg-card);
  border: 1px solid var(--line);
  box-shadow: 0 8px 20px rgba(0, 0, 0, .15)
}[data-theme=paper] .theme-opt, [data-theme=paper-dark] .theme-opt{
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  padding: 6px 8px;
  font-family: var(--font-sans);
  font-size: 12.5px;
  letter-spacing: .02em;
  color: var(--ink);
  background: none;
  border: none;
  text-align: left;
  transition: background .16s, color .16s
}/* 撕纸：不规则圆角 + 纸纹面板 */

[data-theme=paper] .theme-dropdown, [data-theme=paper-dark] .theme-dropdown {
  border-radius: 10px 18px 10px 18px;
  background-image: var(--theme-paper-grain)
}
[data-theme=paper] .theme-opt, [data-theme=paper-dark] .theme-opt {
  border-radius: 4px 10px 4px 10px
}
[data-theme=paper] .theme-opt:hover, [data-theme=paper-dark] .theme-opt:hover {
  background: rgba(120, 85, 45, .09)
}
[data-theme=paper] .theme-opt.active, [data-theme=paper-dark] .theme-opt.active {
  color: var(--accent);
  background: rgba(232, 144, 125, .14)
}/* ==========================================================================
 * 数据中心：去掉波点，风格改由「框」与「胶囊」承载
 *   · 作用域限定为 body.yqdy-stats（仅数据中心），不影响前台
 *   · 撕纸：纸纹 + 不规则纸边 + 胶带角标；胶囊改手撕边
 *   · 糖果：大圆角 + 糖霜高光 + 糖果角球；胶囊改全圆
 *   · 波普：粗黑描边 + 硬投影 + 直角 + 色块角标；胶囊加粗边硬影
 * ========================================================================== *//* ① 波普：数据中心不再出现网点（满屏层 / 卡片 / 概览条） *//* ② 撕纸 */

[data-theme=paper] body.yqdy-stats .panel, [data-theme=paper-dark] body.yqdy-stats .panel,
[data-theme=paper] body.yqdy-stats .yr-card, [data-theme=paper-dark] body.yqdy-stats .yr-card,
[data-theme=paper] body.yqdy-stats .iw-card, [data-theme=paper-dark] body.yqdy-stats .iw-card,
[data-theme=paper] body.yqdy-stats .ovs, [data-theme=paper-dark] body.yqdy-stats .ovs,
[data-theme=paper] body.yqdy-stats .tb-group, [data-theme=paper-dark] body.yqdy-stats .tb-group,
[data-theme=paper] body.yqdy-stats .seg, [data-theme=paper-dark] body.yqdy-stats .seg,
[data-theme=paper] body.yqdy-stats .search, [data-theme=paper-dark] body.yqdy-stats .search {
  position: relative;
  background-image: var(--theme-paper-grain);
  border-radius: 4px 14px 4px 14px;
  box-shadow: 0 2px 0 var(--theme-paper-edge)
}
[data-theme=paper] body.yqdy-stats .panel:before,
[data-theme=paper-dark] body.yqdy-stats .panel:before {
  content: "";
  position: absolute;
  left: -7px;
  top: -9px;
  width: 66px;
  height: 18px;
  z-index: 1;
  pointer-events: none;
  background: var(--theme-paper-tape);
  transform: rotate(-9deg)
}
[data-theme=paper] body.yqdy-stats .seg button, [data-theme=paper-dark] body.yqdy-stats .seg button,
[data-theme=paper] body.yqdy-stats .fpill, [data-theme=paper-dark] body.yqdy-stats .fpill,
[data-theme=paper] body.yqdy-stats .back, [data-theme=paper-dark] body.yqdy-stats .back {
  border-radius: 0;
  clip-path: polygon(3% 9%, 24% 2%, 46% 9%, 68% 2%, 88% 9%, 99% 4%, 100% 76%, 95% 96%, 72% 99%, 50% 92%, 28% 99%, 6% 93%, 1% 68%)
}
/* == 以下为 theme-tangguo.css 的主题变量块（唯一声明源；构建时自动抽取，勿手改）== */
[data-theme=paper2] {
  --bg: #fffdf9;
  --bg-soft: #f6f2f7;
  --bg-card: #ffffff;
  --bg-card-hover: #f7f3fa;
  --ink: #4a3f52;
  --ink-mid: #5d5168;
  --line: #e8dcea;
  --line-strong: #d6c9e0;
  /* 2026-10-19 对比度治本：这些变量在亮色糖果底上同时被当填充和文字。
     原 #e0708f / #4fa8d8 / #9b7fd4 对 #fffdf9 只有 3.0 / 2.4 / 3.1:1，
     页头时钟、页脚链接、正文强调全部低于 AA。亮色改用同色系深版；
     --accent 仍是品牌浅粉填充，文字走 --accent-text。 */
  --neon-pink: #b02455;
  --neon-cyan: #1f6f9a;
  --neon-purple: #6746a8;
  --accent: #ff8fae;
  --ok: #2f7a5f;
  --warn: #8a5a00;
  --shadow-glow: 0 4px 12px rgba(120, 100, 130, .14);
  --shadow-pink: 0 4px 12px rgba(255, 179, 198, .35);
  --grid-color: transparent;
  --radius: 20px 7px 20px 7px;
  --st-rest: #1f6f9a;

  /* ⚠️ 2026-10-14 修四连字符拼写事故 */
  --warn-text: #8a5a00;
  --ink-dim: #6e6478;
  --accent-text: #b02455;
  /* 🐛 2026-10-19 修「糖果亮色选中态看不清」：--on-accent 默认 = var(--bg)（近白），
     而糖果亮色的 --accent 是**浅粉 #ff8fae** → 白字压浅粉 = **2.00:1**（远低于 3:1），
     `.dc-tab.on` / `.pg-tabs button.on` 这类选中态在糖果下字是糊的。
     浅 accent 的正确反相字是**深色**，故覆写为深玫红（5.1:1）。
     ⚠️ 由 `check:contrast` 的「选中态 sel-ink × sel-bg」一条守住，改回白字会立即失败。 */
  --on-accent: #6d1f3a;}
[data-theme=paper2-dark] {
  --bg: #161320;
  --bg-soft: #1e1a2b;
  --bg-card: #211c2e;
  --bg-card-hover: #282135;
  --ink: #f3ecf7;
  --ink-mid: #d8cde4;
  /* 亮一级：原 #9a8eab 在卡片悬停底 #3a3340 上只有 3.95:1 */
  --ink-dim: #b8aec6;
  --line: #342c45;
  --line-strong: #463a5c;
  --neon-pink: #ff9fbd;
  --neon-cyan: #8fc0ff;
  /* 原 #9a7bff 在 #3a3340 上只有 3.85:1；提亮给「数据从哪来」等小标题用 */
  --neon-purple: #c4b5ff;
  --accent: #ff7fa8;
  --ok: #4fcf9e;
  --warn: #ffb37a;
  --shadow-glow: 0 4px 14px rgba(0, 0, 0, .5);
  --shadow-pink: 0 4px 14px rgba(255, 127, 168, .3);
  --grid-color: transparent;
  --radius: 20px 7px 20px 7px;
  --st-rest: #6fbce4;
  /* 深色底上的小号强调字/ⓘ 图标：原 #ff7fa8 在 #523c4c 上只有 3.7:1 */
  --accent-text: #ffb3c9;
  --warn-text: #ffd0a6;
}
[data-theme=paper2] {
  --theme-candy-pink: rgba(255, 179, 198, .6);
  --theme-candy-mint: rgba(168, 230, 207, .55);
  --theme-candy-lemon: rgba(255, 233, 150, .5);
  --theme-candy-sky: rgba(162, 210, 255, .5);
  --theme-candy-grape: rgba(197, 170, 245, .45);
  --theme-candy-stripe-a: rgba(255, 179, 198, .75);
  --theme-candy-stripe-b: rgba(255, 255, 255, .5);
  --theme-candy-sheen: radial-gradient(120% 90% at 18% 0%, rgba(255, 255, 255, .9), transparent 62%)
}
[data-theme=paper2-dark] {
  --theme-candy-pink: rgba(255, 127, 168, .34);
  --theme-candy-mint: rgba(79, 207, 158, .28);
  --theme-candy-lemon: rgba(255, 179, 122, .26);
  --theme-candy-sky: rgba(127, 182, 255, .28);
  --theme-candy-grape: rgba(154, 123, 255, .28);
  --theme-candy-stripe-a: rgba(255, 127, 168, .6);
  --theme-candy-stripe-b: rgba(255, 255, 255, .22);
  --theme-candy-sheen: radial-gradient(120% 90% at 18% 0%, rgba(255, 255, 255, .1), transparent 62%)
}
/* == 以下为 theme-tangguo.css 的视觉皮肤段（构建时自动抽取，勿手改）== */




[data-theme=paper2] {
  --bg: #fffdf9;
  --bg-soft: #f6f2f7;
  --bg-card: #ffffff;
  --bg-card-hover: #f7f3fa;
  --ink: #4a3f52;
  --ink-mid: #5d5168;
  --line: #e8dcea;
  --line-strong: #d6c9e0;
  /* 2026-10-19 对比度治本：这些变量在亮色糖果底上同时被当填充和文字。
     原 #e0708f / #4fa8d8 / #9b7fd4 对 #fffdf9 只有 3.0 / 2.4 / 3.1:1，
     页头时钟、页脚链接、正文强调全部低于 AA。亮色改用同色系深版；
     --accent 仍是品牌浅粉填充，文字走 --accent-text。 */
  --neon-pink: #b02455;
  --neon-cyan: #1f6f9a;
  --neon-purple: #6746a8;
  --accent: #ff8fae;
  --ok: #2f7a5f;
  --warn: #8a5a00;
  --shadow-glow: 0 4px 12px rgba(120, 100, 130, .14);
  --shadow-pink: 0 4px 12px rgba(255, 179, 198, .35);
  --grid-color: transparent;
  --radius: 20px 7px 20px 7px;
  --st-rest: #1f6f9a;

  /* ⚠️ 2026-10-14 修四连字符拼写事故 */
  --warn-text: #8a5a00;
  --ink-dim: #6e6478;
  --accent-text: #b02455;
  /* 🐛 2026-10-19 修「糖果亮色选中态看不清」：--on-accent 默认 = var(--bg)（近白），
     而糖果亮色的 --accent 是**浅粉 #ff8fae** → 白字压浅粉 = **2.00:1**（远低于 3:1），
     `.dc-tab.on` / `.pg-tabs button.on` 这类选中态在糖果下字是糊的。
     浅 accent 的正确反相字是**深色**，故覆写为深玫红（5.1:1）。
     ⚠️ 由 `check:contrast` 的「选中态 sel-ink × sel-bg」一条守住，改回白字会立即失败。 */
  --on-accent: #6d1f3a;}
[data-theme=paper2] * {
  text-shadow:none!important}
[data-theme=paper2] .af-相声 {
  color:#4a3f52;
  border-color:transparent;
  background:#ffb3c6;
  border-radius:999px;
  box-shadow:0 2px 6px #ffb3c680}
[data-theme=paper2] .af-鼓曲 {
  color:#4a3f52;
  border-color:transparent;
  background:#a8e6cf;
  border-radius:18px 5px;
  box-shadow:0 2px 6px #a8e6cf80}
[data-theme=paper2] .af-评书 {
  color:#4a3f52;
  border-color:transparent;
  background:#a2d2ff;
  border-radius:0;
  clip-path:polygon(0 0,100% 0,100% 66%,85% 100%,0 100%);
  filter:drop-shadow(0 2px 4px rgba(162,210,255,.55))}
[data-theme=paper2] .af-戏剧 {
  color:#4a3f52;
  border-color:transparent;
  background:#ffc9a0;
  border-radius:14px 14px 4px;
  box-shadow:0 2px 6px #ffc9a080}
[data-theme=paper2] body:before {
  background-image:none;
  -webkit-mask-image:none;
  mask-image:none}
[data-theme=paper2] body:after,[data-theme=paper2] #app:before,[data-theme=paper2] #app:after {
  content:"";
  position:fixed;
  pointer-events:none}
[data-theme=paper2] body:after {
  right:-34px;
  bottom:-44px;
  width:190px;
  height:190px;
  border-radius:50%;
  background:#ffe1ec;
  z-index:0}
[data-theme=paper2] #app:before {
  left:-30px;
  top:90px;
  width:110px;
  height:110px;
  background:#e9f7e6;
  border-radius:24px;
  transform:rotate(18deg);
  z-index:-1}
[data-theme=paper2] #app:after {
  right:96px;
  top:-18px;
  width:0;
  height:0;
  border-left:38px solid transparent;
  border-right:38px solid transparent;
  border-bottom:64px solid #fff2cc;
  z-index:-1}
[data-theme=paper2-dark] {
  --bg: #161320;
  --bg-soft: #1e1a2b;
  --bg-card: #211c2e;
  --bg-card-hover: #282135;
  --ink: #f3ecf7;
  --ink-mid: #d8cde4;
  /* 亮一级：原 #9a8eab 在卡片悬停底 #3a3340 上只有 3.95:1 */
  --ink-dim: #b8aec6;
  --line: #342c45;
  --line-strong: #463a5c;
  --neon-pink: #ff9fbd;
  --neon-cyan: #8fc0ff;
  /* 原 #9a7bff 在 #3a3340 上只有 3.85:1；提亮给「数据从哪来」等小标题用 */
  --neon-purple: #c4b5ff;
  --accent: #ff7fa8;
  --ok: #4fcf9e;
  --warn: #ffb37a;
  --shadow-glow: 0 4px 14px rgba(0, 0, 0, .5);
  --shadow-pink: 0 4px 14px rgba(255, 127, 168, .3);
  --grid-color: transparent;
  --radius: 20px 7px 20px 7px;
  --st-rest: #6fbce4;
  /* 深色底上的小号强调字/ⓘ 图标：原 #ff7fa8 在 #523c4c 上只有 3.7:1 */
  --accent-text: #ffb3c9;
  --warn-text: #ffd0a6;
}
[data-theme=paper2-dark] * {
  text-shadow:none!important}
[data-theme=paper2-dark] .af-相声 {
  color:#3a1826;
  border-color:transparent;
  background:#ff7fa8;
  border-radius:999px;
  box-shadow:0 2px 8px #ff7fa873}
[data-theme=paper2-dark] .af-鼓曲 {
  color:#0e1f18;
  border-color:transparent;
  background:#4fcf9e;
  border-radius:18px 5px;
  box-shadow:0 2px 8px #4fcf9e66}
[data-theme=paper2-dark] .af-评书 {
  color:#0a1626;
  border-color:transparent;
  background:#7fb6ff;
  border-radius:0;
  clip-path:polygon(0 0,100% 0,100% 66%,85% 100%,0 100%);
  filter:drop-shadow(0 2px 5px rgba(127,182,255,.45))}
[data-theme=paper2-dark] .af-戏剧 {
  color:#3a1f0a;
  border-color:transparent;
  background:#ffb37a;
  border-radius:14px 14px 4px;
  box-shadow:0 2px 8px #ffb37a66}
[data-theme=paper2-dark] body:before {
  background-image:none;
  -webkit-mask-image:none;
  mask-image:none}
[data-theme=paper2-dark] body:after,[data-theme=paper2-dark] #app:before,[data-theme=paper2-dark] #app:after {
  content:"";
  position:fixed;
  pointer-events:none}
[data-theme=paper2-dark] body:after {
  right:-34px;
  bottom:-44px;
  width:190px;
  height:190px;
  border-radius:50%;
  background:#2a2140;
  z-index:0}
[data-theme=paper2-dark] #app:before {
  left:-30px;
  top:90px;
  width:110px;
  height:110px;
  background:#1e2a24;
  border-radius:24px;
  transform:rotate(18deg);
  z-index:-1}
[data-theme=paper2-dark] #app:after {
  right:96px;
  top:-18px;
  width:0;
  height:0;
  border-left:38px solid transparent;
  border-right:38px solid transparent;
  border-bottom:64px solid #2e2418;
  z-index:-1}/* ==================== §B 视觉皮肤（原 theme-elements.css） ==================== *//* ==========================================================================
 * 主题元素增强 —— 纯追加（2026-09-24 风格化第二轮：见各段内注释）
 *   1) 每个主题按「明 / 暗」各自定义装饰色板变量，元素全部引用变量 → 明暗开关自动适配
 *   2) 背景元素：position:fixed + pointer-events:none + z-index:-1，永远位于内容之下
 *   3) 结构元素：报头 / 导航 / 卡片 / 页脚 / 返回顶部 的主题化元素与造型
 *   4) 可读性铁律：装饰不许垫在正文/卡片文字下 —— 靠遮罩、让位、降透明度解决，
 *      而不是靠把内容垫实底色（那会丢主题氛围）
 * ========================================================================== *//* ============================== 撕纸 · 做旧剪报 ============================== *//* —— 背景：笔记本横格线（极淡，只添"纸"感，不干扰阅读） —— *//* —— 背景：再补一批不同形状、不同颜色的撕纸碎片 / 胶带 / 印章斑点 —— *//* —— 结构：报头贴胶带 —— *//* —— 结构：导航下面一条歪扭纸边 + 页签撕边 —— *//* —— 结构：卡片加纸纹、页脚撕边、返回顶部不规则纸片 —— *//* ============================== 糖果 · 甜系 ============================== */


[data-theme=paper2] {
  --theme-candy-pink: rgba(255, 179, 198, .6);
  --theme-candy-mint: rgba(168, 230, 207, .55);
  --theme-candy-lemon: rgba(255, 233, 150, .5);
  --theme-candy-sky: rgba(162, 210, 255, .5);
  --theme-candy-grape: rgba(197, 170, 245, .45);
  --theme-candy-stripe-a: rgba(255, 179, 198, .75);
  --theme-candy-stripe-b: rgba(255, 255, 255, .5);
  --theme-candy-sheen: radial-gradient(120% 90% at 18% 0%, rgba(255, 255, 255, .9), transparent 62%)
}
[data-theme=paper2-dark] {
  --theme-candy-pink: rgba(255, 127, 168, .34);
  --theme-candy-mint: rgba(79, 207, 158, .28);
  --theme-candy-lemon: rgba(255, 179, 122, .26);
  --theme-candy-sky: rgba(127, 182, 255, .28);
  --theme-candy-grape: rgba(154, 123, 255, .28);
  --theme-candy-stripe-a: rgba(255, 127, 168, .6);
  --theme-candy-stripe-b: rgba(255, 255, 255, .22);
  --theme-candy-sheen: radial-gradient(120% 90% at 18% 0%, rgba(255, 255, 255, .1), transparent 62%)
}/* —— 背景：泡泡（带高光更像糖球）+ 三角糖 + 撒糖粒 —— */

[data-theme=paper2] .wrap:before,
[data-theme=paper2-dark] .wrap:before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    /* 泡泡高光 */
    radial-gradient(circle at 38% 30%, rgba(255, 255, 255, .55) 0 9%, transparent 24%) 12% 18% / 120px 120px no-repeat,
    radial-gradient(circle at 38% 30%, rgba(255, 255, 255, .55) 0 9%, transparent 24%) 84% 26% / 96px 96px no-repeat,
    radial-gradient(circle at 38% 30%, rgba(255, 255, 255, .55) 0 9%, transparent 24%) 62% 72% / 108px 108px no-repeat,
    radial-gradient(circle at 50% 45%, var(--theme-candy-sky), var(--theme-candy-sky) 44%, transparent 46%) 12% 18% / 120px 120px no-repeat,
    radial-gradient(circle at 50% 45%, var(--theme-candy-lemon), var(--theme-candy-lemon) 44%, transparent 46%) 84% 26% / 96px 96px no-repeat,
    radial-gradient(circle at 50% 45%, var(--theme-candy-grape), var(--theme-candy-grape) 44%, transparent 46%) 62% 72% / 108px 108px no-repeat,
    linear-gradient(135deg, var(--theme-candy-mint) 50%, transparent 50%) 30% 60% / 76px 62px no-repeat,
    /* 撒糖粒 */
    radial-gradient(circle, var(--theme-candy-pink) 0 40%, transparent 42%) 25% 44% / 8px 8px no-repeat,
    radial-gradient(circle, var(--theme-candy-mint) 0 40%, transparent 42%) 55% 14% / 7px 7px no-repeat,
    radial-gradient(circle, var(--theme-candy-grape) 0 40%, transparent 42%) 40% 88% / 7px 7px no-repeat
}
[data-theme=paper2] .wrap:after,
[data-theme=paper2-dark] .wrap:after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(circle at 38% 30%, rgba(255, 255, 255, .55) 0 9%, transparent 24%) 88% 66% / 104px 104px no-repeat,
    radial-gradient(circle at 38% 30%, rgba(255, 255, 255, .55) 0 9%, transparent 24%) 20% 84% / 92px 92px no-repeat,
    radial-gradient(circle at 50% 45%, var(--theme-candy-pink), var(--theme-candy-pink) 44%, transparent 46%) 88% 66% / 104px 104px no-repeat,
    radial-gradient(circle at 50% 45%, var(--theme-candy-mint), var(--theme-candy-mint) 44%, transparent 46%) 20% 84% / 92px 92px no-repeat,
    linear-gradient(45deg, var(--theme-candy-stripe-a) 0 10px, var(--theme-candy-stripe-b) 10px 20px) 70% 34% / 130px 22px no-repeat,
    linear-gradient(-45deg, var(--theme-candy-stripe-a) 0 10px, var(--theme-candy-stripe-b) 10px 20px) 18% 30% / 96px 20px no-repeat,
    radial-gradient(circle, var(--theme-candy-lemon) 0 40%, transparent 42%) 74% 56% / 8px 8px no-repeat,
    radial-gradient(circle, var(--theme-candy-sky) 0 40%, transparent 42%) 88% 86% / 7px 7px no-repeat,
    radial-gradient(circle, var(--theme-candy-pink) 0 40%, transparent 42%) 10% 52% / 7px 7px no-repeat
}/* —— 结构：报头糖果、导航糖果条、页签糖豆 —— */

[data-theme=paper2] .masthead,
[data-theme=paper2-dark] .masthead {
  position: relative
}
[data-theme=paper2] .masthead:before,
[data-theme=paper2-dark] .masthead:before {
  content: "";
  position: absolute;
  left: 4%;
  top: 6px;
  width: 64px;
  height: 64px;
  z-index: -1;
  pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(circle at 36% 30%, rgba(255, 255, 255, .6) 0 12%, transparent 34%), var(--theme-candy-sky)
}
[data-theme=paper2] .masthead:after,
[data-theme=paper2-dark] .masthead:after {
  content: "";
  position: absolute;
  right: 5%;
  top: 42%;
  width: 54px;
  height: 54px;
  z-index: -1;
  pointer-events: none;
  border-radius: 50% 40% 55% 45%;
  background: radial-gradient(circle at 36% 30%, rgba(255, 255, 255, .6) 0 12%, transparent 34%), var(--theme-candy-lemon)
}
[data-theme=paper2] .top-nav:before,
[data-theme=paper2-dark] .top-nav:before {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -3px;
  width: min(860px, 92%);
  height: 7px;
  z-index: -1;
  pointer-events: none;
  transform: translateX(-50%);
  border-radius: 999px;
  background: repeating-linear-gradient(45deg, var(--theme-candy-stripe-a) 0 10px, var(--theme-candy-stripe-b) 10px 20px)
}
[data-theme=paper2] .nav-tab,
[data-theme=paper2-dark] .nav-tab {
  position: relative
}
[data-theme=paper2] .nav-tab:before,
[data-theme=paper2-dark] .nav-tab:before {
  content: "";
  position: absolute;
  left: 7px;
  top: 50%;
  width: 7px;
  height: 7px;
  z-index: 0;
  pointer-events: none;
  border-radius: 50%;
  background: var(--theme-candy-pink);
  transform: translateY(-50%)
}/* —— 结构：卡片糖霜高光、页脚扇贝边、返回顶部圆糖 —— */

[data-theme=paper2] [class*="-card"],
[data-theme=paper2-dark] [class*="-card"] {
  background-image: var(--theme-candy-sheen)
}
[data-theme=paper2] footer:before,
[data-theme=paper2-dark] footer:before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -10px;
  height: 14px;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(circle at 50% 0, var(--theme-candy-pink) 48%, transparent 50%) 0 0 / 30px 14px repeat-x,
    radial-gradient(circle at 50% 0, var(--theme-candy-mint) 48%, transparent 50%) 15px 0 / 30px 14px repeat-x
}
[data-theme=paper2] .back-top,
[data-theme=paper2-dark] .back-top {
  border-radius: 50% 42% 56% 44%;
  box-shadow: 0 4px 10px var(--theme-candy-pink)
}/* ============================== 波普 · 浓重图形 ============================== *//* —— 背景：半调网点（只在左右边栏留白处）+ 粗描边色块 + 黑色斜杠 + 爆炸射线 —— *//* 2026-09-24 可读性修复：网点曾满屏铺在正文下面，波普浅色主题看字费劲。
   现在用纵向遮罩把网点限制在两侧边栏，正文列保持干净；透明度同时下调。 *//* —— 结构：报头爆炸射线、导航警示条、页签粗黑边、卡片网点、页脚警示边 —— *//* 卡片不再铺网点 —— 网点垫在文字下是波普主题"内容看不清"的主因
   （2026-09-24 修复；与移动端规则一致）。风格由粗描边+硬投影保留。 *//* ============================== 胶囊 / 徽标：按风格改造 ============================== *//* 只改形状、描边、投影，不覆盖原有配色语义（语义色由业务类自带） */

[data-theme=paper2] [class*="-pill"], [data-theme=paper2] [class*="-chip"], [data-theme=paper2] [class*="badge"],
[data-theme=paper2-dark] [class*="-pill"], [data-theme=paper2-dark] [class*="-chip"], [data-theme=paper2-dark] [class*="badge"] {
  border-radius: 999px;
  box-shadow: 0 2px 7px var(--theme-candy-pink)
}/* ============================== 数据中心页：概览条按主题上纹理 ============================== */

[data-theme=paper2] .ovs, [data-theme=paper2-dark] .ovs {
  background-image: var(--theme-candy-sheen)
}/* ============================== 移动端：可读性优先 ============================== *//* 小屏可用宽度少，背景元素容易压到正文；此处只做减淡/收敛，不改变原有观感 *//* 波普：网点与色块在小屏最易挡字 —— 正文区垫实底色，大图形收敛 *//* 卡片上的网点在手机上最影响阅读，直接去掉 *//* 撕纸 / 糖果：新增层适度减淡，保留风格但轻压字 */

[data-theme=paper2] .wrap:before, [data-theme=paper2-dark] .wrap:before, [data-theme=paper2] .wrap:after, [data-theme=paper2-dark] .wrap:after {
    opacity: .5
  }/* 重绘全部四主题（v1.4.3：霓虹此前漏加，下拉比其他主题宽出一截空白 —— 与撕纸/糖果/波普统一） */[data-theme=paper2] .theme-dropdown, [data-theme=paper2-dark] .theme-dropdown{
  min-width: 104px;
  padding: 5px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--bg-card);
  border: 1px solid var(--line);}[data-theme=paper2] .theme-opt, [data-theme=paper2-dark] .theme-opt{
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  padding: 6px 8px;
  font-family: var(--font-sans);
  font-size: 12.5px;
  letter-spacing: .02em;
  color: var(--ink);
  background: none;
  border: none;
  text-align: left;
  transition: background .16s, color .16s
}/* 撕纸：不规则圆角 + 纸纹面板 *//* 糖果：大圆角 + 粉色柔影面板 */

[data-theme=paper2] .theme-dropdown, [data-theme=paper2-dark] .theme-dropdown {
  border-radius: 20px;
  border-color: var(--theme-candy-pink);
  box-shadow: 0 10px 22px color-mix(in srgb, var(--theme-candy-pink) 40%, transparent)
}
[data-theme=paper2] .theme-opt, [data-theme=paper2-dark] .theme-opt {
  border-radius: 999px
}
[data-theme=paper2] .theme-opt:hover, [data-theme=paper2-dark] .theme-opt:hover {
  background: rgba(255, 143, 174, .18)
}
[data-theme=paper2] .theme-opt.active, [data-theme=paper2-dark] .theme-opt.active {
  color: var(--accent);
  background: rgba(255, 143, 174, .24)
}/* ==========================================================================
 * 数据中心：去掉波点，风格改由「框」与「胶囊」承载
 *   · 作用域限定为 body.yqdy-stats（仅数据中心），不影响前台
 *   · 撕纸：纸纹 + 不规则纸边 + 胶带角标；胶囊改手撕边
 *   · 糖果：大圆角 + 糖霜高光 + 糖果角球；胶囊改全圆
 *   · 波普：粗黑描边 + 硬投影 + 直角 + 色块角标；胶囊加粗边硬影
 * ========================================================================== *//* ① 波普：数据中心不再出现网点（满屏层 / 卡片 / 概览条） *//* ② 撕纸 *//* ③ 糖果 */

[data-theme=paper2] body.yqdy-stats .panel, [data-theme=paper2-dark] body.yqdy-stats .panel,
[data-theme=paper2] body.yqdy-stats .yr-card, [data-theme=paper2-dark] body.yqdy-stats .yr-card,
[data-theme=paper2] body.yqdy-stats .iw-card, [data-theme=paper2-dark] body.yqdy-stats .iw-card,
[data-theme=paper2] body.yqdy-stats .ovs, [data-theme=paper2-dark] body.yqdy-stats .ovs,
[data-theme=paper2] body.yqdy-stats .tb-group, [data-theme=paper2-dark] body.yqdy-stats .tb-group,
[data-theme=paper2] body.yqdy-stats .seg, [data-theme=paper2-dark] body.yqdy-stats .seg,
[data-theme=paper2] body.yqdy-stats .search, [data-theme=paper2-dark] body.yqdy-stats .search {
  position: relative;
  border-radius: 20px;
  background-image: var(--theme-candy-sheen);
  box-shadow: 0 8px 22px var(--theme-candy-pink)
}
[data-theme=paper2] body.yqdy-stats .panel:before,
[data-theme=paper2-dark] body.yqdy-stats .panel:before {
  content: "";
  position: absolute;
  right: -9px;
  top: -9px;
  width: 26px;
  height: 26px;
  z-index: 1;
  pointer-events: none;
  border-radius: 50%;
  background: var(--theme-candy-lemon)
}
[data-theme=paper2] body.yqdy-stats .seg button, [data-theme=paper2-dark] body.yqdy-stats .seg button,
[data-theme=paper2] body.yqdy-stats .fpill, [data-theme=paper2-dark] body.yqdy-stats .fpill,
[data-theme=paper2] body.yqdy-stats .back, [data-theme=paper2-dark] body.yqdy-stats .back {
  border-radius: 999px;
  box-shadow: 0 2px 7px var(--theme-candy-pink)
}