/* 仕途·登峰 —— 宣纸水墨·卷轴奏折风 */
:root {
  --paper: #f0e3c3;
  --paper2: #e3d3ac;
  --ink: #26241f;
  --ink2: #5b554a;
  /* 三级文字色：全表有 29 处引用 var(--ink3)，但此前从未定义 → 那些声明被浏览器静默丢弃、
     全部退化成「继承父级颜色」。这里补上，恢复设计意图（比 --ink2 更淡的辅助灰）。
     ★ 2026-10-25「字体看不清」总修：原来的 #8a8272 压在纸底 #f0e3c3 上只有 2.99:1，
       远低于 WCAG AA 的 4.5:1 —— 小字看着"灰得发虚"有一半是这个色值的锅。
       改用 #6a6254：纸底 4.73:1（达标）、卡底 5.63:1；仍比 --ink2(5.80) 稍淡，
       保住"三级色更轻"的层次，不会跟正文抢视线。 */
  --ink3: #6a6254;
  /* 办公室面板专用次级色 —— 真正生效的定义在 `.office-panel` 作用域内（见「办公室主面板」段）。
     这里只兜一个全局回退值，防止面板外的误引用拿到 undefined。
     ★ 注意：别再在这里改数值来"提亮办公室"，全局值会被面板作用域覆盖，改了不生效。 */
  --ofc-dim: #554f43;
  --line: #d8ccb8;
  --seal: #a4342b;
  --seal2: #8a2b23;
  --gold: #9a7b3f;
  --ok: #3f7d55;
  --warn: #b4761f;
  --danger: #a4342b;
  --card: #fbf7ef;
  --shadow: 0 1px 2px rgba(60, 45, 20, .07), 0 10px 30px rgba(60, 45, 20, .08);
  /* 宣纸纤维纹理（内联SVG，无外部依赖） */
  --tex: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E");
  /* 水墨远山（底部剪影） */
  --mount: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1440' height='320' viewBox='0 0 1440 320' preserveAspectRatio='none'%3E%3Cg fill='%23808080' opacity='0.07'%3E%3Cpath d='M0,320 L0,268 L64,268 L64,252 L128,252 L128,232 L176,232 L176,244 L232,244 L232,214 L296,214 L296,236 L352,236 L352,206 L420,206 L420,226 L484,226 L484,198 L560,198 L560,224 L628,224 L628,204 L700,204 L700,228 L772,228 L772,210 L844,210 L844,232 L920,232 L920,208 L996,208 L996,226 L1068,226 L1068,202 L1140,202 L1140,224 L1210,224 L1210,206 L1280,206 L1280,230 L1350,230 L1350,214 L1440,214 L1440,320 Z'/%3E%3Cpath d='M0,320 L0,292 L96,292 L96,278 L176,278 L176,286 L264,286 L264,268 L356,268 L356,282 L448,282 L448,264 L548,264 L548,280 L648,280 L648,262 L752,262 L752,278 L856,278 L856,260 L960,260 L960,276 L1064,276 L1064,258 L1172,258 L1172,274 L1284,274 L1284,256 L1440,256 L1440,320 Z'/%3E%3Cpath d='M0,320 L0,304 L140,304 L140,296 L300,296 L300,303 L470,303 L470,292 L640,292 L640,301 L820,301 L820,290 L1000,290 L1000,299 L1180,299 L1180,288 L1360,288 L1360,297 L1440,297 L1440,320 Z'/%3E%3C/g%3E%3C/svg%3E");
  /* ★★ 2026-09-29 玩家要求：**全站改用思源宋体**。
     ────────────────────────────────────────────────
     思源宋体 = Source Han Serif = Noto Serif CJK —— **同一套字**，只是 Adobe 与 Google
     两个发行名。所以栈里两个英文名都给，再补中文别名（手动安装时常注册为「思源宋体」），
     最后才是系统宋体兜底 —— 没装思源宋体的机器也还能看。
     ★ 仍坚持**离线优先**：不引网络字体（一套中文 webfont 十几 MB，加载会拖垮首屏），
       `file://` 直接打开也好看。
     ★ 单一来源：下面所有字体变量都指向 `--font-serif`，改字体只改这一行。 */
  --font-serif: "Noto Serif SC", "Source Han Serif SC", "思源宋体", "Source Han Serif CN", "Noto Serif CJK SC", "Songti SC", "STSong", "SimSun", "宋体", serif;
  --font-base: var(--font-serif);
  /* 标题类原本是楷体（--font-kai），玩家要求统一思源宋体 ⇒ 一并指向它。
     ★ 若想让标题保留楷体的公文味，把下面这行改回：
       --font-kai: "Kaiti SC", "STKaiti", "KaiTi", "楷体", "华文楷体", var(--font-serif); */
  --font-kai: var(--font-serif);
  --font-doc: var(--font-serif);
  /* ★ 这两个变量此前**在用却没定义**（`var()` 取不到值 → 静默继承），是潜在 bug：
       `styles.css` 的箭头/光标、`ui.js` 的国企面板标题都引用了它们。
       既然全站统一思源宋体，这里一并补上，别再留空。 */
  --font-sans: var(--font-serif);
  --fzt: var(--font-serif);
  /* ★ `--serif` 此前也是**在用却没定义**（`.story-h` 引用它）⇒ 一并补上。 */
  --serif: var(--font-serif);

  /* ★★ 2026-10-25 玩家反馈「字体看不清」——本轮新增：**界面小字专用黑体**。
     ────────────────────────────────────────────────
     根因不在颜色、也不在字重，而在**字体族选择**：
       宋体/思源宋体是印刷衬线体，横画只有竖画的 1/4~1/5 粗。
       在 13px 以下，横画落到屏幕上常常不足 1 个整像素 —— 浏览器只能靠
       抗锯齿"猜"出一条灰线，于是整行字看着发虚、发灰、糊成一片。
       强行加粗（font-weight 700）在中文衬线体上没有真正的 Bold 面，
       浏览器只能做「机械加粗/描边」（faux bold），反而把笔画糊得更厚更脏。

     所以按「场合」分工，不搞一刀切：
       · 大标题 / 印章 / 诏书 / 判词（≥15px，本来就大）→ 仍用宋体，保留公文庄重感
       · 正文段落与小字（<15px，屏幕主力阅读区）→ 改用黑体，笔画粗细均匀、横画满像素
     黑体栈特意把「小米 MiSans / 鸿蒙 / 思源黑体 / 苹方 / 雅黑」都列上，
     任一存在即生效；最后 `sans-serif` 兜底，未装任何中文字体也不会掉回衬线。
     ★ 想反过来"全站统一宋体"只需把本行改成 `var(--font-serif)`
       （但玩家会再次反馈看不清，非必要别动）。 */
  --font-ui: "MiSans", "HarmonyOS Sans SC", "Noto Sans SC", "Source Han Sans SC",
    "思源黑体", "Source Han Sans CN", "PingFang SC", "Microsoft YaHei UI",
    "Microsoft YaHei", "微软雅黑", "Hiragino Sans GB", "DengXian", "等线",
    "Segoe UI", system-ui, sans-serif;
  /* 小字专用的三个"提清晰度"档：字号、字重、行高都比正文紧一点更好认 */
  --ui-small-weight: 600;   /* 黑体有真 600，不是 faux bold */
  --ui-small-lh: 1.62;

  /* ★★ 2026-10-25 字体颜色治理：语义「墨色」族（文字专用，随主题翻转）。
     ────────────────────────────────────────────────
     全项目曾有 751 处内联硬编码色（161 种色值），同一屏出现 5~8 种深浅不一的红，
     且深红 #8c1f28 压在深色主题底 #1b1a17 上对比度不足、发虚不可读（深色真 bug）。
     这里立四个「文字墨色」变量，浅色取各族最常用深值（观感基本不变），
     深色取提亮的浅色调（保证 ≥4.5:1）。src 里所有 color:#xxxxxx 语义红/绿/金
     一律换成 var(--*-ink)，同族归一、深浅两主题同时治好。
     · 背景色/边框/canvas fillStyle/SVG fill 不在此列（另议，勿动）。
     · #a4342b→var(--seal)、#3f7d55→var(--ok)、#9a7b3f→var(--gold) 为精确同值，零变化。 */
  --seal-ink: #8c1f28;    /* 深朱红强调字（#8c1f28/#a3311f/#7d241e/#8a2b23 归此） */
  --danger-ink: #c0392b;  /* 亮红警示字（#c0392b/#c05a4a/#b03030/#a03a2a 归此） */
  --ok-ink: #2f6b3a;      /* 绿·利好字（#2f9e6e/#2d7a3e/#27ae60/#2e7d32 归此） */
  --gold-ink: #8a6a1f;    /* 金棕·中性提示字（#b07d2f/#c98a2b 归此） */
}
html[data-theme="dark"] {
  --paper: #1b1a17;
  --paper2: #232119;
  --ink: #e8e0d0;
  --ink2: #a89f8c;
  /* ★ 2026-10-25 同浅色主题：原 #837a6b 在深色底只有 4.11:1、深色卡上 3.89:1（不达标）。
     改 #93897a → 底 5.05:1 / 卡 4.78:1，仍比 --ink2(6.63) 淡一档。 */
  --ink3: #93897a;
  --ofc-dim: #c9bfa9;   /* 同上：仅作全局回退，实际生效值在 .office-panel 内 */
  --line: #3a362c;
  --seal: #d06052;
  --seal2: #e07a6b;
  --gold: #c9a961;
  --ok: #6fae83;
  --warn: #d0a045;
  --danger: #e0685c;
  --card: #211f1a;
  /* ★ 语义墨色的深色主题值：底是 #1b1a17（近黑），文字必须提亮才读得清。
     取各族的暖亮调，与 --seal(#d06052)/--ok(#6fae83) 同族但更亮一档，
     对比度均 ≥5:1。 */
  --seal-ink: #e08a7e;
  --danger-ink: #e88a7a;
  --ok-ink: #7fc091;
  --gold-ink: #d8b877;
  --shadow: 0 1px 2px rgba(0,0,0,.45), 0 10px 30px rgba(0,0,0,.35);
  --tex: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");
  --mount: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1440' height='320' viewBox='0 0 1440 320' preserveAspectRatio='none'%3E%3Cpath d='M0,320 L0,205 C160,158 300,232 520,172 C720,118 900,214 1110,158 C1290,113 1390,184 1440,158 L1440,320 Z' fill='%23e8e0d0' opacity='0.04'/%3E%3Cpath d='M0,320 L0,252 C220,224 360,274 560,244 C760,214 980,264 1180,236 C1320,218 1400,254 1440,240 L1440,320 Z' fill='%23e8e0d0' opacity='0.03'/%3E%3C/svg%3E");
}

* { box-sizing: border-box; }
html { transition: background-color .35s ease, color .35s ease; }
body {
  margin: 0;
  background-color: var(--paper);
  background-image:
    radial-gradient(ellipse at center, transparent 52%, rgba(60,45,20,.11) 100%),
    radial-gradient(circle at 16% 8%, rgba(154,123,63,.07), transparent 42%),
    radial-gradient(circle at 86% 82%, rgba(164,52,43,.05), transparent 46%),
    var(--mount),
    url('deco/side-red.webp?v=20261027PERF1'),
    var(--tex);
  background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
  background-size: auto, auto, auto, 100% 300px, 100% 100%, 180px 180px;
  background-position: center, center, center, bottom center, center, center;
  background-attachment: fixed, fixed, fixed, fixed, fixed, fixed;
  color: var(--ink);
  /* ★★ 2026-10-25「字体看不清」总修的**根上那一刀**：
     原来这里是 var(--font-base) = 宋体。全站 1200+ 处小字（.muted/.small/.tiny
     及各种自有类名）**自己不声明 font-family**，全靠这条继承 —— 于是 11~13px 的
     说明文字全变成"一条灰横线"。逐个补类名改不完（还有大量样式写在 JS 字符串里），
     只能在根上断掉继承：
       · 基础字体 → 黑体（小字、正文段落默认清晰）
       · 大标题（>=15px，共 89 条规则）各自显式声明 var(--font-kai) → 仍是宋体，公文味不变
     这一改，继承链上的所有小字一次性全变黑体，且不依赖任何类名白名单。
     ★ 想退回原样：把本行改回 var(--font-base) 即可。 */
  font-family: var(--font-ui);
  font-size: 18px;
  font-weight: 500;
  line-height: 1.9;
}
::selection { background: rgba(164,52,43,.18); }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: var(--line); border-radius: 6px; }
::-webkit-scrollbar-track { background: transparent; }

.foot {
  text-align: center; color: var(--ink2); font-size: 12px; padding: 22px 12px 40px;
  border-top: 1px solid var(--line); margin-top: 40px;
}
.screen { max-width: min(2200px, 100vw); margin: 0 auto; padding: 20px 18px 8px; }
.themebtn {
  position: fixed; right: 14px; top: 14px; z-index: 60;
  width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--line);
  background: var(--card); color: var(--ink); cursor: pointer; font-size: 16px;
  box-shadow: var(--shadow); transition: transform .2s ease, border-color .2s ease;
}
/* 2026-10-21：外圈换成云纹云头框后，右上角 14/14 正好落在云头上，
   收进云头内侧空白区（框边 60px + 一点余量）。 */
body:has(#gameScreen) .themebtn { right: 72px; top: 20px; }
@media (max-width: 900px) {
  body:has(#gameScreen) .themebtn { right: 46px; top: 14px; }
}
@media (max-width: 640px) {
  body:has(#gameScreen) .themebtn { right: 28px; top: 8px; }
}
.themebtn:hover { transform: rotate(20deg); border-color: var(--seal); color: var(--seal); }

/* ---------- 主菜单 ---------- */
.menuwrap { max-width: 1600px; margin: 28px auto; background: var(--paper); border: 1px solid var(--line); border-top: 4px solid var(--seal); border-radius: 12px; padding: 26px 32px 30px; box-shadow: var(--shadow); }
.mhead { text-align: center; margin-bottom: 22px; padding: 30px 20px 12px; position: relative; }
.mhead h1 {
  position: relative; display: inline-block;
  /* ★ 2026-09-29 全站思源宋体：报头原本是行楷（STXingkai）—— 它是**字标/美术字**，
     改成思源宋体后整站统一。若想让报头保留行楷的报纸味，把这一行改回：
       font-family: "STXingkai", "Kaiti SC", "STKaiti", "KaiTi", "楷体", "华文楷体", serif; */
  font-family: var(--font-serif);
  font-size: 84px; letter-spacing: 18px; margin: 6px 60px 10px;
  font-weight: 900; color: var(--ink);
  text-shadow: 0 2px 0 rgba(255,255,255,.55), 0 4px 14px rgba(120,30,20,.14);
}
.mhead h1::after {
  content: "登峰"; writing-mode: vertical-rl; letter-spacing: 3px;
  position: absolute; top: 2px; right: -50px;
  font-size: 15px; font-weight: 700; color: #fff7ef;
  background: linear-gradient(160deg, var(--seal), var(--seal2));
  padding: 9px 5px; border-radius: 4px;
  box-shadow: 0 3px 8px rgba(120,30,20,.35), inset 0 0 0 1px rgba(255,255,255,.28);
  transform: rotate(-5deg);
}
.mhead .sub { color: var(--ink2); margin: 2px 0 8px; letter-spacing: 3px; font-size: 19.5px; font-weight: 700; }
.mhead .byline { margin: 0 0 12px; color: var(--seal); letter-spacing: 8px; font-size: 16.5px; font-weight: 800; font-family: var(--font-kai); }
.mhead .warnline { display: inline-block; margin: 0 auto 10px; padding: 8px 22px; border: 2px solid var(--seal); border-radius: 10px; background: rgba(164,52,43,.06); color: var(--danger); font-size: 13.5px; font-weight: 800; letter-spacing: 1px; line-height: 1.8; font-family: var(--font-ui); box-shadow: 0 0 0 4px rgba(164,52,43,.08), 0 0 12px rgba(164,52,43,.12); }
.mhead .muted.small { font-style: italic; opacity: .8; }
.center { text-align: center; }
.small { font-size: 12.5px; }
.mt { margin-top: 14px; }
/* ★ 2026-09-19：改前写死 #3a3530。浅色主题下没问题，但深色主题的纸面是 #1b1a17，
   深色字糊在深色底上，对比度只有 **1.36:1**（WCAG 要求正文 ≥4.5:1）——
   全表 1219 处 .muted 在夜间模式里等于整体隐形。
   改用主题变量后：浅色 #5b554a 约 6.5:1、深色 #a89f8c 约 6.8:1，两个主题都达标。
   ★ 不要再写死十六进制颜色：这个表里凡是跟文字有关的颜色都应走 var(--ink*)。 */
.muted { color: var(--ink2); font-weight: 600; }

/* ★ 2026-10-25「字体看不清」总修：小字统一换黑体。
   ────────────────────────────────────────────────
   `.muted` / `.small` / `.tiny` 这三个类是全站小字的主力（`.muted` 全表 1200+ 处），
   它们**自己不声明 font-family**，一路继承 body 的宋体 —— 于是 12px 的说明文字
   全成了"横画一条灰线"，玩家反馈看不清的主因就在这。
   这里单独给它们挂上黑体，不动 body，保证大标题段落仍是宋体的公文味。
   ★ 用 :where() 包一层把特指度压到 0，方便各面板自己的规则覆盖；
     若某处面板已指定字体，仍以面板为准（不打架）。 */
:where(.muted, .small, .tiny, .muted.small, .muted.tiny) {
  font-family: var(--font-ui);
}

.legacybox {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  border: 1px solid var(--line); background: var(--card); padding: 10px 14px; border-radius: 8px; margin-bottom: 12px;
  box-shadow: var(--shadow);
}
.legacybox b { color: var(--seal); font-size: 19px; font-weight: 800; }
.disclist { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.disclist li { border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; background: var(--card); }
.disclist li.cur { border-color: var(--seal); background: rgba(164,52,43,.08); box-shadow: inset 0 0 0 1px var(--seal); }
.disc-h { font-size: 13.5px; font-weight: 700; margin-bottom: 3px; }
.disc-m { font-size: 12px; color: var(--ink2); margin-bottom: 6px; }
.disc-m + .chip.tiny { margin-top: 0; }
.shop {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px;
  border: 1px solid var(--line); background: var(--card); padding: 12px; border-radius: 8px; margin-bottom: 14px;
  box-shadow: var(--shadow);
}
.shopitem {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid var(--line); border-radius: 6px; padding: 7px 10px; cursor: pointer; font-size: 13.5px;
}
.shopitem.owned { border-color: var(--seal); background: rgba(164,52,43,.07); }
.shopitem.dis { opacity: .45; cursor: not-allowed; }
.si-c { color: var(--gold); font-size: 12.5px; white-space: nowrap; }
/* 补遗：传承商店一行是 <label class="shopitem">复选框 + si-n 名称 + si-c 价格。
   .shopitem 是 flex + space-between，.si-c 也有定义，唯独 .si-n 没有——
   名称不撑开，三点会挤在中间偏右，价格贴不到边。 */
.si-n { flex: 1; min-width: 0; }
.shopline { grid-column: 1/-1; font-size: 13px; color: var(--ink2); border-top: 1px dashed var(--line); padding-top: 8px; }

.createform {
  display: grid; grid-template-columns: 1fr 1fr; gap: 14px 20px; margin: 16px 0 22px;
  border: 1px solid var(--line); border-top: 3px solid rgba(154,123,63,.55); border-radius: 8px;
  background: var(--card); padding: 20px 22px; box-shadow: var(--shadow);
}
.createform .row.full { grid-column: 1 / -1; }
.row { display: flex; flex-direction: column; align-items: stretch; gap: 7px; }
.row label { width: auto; color: var(--ink2); font-size: 14px; font-weight: 600; }
.row input, .row select {
  flex: 1; padding: 10px 13px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--paper); color: var(--ink); font-family: inherit; font-size: 15px; font-weight: 600;
}
.row input:focus, .row select:focus { outline: none; border-color: var(--seal); box-shadow: 0 0 0 3px rgba(164,52,43,.12); }

.chief-tip { background: rgba(164,52,43,.08); border-left: 3px solid var(--seal); padding: 8px 12px; border-radius: 6px; font-size: 13px; color: var(--ink2); margin-bottom: 10px; line-height: 1.65; }
.fmt { margin: 12px 0; }
.fmt > label { display: block; font-weight: 600; font-size: 13.5px; color: var(--ink2); margin-bottom: 6px; }
.fmt select { width: 100%; padding: 9px 12px; border: 1px solid var(--line); border-radius: 7px; background: var(--paper); color: var(--ink); font-family: inherit; font-size: 14.5px; font-weight: 500; }
.depbox-wrap { display: grid; gap: 6px; }
.depchk { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--paper); font-size: 14px; cursor: pointer; }
.depchk:hover { border-color: var(--seal); background: rgba(164,52,43,.05); }
.depchk input { flex: none; }
.rad { margin-right: 16px; font-size: 14px; cursor: pointer; }

.sc-sec { margin: 12px 0 0; border-top: 1px dashed var(--line); padding-top: 10px; }
.sc-sh { font-weight: 700; font-size: 13.5px; color: var(--seal); margin-bottom: 8px; letter-spacing: .5px; }
.lobby-row { flex-wrap: wrap; gap: 6px; align-items: center; }
.lobby-ctl { display: flex; gap: 4px; flex-wrap: wrap; margin-left: auto; }
.speech { border-left: 3px solid var(--line); padding: 6px 0 6px 10px; margin-bottom: 8px; }
.speech.support { border-left-color: #4a7c59; }
.speech.oppose { border-left-color: var(--seal); }
.speech.hedge { border-left-color: #9a7b3f; }
.sp-h { font-weight: 700; font-size: 13.5px; margin-bottom: 2px; }
.speech p { margin: 0; font-size: 13.5px; color: var(--ink2); line-height: 1.7; }
.speech.counsel-row { background: var(--card); border-radius: 6px; padding: 8px 10px; border: 1px solid var(--line); border-left: 3px solid var(--line); }
.speech.counsel-row.on { border-left-color: var(--seal); background: #fdf7f6; }
.speech.counsel-row .chip { margin-top: 6px; }

.cover { margin: -26px -32px 10px; border-radius: 12px 12px 0 0; overflow: hidden; height: auto; aspect-ratio: 100 / 36; background: var(--paper); border-bottom: 1px solid var(--line); }
.cover img { width: 100%; height: 100%; object-fit: cover; object-position: top center; display: block; }
/* 起始页封面：新水墨主视觉（menu-art.webp）恢复显示；标题/作者信息以图内文字为主，隐藏重复元素 */
.cover-img { display: block !important; }
.cover-brand { display: none !important; }
.menuwrap .mhead h1 { display: none; }
.menuwrap .mhead .byline-brand { display: none; }
/* 横幅与下方内容区同色：去掉给红图用的压暗滤镜与内阴影，平整无色差 */
.cover { filter: none !important; box-shadow: none !important; background: var(--paper) !important; }
[data-theme="dark"] .cover { filter: brightness(.82) saturate(1.05); }

/* ---------- 按钮 ---------- */
.btn {
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: 9px 18px; border-radius: 7px; cursor: pointer; font-family: inherit; font-size: 15px; font-weight: 700;
  transition: all .18s ease;
}
.btn:hover { border-color: var(--seal); color: var(--seal); transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn.primary { background: var(--seal); color: #fff; border-color: var(--seal); }
.btn.primary:hover { background: var(--seal2); color: #fff; }
.btn.ghost { background: transparent; }
.btn.big { padding: 15px 48px; font-size: 19px; font-weight: 800; letter-spacing: 4px; }
.chip {
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: 6px 13px; border-radius: 14px; cursor: pointer; font-family: inherit; font-size: 13.5px; font-weight: 600;
  transition: all .16s ease;
}
.chip:hover:not([disabled]) { border-color: var(--seal); color: var(--seal); transform: translateY(-1px); }
.chip:active:not([disabled]) { transform: translateY(0); }
.chip[disabled] { opacity: .4; cursor: not-allowed; }
.chip.primary { background: var(--seal); color: #fff; border-color: var(--seal); }
.chip.tiny { padding: 3px 9px; font-size: 12px; }
.acts { display: flex; flex-wrap: wrap; gap: 8px; }
.acts.center { justify-content: center; }
/* 补遗：.acts.center / .acts.vertical 都有定义，唯独 .acts.right 没有。
   人事档案「申请休学（工作高峰）」用的是 <div class="acts right">，
   意图右对齐，实际一直按默认左对齐渲染。 */
.acts.right { justify-content: flex-end; }

/* ---------- 基础表单控件（补遗）----------
   全表没有任何元素级 input / select / textarea 规则，控件样式一律「按类」挂：
   .draft-ta、.dept-ta/.sec-ta、.row input/.row select/.fmt select/.npcsel、
   .appoint-ctl .npcsel、.createform .row input、.tf-form .sel ……
   这本身没问题，但漏掉了几个没被任何按类规则覆盖的控件：
     · .ipt       —— CDK 激活输入框（主菜单与弹窗各一处，全游戏最显眼的输入框）
     · .hr-port   —— 组织人事「拟任去向」下拉（同排的 .npcsel 有规则，它没有）
     · .swapa / .swapb —— 班子洗牌的两个下拉
   它们只能吃浏览器默认外观：白底、直角、13.3px 系统字体，与宣纸水墨风不搭。
   这里补一条元素级兜底。按类规则特异性更高，已有样式一律不受影响；
   checkbox / radio / range / file / color 排除在外，避免把原生控件画坏。 */
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]),
select,
textarea {
  box-sizing: border-box;
  font-family: inherit;
  font-size: 14px;
  color: var(--ink);
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 7px 10px;
  outline: none;
  transition: border-color .16s ease, box-shadow .16s ease;
}
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):focus,
select:focus,
textarea:focus { border-color: var(--seal); box-shadow: 0 0 0 3px rgba(164, 52, 43, .12); }
textarea { resize: vertical; line-height: 1.75; }
[data-theme="dark"] input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]),
[data-theme="dark"] select,
[data-theme="dark"] textarea { background: rgba(255, 255, 255, .05); }

/* ---------- 存档四空位（可折叠，置于主菜单末尾） ---------- */
.slotsfold { margin-top: 18px; border-top: 1px dashed var(--line); padding-top: 12px; }
.slotsbar {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid var(--line); border-radius: 8px; background: var(--card); cursor: pointer;
  padding: 11px 16px; font-family: inherit; transition: all .18s ease;
}
.slotsbar:hover { border-color: var(--seal); color: var(--seal); }
.slotsbar-l { font-size: 14px; font-weight: 800; letter-spacing: 2px; color: var(--seal); }
.slotsbar-r { font-size: 13px; font-weight: 700; color: var(--ink2); }
.slots-count { display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 10px; background: rgba(154,123,63,.14); color: var(--seal); font-size: 12px; }
.slotsfold-body { margin-top: 12px; }
.slotsfold:not(.open) .slotsfold-body { display: none; }
.slots-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 8px; }
.slot-card {
  border: 1px solid var(--line); border-radius: 10px; background: var(--card);
  padding: 12px 14px; box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 8px;
  min-height: 122px;
}
.slot-card.empty { border-style: dashed; background: transparent; box-shadow: none; justify-content: space-between; }
.slot-card.filled { border-top: 3px solid var(--seal); }
.slot-no { font-size: 12px; font-weight: 800; letter-spacing: 1px; color: var(--ink2); }
.slot-card.filled .slot-no { color: var(--seal); }
.slot-body { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.slot-name { font-size: 16px; font-weight: 800; color: var(--ink); }
.slot-meta { font-size: 12.5px; color: var(--ink2); }
.slot-acts { display: flex; gap: 6px; }
.btn.small { padding: 5px 12px; font-size: 13px; }
.linkchip { cursor: pointer; color: var(--seal); text-decoration: underline; }
/* 游戏内“存入存档”面板 */
.savepick { display: flex; flex-direction: column; gap: 8px; font-size: 14px; color: var(--ink2); }
.savepick-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--paper); }
.savepick-row.has { border-left: 3px solid var(--seal); }
.savepick-row.empty { border-style: dashed; }
.savepick-no { font-weight: 800; color: var(--seal); min-width: 34px; }
.savepick-info { font-size: 14px; color: var(--ink); }
@media (max-width: 720px) { .slots-grid { grid-template-columns: repeat(2, 1fr); } }
/* 右侧竖列快捷指令 */
.acts.vertical { display: flex; flex-direction: column; gap: 6px; }
.acts.vertical .chip {
  width: 100%; text-align: left; border-radius: 8px; padding: 9px 13px; font-size: 13px;
  position: relative; overflow: hidden; background: transparent;
}
.acts.vertical .chip::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: var(--seal); transform: scaleY(0); transform-origin: center; transition: transform .18s ease;
  pointer-events: none;   /* ★ 2026-10-15：装饰条不得吃点击 */
}
.acts.vertical .chip:hover:not([disabled]) { transform: translateX(2px); padding-left: 16px; }
.acts.vertical .chip:hover:not([disabled])::before { transform: scaleY(1); }
.acts.vertical .chip.primary { background: var(--seal); color: #fff; }
.acts.vertical .chip[disabled] { padding-left: 13px; }
.acts.vertical .chip[disabled]:hover { transform: none; padding-left: 13px; }

/* ---------- 游戏主界面 ---------- */
.top {
  display: block; text-align: center;
  border-bottom: 3px double var(--ink); padding-bottom: 12px; margin-bottom: 16px;
}
.top-c { text-align: center; }
.top-c .yearline {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 12px;
}
.top-c .year { font-family: var(--font-kai); font-size: 25px; letter-spacing: 3px; font-weight: 700; color: var(--ink); }
.top-c .year .age { margin-left: 10px; color: var(--gold); font-weight: 700; }
.top-c .job { font-family: var(--font-kai); font-size: 26px; margin: 6px 0; font-weight: 700; letter-spacing: 1px; }
.top-c .job b { color: var(--seal); font-size: 27px; }
.top-c .tag { margin-left: 10px; padding: 2px 10px; font-size: 13.5px; font-weight: 600; vertical-align: 2px; }
.top-c .loc { font-size: 15.5px; color: var(--ink2); font-weight: 500; margin-top: 2px; }
.top-c .ap { font-size: 15px; color: var(--ink2); }
.top-c .ap b { font-size: 22px; color: var(--seal); font-weight: 700; margin: 0 4px; }
.top-c .ap-sub { font-size: 12px; }
.top-c .yearline .btn.primary { padding: 6px 16px; font-size: 14px; }
@media (max-width: 900px) {
  .top-c .job { font-size: 22px; }
  .top-c .job b { font-size: 23px; }
  .top-c .year { font-size: 21px; }
}

.layout { display: grid; grid-template-columns: 240px minmax(0, 2fr) 400px; gap: 16px; align-items: start; }
/* 侧栏：左列立绘+属性面板，右列晋升/预警/驻村等（属性面板右侧并排） */
.layout > aside { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; align-items: stretch; }
/* 侧栏结构：住处|立绘 → 两办/赴上级整行 → 嫡系|账本 → 案头|名单（JS 动态分配行列，缺位自动全宽，任何职位都对称无空隙） */
.layout > aside .side-main { grid-column: 1; grid-row: 1; display: flex; flex-direction: column; gap: 6px; min-width: 0; align-self: stretch; }
.layout > aside .side-main .panel { margin-bottom: 0; }
.layout > aside .side-sub { grid-column: 2; grid-row: 1; display: flex; flex-direction: column; gap: 6px; min-width: 0; align-self: stretch; }
.layout > aside .side-sub .panel { margin-bottom: 0; }
/* 侧栏所有面板统一红线描边（与 .side 内面板一致） */
.layout > aside .panel,
.layout > aside .side-hl,
.layout > aside > .hl-fair { border: 3px solid var(--seal); }
/* 两办联络/赴上级对接：整行并排（住处正下方） */
.layout > aside > .sec-lobby-pair { grid-column: 1 / -1; grid-row: 2; width: 100%; min-width: 0; margin: 0; }
/* 嫡系 / 人事账本 / 案头 / 名单：行列由 JS 动态分配（同行并排或单者全宽），此处仅兜底默认列 */
.layout > aside > .panel.disc { grid-column: 1; width: 100%; min-width: 0; margin: 0; }
.layout > aside > .side-hl { grid-column: 2; width: 100%; min-width: 0; margin: 0; }
.layout > aside > .desk-side { grid-column: 1; width: 100%; min-width: 0; margin: 0 !important; }
.layout > aside > .wh-side { grid-column: 2; width: 100%; min-width: 0; margin: 0 !important; }
.layout > aside > .panel.disc, .layout > aside > .side-hl, .layout > aside > .desk-side, .layout > aside > .wh-side { min-height: 340px; }
/* 嫡系与人事账本底色统一（同为 card + 框内色调），避免视觉差异 */
.layout > aside > .panel.disc, .layout > aside > .side-hl { background-color: var(--card) !important; }
/* 同行并排框强制等高（grid 容器 align-items:stretch 下天然等高，此条兜底） */
.layout > aside > .panel.disc, .layout > aside > .side-hl,
.layout > aside > .desk-side, .layout > aside > .wh-side { align-self: stretch; }
/* 公开表态：独立整行 */
.layout > aside > .hl-fair { grid-column: 1 / -1; width: 100%; min-width: 0; margin: 0; }
/* 其余侧栏面板：整行（无内容时不占行，避免底部空隙） */
/* 中央政治局常委 · 分管领域 | 功能入口 并排主面板 */
.sc-hub-row{display:grid;grid-template-columns:1fr 1.15fr;gap:8px;align-items:stretch;margin:0 0 10px}
.sc-hub-row .scene-illus{margin:8px 0 2px}
.sc-hub-row .scene-illus img{height:auto;width:auto;max-width:100%;max-height:108px;object-fit: contain; object-position: center;border-radius:6px}
.sc-sub-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:8px 0}
.sc-sub-item{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px 8px}
.sc-sub-item b{font-size:13px;color:var(--ink)}
.sc-sub-track{height:5px;background:rgba(0,0,0,.06);border-radius:3px;margin-top:4px;overflow:hidden}
.sc-sub-track i{display:block;height:100%;border-radius:3px}
.sc-illus-sm{margin:6px 0 4px}
.sc-illus-sm .scene-illus img{height:auto;width:auto;max-width:100%;max-height:54px;object-fit:contain;border-radius:6px;opacity:.92}
@media(max-width:560px){.sc-sub-grid{grid-template-columns:repeat(2,1fr)}}
.sc-hub-row .sc-hub-port,
.sc-hub-row .sc-hub-entry{border:1px solid var(--line);border-radius:10px;background:var(--card);padding:10px 12px;min-width:0;box-shadow:var(--shadow)}
.sc-hub-row .sc-hub-entry{border-color:rgba(140,31,40,.35);background:linear-gradient(180deg,rgba(140,31,40,.06),transparent 55%),var(--card)}
.sc-entry-grid{display:flex;flex-wrap:wrap;gap:5px}
.sc-entry-grid .sc-entry-btn{flex:1 1 46%;min-width:0;justify-content:flex-start}
.sc-hub-row .hsr-sect h2{font-size:13px;margin:0;letter-spacing:1px}
.sc-hub-row .hsr-tl{display:flex;justify-content:space-between;font-size:12px;margin:4px 0}
@media(max-width:760px){.sc-hub-row{grid-template-columns:1fr}}
.layout > aside > .side:empty { display: none; }
/* 左侧竖列快捷指令（滚动跟随） */
.rail { position: sticky; top: 14px; align-self: start; max-height: calc(100vh - 28px); overflow-y: auto; }
.rail .panel.quick { margin-bottom: 0; padding: 10px 9px; }
.rail .panel.quick h3 { margin-bottom: 12px; font-size: 17px; font-family: var(--font-kai); letter-spacing: 2px; }
.rail .acts.vertical { gap: 5px; }
.rail .acts.vertical .chip { font-size: 14.5px; padding: 9px 11px; }
/* 自由行动列（最左）：折叠标签式，窄列单排 */
.acts-col .acts-panel { margin-bottom: 0; padding: 13px 12px; border-top: 2px solid var(--gold); }
.acts-col .acts-title { font-size: 19px; font-weight: 800; }
.acts-col .acts-title b.ap-now { font-size: 19px; font-weight: 800; }
.acts-col .acts-grid { grid-template-columns: 1fr; gap: 9px; }
.acts-col .grp-tabs { flex-direction: column; align-items: stretch; gap: 8px; margin-top: 12px; }
.acts-col .grp-tab { text-align: left; display: flex; justify-content: space-between; align-items: center; padding: 11px 16px; font-size: 16px; font-weight: 800; }
.acts-col .tip-panel { margin-bottom: 9px; padding: 11px 12px; }
.acts-col .tip-panel h3 { font-size: 14px; font-weight: 600; letter-spacing: 1px; margin-bottom: 7px; }
.acts-col .tip-panel .actbtn { min-height: 40px; padding: 7px 10px; }
.acts-col .tip-panel .actbtn.withwhy { min-height: 40px; }
.acts-col .tip-panel .act-ic { width: 30px; height: 30px; font-size: 16px; }
.acts-col .tip-panel .act-nm { font-size: 14px; }
.acts-col .actbtn { min-height: 54px; padding: 12px 14px; }
.acts-col .actbtn.withwhy { min-height: 60px; }
.acts-col .act-ic { width: 40px; height: 40px; font-size: 20px; }
.acts-col .act-nm { font-size: 16px; font-weight: 800; }
.qgrp { margin-top: 8px; }
.qgrp:first-of-type { margin-top: 0; }
.qgrp-t { font-family: var(--font-ui); font-size: 13px; letter-spacing: 2.5px; color: var(--ink3); padding: 4px 2px 5px; border-bottom: 1px dashed rgba(164,52,43,.18); margin-bottom: 5px; font-weight: 700; }
.qtoggle-grp { margin-top: 10px; }
.qtoggle-grp .qgrp-t.qtoggle {
  cursor: pointer; user-select: none; display: flex; align-items: center; justify-content: space-between;
  background: linear-gradient(160deg, rgba(164,52,43,.10), rgba(212,175,55,.14));
  border: 1px solid rgba(164,52,43,.22); border-radius: 9px;
  padding: 10px 12px; margin-bottom: 6px; letter-spacing: 1.5px;
  color: var(--ink2); font-size: 14px; font-weight: 700;
  box-shadow: 0 1px 2px rgba(0,0,0,.06);
  transition: transform .08s ease, box-shadow .12s ease, background .12s ease, color .12s ease;
}
.qtoggle-grp .qgrp-t.qtoggle::before { content: none; }
.qtoggle-grp .qgrp-t.qtoggle:hover { background: linear-gradient(160deg, rgba(164,52,43,.18), rgba(212,175,55,.24)); box-shadow: 0 2px 7px rgba(164,52,43,.20); transform: translateY(-1px); color: var(--seal); }
.qtoggle-grp .qgrp-t.qtoggle:active { transform: translateY(0); }
.qtoggle-grp .qcaret { font-family: var(--font-sans); font-size: 15px; letter-spacing: 0; color: var(--seal); margin-left: 8px; transition: transform .12s ease; }
.qtoggle-grp.collapsed .acts.vertical { display: none !important; }
/* 布局：宽屏三栏；中宽仍三栏（略窄）；仅窄窗才单列。侧栏不得摊进主区。 */
@media (max-width: 1500px) {
  .layout { grid-template-columns: 210px minmax(0, 1fr) 360px; }
}
@media (max-width: 1100px) {
  .layout { grid-template-columns: 200px minmax(0, 1fr); }
  .layout > aside { grid-column: 1 / -1; }
  .layout > aside { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 900px) {
  .layout { grid-template-columns: 1fr; }
  .layout > aside { grid-template-columns: 1fr 1fr; gap: 6px; }
  .layout > aside .side-main { grid-column: 1; grid-row: 1; }
  .layout > aside .side-sub { grid-column: 2; grid-row: 1; }
  .layout > aside > .sec-lobby-pair { grid-column: 1 / -1; grid-row: 2; }
  /* 嫡系/账本/案头/名单行列由 JS 动态分配，断点不覆盖 inline 定位 */
  .layout > aside > .panel.disc { grid-column: 1; }
  .layout > aside > .side-hl { grid-column: 2; }
  .layout > aside > .desk-side { grid-column: 1; }
  .layout > aside > .wh-side { grid-column: 2; }
  .layout > aside > .hl-fair { grid-column: 1 / -1; }
  .layout > aside > .side { grid-column: 1 / -1; }
  .rail { position: static; max-height: none; overflow: visible; }
  .acts-col { order: 2; }
  .layout > aside { order: 3; }
  .acts-col .acts-grid { grid-template-columns: repeat(auto-fill, minmax(172px, 1fr)); }
  .acts-col .grp-tabs { flex-direction: row; flex-wrap: wrap; }
  .acts-col .grp-tab { width: auto; display: inline-flex; }
  .rail .acts.vertical { flex-direction: row; flex-wrap: wrap; }
  .rail .acts.vertical .chip { width: auto; text-align: center; font-size: 14.5px; padding: 9px 14px; }
  .rail .acts.vertical .chip:hover:not([disabled]) { transform: translateY(-1px); padding-left: 12px; }
  .createform { grid-template-columns: 1fr; }
  .menuwrap { padding: 18px 18px 22px; }
  .menuwrap .cover { margin: -18px -18px 8px; height: auto; }
  .mhead h1 { font-size: 52px; letter-spacing: 8px; margin: 8px 44px 10px; }
  .mhead .warnline { font-size: 12px; padding: 6px 12px; }
}

/* 右侧信息栏：压缩内边距，把宽度让给中间游戏区 */
.layout > aside .panel { padding: 12px 13px; margin-bottom: 12px; }
.layout > aside .panel h3 { font-size: 17px; margin-bottom: 9px; font-family: var(--font-kai); letter-spacing: 2px; }
.layout > aside .stats { gap: 7px; }

/* 住处大卡（与立绘框并排等大）：大图标 + 房型插图 */
.home-side { display: flex; flex-direction: column; border: 3px solid var(--seal) !important; border-radius: 10px; }
.home-side h3 { font-size: 16px; }
.home-side .hs-top { display: flex; gap: 10px; align-items: stretch; margin-bottom: 8px; }
.home-side .hs-ic { flex: 0 0 96px; }
.home-side .hs-ic img, .home-side .hs-ill img { display: block; width: 100%; border: 1px solid rgba(164,52,43,.3); border-radius: 6px; }
.home-side .hs-ic img { aspect-ratio: 1 / 1; object-fit: cover; }
/* 住房框与立绘框对齐：大图限高压缩，整体更紧凑 */
.home-side .hs-ill { margin-bottom: 6px; }
.home-side .hs-ill img { height: 60px; object-fit: cover; }
.home-side .hs-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: center; gap: 5px; font-size: 12.5px; }
.home-side .hs-line b { font-size: 15px; color: var(--ink); }
.home-side .hs-line em { font-style: normal; font-size: 11px; color: var(--seal); border: 1px solid rgba(164,52,43,.45); border-radius: 3px; padding: 0 5px; margin-left: 4px; }
.home-side .hs-line i { font-style: normal; color: var(--line); margin: 0 3px; }
.home-side .hs-desc { margin-top: 2px; }
.home-side .acts { margin-top: 4px !important; }
.home-side .hs-ill img { max-height: 128px; object-fit: cover; object-position: center 35%; }
.home-side .hs-desc { line-height: 1.55; }
.home-side .hs-who { line-height: 1.5; }

/* 任期答卷：目标进度列表 */
.term-goals { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
.term-goal { padding: 8px 10px; background: rgba(245,239,228,.55); border: 1px solid rgba(164,52,43,.22); border-radius: 8px; }
.term-goal .stat-head { margin-bottom: 2px; }
.term-goal .stat-track.mini { height: 7px; }
.layout > aside .promo-line { font-size: 14.5px; margin-bottom: 6px; }

.panel {
  position: relative;
  background: var(--card); border: 1px solid var(--line);
  border-top: 3px solid var(--seal);
  border-left: 3px solid var(--seal);
  border-radius: 10px; padding: 18px 22px; margin-bottom: 16px; box-shadow: var(--shadow);
}
.panel h3 {
  margin: 0 0 12px; font-size: 18.5px; letter-spacing: 1.2px; font-weight: 700;
  font-family: var(--font-kai);
  border-left: 3px solid var(--seal); padding-left: 12px;
}
.panel h3 .muted { font-size: 12.5px; font-weight: 400; }
.panel.event { border-left: 3px solid var(--seal); border-top-color: var(--seal); padding: 24px 30px 26px; }
.panel.event h3 { border-left-color: var(--gold); font-size: 19px; margin-bottom: 14px; }

/* 剧情双栏：左为主事件/AI对话，右为 AI 剧情卡；窄屏只堆叠，绝不隐藏右栏 */
.story-pair { display: grid; grid-template-columns: minmax(0,1.15fr) minmax(0,.85fr); gap: 16px; align-items: stretch; margin-bottom: 16px; }
.story-pair .story-col { min-width: 0; display: flex; flex-direction: column; }
.story-pair .story-col > .panel { flex: 1 1 auto; margin-bottom: 0; height: 100%; }
.story-pair .story-ai .ai-story-placeholder {
  border-left: 3px solid var(--seal); border-top-color: var(--seal);
  display: flex; flex-direction: column; justify-content: center; align-items: center;
  text-align: center; color: var(--ink3); min-height: 180px; height: 100%;
  background: linear-gradient(180deg, rgba(212,175,55,.06), transparent 50%), var(--paper);
}
.story-pair .story-ai .ai-story-placeholder h3 { border-left-color: rgba(154,123,63,.55); color: var(--ink3); }
.story-pair .story-ai .ai-event { border-left-color: var(--seal); }
@media (max-width: 960px) {
  .story-pair { grid-template-columns: 1fr; }
}
.narr { margin: 0 0 14px; text-indent: 2.4em; color: var(--ink); font-weight: 500; font-size: 17.5px; line-height: 2.0; letter-spacing: .02em; }
.narr.small { text-indent: 0; font-size: 13.5px; color: var(--ink2); line-height: 1.85; }
.opts { display: grid; gap: 12px; }
.opt {
  display: flex; justify-content: space-between; align-items: center; gap: 14px; text-align: left;
  border: 1px solid var(--line); border-left: 4px solid rgba(164,52,43,.32); background: var(--card);
  border-radius: 10px; padding: 15px 18px; cursor: pointer; font-family: inherit; font-size: 16px; font-weight: 500; color: var(--ink);
  box-shadow: 0 1px 2px rgba(60,45,20,.05);
  transition: all .18s cubic-bezier(.2,.7,.3,1);
}
.opt:hover { border-color: var(--seal); border-left-color: var(--seal); background: rgba(164,52,43,.07); transform: translateX(4px); box-shadow: 0 3px 14px rgba(120,30,20,.12); }
.opt:disabled { opacity: .45; cursor: not-allowed; transform: none; border-left-color: var(--line); }
.opt:disabled:hover { transform: none; box-shadow: 0 1px 2px rgba(60,45,20,.05); border-color: var(--line); background: var(--card); }
.opt-label { flex: 1; font-size: 17px; font-weight: 700; }
.opt-meta { font-size: 13.5px; font-weight: 600; color: var(--ink2); white-space: nowrap; }
/* 补遗：工会来访 / 工会事件选项用 .opt-label + .opt-sub + .opt-tag 三段式，
   但 .opt-sub / .opt-tag 从未定义——副标题与条件标签只能按默认 16px 硬挤，
   较长的描述会把选项撑变形，条件标签也失去「小徽章」的视觉层次。 */
.opt-sub { font-size: 13px; color: var(--ink2); font-weight: 550; }
.opt-tag { font-size: 12px; color: var(--ink2); background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 0 6px; white-space: nowrap; font-weight: 600; }
/* 校友视图标签行：子元素是 .chip tiny，容器 .uv-tabs / .uv-tools 缺布局，标签会贴成一行无间距 */
.uv-tabs { display: flex; flex-wrap: wrap; gap: 6px; }
.uv-tools { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

.result { border: 1.5px solid var(--seal); border-left-width: 3px; box-shadow: 0 2px 12px rgba(164,52,43,.10); }
.year-end { border-left: 3px solid var(--gold); }
.year-end p { margin: 4px 0; }

/* ---------- 状态面板 ---------- */
.stats { display: grid; gap: 9px; margin-bottom: 12px; }
.stat-head { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--ink2); margin-bottom: 3px; }
.stat-head b { color: var(--ink); font-size: 13.5px; }
.stat-track { height: 7px; background: var(--paper2); border-radius: 3px; overflow: hidden; box-shadow: inset 0 1px 2px rgba(0,0,0,.12); }
.stat-track i { display: block; height: 100%; border-radius: 3px; transition: width .4s ease; background: var(--gold); }
.stat-track i.c-merit { background: linear-gradient(90deg,#9a7b3f,#c9a961); }
.stat-track i.c-popu { background: linear-gradient(90deg,#3f7d55,#6fae83); }
.stat-track i.c-integ { background: linear-gradient(90deg,#4a6f8a,#78a7c4); }
.stat-track i.c-health { background: linear-gradient(90deg,#a4342b,#d0685c); }
.stat-track i.c-stress { background: linear-gradient(90deg,#7a4b8a,#a97ab8); }
.stat-track i.c-family { background: linear-gradient(90deg,#b4761f,#d9ab5c); }
.tri { height: 4px; background: var(--paper2); border-radius: 2px; overflow: hidden; margin-bottom: 2px; box-shadow: inset 0 1px 1px rgba(0,0,0,.1); }
.tri i { display: block; height: 100%; }
.tri i.c-upper { background: var(--seal); }
.tri i.c-mid { background: var(--gold); }
.tri i.c-lower { background: var(--ok); }
b.c-merit, .c-merit { color: var(--gold); }
.danger { color: var(--danger); }
.ok { color: var(--ok); }

.famline { font-size: 12.5px; color: var(--ink2); background: var(--card); border: 1px solid var(--line); border-left: 3px solid var(--gold); border-radius: 6px; padding: 8px 11px; margin-bottom: 12px; }

.promo-line { font-size: 15px; margin-bottom: 7px; line-height: 1.6; }
/* 晋升进度：目标职级 + 总进度 + 分项清单 */
.promo-head {
  display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px;
}
.promo-head .ph-label {
  font-size: 12px; color: var(--ink2); letter-spacing: 1px; font-weight: 600;
}
.promo-head .ph-rank {
  font-family: var(--font-kai); font-size: 22px; font-weight: 800;
  color: var(--seal); letter-spacing: 2px; line-height: 1.1;
}
.promo-head .ph-count {
  margin-left: auto; font-size: 13px; font-weight: 800;
  color: var(--ink2); background: var(--paper2);
  border: 1px solid var(--line); border-radius: 999px;
  padding: 2px 10px; font-variant-numeric: tabular-nums;
}
.promo-head .ph-count.full {
  color: #fff; background: var(--ok); border-color: var(--ok);
}
.promo-bar {
  height: 7px; border-radius: 999px; background: var(--paper2);
  border: 1px solid var(--line); overflow: hidden; margin-bottom: 12px;
  box-shadow: inset 0 1px 2px rgba(60,45,20,.08);
}
.promo-bar i {
  display: block; height: 100%; border-radius: inherit;
  background: linear-gradient(90deg, var(--gold), var(--seal));
  transition: width .35s ease;
}
.checks { list-style: none; padding: 0; margin: 0 0 8px; font-size: 13px; line-height: 1.45; }
.checks li, .checks .chk {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 6px 8px; margin: 0 0 4px; border-radius: 7px;
  color: var(--ink2); background: transparent;
  border: 1px solid transparent;
}
.checks .chk.ok {
  color: var(--ok);
  background: rgba(63,125,85,.07);
  border-color: rgba(63,125,85,.16);
}
.checks .chk.no {
  color: var(--danger);
  background: rgba(164,52,43,.05);
  border-color: rgba(164,52,43,.14);
}
.checks .chk-ic {
  flex: 0 0 auto; width: 18px; height: 18px; line-height: 17px;
  text-align: center; border-radius: 50%; font-size: 11px; font-weight: 800;
  margin-top: 1px;
}
.checks .chk.ok .chk-ic { background: rgba(63,125,85,.18); color: var(--ok); }
.checks .chk.no .chk-ic { background: rgba(164,52,43,.14); color: var(--danger); }
.checks .chk-body { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.checks .chk-label { flex: 1 1 auto; min-width: 0; font-weight: 600; }
.checks .chk-num {
  flex: 0 0 auto; font-variant-numeric: tabular-nums; font-weight: 800;
  font-size: 12px; letter-spacing: .2px; opacity: .9;
}
.checks .chk-num i { font-style: normal; opacity: .55; margin: 0 1px; }
.checks .chk-track {
  flex: 1 1 100%; height: 4px; border-radius: 2px; background: rgba(0,0,0,.08);
  overflow: hidden; margin-top: 2px;
}
.checks .chk-track i {
  display: block; height: 100%; background: currentColor; opacity: .55; border-radius: inherit;
}
.promo-miss {
  margin: 0 0 8px; font-size: 12px; color: var(--warn); line-height: 1.5;
}
.promo-acts { margin-top: 4px; }
.promo-hint { margin: 8px 0 0; line-height: 1.4; }
[data-theme="dark"] .checks .chk.ok {
  background: rgba(111,174,131,.1); border-color: rgba(111,174,131,.22);
}
[data-theme="dark"] .checks .chk.no {
  background: rgba(224,104,92,.08); border-color: rgba(224,104,92,.2);
}
[data-theme="dark"] .promo-head .ph-count.full {
  background: var(--ok); border-color: var(--ok); color: #1b1a17;
}
.checks li.ok { color: var(--ok); }
.checks li.no { color: var(--danger); }
.panel.warn { border-color: var(--seal); border-top-color: var(--seal); }
.panel.warn ul { margin: 0; padding-left: 18px; font-size: 12.5px; color: var(--seal); }

.log { list-style: none; padding: 0; margin: 0; font-size: 14.5px; line-height: 1.75; color: var(--ink2); max-height: 240px; overflow: auto; }
.log li { padding: 6px 2px; border-bottom: 1px dashed var(--line); }
.log b { color: var(--gold); margin-right: 6px; }

/* ---------- 话术博弈 ---------- */
.dialogue { border-color: var(--seal); border-left: 3px solid var(--seal); }
.defbar { display: flex; align-items: center; gap: 10px; font-size: 12.5px; color: var(--ink2); margin-bottom: 10px; }
.defbar .stat-track { flex: 1; }

/* ---------- 弹窗 ---------- */
.modal {
  position: fixed; inset: 0; background: rgba(20,16,10,.55); z-index: 80;
  display: flex; align-items: center; justify-content: center; padding: 20px;
  backdrop-filter: blur(2px);
}
.modal-box {
  background: var(--card); border: 1px solid var(--line); border-top: 4px solid var(--seal);
  border-radius: 12px; max-width: 1100px; width: 100%; max-height: 86vh; display: flex; flex-direction: column;
  box-shadow: 0 24px 70px rgba(0,0,0,.4);
}
.modal-head { display: flex; justify-content: space-between; align-items: center; padding: 14px 22px; border-bottom: 1px solid var(--line); }
.modal-head h3 { margin: 0; font-size: 18px; letter-spacing: 2.5px; color: var(--seal); font-family: var(--font-kai); }
/* 二级/三级页「← 返回父面板」：UI.modal 帧链自动渲染（有父面板才出现）。
   margin-left:auto 把返回+关闭一起推到右侧，h3 仍占左侧；长标题用省略号防挤爆。 */
.modal-back { margin-left: auto; font-size: 13.5px; padding: 5px 11px; max-width: 42%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto; }
.modal-back:hover { background: rgba(164,52,43,.07); }
.modal-body { padding: 18px 22px; overflow: auto; font-size: 17px; line-height: 1.95; }

/* ===== govpower 权限体系（2026-10-13）=====
   gp-bar：协调台账顶部的职权条，灰=无权（可点但会被拦），墨=有权 */
.gp-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 7px 10px; margin-bottom: 8px; background: rgba(0,0,0,.028);
  border-left: 3px solid var(--seal); font-size: 12.5px; }
.gp-role { color: var(--seal); font-family: var(--font-ui); font-size: 14px; font-weight: var(--ui-small-weight); letter-spacing: 1px; }
.gp-ways { display: inline-flex; gap: 6px; }
.gp-way { padding: 2px 8px; border: 1px solid var(--line); border-radius: 3px; color: var(--ink2); white-space: nowrap; }
.gp-way.ok { color: var(--seal); border-color: rgba(164,52,43,.42); background: rgba(164,52,43,.05); }
.gp-way.no { color: var(--ink3); border-style: dashed; opacity: .75; }
.gp-note { flex: 1; min-width: 180px; }

/* showPowerGate：权限不足弹窗 */
.pg { font-size: 15px; line-height: 1.8; }
.pg-card { padding: 10px 12px; margin-bottom: 12px; background: rgba(0,0,0,.03); border: 1px solid var(--line); }
.pg-t { font-family: var(--font-kai); font-size: 17px; color: var(--seal); }
.pg-t i { font-style: normal; font-size: 13px; color: var(--ink2); margin-left: 8px; }
.pg-role { font-size: 13px; color: var(--ink2); margin-top: 3px; }
.pg-can { font-size: 12.5px; color: var(--ink3); margin-top: 3px; }
.pg-why { padding: 9px 12px; margin-bottom: 10px; background: rgba(164,52,43,.06);
  border-left: 3px solid var(--seal); color: var(--ink); }
.pg-row { padding: 6px 0; border-bottom: 1px dashed var(--line); }
.pg-row b { display: inline-block; min-width: 52px; margin-right: 8px; color: var(--ink2); font-weight: 500; }
.pg-row b b { min-width: 0; color: var(--seal); }
.pg-foot { margin-top: 10px; font-size: 12.5px; }

/* ===== leaderactive 领导动态（2026-10-13）===== */
.lf-panel { margin-top: 10px; }
.lf-boss { padding: 7px 10px; margin-bottom: 8px; background: rgba(0,0,0,.028);
  border-left: 3px solid var(--seal); font-size: 13px; }
.lf-boss b { color: var(--seal); font-family: var(--font-kai); font-size: 15px; }
.lf-row { display: flex; gap: 9px; padding: 8px 4px; border-bottom: 1px dashed var(--line);
  cursor: pointer; }
.lf-row:hover { background: rgba(0,0,0,.022); }
.lf-tag { flex: 0 0 auto; align-self: flex-start; padding: 1px 7px; font-size: 11.5px;
  border: 1px solid var(--line); border-radius: 2px; color: var(--ink2); }
.lf-tag.blame { color: #8c2f28; border-color: rgba(164,52,43,.45); background: rgba(164,52,43,.06); }
.lf-tag.praise { color: #2f6b4f; border-color: rgba(47,107,79,.4); }
.lf-tag.urge { color: #8a6a1f; border-color: rgba(138,106,31,.4); }
.lf-body { flex: 1; min-width: 0; }
.lf-who { font-size: 13.5px; color: var(--ink); }
.lf-who i { font-style: normal; font-size: 12px; color: var(--ink2); margin-left: 6px; }
.lf-at { float: right; font-size: 11.5px; color: var(--ink3); }
.lf-why { font-size: 12.5px; color: var(--ink2); line-height: 1.7; margin-top: 2px; }
.lf-why b { color: var(--seal); font-weight: 500; margin-right: 6px; }

/* showLeaderAct 详情 */
.lfa-at { font-size: 12px; color: var(--ink3); margin-bottom: 8px; }
.lfa-why { padding: 9px 12px; margin-bottom: 12px; background: rgba(0,0,0,.03);
  border-left: 3px solid var(--seal); font-size: 14px; }
.lfa-why b { display: block; color: var(--ink2); font-weight: 500; font-size: 12.5px; margin-bottom: 4px; }

/* ===== evaluation 人物评价（2026-10-13）===== */
.ev-panel { margin-top: 10px; }
.ev-overall { padding: 6px 10px; font-size: 13px; color: var(--ink2); margin-bottom: 8px; }
.ev-overall b { font-family: var(--font-kai); font-size: 22px; color: var(--seal); margin: 0 4px; }
.ev-d { display: flex; align-items: center; gap: 8px; padding: 3px 4px; font-size: 12.5px; cursor: help; }
.ev-d:hover { background: rgba(0,0,0,.02); }
.ev-n { flex: 0 0 66px; color: var(--ink2); }
.ev-bar { flex: 1; height: 6px; background: rgba(0,0,0,.08); border-radius: 3px; overflow: hidden; }
.ev-bar i { display: block; height: 100%; background: var(--seal); opacity: .72; }
.ev-v { flex: 0 0 26px; text-align: right; color: var(--ink); }
.ev-h { flex: 0 0 auto; font-size: 11px; }
.ev-adv { margin-top: 9px; padding: 8px 11px; border-left: 3px solid var(--line); background: rgba(0,0,0,.025); }
.ev-adv.good { border-left-color: #2f6b4f; }
.ev-adv.mid  { border-left-color: #8a6a1f; }
.ev-adv.weak { border-left-color: var(--seal); }
.ev-adv-t { font-size: 13.5px; color: var(--ink); margin-bottom: 3px; }
.ev-adv-r { font-size: 12px; line-height: 1.7; }
.ev-adv-c { font-size: 11.5px; margin-top: 4px; font-style: italic; }

.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.tbl th, .tbl td { border-bottom: 1px solid var(--line); padding: 6px 8px; text-align: left; }
.tbl th { color: var(--ink2); font-weight: 500; }

/* ══════════════════════════════════════════════════════════════════════════
   完整履历表 · 分色设计（2026-10-23）
   ──────────────────────────────────────────────────────────────────────────
   问题：.tbl 原本只有一条通用规则 —— td 不带任何颜色声明，
        于是「年份 / 级别 / 单位 / 职务」四列**全是同一个深褐色**，
        表头也只比正文浅一点点。一整屏履历读下来没有任何视觉抓手，
        年份和职务混在一片同色文字里，找"哪一年升了什么"要靠逐字看。
   做法：四列各自承担不同信息，给不同权重与颜色（都是低饱和，不跳）：
         · 年份 —— 时间轴，用朱砂色 + 等宽数字，纵向扫一眼就成一条线
         · 级别 —— 阶梯，用金色 + 中等字重（与全站"荣誉/职级"同一语言）
         · 单位 —— 背景信息，常规墨色但略淡
         · 职务 —— 主信息，最重、最深
       同时：表头改成小字距全大写感的浅色标签，行分隔线隔行淡底，
       让"表头 / 数据"和"行与行"都分层。
   ══════════════════════════════════════════════════════════════════════════ */
.tbl thead th {
  font-size: 11.5px;
  letter-spacing: .12em;
  color: #8a7a5f;
  font-weight: 600;
  background: rgba(140, 100, 40, .06);
  border-bottom: 1px solid rgba(140, 100, 40, .28);
  white-space: nowrap;
}
/* 履历四列分色：年份=朱砂、级别=金、单位=淡墨、职务=深墨
   ★ 2026-10-23：这里必须带 !important。
     实测排查（CSSOM 逐条匹配）发现真正的覆盖源是 styles.css:8281-8287：
       .modal td, .modal th { color: var(--ink) !important; font-weight: 600 !important; }
     那条规则是给"弹窗里所有文字统一成深墨"设的兜底，权重 (0,1,1) 但有 !important。
     我的 .tbl tbody td:nth-child(n) 权重 (0,2,2) 虽更高，却没有 !important，
     在 !important 面前一律无效 —— 所以四列颜色全被压成同一个 rgb(38,36,31)。
     加 !important 后本组规则才能赢；作用域仍限定在 .tbl 内，不影响其它弹窗文字。 */
.tbl-history tbody td:nth-child(1) {
  color: var(--seal) !important;
  font-weight: 700 !important;
  font-variant-numeric: tabular-nums;
  width: 62px;
  white-space: nowrap;
}
.tbl-history tbody td:nth-child(2) {
  /* ★ 2026-10-23 二次调色：原用金色 #9a7b3f，实测与年份朱砂
     **色相只差 35°（4.5° vs 39.6°）、明度 0.64 vs 0.60**，
     两者都偏暖、亮度又接近，人眼会读成"同一组红褐"而不是两种信息。
     改用石青 #4a6f8a（色相 205°，冷色）：
     与朱砂形成冷暖对立，明度 0.54 略低，两者一眼可分；
     石青在米色纸上也压得住，不会跳出来抢「职务」列。 */
  color: #4a6f8a !important;
  font-weight: 700 !important;
  width: 92px;
  white-space: nowrap;
}
.tbl-history tbody td:nth-child(3) {
  color: var(--ink2) !important;
  font-weight: 600 !important;
  width: 34%;
}
.tbl-history tbody td:nth-child(4) {
  color: var(--ink) !important;
  font-weight: 800 !important;
}
/* 表头同理：那条 .modal th 的 !important 也会把表头压平 */
.tbl thead th {
  /* 表头底色实测只有 rgba(140,100,40,.07)，在米色纸上几乎看不出，
     表头与第一行数据会连成一片。加深到 .16 并补一条下边线。 */
  color: #6a5a48 !important;
  font-weight: 700 !important;
  background: rgba(140, 100, 40, .16) !important;
  border-bottom: 1.5px solid rgba(140, 100, 40, .42) !important;
}
/* 隔行淡底：长表也能顺着行读 */
.tbl tbody tr:nth-child(even) td { background: rgba(140, 100, 40, .035); }
.tbl tbody tr:hover td { background: rgba(164, 52, 43, .06); }
/* 履历表本身：字号与行高比通用 .tbl 再放一档。
   通用 .tbl 是 13px / padding 6px 8px，履历动辄十几行，密排读起来很累；
   提到 13.5px / 8px 10px 后行高约 34px，既不虚也不挤。 */
.tbl-history { font-size: 13.5px; }
.tbl-history tbody td, .tbl-history thead th { padding: 8px 10px; }
/* 「近十年考核」等三列表：沿用同一套分色，但中文列稍窄 */
/* 考核等次绿/红：必须与 .modal td 那条 !important 同级对抗，否则永远是深墨。
   （修履历四列时踩过同一个坑，这里是第二次：.modal td 的 !important 权重最高。） */
.tbl tbody tr td.ok { color: #2f6b3a !important; font-weight: 800 !important; }
.tbl tbody tr td.danger { color: #a4342b !important; font-weight: 800 !important; }
.polrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 7px 0; border-bottom: 1px dashed var(--line); }
.polrow .muted { flex: 1; }
/* 常委提议行：提议人·议案说明整行换到第二行，避免两个 muted 平分宽度被挤成竖排 */
.polrow .pr-meta { flex: 1 1 100%; }
.polrow.dim { opacity: .55; }
.opt.on { border-color: var(--seal); border-left-color: var(--seal); background: rgba(164,52,43,.08); cursor: default; }
.opt.on:hover { transform: none; }
.jobcard { border: 1px solid var(--line); border-left: 3px solid var(--seal); border-radius: 8px; padding: 12px 14px; margin-bottom: 10px; background: var(--paper); }
.jobcard-lock { opacity: .8; border-left-color: #b09070; background: rgba(240,235,225,.55); }
.jobcard-lock .jc-h { filter: grayscale(.35); }
.jobcard p { margin: 4px 0; }
.jc-h { font-size: 15px; margin-bottom: 4px; }
.ach { font-size: 13px; padding-left: 18px; color: var(--ink2); }

/* ---------- 商城 ---------- */
.shopbar { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.goods { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 10px; margin-top: 8px; }
.good { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; background: var(--paper); display: flex; flex-direction: column; gap: 6px; transition: all .16s ease; }
.good:hover { border-color: var(--gold); box-shadow: var(--shadow); }
.good.poor { opacity: .55; }
.g-h { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 14.5px; }
.g-ic{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;font-size:16px;border-radius:6px;background:linear-gradient(150deg,#fdf6e3,#f2e3b6);border:1px solid #e2cf9a;margin-right:6px;flex:none}

.g-p { color: var(--seal); font-size: 13.5px; white-space: nowrap; }
.g-d { margin: 0; font-size: 12.5px; color: var(--ink2); line-height: 1.7; }
.g-f { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: auto; }
.gtag { font-size: 11.5px; padding: 1px 8px; border-radius: 10px; border: 1px solid var(--line); color: var(--ink2); }
.gtag.ok { border-color: var(--ok); color: var(--ok); }
.gtag.over { border-color: var(--warn); color: var(--warn); }
.gtag.heavy { border-color: var(--seal); color: var(--seal); }
.gtag.bribe { background: var(--seal); color: #fff; border-color: var(--seal); }
.gtag.refuse { border-color: var(--ink2); color: var(--ink2); }
.chip.hot { border-color: var(--seal); color: var(--seal); font-weight: 700; }

/* ---------- 结局 ---------- */
.endwrap { max-width: 720px; margin: 40px auto; text-align: center; position: relative; }
.endicon { font-size: 62px; }
.endwrap h2 { font-size: 30px; letter-spacing: 6px; margin: 8px 0; position: relative; display: inline-block; font-family: var(--font-kai); }
.endwrap h2::after {
  content: "印"; writing-mode: vertical-rl; font-size: 14px; font-weight: 700; color: #fff7ef;
  background: linear-gradient(160deg, var(--seal), var(--seal2));
  padding: 7px 4px; border-radius: 4px; margin-left: 14px; vertical-align: middle;
  box-shadow: 0 2px 6px rgba(120,30,20,.3), inset 0 0 0 1px rgba(255,255,255,.25);
  transform: rotate(-4deg);
}
.enddesc { color: var(--ink2); }
.endgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 18px 0; }
.endgrid > div { border: 1px solid var(--line); border-top: 3px solid rgba(154,123,63,.5); border-radius: 7px; padding: 9px; background: var(--card); box-shadow: var(--shadow); }
.endgrid span { display: block; font-size: 12px; color: var(--ink2); }
.endgrid b { font-size: 15px; }
.endreview { text-align: left; background: var(--card); border: 1px solid var(--line); border-left: 3px solid var(--seal); padding: 12px 16px; border-radius: 6px; }

/* ---------- toast ---------- */
.toast {
  position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%) translateY(14px);
  background: rgba(38,36,31,.94); color: #f5efe4; padding: 10px 20px; border-radius: 20px;
  font-size: 13.5px; opacity: 0; transition: all .3s ease; z-index: 200; pointer-events: none; max-width: 80vw;
  box-shadow: 0 6px 20px rgba(0,0,0,.3);
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast { white-space: pre-wrap; line-height: 1.65; max-width: min(560px, 88vw); border-radius: 12px; text-align: left; }
.toast.toast-long { bottom: 56px; }

/* 行动后揭晓的属性增减 */
.effline {
  margin: 12px 0 0; padding-top: 9px; border-top: 1px dashed var(--line);
  font-size: 13px; color: var(--seal); letter-spacing: .5px; font-variant-numeric: tabular-nums;
}
.panel.result .result-h { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.panel.result .result-h .result-ic { font-size: 20px; }
.panel.result .result-h .muted { margin-left: auto; }
.effbox {
  margin-top: 14px; padding: 12px 14px; border-radius: 12px;
  background: rgba(140, 30, 30, .05); border: 1px solid rgba(140, 30, 30, .18);
}
.eff-title { font-size: 12px; letter-spacing: 2px; color: var(--seal); opacity: .85; margin-bottom: 9px; }
.eff-grid { display: flex; flex-wrap: wrap; gap: 7px; }
.eff-chip {
  font-size: 13px; font-variant-numeric: tabular-nums; padding: 4px 11px; border-radius: 999px;
  border: 1px solid transparent; font-weight: 600; letter-spacing: .5px;
}
.eff-chip.up { color: #1f7a3d; background: rgba(31, 122, 61, .1); border-color: rgba(31, 122, 61, .28); }
.eff-chip.down { color: #b3261e; background: rgba(179, 38, 30, .1); border-color: rgba(179, 38, 30, .28); }
[data-theme="dark"] .effbox { background: rgba(200, 80, 70, .08); border-color: rgba(200, 80, 70, .25); }
[data-theme="dark"] .eff-chip.up { color: #6fdc97; background: rgba(111, 220, 151, .12); border-color: rgba(111, 220, 151, .3); }
[data-theme="dark"] .eff-chip.down { color: #ff8a80; background: rgba(255, 138, 128, .12); border-color: rgba(255, 138, 128, .3); }

/* ---------- 路线 / 常委 徽标与卡片 ---------- */
.tag {
  display: inline-block; margin-left: 8px; padding: 1px 8px; border-radius: 10px;
  border: 1px solid var(--line); font-size: 12px; font-weight: 400; color: var(--ink2); vertical-align: 2px;
}
.tag.t-power { border-color: #b8a080; color: #6b4226; background: rgba(184,160,128,.1); }
.tag.t-clear { border-color: #a0b8a0; color: #4a6b4a; background: rgba(160,184,160,.1); }
.tag.t-risk { border-color: #c0a060; color: #8b6914; background: rgba(192,160,96,.1); }
.tag.t-route { background: rgba(60,90,120,.12); color: #3a5a78; border-color: rgba(60,90,120,.3); }
.tag.t-standing { background: rgba(170,40,40,.14); color: #a82828; border-color: rgba(170,40,40,.4); font-weight: 600; }
.tag.t-ok { background: rgba(60,120,70,.14); color: #2f7a3f; border-color: rgba(60,120,70,.4); }
.tag.t-no { background: rgba(170,40,40,.12); color: #a82828; border-color: rgba(170,40,40,.35); }
/* 警示标签：此前 ui.js/home.js 有 13 处用 t-warn（承压/碰壁/关系一般/住得紧/排名靠后…），
   但 css 里从未定义，全部退化成中性 .tag，读不出风险色差。用 --warn 变量以自动适配昼夜主题。 */
.tag.t-warn { background: rgba(180,118,31,.13); color: var(--warn); border-color: rgba(180,118,31,.42); }
.tag.t-boss { background: rgba(170,40,40,.16); color: #a82828; border-color: rgba(170,40,40,.45); font-weight: 600; }
.tag.t-old { background: rgba(120,120,120,.14); color: #6a6a6a; border-color: rgba(120,120,120,.4); }

.rel-advice { font-size: 13.5px; line-height: 1.7; padding: 8px 12px; margin: 0 0 8px; border: 1px dashed rgba(170,40,40,.4); border-radius: 8px; background: rgba(170,40,40,.05); }
.rel-advice b { color: var(--seal); }

.scard { border: 1px solid var(--line); border-left: 3px solid var(--accent); border-radius: 8px; padding: 12px 14px; margin: 10px 0; background: rgba(255,255,255,.35); }
.scard.done { border-left-color: var(--line); opacity: .9; }
.ritual-scene { font-family: var(--font-kai, var(--font-base)); color: var(--ink2); font-style: italic; line-height: 1.9; padding: 10px 14px; margin: 4px 0 12px; border-left: 3px solid var(--seal, #9c2b2b); background: rgba(156,43,43,.05); border-radius: 0 8px 8px 0; }
/* ★ 2026-10-16：插图一律**完整显示**，不再裁切。
   旧写法 `img{width:100%;height:100%;object-fit:cover}` + 容器 max-height:170px，
   等于把每张图当成 470×170 的横幅去「填满」——183 张场景图里 168 张比例对不上这个框，
   竖幅/方图上下被切掉一大块（玩家反馈「插图显示不全」）。
   新写法：图按**原始比例**自适应，只封顶高度（max-height 必须留在 img 上，
   容器不能先封顶，否则容器先裁、图再完整也白搭）。宁可整张缩小，也不裁。

   ★ 2026-10-20 第三次改（玩家反馈：「镇域图进入建筑物里面很多插图都是小的，
     都没铺满插图预留的框」）：
     上一版把框留在 width:100%，图却按比例缩到 max-height 170 —— 框的内容盒
     654×172 ≈ 3.8:1，4:3 的图只渲染成 254×170，**只占框宽 38.8%**，
     左右各留 200px 空纸。这不是「图小」，是**框比图大**。
     实测见 tools/_art_town_probe3.js（镇域图里 26 处插图，无一例外）。
     现在：① 框改成 `width:fit-content` —— 框永远裹住图，绝不出现「图比框小」；
           ② max-height 170 → 218 —— 218 = 654/3，正好让 3:1 的横幅图铺满正文宽
              （镇域图那批插图已按 3:1 重出，见 tools/_art_wide_gen.js）；
           ③ 仍然 object-fit:contain、不裁切，2026-10-16 那条「不许裁」继续有效。
     ⚠ 只动「框怎么量」，没动任何插图内容与接线。 */
.scene-illus { width: fit-content; max-width: 100%; margin: 0 auto 18px; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); box-shadow: 0 2px 8px rgba(0,0,0,.06); background: var(--paper); }
.scene-illus img { display: block; width: auto; max-width: 100%; height: auto; max-height: 218px; margin: 0 auto; object-fit: contain; object-position: center; }

/* 爽局叙事：红字楷体，朱红底，仪式感 */
.narr.story-glory {
  font-family: var(--font-kai, var(--font-base));
  color: var(--seal, #9c2b2b);
  font-weight: 600;
  font-size: 17px;
  line-height: 2.0;
  background: linear-gradient(180deg, rgba(156,43,43,.06), rgba(156,43,43,.02));
  border-left: 4px double var(--seal, #9c2b2b);
  padding: 10px 16px;
  margin: 10px 0;
  border-radius: 0 8px 8px 0;
  letter-spacing: .02em;
}
.narr.story-glory::before {
  content: '◈ ';
  color: var(--seal, #9c2b2b);
  font-size: 14px;
  margin-right: 4px;
}
/* 翻车叙事：灰字斜体，哑光暗纹，痛的代价 */
.narr.story-misfortune {
  font-style: italic;
  color: #6b6258;
  font-size: 15px;
  line-height: 1.85;
  background: rgba(0,0,0,.025);
  border-left: 3px solid #6b6258;
  padding: 8px 14px;
  margin: 10px 0;
  border-radius: 0 8px 8px 0;
  opacity: .92;
}
/* 爽局成就卡片：金榜题名式弹窗 */
.glory-card {
  position: relative;
  background: linear-gradient(180deg, #fbf3e4 0%, #f4e6c8 100%);
  border: 2px solid var(--seal, #9c2b2b);
  border-radius: 8px;
  padding: 28px 26px 24px;
  margin: 4px 0;
  font-family: var(--font-kai, var(--font-base));
  color: #5a1e1e;
  overflow: hidden;
  box-shadow: 0 6px 20px rgba(156,43,43,.18);
}
.glory-banner {
  font-size: 28px;
  font-weight: 700;
  letter-spacing: .15em;
  color: var(--seal, #9c2b2b);
  text-align: center;
  border-bottom: 1px solid rgba(156,43,43,.35);
  padding-bottom: 10px;
  margin-bottom: 10px;
}
.glory-sub {
  text-align: center;
  font-size: 14px;
  color: #8a5a3a;
  margin-bottom: 14px;
  letter-spacing: .08em;
}
.glory-body {
  font-size: 16px;
  line-height: 2.0;
  color: #5a3a2a;
}
.glory-body .narr { color: #5a3a2a; background: transparent; border: 0; padding: 0; margin: 0; font-family: inherit; }
.glory-seal {
  position: absolute;
  right: 18px;
  bottom: 14px;
  width: 64px;
  height: 64px;
  line-height: 64px;
  text-align: center;
  font-family: var(--font-kai, var(--font-base));
  font-size: 36px;
  font-weight: 700;
  color: #fff;
  background: var(--seal, #9c2b2b);
  border: 3px solid #fff;
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--seal, #9c2b2b);
  transform: rotate(-8deg);
  opacity: .92;
  letter-spacing: 0;
}
[data-theme="dark"] .scene-illus { border-color: rgba(255,255,255,.1); box-shadow: 0 2px 10px rgba(0,0,0,.25); }
.scard .sc-h { font-weight: 600; margin-bottom: 4px; }
.modal-body .scard .acts { margin-top: 8px; }

.appoint-row { display: block; border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; margin: 10px 0; }
.appoint-row .sc-h { margin-bottom: 6px; }
.appoint-ctl { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.appoint-ctl .npcsel { flex: 1; min-width: 160px; padding: 6px 8px; border-radius: 6px; border: 1px solid var(--line); background: var(--paper); color: var(--ink); }
.chip.danger { background: rgba(170,40,40,.12); color: #a82828; border-color: rgba(170,40,40,.4); }
.chip.danger:hover { background: rgba(170,40,40,.2); }
[data-theme="dark"] .scard, [data-theme="dark"] .appoint-row { background: rgba(255,255,255,.04); }

/* ---------- 任职通告（红头文件式公文） ---------- */
.promonav { display: flex; gap: 6px; margin-bottom: 12px; }
.promo-pane { display: none; }
.promo-pane.active { display: block; }

.promo-doc {
  position: relative; background: var(--paper); border: 1px solid var(--line);
  border-radius: 4px; padding: 0 30px 22px; box-shadow: 0 4px 18px rgba(0,0,0,.08);
  font-family: var(--font-doc); line-height: 1.95; overflow: hidden;
}
.promo-doc .pd-banner { margin: -26px -30px 16px; }
.promo-doc .pd-banner img { width: 100%; display: block; }
.promo-doc .pd-head { text-align: center; }
.promo-doc .pd-issuer { color: #a82828; font-size: 21px; font-weight: 700; letter-spacing: 3px; }
.promo-doc .pd-no { color: var(--ink); opacity: .7; font-size: 13px; letter-spacing: 1px; margin-top: 2px; }
.promo-doc .pd-rule { height: 2px; background: #a82828; margin: 10px 0 16px; }
.promo-doc .pd-title { text-align: center; font-size: 19px; font-weight: 700; margin: 0 0 14px; letter-spacing: 1px; }
.promo-doc .pd-line { white-space: pre-wrap; margin: 0 0 3px; font-size: 15px; font-weight: 500; color: #1a1a1a; }
.promo-doc .pd-rec { font-weight: 700; margin-bottom: 12px; font-size: 15.5px; }
.promo-doc .pd-sec { margin-top: 14px; padding-top: 10px; border-top: 1px dashed var(--line); }
.promo-doc .pd-sh { font-weight: 700; font-size: 16px; color: #a82828; border-left: 3px solid #a82828; padding-left: 8px; margin-bottom: 6px; }
.promo-doc .pd-foot { margin-top: 22px; display: flex; justify-content: flex-end; align-items: flex-end; gap: 18px; }
.promo-doc .pd-sign { text-align: right; font-size: 15px; line-height: 1.7; font-weight: 600; }
.promo-doc .pd-seal {
  width: 52px; height: 52px; border: 2.5px solid #a82828; color: #a82828; border-radius: 6px;
  display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 700;
  transform: rotate(-7deg); opacity: .85; letter-spacing: 2px;
}
/* 正文与抄送 */
.promo-doc .pd-body { margin: 4px 0 0; }
.promo-doc .pd-copies {
  margin-top: 12px; padding-top: 8px; border-top: 1px solid var(--line);
  font-size: 12.5px; opacity: .78; white-space: pre-wrap;
}
/* 附件：干部任免审批表 */
.promo-doc .pd-att { margin-top: 20px; padding-top: 14px; border-top: 2px solid #a82828; }
.promo-doc .pd-att-t {
  text-align: center; font-size: 16px; font-weight: 700; letter-spacing: 2px;
  color: #a82828; margin-bottom: 12px;
}
.promo-doc .pd-tbl {
  width: 100%; border-collapse: collapse; font-size: 15px; margin-bottom: 10px;
  border: 1px solid var(--line);
}
.promo-doc .pd-tbl th, .promo-doc .pd-tbl td {
  border: 1px solid var(--line); padding: 8px 10px; line-height: 1.6; vertical-align: middle;
}
.promo-doc .pd-tbl th {
  width: 12%; background: rgba(168,40,40,.07); font-weight: 700;
  white-space: nowrap; text-align: center; color: #a82828;
}
.promo-doc .pd-tbl td { width: 38%; }
.promo-doc .pd-tbl td.c { text-align: center; }
.promo-doc .pd-tbl3 th { width: 20%; }
.promo-doc .pd-tbl3 td { width: auto; }
.promo-doc .pd-tbl3 td:last-child { width: 50%; }
.promo-doc .pd-kv {
  display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 15px;
  padding: 6px 8px; border: 1px solid var(--line); border-top: none; margin: -10px 0 10px;
}
.promo-doc .pd-kv span { opacity: .7; }
.promo-doc .pd-kv b { font-weight: 700; margin-right: 6px; }
.promo-doc .pd-resume { margin-bottom: 10px; }
.promo-doc .pd-resume .pd-line { font-size: 15px; }
[data-theme="dark"] .promo-doc { background: #23211d; box-shadow: 0 4px 18px rgba(0,0,0,.35); }
[data-theme="dark"] .promo-doc .pd-issuer, [data-theme="dark"] .promo-doc .pd-sh { color: #d15656; }
[data-theme="dark"] .promo-doc .pd-seal { color: #d15656; border-color: #d15656; }
[data-theme="dark"] .promo-doc .pd-att { border-top-color: #d15656; }
[data-theme="dark"] .promo-doc .pd-att-t { color: #d15656; }
[data-theme="dark"] .promo-doc .pd-tbl th { color: #d15656; background: rgba(209,86,86,.12); }
/* 省对下财政小表（mini-table）
   全表没有任何元素级 table / th / td 规则，唯一带表格样式的是 .promo-doc .pd-tbl，
   而它被限定在「公示公文」容器里。这个表只带了内联 width:100%，
   单元格零内边距、无分隔线，四列数字挤成一团。 */
.mini-table { border-collapse: collapse; font-size: 13px; }
.mini-table th { text-align: left; font-weight: 700; color: var(--ink2); background: var(--paper2); padding: 6px 9px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.mini-table td { padding: 5px 9px; border-bottom: 1px dashed var(--line); }
.mini-table tr:last-child td { border-bottom: none; }

/* 晋升喜报 */
.story { position: relative; padding: 6px 4px 2px; }
.story-seal {
  position: absolute; top: -14px; right: 2px;
  width: 48px; height: 48px; border-radius: 7px;
  background: #9e2b25; color: #f3e9d2;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-kai); font-size: 28px; font-weight: 700;
  box-shadow: 0 3px 10px rgba(80, 12, 8, 0.4);
  transform: rotate(-7deg);
  border: 2px solid rgba(243, 233, 210, 0.55);
}
.story-h { text-align: center; color: #7a1f1a; font-family: var(--serif); font-size: 20px; margin: 2px 0 0; }
.story-sub { text-align: center; color: #9a6b3f; font-size: 13px; margin: 2px 0 10px; letter-spacing: 1px; }
.story-text { line-height: 1.9; color: var(--ink); }
.story-text p { margin: 7px 0; text-indent: 0; font-weight: 550; }
.story-text p:first-child { font-weight: 600; color: #5a1813; }

/* ---------- 人物立绘：红金相框 · 云纹底 · 铭牌 ---------- */
.portrait { display: block; object-fit: cover; background: var(--paper2); }
.hero-frame {
  position: relative;
  width: 132px; max-width: 100%;
  margin: 0 auto 12px;
  border: 3px double rgba(154,63,63,.9);
  outline: 1px solid rgba(212,175,55,.65); outline-offset: 3px;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 0 0 4px rgba(154,63,63,.07), 0 6px 18px rgba(60,45,20,.16);
  background: var(--paper);
  line-height: 0;
}
.hero-frame::before { content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: url('deco/cloud-pattern.webp?v=20261027PERF1') center / cover; opacity: .42; }
.hero-frame .portrait.hero { position: relative; z-index: 1; }
/* 立绘内框：肖像四周红色内衬线（用户参考图样式） */
.hero-frame .portrait.hero { box-shadow: inset 0 0 0 4px rgba(154,63,63,.9), inset 0 0 0 8px rgba(154,63,63,.18); }
/* 四角金饰 */
.hc { position: absolute; width: 17px; height: 17px; z-index: 2; pointer-events: none; }
.hc-tl { top: -2px; left: -2px; border-top: 3px solid var(--gold); border-left: 3px solid var(--gold); border-top-left-radius: 8px; }
.hc-tr { top: -2px; right: -2px; border-top: 3px solid var(--gold); border-right: 3px solid var(--gold); border-top-right-radius: 8px; }
.hc-bl { bottom: -2px; left: -2px; border-bottom: 3px solid var(--gold); border-left: 3px solid var(--gold); border-bottom-left-radius: 8px; }
.hc-br { bottom: -2px; right: -2px; border-bottom: 3px solid var(--gold); border-right: 3px solid var(--gold); border-bottom-right-radius: 8px; }
.hero-sigil { position: absolute; z-index: 2; right: 6px; bottom: 4px; font-size: 15px; line-height: 1;
  color: rgba(154,63,63,.5); font-family: var(--font-kai); pointer-events: none; }
.portrait.hero {
  width: 100%; height: 172px; margin: 0;
  display: block; object-fit: cover; object-position: top center;
  border: none; border-radius: 0; box-shadow: none; outline: none;
}
.hero-card {
  text-align: center; padding: 14px 14px 12px;
  background: linear-gradient(180deg, rgba(212,175,55,.1), transparent 40%), var(--card);
}
.hero-meta { display: flex; flex-direction: column; gap: 3px; align-items: center; }
.hero-meta b.hero-name { font-family: var(--font-kai); font-size: 20px; letter-spacing: 4px; color: var(--ink);
  border-bottom: 2px solid rgba(212,175,55,.75); padding-bottom: 3px; }
.hero-meta span { font-size: 12px; color: var(--ink2); }
/* 单位 · 职位：朱红加重 */
.hero-meta span.hero-post { font-size: 13px; font-weight: 800; color: var(--seal); letter-spacing: .5px; line-height: 1.45; }
.hero-age { color: var(--gold) !important; font-weight: 700; letter-spacing: 1.5px; font-size: 12.5px !important; }
[data-theme="dark"] .hero-frame { outline-color: rgba(212,175,55,.5); }
[data-theme="dark"] .hero-name { color: #f2e6c8; }
.portrait.mini { width: 30px; height: 30px; border-radius: 50%; display: inline-block; vertical-align: middle; border: 1px solid var(--line); flex: none; }
.portrait.net { width: 44px; height: 44px; border-radius: 8px; border: 1px solid var(--line); }
[data-theme="dark"] .portrait { filter: saturate(1.05) brightness(.95); }

/* ---------- 关系网·家人分区 ---------- */
.net-sec + .net-sec { margin-top: 18px; border-top: 1px dashed var(--line); padding-top: 14px; }
tr.net-group td { background: var(--paper); padding: 6px 8px; border-top: 2px solid var(--line); font-size: 13px; }
.desk-side, .disc { font-weight: 700; color: #1a1a1a; }
/* 侧栏面板标题小图标（案头工作台/名单风声等） */
.layout > aside .side-ic { width: 20px; height: 20px; vertical-align: -4px; margin-right: 5px; border-radius: 4px; box-shadow: 0 0 0 1px rgba(164,52,43,.25); }
/* 案头工作台紧凑版：工作按钮两列网格 + 师徒/同科室合并一行 */
.desk-side .desk-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; margin-top: 5px; }
.desk-side .desk-grid .chip { width: 100%; text-align: center; padding: 4px 5px; font-size: 12px; }
.desk-side .desk-folk { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; font-size: 12px; line-height: 1.5; margin: 4px 0; color: var(--ink2); }
.desk-side .desk-idle p { font-size: 12px; margin: 2px 0; }
.desk-side .desk-subject { font-size: 12px; display: flex; align-items: center; gap: 5px; flex-wrap: nowrap; }
.desk-side .desk-subject .chip { font-size: 11px; padding: 2px 6px; margin-left: auto; flex: none; }
.desk-side .city-side-foot { margin-top: 4px; }
/* 赴上级与案头：白底按钮统一朱红底白字 */
.lobby-side .chip:not(.primary), .desk-side .desk-grid .chip, .desk-side .city-side-foot .chip { background: var(--seal); color: #fff; border-color: var(--seal); }
.lobby-side .chip:not(.primary):hover:not([disabled]), .desk-side .desk-grid .chip:hover:not([disabled]), .desk-side .city-side-foot .chip:hover:not([disabled]) { background: var(--cinnabar-d); color: #fff; }
/* 同上：#333 也是写死的深色字，夜间模式同样不可读，一并改走主题变量 */
.desk-side .muted, .disc .muted, .desk-side .muted.small, .disc .muted.small { font-weight: 600; color: var(--ink2); }
.fam-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 12px; margin: 10px 0 4px; }
.fam-card { display: flex; gap: 10px; align-items: center; background: rgba(255,255,255,.05); border: 1px solid var(--line); border-radius: 12px; padding: 10px; transition: transform .18s ease, box-shadow .18s ease; }
.fam-card:hover { transform: translateY(-2px); box-shadow: 0 6px 18px rgba(0,0,0,.1); }
[data-theme="dark"] .fam-card { background: rgba(255,255,255,.035); }
.portrait.fam { width: 50px; height: 62px; border-radius: 10px; object-fit: cover; object-position: top center; border: 1px solid var(--line); flex: 0 0 auto; }
.fam-card { cursor: pointer; }
.fam-card[role="button"]:hover { border-color: var(--seal); box-shadow: 0 6px 18px rgba(0,0,0,.12); }

/* ---------- 家庭系统激活：家风档位条 / 缺席度文字档 / 年度仪式 ---------- */
.fam-strip { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; margin: 8px 0 10px; background: var(--card); }
[data-theme="dark"] .fam-strip { background: rgba(255,255,255,.03); }
.fam-strip .fs-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 3px 0; }
.fam-strip .fs-row + .fs-row { border-top: 1px dashed var(--line); }
.fam-strip .fs-lab { flex: 0 0 34px; color: var(--ink2); font-size: 12.5px; font-weight: var(--ui-small-weight); letter-spacing: .12em; font-family: var(--font-ui); }
.fam-strip .fs-tier { font-family: var(--font-kai); font-size: 15px; }
.ft-bar { display: inline-flex; gap: 3px; }
.ft-seg { padding: 1px 7px; border-radius: 999px; font-size: 12px; color: var(--ink2); border: 1px solid var(--line); opacity: .55; white-space: nowrap; }
.ft-seg.on { opacity: 1; color: #fff; background: var(--ftc, var(--seal)); border-color: transparent; font-weight: 600; }
.fs-abs { font-family: var(--font-kai); font-size: 15px; }
.fs-abs.warn { color: var(--warn); }
.fs-abs.bad { color: var(--danger); }
.fs-secret { font-size: 12px; color: var(--ink2); border: 1px dashed var(--line); border-radius: 999px; padding: 1px 8px; }
.fs-rit { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.fr-item { display: inline-flex; align-items: baseline; gap: 5px; font-size: 12.5px; border: 1px solid var(--line); border-radius: 8px; padding: 2px 8px; }
.fr-item.hot { border-color: var(--seal); background: rgba(164,52,43,.06); }
.fr-item i { font-style: normal; color: var(--ink2); font-size: 11.5px; }
.fr-item em { font-style: normal; color: var(--ok); font-size: 11.5px; }
.fam-strip .fs-tip { padding-top: 4px; }

/* 关系网人物对话 */
.chat-frame { overflow: hidden; border-radius: 12px; }
.chat-bar { background: var(--seal); color: #fff; font-family: var(--font-title, '方正小标宋简体', serif);
  font-size: 15px; font-weight: 700; padding: 9px 14px; letter-spacing: 1px; line-height: 1.4; }
.chat-frame .chat-wrap { padding: 12px; }
.chat-frame .scene-illus { border-radius: 8px; }
.chat-wrap { display: flex; flex-direction: column; gap: 10px; }
.chat-head { display: flex; gap: 12px; align-items: center; padding-bottom: 10px; border-bottom: 1px dashed var(--line); }
.chat-av { width: 34px; height: 42px; border-radius: 8px; object-fit: cover; object-position: top center; border: 1px solid var(--line); flex: 0 0 auto; }
.chat-av.big { width: 60px; height: 74px; border-radius: 10px; }
.chat-meta { font-size: 13.5px; line-height: 1.75; }
.chat-src { display: inline-block; margin-top: 3px; font-size: 12px; padding: 1px 8px; border-radius: 20px; border: 1px solid var(--line); opacity: .75; }
.chat-src.on { color: #2e7d5b; border-color: #2e7d5b; opacity: 1; }
[data-theme="dark"] .chat-src.on { color: #6ec79b; border-color: #6ec79b; }
.chat-log {
  max-height: 46vh; min-height: 160px; overflow-y: auto; padding: 12px;
  background: rgba(0,0,0,.025); border: 1px solid var(--line); border-radius: 12px;
}
[data-theme="dark"] .chat-log { background: rgba(255,255,255,.03); }
.chat-msg { display: flex; gap: 8px; margin-bottom: 12px; align-items: flex-start; }
.chat-msg.me { justify-content: flex-end; }
.chat-bub {
  max-width: 76%; padding: 9px 13px; border-radius: 12px; font-size: 14.5px; line-height: 1.8;
  white-space: pre-wrap; border: 1px solid var(--line); background: rgba(255,255,255,.7);
}
.chat-msg.npc .chat-bub { border-top-left-radius: 3px; }
.chat-msg.me .chat-bub { border-top-right-radius: 3px; background: rgba(168,40,40,.08); border-color: rgba(168,40,40,.28); }
[data-theme="dark"] .chat-bub { background: rgba(255,255,255,.05); }
[data-theme="dark"] .chat-msg.me .chat-bub { background: rgba(209,86,86,.16); }
.chat-sys { margin: 8px 0; text-align: center; font-size: 12.5px; color: var(--seal); opacity: .9; }
.chat-intents { display: flex; flex-wrap: wrap; gap: 6px; }
.chat-input { display: flex; gap: 8px; }
.chat-input .inp { flex: 1; }
/* 送礼回响弹窗 */
.gift-who { display: flex; align-items: baseline; gap: 8px; margin: 10px 2px 6px; }
.gift-who b { font-size: 16px; color: var(--seal); }
.gift-who .muted small { margin-left: auto; }
.gift-story {
  margin: 6px 0; padding: 10px 12px; border-radius: 10px; font-size: 14px; line-height: 1.85;
  border: 1px dashed var(--line); background: rgba(0,0,0,.02); white-space: pre-wrap;
}
.gift-ai { margin: 8px 0; min-height: 34px; }
.gift-ai-bub { display: flex; gap: 8px; align-items: flex-start; }
.gift-ai-bub .chat-av { width: 34px; height: 42px; }
.gift-ai-bub > div {
  flex: 1; padding: 9px 13px; border-radius: 12px; border-top-left-radius: 3px;
  font-size: 14.5px; line-height: 1.85; border: 1px solid rgba(168,40,40,.3);
  background: rgba(168,40,40,.06);
}
.gift-opts { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 10px; }
.gift-opts .chip { font-size: 13px; }
.aicfg .row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.aicfg .row > span { width: 78px; flex: 0 0 auto; font-size: 14px; opacity: .8; }
.aicfg .inp { flex: 1; }
.aicfg-btns { display: flex; gap: 8px; }
.aicfg-tip { margin: -6px 0 12px; padding-left: 0; }
.aicfg-tip code, .aicfg code { background: rgba(140,30,30,.1); border: 1px solid rgba(140,30,30,.18); border-radius: 4px; padding: 1px 5px; font-family: var(--font-mono, monospace); font-size: 12.5px; color: #9b2c2c; }
.aicfg-tip b { color: #9b2c2c; }

/* 人物档案 */
.dossier { display: flex; flex-direction: column; gap: 10px; }
.dos-head { display: flex; gap: 14px; align-items: center; }
.dos-av { width: 74px; height: 92px; border-radius: 12px; object-fit: cover; object-position: top center; border: 1px solid var(--line); flex: 0 0 auto; }
.dos-head-t h4 { margin: 0 0 4px; font-size: 19px; }
.dos-sub { font-size: 13px; opacity: .82; line-height: 1.9; }
.dos-meters { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 12px; }
.dos-meter { display: flex; align-items: center; gap: 10px; font-size: 13px; }
.dos-meter > span { width: 34px; flex: 0 0 auto; opacity: .8; }
.dos-meter > b { width: 28px; text-align: right; flex: 0 0 auto; }
.dos-bar { flex: 1; height: 8px; border-radius: 20px; background: rgba(0,0,0,.08); overflow: hidden; }
.dos-bar i { display: block; height: 100%; background: var(--seal); border-radius: 20px; }
.dos-bar.g i { background: #c98a2b; }
.dos-bar.c i { background: #2e7d5b; }
[data-theme="dark"] .dos-bar { background: rgba(255,255,255,.1); }
.dos-sh { font-weight: 700; font-size: 14px; color: var(--seal); border-left: 3px solid var(--seal); padding-left: 8px; margin-top: 4px; }
.dos-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 4px 16px; }
.dos-kv { display: flex; gap: 8px; font-size: 13.5px; padding: 3px 0; border-bottom: 1px dashed var(--line); }
.dos-kv > span { opacity: .7; flex: 0 0 auto; min-width: 84px; }
.dos-kv > b { font-weight: 600; }
.dos-verdict { font-size: 14px; line-height: 1.9; margin: 0; padding: 8px 12px; background: rgba(0,0,0,.025); border-radius: 10px; }
[data-theme="dark"] .dos-verdict { background: rgba(255,255,255,.03); }
.dos-line { font-size: 13.5px; margin: 0; opacity: .88; }
.dos-log { display: flex; gap: 10px; font-size: 13px; padding: 4px 0; border-bottom: 1px dashed var(--line); }
.dos-log-y { flex: 0 0 auto; color: var(--seal); font-weight: 600; }
.dos-btns { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
.link { cursor: pointer; border-bottom: 1px dashed var(--seal); }
.link:hover { color: var(--seal); }
.fam-card[role="button"]:focus-visible { outline: 2px solid var(--seal); outline-offset: 2px; }
.fam-go { margin-left: auto; color: var(--ink2); font-size: 22px; line-height: 1; align-self: center; opacity: .5; }
.fam-info { min-width: 0; }
.fam-rel { font-size: 12px; color: var(--seal); letter-spacing: 1px; }
.fam-name { font-weight: 700; font-size: 15px; line-height: 1.3; }
.fam-sub, .fam-extra { line-height: 1.5; overflow: hidden; text-overflow: ellipsis; }
.fam-card .fam-chat { flex: 0 0 auto; align-self: center; }
.fam-chat-btn { margin: 4px 0 12px; }
.fam-card .fam-chat, .fam-card .fam-go { flex: 0 0 auto; }

/* 家人互动弹窗 */
.fam-act-head { display: flex; align-items: center; gap: 12px; padding: 4px 2px 12px; border-bottom: 1px dashed var(--line); margin-bottom: 12px; }
.portrait.fam.big { width: 58px; height: 72px; }
.fam-acts { display: grid; gap: 8px; }
.fam-act { display: flex; justify-content: space-between; align-items: center; gap: 12px; text-align: left; width: 100%; }
.fam-act-n { font-weight: 600; }
.fam-act.dis, .fam-act:disabled { opacity: .45; cursor: not-allowed; }

/* ---------- 危机处置 ---------- */
.crisis-banner {
  display: flex; align-items: center; gap: 12px;
  border-color: var(--seal); border-left: 4px solid var(--seal);
  background: rgba(164, 52, 43, .07);
  animation: cpl 1.6s ease-in-out infinite;
}
@keyframes cpl {
  0%, 100% { box-shadow: var(--shadow); }
  50% { box-shadow: 0 0 0 3px rgba(164, 52, 43, .18), var(--shadow); }
}
.crisis-ic { font-size: 26px; }
.cb-t { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.cb-t b { color: var(--seal); font-size: 14.5px; }
.crisis-doc { font-size: 14px; }
/* 年度工作报告 · 事实底座两栏（rep-facts / rep-col）
   UI.showReport 里本意是「本年亮点 / 本年硬伤」左右并排，但 .rep-facts 与 .rep-col
   从未定义——两个 div 只能上下堆叠，且内层 <ul> 直接吃浏览器默认圆点与 40px 缩进，
   与全篇「宋楷 + 细密行距」的排版口径完全不一致。这里按危机文书口径补齐。 */
.rep-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 0 0 12px; }
.rep-col { border: 1px solid var(--line); border-radius: 8px; background: var(--card); padding: 9px 12px; }
.rep-col > b { display: block; font-size: 13.5px; margin-bottom: 5px; }
.rep-col ul { margin: 0; padding-left: 1.15em; }
.rep-col li { font-size: 13.5px; line-height: 1.8; }
@media (max-width: 640px) { .rep-facts { grid-template-columns: 1fr; } }
.crisis-head { font-family: var(--font-kai); font-size: 19px; color: var(--seal); font-weight: 700; margin-bottom: 8px; letter-spacing: 1px; }
.crisis-intro { color: var(--ink2); margin: 0 0 10px; }
.crisis-feedback { border-left: 3px solid var(--gold); padding: 8px 12px; background: rgba(154, 123, 63, .08); border-radius: 6px; margin-bottom: 10px; }
.crisis-feedback .narr { text-indent: 0; color: var(--ink); }
.crisis-step { font-size: 14.5px; margin-bottom: 10px; line-height: 1.8; }
.crisis-step b { color: var(--seal); }
.crisis-opt:hover { border-color: var(--seal); border-left-color: var(--seal); }
.focuslist { display: grid; gap: 8px; margin-top: 6px; }

/* ---------- 突发事件：处置方式分流（亲办 / 交办） ---------- */
.triage { margin-top: 4px; }
.triage-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 10px 0 4px; }
@media (max-width: 720px) { .triage-grid { grid-template-columns: 1fr; } }
.triage-card {
  display: grid; gap: 6px; text-align: left; padding: 14px 16px; cursor: pointer;
  background: var(--card); border: 1px solid var(--line); border-radius: 10px;
  border-left: 4px solid var(--gold); transition: .18s; font: inherit; color: var(--ink);
}
.triage-card .tc-ic { font-size: 24px; line-height: 1; }
.triage-card .tc-t { font-family: var(--font-kai); font-size: 18px; font-weight: 700; letter-spacing: 1px; }
.triage-card .tc-d { font-size: 13.5px; color: var(--ink2); line-height: 1.75; }
.triage-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(60, 45, 20, .14); border-color: var(--seal); }
.triage-card.self { border-left-color: var(--seal); }
.triage-card.self:hover { background: rgba(164, 52, 43, .06); }
.triage-card.del { border-left-color: #3d6b8e; }
.triage-card.del:hover { background: rgba(61, 107, 142, .08); }

.del-list { display: grid; gap: 10px; margin: 10px 0; }
.del-card {
  display: grid; gap: 5px; text-align: left; padding: 11px 14px; cursor: pointer;
  background: var(--card); border: 1px solid var(--line); border-radius: 9px; transition: .16s; font: inherit; color: var(--ink);
}
.del-card:hover { border-color: var(--seal); background: rgba(164, 52, 43, .06); transform: translateX(3px); }
.del-card .dl-nm { font-size: 16.5px; font-weight: 700; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.del-card .dl-nm i { font-style: normal; font-size: 13.5px; font-weight: 500; color: var(--ink2); }
.del-card .dl-meta { font-size: 13px; color: var(--ink2); }
.del-card .dl-bar { display: block; height: 5px; border-radius: 3px; background: rgba(120, 100, 60, .16); overflow: hidden; }
.del-card .dl-bar i { display: block; height: 100%; background: linear-gradient(90deg, #8a6b2f, #c8a24a); }
.del-card .dl-judge { display: flex; gap: 10px; font-size: 13px; }
.del-card .dl-judge b { font-weight: 700; color: var(--ink2); }
.del-card .dl-judge b.ok { color: #2f7a4f; }
.del-card .dl-judge b.mid { color: #9a7b3f; }
.del-card .dl-judge b.bad { color: var(--seal); }
.tag.t-fit { background: rgba(61, 107, 142, .12); color: #3d6b8e; border-color: rgba(61, 107, 142, .3); }
.tag.t-port { background: rgba(154, 123, 63, .12); color: #8a6b2f; border-color: rgba(154, 123, 63, .3); cursor: pointer; }
[data-theme="dark"] .tag.t-port { color: #c8a24a; }
.own-tip { border-left: 3px solid var(--seal); background: rgba(164, 52, 43, .07); padding: 7px 11px; border-radius: 6px; margin: 8px 0; font-size: 14px; line-height: 1.8; }

/* ---------- 分管工作面板 ---------- */
.pf-doc { font-size: 14.5px; }
.pf-head { display: flex; gap: 12px; align-items: center; padding: 10px 12px; background: rgba(154, 123, 63, .08); border-radius: 9px; margin-bottom: 10px; }
.pf-head .pf-ic { font-size: 26px; }
.pf-head b { font-family: var(--font-kai); font-size: 18px; letter-spacing: 1px; }
.pf-tip { color: var(--ink2); line-height: 1.9; margin: 0 0 12px; }
.pf-sec { margin-bottom: 12px; }
.pf-sh { font-family: var(--font-kai); font-size: 16px; font-weight: 700; color: var(--seal); border-bottom: 1px solid var(--line); padding-bottom: 4px; margin-bottom: 6px; }
.pf-line { display: flex; gap: 10px; align-items: baseline; padding: 5px 0; border-bottom: 1px dashed var(--line); flex-wrap: wrap; }
.pf-line b { min-width: 116px; }
/* 条线专属：指标 / 生态描写 / 风险短句，整行排在条目下方 */
.pf-fx { flex: 0 0 100%; display: grid; gap: 3px; padding: 4px 0 6px 2px; }
.pf-metric { display: flex; align-items: baseline; gap: 8px; font-size: 12px; }
.pf-m-n { color: var(--ink2); }
.pf-metric b { min-width: 0; font-size: 13px; color: var(--ink); }
.pf-metric b.ok { color: var(--ok); }
.pf-metric b.bad { color: var(--danger); }
/* ★ 2026-09-29：数值三档着色的**中间档**用琥珀（#8a5a12）。
   为什么不用既有的 `.warn`（#a33 暗红）——那和「差」档的红色几乎分不开，
   玩家看到一片红，等于没上色。绿 / 琥珀 / 红 才是一眼能分的三档。 */
.num-mid { color: #8a5a12; }
.pf-scene { font-size: 12px; font-weight: var(--ui-small-weight); line-height: 1.7; color: var(--ink2); font-family: var(--font-ui); }
.pf-risk { font-size: 12px; line-height: 1.7; color: var(--ink2); }
.pf-risk-t { color: var(--ink2); background: var(--paper2); border-radius: 4px; padding: 1px 6px; margin-right: 6px; font-size: 11px; }
/* 条线口的「地主」：有名字、有脾气、有配合度 */
.pf-chief { flex: 0 0 100%; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; padding: 3px 0 6px 2px; }
.pf-chief-n { font-family: var(--font-ui); font-size: 13px; font-weight: 700; color: var(--ink); }
.pf-chief .chip.tiny { cursor: default; }
.pf-chief button.chip.tiny { cursor: pointer; }
.pf-log { display: grid; gap: 6px; }
.pf-item { display: grid; gap: 2px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--card); }
/* ==========================================================================
   分管领域面板 2.0（2026-09-29 重排）
   ─────────────────────────────────────────────────────────
   动机（玩家：「看起来太累」）：旧版是**六段等宽盒子** ——
   条线形势 / 每条线口 / 本季经营 / 桌头待办 / 本年实事 / 任职通告，
   全是一种圆角框堆叠、没有主次，一屏看不完要一直滚。
   新版按**三档层级**重排：
     ① 状态（扫一眼）：头部一行 —— 形势 chip + AP + 待办数
     ② 主体（细看）  ：每条线口一条**横条**，左侧色条即健康度（取代"平稳 69" chip 的视觉重量）
     ③ 备查（要用才看）：本年实事 / 向上争取战绩收进折叠区
   ========================================================================== */
.dp2-stat { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; padding: 0 0 7px; border-bottom: 1px solid var(--line); }
.dp2-pill { font-size: 11px; padding: 1px 8px; border-radius: 99px; border: 1px solid var(--line); white-space: nowrap; color: var(--ink2); }
.dp2-pill.ok { color: var(--ok); border-color: var(--ok); }
.dp2-pill.bad { color: var(--danger); border-color: var(--danger); }
.dp2-pill.num-mid { color: #8a5a12; border-color: #8a5a12; }
.dp2-row { display: flex; align-items: stretch; gap: 10px; padding: 7px 0; border-bottom: 1px dashed var(--line); }
.dp2-row:last-of-type { border-bottom: 0; }
.dp2-bar { flex: none; width: 4px; border-radius: 2px; background: var(--line); }
.dp2-bar.ok { background: var(--ok); }
.dp2-bar.num-mid { background: #8a5a12; }
.dp2-bar.bad { background: var(--danger); }
.dp2-main { flex: 1 1 auto; min-width: 0; }
.dp2-t { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.dp2-t .nm { font-size: 13.5px; }
.dp2-t .val { font-size: 15px; }
.dp2-m { font-size: 11.5px; color: var(--ink2); }
.dp2-sub { font-size: 11.5px; color: var(--ink2); margin-top: 2px; }
.dp2-sub .chip { cursor: default; }
.dp2-sub button.chip { cursor: pointer; }
.dp2-acts { flex: none; display: flex; align-items: center; gap: 5px; flex-wrap: wrap; justify-content: flex-end; }
.dp2-alert { font-size: 11.5px; color: var(--danger); margin-top: 2px; }
.dp2-fold { margin-top: 7px; border-top: 1px solid var(--line); padding-top: 5px; }
.dp2-fold summary { font-size: 12px; color: var(--ink2); cursor: pointer; padding: 3px 0; }
.dp2-fold summary b { color: var(--ink); }
.dp2-fold .pf-item { margin-top: 5px; }
/* 危险线（health < 45）整条淡红底 —— 扫视时"哪条线要出事"一眼可见 */
.dp2-danger { background: rgba(164, 52, 43, .055); border-radius: 7px; padding-left: 7px; padding-right: 7px; margin: 0 -7px; }
[data-theme="dark"] .dp2-danger { background: rgba(224, 104, 92, .1); }
/* 条线专属操作展开区（2026-09-29：把 30 个条线专属动作接进主区，就地展开） */
.dp2-opsbox { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; margin-top: 5px;
  padding: 6px 8px; border-left: 2px solid var(--seal); border-radius: 0 7px 7px 0; background: rgba(164, 52, 43, .05); }
[data-theme="dark"] .dp2-opsbox { background: rgba(224, 104, 92, .09); }
/* 分管沿革（代入感：让玩家看见自己从哪条线转到哪条线） */
.dp2-hist { font-size: 11.5px; color: var(--ink2); margin-top: 6px; padding-top: 5px; border-top: 1px dashed var(--line); }
.dp2-hist b { color: var(--ink); }
/* 分管线项目台账（2026-09-29 P2：责任田里得有项目） */
.dp2-block { margin-top: 5px; }
.dp2-proj { display: flex; flex-direction: column; gap: 4px; margin-top: 5px; padding: 6px 8px;
  border-left: 2px solid #8a5a12; border-radius: 0 7px 7px 0; background: rgba(138, 90, 18, .05); }
[data-theme="dark"] .dp2-proj { background: rgba(208, 160, 69, .08); }
.dp2-projrow { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 12px; }
.dp2-projn { font-weight: 600; }
.dp2-projacts { margin-left: auto; }
[data-theme="dark"] .pf-item { background: rgba(255,255,255,.04); }
.tag.t-good { background: rgba(47, 122, 79, .12); color: #2f7a4f; border-color: rgba(47, 122, 79, .3); }
.tag.t-bad { background: rgba(164, 52, 43, .12); color: var(--seal); border-color: rgba(164, 52, 43, .3); }

.plan-box { border: 1px dashed var(--line); border-radius: 9px; padding: 10px 12px; margin: 8px 0 12px; background: rgba(154, 123, 63, .05); }
.plan-box.done { border-style: solid; }
.plan-box .plan-t { font-size: 15px; font-weight: 700; margin-bottom: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.plan-box .plan-say { font-family: var(--font-kai); font-size: 16px; line-height: 1.85; margin: 2px 0 6px; color: var(--ink); }
.plan-box textarea { width: 100%; box-sizing: border-box; font: inherit; font-size: 15px; padding: 8px 10px; border-radius: 7px; border: 1px solid var(--line); background: var(--card); color: var(--ink); resize: vertical; }
.plan-box .pf-row { display: flex; align-items: center; gap: 10px; margin-top: 8px; flex-wrap: wrap; }
[data-theme="dark"] .del-card, [data-theme="dark"] .triage-card { background: rgba(255,255,255,.04); }
.focuslist .polrow { align-items: center; }
.focuslist .muted { flex: 1; }

/* ==================== 精修美化层 · 2026-09-09 ==================== */

/* ---------- 一、入场动效：内容浮现 ---------- */
@keyframes riseIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes stampIn {
  0% { opacity: 0; transform: scale(1.22) rotate(2.5deg); }
  55% { opacity: 1; transform: scale(.96) rotate(-1deg); }
  100% { opacity: 1; transform: none; }
}
.panel.event, .panel.result, .panel.year-end, .panel.dialogue { animation: riseIn .38s ease both; }
.opts .opt { animation: riseIn .32s ease both; }
.opts .opt:nth-child(1) { animation-delay: .05s; }
.opts .opt:nth-child(2) { animation-delay: .11s; }
.opts .opt:nth-child(3) { animation-delay: .17s; }
.opts .opt:nth-child(4) { animation-delay: .23s; }
.opts .opt:nth-child(5) { animation-delay: .29s; }
/* 2026-09-25 修：stampIn 的 scale+rotate（both 保持）在 Chrome 会残留 transform 合成层，
     卡片内楷体正文出现轻微倾斜与文字模糊。改为纯透明度淡入，不再动 transform。 */
.glory-card { animation: stampFade .45s ease both; }
.modal { animation: fadeIn .18s ease both; }
.modal-box { animation: riseIn .26s ease both; }
.menuwrap { animation: riseIn .5s ease both; }
.endwrap { animation: riseIn .6s ease both; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-delay: 0ms !important; transition-duration: .01ms !important; }
}

/* ---------- 二、选项汉字编号（公文风：一、二、三…） ---------- */
.opts { counter-reset: optno; }
.opt.opt-go .opt-label::before { content: none !important; counter-increment: none !important; }
.opts .opt-label::before {
  counter-increment: optno;
  content: counter(optno, cjk-ideographic) "、";
  font-family: var(--font-kai);
  font-weight: 700;
  color: var(--seal);
  margin-right: 4px;
  letter-spacing: 1px;
}

/* ---------- 三、面板标题印泥点 ---------- */
.panel h3::before {
  content: ''; display: inline-block; width: 7px; height: 7px;
  background: var(--seal); transform: rotate(45deg);
  margin-right: 11px; border-radius: 1px; opacity: .8;
  vertical-align: 1px;
}

/* ---------- 四、场景插图：绫绢装裱 ---------- */
.scene-illus {
  padding: 9px;
  background: linear-gradient(135deg, #eee2c8 0%, #e3d3ae 45%, #ead9b8 70%, #e6d0a6 100%);
  border: 1px solid #c4b184;
  box-shadow: 0 3px 14px rgba(60,45,20,.16), inset 0 0 0 1px rgba(255,255,255,.35);
}
.scene-illus img { border: 1px solid rgba(80,60,25,.35); }
[data-theme="dark"] .scene-illus {
  background: linear-gradient(135deg, #2c271d 0%, #241f14 45%, #2b2517 70%, #221d12 100%);
  border-color: #4d4430;
  box-shadow: 0 3px 14px rgba(0,0,0,.4), inset 0 0 0 1px rgba(255,255,255,.05);
}
[data-theme="dark"] .scene-illus img { border-color: rgba(0,0,0,.5); }

/* ---------- 五、属性条光泽 ---------- */
.stat-track i { position: relative; overflow: hidden; }
.stat-track i::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(255,255,255,.4) 0%, rgba(255,255,255,.08) 45%, transparent 60%);
  pointer-events: none;   /* ★ 2026-10-15：装饰高光不得吃点击 */
}
[data-theme="dark"] .stat-track i::after { opacity: .5; }

/* ---------- 六、年份头书法化 ---------- */
.year { font-family: var(--font-kai); font-size: 16.5px; letter-spacing: 2.5px; font-weight: 700; }
.year .age { margin-left: 10px; }

/* ---------- 七、toast 公文化 ---------- */
.toast {
  background: var(--card); color: var(--ink);
  border: 1px solid var(--line); border-left: 3px solid var(--seal);
  border-radius: 6px; box-shadow: var(--shadow); font-weight: 600;
}

/* ---------- 八、按钮：官印按压感 ---------- */
.btn.primary { box-shadow: inset 0 0 0 1px rgba(255,246,235,.3), 0 2px 8px rgba(120,30,20,.22); }
.btn.primary:active { transform: translateY(0) scale(.98); }
.btn.primary.big {
  background: linear-gradient(165deg, var(--seal) 0%, var(--seal2) 100%);
  box-shadow: inset 0 0 0 1px rgba(255,246,235,.45), 0 4px 14px rgba(120,30,20,.35);
  text-shadow: 0 1px 2px rgba(0,0,0,.25);
}
.btn.primary.big:hover { transform: translateY(-2px); box-shadow: inset 0 0 0 1px rgba(255,246,235,.6), 0 7px 20px rgba(120,30,20,.4); }
.btn.primary.big:active { transform: translateY(0) scale(.985); }

/* ---------- 九、菜单封面：与纸面融合 ---------- */
.cover { box-shadow: inset 0 -34px 34px -24px rgba(60,45,20,.35), inset 0 20px 24px -20px rgba(60,45,20,.18); }

/* ---------- 十、卷末落印 ---------- */
.foot { position: relative; font-weight: 700; font-size: 15px; }
.foot::before {
  content: '完'; display: block; width: 34px; height: 34px; line-height: 34px;
  margin: 0 auto 12px; font-family: var(--font-kai); font-size: 17px; font-weight: 700;
  color: #fff7ef; background: linear-gradient(160deg, var(--seal), var(--seal2));
  border-radius: 5px; transform: rotate(-6deg); opacity: .85;
  box-shadow: 0 2px 6px rgba(120,30,20,.3), inset 0 0 0 1px rgba(255,255,255,.3);
}

/* ---------- 十一、细节 ---------- */
::-webkit-scrollbar-thumb:hover { background: var(--gold); }
.log li { transition: color .15s ease, padding-left .15s ease; }
.log li:hover { color: var(--ink); padding-left: 3px; }
:focus-visible { outline: 2px solid var(--seal); outline-offset: 2px; }

/* ---------- 政绩工程进度条 ---------- */
.stat-track i.c-proj { background: linear-gradient(90deg, #9a7b3f, #c9a961); }
.panel.proj { border-top-color: var(--seal); border-left-color: var(--seal); }

/* ---------- 自由行动 · 卡片式按钮 ---------- */
.acts-panel { border-top-color: var(--seal); border-left-color: var(--seal); }
.acts-title { font-size: 21px; font-weight: 800; letter-spacing: .5px; }
.acts-title b.ap-now { color: var(--seal); font-size: 21px; font-weight: 800; }
.acts-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(172px, 1fr));
  gap: 11px; margin-top: 6px;
}
.actbtn {
  display: flex; align-items: center; gap: 12px; text-align: left;
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: 13px 16px; border-radius: 12px; cursor: pointer; font-family: inherit;
  transition: all .16s ease; position: relative; overflow: hidden; min-height: 58px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
}
.actbtn::before {
  content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 2px;
  background: var(--seal); transform: scaleY(0); transform-origin: center; transition: transform .16s ease;
}
.actbtn:hover:not([disabled]) {
  border-color: var(--gold); color: var(--seal); transform: translateY(-2px);
  box-shadow: 0 4px 14px rgba(164,52,43,.10);
}
.actbtn:hover:not([disabled])::before { transform: scaleY(1); }
.actbtn .act-ic {
  flex: 0 0 auto; width: 42px; height: 42px; border-radius: 10px;
  display: flex; align-items: center; justify-content: center; font-size: 21px;
  background: linear-gradient(180deg, rgba(164,52,43,.08), rgba(154,123,63,.10));
  border: 1px solid rgba(164,52,43,.10);
}
.actbtn .act-nm { flex: 1; font-size: 17px; font-weight: 800; line-height: 1.3; letter-spacing: .4px; }
.actbtn .act-ap {
  flex: 0 0 auto; font-size: 13.5px; font-weight: 800; color: #8a6d1a;
  background: rgba(212,175,55,.12); border: 1px solid rgba(212,175,55,.35); padding: 3px 11px;
  border-radius: 11px; white-space: nowrap;
}
.actbtn.risk .act-ic, .actbtn.risk .act-nm { color: #a82828; }
.actbtn.risk:hover:not([disabled]) { border-color: #a82828; color: #a82828; }
.actbtn.risk::before { background: #a82828; }
.actbtn[disabled] { opacity: .42; cursor: not-allowed; }
.actbtn[disabled]:hover { transform: none; box-shadow: none; }
/* 政务按钮：未达门槛的锁定态——与可操作项同款，仅加 🔒 */
.actbtn.locked { opacity: .88; cursor: not-allowed; border-style: solid; background: #faf7f0; }
.actbtn.locked::before { display: none; }
.actbtn.locked .lock-tag { display: inline-block; font-size: 11px; font-weight: 500; color: #8a7a3a; letter-spacing: .2px; background: #f3ecd2; border: 1px solid #e3d5a8; border-radius: 20px; padding: 1px 8px; margin-top: 4px; }
.actbtn.locked .act-nm { color: var(--ink2); }

/* 分组展开后的行动按钮统一为「档案系统」式垂直卡片 */
.grp-open.acts-grid {
  grid-template-columns: 1fr;
  gap: 6px;
  margin-top: 6px;
}
.grp-open.acts-grid .actbtn {
  width: 100%; min-height: 0; padding: 9px 13px; border-radius: 8px;
  background: transparent; box-shadow: none; gap: 0; justify-content: flex-start;
  text-align: left; font-family: inherit;
}
.grp-open.acts-grid .actbtn .act-ic,
.grp-open.acts-grid .actbtn .act-ap { display: none; }
.grp-open.acts-grid .actbtn .act-nm {
  flex: 0 1 auto; font-size: 13px; font-weight: 600; letter-spacing: 0; line-height: 1.35;
}
.grp-open.acts-grid .actbtn .lock-tag {
  display: inline-block; font-size: 11px; font-weight: 500; color: #8a7a3a;
  background: #f3ecd2; border: 1px solid #e3d5a8; border-radius: 20px;
  padding: 1px 8px; margin-left: 8px;
}
.grp-open.acts-grid .actbtn:hover:not([disabled]) {
  transform: translateX(2px); border-color: var(--seal); color: var(--seal);
  box-shadow: none;
}
.grp-open.acts-grid .actbtn::before { top: 0; bottom: 0; border-radius: 0; }
.grp-open.acts-grid .actbtn.locked {
  background: transparent; opacity: .65;
  flex-direction: column; align-items: flex-start; justify-content: center;
  min-height: 0; padding: 7px 12px; gap: 1px;
}
.grp-open.acts-grid .actbtn.locked .act-nm { font-size: 13px; font-weight: 600; letter-spacing: 0; }
.grp-open.acts-grid .actbtn.locked .lock-tag {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: 10px; font-weight: 500; color: #9e8e55;
  background: transparent; border: none; border-radius: 0;
  padding: 0; margin: 1px 0 0 0; line-height: 1.3;
}

/* 待解锁栏锁定行：不可点，名称+原因分列（回归钩子 .lock-row/.lr-n/.lr-why） */
.lock-list .lock-row { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; opacity: .9; cursor: not-allowed; border: 1px solid rgba(154,123,63,.32); background: #faf7f0; }
.lock-list .lock-row .lock-ic { font-size: 11px; opacity: .8; }
.lock-list .lock-row .lr-n { font-size: 12.5px; font-weight: 600; color: var(--ink2); }
.lock-list .lock-row .lr-why { font-size: 11px; font-weight: 500; color: #8a7a3a; background: #f3ecd2; border: 1px solid #e3d5a8; border-radius: 20px; padding: 1px 8px; }
/* 自由行动 · 今年要紧（自动推荐） */
.tip-panel {
  border-top: 2px solid var(--gold); border-left: 3px solid var(--gold);
  background: linear-gradient(180deg, rgba(212,175,55,.10), rgba(255,255,255,.35));
  margin-bottom: 4px;
}
.tip-panel h3 { color: #8a6d1a; font-size: 17px; font-weight: 800; }
.actbtn.tip {
  border-color: rgba(212,175,55,.55);
  background: linear-gradient(180deg, #fffdf0, var(--card));
}
.actbtn.tip::before { background: var(--gold); }
.actbtn.tip .act-ap { background: rgba(212,175,55,.16); border-color: rgba(212,175,55,.42); }
.actbtn.withwhy { flex-wrap: wrap; min-height: 58px; }
.actbtn.withwhy .tip-why {
  flex: 1 1 100%; font-size: 13.5px; font-weight: 700; color: #8a6d1a;
  margin-top: 3px; line-height: 1.4;
}
/* 自由行动 · 分组标题 */
.acts-grp { margin-top: 15px; }
.grp-t {
  font-family: var(--font-ui); font-size: 13.5px; letter-spacing: 2px;
  color: var(--ink3); font-weight: 700; padding: 2px 0 6px;
  border-bottom: 1px dashed rgba(164,52,43,.16); margin-bottom: 8px;
}
.grp-t::before {
  content: ''; display: inline-block; width: 4px; height: 13px;
  background: var(--seal); margin-right: 7px; border-radius: 2px; vertical-align: -1px;
}
/* 自由行动 · 折叠标签（默认收起，点开才展开） */
.grp-tabs { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.grp-tab {
  font-family: var(--font-kai); font-size: 17px; font-weight: 800; letter-spacing: 1.5px;
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: 10px 18px; border-radius: 10px; cursor: pointer;
  transition: all .15s ease;
}
.grp-tab:hover { border-color: var(--seal); color: var(--seal); transform: translateY(-1px); }
.grp-tab.on { background: var(--seal); border-color: var(--seal); color: #fff; }
.grp-tab .muted { font-size: 13px; opacity: .8; }
.grp-tab.on .muted { color: rgba(255,255,255,.85); }
/* 待解锁标签：与已解锁的「政务」标签视觉区分，暗示这块是未达门槛的预留功能 */
.grp-tab.locktab { border-style: dashed; border-color: #d8c98f; color: #9a7d2a; background: #fbf6e6; }
.grp-tab.locktab:hover { border-color: #c9a94e; color: #8a6a18; transform: translateY(-1px); }
.grp-tab.locktab.on { background: #c9a94e; border-color: #c9a94e; color: #fff; }
.grp-tab.locktab.on .gt-caret { color: #fff; }
[data-theme="dark"] .grp-tab.locktab { background: rgba(201,169,78,.12); color: #d8c281; border-color: rgba(201,169,78,.5); }
[data-theme="dark"] .grp-tab.locktab:hover { color: #e8d49a; }
[data-theme="dark"] .grp-tab.locktab.on { background: #c9a94e; color: #2a2418; }
.grp-open { margin-top: 12px; }
/* 展开的一组行动按钮：内部选项缩小，避免点开后整列过长往下挤 */
.grp-open .actbtn { min-height: 40px; padding: 7px 11px; gap: 9px; }
.grp-open .actbtn .act-ic { width: 30px; height: 30px; font-size: 15px; border-radius: 8px; }
.grp-open .actbtn .act-nm { font-size: 14px; font-weight: 700; letter-spacing: .2px; }
.grp-open .actbtn .act-ap { font-size: 11px; padding: 2px 8px; }
.grp-open .actbtn.withwhy { min-height: 46px; }
.grp-open .actbtn.withwhy .tip-why { font-size: 11.5px; font-weight: 600; }
/* 压担子选人 */
.dep-pick { display: block; width: 100%; text-align: left; }
.dep-pick .muted { display: block; font-size: 12px; margin-top: 2px; }
/* 施政解锁提示 / 表决落地消息 */
.qgrp-lock {
  border: 1px dashed var(--line); border-radius: 10px; padding: 8px 10px;
  color: var(--ink3); font-size: 12px; line-height: 1.5;
}
.apply-msg {
  background: rgba(154,123,63,.10); border: 1px solid rgba(154,123,63,.25);
  border-radius: 8px; padding: 5px 8px; font-size: 12px; color: #6b5410; margin-top: 4px;
}

/* ---------- 本年记事 · 时间线式 ---------- */
.panel.logbox {
  border: 3px solid var(--seal);
  border-radius: 10px;
  background: linear-gradient(180deg, rgba(255,255,255,.55), rgba(0,0,0,.015));
}
.panel.logbox::after { display: none; }
.log-title { font-size: 18px; font-weight: 800; letter-spacing: 1px; }
.log-title .muted { font-size: 13px; font-weight: 600; }
.log {
  list-style: none; padding: 6px 0 0; margin: 0; font-size: 15px; line-height: 1.7;
  color: var(--ink2); max-height: 320px; overflow: auto;
  scrollbar-width: thin; scrollbar-color: var(--line) transparent;
}
.log li {
  display: flex; gap: 10px; padding: 9px 4px;
  border-bottom: 1px dashed var(--line); transition: all .15s ease; border-radius: 6px;
}
.log li:hover { background: rgba(200,40,40,.05); padding-left: 9px; }
.log .log-year {
  flex: 0 0 auto; font-size: 12.5px; font-weight: 800; color: #fff;
  background: var(--seal); border: 1px solid rgba(212,175,55,.5); padding: 2px 10px;
  border-radius: 3px; align-self: flex-start; margin-top: 4px; letter-spacing: .5px;
}
.log .log-body { flex: 1; min-width: 0; }
.log .log-body b { color: var(--ink); display: block; font-size: 15.5px; font-weight: 800; }
.log .log-txt { display: block; color: var(--ink2); font-size: 14px; line-height: 1.6; font-weight: 600; }

/* ---------- 我的班子 · 副职管理 ---------- */
.cab-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.cab-row {
  border: 1px solid var(--line); border-left: 3px solid var(--seal); border-radius: 8px;
  background: var(--card); padding: 9px 12px;
}
.cab-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cab-h b { font-size: 14.5px; }
.cab-m { margin-top: 3px; }
.cab-ctl { margin-top: 7px; display: flex; gap: 6px; }
.cab-swap { margin-top: 10px; padding: 9px 11px; border: 1px dashed var(--line); border-radius: 8px; background: rgba(0,0,0,.02); }
.cab-swap .fmt { margin: 0; }
.cab-swap-ctl { display: flex; align-items: center; gap: 7px; margin-top: 6px; flex-wrap: wrap; }
.cab-swap-ctl select {
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  border-radius: 7px; padding: 5px 8px; font-family: inherit; font-size: 13px; max-width: 170px;
}
.qgrp-t { font-weight: 700; font-size: 13px; color: var(--gold); letter-spacing: 1px; margin: 2px 0 5px; }

/* ==================== 整饰重制层 v3 ==================== */
:root {
  --gold2: #d4af37; --cinnabar-d: #7e221c; --azure: #31465f;
  --paper-deep: #efe5d2; --card2: #fdf9f0; --line2: #d9c9ac;
  --gold-rule: linear-gradient(90deg, transparent, rgba(154,123,63,.4) 18%, var(--gold2) 50%, rgba(154,123,63,.4) 82%, transparent);
}

/* ---------- 一、卷轴轴杆（超宽屏两侧） ---------- */
@media (min-width: 1840px) {
  body::before, body::after {
    content: ''; position: fixed; top: 0; bottom: 0; width: 34px; z-index: 60; pointer-events: none;
    background: linear-gradient(90deg, #5d4024, #8a6a40 40%, #c9a961 50%, #8a6a40 60%, #5d4024);
    box-shadow: inset 0 0 12px rgba(0,0,0,.35), 0 0 18px rgba(60,45,20,.25);
  }
  body::before { left: 0; }
  body::after { right: 0; }
  body::before::marker { content: none; }
  .screen { max-width: 2200px; }
}

/* ---------- 二、顶栏：回纹头 + 职衔大字 ---------- */
.top {
  position: relative;
  background: linear-gradient(180deg, rgba(154,123,63,.10), rgba(154,123,63,0) 62%);
  border-bottom: 1px solid var(--line);
  padding: 18px 20px 16px;
}
.top::before { content: none; }
.top::after {
  content: ''; position: absolute; left: 50%; bottom: -1px; transform: translateX(-50%);
  width: 340px; max-width: 70%; height: 2px; background: var(--gold-rule);
}
.top-c .job { font-size: 30px; letter-spacing: 3px; }
.top-c .job b { font-size: 31px; }
.top-c .yearline {
  display: inline-flex; gap: 14px; padding: 5px 22px;
  border: 1px solid rgba(154,123,63,.35); border-radius: 999px;
  background: rgba(255,255,255,.45); box-shadow: inset 0 0 0 1px rgba(255,255,255,.6);
}
.top-c .year { font-size: 17.5px; letter-spacing: 3px; }
.top-c .ap { font-size: 14.5px; }
.top-c .loc { letter-spacing: 1px; }
[data-theme="dark"] .top { background: linear-gradient(180deg, rgba(201,169,97,.08), transparent 62%); }
[data-theme="dark"] .top-c .yearline { background: rgba(255,255,255,.04); }

/* ---------- 三、面板：双层框 + 顶部鎏金线 ---------- */
.panel {
  border: 1px solid var(--line);
  box-shadow: var(--shadow), inset 0 0 0 1px rgba(255,255,255,.5);
  background: linear-gradient(180deg, var(--card2), var(--card) 58%);
}
.panel::after {
  content: ''; position: absolute; top: 0; left: 14px; right: 14px; height: 2px;
  background: var(--gold-rule); opacity: .75;
  /* ★ 2026-10-15：装饰线不得吃点击（同类隐患：绝对定位伪元素缺 pointer-events:none） */
  pointer-events: none;
}
.panel h3 { letter-spacing: 2.2px; }
.panel h3 .muted { letter-spacing: 0; }
[data-theme="dark"] .panel { box-shadow: var(--shadow), inset 0 0 0 1px rgba(255,255,255,.04); }

/* ---------- 四、事件文牍卡 ---------- */
.panel.event {
  border-left-width: 4px;
  background:
    linear-gradient(90deg, rgba(164,52,43,.035), transparent 14%),
    linear-gradient(180deg, var(--card2), var(--card) 60%);
}
.narr { letter-spacing: .035em; }
.opt {
  border-left-width: 3px;
  box-shadow: 0 1px 2px rgba(60,45,20,.05), inset 3px 0 0 -1px rgba(164,52,43,.18);
}
.opt:hover { box-shadow: 0 5px 18px rgba(120,30,20,.14), inset 3px 0 0 -1px var(--seal); }
.opt-label::before { letter-spacing: 1.5px; }

/* ---------- 五、属性条：官印刻度 ---------- */
.stat-track {
  background-color: var(--paper-deep);
  background-image: repeating-linear-gradient(90deg, transparent 0 9px, rgba(60,45,20,.07) 9px 10px);
}
[data-theme="dark"] .stat-track {
  background-color: #26231c;
  background-image: repeating-linear-gradient(90deg, transparent 0 9px, rgba(255,255,255,.05) 9px 10px);
}
.stat-track i { box-shadow: inset 0 -2px 3px rgba(0,0,0,.12); }
.stat-track i::after { background: linear-gradient(180deg, rgba(255,255,255,.5), rgba(255,255,255,.06) 55%, transparent); }

/* ---------- 六、弹窗：锦匣 ---------- */
.modal-box {
  border: 1px solid var(--line2);
  box-shadow: 0 26px 80px rgba(0,0,0,.42);
}
.modal-head {
  background: linear-gradient(180deg, rgba(154,123,63,.10), transparent);
  padding: 15px 24px;
}
.modal-head h3 { letter-spacing: 4px; }
.modal-box { position: relative; }

/* ---------- 七、按钮：官印按压感（次级） ---------- */
.chip { box-shadow: 0 1px 2px rgba(60,45,20,.06); }
.chip:hover:not([disabled]) { box-shadow: 0 3px 10px rgba(120,30,20,.14); }
.chip.primary {
  background: linear-gradient(165deg, var(--seal), var(--cinnabar-d));
  box-shadow: inset 0 0 0 1px rgba(255,246,235,.35), 0 2px 8px rgba(120,30,20,.25);
}
.chip.primary:active { transform: translateY(0) scale(.97); }
.acts.vertical .chip { border-left: 2px solid transparent; }
.acts.vertical .chip.primary { border-left-color: #fff; }
.btn { box-shadow: 0 1px 2px rgba(60,45,20,.06); }

/* ---------- 八、立绘：题跋镜框 ---------- */
.hero-card {
  position: relative;
  background:
    linear-gradient(180deg, rgba(212,175,55,.12), rgba(212,175,55,0) 40%),
    var(--card);
  padding-top: 16px;
}
.hero-card::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: var(--gold-rule);
  border-radius: 8px 8px 0 0;
  pointer-events: none;   /* ★ 2026-10-15：装饰线不得吃点击 */
}

.hero-meta b { letter-spacing: 2.5px; }
.hero-age {
  background: rgba(154,123,63,.10); padding: 2px 10px; border-radius: 8px;
  display: inline-block; white-space: nowrap; letter-spacing: .5px;
}
.hero-meta span.hero-post { word-break: keep-all; overflow-wrap: anywhere; }

/* ---------- 九、自由行动：朱印标签与列头 ---------- */
.acts-title { letter-spacing: 2px; }
.acts-title::before {
  content: '行'; display: inline-block; width: 19px; height: 19px; line-height: 19px;
  text-align: center; font-family: var(--font-ui); font-size: 12px; font-weight: 700;
  color: #fff7ef; background: linear-gradient(160deg, var(--seal), var(--cinnabar-d));
  border-radius: 4px; margin-right: 6px; vertical-align: 1px; transform: rotate(-6deg);
  box-shadow: 0 1px 4px rgba(120,30,20,.3), inset 0 0 0 1px rgba(255,255,255,.3);
}
.grp-tab { letter-spacing: 2.5px; }
.grp-tab.on {
  background: linear-gradient(165deg, var(--seal), var(--cinnabar-d));
  box-shadow: inset 0 0 0 1px rgba(255,246,235,.4), 0 2px 8px rgba(120,30,20,.28);
}
.grp-tab:hover { border-color: var(--gold); color: var(--seal); }
.actbtn { border-radius: 10px; }
.actbtn .act-ic {
  background: linear-gradient(160deg, rgba(164,52,43,.12), rgba(212,175,55,.14));
  border: 1px solid rgba(164,52,43,.14);
  box-shadow: inset 0 1px 2px rgba(255,255,255,.4);
}

/* ---------- 十、快捷指令：分组题竖排小标 ---------- */
.qgrp-t { letter-spacing: 3px; position: relative; padding-left: 14px; }
.qgrp-t::before {
  content: '▪'; position: absolute; left: 2px; top: 50%; transform: translateY(-50%);
  color: var(--seal); font-size: 11px;
}

/* ---------- 十一、记事：年份印章 ---------- */
.log li { border-radius: 8px; }
.log .log-year {
  background: var(--seal);
  box-shadow: inset 0 0 0 1px rgba(212,175,55,.35), 0 1px 3px rgba(60,45,20,.18);
}

/* ---------- 十二、输入与下拉 ---------- */
.row input, .row select, .fmt select, .npcsel {
  transition: border-color .15s ease, box-shadow .15s ease;
}
.row input:focus, .row select:focus, .fmt select:focus, .npcsel:focus {
  border-color: var(--gold); box-shadow: 0 0 0 3px rgba(212,175,55,.16);
}

/* ---------- 十三、危机横幅金字 ---------- */
.crisis-banner { border-top-color: var(--seal); }
.cb-t b { letter-spacing: .5px; }

/* ---------- 十四、菜单与结局微调 ---------- */
.menuwrap { border: 1px solid var(--line2); box-shadow: var(--shadow), inset 0 0 0 1px rgba(255,255,255,.55); }
.mhead h1 { letter-spacing: 18px; }
.endwrap h2 { letter-spacing: 10px; }

/* ---------- 十五、滚动条金玉 ---------- */
::-webkit-scrollbar { width: 11px; }
::-webkit-scrollbar-thumb { background: linear-gradient(90deg, var(--line), var(--gold2)); border-radius: 8px; }

/* ---------- 十六、黑暗主题全局微调 ---------- */
[data-theme="dark"] .panel::after { opacity: .4; }
[data-theme="dark"] .modal-box::before { opacity: .75; }
[data-theme="dark"] .opt { background: #211f1a; }
[data-theme="dark"] .hero-age { background: rgba(201,169,97,.14); }
[data-theme="dark"] .acts-title::before, [data-theme="dark"] .grp-tab.on { box-shadow: inset 0 0 0 1px rgba(255,246,235,.25), 0 2px 8px rgba(0,0,0,.4); }

/* ==================== 今日要闻 · 报纸头版 ==================== */
.news-front {
  background: linear-gradient(180deg, #fdfaf2, #f6efdf);
  border: 1px solid var(--line2);
  border-radius: 6px; padding: 18px 22px 14px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.6);
}
.nf-mast {
  font-family: var(--font-kai); font-size: 40px; font-weight: 900; letter-spacing: 14px;
  text-align: center; color: #a82828; line-height: 1.25;
  text-shadow: 0 2px 0 rgba(255,255,255,.6);
}
.nf-date {
  text-align: center; font-size: 12.5px; color: var(--ink2);
  letter-spacing: 1.5px; margin-top: 2px;
}
.nf-line {
  height: 2px; background: linear-gradient(90deg, var(--line), #a82828 50%, var(--line));
  margin: 9px 0 3px;
}
.nf-caption {
  text-align: center; font-size: 10px; letter-spacing: 3px; color: var(--ink2);
  text-transform: uppercase; margin-bottom: 6px; opacity: .75;
}
.news-item {
  border-top: 1px solid rgba(120,90,40,.18);
  padding: 11px 2px 9px; position: relative;
}
.news-item:first-of-type { border-top: none; }
.n-sec {
  display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: 1px;
  color: #fff; background: linear-gradient(135deg, var(--seal), var(--cinnabar-d));
  padding: 1px 9px; border-radius: 3px; margin-bottom: 6px;
}
.n-head { margin: 0 0 5px; font-size: 16.5px; font-weight: 800; line-height: 1.5; color: var(--ink); }
.n-lead { margin: 0; font-size: 13px; line-height: 1.8; color: var(--ink2); }
.nf-foot { border-top: 1px solid var(--line); margin-top: 8px; padding-top: 7px; text-align: right; }
/* 反腐判决大要闻：占两大版 */
.news-fanfu {
  border-top: 2px solid var(--seal);
  border-bottom: 2px solid var(--seal);
  padding: 14px 4px 12px; margin: 8px 0;
  background: linear-gradient(180deg, rgba(164,52,43,.05), rgba(164,52,43,0));
}
.news-fanfu .nf-tag {
  display: inline-block; font-size: 12.5px; font-weight: 800; letter-spacing: 2px;
  color: #fff; background: linear-gradient(135deg, var(--seal), var(--cinnabar-d));
  padding: 3px 14px; border-radius: 3px; margin-bottom: 8px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.25);
}
.news-fanfu .nf-fic {
  display: inline-block; margin-left: 8px; font-size: 11px; font-weight: 600;
  color: var(--seal); border: 1px dashed rgba(164,52,43,.55); border-radius: 3px;
  padding: 1px 8px; letter-spacing: .5px; vertical-align: 2px;
}
.news-fanfu .nf-big-head {
  margin: 0 0 10px; font-size: 21px; font-weight: 900; line-height: 1.45;
  color: var(--seal); letter-spacing: .5px;
}
.news-fanfu .nf-illus { margin: 0 0 10px; border: 1px solid rgba(164,52,43,.35); border-radius: 4px; overflow: hidden; }
.news-fanfu .nf-illus .scene-illus img { display: block; width: auto; max-width: 100%; height: auto; max-height: 210px; margin: 0 auto; object-fit: contain; object-position: center; }
.news-fanfu .nf-lead { margin: 0 0 8px; font-size: 14px; font-weight: 600; line-height: 1.9; color: var(--ink); }
.news-fanfu .nf-body { border-top: 1px dashed rgba(164,52,43,.35); padding-top: 8px; }
.news-fanfu .nf-p { margin: 0 0 7px; font-size: 13.5px; line-height: 2; color: var(--ink2); text-indent: 2em; }
.news-fanfu .nf-sign { margin-top: 6px; text-align: right; font-size: 11.5px; color: var(--ink2); letter-spacing: 1px; }
[data-theme="dark"] .news-fanfu { background: linear-gradient(180deg, rgba(164,52,43,.12), rgba(164,52,43,0)); }
[data-theme="dark"] .news-front { background: linear-gradient(180deg, #24211b, #1e1b15); }
[data-theme="dark"] .nf-mast { text-shadow: 0 2px 0 rgba(0,0,0,.4); }

/* ==================== 文胆阁（拟稿） ==================== */
.draft-box { display: flex; flex-direction: column; gap: 10px; }
.draft-kinds { display: flex; flex-wrap: wrap; gap: 6px; }
.draft-tab { font-size: 12px; padding: 4px 10px; background: var(--panel2); border: 1px solid var(--line); border-radius: 999px; color: var(--ink2); cursor: pointer; }
.draft-tab.on { background: linear-gradient(135deg, var(--seal), var(--cinnabar-d)); color: #fff; border-color: transparent; font-weight: 700; }
.draft-ta {
  width: 100%; box-sizing: border-box; min-height: 150px; resize: vertical;
  font-family: var(--font-kai); font-size: 15px; line-height: 1.9; color: var(--ink);
  background: linear-gradient(180deg, #fdfcf7, #f8f4e9); border: 1px solid var(--line2);
  border-radius: 6px; padding: 12px 14px; box-shadow: inset 0 1px 4px rgba(120,90,40,.08);
}
[data-theme="dark"] .draft-ta { background: linear-gradient(180deg, #24211b, #1e1b15); }
.draft-result { border-top: 2px solid var(--line); padding-top: 10px; animation: rise .25s ease; }
.dr-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.dr-score { font-family: var(--font-kai); font-size: 30px; font-weight: 900; color: var(--cinnabar-d); line-height: 1; }
.dr-score small { font-size: 12px; color: var(--ink2); }
.dr-note { margin: 4px 0; font-size: 13px; line-height: 1.7; color: var(--ink2); padding-left: 10px; border-left: 3px solid var(--line2); }
.dr-tip { margin: 8px 0 0; font-size: 13.5px; line-height: 1.7; color: var(--ink); font-weight: 700; }
.tag { font-size: 12px; padding: 2px 8px; border-radius: 3px; font-weight: 700; }
.t-ok { background: rgba(168,40,40,.12); color: var(--cinnabar-d); }
.t-no { background: rgba(140,120,20,.14); color: #8a7418; }

/* ==================== 常委会争吵实录 ==================== */
.debate-stage { display: flex; flex-direction: column; gap: 8px; margin: 8px 0; }
.dl-row { border: 1px solid var(--line); border-left: 4px solid var(--line2); border-radius: 6px; padding: 8px 10px; background: var(--panel2); }
.dl-row.oppose { border-left-color: #a82828; background: linear-gradient(90deg, rgba(168,40,40,.06), transparent); }
.dl-row.support { border-left-color: var(--seal); }
.dl-who { display: flex; align-items: center; gap: 6px; margin-bottom: 3px; }
.dl-line { margin: 0; font-size: 13.5px; line-height: 1.75; color: var(--ink); }
.quell-opts { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; }
.quell-opt { text-align: left; justify-content: flex-start; white-space: normal; line-height: 1.5; }
.quell-ta { min-height: 54px; }
.debate-verdict { border: 1px dashed rgba(168,40,40,.5); background: rgba(168,40,40,.05); color: var(--cinnabar-d); font-weight: 700; padding: 8px 12px; border-radius: 6px; margin-bottom: 8px; font-size: 13px; }

/* ==================== AI 年度剧情事件 ==================== */
.ai-event { border-left: 4px solid var(--cinnabar-d); background: linear-gradient(90deg, rgba(168,40,40,.05), transparent 40%); }
.ai-event h3 .tag { margin-left: 6px; }

/* ==================== 年度叙事「年记」手稿弹窗 ==================== */
.digest { margin: 0 -4px; }
.dg-paper {
  background: var(--card);
  background-image: var(--tex);
  border: 1px solid var(--line);
  border-top: 3px solid var(--seal);
  border-radius: 4px;
  padding: 22px 26px 16px;
  box-shadow: var(--shadow);
}
.dg-head { display: flex; justify-content: space-between; align-items: baseline; }
.dg-title { font-family: var(--font-kai); font-size: 30px; font-weight: 800; letter-spacing: 22px; color: var(--ink); }
.dg-by { font-family: var(--font-ui); font-size: 13.5px; font-weight: var(--ui-small-weight); color: var(--ink2); }
.dg-line { border-top: 2px solid var(--ink); margin: 10px 0 12px; }
.dg-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.dg-src { margin-left: auto; }
.dg-body .dg-narr {
  font-family: var(--font-kai);
  font-size: 17.5px; line-height: 2.05; color: var(--ink);
  text-indent: 2.6em; margin: 0 0 8px; text-align: justify;
}
.dg-body { max-height: 58vh; overflow-y: auto; }
.dg-body::-webkit-scrollbar { width: 10px; }
.dg-body::-webkit-scrollbar-thumb { background: var(--line); border-radius: 5px; }
.dg-foot {
  font-family: var(--font-ui); color: var(--ink2); font-size: 13px; font-weight: var(--ui-small-weight);
  text-align: right; margin-top: 12px; padding-top: 8px; border-top: 1px dashed var(--line);
}

/* ==================== 属性面板 · 官身气象（印章卡片） ==================== */
.stats {
  display: flex; flex-direction: column; gap: 7px; margin-bottom: 14px;
  background: linear-gradient(180deg, rgba(255,252,243,.92), rgba(246,239,223,.88));
  border: 1px solid var(--line2); border-radius: 8px; padding: 10px 12px 12px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.55), 0 3px 10px rgba(90,60,20,.07);
  position: relative;
}
.stats::before { content: ''; position: absolute; inset: 4px; border: 1px dashed rgba(140,100,40,.16); border-radius: 5px; pointer-events: none; }
.stats-head {
  display: flex; justify-content: space-between; align-items: baseline;
  padding-bottom: 7px; margin-bottom: 4px;
  border-bottom: 1px solid rgba(140,100,40,.24);
  font-family: var(--font-kai); font-weight: 800; letter-spacing: 3px; color: var(--cinnabar-d); font-size: 14.5px;
}
.stats-head em { font-style: normal; font-size: 10px; letter-spacing: 1.5px; color: var(--ink2); font-weight: 400; }
/* 窄栏（官身气象卡片）：副标题收缩不挤压主标题，避免"仕途·登峰"被挤成竖排 */
.profile-box .stats-head { gap: 6px; }
.profile-box .stats-head span { flex: none; white-space: nowrap; }
.profile-box .stats-head em { flex: 1; text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; letter-spacing: 1px; font-size: 9.5px; }
.stat-card {
  display: flex; align-items: center; gap: 9px; padding: 5px 8px 5px 6px; border-radius: 7px;
  background: rgba(255,255,255,.42); border: 1px solid rgba(140,100,40,.13);
  transition: background .2s ease, transform .2s ease;
}
.stat-card:hover { background: rgba(255,255,255,.78); transform: translateX(2px); }
.sc-ic {
  width: 27px; height: 27px; flex: none; display: flex; align-items: center; justify-content: center;
  font-size: 14px; border-radius: 50%;
  background: linear-gradient(160deg, #f4e9d0, #e5d3a8);
  border: 1px solid rgba(140,100,40,.32); box-shadow: inset 0 1px 0 rgba(255,255,255,.65), 0 1px 2px rgba(90,60,20,.12);
}
.sc-main { flex: 1; min-width: 0; }
.sc-top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 3px; }
.sc-name { font-size: 12px; color: var(--ink2); letter-spacing: 2px; }
.sc-num { font-family: var(--font-kai); font-size: 17px; font-weight: 900; line-height: 1; color: var(--ink); }
.stat-card.warn .sc-num { color: var(--danger); }
.stat-card.warn .sc-ic { border-color: rgba(168,40,40,.5); box-shadow: inset 0 1px 0 rgba(255,255,255,.6), 0 0 0 1px rgba(168,40,40,.12); }
.net3 { display: flex; gap: 12px; align-items: center; }
.net-one { flex: 1; display: flex; align-items: center; gap: 5px; min-width: 0; }
.net-one .stat-track { flex: 1; height: 5px; }
.nt-l { font-size: 11px; color: var(--ink2); letter-spacing: 1px; }
.net-one b { font-family: var(--font-ui); font-size: 13px; font-weight: var(--ui-small-weight); color: var(--ink); }
/* 人脉三段竖排：与上方属性行同一节奏，标签左 / 进度条中 / 数值右对齐 */
.net-rows { display: flex; flex-direction: column; gap: 3px; }
.net-row { display: flex; align-items: center; gap: 6px; }
.net-row .nt-l { width: 14px; flex: none; font-size: 11px; color: var(--ink2); letter-spacing: 0; text-align: center; }
.net-row .stat-track { flex: 1; height: 5px; }
.net-row .nt-v { width: 20px; flex: none; text-align: right; font-family: var(--font-ui); font-size: 12.5px; font-weight: var(--ui-small-weight); color: var(--ink); }
.sc-net-tag { font-size: 10px; color: var(--ink2); letter-spacing: 1px; opacity: .7; }
/* 合并侧栏：属性 + 晋升共用一框 */
.profile-box { gap: 6px; }
.profile-stats { display: flex; flex-direction: column; gap: 5px; }
.profile-stats .stat-card { padding: 4px 7px 4px 5px; }
.profile-stats .sc-ic { width: 24px; height: 24px; font-size: 13px; }
.profile-stats .sc-num { font-size: 15px; }
.profile-stats .sc-note { font-size: 10px; opacity: .65; margin-left: 4px; }
.profile-div {
  height: 0; margin: 4px 0 2px;
  border-top: 1px dashed rgba(140,100,40,.28);
}
.profile-promo { padding-top: 2px; }
.profile-promo-h {
  font-family: var(--font-ui); font-size: 13.5px; font-weight: 800;
  letter-spacing: 2px; color: var(--cinnabar-d, var(--seal));
  margin: 0 0 8px; padding-left: 2px;
  display: flex; align-items: center; gap: 8px;
}
.profile-promo-h::after {
  content: ''; flex: 1; height: 0;
  border-top: 1px solid rgba(164,52,43,.18);
}
.profile-box .promo { margin: 0; }
.profile-box .promo-head .ph-rank { font-size: 20px; }
.profile-box .checks { margin-bottom: 6px; }
.profile-box .checks .chk { padding: 5px 6px; margin-bottom: 3px; }
[data-theme="dark"] .stats { background: linear-gradient(180deg, #26221b, #211d16); box-shadow: inset 0 0 0 1px rgba(255,255,255,.05), 0 3px 10px rgba(0,0,0,.3); }
[data-theme="dark"] .profile-div { border-top-color: rgba(201,169,78,.28); }
[data-theme="dark"] .profile-promo-h { color: #d8c281; }
[data-theme="dark"] .profile-promo-h::after { border-top-color: rgba(201,169,78,.2); }
[data-theme="dark"] .stat-card { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.09); }
[data-theme="dark"] .stat-card:hover { background: rgba(255,255,255,.1); }
[data-theme="dark"] .sc-ic { background: linear-gradient(160deg, #3a3227, #2c251c); border-color: rgba(255,255,255,.16); }

/* ==================== 开局设置页 · 下拉框治理 ==================== */
.createform .row { min-width: 0; }
.createform .row select { width: 100%; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.sel-hint {
  font-size: 13px; line-height: 1.35; color: #1a1a1a; font-weight: 700;
  min-height: 14px; padding: 2px 2px 0; white-space: normal; overflow: visible;
}
.createform {
  background: transparent;
  border: 1.5px solid rgba(30,22,8,.7);
  box-shadow: var(--shadow), inset 0 0 0 1px rgba(255,255,255,.6);
}
.createform .row {
  background: rgba(255,255,255,.5) url(../assets/scenes/form_card_bg.jpg?v=20261027PERF1) center/cover no-repeat;
  border: 1.5px solid rgba(30,22,8,.55);
  outline: 1px solid rgba(164,52,43,.16);
  outline-offset: 2.5px;
  border-radius: 10px;
  padding: 10px 12px 10px 14px;
  box-shadow: 0 1px 3px rgba(30,22,8,.1);
  transition: transform .18s ease, box-shadow .18s ease;
}
.createform .row:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(30,22,8,.14); }
.createform .row:focus-within { border-color: rgba(164,52,43,.75); outline-color: rgba(164,52,43,.4); box-shadow: 0 0 0 3px rgba(164,52,43,.12); }
.createform .row label { position: relative; padding-left: 10px; font-size: 13px; letter-spacing: 1.5px; color: var(--ink); font-weight: 800; }
.createform .row label::before { content: ''; position: absolute; left: 0; top: 3px; bottom: 3px; width: 3px; border-radius: 2px; background: linear-gradient(180deg,#b03232,#8c1f28); }
.createform .row input, .createform .row select {
  border-color: transparent; background: transparent; padding: 4px 2px; font-weight: 900; font-size: 16px; color: #8c1f28;
  box-shadow: none;
}
.createform .row select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, rgba(120,90,40,.55) 50%), linear-gradient(135deg, rgba(120,90,40,.55) 50%, transparent 50%); background-position: calc(100% - 14px) 55%, calc(100% - 9px) 55%; background-size: 5px 5px; background-repeat: no-repeat; padding-right: 20px; }
[data-theme="dark"] .createform { background-color: #4e432f; }
[data-theme="dark"] .createform .row { background: rgba(255,255,255,.04); background-image: none; border-color: rgba(255,255,255,.22); }
[data-theme="dark"] .createform .row select { background-image: linear-gradient(45deg, transparent 50%, rgba(255,255,255,.6) 50%), linear-gradient(135deg, rgba(255,255,255,.6) 50%, transparent 50%); }

/* ==================== 领导谈话 ==================== */
.talk-box { display: flex; flex-direction: column; gap: 10px; }
.talk-line { border: 1px solid var(--line); border-left: 4px solid var(--seal); border-radius: 8px; padding: 10px 12px; background: linear-gradient(90deg, rgba(164,52,43,.05), transparent 45%); }
.tl-who { display: flex; align-items: center; gap: 7px; margin-bottom: 6px; }
.tl-who .portrait.mini { width: 26px; height: 30px; border-radius: 3px; object-fit: cover; object-position: top center; }
.tl-text { margin: 0; font-size: 15px; line-height: 1.8; color: var(--ink); font-family: var(--font-kai); }
.talk-ta { min-height: 74px; }
.talk-banner { border-left-color: var(--seal); }
.talk-result { display: flex; flex-direction: column; gap: 8px; }
.talk-illus { width: 100%; border-radius: 8px; border: 1px solid var(--line); display: block; margin-bottom: 2px; }

/* ==================== 干部考察（AI 证词 → 任用结论） ==================== */
.assess-box { display: flex; flex-direction: column; gap: 10px; }
.verdict-card { display: flex; gap: 12px; align-items: center; border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; background: rgba(255,255,255,.4); }
.verdict-card .vd-ic { font-size: 32px; flex: none; }
.verdict-card .vd-body { display: flex; flex-direction: column; gap: 3px; }
.verdict-card .vd-body b { font-size: 17px; font-family: var(--font-kai); letter-spacing: 1px; }
.verdict-card.v-reuse { border-left: 4px solid #b8860b; background: linear-gradient(90deg, rgba(184,134,11,.1), transparent 60%); }
.verdict-card.v-transfer { border-left: 4px solid #3a6ea5; }
.verdict-card.v-sinecure { border-left: 4px solid #888; }
.verdict-card.v-defer { border-left: 4px solid #c07a1d; }
.verdict-card.v-remove { border-left: 4px solid #a5412f; }
.verdict-card.v-punish { border-left: 4px solid #7a1f18; background: linear-gradient(90deg, rgba(164,52,43,.15), transparent 60%); }

.t-sinecure { background: rgba(120,120,120,.14); color: #6b6b6b; border: 1px solid rgba(120,120,120,.3); }

/* ---------- 顶栏重构：年份徽章 · 职位铭牌 · 信息行 ---------- */
.top { padding: 18px 0 16px; position: relative;
  background: linear-gradient(180deg, rgba(154,63,63,.055), transparent 62%);
  border-bottom: 1px solid rgba(154,63,63,.16); }
.top::after { content: none; }
.top-c { text-align: center; display: flex; align-items: center; justify-content: space-between; gap: 22px; margin: 0 auto; }
/* 左：年份徽章（红底金字） */
.t-left { flex: none; min-width: 220px; text-align: left; display: flex; align-items: center; gap: 14px; }
.t-year-seal { flex: none; width: 84px; height: 84px; border-radius: 14px;
  background: linear-gradient(150deg, #9c2222, #7a1515 70%, #6b1010);
  border: 1px solid rgba(212,175,55,.8);
  box-shadow: inset 0 0 0 2px rgba(212,175,55,.16), inset 0 0 22px rgba(0,0,0,.25), 0 4px 14px rgba(90,20,20,.28);
  display: flex; flex-direction: column; align-items: center; justify-content: center; color: #fff; }
.t-year-seal .y { font-family: var(--font-kai); font-size: 33px; font-weight: 800; line-height: 1; letter-spacing: 2px; color: #f4e3b2; text-shadow: 0 1px 0 rgba(0,0,0,.35); }
.t-year-seal .yl { font-size: 9.5px; letter-spacing: 3.5px; color: rgba(244,227,178,.85); margin-top: 4px; }
.t-year-seal .era-mini { display: none; }
.era-tag-box { flex: none; align-self: center; margin-top: 4px; padding: 3px 8px; border-radius: 6px; background: linear-gradient(135deg, #8c1f28, #a03030); color: #f4e3b2; font-size: 11px; font-weight: 700; letter-spacing: 1px; border: 1px solid rgba(212,175,55,.6); box-shadow: 0 2px 8px rgba(140,31,40,.3); cursor: pointer; white-space: nowrap; }
.t-year-wrap { display: flex; flex-direction: column; align-items: center; }
.t-ymeta { display: flex; flex-direction: column; gap: 5px; }
.t-line { font-size: 13.5px; color: var(--ink2); letter-spacing: 1.5px; font-weight: 600; }
.t-age { font-size: 15px; color: var(--gold); font-weight: 700; letter-spacing: 3px; }
.t-ap { display: flex; align-items: center; gap: 8px; }
.ap-dots { display: inline-flex; gap: 4px; }
.ap-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(154,123,63,.22); border: 1px solid rgba(154,123,63,.45); }
.ap-dot.on { background: var(--seal); border-color: var(--seal); box-shadow: 0 0 0 2px rgba(154,123,63,.16); }
.ap-txt { font-size: 12.5px; color: var(--ink2); display: inline-flex; align-items: baseline; gap: 3px; }
.ap-txt b { font-size: 15px; color: var(--seal); font-weight: 800; }
.ap-txt small, .ap-txt em { color: var(--ink3); font-style: normal; }
/* 中：职位铭牌 */
.t-mid { flex: 1 1 auto; text-align: center; min-width: 0; padding: 0 12px;
  display: flex; flex-direction: column; align-items: center; gap: 6px; }
.t-org { font-size: 13px; letter-spacing: 5px; color: var(--gold); font-weight: 700;
  background: rgba(154,63,63,.06); border: 1px solid rgba(154,63,63,.28); border-radius: 999px;
  padding: 3px 20px 3px 24px; }
.t-job { font-family: var(--font-kai); font-size: 30px; font-weight: 800; color: var(--seal);
  letter-spacing: 3px; line-height: 1.2; white-space: normal; word-break: break-word;
  border-bottom: 2px solid rgba(212,175,55,.55); padding-bottom: 6px; }
.t-tags { margin-top: 2px; display: inline-flex; flex-wrap: wrap; gap: 5px; justify-content: center; align-items: center; }
.t-tags .tag { margin-left: 0; padding: 3px 12px; font-size: 13px; font-weight: 700; background: #8c1f28; color: #fff; border: 1px solid #a03a43; border-radius: 6px; box-shadow: 0 1px 3px rgba(140,31,40,.25); }
.t-tags .tag.t-route { background: #2c5f8a; color: #fff; border-color: #1a4a70; }
.t-tags .tag.t-standing { background: #5a0f18; color: #fff; border-color: #7a2028; }
.t-tags .tag.t-port { background: #8c1f28; color: #fff; border: 1px solid #a03a43; }
/* 右：两排——上排信息胶囊，下排操作按钮，一律贴最右缘 */
.t-right { flex: none; min-width: 0; margin-left: auto; text-align: right; display: flex; flex-direction: column; gap: 7px; align-items: flex-end; }
.t-chip-row { display: flex; gap: 7px; justify-content: flex-end; flex-wrap: wrap; max-width: 600px; }
.tl-chip { white-space: nowrap; display: inline-flex; align-items: center; gap: 5px;
  font-size: 12.5px; font-weight: 600; color: var(--ink);
  background: rgba(255,255,255,.6); border: 1px solid rgba(154,63,63,.3);
  border-radius: 999px; padding: 3px 11px; letter-spacing: .3px; }
[data-theme="dark"] .tl-chip { background: rgba(255,255,255,.05); }
.tl-chip img.tl-ic { width: 14px; height: 14px; }
.t-btns { display: flex; gap: 6px; justify-content: flex-end; flex-wrap: wrap; }
.t-btns .btn { padding: 6px 12px; font-size: 13px; }
.t-btns .btn.primary { padding: 6px 14px; }
/* 超宽屏两侧有 34px 卷轴轴杆：顶栏左右留出让位，否则右侧按钮/胶囊会被轴杆压住 */
@media (min-width: 1840px) { .top { padding-left: 40px; padding-right: 40px; } }
/* 中窄屏：胶囊行收窄，宁可换行也别挤掉中间职位牌 */
@media (max-width: 1340px) { .t-chip-row { max-width: 410px; } }
@media (max-width: 1150px) {
  .top-c { flex-wrap: wrap; gap: 14px 24px; }
  .t-left { min-width: 0; }
  .t-right { min-width: 0; text-align: right; align-items: flex-end; }
  .t-chip-row { max-width: 100%; justify-content: flex-end; }
  .t-btns { align-self: flex-end; }
}
@media (max-width: 900px) {
  .t-year-seal { width: 68px; height: 68px; }
  .t-year-seal .y { font-size: 26px; }
  .t-job { font-size: 26px; letter-spacing: 2px; }
}
[data-theme="dark"] .t-job { text-shadow: 0 1px 0 rgba(0,0,0,.35); }

/* ==================== 群众来信 + 领导批示 ==================== */
.letter-box { display: flex; flex-direction: column; gap: 12px; }
.lt-head { border-bottom: 1px dashed var(--line); padding-bottom: 10px; display: flex; flex-direction: column; gap: 4px; }
.lt-stamp { display: inline-block; align-self: flex-start; font-family: var(--font-ui); font-size: 13px; font-weight: var(--ui-small-weight); letter-spacing: 4px; color: var(--seal); border: 1px solid rgba(154,63,63,.4); padding: 2px 10px 2px 14px; border-radius: 3px; }
.lt-body { background: rgba(245,240,228,.6); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; line-height: 1.8; }
.lt-body p { margin: 0; }
.lt-tip { line-height: 1.6; }
.lt-ta { margin-top: 2px; }
.lt-target { margin-top: 2px; padding: 9px 12px; border: 1px solid rgba(154,63,63,.35); border-left: 4px solid var(--seal); border-radius: 6px; background: rgba(164,52,43,.06); line-height: 1.7; font-size: 14px; }
.lt-target b { color: var(--seal); }
.lt-target .muted.small { display: inline; }
[data-theme="dark"] .lt-target { background: rgba(164,52,43,.12); border-color: rgba(200,90,80,.4); }

.letter-banner { border-left-color: #b8860b; }
.chip-badge { display: inline-block; margin-left: 6px; background: var(--seal); color: #fff; border-radius: 999px; padding: 0 7px; font-size: 11px; line-height: 16px; vertical-align: 1px; }
.endorse-box { margin-top: 10px; border: 1px solid rgba(154,63,63,.35); border-radius: 8px; padding: 10px 14px; background: rgba(255,248,244,.7); }
.en-head { display: flex; align-items: baseline; justify-content: space-between; border-bottom: 1px dashed rgba(154,63,63,.25); padding-bottom: 6px; }
.en-red { font-family: var(--font-kai); font-size: 18px; font-weight: 700; color: var(--seal); letter-spacing: 6px; }
.en-words { font-family: var(--font-kai); font-size: 17px; color: var(--seal); margin: 8px 0 4px; line-height: 1.5; }
.en-foot { display: flex; justify-content: flex-end; gap: 18px; font-size: 12.5px; color: var(--ink3); }

.tl-round { display: flex; justify-content: center; margin-bottom: 10px; }
.tl-round .tag { margin: 0; }

/* ==================== 自由行动 · 抽屉式分组（标签与选项明显区分，防误点） ==================== */
.acts-col .grp-tabs { flex-direction: column; align-items: stretch; gap: 6px; margin-top: 12px; }
.acts-col .grp-tab {
  width: 100%; display: flex; align-items: center; gap: 8px;
  font-family: var(--font-kai); font-size: 16px; font-weight: 800; letter-spacing: 1px;
  border: 1px solid var(--line); background: linear-gradient(180deg, rgba(255,255,255,.78), rgba(245,241,231,.55));
  color: var(--ink); padding: 9px 12px; border-radius: 9px; cursor: pointer;
  transition: all .15s ease; box-shadow: 0 1px 2px rgba(0,0,0,.04);
}
.acts-col .grp-tab:hover { border-color: rgba(154,123,63,.6); color: var(--seal); transform: none; }
.acts-col .grp-tab .gt-name { display: inline-flex; align-items: center; gap: 6px; }
.acts-col .grp-tab .gt-n {
  font-family: var(--font-ui); font-size: 12px; font-weight: 700; color: #6b5410;
  background: rgba(184,134,11,.16); border: 1px solid rgba(184,134,11,.35);
  border-radius: 999px; padding: 1px 8px; line-height: 16px;
}
.acts-col .grp-tab .gt-caret { margin-left: auto; font-size: 12.5px; color: var(--ink3); font-family: var(--font-ui); font-weight: 600; letter-spacing: .5px; }
.acts-col .grp-tab.on {
  background: linear-gradient(90deg, rgba(184,134,11,.24), rgba(184,134,11,.08));
  border-color: rgba(184,134,11,.65); color: #7a5d12;
}
.acts-col .grp-tab.on .gt-caret { color: #7a5d12; }
.acts-col .grp-open {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 8px;
  margin: 4px 0 8px; padding: 10px;
  background: rgba(250,246,233,.75); border: 1px dashed rgba(154,123,63,.5); border-radius: 10px;
}
.acts-col .acts-grid.grp-open { grid-template-columns: 1fr; gap: 6px; }
.acts-col .grp-open .actbtn {
  width: 100%; min-height: 0; padding: 9px 13px; gap: 0;
  flex-direction: row; align-items: center; justify-content: flex-start; text-align: left;
  background: transparent; border: 1px solid var(--line); border-radius: 8px;
  box-shadow: none; position: relative; overflow: hidden;
}
.acts-col .grp-open .actbtn .act-ic,
.acts-col .grp-open .actbtn .act-ap,
.acts-col .grp-open .actbtn .tip-why { display: none; }
.acts-col .grp-open .actbtn .act-nm { font-size: 13px; font-weight: 600; line-height: 1.35; letter-spacing: 0; flex: 0 1 auto; }
.acts-col .grp-open .actbtn.withwhy { min-height: 0; flex-wrap: nowrap; }
.acts-col .grp-open .actbtn:hover { border-color: var(--seal); color: var(--seal); transform: translateX(2px); }
.acts-col .grp-open .actbtn::before { top: 0; bottom: 0; border-radius: 0; }
.acts-col .grp-open .actbtn.locked { background: transparent; opacity: .65; }

/* ==================== 政务子分类：小按钮再展开（避免 33 项一屏堆不下） ==================== */
.gov-subs {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 8px; padding: 8px;
  background: rgba(250,246,233,.5); border: 1px dashed rgba(154,123,63,.45); border-radius: 10px;
}
.gov-sub { display: flex; flex-direction: column; gap: 8px; }
.gov-subtab {
  justify-content: center; gap: 5px; padding: 7px 6px; font-size: 13px; border-radius: 9px;
  flex: 1 1 calc(50% - 4px); min-width: 0; text-align: center;
  background: rgba(255,255,255,.6); border-color: rgba(154,123,63,.35);
}
.gov-subtab .gt-name { font-size: 13px; white-space: nowrap; }
.gov-subtab .gt-n { font-size: 11px; opacity: .75; }
.gov-subtab .gt-caret { font-size: 11px; opacity: .8; }
.gov-subtab.on {
  background: linear-gradient(90deg, rgba(184,134,11,.18), rgba(184,134,11,.05));
  border-color: rgba(184,134,11,.55); color: #7a5d12;
}
[data-theme="dark"] .gov-subs { background: rgba(255,255,255,.04); border-color: rgba(154,123,63,.35); }
[data-theme="dark"] .gov-subtab { background: rgba(255,255,255,.05); border-color: rgba(154,123,63,.3); }
[data-theme="dark"] .gov-subtab.on {
  background: linear-gradient(90deg, rgba(184,134,11,.28), rgba(184,134,11,.1));
  border-color: rgba(184,134,11,.5); color: #e8d49a;
}
/* 分组内锁定项：紧凑横排小行（名称 + 原因一行，不竖排、不撑高） */
.gov-locked { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; }
.gov-locked .lock-row { padding: 2px 7px; }
.gov-locked .lock-row .lr-n { font-size: 11.5px; }
.gov-locked .lock-row .lr-why { font-size: 10.5px; }
.gov-locked .lock-row { padding: 2px 7px; }
.gov-locked .lock-row .lr-n { font-size: 11.5px; }
.gov-locked .lock-row .lr-why { font-size: 10.5px; }
.gov-locked .lock-row { flex-direction: row; align-items: baseline; gap: 8px; padding: 4px 9px; border-radius: 6px; background: rgba(250,246,233,.4); border: 1px dashed rgba(154,123,63,.3); }
.gov-locked .lock-row .lr-n { font-size: 12.5px; color: var(--ink2); }
.gov-locked .lock-row .lr-why { font-size: 11px; }
[data-theme="dark"] .gov-locked .lock-row { background: rgba(255,255,255,.03); border-color: rgba(154,123,63,.3); }

/* ==================== 左侧栏整理：标题单行、锁提示紧凑 ==================== */
.acts-title { display: flex; align-items: baseline; gap: 8px; flex-wrap: nowrap; }
.acts-title .acts-tip { margin-left: auto; font-size: 12px; color: var(--ink3); letter-spacing: .5px; font-weight: 600; }
.acts-title .muted { font-size: 14px; }
.qgrp-lock {
  border: 1px dashed var(--line); border-radius: 8px; padding: 5px 10px;
  color: var(--ink3); font-size: 11.5px; line-height: 1.4; letter-spacing: .3px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help;
}
.tip-panel { margin-bottom: 6px; }
.tip-panel .acts-grid { margin-top: 8px; }
.acts-col .tip-panel .actbtn { min-height: 44px; }

/* 标题两行式：主行 + 提示小字行 */
.acts-title { display: flex; flex-direction: column; gap: 2px; }
.acts-title .at-row { display: inline-flex; align-items: baseline; gap: 6px; }
.acts-title .acts-tip { font-size: 11.5px; color: var(--ink3); letter-spacing: .5px; font-weight: 600; }

/* ==================== 快捷指令 · 重排（四组分区 + 短文案 + 分隔线） ==================== */
.quick .qgrp { margin-top: 10px; }
.quick .qgrp:first-of-type { margin-top: 0; }
.quick .qgrp-t {
  font-family: var(--font-ui); font-size: 13.5px; letter-spacing: 2px; font-weight: 800;
  color: var(--gold); padding: 2px 0 4px 12px; position: relative; margin-bottom: 4px;
  border-bottom: none;
}
.quick .qgrp-t::before {
  content: ''; position: absolute; left: 0; top: 4px; bottom: 6px; width: 3px;
  background: linear-gradient(180deg, var(--gold), rgba(184,134,11,.25)); border-radius: 2px;
}
.quick .acts .chip {
  justify-content: flex-start; width: 100%; margin: 0 0 5px;
  padding: 7px 10px; font-size: 13.5px; letter-spacing: .3px;
}
.quick .acts .chip:last-child { margin-bottom: 0; }
.quick .qdiv { display: block; height: 1px; background: rgba(154,123,63,.28); margin: 7px 2px 8px; }
.qgrp.urgent {
  border: 1px solid rgba(168,40,40,.4); border-radius: 8px;
  background: rgba(168,40,40,.06); padding: 8px 10px;
}
.qgrp.urgent .qgrp-t { color: #a82828; }
.qgrp.urgent .qgrp-t::before { background: linear-gradient(180deg, #a82828, rgba(168,40,40,.25)); }
.quick .qgrp.urgent .chip { margin-bottom: 5px; }

/* ==================== 快捷指令 · 折叠抽屉（复用 grp-tab 抽屉样式） ==================== */
.quick .grp-tab { margin-bottom: 0; }
.quick .q-open { margin: 6px 0 8px; }
.quick .q-open .chip { margin-bottom: 5px; }
.quick .q-open .chip:last-child { margin-bottom: 0; }

/* 顶栏顶部横条已移除（玩家反馈多余红线条） */
.top::before { content: none !important; }

/* 顶栏音乐按钮：开时高亮 */
.top-c .t-btns .music-on { background: rgba(184,134,11,.16); border-color: var(--gold); color: #7a5d12; font-weight: 800; }

/* ==================== 城市治理系统 ==================== */
.city-attr { margin: 10px 0; }
.city-issues { margin: 10px 0 14px; border: 1px solid rgba(168,40,40,.35); border-radius: 10px; padding: 10px 12px; background: rgba(168,40,40,.045); }
.city-issues.ok { border-color: rgba(76,120,60,.4); background: rgba(76,120,60,.06); }
.city-issues h4, .city-attr h4 { font-size: 15px; font-weight: 800; color: var(--seal); margin-bottom: 8px; }
.city-issues h4 { color: #a82828; }
.city-issues.ok h4 { color: #4c783c; }
.ci-item { padding: 7px 0; border-bottom: 1px dashed rgba(0,0,0,.08); }
.ci-item:last-child { border-bottom: none; }
.ci-item b { display: block; font-size: 14px; color: #8c2323; }
.ci-item .muted { display: block; margin-top: 2px; line-height: 1.5; }
.city-cur { border: 1px solid rgba(184,134,11,.5); background: rgba(184,134,11,.09); border-radius: 8px; padding: 7px 10px; font-size: 13.5px; margin-bottom: 8px; }
.pol-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.pol-card { min-height: 58px; }
.pol-card.sel { border-color: var(--seal); background: rgba(164,52,43,.07); box-shadow: inset 0 0 0 1px var(--seal); }
.pol-card.sel .act-nm { color: var(--seal); }
.pol-card .tip-why { font-size: 11px; color: var(--ink3); font-weight: 600; }
.stat-head .bad { color: #a82828; font-weight: 800; }
.stat-track i.c-low { background: linear-gradient(90deg, #c0352b, #e0664f); box-shadow: inset 0 0 0 1px rgba(192,53,43,.4); }
.stat-track i.c-high { background: linear-gradient(90deg, #2f8f46, #5cb877); box-shadow: inset 0 0 0 1px rgba(47,143,70,.4); }
.stat-track i.c-ok { background: linear-gradient(90deg, #d99a26, #f2c94c); box-shadow: inset 0 0 0 1px rgba(217,154,38,.45); }
.stat-track.mini { height: 8px; border-radius: 4px; margin: 3px 0 5px; box-shadow: inset 0 1px 2px rgba(0,0,0,.16); }
.stat-head.small { font-size: 13px; font-weight: 700; }
.stat-head.small .c-hi { color: #2f8f46; font-weight: 800; }
.stat-head.small .c-mid { color: #c9851a; font-weight: 800; }
.city-side { margin-top: 10px; }
.city-side .chip-badge.warn { background: #a82828; margin-left: 6px; }
.city-side-foot { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-top: 6px; font-size: 12.5px; }

/* 城市数据总览（由七维治理指标派生的硬数据） */
.city-data-wrap { margin: 10px 0; }
.city-data-wrap h4, .city-insight h4 { font-size: 15px; font-weight: 800; color: var(--seal); margin-bottom: 8px; }
/* 头部 KPI：满意度大字 + 三个体量数 */
.city-kpi { display: flex; align-items: center; gap: 14px; background: linear-gradient(135deg, rgba(184,134,11,.10), rgba(164,49,43,.07)); border: 1px solid rgba(184,134,11,.35); border-radius: 10px; padding: 10px 14px; margin-bottom: 12px; flex-wrap: wrap; }
.kpi-main { text-align: center; min-width: 92px; }
.kpi-main b { display: block; font-size: 32px; font-weight: 800; color: var(--seal); line-height: 1; }
.kpi-main b i { font-style: normal; font-size: 14px; margin-left: 2px; }
.kpi-main span { font-size: 12px; color: var(--ink3); }
.kpi-sub { display: flex; gap: 14px; flex-wrap: wrap; font-size: 13px; color: var(--ink2); }
.kpi-sub span { font-weight: 600; }
/* 分组数据网格：5 组 × 4 项 */
.cd-group { margin-bottom: 12px; }
.cd-group:last-child { margin-bottom: 0; }
.cd-gh { font-size: 13px; font-weight: 800; color: var(--ink2); border-left: 3px solid var(--gold); padding-left: 7px; margin-bottom: 6px; }
.cd-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 7px; }
.dc { background: var(--paper2); border: 1px solid rgba(0,0,0,.06); border-radius: 8px; padding: 7px 8px; text-align: center; }
.dc.warn { border-color: rgba(168,40,40,.5); background: rgba(168,40,40,.07); }
.dc.warn .dc-v { color: #a82828; }
.dc-v { display: block; font-size: 16px; font-weight: 800; color: var(--ink1); line-height: 1.1; }
.dc-v i { font-style: normal; font-size: 10.5px; font-weight: 600; color: var(--ink3); margin-left: 1px; }
.dc-l { display: block; font-size: 11px; color: var(--ink3); margin-top: 2px; }
.city-data-mini { display: flex; flex-wrap: wrap; gap: 2px 10px; font-size: 11.5px; color: var(--ink3); margin: 7px 0 4px; padding: 5px 8px; background: var(--paper2); border-radius: 7px; border: 1px solid rgba(0,0,0,.05); }
.city-data-mini span { white-space: nowrap; }
@media (max-width: 640px) { .cd-grid { grid-template-columns: repeat(2, 1fr); } }
/* 数据画像：数字政务≥60 解锁的精准诊断 */
.city-insight { margin: 10px 0; border-radius: 10px; padding: 10px 12px; border: 1px solid rgba(0,0,0,.08); background: var(--paper2); }
.city-insight.warn { border-color: rgba(168,40,40,.4); background: rgba(168,40,40,.05); }
.city-insight.good { border-color: rgba(76,120,60,.45); background: rgba(76,120,60,.06); }
.city-insight.base { border-color: rgba(140,90,30,.35); background: rgba(184,134,11,.06); }
.city-insight .ci-line { font-size: 13px; line-height: 1.6; color: var(--ink2); }
.city-insight.warn .ci-line { color: #8c2323; }
.city-insight.good .ci-line { color: #3f6a30; }
/* AI 城市数据研判报告（参谋把 21 项数据讲成人话） */
.city-report { margin: 10px 0; border-radius: 10px; padding: 10px 12px; border: 1px solid rgba(74,110,138,.4); background: rgba(74,110,138,.06); }
.city-report.empty { border-style: dashed; background: var(--paper2); border-color: rgba(0,0,0,.12); }
.city-report.loading { opacity: .8; }
.city-report h4 { font-size: 15px; font-weight: 800; color: var(--seal); margin-bottom: 8px; }
.cr-text { font-size: 13.5px; line-height: 1.75; color: var(--ink2); margin-bottom: 6px; }
.cr-sub { font-size: 12.5px; font-weight: 800; color: var(--ink2); margin: 8px 0 3px; }
.cr-line { font-size: 13px; line-height: 1.6; color: var(--ink2); padding: 2px 0; border-bottom: 1px dashed rgba(0,0,0,.06); }
.cr-line:last-child { border-bottom: none; }
.cr-foot { margin-top: 9px; display: flex; gap: 6px; flex-wrap: wrap; }
[data-theme="dark"] .city-data .dc, [data-theme="dark"] .city-data-mini, [data-theme="dark"] .city-insight, [data-theme="dark"] .city-report { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }

/* ============ 城市治理面板 · 美化（分区标题 / 治理看板 / 收支对比 / 方针筹码 / 环形 KPI） ============ */
/* 分区标题：朱红竖线 + 图标 + 说明右对齐 */
.sec-h { display: flex; align-items: center; gap: 7px; font-size: 15px; font-weight: 800; color: var(--seal); margin: 0 0 9px; padding-left: 9px; border-left: 3px solid var(--seal); line-height: 1.4; }
.sec-h .muted { font-weight: 500; font-size: 12px; margin-left: auto; }
.sec-h .chip-badge.warn { margin-left: 0; }

/* 七维治理看板 */
.ga-wrap { padding: 12px 14px; }
.ga-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.ga-card { position: relative; background: linear-gradient(160deg, rgba(255,255,255,.5), rgba(236,227,212,.35)); border: 1px solid rgba(0,0,0,.07); border-radius: 9px; padding: 8px 10px 9px; transition: transform .16s ease, box-shadow .16s ease; }
.ga-card:hover { transform: translateY(-1px); box-shadow: var(--shadow); }
.ga-top { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
.ga-nm { font-size: 13px; font-weight: 700; color: var(--ink2); }
.ga-lv { font-size: 11px; font-weight: 800; padding: 1px 7px; border-radius: 9px; border: 1px solid transparent; }
.lv1 .ga-lv { color: #2f6b41; background: rgba(63,125,85,.13); border-color: rgba(63,125,85,.35); }
.lv2 .ga-lv { color: #6b5518; background: rgba(184,134,11,.13); border-color: rgba(184,134,11,.35); }
.lv3 .ga-lv { color: #6a6355; background: rgba(0,0,0,.05); border-color: rgba(0,0,0,.12); }
.lv4 .ga-lv { color: #8c2323; background: rgba(168,40,40,.12); border-color: rgba(168,40,40,.35); }
.ga-v { font-size: 21px; font-weight: 800; color: var(--ink); line-height: 1.35; letter-spacing: .5px; }
.ga-v i { font-style: normal; font-size: 11px; font-weight: 600; color: var(--ink3); margin-left: 1px; }
.ga-d { font-size: 11.5px; font-weight: 800; margin-left: 6px; }
.ga-d.up { color: #2f6b41; }
.ga-d.down { color: #a82828; }
.ga-d.flat { color: var(--ink3); }
.ga-card.lv4 { border-color: rgba(168,40,40,.3); background: linear-gradient(160deg, rgba(168,40,40,.07), rgba(236,227,212,.3)); }
.ga-card .stat-track { height: 6px; margin-top: 2px; }

/* 积弊：按缺口深度分级 */
.city-issues .ci-item { position: relative; padding: 8px 10px 8px 12px; border-radius: 8px; border-bottom: 1px dashed rgba(0,0,0,.08); background: rgba(255,255,255,.32); }
.city-issues .ci-item::before { content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 2px; background: #b4761f; }
.city-issues .ci-item.sev2::before { background: #c2562c; }
.city-issues .ci-item.sev3::before { background: #a82828; }
.ci-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.ci-gap { font-size: 11.5px; font-weight: 800; color: var(--ink3); white-space: nowrap; }
.sev3 .ci-gap { color: #a82828; }

/* 方针卡片：图标 + 得/代价筹码 */
.pol-card { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; padding: 9px 10px; text-align: left; }
.pol-ic { font-size: 17px; line-height: 1; }
.pol-effs { display: flex; flex-wrap: wrap; gap: 3px; }
.pol-effs em { font-style: normal; font-size: 10.5px; font-weight: 700; padding: 1px 5px; border-radius: 7px; border: 1px solid transparent; }
.pol-effs em.up { color: #2f6b41; background: rgba(63,125,85,.11); border-color: rgba(63,125,85,.28); }
.pol-effs em.down { color: #8c2323; background: rgba(168,40,40,.09); border-color: rgba(168,40,40,.25); }

/* 财政：结余/债务大字卡 + 收支柱对比 */
.fin-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 9px; }
.fin-cell { background: var(--paper2); border: 1px solid rgba(0,0,0,.06); border-radius: 9px; padding: 8px 10px; text-align: center; }
.fin-cell.main { background: linear-gradient(150deg, rgba(184,134,11,.13), rgba(255,255,255,.35)); border-color: rgba(184,134,11,.32); }
.fin-cell.warn { background: rgba(168,40,40,.07); border-color: rgba(168,40,40,.3); }
.fin-v { display: block; font-size: 20px; font-weight: 800; color: var(--ink); line-height: 1.2; }
.fin-cell span:not(.fin-v) { font-size: 11.5px; color: var(--ink3); }
.fin-io { margin: 4px 0 8px; }

/* ---------- 财政与转移支付面板（UI.showFinance）：此前这批类从未落地样式 ----------
   症状：fin-money 的 5 张「盘子」卡竖排成一列；fin-proj 的左右两栏（项目名 / 操作按钮）
   上下堆叠，操作按钮跑到名字下方；分区标题 fin-h 与正文挤在一起。
   这里按本表既有设计语言补齐（纸张色 + 细边 + 圆角 + 宋楷字体），颜色全部走主题变量。 */
.fin-head { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 2px 0 8px; }
.fin-track-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 0 0 9px; }

/* 盘子五格：自适应网格，窄屏自动折行，不再竖排 */
.fin-money { display: grid; grid-template-columns: repeat(auto-fit, minmax(98px, 1fr)); gap: 7px; margin: 0 0 10px; }
.fin-money-i { background: var(--paper2); border: 1px solid var(--line); border-radius: 8px; padding: 7px 8px; text-align: center; }
.fin-money-i b { display: block; font-family: var(--font-kai); font-size: 16px; font-weight: 800; color: var(--seal); line-height: 1.25; }
.fin-money-i span { display: block; font-size: 11px; color: var(--ink2); margin-top: 1px; }

/* 分区标题：与 .sec-h 同族的左金线样式 */
.fin-h { margin: 12px 0 6px; font-size: 13.5px; font-weight: 700; color: var(--ink); border-left: 3px solid var(--gold); padding-left: 7px; }

/* 项目行：左「名称 + 两行说明」、右「操作按钮」，横向对齐 */
.fin-proj { display: flex; align-items: center; gap: 10px; background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; margin-bottom: 5px; }
.fin-proj-l { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.fin-proj-l b { font-size: 13.5px; color: var(--ink); }
.fin-proj-r { flex: none; display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }

/* 项目库素材：按领域分组 */
.fin-cand { margin-top: 4px; }
.fin-cat { margin-bottom: 9px; }
.fin-cat-n { display: inline-block; font-size: 12px; font-weight: 700; color: var(--ink2); background: var(--paper2); border: 1px solid var(--line); border-radius: 5px; padding: 1px 8px; margin-bottom: 5px; }

/* 自由立项：名称输入 + 一行「领域 / 规模 / 入库」 */
.fin-free { background: rgba(154,123,63,.05); border: 1px dashed var(--line); border-radius: 9px; padding: 9px 11px; margin-bottom: 4px; }
.fin-free .free-name { width: 100%; box-sizing: border-box; font: inherit; font-size: 13.5px; padding: 6px 9px; border-radius: 7px; border: 1px solid var(--line); background: var(--card); color: var(--ink); margin-bottom: 7px; }
.fin-free-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.fin-free-row select { font: inherit; font-size: 13px; padding: 5px 8px; border-radius: 7px; border: 1px solid var(--line); background: var(--card); color: var(--ink); }

/* 风险提示 / 财政事件：列表排版（风险走 --warn 警示色） */
.fin-warn { margin: 0 0 4px; padding-left: 18px; font-size: 12.5px; color: var(--warn); line-height: 1.75; }
.fin-warn li { margin: 2px 0; }
.fin-ev { margin: 0 0 4px; padding-left: 18px; font-size: 12.5px; color: var(--ink2); line-height: 1.75; }
.fin-ev li { margin: 2px 0; }

[data-theme="dark"] .fin-free { background: rgba(255,255,255,.03); }
@media (max-width: 640px) {
  .fin-money { grid-template-columns: repeat(2, 1fr); }
  .fin-proj { flex-direction: column; align-items: stretch; }
  .fin-proj-r { justify-content: flex-end; }
}

.io-row { display: flex; align-items: center; gap: 8px; font-size: 12.5px; margin-bottom: 5px; }
.io-lb { width: 58px; color: var(--ink2); font-weight: 700; flex: none; }
.io-track { flex: 1; height: 9px; background: var(--paper2); border-radius: 5px; overflow: hidden; box-shadow: inset 0 1px 2px rgba(0,0,0,.1); }
.io-track i { display: block; height: 100%; border-radius: 5px; }
.io-track i.in { background: linear-gradient(90deg, #3f7a34, #7fbe6a); }
.io-track i.out { background: linear-gradient(90deg, #b4761f, #d9ab5c); }
.io-v { width: 62px; text-align: right; font-weight: 800; color: var(--ink); flex: none; }
.lv-card { min-height: 0; }

/* 数据总览：环形 KPI + 体量三格 */
.city-kpi { display: flex; align-items: center; gap: 16px; background: linear-gradient(135deg, rgba(184,134,11,.10), rgba(164,49,43,.06)); border: 1px solid rgba(184,134,11,.32); border-radius: 11px; padding: 12px 16px; margin-bottom: 12px; flex-wrap: wrap; }
.kpi-ring { --p: 50; position: relative; width: 84px; height: 84px; border-radius: 50%; flex: none;
  background: conic-gradient(var(--seal) calc(var(--p) * 1%), rgba(0,0,0,.07) 0);
  display: flex; flex-direction: column; align-items: center; justify-content: center; }
.kpi-ring::after { content: ''; position: absolute; inset: 7px; border-radius: 50%; background: var(--card); pointer-events: none; /* ★ 2026-10-15：装饰环不得吃点击 */ }
.kpi-ring b { position: relative; z-index: 1; font-size: 22px; font-weight: 800; color: var(--seal); line-height: 1; }
.kpi-ring b i { font-style: normal; font-size: 11px; margin-left: 1px; }
.kpi-ring span { position: relative; z-index: 1; font-size: 10.5px; color: var(--ink3); margin-top: 2px; }
.kpi-sub { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; flex: 1; min-width: 220px; }
.kpi-cell { text-align: center; }
.kpi-cell b { display: block; font-size: 17px; font-weight: 800; color: var(--ink); line-height: 1.25; }
.kpi-cell b i { font-style: normal; font-size: 11px; font-weight: 600; color: var(--ink3); margin-left: 1px; }
.kpi-cell span { font-size: 11px; color: var(--ink3); }
.dc { position: relative; background: linear-gradient(160deg, rgba(255,255,255,.45), rgba(236,227,212,.3)); border: 1px solid rgba(0,0,0,.07); border-radius: 8px; padding: 8px 6px; text-align: center; transition: transform .16s ease, box-shadow .16s ease; }
.dc:hover { transform: translateY(-1px); box-shadow: var(--shadow); }
.dc.warn { box-shadow: inset 3px 0 0 #a82828; }
.cd-gh { letter-spacing: .5px; }

/* 画像 / 研判：引文式排版 */
.city-insight .ci-line { position: relative; padding-left: 12px; }
.city-insight .ci-line::before { content: '·'; position: absolute; left: 3px; color: var(--gold); font-weight: 800; }
.city-report .cr-text { position: relative; padding: 8px 12px; border-radius: 8px; background: rgba(255,255,255,.4); border-left: 3px solid rgba(74,110,138,.5); }
.city-report h4, .city-insight h4, .city-data-wrap h4, .city-attr h4 { border-left: none !important; padding-left: 0 !important; }
[data-theme="dark"] .ga-card, [data-theme="dark"] .dc { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
[data-theme="dark"] .kpi-ring::after { background: var(--card); }
[data-theme="dark"] .city-report .cr-text { background: rgba(255,255,255,.04); }
@media (max-width: 640px) {
  .ga-grid { grid-template-columns: repeat(2, 1fr); }
  .fin-grid { grid-template-columns: repeat(2, 1fr); }
  .kpi-sub { grid-template-columns: repeat(3, 1fr); }
  .kpi-ring { width: 72px; height: 72px; }
}

/* ============ AI 玩法：市政研判会 + 上级交办 ============ */
.meet-box, .task-box { text-align:left; }
.meet-topic { font-size:1.06rem; font-weight:700; color:var(--seal); background:rgba(181,31,31,.06); border:1px solid rgba(181,31,31,.25); border-left:4px solid var(--seal); padding:10px 12px; border-radius:8px; line-height:1.7; }
.meet-sub { margin:6px 2px 12px; }
.meet-lines { display:flex; flex-direction:column; gap:8px; margin:10px 0 12px; }
.meet-line { border:1px solid var(--line); border-left:3px solid #9a7b3c; background:var(--paper); border-radius:8px; padding:9px 12px; }
.ml-who { font-weight:700; color:#7a5a1e; font-size:.92rem; }
.ml-text { margin:4px 0 2px; line-height:1.65; }
.ml-fire { display:block; color:#8a7a5a; }
.task-from { font-weight:700; color:var(--seal); margin-bottom:8px; }
.task-body { background:var(--paper); border:1px solid var(--line); border-left:4px solid #9a7b3c; border-radius:8px; padding:10px 12px; line-height:1.7; margin-bottom:8px; }
.task-banner { border-left-color:#9a7b3c; }
.eff-txt { margin:4px 0 0; line-height:1.7; }

/* 研判会发言人立场标签 */
.ml-loy { display:inline-block; margin-left:8px; font-size:.72rem; padding:1px 7px; border-radius:10px; background:var(--paper); border:1px solid var(--line); color:#8a7a5a; }
.ml-loy.ok { color:#2e6b34; border-color:#2e6b34; background:rgba(46,107,52,.08); }
.ml-loy.bad { color:#b51f1f; border-color:#b51f1f; background:rgba(181,31,31,.08); }

/* 关系网家人卡片精简：详情移到点开弹窗，卡片保持紧凑 */
.fam-grid { grid-template-columns: repeat(auto-fill, minmax(195px, 1fr)); gap: 10px; }
.fam-card { padding: 8px 10px; gap: 8px; }
.fam-info { min-width: 0; flex: 1; }
.fam-name { font-size: 15px; font-weight: 700; white-space: normal; line-height: 1.25; word-break: break-all; }
.fam-rel { font-size: .75rem; opacity: .8; letter-spacing: 1px; }
.fam-vitals { font-size: 11px; gap: 8px; margin-top: 3px; }

/* AI 剧情选项：长文本改为上下两行（标签整行 + 效果整行），杜绝竖排挤压 */
.ai-event .opt { flex-wrap: wrap; align-items: flex-start; gap: 6px 14px; }
.ai-event .opt-label { flex: 1 1 100%; white-space: normal; line-height: 1.5; }
.ai-event .opt-meta { flex: 1 1 100%; white-space: normal; line-height: 1.5; word-break: break-all; }

/* 待解锁栏：紧凑小按钮网格，展开不撑爆页面 */
.lock-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 10px; max-height: 320px; overflow: auto; padding-right: 2px; }
.lockbtn { display: flex; flex-direction: column; gap: 2px; text-align: left; border: 1px dashed var(--line); background: rgba(255,255,255,.03); border-radius: 8px; padding: 6px 8px; cursor: not-allowed; color: var(--ink2); font-family: inherit; }
.lockbtn .lb-n { font-size: 13px; font-weight: 600; line-height: 1.3; }
.lockbtn .lb-why { font-size: 11px; opacity: .75; }
.acts-panel .qgrp.urgent { margin-bottom: 8px; }
.acts-panel .chips { display: flex; flex-wrap: wrap; gap: 6px; }
.acts-panel .q-open.chips { margin-top: 4px; }

/* 待解锁栏：内容自适应高度（不再与自由行动等高拉伸，避免底部留白） */
.lock-rail { align-self: start; display: flex; flex-direction: column; }
.lock-panel { display: flex; flex-direction: column; min-height: 0; }
.lock-panel .grp-tab { flex-shrink: 0; }
.lock-panel > h3, .lock-panel > p { flex-shrink: 0; }
.lock-grid { flex: 1; max-height: none; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 1fr; }

/* 自由行动栏：去面板框，只留按钮（与待解锁栏统一） */
.acts-rail { display: flex; flex-direction: column; gap: 10px; }
.acts-rail .ap-line { font-size: 13px; color: var(--ink2); font-weight: 600; letter-spacing: .3px; }
.acts-rail .ap-line b { color: #b78a4e; font-size: 14px; }
.acts-rail .grp-tabs { display: flex; flex-direction: column; gap: 6px; }

/* 办公室入口：独立按钮（自由行动面板顶部，横跨整行，金棕描边醒目） */
.actbtn.act-office-standalone {
  width: 100%;
  justify-content: flex-start;
  font-size: 16px;
  padding: 15px 18px;
  margin-top: 4px;
  border: 2px solid #b78a4e;
  background: linear-gradient(180deg, #fff8ea, #f3e5c3);
  color: #6b4a1f;
  font-weight: 800;
  box-shadow: 0 2px 10px rgba(120, 80, 20, 0.18);
}
.actbtn.act-office-standalone:hover { background: linear-gradient(180deg, #fdf0d2, #eed9ab); border-color: #9a6b2c; }
.actbtn.act-office-standalone .act-sub { font-size: 12.5px; font-weight: 600; color: #9a7b48; margin-left: 6px; }

/* 办公室弹窗插画：随职级越来越大气 */
.office-illus { position: relative; border-radius: 10px; overflow: hidden; margin-bottom: 12px; border: 1px solid #d9c49a; box-shadow: 0 2px 8px rgba(90, 60, 15, 0.12); }
.office-illus img { width: 100%; display: block; }
.office-tag { position: absolute; right: 10px; bottom: 8px; background: rgba(45, 30, 8, 0.62); color: #f5e9c9; font-size: 12px; padding: 3px 12px; border-radius: 999px; letter-spacing: 1px; }

/* ============ 办公室主面板（2026-09-19 第六轮改造 / 第九轮提亮）============
   结构：上方插画（复用 .office-illus）+ 状态条 + 下方入口卡片网格。
   全部走主题变量，浅色/深色自动适配。

   ★ 第九轮提亮说明（玩家反馈「灰色小字看不清」）：
     这批小字原本一律用 var(--ink3)。--ink3 的定位是「比 --ink2 更淡的辅助灰」，
     在浅色下是 #8a8272 压在 --card(#fbf7ef) 上 —— 对比度约 3.56:1，
     11–12px 的字号下连 WCAG AA 的 4.5:1 都够不到，深色下 #837a6b 更糊。

   ★★ 第九轮·二次修订（玩家反馈「还是看不清，加粗字体吧」）：
     第一版只把颜色抬到 --ink2 / --ofc-dim，把字重定在 600 —— 玩家实测仍然吃力。
     复查后确认原因不在颜色，而在**字体族**：
       全局 --font-base 是衬线（Noto Serif SC / Songti SC / SimSun / 宋体）。
       中文衬线字体**没有真正的 600 字重**，浏览器要么回退到 Regular，
       要么用「机械加粗 / faux bold」把笔画糊一层 —— 越"加粗"越显模糊。
     所以第二版做三件事：
       ① 颜色再压深一档：--ofc-dim 浅 #554f43 / 深 #c9bfa9，
          辅助小字直接用 --ink（最深一档），不再用中间色；
       ② 字重直接跳到 **700**（跨越 faux-bold 阈值，多数系统会给真 Bold 面）；
       ③ 这批小字**换无衬线字体**（--font-ui = 微软雅黑 / 苹方 / 思源黑体）——
          黑体在 12–13px 小字号下的笔画更均匀，辨识度明显优于宋体。
     处理范围仍然**只限这块面板**，不动全局 --ink3 / --font-base。

     配比（实测 WCAG）：
       辅助小字 浅 #3a352b on #fbf7ef = 11.02:1 ／ 深 #ddd4c2 on #211f1a = 10.86:1
       次要说明 浅 #554f43 on #f5efe4 =  6.86:1 ／ 深 #c9bfa9 on #1b1a17 =  9.11:1 */
.office-panel {
  display: block;
  /* 办公室专用的「次级辅助色」：比 --ink2 明显更实，压得住小字号。
     浅色 #554f43 / 深 #c9bfa9 —— 实测 6.86:1 / 9.11:1，远超 AA。 */
  --ofc-dim: #554f43;
  /* 办公室小字专用字体：方正字体优先，官场文书感 */
  /* ★ 2026-09-29 全站思源宋体：办公室面板原本走「方正黑体/书宋」那套，
     现在也把思源宋体放在最前（方正系列仍在栈里兜底 —— 没装思源宋体时不变丑）。 */
  --ofc-font: var(--font-serif), "方正黑体简体", "方正书宋简体", "方正仿宋简体", "方正楷体简体",
    "FZHei-B01", "FZShuSong-Z01", "FangSong_GB2312", "FangSong",
    "Microsoft YaHei", "PingFang SC", sans-serif;
  line-height: 1.7;
}
html[data-theme="dark"] .office-panel { --ofc-dim: #c9bfa9; }

/* 卡片折叠功能 */
.ofc-card-h { cursor: pointer; user-select: none; }
.ofc-card-h .ofc-fold { margin-left: 4px; font-size: 12px; color: var(--gold); transition: transform .2s; }
.ofc-card.collapsed .ofc-card-h .ofc-fold { transform: rotate(-90deg); }
.ofc-card.collapsed > .ofc-list,
.ofc-card.collapsed > .ofc-else-row,
.ofc-card.collapsed > .acts,
.ofc-card.collapsed > p,
.ofc-card.collapsed > .ofc-metrics,
.ofc-card.collapsed > .ofc-cap,
.ofc-card.collapsed > .ofc-status { display: none; }
/* 国务政务菜单：折叠时收起全部按钮行 */
.ofc-card.collapsed > .city-side-foot,
.ofc-card.collapsed > .city-side-foot-btns { display: none; }
/* 国家工程 · 操作折叠：默认收起，点标题展开全部选项 */
.proj-ops { margin-top: 6px; border-left-width: 3px; }
.proj-ops .ofc-card-h { margin-bottom: 6px; cursor: pointer; }
.proj-ops.collapsed > .proj-ops-body { display: none; }
.proj-ops.collapsed { padding-bottom: 4px; }
.proj-ops-body .chip.tiny { font-size: 12px; padding: 5px 8px; }
.nation-ops { margin-top: 8px; }
.nation-lead-sel { font-size: 11px; padding: 2px 4px; border: 1px solid var(--line); border-radius: 4px; background: var(--card); color: var(--ink); }
.ofc-card.collapsed { padding-bottom: 6px; }

/* 顶部状态条：门外几人 / 电话几通，一眼可见 */
.ofc-status { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0 0 12px; }
.ofc-st { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-radius: 9px;
  border: 1px solid var(--line); background: var(--card); min-width: 0; }
.ofc-st.dim { opacity: .62; }
.ofc-st.bad { border-color: var(--danger); background: rgba(164, 52, 43, .07); }
.ofc-st .ofc-ic { font-size: 18px; flex: 0 0 auto; }
.ofc-st .ofc-st-t { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.ofc-st .ofc-st-t b { font-size: 14px; color: var(--ink); }
.ofc-st .ofc-st-t span { font-family: var(--ofc-font); font-size: 13px; color: var(--ink); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ofc-badge { flex: 0 0 auto; font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: rgba(154, 123, 63, .16); color: var(--gold); border: 1px solid rgba(154, 123, 63, .38); }
.ofc-badge.warn { background: rgba(164, 52, 43, .13); color: var(--danger); border-color: rgba(164, 52, 43, .42); }

/* 五入口卡片网格 */
.ofc-grid { display: grid; gap: 10px; }
@media (min-width: 620px) { .ofc-grid { grid-template-columns: 1fr 1fr; } .ofc-grid > .ofc-card:first-child { grid-column: 1 / -1; } }
.ofc-card { border: 1px solid var(--line); border-left: 4px solid rgba(154, 123, 63, .45); border-radius: 10px;
  background: var(--card); padding: 11px 13px; text-align: left; }
.ofc-card-h { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-bottom: 8px; }
.ofc-card .chip { background: #8c1f28; color: #fff; border-color: #8c1f28; font-family: var(--font-serif); }
.ofc-card .chip:hover:not([disabled]) { background: #a52a35; }
.ofc-card .chip.tiny { font-size: 12.5px; }
.ofc-card-h .muted { margin-left: auto; }
/* 办公室块内的 .muted：全局 .muted 是写死的 #3a3530（深色主题下几乎糊在背景里）。
   这里在办公室作用域内改走主题变量，换无衬线 + 700 字重，并统一抬到 13.5px —— 只影响本面板。 */
.office-panel .muted { font-family: var(--font-serif); color: var(--ink); font-weight: 700; }
.office-panel .muted.small,
.office-panel .small { font-size: 13.5px; }
html[data-theme="dark"] .office-panel .muted { color: var(--ink); }
.ofc-card-ic { font-size: 17px; }
.ofc-card p { font-family: var(--font-ui); font-size: 14px; font-weight: var(--ui-small-weight); line-height: 1.8; color: var(--ink); }
.ofc-note { margin-top: 8px; padding-top: 7px; line-height: 1.7; color: #8c1f28; font-weight: 700; }
.ofc-list { display: flex; flex-direction: column; gap: 7px; }

/* 门外候见：容量槽 + 每位访客一行 */
.ofc-cap { display: flex; align-items: center; gap: 10px; margin-bottom: 9px; flex-wrap: wrap; }
.ofc-cap-t { font-family: var(--ofc-font); font-size: 13px; font-weight: 700; color: var(--ink); }
.ofc-slots { display: flex; gap: 5px; }
.ofc-slots i { width: 22px; height: 8px; border-radius: 3px; background: var(--paper2); border: 1px solid var(--line); }
.ofc-slots i.on { background: linear-gradient(180deg, var(--gold), #7d6230); border-color: var(--gold); }
.ofc-guest { display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); background: var(--paper); }
.ofc-guest.warm { border-color: rgba(180, 118, 31, .5); background: rgba(180, 118, 31, .07); }
.ofc-guest.hot { border-color: var(--danger); background: rgba(164, 52, 43, .08); }
.ofc-g-ic { font-size: 17px; flex: 0 0 auto; }
.ofc-g-t { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.ofc-g-t b { font-size: 14px; color: var(--ink); }
.ofc-g-t .muted { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ofc-g-wait { font-family: var(--ofc-font); font-size: 12.5px; color: var(--ofc-dim); font-weight: 700; }
.ofc-guest.hot .ofc-g-wait { color: var(--danger); font-weight: 700; }
.ofc-proj-row { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 6px;
  border: 1px solid var(--line); background: var(--paper); margin-bottom: 4px; }
.ofc-proj-row b { font-size: 13px; color: var(--ink); flex: 1; }
.ofc-proj-row .muted { font-size: 12px; }
.ofc-proj-row .iv-tag { flex: 0 0 auto; }
.proj-rpt-row { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; background: var(--paper); }
.proj-rpt-row.done { border-color: rgba(82,196,26,.4); }
.proj-rpt-row.dead { border-color: rgba(234,102,104,.4); opacity: .75; }
.proj-rpt-h { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px; }
.proj-rpt-h b { font-size: 14px; color: var(--ink); }
.proj-rpt-m { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--ofc-dim); margin-bottom: 4px; }
.proj-rpt-m span { white-space: nowrap; }
.ofc-guest.warm .ofc-g-wait { color: var(--warn); font-weight: 700; }

/* 别处候见：正在谈 / 秘书排板 —— 与门外同构，但底色区分开，避免误认为是门外的人 */
.ofc-else .ofc-list { margin-top: 2px; }
.ofc-else-row { display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); border-left: 3px solid rgba(164, 52, 43, .35); background: var(--paper); }
.ofc-else-row.hot { border-color: var(--danger); border-left-color: var(--danger); background: rgba(164, 52, 43, .08); }
.ofc-else-row .ofc-g-t b { font-size: 14px; color: var(--ink); }
.ofc-else-row .ofc-g-t .muted { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ofc-else-row .ofc-g-wait { font-family: var(--ofc-font); font-size: 12.5px; color: var(--ofc-dim); font-weight: 700; }
.ofc-else-row.hot .ofc-g-wait { color: var(--danger); font-weight: 700; }

/* 内线电话 */
.ofc-call { display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); background: var(--paper); }
.ofc-call.bad { border-color: var(--danger); background: rgba(164, 52, 43, .08); }
.ofc-call.home { border-color: rgba(154, 123, 63, .55); background: rgba(154, 123, 63, .07); }
.ofc-c-ic { font-size: 17px; flex: 0 0 auto; }
.ofc-c-t { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.ofc-c-t b { font-size: 13.5px; color: var(--ink); }
.ofc-c-t .muted { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* 接电话弹窗 */
.ofc-callbox { border: 1px solid var(--line); border-left: 4px solid rgba(154, 123, 63, .5);
  border-radius: 10px; background: var(--card); padding: 12px 14px; margin-bottom: 10px; }
.ofc-callbox.bad { border-left-color: var(--danger); }
.ofc-callbox.home { border-left-color: var(--gold); }
.ofc-callbox .muted { font-family: var(--ofc-font); color: var(--ink); font-weight: 700; }
html[data-theme="dark"] .ofc-callbox .muted { color: var(--ink); }
.ofc-call-h { display: flex; align-items: center; gap: 9px; margin-bottom: 9px; }
.ofc-call-h > div { display: flex; flex-direction: column; gap: 1px; }
.ofc-call-h b { font-size: 14.5px; color: var(--ink); }

/* 风气台账小指标 */
.ofc-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 7px; margin-bottom: 9px; }
.ofc-m { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 7px 4px;
  border-radius: 8px; border: 1px solid var(--line); background: var(--paper); }
.ofc-m b { font-size: 16.5px; color: var(--ink); line-height: 1.2; }
.ofc-m span { font-family: var(--ofc-font); font-size: 12px; color: var(--ofc-dim); font-weight: 700; }
.ofc-m.warm b { color: var(--warn); }
.ofc-m.bad b { color: var(--danger); }

/* ============================================================
   办公室面板 · 卡片 / 数据格 / 按钮 重绘（2026-10-19）
   ------------------------------------------------------------
   旧观感三个问题：
     ① 卡片左侧一道 4px 粗金条 + 10px 圆角，像贴了条胶带；
     ② 数据格是「浅黄方块 + 硬边框」，四块挤在一起没有层次；
     ③ 按钮被 .ofc-card .chip 拍平成死红方块，把 .chip.primary 的渐变和
        hover 全部覆盖掉了 —— 一屏十几个同样大小的红块，看着像表格不像按钮。
   新方案：档案纸卡（细金线 + 短金条 + 微投影）、账页式数据格
   （表格数字 tabular-nums）、印章式主按钮（渐变 + 内高光 + 抬起）。

   ★★ 为什么要 `!important` + `.modal` 前缀：
     styles.css 后半段（约 7886 / 8171 行）有一整套「全局可读性」规则，
     用 !important 把弹窗里所有 .chip / p / .muted 钉成 14.5~15px、700 字重，
     并把 .chip 的圆角、颜色、min-height:36px 全部改掉。
     不带 !important 的规则**一律输**；权重并列时又靠源码顺序决胜负（本段在前）。
     所以这里统一写 `html body .modal .modal-box .office-panel .ofc-card ...` + !important，
     用 (0,4,0) 起的权重压过去，不依赖文件顺序。
   ★ 作用域只到 .office-panel（办公室弹窗），国务/政治局那套 ofc-card 不受影响。
   ============================================================ */
.office-panel {
  --ofc-sans: "MiSans", "HarmonyOS Sans SC", "Noto Sans SC", "Source Han Sans SC",
    "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "DengXian", "等线", sans-serif;
  --ofc-hair: rgba(154, 123, 63, .26);
  --ofc-hair-2: rgba(154, 123, 63, .46);
  --ofc-wash: rgba(154, 123, 63, .07);
  --ofc-raise: 0 1px 2px rgba(74, 56, 24, .05), 0 10px 22px -16px rgba(74, 56, 24, .5);
}
html[data-theme="dark"] .office-panel {
  --ofc-hair: rgba(201, 169, 97, .22);
  --ofc-hair-2: rgba(201, 169, 97, .42);
  --ofc-wash: rgba(201, 169, 97, .07);
  --ofc-raise: 0 1px 2px rgba(0, 0, 0, .5), 0 12px 24px -18px rgba(0, 0, 0, .95);
}

/* ---- 卡片：档案纸 ---- */
html body .modal .modal-box .office-panel .ofc-card {
  position: relative;
  padding: 12px 15px 12px !important;
  border: 1px solid var(--ofc-hair) !important;
  border-radius: 12px !important;
  background: linear-gradient(180deg, rgba(255, 255, 255, .5), rgba(255, 255, 255, 0) 46%), var(--card) !important;
  box-shadow: var(--ofc-raise);
  overflow: hidden;
  transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-card {
  background: linear-gradient(180deg, rgba(255, 255, 255, .035), rgba(255, 255, 255, 0) 48%), var(--card) !important;
}
html body .modal .modal-box .office-panel .ofc-card::before {
  content: "";
  position: absolute; left: 0; top: 13px; bottom: 13px; width: 3px;
  border-radius: 0 3px 3px 0;
  background: linear-gradient(180deg, var(--gold), rgba(154, 123, 63, .12));
  opacity: .8;
}
html body .modal .modal-box .office-panel .ofc-card:hover {
  border-color: var(--ofc-hair-2) !important;
  transform: translateY(-1px);
  box-shadow: 0 2px 4px rgba(74, 56, 24, .06), 0 16px 28px -20px rgba(74, 56, 24, .7);
}
html body .modal .modal-box .office-panel .ofc-card.collapsed:hover { transform: none; }

/* ---- 卡头：题名 + 右侧摘要，底下一道细分隔 ---- */
html body .modal .modal-box .office-panel .ofc-card-h {
  gap: 8px;
  margin-bottom: 9px;
  padding-bottom: 8px;
  border-bottom: 1px dashed var(--ofc-hair);
}
html body .modal .modal-box .office-panel .ofc-card-h b {
  font-family: var(--ofc-font) !important;
  font-size: 15.5px !important;
  font-weight: 700 !important;
  letter-spacing: .8px;
  color: var(--ink) !important;
}
html body .modal .modal-box .office-panel .ofc-card-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 23px; height: 23px; flex: 0 0 auto;
  border-radius: 7px;
  background: var(--ofc-wash);
  border: 1px solid var(--ofc-hair);
  font-size: 12.5px; line-height: 1;
}
html body .modal .modal-box .office-panel .ofc-card-h .ofc-fold {
  order: -1;
  margin-left: 0;
  font-size: 8px;
  color: var(--gold);
  opacity: .72;
}
html body .modal .modal-box .office-panel .ofc-card-h .muted {
  margin-left: auto;
  font-family: var(--ofc-sans) !important;
  font-size: 11.5px !important;
  font-weight: 500 !important;
  letter-spacing: .3px;
  color: var(--ofc-dim) !important;
  opacity: 1 !important;
}

/* ---- 卡身：正文用宋体（公文味），小字换黑体（12px 以下宋体发灰） ---- */
html body .modal .modal-box .office-panel .ofc-card > p,
html body .modal .modal-box .office-panel .ofc-card .ofc-list > p {
  margin: 0 0 8px;
  font-family: var(--ofc-font) !important;
  font-size: 13.5px !important;
  font-weight: 400 !important;
  line-height: 1.78 !important;
  letter-spacing: .2px;
  color: var(--ink2) !important;
}
html body .modal .modal-box .office-panel .ofc-card .muted.small,
html body .modal .modal-box .office-panel .ofc-card p.small {
  font-family: var(--ofc-sans) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  line-height: 1.72 !important;
  color: var(--ofc-dim) !important;
  opacity: 1 !important;
}
html body .modal .modal-box .office-panel .ofc-card .muted.small b { font-weight: 700 !important; color: inherit; }
html body .modal .modal-box .office-panel .ofc-card .ofc-note {
  font-family: var(--ofc-sans) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  color: var(--seal) !important;
}

/* ---- 账页式数据格：表格数字 + 细边框 + 顶部内高光 ---- */
html body .modal .modal-box .office-panel .ofc-metrics { gap: 8px; margin: 2px 0 11px; }
html body .modal .modal-box .office-panel .ofc-m {
  padding: 9px 4px 8px;
  gap: 3px;
  border-radius: 9px;
  border: 1px solid var(--ofc-hair);
  background: linear-gradient(180deg, #fffdf7 0%, #f7f0df 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), 0 1px 2px rgba(74, 56, 24, .05);
}
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-m {
  background: linear-gradient(180deg, #262319 0%, #201e18 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .05);
}
html body .modal .modal-box .office-panel .ofc-m b {
  font-family: var(--ofc-font) !important;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -.2px;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
html body .modal .modal-box .office-panel .ofc-m span {
  font-family: var(--ofc-sans) !important;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: .5px;
  color: var(--ofc-dim);
  white-space: nowrap;
}
html body .modal .modal-box .office-panel .ofc-m.warm {
  border-color: rgba(180, 118, 31, .42);
  background: linear-gradient(180deg, #fffaf0 0%, #fbf0da 100%);
}
html body .modal .modal-box .office-panel .ofc-m.bad {
  border-color: rgba(164, 52, 43, .42);
  background: linear-gradient(180deg, #fff8f5 0%, #fbece7 100%);
}
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-m.warm {
  background: linear-gradient(180deg, #2a2418 0%, #241f15 100%);
}
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-m.bad {
  background: linear-gradient(180deg, #2b1e1b 0%, #241a18 100%);
}

/* ---- 财政明细：右对齐表格数字 + 分段虚线 ---- */
html body .modal .modal-box .office-panel .ofc-fin { margin: 2px 0 10px; }
html body .modal .modal-box .office-panel .ofc-fin-row {
  display: flex; align-items: baseline; gap: 8px;
  padding: 3px 0;
  font-family: var(--ofc-sans) !important;
  font-size: 11.5px;
  line-height: 1.65;
  color: var(--ofc-dim);
}
html body .modal .modal-box .office-panel .ofc-fin-row > span {
  flex: 1 1 auto; min-width: 0;
  overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
}
html body .modal .modal-box .office-panel .ofc-fin-row > b {
  flex: 0 0 auto;
  font-family: var(--ofc-font) !important;
  font-size: 12.5px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: .2px;
}
html body .modal .modal-box .office-panel .ofc-fin-row.sep {
  margin-top: 4px; padding-top: 5px;
  border-top: 1px dashed var(--ofc-hair);
}
html body .modal .modal-box .office-panel .t-ink { color: var(--ink); }
html body .modal .modal-box .office-panel .t-bad { color: var(--danger); }
html body .modal .modal-box .office-panel .t-ok { color: var(--ok); }
html body .modal .modal-box .office-panel .t-warn { color: var(--warn); }

/* ---- 按钮：印章式。主按钮朱红渐变 + 内高光，次按钮描边 ---- */
html body .modal .modal-box .office-panel .ofc-card .chip {
  min-height: 0 !important;
  font-family: var(--ofc-sans) !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  letter-spacing: .6px;
  padding: 7px 16px !important;
  border-radius: 9px !important;
  border: 1px solid #7c1a22 !important;
  color: #fff !important;
  background: linear-gradient(180deg, #ab3a30 0%, #8c1f28 100%) !important;
  box-shadow: 0 1px 2px rgba(90, 20, 16, .2), inset 0 1px 0 rgba(255, 255, 255, .18);
  transition: background .16s ease, box-shadow .16s ease, transform .16s ease, border-color .16s ease;
}
html body .modal .modal-box .office-panel .ofc-card .chip:hover:not([disabled]) {
  color: #fff !important;
  background: linear-gradient(180deg, #bd4a3c 0%, #98262f 100%) !important;
  border-color: #8c1f28 !important;
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -4px rgba(120, 30, 20, .5), inset 0 1px 0 rgba(255, 255, 255, .22);
}
html body .modal .modal-box .office-panel .ofc-card .chip:active:not([disabled]) {
  transform: translateY(0);
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, .28);
}
html body .modal .modal-box .office-panel .ofc-card .chip.tiny {
  padding: 6px 12px !important;
  font-size: 12.5px !important;
}
html body .modal .modal-box .office-panel .ofc-card .chip[disabled] {
  color: var(--ofc-dim) !important;
  background: var(--paper2) !important;
  border-color: var(--line) !important;
  box-shadow: none;
  opacity: .6;
}
/* 深色主题：主按钮提亮一档，否则深红压在深底上糊成一块 */
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-card .chip {
  color: #fff !important;
  background: linear-gradient(180deg, #c05a4c 0%, #9c2c2e 100%) !important;
  border-color: #8c2a26 !important;
}
html[data-theme="dark"] body .modal .modal-box .office-panel .ofc-card .chip:hover:not([disabled]) {
  background: linear-gradient(180deg, #cf6b5b 0%, #ab3536 100%) !important;
}
/* 次按钮（没有 primary 的）：透明底 + 细金边，不和主按钮抢眼 */
html body .modal .modal-box .office-panel .ofc-card .chip:not(.primary) {
  color: var(--seal) !important;
  background: transparent !important;
  border-color: var(--ofc-hair-2) !important;
  box-shadow: none;
}
html body .modal .modal-box .office-panel .ofc-card .chip:not(.primary):hover:not([disabled]) {
  color: var(--seal) !important;
  background: var(--ofc-wash) !important;
  border-color: var(--seal) !important;
  box-shadow: 0 2px 8px -4px rgba(120, 30, 20, .35);
}
html body .modal .modal-box .office-panel .ofc-card .acts { gap: 7px; }

/* 顶部状态条：与卡片同一套纸面语言 */
html body .modal .modal-box .office-panel .ofc-st {
  border-radius: 10px;
  border-color: var(--ofc-hair);
  background: linear-gradient(180deg, rgba(255, 255, 255, .45), rgba(255, 255, 255, 0) 60%), var(--card);
  box-shadow: 0 1px 2px rgba(74, 56, 24, .04);
}
html body .modal .modal-box .office-panel .ofc-st .ofc-st-t b { font-family: var(--ofc-font) !important; font-size: 13px; letter-spacing: .5px; }
html body .modal .modal-box .office-panel .ofc-st .ofc-st-t span { font-family: var(--ofc-sans) !important; font-size: 12px; font-weight: 500; }

/* 厅级以上病故 · 正式讣告（黑白庄重，报纸讣告风格） */
.obituary {
  max-width: 640px; margin: 18px auto 6px; padding: 22px 30px 18px;
  background: #fdfdfb; color: #2b2b2b; border: 1px solid #444; border-radius: 2px;
  box-shadow: 0 1px 0 rgba(0,0,0,.08); text-align: left;
}
.obituary .ob-head { text-align: center; font-size: 26px; letter-spacing: 14px; font-weight: 800; color: #111; padding: 6px 0 14px; border-bottom: 2px solid #222; margin-bottom: 14px; }
.obituary .ob-lead { font-size: 14.5px; line-height: 1.9; text-indent: 2em; }
.obituary .ob-body { font-size: 14.5px; line-height: 1.9; text-indent: 2em; margin-top: 10px; }
.obituary .ob-sign { text-align: right; margin-top: 18px; font-size: 13.5px; line-height: 1.9; color: #333; }
.lockbtn { justify-content: center; }

/* 等高同步后：网格填满剩余高度，行等高；内容超高时滚动保底 */
.lock-grid { min-height: 0; overflow-y: auto; }

/* 部门走访 / 秘书长议事 */
.dept-grid { display: grid; gap: 10px; margin-top: 10px; }
.dept-card { display: flex; align-items: center; gap: 12px; text-align: left; border: 1px solid var(--line); border-left: 4px solid rgba(164,52,43,.32); background: var(--card); border-radius: 10px; padding: 11px 14px; cursor: pointer; font-family: inherit; color: var(--ink); }
.dept-card:hover { border-color: var(--seal); border-left-color: var(--seal); background: rgba(164,52,43,.07); transform: translateX(3px); }
.dept-card .dc-ic { font-size: 20px; }
.dept-card .dc-body { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dept-card .dc-body b { font-size: 15px; }
.dept-card .dc-score { font-weight: 700; color: var(--ink2); }
.dept-ta, .sec-ta { width: 100%; box-sizing: border-box; background: rgba(255,255,255,.5); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; font-family: inherit; font-size: 14px; color: var(--ink); resize: vertical; }
.dept-chat .talk-line, .sec-result .talk-line { margin: 10px 0; }
.sec-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.sec-risk { border: 1px solid rgba(164,52,43,.25); background: rgba(164,52,43,.05); border-radius: 8px; padding: 8px 12px; margin: 8px 0; font-size: 13.5px; }
.sec-risk b { color: var(--seal); }
.dept-result .effbox { margin-top: 8px; }

/* 办公室来访 */
.visitor-banner { border-left-color: #b7791f; }
.visitor-box .opts { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.visitor-opt { display: flex; justify-content: space-between; align-items: center; gap: 10px; text-align: left; border: 1px solid var(--line); background: var(--card); border-radius: 8px; padding: 10px 14px; cursor: pointer; font-family: inherit; color: var(--ink); }
.visitor-opt:hover { border-color: var(--seal); background: rgba(164,52,43,.06); }
.visitor-opt .opt-label { font-weight: 600; font-size: 14px; }
.visitor-opt .opt-meta { font-size: 12.5px; color: var(--ink2); white-space: nowrap; }

/* 来访 · AI 自由对话 */
.v-ta { margin-top: 6px; }
.v-quick { margin-top: 10px; }
.v-quick summary { cursor: pointer; font-size: 13px; color: var(--ink2); }
.v-quick .opts { margin-top: 8px; }
.v-hist { border: 1px dashed var(--line); border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; background: rgba(255,255,255,.4); max-height: 140px; overflow: auto; }
.v-turn { font-size: 13.5px; margin: 3px 0; }
.v-turn b { color: var(--seal); }
.v-turn.ai b { color: #7a6a2c; }

/* 待解锁 · 分类列表（参考样式：分类名 + 圆形角标 + 展开） */
.lock-cats { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.lockcat { display: flex; align-items: center; gap: 10px; width: 100%; border: 2px solid rgba(183,138,78,.55); background: var(--card); border-radius: 10px; padding: 10px 14px; cursor: pointer; font-family: inherit; color: var(--ink); box-shadow: 0 1px 5px rgba(120,80,20,.08); }
.lockcat:hover { border-color: var(--seal); box-shadow: 0 2px 8px rgba(164,52,43,.14); }
.lockcat .gt-name { flex: 1; font-weight: 800; font-size: 15px; text-align: left; }
.lockcat .gt-num { background: #b78a4e; color: #fff; border-radius: 50%; min-width: 26px; height: 26px; line-height: 26px; text-align: center; font-size: 13.5px; font-weight: 800; box-shadow: inset 0 -1px 2px rgba(0,0,0,.18); }
.lockcat .gt-caret { font-size: 12.5px; color: var(--ink2); white-space: nowrap; font-weight: 700; }
.lockcat.on { border-color: var(--seal); border-left: 3px solid var(--seal); background: rgba(183,138,78,.08); }
.lock-list { margin: 4px 0 6px 8px; border-left: 2px solid rgba(183,138,78,.35); padding-left: 10px; }
.lock-row { display: flex; flex-direction: column; gap: 1px; padding: 6px 0; min-width: 0; }
.lock-row .lr-n { font-weight: 600; font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lock-row .lr-why { color: var(--ink2); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* 交办任务 · 润色与快捷应对 */
.task-opt { justify-content: flex-start; }
.task-opt .opt-label { font-weight: 600; }

/* 待解锁分类按钮：强制加粗边框（覆盖 grp-tab 基础样式） */
.panel .lockcat { border: 2px solid #b78a4e !important; box-shadow: 0 2px 6px rgba(120,80,20,.12) !important; }
.panel .lockcat .gt-name { font-weight: 900 !important; font-size: 15px !important; }
.panel .lockcat .gt-caret { font-weight: 800 !important; }
.panel .lockcat.on { border-color: #a43a2c !important; border-left-width: 4px !important; }

/* 一把手含金量标签 */
.tag.t-chief{background:rgba(184,160,128,.15);color:#6b4226;border:1px solid #b8a080;font-weight:600}


.rec-tip{color:#8c1f28}
.tag.t-rec{background:rgba(184,160,128,.12);color:#6b4226;border:1px solid #b8a080;font-weight:600}
.jobcard{border-left:3px solid transparent}
.jobcard:has(.t-rec){border-left-color:#8c1f28}


.city-side-proj{font-size:11px;color:#7a5b45;background:#faf3ea;border:1px solid #ead9c6;border-radius:4px;padding:3px 6px;margin-top:4px;line-height:1.5}
.bid-run{margin-bottom:8px}
.bid-done{margin-bottom:8px}
.warn{color:#a33}


.city-fin-bar{background:#f2ece2;border:1px solid #d9cbb4;border-radius:4px;padding:5px 8px;margin-bottom:8px;font-size:12px}
.city-fin-mini{font-size:11px;color:#5c4632;background:#faf5ec;border:1px solid #ead9c6;border-radius:4px;padding:3px 6px;margin:2px 0 4px}
.city-fin{margin-bottom:10px}
.fin-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:6px 0}
.fin-cell{background:#faf5ec;border:1px solid #e4d5c2;border-radius:4px;padding:6px;text-align:center}
.fin-cell .fin-v{font-size:18px;font-weight:700;color:#8c1f28;display:block}
.fin-cell.warn .fin-v{color:#a33}
.fin-cell span:last-child{font-size:11px;color:#7a5b45}
.fin-lever{margin-top:6px}


/* ---------- 暗色主题补齐：锁定态 / 今年要紧 / 办公室 / 城市财政 ---------- */
.actbtn.locked { opacity: .72; }
.actbtn.locked .act-nm { color: var(--ink2); }
.actbtn.locked .lock-tag { color: #8a7a3a; background: rgba(212,175,55,.14); border-color: rgba(212,175,55,.4); }
[data-theme="dark"] .actbtn.locked {
  opacity: .78;
  background: repeating-linear-gradient(45deg, #2a261f, #2a261f 7px, #232019 7px, #232019 14px);
  border-color: #4a4335;
}
[data-theme="dark"] .actbtn.locked .act-nm { color: #b0a68f; }
[data-theme="dark"] .actbtn.locked .lock-tag {
  color: #d8c281; background: rgba(201,169,78,.12); border-color: rgba(201,169,78,.45);
}

.tip-panel { background: linear-gradient(180deg, rgba(212,175,55,.12), rgba(251,247,239,.65)); }
[data-theme="dark"] .tip-panel {
  background: linear-gradient(180deg, rgba(201,169,78,.14), rgba(33,31,26,.75));
  border-top-color: var(--gold); border-left-color: var(--gold);
}
[data-theme="dark"] .tip-panel h3 { color: #d8c281; }
[data-theme="dark"] .actbtn.tip {
  border-color: rgba(201,169,78,.45);
  background: linear-gradient(180deg, #2c281f, var(--card));
}
[data-theme="dark"] .actbtn.withwhy .tip-why { color: #d8c281; }

[data-theme="dark"] .actbtn.act-office-standalone {
  border-color: #b78a4e;
  background: linear-gradient(180deg, #2e281c, #241f16);
  color: #e8d5a8;
  box-shadow: 0 2px 10px rgba(0,0,0,.35);
}
[data-theme="dark"] .actbtn.act-office-standalone:hover {
  background: linear-gradient(180deg, #3a3222, #2a2419);
  border-color: #d0a050;
}
[data-theme="dark"] .actbtn.act-office-standalone .act-sub { color: #b89a62; }

[data-theme="dark"] .city-fin-bar,
[data-theme="dark"] .city-fin-mini,
[data-theme="dark"] .fin-cell {
  background: #26221b; border-color: #3f382c; color: #cfc4b0;
}
[data-theme="dark"] .city-fin-mini,
[data-theme="dark"] .fin-cell span:last-child,
[data-theme="dark"] .city-side-proj { color: #a89a82; }
[data-theme="dark"] .fin-cell .fin-v { color: #d06052; }
[data-theme="dark"] .fin-cell.warn .fin-v { color: #e0685c; }

/* toast 略上移，少挡底部操作 */
.toast { bottom: 56px; }
@media (max-width: 900px) { .toast { bottom: 72px; font-size: 13px; padding: 9px 14px; } }

/* 官身气象标题：窄栏不折行 */
.stats-head span { white-space: nowrap; }

/* ---------- 晋升进度：加大加宽（并入官身气象后） ---------- */
.profile-box {
  padding: 14px 14px 16px;
  gap: 8px;
}
.layout > aside .profile-box { gap: 8px; }
.profile-promo-h {
  font-size: 16px;
  letter-spacing: 3px;
  font-weight: 900;
  margin-bottom: 10px;
}
.profile-box .promo-head { margin-bottom: 10px; }
.profile-box .promo-head .ph-label { font-size: 13px; font-weight: 700; }
.profile-box .promo-head .ph-rank {
  font-size: 26px;
  font-weight: 900;
  letter-spacing: 3px;
}
.profile-box .promo-head .ph-count {
  font-size: 14px;
  font-weight: 900;
  padding: 3px 12px;
}
.profile-box .promo-bar {
  height: 9px;
  margin-bottom: 14px;
}
.profile-box .checks {
  font-size: 15px;
  gap: 2px;
}
.profile-box .checks .chk {
  padding: 8px 10px;
  margin-bottom: 5px;
  gap: 10px;
  align-items: center;
}
.profile-box .checks .chk-ic {
  width: 22px; height: 22px; line-height: 21px;
  font-size: 13px;
}
.profile-box .checks .chk-label {
  font-size: 14.5px;
  font-weight: 800;
  letter-spacing: .3px;
  line-height: 1.4;
}
.profile-box .checks .chk-num {
  font-size: 13.5px;
  font-weight: 900;
}
.profile-box .promo-miss {
  font-size: 13px;
  font-weight: 700;
}
.profile-box .promo-hint {
  font-size: 12.5px;
  font-weight: 600;
}
.profile-box .acts.promo-acts .chip {
  font-size: 13.5px;
  font-weight: 800;
  padding: 8px 14px;
}


.promo-wide{display:block;margin-bottom:14px;border:2px solid #a4342b;border-radius:10px;padding:12px 14px;background:linear-gradient(180deg,rgba(164,52,43,.04),transparent 55%),var(--card,#fffdf8);box-shadow:0 1px 3px rgba(120,30,20,.08)}
.promo-wide-h{display:flex;justify-content:space-between;align-items:baseline;font-size:14px;font-weight:700;margin-bottom:8px;color:#6b4a2b}
.promo-wide .promo{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto auto;grid-auto-flow:column;gap:0 22px;align-items:center}
.promo-wide .promo-head{grid-column:1;grid-row:1/3;min-width:150px}
.promo-wide .promo-bar{grid-column:1;grid-row:3;width:150px;min-width:150px}
.promo-wide .checks{grid-column:2;grid-row:1/3;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 18px;margin:0}
.promo-wide .promo-acts{grid-column:2;grid-row:3;display:flex;flex-wrap:wrap;gap:6px;margin:0}
.promo-wide .promo-miss{grid-column:2;grid-row:4;margin:4px 0 0}
.promo-wide .promo-hint{grid-column:2;grid-row:5;margin:2px 0 0}


/* 调研遇事横幅：与危机横幅同族，金棕强调 */
.field-banner { border-top-color: var(--gold) !important; }
.field-banner .crisis-ic { filter: none; }

.promo-wide{display:flex;gap:14px;align-items:stretch;margin:0 auto 14px;max-width:1180px;border:2px solid #a4342b;border-radius:10px;padding:12px 14px;background:linear-gradient(180deg,rgba(164,52,43,.04),transparent 55%),var(--card,#fffdf8);box-shadow:0 1px 3px rgba(120,30,20,.08)}
.promo-wide .promo-art{width:210px;min-width:210px;height:auto;object-fit:cover;border-radius:6px;border:1px solid #e0d2bd}
.promo-wide .promo-body{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}
.promo-wide .promo{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto auto;grid-auto-flow:column;gap:0 22px;align-items:center}
.promo-wide .promo-head{grid-column:1;grid-row:1/3;min-width:150px}
.promo-wide .promo-bar{grid-column:1;grid-row:3;width:150px;min-width:150px}
.promo-wide .checks{grid-column:2;grid-row:1/3;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 16px;margin:0}
.promo-wide .promo-acts{grid-column:2;grid-row:3;display:flex;flex-wrap:wrap;gap:6px;margin:0}
.promo-wide .promo-miss{grid-column:2;grid-row:4;margin:4px 0 0}
.promo-wide .promo-hint{grid-column:2;grid-row:5;margin:2px 0 0}
.promo-wide .promo-wide-h{display:flex;justify-content:space-between;align-items:baseline;font-size:14px;font-weight:700;margin-bottom:8px;color:#6b4a2b}


.promo-wide .promo{display:block}
.promo-top{display:flex;align-items:center;gap:18px;margin-bottom:10px}
.pt-rankbox{min-width:110px}
.pt-label{display:block;font-size:11px;color:#8a6b4a;letter-spacing:1px}
.pt-rank{display:block;font-size:26px;font-weight:800;color:#8c1f28;letter-spacing:3px;line-height:1.15}
.pt-mid{flex:1;min-width:0}
.pt-count{display:block;font-size:12.5px;color:#6b4a2b;margin-bottom:5px}
.pt-count b{color:#8c1f28;font-size:15px}
.promo-wide .promo-bar{width:100%;min-width:0;height:8px}
.promo-wide .promo-bar i{height:100%}
.promo-wide .checks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0 0 10px;font-size:12.5px}
.promo-wide .checks .chk{display:block;background:#fffdf8;border:1px solid #e6d9c4;border-radius:6px;padding:7px 9px 6px;line-height:1.3;box-shadow:0 1px 2px rgba(94,66,35,.05)}
.promo-wide .checks .chk.ok{border-color:#cfe0d2;background:#fbfdf9}
.promo-wide .checks .chk.no{border-color:#ead4cd;background:#fdfaf7}
.promo-wide .chk-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.promo-wide .chk-label{font-weight:600;color:#5c4632;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.promo-wide .chk-num{font-size:13px;font-weight:700;color:#8c1f28;white-space:nowrap}
.promo-wide .chk-num i{font-style:normal;opacity:.5;margin:0 1px}
.promo-wide .chk-ic{float:left;width:17px;height:17px;line-height:17px;text-align:center;border-radius:50%;font-size:11px;margin:1px 6px 0 0}
.promo-wide .chk.ok .chk-ic{background:#3f7d55;color:#fff}
.promo-wide .chk.no .chk-ic{background:#a4342b;color:#fff}
.promo-wide .chk-track{margin-top:5px;height:4px;background:#efe5d6;border-radius:2px;overflow:hidden;clear:both}
.promo-wide .chk-track i{display:block;height:100%;background:linear-gradient(90deg,#b98a4e,#d9a95f);border-radius:2px}
.promo-wide .chk.ok .chk-track i{background:linear-gradient(90deg,#6a9b7a,#8fb898)}
.promo-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.promo-miss{font-size:12px;color:#a4342b}
.promo-miss.ok{color:#3f7d55}
.promo-acts{display:flex;gap:6px;flex-wrap:wrap}
.promo-hint{margin:6px 0 0;text-align:right}


.promo-wide .checks{grid-template-columns:repeat(2,minmax(0,1fr))}
.promo-wide .chk-label{white-space:normal;line-height:1.35}
/* 条件项为奇数（如取消公开选拔后的副厅 5 项、进入 7 项的副部）时，
   最后一项独占整行，免得右下角空出半格、看着像加载失败 */
.promo-wide .checks > .chk:last-child:nth-child(odd){grid-column:1/-1}


.promo-wide .checks .chk{border-color:#e6d9c4;background:#fdfaf4}
.promo-wide .checks .chk.ok,.promo-wide .checks .chk.no{border-color:#e6d9c4;background:#fdfaf4}
.promo-wide .chk-ic{background:#efe5d6;color:#6b4a2b}
.promo-wide .chk.ok .chk-ic,.promo-wide .chk.no .chk-ic{background:#efe5d6;color:#6b4a2b}
.promo-wide .chk-track{background:#efe5d6}
.promo-wide .chk-track i,.promo-wide .chk.ok .chk-track i{background:#c9a25e}
.promo-wide .chk-num{color:#6b4a2b}
.promo-wide .chk.ok .chk-num,.promo-wide .chk.no .chk-num{color:#6b4a2b}
.promo-miss{color:#a07c4f}
.promo-miss.ok{color:#a07c4f}


.policy-area{padding:12px}
.policy-free{background:#fbf5ea;border:1px dashed #d8c6a8;border-radius:6px;padding:9px 10px;margin-bottom:10px}
.pf-t{font-weight:700;font-size:13px;color:#6b4a2b;margin:0 0 6px}
#freePolicyTxt{width:100%;box-sizing:border-box;border:1px solid #d8c6a8;border-radius:4px;padding:7px 9px;font:inherit;font-size:13px;background:#fffdf8;color:#3d2c1c;resize:vertical}
#freePolicyTxt:focus{outline:none;border-color:#c9a25e}
.pf-row{display:flex;align-items:center;gap:10px;margin-top:7px;flex-wrap:wrap}


.layout > aside{align-items:stretch}
.layout > aside .side-sub{display:flex;flex-direction:column;gap:12px;min-width:0}
.layout > aside .hero-card{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}
.layout > aside .hero-card .portrait.hero{flex:1 1 auto;width:auto;max-width:none;height:auto;min-height:200px;max-height:520px;margin:0 auto 10px}


.layout > aside .side-sub .hero-card{flex:1 1 0;min-height:240px}
.layout > aside .side-sub .side{flex:none}


.layout > aside .side-sub .hero-card{flex:1 1 0;min-height:300px}


.layout > aside .hero-card .portrait.hero{object-position:top center}
.layout > aside .hero-card{background:linear-gradient(180deg,rgba(212,175,55,.10),transparent 55%),var(--card)}


.layout > aside .side-sub .hero-card{flex:1 1 0;min-height:300px;justify-content:center}
.layout > aside .hero-card .portrait.hero{flex:none;width:100%;height:auto;max-width:100%;max-height:none;min-height:0;margin:0;object-fit:cover;object-position:top center}


/* 换届年横幅 */
.elect-banner { border-top-color: var(--cinnabar-d, var(--seal)) !important; }

/* ---------- 世界观弹窗 ---------- */
.lore-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; margin: 8px 0 4px; }
.lore-prov, .lore-fac {
  border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px;
  background: var(--card); border-left: 3px solid var(--gold);
}
.lore-prov b, .lore-fac b { display: block; font-size: 15px; letter-spacing: 1px; }
.lore-tone { margin: 6px 0 4px; font-size: 12.5px; color: var(--ink2); line-height: 1.55; }
.lore-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.lore-tags .tag { font-size: 11px; padding: 1px 7px; }
.lore-list { margin: 6px 0; padding-left: 18px; font-size: 13.5px; line-height: 1.75; }
.lore-list li { margin-bottom: 4px; }

/* ---------- 本届班子 ---------- */
.tm-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0}
.tm-card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;box-shadow:var(--shadow)}
.tm-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.tm-h b{font-size:15px}
.tm-hd{display:flex;flex-direction:column;line-height:1.3;min-width:0}
.tm-av{width:34px;height:44px;object-fit:cover;border-radius:4px;flex:none;background:var(--bg2,#eef)}
/* ---- 已激活徽章（主页横幅 + 游戏内右上角小标）---- */
.act-banner{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;margin:8px 0 2px;padding:12px 20px;border-radius:14px;
  background:linear-gradient(120deg,#fdf6e3 0%,#f6e7b2 28%,#eccf7c 50%,#f6e7b2 72%,#fdf6e3 100%);
  border:1px solid #c9a24b;box-shadow:0 3px 16px rgba(180,140,40,.28), inset 0 0 28px rgba(255,255,255,.55);
  overflow:hidden;text-decoration:none}
.act-banner::after{content:'';position:absolute;top:-45%;width:34%;height:190%;transform:rotate(20deg);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.8),transparent);animation:act-sheen 4.6s ease-in-out infinite}
@keyframes act-sheen{0%,55%{left:-38%}90%,100%{left:135%}}
.act-badge-ico{font-size:24px;filter:drop-shadow(0 1px 1px rgba(120,90,20,.45));position:relative;z-index:1}
.act-badge-txt{display:flex;flex-direction:column;line-height:1.25;text-align:left;position:relative;z-index:1}
.act-badge-t{font-weight:800;font-size:16px;letter-spacing:3px;color:#6b4a0a;text-shadow:0 1px 0 #fff}
.act-badge-s{font-size:11px;color:#8a6a20;letter-spacing:1px}
/* 主页激活横幅上方的版本提醒（小红字） */
.ver-line{margin:6px 0 0;text-align:center;font-size:12px;font-weight:800;color:#b3271e;letter-spacing:3px;text-shadow:0 1px 0 rgba(255,255,255,.6)}
/* 起始职位完善度标签 */
.start-post .rec-tag{display:inline-block;margin-top:5px;font-size:10.5px;font-weight:800;letter-spacing:.5px;padding:1px 9px;border-radius:20px;line-height:1.4}
.start-post .rec-tag.rec-yes{color:#6d4f0a;background:#f7ecc6;border:1px solid #d9b95c}
.start-post .rec-tag.rec-no{color:#a33a30;background:#fbe9e6;border:1px solid #e2a89f}
/* 立绘框「换立绘」小按钮 */
.hero-up{position:absolute;top:6px;right:8px;z-index:3;font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px;color:#7a1f1a;background:transparent;border:none;cursor:pointer;opacity:.95;transition:opacity .15s;line-height:1.5;text-shadow:0 1px 0 rgba(251,247,239,.85)}
.hero-up:hover{opacity:1;background:#7a241c}
/* 班子弹窗 · 玩家本人席位卡 */
.tm-self{border:1px solid #c9a24b;box-shadow:0 0 0 1px #f3e3b0 inset,0 2px 10px rgba(180,140,40,.18);background:linear-gradient(180deg,rgba(253,246,227,.5),rgba(255,255,255,.2))}
.tm-self .tm-hd b{color:#6b4a0a}
/* 关系网 · 玩家本人身份条 */
.net-me{display:flex;align-items:center;gap:10px;margin:8px 0 10px;padding:8px 12px;border:1px solid #c9a24b;border-radius:10px;background:linear-gradient(120deg,rgba(253,246,227,.55),rgba(247,231,178,.3));box-shadow:inset 0 0 0 1px rgba(243,227,176,.6)}
.net-me .portrait.net{width:44px;height:56px;object-fit:cover;border-radius:6px;border:1px solid #c9a24b;background:#f2efe6}
.net-me-txt{display:flex;flex-direction:column;gap:2px;line-height:1.35}
/* 侧栏组织架构 · 玩家本人行 */
.org-rrow.self{background:rgba(212,175,55,.12);border:1px solid #d9b95c;border-radius:6px;padding-left:6px}
.t-badge{display:flex;justify-content:flex-end;align-items:center;gap:8px;min-height:20px;margin-bottom:2px}
/* 已激活徽章：2026-10-21 从左上角 .t-badge-l 挪进顶栏按钮组，排在最左（今日要闻之前）。
   原来靠 absolute 贴 .top 左上角，现在改成 flex 子项，需要显式复位定位与垂直居中。 */
.act-mini.act-mini-inline {
  position: static;
  align-self: center;
  flex: none;
  margin-right: 2px;
  white-space: nowrap;
}
.act-mini{position:relative}
.act-tip{display:none;position:absolute;top:135%;left:0;z-index:120;min-width:250px;max-width:300px;padding:12px 16px;
  background:#3a2c10;color:#ffe9b0;font-size:15px;font-weight:800;letter-spacing:.5px;line-height:1.55;
  border-radius:8px;border:1px solid #c9a24b;box-shadow:0 6px 20px rgba(0,0,0,.38)}
.act-mini:hover .act-tip,.act-mini:focus .act-tip,.act-mini:focus-within .act-tip{display:block}
.act-tip::before{content:'';position:absolute;top:-5px;left:22px;width:10px;height:10px;background:#3a2c10;
  transform:rotate(45deg);border-left:1px solid #c9a24b;border-top:1px solid #c9a24b}
.act-mini{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:1px;color:#6b4a0a;cursor:default;
  background:linear-gradient(120deg,#fdf6e3,#ecd07e);border:1px solid #c9a24b;box-shadow:0 1px 6px rgba(180,140,40,.32)}

.tm-rows .stat-head{margin-top:2px}
.tm-foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px;gap:6px;flex-wrap:wrap}
.tm-foot .acts{display:flex;gap:6px}
@media (max-width:560px){.tm-grid{grid-template-columns:1fr}}

/* ---------- 任期答卷 ---------- */
.goal-area{margin-top:10px}
.goal-row{margin:8px 0}
.goal-row .stat-head i{font-style:normal;font-weight:400}
.goal-mini{font-size:12.5px;color:#8a6d3b;background:rgba(164,52,43,.05);border-radius:6px;padding:5px 8px;margin:6px 0}

/* 虚构声明（红字加粗） */
.fictionline { text-align: center; color: var(--danger); font-weight: 800; font-size: 14px; letter-spacing: 1px; margin: 18px auto 6px; line-height: 1.9; }

/* 游戏主界面外框：2026-10-21 撤掉「四边全圈朱红描边」，改套云纹云头裱边。
   原先 border:3px solid var(--seal) + box-shadow 0 0 0 6px (164,52,43,.10) 构成整圈粗红线，
   顶栏上方贯穿全宽的那条正是它的上边；换成 inkui/frames/frame-yunwen.jpg 的九宫格云头框。

   参数是标定出来的，别再随手改：
   · 素材 2364×1773，云头画在离边缘约 20~380px 的位置。
   · border-image-slice 必须 ≥ 320，否则只取到云的外缘（切一半，只剩云尾）。
     200/260 两档实测被拉成一圈细波浪；340 档四角云头完整、不变形。
   · border-image-width 60px + padding 64px：内边距略大于边宽，内容不会顶到云头上。
   · 代价：顶栏下移到 y≈154（撤线前是 26），首屏比原来少约 130px —— 用户确认接受。
   · repeat 用 stretch：云头是手绘构图，repeat 会把它切成方块。 */
#gameScreen {
  border: 60px solid transparent;
  border-radius: 0;
  border-image-source: url(inkui/frames/frame-yunwen.jpg?v=20261027PERF1);
  border-image-slice: 340 fill;
  border-image-width: 60px;
  border-image-repeat: stretch;
  padding: 4px 4px 0;
  background: rgba(253,248,238,.92);
  box-shadow: var(--shadow);
  margin-top: 14px;
}
/* 窄屏：边收一档。注意窄屏本来就有横向溢出（顶栏 .t-chip-row/.t-btns 固定宽度所致，
   与本框无关 —— 撤框实测仍有 168/428/648px 溢出），这里只是别让它更糟。 */
@media (max-width: 900px) {
  #gameScreen {
    border-width: 34px;
    border-image-width: 34px;
    border-image-slice: 300 fill;
    padding: 2px 2px 0;
  }
}
@media (max-width: 640px) {
  #gameScreen {
    border-width: 18px;
    border-image-width: 18px;
    border-image-slice: 240 fill;
    padding: 0;
  }
}

/* 副职处境面板（非主官专属） */
.panel.deputy { border-left: 3px solid var(--seal); }
.panel.deputy h3 { font-size: 15.5px; font-family: var(--font-kai); letter-spacing: 1.5px; }
.dep-rival, .dep-lurk { margin: 8px 0 4px; padding: 8px 10px; background: var(--paper); border: 1px solid var(--line); border-radius: 8px; }
.dep-lurk { border-color: rgba(154,123,63,.4); }
.panel.deputy .stat-track { height: 6px; }

/* 舆情风波 / 述职述廉 */
.opinion-banner { border-left-color: #c0392b; }
.review-banner { border-left-color: #4a6f8a; }
.opinion-heat { display: flex; align-items: center; gap: 10px; margin: 10px 0 6px; padding: 8px 10px; background: var(--paper); border: 1px solid var(--line); border-radius: 8px; }
.opinion-heat span { font-size: 12.5px; color: var(--ink2); white-space: nowrap; }
.opinion-heat .stat-track { flex: 1; height: 8px; }
.opinion-heat b { font-size: 15px; color: var(--seal); min-width: 30px; text-align: right; }
.stat-track i.c-hot { background: linear-gradient(90deg, #a4342b, #d0685c); }
.stat-track i.c-mid { background: linear-gradient(90deg, #b0832f, #d4af37); }
.review-score { display: flex; align-items: baseline; gap: 10px; margin: 8px 0 4px; padding: 6px 10px; background: var(--paper); border: 1px solid var(--line); border-radius: 8px; }
.review-score b { font-size: 26px; color: var(--seal); font-family: var(--font-kai); }
.review-score span { color: var(--ink2); font-size: 13px; }

/* 巡视 / 世界观 */
.inspect-banner { border-left-color: #5b3a1e; }
/* 组织部门点名考察：红头文件那一抹朱红，跟"官身"同色系 */
.named-banner { border-left-color: #8c1f28; }
/* ---------- 世界观 · 省域舆图（2026-10-21 重做版式） ----------
   昊：「世界观进行更新，包括这里面的框也要进行美化」。
   旧版是五个白底浅框：行政体系一行「名称 …… 描述」、派系 2 列网格（三张卡排成 2+1，
   右下永远空一格）、晋升路线一行纯文字。新版改成宣纸卡 + 朱金竖脊 + 红色序号印。
   配色只用游戏既有色：朱 --seal(#a4342b) / 金 #c9a227 / 赭 #8a6a3f / 纸 #fffdf6。 */
.w-sec { position: relative; margin: 12px 0; padding: 11px 14px 12px 16px;
  background: linear-gradient(180deg, #fffdf6 0%, #f8f0dc 100%);
  border: 1px solid #d8c49a; border-radius: 10px;
  box-shadow: 0 1px 0 rgba(255,255,255,.9) inset, 0 2px 8px rgba(120,90,40,.07); }
/* 左侧一道朱金竖脊：像装裱的边条，不抢内容 */
.w-sec::before { content: ''; position: absolute; left: 0; top: 11px; bottom: 11px; width: 3px;
  border-radius: 0 3px 3px 0; background: linear-gradient(180deg, #c9a227, #a4342b); opacity: .8; }
.w-sec-h { display: flex; align-items: center; gap: 9px; margin: 0 0 9px; }
.w-no { flex: 0 0 22px; height: 22px; display: flex; align-items: center; justify-content: center;
  border-radius: 4px; font-family: var(--font-ui); font-size: 12.5px; font-weight: var(--ui-small-weight); line-height: 1; color: #f7ebd2;
  background: linear-gradient(165deg, #a4342b, #7c2018);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.26), 0 1px 3px rgba(124,32,24,.28); }
.w-sec-h b { font-family: var(--font-kai); font-size: 15.5px; font-weight: 700;
  letter-spacing: 2.5px; color: var(--ink); }
.w-sec-h i { margin-left: auto; font-style: normal; font-size: 11.5px;
  letter-spacing: .4px; color: var(--ink3); white-space: nowrap; }

/* ---- 你在这里：名帖条 ---- */
.w-sec--here { background: linear-gradient(180deg, #fffdf6 0%, #f6ebd2 100%); }
.w-here { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.w-here-l { display: flex; align-items: center; gap: 10px; min-width: 0; }
.w-here-pin { font-size: 17px; line-height: 1; }
.w-here-tx b { display: block; font-family: var(--font-kai); font-size: 19px;
  letter-spacing: 2px; color: var(--ink); line-height: 1.25; }
.w-here-sub { display: block; margin-top: 2px; font-size: 11.5px; color: var(--ink3); }
.w-here-r { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.w-chip { display: inline-flex; align-items: baseline; gap: 4px; padding: 3px 10px; border-radius: 999px;
  font-size: 11.5px; color: var(--ink2); background: rgba(154,123,63,.10);
  border: 1px solid rgba(154,123,63,.26); white-space: nowrap; }
.w-chip--main { background: rgba(164,52,43,.07); border-color: rgba(164,52,43,.3); }
.w-chip b { font-size: 13px; font-weight: 700; color: var(--seal); letter-spacing: .5px; }
.w-chip em { font-style: normal; font-size: 10.5px; color: var(--ink3); }
.w-era { margin: 9px 0 0; padding-top: 8px; border-top: 1px dashed rgba(160,135,90,.4);
  font-size: 11.5px; color: var(--ink3); letter-spacing: .3px; }

/* ---- 行政体系：五级，当前那一级高亮 ---- */
.w-organs { display: flex; flex-direction: column; }
.w-organs .w-row { display: grid; grid-template-columns: 62px minmax(0, 1fr) auto;
  align-items: center; gap: 10px; padding: 7px 0;
  border-bottom: 1px dashed rgba(160,135,90,.35); font-size: 13px; }
.w-organs .w-row:last-child { border-bottom: none; }
.w-rk { font-family: var(--font-ui); font-size: 13.5px; font-weight: var(--ui-small-weight); letter-spacing: 1.5px; color: #8a6a3f; }
.w-rd { color: var(--ink2); font-size: 12.5px; line-height: 1.5; }
.w-row.cur { background: linear-gradient(90deg, rgba(164,52,43,.08), rgba(164,52,43,0) 72%);
  border-radius: 7px; padding-left: 9px; padding-right: 9px; margin: 0 -9px; }
.w-row.cur .w-rk { color: var(--seal); font-weight: 700; }
.w-row.cur .w-rd { color: var(--ink); }
.w-here-tag { font-style: normal; font-size: 10.5px; letter-spacing: .5px; color: #f7ebd2;
  background: linear-gradient(165deg, #a4342b, #7c2018); padding: 2px 8px; border-radius: 999px;
  box-shadow: 0 1px 3px rgba(124,32,24,.25); }
.w-here-tag--no { visibility: hidden; }   /* 占位：不亮的那几行也留出同样宽度，右边缘齐 */

/* ---- 政坛派系：三张色卡（3 列，不再 2+1 留洞） ---- */
.w-facs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 9px; }
.w-fac { position: relative; padding: 11px 11px 9px; border-radius: 8px;
  background: #fffdf7; border: 1px solid #ded0b0;
  box-shadow: 0 1px 0 rgba(255,255,255,.9) inset; overflow: hidden; }
.w-fac::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: var(--fc, #9a7b3f); pointer-events: none; }
.w-fac-h { display: flex; align-items: center; gap: 6px; }
.w-fac-h b { font-family: var(--font-kai); font-size: 14.5px; letter-spacing: 2px; color: var(--ink); }
.w-fac-me { margin-left: auto; font-size: 10px; color: #fff; letter-spacing: .5px;
  background: var(--seal); border-radius: 999px; padding: 1px 7px; }
.w-fac-creed { margin: 6px 0 7px; font-size: 12.5px; line-height: 1.7; color: var(--ink2); }
.w-fac-line { margin: 0; font-size: 11.5px; line-height: 1.7; color: var(--ink3); }
.w-fac-line span { display: inline-block; min-width: 30px; margin-right: 5px; color: #8a6a3f; }
.w-fac.mine { border-color: var(--seal);
  box-shadow: 0 0 0 1px rgba(164,52,43,.22), 0 3px 10px rgba(164,52,43,.10); }

/* ---- 晋升路线：三态圆牌 ----
   箭头用 ::after 画在牌子右边（不单独成元素），换行时不会「牌子在上一行、箭头掉下一行」。
   尺寸按「11 个牌子挤进 800px 正文宽」倒推：2 字 ×12px + 18 padding + 2 边框 ≈ 44px，
   11×44 + 10 箭头 ≈ 600，留足余量。 */
.w-ladder { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 3px; }
.w-lad { padding: 3px 9px; border-radius: 999px; font-size: 12px; line-height: 1.6;
  color: var(--ink3); background: rgba(120,106,82,.07);
  border: 1px solid rgba(120,106,82,.16); white-space: nowrap; }
.w-lad::after { content: '›'; margin-left: 7px; font-size: 11px; color: rgba(120,106,82,.45); }
.w-lad:last-child::after { content: ''; margin-left: 0; }
.w-lad.past { color: #8a6a3f; background: rgba(201,162,39,.13); border-color: rgba(201,162,39,.34); }
.w-lad.cur { color: #f7ebd2; font-weight: 700; letter-spacing: .5px;
  background: linear-gradient(165deg, #a4342b, #7c2018); border-color: #7c2018;
  box-shadow: 0 2px 6px rgba(164,52,43,.28); }
.w-arrow { font-style: normal; font-size: 11px; color: rgba(120,106,82,.45); }

/* ---- 仕途箴言：楷体引文 + 一枚小印 ---- */
.w-sec--tip { background: linear-gradient(180deg, #fffaf0 0%, #f6ecd8 100%); }
.w-tip { position: relative; margin: 0; padding: 6px 34px 4px 26px;
  font-family: var(--font-kai); font-size: 14.5px; line-height: 1.95;
  letter-spacing: .6px; color: var(--ink); }
.w-tip::before { content: '「'; position: absolute; left: 2px; top: -6px;
  font-family: var(--font-kai); font-size: 30px; line-height: 1; color: rgba(164,52,43,.24); }
.w-tip-seal { position: absolute; right: 0; bottom: 2px; width: 22px; height: 22px;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; color: #f7ebd2; background: linear-gradient(160deg, #a4342b, #7c2018);
  border-radius: 3px; transform: rotate(-6deg); opacity: .85;
  box-shadow: 0 1px 3px rgba(124,32,24,.3); }

/* ---- 暗色 ---- */
[data-theme="dark"] .w-sec { background: linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,.02));
  border-color: rgba(200,180,130,.22); box-shadow: none; }
[data-theme="dark"] .w-sec--here,
[data-theme="dark"] .w-sec--tip { background: linear-gradient(180deg, rgba(201,162,39,.07), rgba(255,255,255,.02)); }
[data-theme="dark"] .w-fac { background: rgba(255,255,255,.04); border-color: rgba(200,180,130,.2); }
[data-theme="dark"] .w-lad { color: var(--ink3); background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] .w-lad.past { color: #d8c08a; background: rgba(201,162,39,.16); border-color: rgba(201,162,39,.3); }
[data-theme="dark"] .w-chip { background: rgba(255,255,255,.06); border-color: rgba(200,180,130,.24); }
[data-theme="dark"] .w-organs .w-row { border-bottom-color: rgba(200,180,130,.18); }
[data-theme="dark"] .w-era { border-top-color: rgba(200,180,130,.2); }
@media (max-width: 720px) {
  .w-facs { grid-template-columns: 1fr; }
  .w-here { gap: 10px; }
  .w-organs .w-row { grid-template-columns: 52px minmax(0, 1fr) auto; gap: 8px; }
}

/* ==================== 用户指定：三处红粗框（建档表单 / 自由行动 / 官身气象） ==================== */
.createform {
  border: 3px solid var(--seal);
  border-radius: 10px;
  padding: 14px 18px;
}
.acts-rail {
  border: 3px solid var(--seal);
  border-radius: 10px;
  padding: 12px;
}
.stats.profile-box {
  border: 3px solid var(--seal);
  border-radius: 10px;
}

/* ==================== 用户指定：立绘框 / 建档选项小框 红粗框 ==================== */
.panel.hero-card,
.hero-card {
  border: 3px solid var(--seal);
  border-radius: 10px;
}
.hero-frame {
  border: 3px solid var(--seal);
  border-radius: 8px;
}
.createform .row {
  border: 3px solid rgba(154,123,63,.30);
  border-radius: 8px;
  padding: 5px 8px;
}
.createform .row select,
.createform .row input {
  border: none;
  border-radius: 6px;
}

/* ==================== 开局入场动画 + 年度讲话 ==================== */
.intro-overlay {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: #1a1410;
  opacity: 0; transition: opacity .7s ease;
  overflow: hidden;
}
.intro-overlay.on { opacity: 1; }
.intro-overlay.out { opacity: 0; }
.intro-video { position: absolute; inset: 0; overflow: hidden; }
.intro-video video { width: 100%; height: 100%; object-fit: cover; filter: brightness(.9) saturate(1.06); }
.intro-card {
  position: relative; z-index: 2; width: min(70vw, 520px);
  padding: 42px 34px 50px; text-align: center;
  background: linear-gradient(180deg, rgba(253,248,234,.94), rgba(243,232,207,.92));
  border: 3px solid var(--seal); border-radius: 14px;
  box-shadow: 0 18px 60px rgba(20,10,0,.55);
  transform: scale(.84); opacity: 0;
  transition: transform .8s cubic-bezier(.2,.9,.25,1.2), opacity .6s ease;
}
.intro-overlay.on .intro-card { transform: scale(1); opacity: 1; }
.intro-head {
  font-family: var(--font-kai); font-size: 27px; letter-spacing: 10px;
  color: var(--cinnabar-d); font-weight: 800; margin-bottom: 18px;
  text-shadow: 0 1px 0 rgba(255,255,255,.6);
}
.intro-name {
  font-size: 36px; font-weight: 800; letter-spacing: 6px; color: #26221b;
  text-shadow: 0 0 18px rgba(196,154,60,.55);
}
.intro-post { margin-top: 12px; font-size: 15px; color: var(--ink2); }
.intro-year { margin-top: 6px; font-size: 13px; color: var(--ink2); letter-spacing: 1px; }
.intro-seal {
  position: absolute; right: 20px; bottom: 16px; width: 58px; height: 58px;
  border: 3px solid var(--seal); border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-kai); font-size: 26px; color: var(--seal); font-weight: 800;
  transform: scale(0) rotate(-30deg);
  transition: transform .5s cubic-bezier(.2,1.6,.4,1) .9s;
}
.intro-overlay.on .intro-seal { transform: scale(1) rotate(-8deg); }
.speech-txt {
  width: 100%; min-height: 120px; box-sizing: border-box; padding: 10px 12px;
  font-size: 14px; line-height: 1.7; color: #26221b;
  border: 2px solid var(--line2); border-radius: 8px; background: #fffdf6;
  resize: vertical; font-family: inherit;
}
.speech-txt:focus { outline: none; border-color: var(--seal); }

/* 年度讲话 视频卡 */
.speech-vid .speech-card .intro-head { letter-spacing: 6px; font-size: 24px; }
.speech-vid .speech-card .intro-name { font-size: 30px; }

.speech-hint { margin: 2px 0 4px; padding: 4px 2px; font-size: 12px; }

/* ================= 秘书系统 ================= */
.sec-card {
  padding: 13px 15px; border-radius: 10px; border: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(200, 162, 74, .07), rgba(200, 162, 74, .02));
}
.sec-card .sc-top { display: flex; align-items: center; gap: 11px; }
.sec-card .sc-av { font-size: 30px; line-height: 1; }
.sec-card .sc-id { flex: 1; display: grid; gap: 2px; }
.sec-card .sc-id b { font-family: var(--font-kai); font-size: 19px; letter-spacing: 1px; }
.sec-card .sc-id i { font-style: normal; font-size: 13px; color: var(--ink2); }
.sec-card .sc-note { margin: 8px 0 0; font-size: 13.5px; line-height: 1.8; color: var(--ink2); }
.sec-card .sc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin: 10px 0 8px; }
.sec-card .sc-grid span { font-size: 13px; color: var(--ink2); text-align: center; }
.sec-card .sc-grid b { display: block; font-size: 17px; color: var(--ink); font-weight: 700; }
.sec-card .sc-load { display: flex; align-items: center; gap: 8px; margin: 4px 0 6px; }
.sec-card .sc-load .sl-lb { font-size: 13px; color: var(--ink2); }
.sec-card .sc-load .stat-track { flex: 1; }
.sec-card .sc-load .sl-v { font-size: 13px; font-weight: 700; }
.sec-card .sc-load .sl-v.ok { color: #2f7a4f; }
.sec-card .sc-load .sl-v.mid { color: #9a7b3f; }
.sec-card .sc-load .sl-v.bad { color: var(--seal); }
.sec-acts { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.sec-arrive .sec-card { margin: 10px 0; }

/* ================= 条线待办 ================= */
.wk-doc .wk-head { display: flex; gap: 12px; align-items: center; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.wk-doc .wk-big { font-size: 32px; line-height: 1; }
.wk-doc .wk-head b { font-family: var(--font-kai); font-size: 21px; letter-spacing: 1px; }
.wk-doc .wk-head .urg { font-style: normal; color: var(--seal); font-weight: 700; }
.wk-doc .wk-desc { margin: 12px 0 6px; font-size: 15.5px; line-height: 1.95; }
.wk-doc .wk-note { margin: 0 0 12px; padding: 8px 12px; font-size: 13.5px; line-height: 1.8; color: var(--ink2); background: rgba(120, 100, 60, .07); border-left: 3px solid var(--gold); border-radius: 0 6px 6px 0; }
.wk-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 10px; }
.wk-card {
  display: grid; gap: 6px; text-align: left; padding: 14px 15px; cursor: pointer;
  background: var(--card); border: 1px solid var(--line); border-radius: 10px;
  border-left: 4px solid var(--gold); transition: .18s; font: inherit; color: var(--ink);
}
.wk-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(60, 45, 20, .14); border-color: var(--seal); }
.wk-card .wk-ic { font-size: 23px; line-height: 1; }
.wk-card .wk-t { font-family: var(--font-kai); font-size: 18px; font-weight: 700; letter-spacing: 1px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.wk-card .wk-d { font-size: 13.5px; color: var(--ink2); line-height: 1.75; }
.wk-card .wk-eff { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 2px; }
.wk-card .wc-best { font-size: 12px; font-weight: 600; color: #2f7a4f; background: rgba(47, 122, 79, .12); border-radius: 4px; padding: 1px 6px; }
.wk-card.self { border-left-color: var(--seal); }
.wk-card.self:hover { background: rgba(164, 52, 43, .06); }
.wk-card.sub { border-left-color: #3d6b8e; }
.wk-card.sub:hover { background: rgba(61, 107, 142, .08); }
.wk-card.sec { border-left-color: #8a6b2f; }
.wk-card.sec:hover { background: rgba(138, 107, 47, .08); }
.wk-card.dis { opacity: .55; cursor: not-allowed; }
.wk-card.dis:hover { transform: none; box-shadow: none; border-color: var(--line); background: var(--card); }
.wc-chip { font-size: 12px; padding: 1px 7px; border-radius: 4px; background: rgba(120, 100, 60, .12); color: var(--ink2); }
.wc-chip.up { background: rgba(47, 122, 79, .14); color: #2f7a4f; }
.wc-chip.down { background: rgba(164, 52, 43, .13); color: var(--seal); }
.wk-plan { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--line2); }
.wk-plan .wk-pt { font-size: 14px; font-weight: 700; margin-bottom: 6px; }
.wk-plan textarea.cr-plan {
  width: 100%; box-sizing: border-box; min-height: 88px; resize: vertical;
  font-family: var(--font-kai); font-size: 15px; line-height: 1.8; color: var(--ink);
  background: var(--card); border: 1px solid var(--line); border-radius: 8px;
  padding: 10px 12px; box-shadow: inset 0 1px 4px rgba(120,90,40,.06);
}
.wk-plan textarea.cr-plan:focus { border-color: var(--seal); outline: none; }
.wk-plan-foot { display: flex; justify-content: flex-end; align-items: center; gap: 12px; margin: 8px 0 2px; }
.wk-count { font-size: 12px; color: var(--ink2); }
.del-card .dl-v { font-size: 13px; color: var(--ink2); }
.del-card .dl-v b.ok { color: #2f7a4f; }
.del-card .dl-v b.mid { color: #9a7b3f; }
.del-card .dl-v b.bad { color: var(--seal); }

/* 自由行动：人际工具独立按钮行 */
.tool-row { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 4px 0 2px; }
.actbtn.act-tool {
  min-height: 48px; padding: 8px 10px; border: 1px solid var(--line);
  background: var(--card); border-radius: 8px; text-align: left; cursor: pointer;
  display: flex; flex-direction: column; gap: 2px; font-family: inherit; color: var(--ink);
}
.actbtn.act-tool:hover:not([disabled]) { border-color: var(--gold); transform: translateY(-1px); }
.actbtn.act-tool .act-nm { font-size: 13.5px; font-weight: 800; letter-spacing: .3px; }
.actbtn.act-tool .act-sub { font-size: 11px; color: var(--ink2); line-height: 1.35; }
[data-theme="dark"] .actbtn.act-tool { background: var(--card); }

/* ---------- 私人秘书小框 ---------- */
/* 两办联络 + 赴上级对接：左右并排，按内容量微调比例（两办联络信息密集更宽） */
.layout > aside > .sec-lobby-pair { grid-column: 1 / -1; width: 100%; min-width: 0; margin: 0; }
.sec-lobby-pair { display: grid; grid-template-columns: 1.25fr 1fr; gap: 10px; align-items: stretch; margin-bottom: 16px; }
/* 只有一个框时（如基层无两办联络）横跨整行，保持全宽与上下面板一致 */
.sec-lobby-pair > .panel:only-child { grid-column: 1 / -1; width: 100%; }
/* 极窄视口（<400px）下并排每栏不足 150px 会竖排挤爆，退回上下全宽 */
@media (max-width: 400px) {
  .layout > aside { grid-template-columns: 1fr; }
  /* 极窄视口强制单列全宽（覆盖 JS 动态 inline 定位，避免竖排挤爆） */
  .layout > aside .side-main, .layout > aside .side-sub, .layout > aside > .sec-lobby-pair,
  .layout > aside > .panel.disc, .layout > aside > .side-hl, .layout > aside > .desk-side,
  .layout > aside > .wh-side, .layout > aside > .hl-fair,
  .layout > aside > .side { grid-column: 1 !important; grid-row: auto !important; }
  .sec-lobby-pair { grid-template-columns: 1fr; }
  .sec-lobby-pair > .panel { width: 100%; }
  .sec-lobby-pair .disc-ill { height: 148px; }
  .sec-lobby-pair .disclist { max-height: 120px !important; }
  .sec-lobby-pair .sec-av { width: 54px; height: 68px; }
  .sec-lobby-pair .sec-btns .chip { font-size: 12.5px; padding: 4px 9px; }
}
.sec-lobby-pair > .panel { margin-bottom: 0; min-width: 0; height: 100%; }
.sec-lobby-pair > .panel.disc { margin-bottom: 0; }
.sec-panel { padding: 12px 14px 14px; }
.sec-row { display: flex; gap: 10px; align-items: center; margin: 6px 0 8px; }
.sec-av { width: 56px; height: 72px; object-fit: cover; object-position: top center; border-radius: 8px; border: 1px solid var(--line); flex: none; }
.sec-meta { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 1px; }
.sec-meta b { font-size: 15px; letter-spacing: .5px; }
.sec-bars { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 3px; font-size: 11.5px; color: var(--ink2); }
.sec-bars b { color: var(--ink); font-size: 12px; }
.sec-load { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink2); margin: 4px 0 6px; }
.sec-load .stat-track { flex: 1; height: 5px; }
.sec-task { font-size: 12.5px; color: var(--ink2); border: 1px dashed var(--line); border-radius: 6px; padding: 6px 8px; margin-bottom: 6px; }
.sec-task.on { border-style: solid; border-color: var(--gold); background: rgba(212,175,55,.08); color: var(--ink); }
.sec-btns { display: flex; flex-wrap: wrap; gap: 6px; }
.sec-btns .chip { background: var(--seal); border: 1px solid rgba(212,175,55,.55); color: #fff; font-weight: 700; }
.sec-btns .chip:hover { filter: brightness(1.12); color: #fff; }
.sec-tip { margin: 6px 0 0; line-height: 1.45; }
.sec-panel.empty { padding: 10px 12px; }
.sec-chat .speech-txt { margin-top: 8px; }

.sec-draft-pre {
  white-space: pre-wrap; font-family: inherit; font-size: 13.5px; line-height: 1.7;
  background: var(--paper2); border: 1px solid var(--line); border-radius: 8px;
  padding: 10px 12px; margin: 8px 0; max-height: 220px; overflow: auto;
}
.sec-draft-last { margin-top: 10px; padding-top: 8px; border-top: 1px dashed var(--line); }

/* ---------- 班子建设 / 城市治理增强 ---------- */
.tm-foot .acts{display:flex;gap:6px;flex-wrap:wrap}
.tm-meta{display:flex;flex-direction:column;gap:8px;margin:8px 0 4px;padding:10px 12px}
.tm-co{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tm-fac{display:flex;align-items:center;gap:6px;flex-wrap:wrap}

.city-traits .tr-list{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.tr-item{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;background:var(--paper);border:1px solid var(--line);border-radius:8px}
.tr-item p{margin:2px 0 0}
.tr-ic{font-size:22px;line-height:1.2}
.city-camp.on{border-left:3px solid var(--seal);background:rgba(164,52,43,.04)}
.city-live{border-left:3px solid #2f6f4e}
.city-live.ok{border-left:3px solid #2f6f4e;background:rgba(47,111,78,.04)}
.city-side-trait{font-size:12px;color:#7a5b45;background:#faf3ea;border:1px solid #ead9c6;border-radius:4px;padding:3px 6px;margin-top:4px;line-height:1.5;font-weight:550}
.city-side-camp{font-size:11px;color:#8a2a22;background:#f8ebe7;border:1px solid #e8c9c2;border-radius:4px;padding:3px 6px;margin-top:4px;line-height:1.5}
[data-theme="dark"] .city-side-trait { color: #a89a82; background: #2a241c; border-color: #3d3428; }
[data-theme="dark"] .city-side-camp { color: #d4a098; background: #2a1c18; border-color: #3d2820; }

/* 人事研究 */
.appoint-row.sel{border-left:3px solid var(--seal);background:rgba(164,52,43,.04)}
.hrtalk-ta{width:100%;min-height:64px;margin-top:4px}

/* 组织架构 */
.org-sec{margin-top:10px}
.org-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.org-person{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.org-person.self{border-color:var(--seal);box-shadow:inset 0 0 0 1px rgba(164,52,43,.25)}
.org-person.appt{border-left:3px solid #2f6f4e}
.org-p-h{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.org-p-h b{font-size:14px}
.org-p-m{margin-top:4px;line-height:1.45}
@media (max-width:560px){.org-grid{grid-template-columns:1fr}}

.sec-chat-log {
  max-height: 220px; overflow: auto; margin: 8px 0;
  display: flex; flex-direction: column; gap: 6px;
}
.scl-me, .scl-sec {
  padding: 7px 10px; border-radius: 8px; font-size: 13.5px; line-height: 1.55;
}
.scl-me {
  align-self: flex-end; max-width: 92%;
  background: rgba(164,52,43,.08); border: 1px solid rgba(164,52,43,.18);
}
.scl-sec {
  align-self: flex-start; max-width: 92%;
  background: var(--paper2); border: 1px solid var(--line);
}
.scl-me b, .scl-sec b { display: block; font-size: 11px; color: var(--ink2); margin-bottom: 2px; letter-spacing: .5px; }

/* ---------- 侧栏组织架构小框（官身气象下） ---------- */
.org-side { margin-top: 10px; padding: 12px 14px 14px; border-top: 3px solid rgba(154,123,63,.45); }
.org-side-m { display: flex; flex-wrap: wrap; gap: 5px; margin: 4px 0 8px; }
.org-side-bar { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.org-side-bar .stat-track { flex: 1; }
.org-side-in { margin: 0 0 8px; line-height: 1.45; }

/* 组织架构弹窗美化 */
.org-meta { margin-bottom: 10px !important; }
.org-wrap { display: flex; flex-direction: column; gap: 10px; }
.org-sec {
  border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px 12px;
  background: linear-gradient(180deg, rgba(255,252,243,.5), transparent 40%), var(--card);
}
.org-sec .sec-h {
  margin: 0 0 8px; padding-bottom: 6px; border-bottom: 1px dashed var(--line);
  font-size: 14px; letter-spacing: 1px;
}
.org-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px;
}
.org-person {
  border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px;
  background: rgba(255,255,255,.35); border-left: 3px solid var(--gold);
}
.org-person.self {
  border-left-color: var(--seal);
  background: rgba(164,52,43,.06);
}
.org-person.appt { border-left-color: var(--ok, #3f7d55); }
.org-p-h { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-bottom: 3px; }
.org-p-h b { font-size: 14px; letter-spacing: .3px; }
.org-p-m { font-size: 11.5px; line-height: 1.4; }
.gtag { font-size: 11px; padding: 1px 6px; border-radius: 999px; background: rgba(63,125,85,.12); color: var(--ok, #3f7d55); font-weight: 700; }

/* 城市治理 · 下辖单元 */
.city-subunits { display: flex; flex-wrap: wrap; gap: 4px; margin: 4px 0 8px; align-items: center; }
.city-subunits .csu-t { font-size: 11px; color: var(--ink2); margin-right: 2px; }
.city-subunits .csu {
  font-size: 11px; padding: 1px 7px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--paper2); color: var(--ink2);
}

/* 孕育/降生弹窗：插图 + 喜帖式卡片 */
.baby-card .scene-illus { margin-bottom: 10px; }
.baby-card .scene-illus img { width: auto; height: auto; max-width: 100%; max-height: 220px; margin: 0 auto; object-fit: contain; border-radius: 8px; display: block; }
.baby-glory { border-color: #b85c38; box-shadow: 0 6px 20px rgba(184,92,56,.16); }
.baby-glory .glory-banner { color: #b85c38; border-bottom-color: rgba(184,92,56,.35); }
.baby-glory .glory-seal { background: #b85c38; box-shadow: 0 0 0 2px #b85c38; }

.city-subunits .csu.has {
  border-color: var(--ok, #3f7d55);
  color: var(--ok, #3f7d55);
  background: rgba(63,125,85,.1);
  font-weight: 700;
}


/* ==================== 省域治理：全省下辖市 ==================== */
.city-subunits .csu.cap {
  border-color: var(--gold, #b8860b);
  color: var(--gold, #b8860b);
  background: rgba(184, 134, 11, .1);
  font-weight: 700;
}
.prov-cities {
  border: 1px solid var(--line);
  background: linear-gradient(135deg, rgba(164,52,43,.05), rgba(184,134,11,.06));
  padding: 10px 12px; border-radius: 10px; margin-bottom: 12px;
}
.prov-cities .pc-t { font-size: 14px; font-weight: 800; margin-bottom: 7px; }
.prov-cities .pc-t .muted { font-weight: 400; }
.prov-cities .pc-list { display: flex; flex-wrap: wrap; gap: 6px; }
/* 下辖 chip 与「打开台账」可点：勿再 pointer-events:none（会吞掉点击） */
.prov-cities .chip { pointer-events: auto; cursor: pointer; }
.prov-cities .chip.on {
  border-color: var(--gold, #b8860b); color: var(--gold, #b8860b);
  background: rgba(184,134,11,.12); font-weight: 800;
}

/* ---------- 办公室来访：人物卡 + 报表正文（可读性） ---------- */
.v-who-card {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 10px;
  margin: 10px 0 12px; padding: 12px 14px;
  border: 1px solid var(--line); border-left: 4px solid var(--seal);
  border-radius: 10px;
  background: linear-gradient(100deg, rgba(164,52,43,.08), rgba(212,175,55,.06) 45%, transparent);
}
.v-who-l { display: flex; align-items: center; gap: 10px; min-width: 0; }
.v-who-ic { font-size: 28px; line-height: 1; flex: none; }
.v-who-pic { width: 54px; height: 68px; border-radius: 6px; border: 2px solid rgba(154,123,63,.55); object-fit: cover; object-position: top center; flex: none; background: #f4ecd8; box-shadow: 0 1px 3px rgba(0,0,0,.18); }
.v-who-t { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.v-who-name {
  font-family: var(--font-kai); font-size: 20px; font-weight: 900;
  letter-spacing: 2px; color: var(--seal); line-height: 1.2;
}
.v-who-role {
  font-size: 13px; font-weight: 700; color: var(--ink); letter-spacing: .3px;
}
.v-who-title { font-size: 12px; color: var(--ink2); }
.v-who-topic {
  flex: none; max-width: 42%; text-align: right;
  font-size: 12.5px; color: var(--ink2); line-height: 1.4;
}
.v-lead { margin: 0 0 10px; font-size: 14px; color: var(--ink2); line-height: 1.6; }
.v-report {
  border: 1px solid var(--line); border-radius: 10px;
  background: var(--card); padding: 12px 14px 14px; margin-bottom: 12px;
  box-shadow: var(--shadow);
}
.v-report-h {
  font-family: var(--font-kai); font-size: 15px; font-weight: 800;
  letter-spacing: 2px; color: var(--ink);
  padding-bottom: 8px; margin-bottom: 10px;
  border-bottom: 1px dashed var(--line);
}
.v-report-body p {
  margin: 0 0 10px; font-size: 16px; line-height: 1.85;
  color: var(--ink); font-weight: 500; letter-spacing: .2px;
}
.v-report-body p:last-child { margin-bottom: 0; }
.v-tip { margin: 0 0 6px; font-size: 13px; color: var(--ink2); }
.visitor-box .talk-line .tl-text { font-size: 15.5px; line-height: 1.75; font-weight: 500; }
.v-turn { font-size: 14px; line-height: 1.65; }

/* 下辖台账 */
.subgov-list { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.subgov-row {
  border: 1px solid var(--line); border-left: 3px solid var(--gold);
  border-radius: 10px; padding: 10px 12px; background: var(--card);
}
.subgov-row.busy { border-left-color: var(--seal); }
.sg-h { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.sg-h b { font-size: 16px; font-family: var(--font-kai); letter-spacing: 1px; }
.sg-m { display: flex; flex-wrap: wrap; gap: 8px 12px; font-size: 12.5px; color: var(--ink2); margin-bottom: 6px; }
.sg-m b { color: var(--ink); font-size: 13px; }
.sg-m .ok { color: var(--ok, #3f7d55); font-weight: 700; }
.sg-m .bad { color: var(--danger); font-weight: 700; }
.sg-bar { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 6px; }
.sg-acts { display: flex; flex-wrap: wrap; gap: 6px; }
.subgov-block { margin-bottom: 8px !important; }

/* 公安口责任块 */
.police-sec { border-top: 2px solid rgba(49,70,95,.35); }
.police-brief {
  border: 1px solid var(--line); border-left: 3px solid #31465f;
  border-radius: 8px; padding: 8px 10px; margin: 6px 0 8px;
  background: rgba(49,70,95,.05);
}
.pb-row { display: flex; align-items: center; gap: 8px; margin-bottom: 2px; }
.pb-row b.ok { color: var(--ok, #3f7d55); }
.pb-row b.bad { color: var(--danger); }
.pb-line { margin: 4px 0 2px; font-size: 13px; line-height: 1.5; }
.pb-note { margin: 2px 0; font-size: 12.5px; color: var(--ink2); }
.city-row2-btns { display: flex; flex-wrap: nowrap; gap: 6px; margin-top: 2px; }
.city-row2-btns .btn { flex: 1 1 0; font-size: 13.5px; padding: 5px 8px; white-space: nowrap; text-align: center; }
.police-mini { font-size: 12px; margin: 4px 0 6px; color: var(--ink2); }
.police-mini b.ok { color: var(--ok, #3f7d55); }
.police-mini b.bad { color: var(--danger); }

/* 纪检监察线 */
.disc-sec { border-top: 2px solid rgba(125, 40, 40, .35); }
.disc-brief { border-left-color: #7d2828; background: rgba(125, 40, 40, .05); }
.disc-banner { border-top-color: #7d2828 !important; }
.disc-clues { display: flex; flex-direction: column; gap: 6px; margin: 8px 0; }
.disc-clue {
  display: grid; grid-template-columns: 28px 1fr auto; gap: 8px; align-items: center;
  width: 100%; text-align: left; cursor: pointer;
  border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px;
  background: rgba(255,255,255,.35); color: inherit; font: inherit;
}
.disc-clue:hover { border-color: #7d2828; background: rgba(125,40,40,.06); }
.disc-clue.wide { grid-template-columns: 28px 1fr auto auto; }
.disc-clue .dc-ic { font-size: 18px; text-align: center; }
.disc-clue .dc-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.disc-clue .dc-main b { font-size: 13px; }
.disc-clue .dc-note { font-size: 11.5px; color: var(--ink2); opacity: .85; }
.disc-clue .dc-ev { font-size: 12px; font-weight: 600; white-space: nowrap; }
.disc-clue .dc-ev.ok { color: var(--ok, #3f7d55); }
.disc-clue .dc-ev.bad { color: var(--danger); }
.disc-clue .dc-stage { font-size: 11px; color: var(--ink2); white-space: nowrap; }
.disc-row { margin-bottom: 4px; }
.disc-row.arch .disc-clue { opacity: .72; }
.disc-attr { display: grid; grid-template-columns: 56px 1fr 28px; gap: 8px; align-items: center; margin: 8px 0; font-size: 13px; }
.disc-attr b.ok { color: var(--ok, #3f7d55); }
.disc-attr b.bad { color: var(--danger); }
/* 一把手斗争区：公开研判 / 私下约谈 */
.struggle-zone { margin: 10px 0 4px; padding: 8px 10px; border: 1px dashed var(--seal, #b03a2e); border-radius: 8px; background: rgba(176, 58, 46, .05); }
.disc-workbench { margin: 8px 0 12px; padding: 8px 10px; border: 1px dashed var(--line, #d8cdb5); border-radius: 8px; background: rgba(212, 175, 55, .06); }
.ledger-risk { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 6px 0 10px; padding: 8px 10px; border: 1px solid var(--line, #d8cdb5); border-radius: 8px; background: rgba(0,0,0,.03); }
.ledger-tbl { width: 100%; border-collapse: collapse; font-size: 12px; margin: 6px 0 10px; }
.ledger-tbl th, .ledger-tbl td { border: 1px solid var(--line, #d8cdb5); padding: 5px 8px; text-align: left; vertical-align: top; }
.ledger-tbl th { background: rgba(176, 58, 46, .08); font-weight: 600; white-space: nowrap; }
.ledger-tbl td { line-height: 1.5; }
.struggle-zone .crisis-head { margin-bottom: 4px; }
.struggle-stat { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 4px 0 6px; }
.struggle-stat .c-hot { color: var(--danger); font-weight: 700; }
.struggle-zone .opts { margin-top: 2px; }
.crisis-opt.disabled { opacity: .55; cursor: not-allowed; border-style: dashed; }
.crisis-opt.disabled:hover { border-color: var(--line, #d8cdb5); border-left-color: var(--line, #d8cdb5); }
.disc-catch .narr { font-size: 15px; line-height: 1.9; }
.disc-board .pf-sh { margin-top: 10px; }

/* 家属请托 */
.fam-banner { border-top-color: #8b5a2b !important; }

/* 时代 / 组织 */
.tag.t-era { border-color: #b8a080; color: #6b4226; background: rgba(184,160,128,.1); cursor: pointer; transition: background .15s, box-shadow .15s; }
.tag.t-era:hover { background: rgba(184,160,128,.25); box-shadow: 0 0 0 2px rgba(184,160,128,.2); }
.tag.t-era .era-yr { font-style: normal; font-size: 10.5px; opacity: .75; margin-left: 3px; letter-spacing: .5px; }
.tag.t-era .era-yr::before { content: ''; }
.org-sec { border-top: 2px solid rgba(90, 70, 140, .35); }
.biz-banner { border-top-color: #8b4513 !important; }
.biz-sec { border-top: 2px solid rgba(139, 69, 19, .35); }

/* 右侧分管工作紧凑框 */
.port-side { border-top: 2px solid rgba(49, 70, 95, .4); }
.port-side-fields { margin: 4px 0 6px; }
.port-side h3 { margin-bottom: 6px; font-size: 15px; font-weight: 800; }
.port-side .stat-head { font-size: 13px; font-weight: 600; }
.port-side .stat-head b { font-weight: 700; color: var(--ink); }
.port-side .pb-note { font-size: 13px; font-weight: 600; }
.port-side .chip.tiny { font-size: 12.5px; }

/* 时代注释弹窗 */
.era-banner { font-family: var(--font-kai); font-size: 22px; letter-spacing: 2px; color: #6b5b95; display: flex; align-items: baseline; gap: 10px; }
.era-banner .era-span { font-family: var(--font-ui); font-size: 13px; font-weight: var(--ui-small-weight); letter-spacing: 1px; color: var(--ink2); opacity: .8; }
.era-tagline { font-size: 15px; color: var(--seal); margin: 4px 0 2px; font-weight: 600; }
.era-creed { font-size: 13.5px; color: var(--ink2); margin: 0 0 6px; }
.era-line { font-size: 13.5px; color: var(--ink2); line-height: 1.7; margin: 4px 0; padding-left: 12px; border-left: 3px solid rgba(107, 91, 149, .3); font-style: italic; }
.era-row { display: flex; flex-direction: row; align-items: flex-start; gap: 10px; padding: 7px 10px; margin: 5px 0; border-radius: 8px; background: var(--paper); border: 1px solid var(--line); }
.era-row.good { border-left: 3px solid var(--ok); }
.era-row.bad { border-left: 3px solid var(--seal); }
.era-ef { flex: 0 0 84px; font-weight: 700; font-size: 13.5px; color: var(--ink); padding-top: 1px; }
.era-arr { flex: 0 0 56px; font-weight: 800; font-size: 13.5px; text-align: right; }
.era-row.good .era-arr { color: var(--ok); }
.era-row.bad .era-arr { color: var(--seal); }
.era-note { flex: 1; font-size: 13px; line-height: 1.6; color: var(--ink2); }
.era-timeline { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin: 6px 0; }
.era-tl { display: inline-flex; flex-direction: column; padding: 4px 9px; background: var(--paper2); border: 1px solid var(--line); border-radius: 6px; font-size: 12.5px; font-weight: 600; }
.era-tl i { font-style: normal; font-size: 11px; color: var(--ink2); font-weight: 400; margin-top: 1px; }
.era-tl.cur { background: rgba(107, 91, 149, .16); border-color: #6b5b95; color: #6b5b95; }
.era-timeline em { color: var(--line); font-style: normal; }

/* 群众来信·纪检专线种类标签 */
.tag.t-mailkind { border-color: #7a6a3a; color: #7a6a3a; background: rgba(122, 106, 58, .1); cursor: default; margin-left: 6px; font-weight: 600; }
.lt-head .tag.t-mailkind { vertical-align: 1px; }

/* 人脉快车道 */
.ft-card { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; margin: 8px 0; background: rgba(0,0,0,.02); }
.ft-card.ready { border-color: #3f7d55; background: rgba(63,125,85,.06); }
.ft-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.ft-chks { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.ft-chk { font-size: 12px; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--line); }
.ft-chk.ok { border-color: #3f7d55; color: #3f7d55; }
.ft-chk.no { border-color: #b33; color: #b33; opacity: .85; }

/* 年度统计公报 */
.econ-paper .econ-lead { font-size: 17px; line-height: 1.9; margin: 8px 0 12px; }
.econ-tbl { font-size: 14px; }
.econ-tbl th, .econ-tbl td { padding: 6px 8px; }
.econ-attrs { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; margin-top: 8px; }
.econ-attr { display: grid; grid-template-columns: 36px 28px 1fr; gap: 6px; align-items: center; font-size: 13px; }
.econ-attr b { text-align: right; }
.io-track { height: 6px; background: rgba(0,0,0,.08); border-radius: 3px; overflow: hidden; }
.io-fill { height: 100%; background: linear-gradient(90deg, #c47b4a, #9c2b2b); }

.econ-inds { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 8px; }
.econ-ind { border: 1px solid rgba(0,0,0,.08); border-radius: 8px; padding: 8px 10px; background: rgba(255,255,255,.35); }
.econ-ind-h { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 4px; }
.econ-ind-v { font-size: 16px; font-weight: 600; margin-bottom: 6px; }
.econ-drivers { margin-top: 6px; }

.police-banner { border-top-color: #31465f !important; }
.plan-box { margin: 8px 0 10px; padding: 8px 10px; border: 1px dashed var(--line); border-radius: 8px; }
.plan-box.done { border-style: solid; border-color: var(--gold); background: rgba(212,175,55,.06); }
.plan-t { font-size: 13px; font-weight: 700; margin-bottom: 6px; }
.plan-say { font-size: 14px; line-height: 1.6; }

/* 秘书处：双列宫格卡片（参考用户 UI 参考图：图标+名称+说明） */
.so-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 2px; border-bottom: 1px dashed var(--line); }
.so-row:last-child { border-bottom: 0; }
.so-row .so-l { display: flex; flex-direction: column; min-width: 0; }
.so-row .so-l b { font-size: 14px; }
.so-row .so-l i { font-style: normal; font-size: 12px; color: var(--muted, #8a7a5c); }
.so-row .so-r { font-size: 12px; color: var(--muted, #8a7a5c); white-space: nowrap; }
.so-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.so-card { display: flex; align-items: center; gap: 8px; padding: 9px 10px; background: var(--paper, #fff); border: 1px solid var(--line); border-radius: 10px; cursor: pointer; text-align: left; transition: all .15s; }
.so-card:hover { border-color: var(--gold, #d4af37); box-shadow: 0 2px 6px rgba(0,0,0,.08); transform: translateY(-1px); }
.so-card .so-ic { font-size: 18px; flex: none; }
.so-card .so-nm { font-size: 13.5px; font-weight: 700; }
.so-card .so-tip { margin-left: auto; font-size: 11px; color: var(--muted, #8a7a5c); white-space: nowrap; }

/* ══ 右栏 V2（按设计稿） ══ */
.right-col { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.rc-head { display: flex; align-items: baseline; justify-content: space-between; padding: 4px 2px 2px; }
.rc-head-t { font-family: var(--font-kai); font-size: 18px; font-weight: 700; letter-spacing: 2px; }
.rc-head em { font-style: normal; font-size: 13px; color: var(--ink3); }
.rc-card { margin-bottom: 0 !important; }
.rc-title { font-family: var(--font-kai); font-size: 17px; font-weight: 700; letter-spacing: 1px; margin-bottom: 10px; }
.rc-title em { font-style: normal; font-size: 12.5px; font-weight: 500; color: var(--ink3); margin-left: 8px; letter-spacing: 0; }

/* 官身气象 2×3 */
.gs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.gs-cell { border-radius: 10px; padding: 10px 12px 8px; background: rgba(156, 43, 43, .04); border: 1px solid transparent; }
.gs-cell.gs-ok { background: rgba(46, 110, 74, .06); }
.gs-cell.gs-bad { background: rgba(180, 40, 40, .07); border-color: rgba(180, 40, 40, .12); }
.gs-l { font-size: 13px; color: var(--ink2); }
.gs-v { font-size: 26px; font-weight: 800; line-height: 1.15; margin: 2px 0 6px; font-variant-numeric: tabular-nums; }
.gs-cell.gs-ok .gs-v { color: #2e6e4a; }
.gs-cell.gs-bad .gs-v { color: #b42828; }
.gs-cell.gs-mid .gs-v { color: var(--ink); }
.gs-bar { height: 5px; border-radius: 3px; background: rgba(0,0,0,.08); overflow: hidden; }
.gs-bar i { display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, #c47b4a, #9c2b2b); }
.gs-cell.gs-ok .gs-bar i { background: linear-gradient(90deg, #4a9a6a, #2e6e4a); }
.gs-cell.gs-bad .gs-bar i { background: linear-gradient(90deg, #d06060, #a02020); }
.gs-net-h { display: flex; justify-content: space-between; align-items: baseline; margin: 14px 0 6px; font-size: 13.5px; }
.gs-net-h em { font-style: normal; color: var(--ink3); font-size: 12px; }
.gs-net { display: flex; flex-direction: column; gap: 5px; }
.gs-net-row { display: grid; grid-template-columns: 28px 1fr 28px; gap: 8px; align-items: center; font-size: 12.5px; }
.gs-net-row b { text-align: right; font-variant-numeric: tabular-nums; }
.gs-net-row .n-up { background: linear-gradient(90deg, #4a9a6a, #2e6e4a) !important; }
.gs-net-row .n-mid { background: linear-gradient(90deg, #c47b4a, #9c2b2b) !important; }
.gs-net-row .n-low { background: linear-gradient(90deg, #b8923a, #8a6a20) !important; }
.gs-bar .n-exp { background: linear-gradient(90deg, #d06060, #a02020) !important; }
.gs-exp-row { display: grid; grid-template-columns: 44px 1fr 30px auto; gap: 8px; align-items: center; font-size: 12.5px; margin-top: 6px; }
.gs-exp-row b { text-align: right; font-variant-numeric: tabular-nums; }
.gs-exp-row em { font-style: normal; font-size: 11.5px; color: #a02020; }

/* 身份卡（朱红描边） */
.rc-id { border: 1.5px solid var(--seal, #9c2b2b); border-radius: 12px; padding: 14px !important; background: linear-gradient(160deg, rgba(156,43,43,.04), transparent 50%), var(--card); }
.rc-id-row { display: flex; gap: 12px; align-items: flex-start; }
.rc-id-av { width: 78px; height: 96px; object-fit: cover; object-position: top center; border-radius: 8px; border: 1px solid var(--line); background: var(--paper); flex: none; }
.idphoto-box { width: 92px; height: 112px; border-radius: 8px; border: 2px solid #b01e23; display: flex; align-items: center; justify-content: center; flex: none; box-shadow: inset 0 0 0 1px rgba(255,255,255,.55); }
.dep-up { animation: depUp .6s ease; }
.dep-down { animation: depDown .6s ease; }
@keyframes depUp { 0% { color: #8f8; } 100% { } }
@keyframes depDown { 0% { color: #f88; } 100% { } }
.idphoto-emo { font-size: 42px; line-height: 1; filter: drop-shadow(0 1px 1px rgba(0,0,0,.12)); }
.idphoto-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.idphoto-item { width: 74px; border: 1.5px solid rgba(30,22,8,.5); border-radius: 6px; background: var(--card, #fffdf6); cursor: pointer; padding: 6px 4px; display: flex; flex-direction: column; align-items: center; gap: 4px; font: inherit; }
.idphoto-item.sel { border-color: #b01e23; background: #fff5f0; box-shadow: 0 0 0 2px rgba(176,30,35,.12); }
.idphoto-item .ip-emo { width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 26px; }
.idphoto-item .ip-nm { font-size: 11px; font-weight: 700; color: var(--ink, #3a3428); line-height: 1.2; text-align: center; }
.stat-track .c-ok, .stat-track i.c-ok { background: #6b9e78; }
.stat-track .c-no, .stat-track i.c-no { background: #c96a6a; }
.lobby-row.muted { opacity: .55; }
.rc-id-meta { min-width: 0; padding-top: 4px; }
.rc-id-name { font-size: 22px; font-family: var(--font-kai); letter-spacing: 2px; display: block; }
.rc-id-org { margin-top: 8px; color: var(--seal, #9c2b2b); font-size: 14px; font-weight: 600; }
.rc-id-age { margin-top: 4px; color: var(--ink3); font-size: 13px; }
.rc-id-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; }
.rc-id-tag { font-size: 13px; color: var(--ink2); }

/* 秘书/城市沿用原 panel，略收内距 */
.rc-card.sec-panel h3, .rc-card.city-side h3 { font-size: 16px; }
.rc-rest { display: flex; flex-direction: column; gap: 12px; }
.rc-rest > .panel { margin-bottom: 0; }

@media (max-width: 1700px) {
  /* ★ 2026-10-21 修复窄屏横向溢出：这里原本还有一条
       .layout { grid-template-columns: 220px minmax(0, 2.2fr) 400px; }
     它写在 :474 的 @media (max-width:900px){.layout{grid-template-columns:1fr}} 之后，
     同特异性后写者胜 ⇒ 1100/900 两个断点被架空，窄屏一直按三列排，420 档实测
     .layout 只有 384 宽却算出 474+242+280≈1050，整页横向溢出 648px。
     已删除该条（1500 档 :467 的三列已足够覆盖宽屏），窄屏交回上面的断点。 */
  .layout > aside.right-col { grid-column: 1 / -1; }
  .gs-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 900px) {
  .layout { grid-template-columns: 1fr; }
  .layout > .main, .layout > aside { min-width: 0; }
  .layout > aside.right-col { order: 3; }
  .gs-grid { grid-template-columns: 1fr 1fr; }
  .rc-id-av { width: 62px; height: 78px; }
}
/* ★ 2026-10-21 手机档两组复位（aside-ap 的 grid-column/min-width、顶栏 .t-left/.t-right 可收缩性）
   曾写在这里，实测完全无效——「写在前面的 !important 打不过写在后面的 !important」。
   已全部移到本文件末尾，原因见文件尾部两段 ★★★ 注释。 */

.deputy-sec { border-top: 2px solid rgba(49,70,95,.25); }


/* ============ 向上争取（跑项争资）面板 ============ */
.gr-req {
  display: grid; gap: 6px; padding: 10px 12px;
  border: 1px solid var(--line); border-radius: 8px; background: rgba(255, 255, 255, .35);
}
.gr-rq-nm { font-size: 16px; font-weight: 700; color: var(--ink); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.gr-rq-acts { display: flex; gap: 6px; flex-wrap: wrap; }
.gr-q { padding: 11px 0; border-top: 1px dashed var(--line); }
.gr-q-t { font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 8px; font-family: var(--font-kai); line-height: 1.55; }
.gr-q-opts { display: flex; gap: 6px; flex-wrap: wrap; }
.gr-q-opts .chip.on { background: var(--seal); color: #fff; border-color: var(--seal2); }
.gr-bar { height: 9px; border-radius: 5px; background: rgba(120, 100, 60, .16); overflow: hidden; margin: 9px 0 5px; }
.gr-bar i { display: block; height: 100%; background: linear-gradient(90deg, #8a6b2f, #c8a24a); transition: width .3s; }
.gr-hold {
  margin-top: 9px; padding: 9px 12px; border-left: 3px solid var(--warn);
  background: rgba(180, 118, 31, .09); border-radius: 6px;
  display: flex; gap: 9px; align-items: center; flex-wrap: wrap;
}

.v-data {
  border: 1px solid var(--line); border-left: 3px solid var(--gold);
  border-radius: 10px; padding: 10px 12px; margin: 8px 0 10px;
  background: linear-gradient(180deg, rgba(212,175,55,.08), transparent);
}
.vd-h { font-size: 13px; font-weight: 800; letter-spacing: 1px; margin-bottom: 8px; }
.vd-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(72px, 1fr)); gap: 8px; }
.vd { text-align: center; }
.vd b { display: block; font-size: 16px; font-weight: 800; font-variant-numeric: tabular-nums; }
.vd b i { font-style: normal; font-size: 11px; font-weight: 600; color: var(--ink2); margin-left: 1px; }
.vd span { font-size: 11px; color: var(--ink2); }
.vd.ok b { color: var(--ok, #3f7d55); }
.vd.bad b { color: var(--danger); }

/* 驻村争取资金 */
.fund-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
  margin: 8px 0; padding: 8px 10px; background: var(--paper); border: 1px solid var(--line2); border-radius: 8px; }
.fund-row b { color: var(--cinnabar-d); }
/* ========== head-side rail (hsr-*) ========== */
#menuScreen { position: relative; }
#menuScreen::before {
  content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(ellipse 120% 90% at 50% 0%, rgba(154,123,63,.10), transparent 55%),
    radial-gradient(ellipse 90% 70% at 82% 86%, rgba(164,52,43,.05), transparent 60%),
    radial-gradient(ellipse 70% 60% at 8% 74%, rgba(60,96,120,.06), transparent 55%);
}
#menuScreen > .menuwrap { position: relative; z-index: 1; }

.menuwrap {
  border: 1px solid #cbb98f;
  outline: 1px solid rgba(164,52,43,.45);
  outline-offset: 4px;
  border-radius: 14px;
  box-shadow: 0 2px 4px rgba(60,45,20,.08), 0 18px 46px rgba(60,45,20,.18), inset 0 0 0 1px rgba(255,255,255,.6);
  background-color: var(--paper);
}
/* 起始页整页背景：素材下半段（留白/建筑延伸）cover 铺满整个菜单容器，顶部与封面无缝衔接；
   伪元素置于内容之下（z-index:-1），文字层级不受影响；暗色主题单独调暗背景图 */
.menuwrap::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  /* ⚠ 2026-09-24 查证（未改，留证据）：本文件就在 assets/ 里，所以这行 url('assets/deco/…')
     会被解析成 assets/assets/deco/… —— 不存在，背景图其实一直没加载，外框内部露的是纯色 --paper。
     正确写法应是 url('deco/menu-art-bottom.webp')。
     但**直接改对路径会变糟**：menu-art-bottom.webp 顶部烤着「仕途·登峰」标题，
     而这里是 top center / cover —— 外框比图高得多，会被放大到标题重影 + 竖纹。
     要真正启用这层，得先裁掉图里的标题区、或改成 100% auto + 负偏移。等定性再动。 */
  background: transparent; /* 原 url('assets/deco/menu-art-bottom.webp') 在 assets/ 内会解析成 assets/assets/… 404；直接启用又会放大顶部标题区重影——保持透明（与 404 时外观一致），消除资源报错 */
  z-index: -1;
  pointer-events: none;
}
/* 起始页顶部小字说明（副标题 / 架空声明条）随素材整面覆盖而去除，正文声明保留在底部保密约定 */
.menuwrap .mhead .sub,
.menuwrap .mhead .warnline { display: none !important; }

html[data-theme="dark"] .menuwrap {
  background-color: var(--paper);
  border-color: var(--line);
}
html[data-theme="dark"] .menuwrap::before { filter: brightness(.5) saturate(.85); }
/* 内容框与外框同色：不再自铺底，直接露出外框纸面 */
.createform {
  background: transparent;
  box-shadow: none;
}
.createform .row { background: rgba(255,255,255,.4); border-color: rgba(30,22,8,.62); }
html[data-theme="dark"] .createform { background: transparent; }

/* 封面：金线装裱 + 底部融合 */
.cover { padding: 5px 5px 0; background: linear-gradient(160deg, #b89b5e, #8f6f2f 60%, #7a5f27); }
.cover img { border-radius: 8px 8px 0 0; }
.cover::after {
  content: ""; display: block; height: 14px; margin: 0 -5px;
  background: linear-gradient(180deg, rgba(60,45,20,.28), rgba(60,45,20,0));
}

/* 标题：描金 + 两侧红金缀饰 */
.mhead { padding-top: 26px; }
.mhead h1 {
  font-size: 92px; color: #1f1c16;
  text-shadow: 0 1px 0 rgba(255,255,255,.7), 0 2px 0 #d9c69a, 0 3px 0 rgba(154,123,63,.35), 0 6px 18px rgba(120,30,20,.16);
  padding: 0 14px;
}
.mhead h1::before, .mhead h1::after {
  content: ""; position: absolute; top: 50%; width: 58px; height: 3px; margin-top: -1.5px;
  background: linear-gradient(90deg, transparent, var(--gold));
  border-radius: 2px;
}
.mhead h1::before { left: -74px; transform: scaleX(-1); }
.mhead h1::after { right: -74px; }
.mhead .sub { color: #5b554a; letter-spacing: 6px; font-size: 16px; margin-top: 10px; }
.mhead .byline {
  display: inline-block; margin-top: 6px; padding: 3px 18px 3px 22px;
  border: 1px solid rgba(164,52,43,.5); border-radius: 20px;
  background: linear-gradient(90deg, rgba(164,52,43,.08), rgba(154,123,63,.1));
}

/* 开始按钮：朱红烫金 */
.acts.center .btn.primary.big {
  background: linear-gradient(180deg, #b53d33, var(--seal) 55%, var(--seal2));
  border: 1px solid #7a241d;
  box-shadow: 0 0 0 2px rgba(154,123,63,.55), 0 6px 18px rgba(122,36,29,.35), inset 0 1px 0 rgba(255,255,255,.28);
  color: #fff8ec; font-size: 21px; letter-spacing: 10px; padding: 16px 58px 16px 68px;
  text-shadow: 0 1px 2px rgba(90,20,10,.45);
  transition: transform .15s ease, box-shadow .15s ease;
}
.acts.center .btn.primary.big:hover {
  transform: translateY(-2px);
  box-shadow: 0 0 0 2px rgba(154,123,63,.75), 0 10px 26px rgba(122,36,29,.42), inset 0 1px 0 rgba(255,255,255,.32);
}

/* 传承/存档条金边 */
.legacybox { border: 1px solid #cbb98f; background: linear-gradient(180deg, rgba(251,247,239,.9), rgba(246,240,229,.94)); }
.slotsbar { border: 1px solid #cbb98f; background: linear-gradient(180deg, rgba(251,247,239,.92), rgba(245,239,228,.96)); }

/* 表单区微调 */
.createform { border-color: rgba(164,52,43,.55); }

/* 聊天框送礼物 */
.chat-gift { display: flex; align-items: center; gap: 8px; margin: 8px 0 2px; flex-wrap: wrap; }
.chat-gift .chip { flex: none; }

/* ��ͷ����̨����Ա������ */
.desk-side .desk-mentor{font-size:12px;margin:4px 0 2px;color:#7a5b45}
.desk-side .desk-subject{display:flex;align-items:center;gap:6px;margin:6px 0;padding:5px 8px;border:1px solid rgba(154,63,63,.4);border-radius:6px;background:rgba(250,240,233,.6)}
.desk-side .disc-subject-ic{width:20px;height:20px;border-radius:4px;flex:0 0 auto}
.desk-side .desk-peer{margin-bottom:4px}
.desk-steps{display:flex;flex-wrap:wrap;gap:4px 8px;margin:6px 0;font-size:11.5px;color:#8a7a68}
.desk-step.done{color:#3d7a4a}
.desk-step.cur{color:#a82828;font-weight:600}
.desk-active{margin-top:6px}
.desk-tone{margin-top:6px;line-height:1.5}
.desk-credit{margin:6px 0;padding:8px 9px;border:1px dashed rgba(154,63,63,.35);border-radius:6px;background:rgba(250,240,233,.55)}
.desk-credit .desk-twist-t{color:#8c2f2f;margin-top:0;border-top:none;padding-top:0}
.desk-twist-t{margin:8px 0 4px;font-weight:700;color:#a8541f;font-size:13px}
.desk-twist .desk-twist-t{border-top:1px dashed #d8c8b0;padding-top:8px}
[data-theme="dark"] .desk-twist-t{color:#d09a5f}
[data-theme="dark"] .desk-side .desk-mentor{color:#a89a82}
[data-theme="dark"] .desk-steps{color:#8a7a68}

/* 右侧功能块红色线条描边（政务红粗线，按用户参考图样式） */
.side .panel{border:3px solid var(--seal)}
.desk-side .desk-subject{border:3px solid var(--seal)}
/* 案头工作台紧凑：监督条收窄单行、工作网格与说明文字收紧 */
/* 监督·廉洁档案条（左栏自由行动底部，原右栏案头框移位，防相邻面板插图遮挡） */
 .acts-rail .rail-subject{display:flex;align-items:center;gap:6px;margin:12px 0 4px;padding:7px 10px;border:1px solid #a43a2c;border-radius:6px;background:linear-gradient(180deg,#a43a2c,#7c2a1e);box-shadow:0 2px 6px rgba(120,30,20,.35);font-size:13px;flex-wrap:wrap;row-gap:5px;color:#fff}
.acts-rail .rail-subject .disc-subject-ic{width:20px;height:20px;border-radius:4px;flex:0 0 auto}
 .acts-rail .rail-subject span{flex:1 1 auto;white-space:nowrap;font-weight:700;font-size:13px !important;color:#fff}
 .acts-rail .rail-subject .chip{margin-left:auto;flex:none;font-size:12.5px;font-weight:700;padding:4px 10px;background:rgba(255,255,255,.94);color:#7c2a1e;border-color:#fff}
 .acts-rail .rail-subject b.ok{color:#dff5e0}
.acts-rail .rail-subject b.bad{color:#ffe0da}
.acts-rail .rail-subject.govcar-bar{background:linear-gradient(180deg,#5c4636,#3a2a20);border-color:#8a6d2f}
.acts-rail .rail-subject.govcar-bar svg{flex:0 0 auto;margin-right:2px}
.acts-rail .rail-subject.health-bar{background:linear-gradient(180deg,#2f6b3a,#1f4a27);border-color:#3d8b4a}
.acts-rail .rail-subject.health-bar.bad{background:linear-gradient(180deg,#a43a2c,#7c2a1e);border-color:#c0392b}
[data-theme="dark"] .acts-rail .rail-subject.health-bar{background:linear-gradient(180deg,#274f2f,#193820);border-color:#3d8b4a}
[data-theme="dark"] .acts-rail .rail-subject.health-bar.bad{background:linear-gradient(180deg,#7c2a1e,#5c1f16);border-color:#c0392b}
.acts-rail .rail-subject.health-bar .chip{margin-left:auto}
.banq-picks{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
/* 年度重点工程进度展示（施政大会按钮下方） */
.govp-prog-box{margin-top:8px;padding:10px 12px}
.govp-prog-row{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:12.5px}
.govp-prog-n{flex:0 0 auto;min-width:0;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.govp-prog-row .stat-track{flex:1}
.govp-prog-m{flex:0 0 auto;color:var(--ink2);white-space:nowrap}
.banq-picks .chip{flex:1 1 auto;justify-content:flex-start;text-align:left;padding:6px 10px;background:rgba(255,255,255,.92);color:#4a3165;border:1px solid #c9b8dd;font-size:12.5px}
.banq-picks .chip.picked{background:#7b5ea7;color:#fff;border-color:#7b5ea7;box-shadow:0 0 0 2px rgba(123,94,167,.35)}
.acts-rail .rail-subject.fun-bar{background:linear-gradient(180deg,#6b4a8f,#4a3165);border-color:#8a5fb0}
.acts-rail .rail-subject.fun-bar .muted.small{white-space:normal;line-height:1.55;min-width:0;overflow-wrap:break-word}
.acts-rail .rail-subject.fun-bar .tag{flex:0 0 auto;margin-left:2px}
.acts-rail .rail-subject.fun-bar .chip{margin-left:auto}
[data-theme="dark"] .banq-picks{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
/* 年度重点工程进度展示（施政大会按钮下方） */
.govp-prog-box{margin-top:8px;padding:10px 12px}
.govp-prog-row{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:12.5px}
.govp-prog-n{flex:0 0 auto;min-width:0;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.govp-prog-row .stat-track{flex:1}
.govp-prog-m{flex:0 0 auto;color:var(--ink2);white-space:nowrap}
.banq-picks .chip{flex:1 1 auto;justify-content:flex-start;text-align:left;padding:6px 10px;background:rgba(255,255,255,.92);color:#4a3165;border:1px solid #c9b8dd;font-size:12.5px}
.banq-picks .chip.picked{background:#7b5ea7;color:#fff;border-color:#7b5ea7;box-shadow:0 0 0 2px rgba(123,94,167,.35)}
.acts-rail .rail-subject.fun-bar{background:linear-gradient(180deg,#5b3f7a,#3c2860);border-color:#8a5fb0}
.clinic-chat{display:flex;flex-direction:column;gap:6px;max-height:46vh;overflow:auto}
.clinic-row{font-size:13px;line-height:1.5;padding:5px 8px;border-radius:6px;max-width:88%}
.clinic-row.you{background:#eef6ee;align-self:flex-end;color:#222}
.clinic-row.doc{background:#f4f1ea;align-self:flex-start;color:#222}
.clinic-row b{font-weight:800;margin-right:4px}
[data-theme="dark"] .clinic-row.you{background:#1e3a24;color:#dff0e2}
[data-theme="dark"] .clinic-row.doc{background:#3a341f;color:#f0ead9}
.clinic-hero{width:100%;height:auto;border-radius:8px;margin:0 0 10px;display:block}
.clinic-bill{font-size:12px;color:#b8860b;background:rgba(184,134,11,.08);border:1px solid rgba(184,134,11,.35);border-radius:6px;padding:6px 8px;margin-top:6px}
[data-theme="dark"] .clinic-bill{color:#e0b45c;background:rgba(224,180,92,.1);border-color:rgba(224,180,92,.3)}
[data-theme="dark"] .acts-rail .rail-subject.govcar-bar{background:linear-gradient(180deg,#4a3527,#2c1f16);border-color:#8a6d2f}
.govcar-fleet{display:block;width:100%;max-height:150px;object-fit: contain;border-radius:6px;border:1px solid rgba(138,109,47,.5);margin:0 0 8px}
.govcar-cur{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid #8a6d2f;border-radius:8px;background:linear-gradient(180deg,rgba(184,134,11,.10),rgba(90,70,54,.10));margin:4px 0 8px}
.govcar-cur svg{flex:0 0 auto}
.govcar-plate{display:inline-block;margin-top:3px;padding:2px 10px;border:1px solid #7e0f14;border-radius:4px;background:#c8102e;color:#fff;font-family:"Segoe UI","Microsoft YaHei",sans-serif;font-size:14px;letter-spacing:2px;font-weight:800;box-shadow:0 1px 4px rgba(140,20,20,.45)}
.govcar-bar .plate{display:inline-block;margin-left:4px;padding:1px 6px;border:1px solid #7e0f14;border-radius:3px;background:#c8102e;color:#fff;font-size:11.5px;font-weight:800;letter-spacing:1px;vertical-align:1px}
.govsub-list{display:flex;flex-direction:column;gap:4px;max-height:180px;overflow:auto}
.govsub-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border:1px solid rgba(138,109,47,.35);border-radius:5px;background:rgba(250,240,233,.3);font-size:12.5px;flex-wrap:wrap}
.govsub-row b{min-width:96px}
[data-theme="dark"] .govsub-row{background:rgba(90,70,54,.18)}
.govcar-list{display:flex;flex-direction:column;gap:6px;max-height:240px;overflow:auto}
.govcar-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border:1px solid rgba(138,109,47,.4);border-radius:6px;background:rgba(250,240,233,.3)}
[data-theme="dark"] .govcar-row{background:rgba(90,70,54,.18)}
.govcar-row svg{flex:0 0 auto}
.govcar-row .tag{margin-left:auto;flex:none}
[data-theme="dark"] .acts-rail .rail-subject{background:linear-gradient(180deg,#8a3028,#661e16);border-color:#a43a2c;color:#fff}
.desk-side > .desk-subject { margin: 4px 0; padding: 6px 10px; flex-wrap: wrap; row-gap: 4px; }
.desk-side > .desk-subject .chip { padding: 4px 10px; font-size: 12.5px; font-weight: 700; flex: none; }
.desk-side > .desk-subject span { flex: 1 1 auto; white-space: nowrap; font-size: 13px; font-weight: 700; }
.desk-side .desk-idle { margin-top: 4px; }
.desk-side .desk-active,.desk-side .desk-idle,.desk-side .desk-twist{border:3px solid var(--seal);border-radius:8px;padding:8px 10px;margin-top:8px;background:rgba(250,240,233,.35)}
.desk-side .desk-credit{border:3px dashed var(--seal)}
.desk-side .desk-mentor,.desk-side .desk-peer{padding-left:8px}
.desk-side .city-side-foot{border-top:3px solid var(--seal);padding-top:8px;margin-top:8px}


/* 自由行动 · 分类胶囊标签流（折叠态两行小胶囊，点开整块展开） */
.grp-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.grp-tab { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-kai);
  font-size: 14.5px; font-weight: 800; letter-spacing: 1px;
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: 7px 12px; border-radius: 9px; cursor: pointer; transition: all .15s ease; }
.grp-tab:hover { border-color: var(--seal); color: var(--seal); }
.grp-tab.on { background: var(--seal); border-color: var(--seal); color: #fff; }
.grp-tab.locktab { border-style: dashed; border-color: #d8c98f; color: #9a7d2a; background: #fbf6e6; }
.grp-tab.locktab.on { background: #c9a94e; border-color: #c9a94e; color: #fff; }
.gt-ic { font-size: 14px; flex: none; }
.gt-name { flex: none; }
.gt-n { flex: none; min-width: 22px; height: 22px; border-radius: 11px; display: inline-flex;
  align-items: center; justify-content: center; font-size: 12px; font-weight: 800;
  background: rgba(164,52,43,.1); color: var(--seal); border: 1px solid rgba(164,52,43,.3); }
.grp-tab.on .gt-n { background: rgba(255,255,255,.25); color: #fff; border-color: rgba(255,255,255,.5); }
.grp-tab.locktab .gt-n { background: rgba(154,125,42,.12); color: #9a7d2a; border-color: rgba(154,125,42,.35); }
.gt-caret { flex: none; font-size: 12px; color: rgba(0,0,0,.45); letter-spacing: 0; }
.grp-tab.on .gt-caret { color: rgba(255,255,255,.9); }
.grp-body { flex-basis: 100%; margin-top: 10px; }
[data-theme="dark"] .gt-n { background: rgba(255,246,235,.1); color: #e8d49a; border-color: rgba(232,212,154,.4); }
[data-theme="dark"] .gt-caret { color: rgba(255,246,235,.55); }

/* 旧的 grp-tab 网格/竖排残留规则修正：主栏内的 grp-tab 统一胶囊 */
.acts-col .grp-tab { text-align: left; }

/* 重点项目作战图 */
.prow { margin: 7px 0; }
.prow .stat-head { margin-bottom: 3px; }
.prow .tag { font-size: 11px; }
.prow .stat-track i.c-proj { background: linear-gradient(90deg,#9a7b3f,#c9a961); }
.prow .stat-track i.c-ok { background: linear-gradient(90deg,#3f7d55,#6fae83); }

.tag.t-hot { background: #a4342b; color: #fff; }

/* �������������¿����� */
.intro-credit{margin-top:14px;font-size:11px;letter-spacing:2px;opacity:.55;color:inherit;text-align:center}
.stats-head em{font-style:normal;font-size:11px;opacity:.65}

/* �T�T�T ������ӡ �� ���������� �T�T�T */
.author-brand{
  position:fixed; right:10px; bottom:36px; z-index:40;
  display:flex; align-items:center; gap:6px;
  padding:5px 10px 5px 6px;
  background:rgba(250,246,233,.92);
  border:1px solid rgba(154,123,63,.35);
  border-radius:20px;
  box-shadow:0 2px 8px rgba(90,60,20,.08);
  pointer-events:none; user-select:none;
  opacity:.88;
}
.author-brand .ab-seal{
  width:22px;height:22px;line-height:22px;text-align:center;
  border-radius:50%;
  background:#a82828;color:#fff;font-weight:700;font-size:12px;
  box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.25);
}
.author-brand .ab-text{
  font-size:11px;letter-spacing:1px;color:#7a5b45;font-weight:600;
}
[data-theme="dark"] .author-brand{
  background:rgba(32,28,22,.92);
  border-color:rgba(180,140,70,.4);
}
[data-theme="dark"] .author-brand .ab-text{color:#c4a574}

.cover{position:relative}
.cover-brand{
  position:absolute; right:12px; bottom:12px;
  display:flex;flex-direction:column;align-items:flex-end;gap:2px;
  padding:8px 12px;
  background:linear-gradient(160deg,rgba(255,252,245,.92),rgba(245,235,215,.88));
  border:1px solid rgba(154,123,63,.4);
  border-radius:8px;
  box-shadow:0 4px 14px rgba(60,40,10,.15);
}
.cover-brand .cb-seal{
  width:36px;height:36px;line-height:36px;text-align:center;
  border-radius:50%;
  background:#a82828;color:#fff;font-weight:800;font-size:18px;
  box-shadow:inset 0 0 0 2px rgba(255,255,255,.2), 0 2px 6px rgba(120,30,30,.35);
  letter-spacing:0;
}
.cover-brand .cb-name{
  font-size:13px;font-weight:700;color:#5c4030;letter-spacing:2px;
}
.cover-brand .cb-sub{
  font-size:10px;color:#8a7a68;letter-spacing:1px;
}

.byline-brand{
  display:inline-flex;align-items:center;gap:8px;
  padding:6px 14px 6px 6px !important;
  background:rgba(168,40,40,.06);
  border:1px solid rgba(168,40,40,.2);
  border-radius:22px;
  color:#7a2020 !important;
  font-weight:600 !important;
  letter-spacing:1px;
}
.byline-brand .bb-seal{
  width:24px;height:24px;line-height:24px;text-align:center;
  border-radius:50%;
  background:#a82828;color:#fff;font-weight:700;font-size:12px;
}
[data-theme="dark"] .byline-brand{
  background:rgba(168,40,40,.15);
  border-color:rgba(200,80,80,.35);
  color:#e8b0a8 !important;
}

.end-brand{
  display:flex;align-items:center;gap:12px;
  margin:18px auto 8px;
  padding:12px 18px;
  max-width:360px;
  background:linear-gradient(180deg,rgba(250,246,233,.95),rgba(242,232,210,.9));
  border:1px solid rgba(154,123,63,.45);
  border-radius:10px;
  box-shadow:0 4px 16px rgba(80,50,15,.1);
}
.end-brand .eb-seal{
  flex-shrink:0;
  width:44px;height:44px;line-height:44px;text-align:center;
  border-radius:50%;
  background:#a82828;color:#fff;font-weight:800;font-size:20px;
  box-shadow:inset 0 0 0 2.5px rgba(255,255,255,.22), 0 3px 8px rgba(120,25,25,.3);
}
.end-brand .eb-t b{
  display:block;font-size:14px;letter-spacing:2px;color:#5c4030;
}
[data-theme="dark"] .end-brand{
  background:rgba(30,26,20,.92);
  border-color:rgba(180,140,70,.4);
}
[data-theme="dark"] .end-brand .eb-t b{color:#d4b896}

.foot-author{
  color:#8a3a2a;letter-spacing:1px;
}
[data-theme="dark"] .foot-author{color:#d4a098}

.intro-credit{
  margin-top:14px;font-size:11px;letter-spacing:3px;opacity:.7;
  color:inherit;text-align:center;font-weight:600;
}

/* ����Ϸʹ���뱣��Լ�������������ֺţ�����Э��ҳ�ֹ��� */
.pledge-box{
  margin: 10px 0 6px;
  padding: 12px 14px;
  background: rgba(250,246,233,.65);
  border: 1.5px solid rgba(164,52,43,.45);
  border-radius: 10px;
  font-size: 13.5px;
  line-height: 1.75;
  font-weight: 700;
  color: #a4342b;
}
.pledge-title{
  font-size: 15px;
  font-weight: 800;
  letter-spacing: 2px;
  text-align: center;
  margin-bottom: 8px;
  color: #a4342b;
}
.pledge-scroll{
  max-height: 220px;
  overflow-y: auto;
  padding-right: 6px;
  font-size: 13px;
  line-height: 1.7;
}
.pledge-scroll p{
  margin: 0 0 8px;
  font-size: 13px;
  line-height: 1.7;
  font-weight: 700;
  color: #a4342b;
}
.pledge-scroll p b{
  font-size: 13px;
  font-weight: 800;
  color: #8b1f18;
  margin-right: 2px;
}
.pledge-scroll .pledge-sign{
  margin-top: 10px;
  font-size: 12.5px;
  font-weight: 700;
  color: #a4342b;
}
.pledge-check{
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-top: 10px;
  font-size: 13px;
  line-height: 1.55;
  cursor: pointer;
  font-weight: 700;
  color: #a4342b;
}
.pledge-check input{
  margin-top: 3px;
  flex-shrink: 0;
  accent-color: #a4342b;
}
[data-theme="dark"] .pledge-box{
  background: rgba(32,28,22,.7);
  border-color: rgba(200,80,60,.5);
  color: #e07060;
}
[data-theme="dark"] .pledge-title{ color: #e07060; }
[data-theme="dark"] .pledge-scroll p{ color: #e07060; }
[data-theme="dark"] .pledge-scroll p b{ color: #f09080; }
[data-theme="dark"] .pledge-scroll .pledge-sign{ color: #e07060; }
[data-theme="dark"] .pledge-check{ color: #e07060; }


/* ============ 写实证件照（SVG 现画 / 可上传） ============ */
.ip-svg { display: block; width: 100%; height: 100%; }
.ip-photo {
  position: relative; display: inline-block; overflow: hidden; flex: none; line-height: 0;
  border-radius: 6px; border: 1px solid rgba(120, 100, 60, .38); background: var(--paper, #fffdf6);
}
.ip-photo img, .ip-photo svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.ip-photo.big { width: 82px; height: 115px; }
.ip-photo.rc-id-av { width: 78px; height: 98px; border: 2px solid #b01e23; box-shadow: inset 0 0 0 1px rgba(255,255,255,.5); }
.ip-thumb { width: 40px; height: 56px; display: block; overflow: hidden; border-radius: 4px; line-height: 0; }
.ip-thumb .ip-svg { width: 100%; height: 100%; }
.ip-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 4px; }

.ip-preview { display: flex; gap: 12px; align-items: flex-start; margin: 8px 0 10px; }
.ip-pv-meta { flex: 1; min-width: 0; }
.ip-pv-meta b { font-size: 16px; }
.ip-pick { display: flex; gap: 12px; align-items: flex-start; }
.ip-pick-pv { flex: none; }
.ip-pick-pv .ip-photo.big { border: 2px solid #b01e23; box-shadow: inset 0 0 0 1px rgba(255,255,255,.5); }
.ip-pick-main { flex: 1; min-width: 0; }
.idphoto-grid.tight { gap: 6px; margin-top: 0; }
.idphoto-grid.tight .idphoto-item { width: 62px; padding: 4px 3px; }
.archive-head { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 8px; }
.archive-photobox { flex: none; width: 92px; display: flex; flex-direction: column; gap: 5px; align-items: center; }
.archive-photobox .ip-photo, .archive-photobox img.archive-photo { width: 82px; height: 115px; border: 1px solid rgba(150, 58, 43, .40); }
img.archive-photo { object-fit: cover; object-position: top center; border-radius: 4px; display: block; }
/* ★ 2026-10-23 统一边框语言。
   原来证件照是「2px 亮红 #b01e23 + 6px 圆角」，而同一弹窗里的横幅插图是
   「1px 淡褐 rgba(80,60,25,.35)」—— 两个素材边框两套语言，放在一起像拼的。
   现在都用「1px 细线 + 4px 圆角」：证件照用朱砂系（rgba(150,58,43,.40)）略重于插图的淡褐，
   既统一又不失"证件照更正式一点"的差别。 */
.archive-photobox .ip-photo { border-radius: 4px; }

/* ������ά������/����/����ȣ� */
.fam-vitals{display:flex;gap:10px;margin-top:2px;font-size:11px}
.fam-vitals .fv.bad, .bad{color:#a82828;font-weight:600}
.fam-vitals .fv.ok{color:#3d7a4a}
.fam-vitals-lg b{font-size:13px}


.free-sec { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line, rgba(120,120,120,.35)); }
.free-sec .sc-sh { display: block; margin-bottom: 6px; }
.free-sec .free-ta { width: 100%; }
.free-sec .acts { margin-top: 6px; }

/* 驻村面板：置灰原因标注（避免玩家误以为按钮坏了） */
.opt[disabled] { opacity: .55; cursor: not-allowed; }
.opt .why, .crisis-step .why, .chip .why { color: var(--warn, #b06a1b); font-style: normal; font-size: .92em; }
.fund-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 4px; }
.chip.tiny[disabled], .chip[disabled] { opacity: .5; cursor: not-allowed; }

/* 一把手治理工作区（主区） */
.chief-gov .panel { margin-bottom: 14px; }

/* 主持分工 + 重点项目作战图（右侧栏）：grid 等高对称，说明文字推底 */
.side-pair { display: flex; flex-direction: column; gap: 12px; }
.side-pair .panel { margin-bottom: 0; display: flex; flex-direction: column; }
.side-pair .panel .mt { margin-top: auto; padding-top: 8px; }

/* 官身气象折叠 + 立绘头像浮层查看 */
.profile-box.collapsed .profile-stats { display: none; }
.gs-fold-t { cursor: pointer; user-select: none; }
.gs-caret { margin-left: 6px; font-size: 12px; color: var(--seal); transition: transform .15s ease; }
.profile-box.collapsed .gs-caret { transform: rotate(-90deg); }
.hero-card { position: relative; }
.hero-frame { cursor: pointer; }
.hero-gs-pop {
  position: absolute; right: calc(100% + 8px); top: -10px; width: 232px; z-index: 150;
  background: var(--card); border: 2px solid var(--seal); border-radius: 10px;
  box-shadow: 0 8px 26px rgba(80, 35, 15, .26); padding: 12px 13px; display: none;
}
.hero-gs-t { font-size: 14.5px; font-weight: 800; letter-spacing: 1px; color: var(--ink); margin-bottom: 8px; display:flex; align-items:baseline; gap:6px; }
.hero-gs-t em { font-style: normal; font-size: 12px; color: var(--seal); font-weight: 700; }
.hero-card:hover .hero-gs-pop, .hero-card.gs-open .hero-gs-pop,
.hsr-portrait:hover .hero-gs-pop, .hsr-portrait.gs-open .hero-gs-pop,
.ap-plate-hero:hover .hero-gs-pop, .ap-plate-hero.gs-open .hero-gs-pop { display: block; }
.hsr-idtop, .ap-hero, .ap-plate-hero, .ap-plate.ap-plate-hero { overflow: visible; }
.ap-plate-hero { position: relative; cursor: pointer; }
.hsr-portrait .hero-gs-pop { top: 0; left: calc(100% + 8px); right: auto; }
.ap-plate-hero .hero-gs-pop { top: 0; }
.hero-gs-pop .profile-stats { display: block !important; }
.hero-gs-pop .stat-card { margin-bottom: 9px; }

/* 事件 / 剧情 / 话术卡片限宽居中，宽屏下不过大 */
.main .panel.event, .main .panel.ai-event, .main .panel.dialogue {
  max-width: 860px;
  margin-left: auto;
  margin-right: auto;
}

/* 城市治理（主区一把手）字体加大 + 按钮醒目 */
.chief-gov .city-side { font-size: 15px; }
.chief-gov .city-side h3 { font-size: 19px; }
.chief-gov .city-subunits { gap: 6px; margin: 6px 0 10px; }
.chief-gov .city-subunits .csu-t { font-size: 14px; }
.chief-gov .city-subunits .csu { font-size: 14.5px; padding: 5px 12px; }
.chief-gov .city-fin-mini { font-size: 15px; padding: 7px 10px; margin: 4px 0 6px; }
.chief-gov .police-mini { font-size: 15px; margin: 5px 0 7px; }
.chief-gov .city-side-trait, .chief-gov .city-side-camp { font-size: 14.5px; padding: 6px 9px; }
.chief-gov .city-side-proj { font-size: 14px; padding: 6px 9px; }
.chief-gov .stat-head.small { font-size: 15px; margin-bottom: 4px; }
.chief-gov .stat-track.mini { height: 10px; }
.chief-gov .city-data-mini { font-size: 14.5px; padding: 7px 10px; }
.chief-gov .goal-mini { font-size: 15px; padding: 7px 10px; }
.chief-gov .city-side-foot { font-size: 15px; margin-top: 10px; gap: 8px; }
.chief-gov .city-btn {
  font-size: 15.5px; font-weight: 700; padding: 10px 22px;
  border-radius: 8px; letter-spacing: 1px;
}
.chief-gov .city-btn.primary {
  background: linear-gradient(135deg, #a4342b, #c25a4a);
  color: #fff; border-color: #8c2b23;
  box-shadow: 0 2px 8px rgba(164, 52, 43, .25);
}
.chief-gov .city-btn.primary:hover {
  background: linear-gradient(135deg, #8c2b23, #b04a3c);
  transform: translateY(-1px);
}
.chief-gov .city-btn:not(.primary) {
  background: #fdf6ec; border: 1.5px solid var(--seal2); color: var(--seal);
}
.chief-gov .city-btn:not(.primary):hover { background: rgba(164, 52, 43, .08); }

/* 城市治理：下辖县市插图卡片拼图 + 面板缩小 */
.chief-gov .city-side { max-width: 1080px; margin: 0 auto; }
.chief-gov .city-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 7px; margin: 6px 0 10px; }
.chief-gov .city-card { border: 1px solid #e3d5c3; border-radius: 8px; overflow: hidden; background: #fffdf8; }
.chief-gov .city-card[data-act="unitdetail"] { transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease; }
.chief-gov .city-card[data-act="unitdetail"]:hover { transform: translateY(-2px); border-color: #a4342b; box-shadow: 0 3px 12px rgba(164,52,43,.18); }
.chief-gov .city-card[data-act="unitdetail"]:focus-visible { outline: 2px solid #a4342b; outline-offset: 2px; }
.chief-gov .city-card.has { border-color: #c96f5a; box-shadow: 0 0 0 1px rgba(201, 111, 90, .35); }
.chief-gov .city-card img { width: 100%; height: 84px; object-fit: cover; display: block; }
.chief-gov .city-card .cc-body { padding: 5px 9px 7px; }
.chief-gov .city-card .cc-body b { display: block; font-size: 14px; color: var(--ink); }
.chief-gov .city-card .cc-stat { display: block; font-size: 12px; color: var(--ink2); margin-top: 2px; }
.chief-gov .city-card .cc-ic { display: flex; height: 84px; align-items: center; justify-content: center; font-size: 32px; background: #f6efe4; }
.chief-gov .city-card .cc-img { width: 100%; height: 84px; object-fit: cover; display: block; background: #f6efe4; }

/* ★ 正国级：中央工作面板整体折叠（中北海缩略图 + 标题条） */
.natwork { margin-top: 12px; border: 1px solid rgba(154,123,63,.35); border-radius: 10px; overflow: hidden; background: rgba(255,253,248,.6); }
.natwork-head { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 12px; background: linear-gradient(135deg,#f3e6d0,#ead9bd); border: none; cursor: pointer; font-size: 14px; color: var(--ink); }
.natwork-head:hover { background: linear-gradient(135deg,#ecdcbe,#e3cfa8); }
.natwork-thumb { width: 46px; height: 34px; object-fit: cover; border-radius: 6px; border: 1px solid rgba(128,100,60,.3); }
.natwork-head b { font-size: 14.5px; }
.natwork-head .muted { margin-left: 2px; }
.natwork-caret { margin-left: auto; font-size: 13px; color: #8a6d3b; }
.chief-gov .city-card.more { display: flex; flex-direction: column; align-items: center; justify-content: center; background: #faf5ec; }
.chief-gov .city-card.more .cc-ic { height: auto; background: none; font-size: 26px; }
[data-theme="dark"] .chief-gov .city-card { background: #2a241c; border-color: #3d3428; }
[data-theme="dark"] .chief-gov .city-card .cc-ic, [data-theme="dark"] .chief-gov .city-card.more { background: #241f18; }

/* 城市治理：左右两栏（左内容 + 右市区大图） */
.chief-gov .city-side-grid { display: grid; grid-template-columns: 1fr 330px; gap: 14px; align-items: stretch; }
.chief-gov .city-side-col { min-width: 0; display: flex; flex-direction: column; }
.chief-gov .city-hero { position: relative; border-radius: 10px; overflow: hidden; border: 1px solid #e3d5c3; background: #f6efe4; min-height: 320px; }
.chief-gov .city-hero img { width: 100%; height: 100%; min-height: 320px; object-fit: cover; display: block; }
.chief-gov .city-hero .ch-tag { position: absolute; left: 10px; bottom: 10px; background: rgba(60, 35, 20, .72); color: #f7ecd9; font-size: 13px; font-weight: 700; padding: 4px 12px; border-radius: 6px; letter-spacing: 1px; }
.chief-gov .city-attr-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3px 16px; margin: 6px 0; }
.chief-gov .city-row2 { display: flex; flex-wrap: wrap; gap: 4px 18px; }
.chief-gov .city-row2 .police-mini { margin: 4px 0; }
@media (max-width: 900px) {
  .chief-gov .city-side-grid { grid-template-columns: 1fr; }
  .chief-gov .city-hero { display: none; }
  .chief-gov .city-attr-grid { grid-template-columns: 1fr; }
}
[data-theme="dark"] .chief-gov .city-hero { border-color: #3d3428; background: #241f18; }

/* 城市治理靠左 + 右侧组织架构/重点项目作战图 + 市区图拉大 */
.chief-wrap { display: grid; grid-template-columns: minmax(0, 1.32fr) minmax(0, 1fr); gap: 14px; align-items: stretch; margin-top: 10px; }
/* ★ 2026-10-23 布局精简：右侧无预警时整块隐藏，主区占满。
   原来无论有没有事，右侧都固定占 1fr（约 403px），里面常常只有一句
   "各项指标处于正常区间" —— 主区被压到 533px，四卡放不下。 */
.chief-wrap[data-solo="1"] { grid-template-columns: minmax(0, 1fr); }

/* ★ 2026-10-23 布局精简：国企主面板的横向状态带
   原来「企业名 + 指标 + 折叠」是一整块 279px 的竖排，与主区上下堆叠。
   现在压成一条：企业名 ▏ 4 个核心指标 ▏ 折叠入口，全部一行。 */
/* ============================================================================
   ★ 2026-10-23 状态带重写为「组件」
   ---------------------------------------------------------------------------
   问题：原来的结构靠 flex-wrap 自动换行，信息一多就散成三块 ——
       企业名+指标挤在左，两个折叠飘到右边 585px / 938px 处，高度还从 66 涨到 76。
   根因：把"一排东西"交给自动换行，等于把布局权交给内容长度。

   改法：固定三段式网格，不再依赖 wrap
       ┌──────────────────────────┬─────────────┬────────┐
       │ 企业名 + 岗位 + 标签       │ 4 个核心指标  │ 两个折叠 │
       └──────────────────────────┴─────────────┴────────┘
     · 第一段可压缩（min-width:0 + 省略号）
     · 第二段固定宽度、不换行
     · 第三段贴右、auto
   窄屏（<900）才降为两段式：名称独占一行，指标+折叠第二行。
   ============================================================================ */
.soe-statusbar { margin-bottom: 8px; }
.soe-statusbar .ap-zb {
  padding: 0;
  display: block;
}
/* 组件容器：三段网格 */
.ssb {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0 16px;
  padding: 6px 10px;
  min-height: 40px;
}
/* —— 第一段：身份 —— */
.ssb-id { min-width: 0; display: flex; align-items: baseline; gap: 8px; overflow: hidden; }
.ssb-id b {
  font-size: 13.5px; color: var(--seal); white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto;
}
.ssb-id .ssb-sub {
  font-size: 11.5px; color: #8a7a5f; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto;
}
.ssb-id .ssb-chips { display: inline-flex; gap: 4px; flex: 0 0 auto; }

/* —— 第二段：核心指标（固定不换行）—— */
.ssb-metrics {
  display: flex; align-items: baseline; gap: 14px;
  flex-wrap: nowrap; white-space: nowrap;
  border-left: 1px solid rgba(140,100,40,.22);
  padding-left: 16px;
}
.ssb-m { display: inline-flex; align-items: baseline; gap: 4px; font-size: 12px; }
.ssb-m i { font-style: normal; color: #8a7a5f; font-size: 11px; }
.ssb-m b { font-size: 14px; font-weight: 800; color: #3a2e22; font-variant-numeric: tabular-nums; }
.ssb-m b.ok { color: #2f6b3a; }
.ssb-m b.bad, .ssb-m b.hot { color: #a4342b; }

/* —— 第三段：折叠入口（贴右，横向并排一行）——
   ★ 2026-10-23 修正：原来 flex-direction:column 让两个入口上下堆叠，
   高度约 47px，把状态带从 35 撑到 59；且 .ssb 是 align-items:center，
   堆叠后两个单行文字与它视觉上错开 11px（实测 id top 17 / acts top 6）。
   改横向一行后三段真正同基线，状态带高度回落。 */
.ssb-acts {
  display: flex; flex-direction: row; gap: 6px;
  align-items: center; flex: 0 0 auto;
  padding-left: 14px; padding-right: 4px;
  border-left: 1px solid rgba(140,100,40,.18);
}
.ssb-acts summary {
  /* 字号 10.5 太小、且贴在最右边，读起来像脚注。改成 11.5 + 浅底块，像可点的入口。 */
  font-size: 11.5px; color: #6a5a48; cursor: pointer;
  list-style: none; white-space: nowrap; line-height: 1.6;
  padding: 1px 8px; border-radius: 4px;
  background: rgba(140,100,40,.07);
  border: 1px solid rgba(140,100,40,.14);
  transition: .15s;
}
.ssb-acts summary::-webkit-details-marker { display: none; }
.ssb-acts summary::before { content: '▸ '; color: #b08b5a; }
.ssb-acts details[open] summary::before { content: '▾ '; }
.ssb-acts summary:hover { color: var(--seal); background: rgba(164,52,43,.08); border-color: rgba(164,52,43,.28); }
/* 展开内容：.ssb-pop 的父级是 <details>（grid 的直接子元素是 .ssb-acts，
   不是 details），所以 grid-column 在 .ssb-pop 上无效。
   改为让 details 本身脱离 .ssb-acts 的纵向堆叠、绝对定位到整行下方。 */
.ssb { position: relative; }
.ssb-acts details[open] { position: static; }
.ssb-pop {
  position: absolute;
  left: 0; right: 0;
  top: 100%;
  margin-top: 4px;
  padding: 8px 12px;
  background: #fbf7ef;
  border: 1px solid rgba(140,100,40,.24);
  border-radius: 6px;
  box-shadow: 0 6px 18px rgba(60,45,20,.14);
  z-index: 20;
  /* 展开时是浮层，不把状态带撑高 */
}
.ssb-pop .ap-ledger.compact { max-width: none; grid-template-columns: repeat(4, minmax(0,1fr)); }
/* hot 提示：占整行但不浮层 */
.ssb-hot {
  grid-column: 1 / -1;
  margin-top: 5px; padding-top: 5px;
  border-top: 1px dashed rgba(164,52,43,.3);
}

/* 窄屏降级：两段式 */
@media (max-width:900px){
  .ssb { grid-template-columns: minmax(0,1fr) auto; row-gap: 4px; }
  .ssb-metrics { border-left: 0; padding-left: 0; grid-column: 1 / -1; }
  .ssb-acts { grid-column: 2; grid-row: 1; }
  .ssb-pop { grid-column: 1 / -1; }
}
@media (max-width:560px){
  .ssb { grid-template-columns: 1fr; }
  .ssb-acts { grid-row: auto; align-items: flex-start; }
}

.chief-wrap .chief-gov .city-side { max-width: none; margin: 0; height: 100%; }
.chief-wrap .chief-right { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* ★ 2026-10-19 一把手主区整区折叠（蓝线区域）：
   细栏跨两栏（grid-column: 1 / -1），展开态只在右上角一枚「▾ 收起本区域」；
   折起态 .cw-folded 把两栏全隐藏，只留细栏左侧的说明 + 「▸ 展开本区域」，整区高度≈一行。
   只作用于带 .cw-foldbar 的 chief-wrap（唯一业务入口＝ UI.chiefGov tier 0–9 一把手分支），
   副职 / 国企 / 全国的一把手骨架没这枚按钮，零影响。 */
.chief-wrap .cw-foldbar { grid-column: 1 / -1; display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin: -4px 0 -8px; }
.chief-wrap .cw-foldlab { margin-right: auto; font-size: 13px; font-weight: 700; color: var(--seal, #a4342b); letter-spacing: .5px; }
.chief-wrap .cw-foldbtn { cursor: pointer; }
/* ★ 2026-10-19 折叠态重叠修复：收起时两栏 display:none 后 grid 仍按两列 + 14px gap
   摆布局，foldbar 又带 `margin:-4px 0 -8px` 负边距 —— 细栏会被上提/下收，与上下内容叠。
   修复：折叠态把 grid 收成单列、gap 归零，foldbar 边距归零，只老老实实露出一条栏。 */
.chief-wrap.cw-folded { grid-template-columns: minmax(0, 1fr); gap: 0; }
.chief-wrap.cw-folded .cw-foldbar { margin: 0; }
/* ★ 2026-10-19 折叠按钮加大 + 改红：用户要求「展开/收起本区域」按钮更醒目、红底。
   覆盖 chip tiny 的紧凑尺寸；展开态右上也只有这一枚，明显些更容易按。 */
.chief-wrap .cw-foldbtn {
  background: #8c1f28; color: #fff; border: 1px solid #6d141c;
  font-weight: 700; font-size: 13.5px; letter-spacing: .5px;
  padding: 6px 16px; border-radius: 999px;
  box-shadow: 0 1px 3px rgba(120,30,20,.25), inset 0 0 0 1px rgba(255,244,230,.18);
}
.chief-wrap .cw-foldbtn:hover { background: #a02a34; color: #fff; border-color: #8c1f28; }
.chief-wrap.cw-folded .chief-gov, .chief-wrap.cw-folded .chief-right { display: none; }
[data-theme="dark"] .chief-wrap .cw-foldlab { color: #d96a58; }
/* ★ 2026-09-25 修「两个框过长、底部一大片空白」：
   原来这里是 `flex: 1 1 auto`。而 `.chief-wrap` 是 `align-items: stretch` 的 grid，
   `.chief-right` 会被拉到与**左栏等高**（全国治理盘面很长，主席视角尤甚）；
   右栏又是 flex 列，两个面板 `flex-grow:1` ⇒ 富余高度被**平分**给它们，
   于是每个面板底部都空出一大块（实测两框空白量相近，正是平分的特征）。
   改成按内容高度：面板不再被撑高，右栏底部留白但不进框。
   （`.chief-right` 内没有任何 `margin-top:auto` 的推底元素，所以不依赖这个拉伸高度；
     地方一把手视角用同一套骨架，同样受益。） */
.chief-wrap .chief-right .panel { margin: 0; flex: 0 0 auto; }
.chief-wrap .city-side-grid { grid-template-columns: minmax(0, 1fr) 400px; align-items: stretch; }
.chief-wrap .city-hero { min-height: 320px; align-self: start; }
.chief-wrap .city-hero img { min-height: 320px; }
/* 省属高校系统框：右栏「市区风貌」正下方；高度与风貌图相当，不撑满整栏 */
.chief-wrap .city-side-right { display: flex; flex-direction: column; gap: 10px; min-width: 0; align-self: start; }
.chief-wrap .city-side-grid > .city-side-right { grid-column: 2; }
.chief-wrap .city-side-right .city-hero { margin-top: 0; align-self: start; }
.chief-wrap .city-side-right .city-univ { margin-top: 0; flex: 0 0 auto; width: 100%; aspect-ratio: 1 / 1; }
/* 省属高校系统框：横向（插图左 + 信息右），紧跟政务盘面 */
.chief-wrap .city-univ { display: flex; flex-direction: column; align-items: stretch; border: 2px solid #b03a2e; border-radius: 10px; overflow: hidden; background: #fffdf8; margin-top: 10px; box-shadow: 0 2px 6px rgba(164,52,43,.12); }
.chief-wrap .city-univ .cu-ill { flex: 1 1 auto; min-height: 0; }
.chief-wrap .city-univ .cu-ill img { width: 100%; height: 100%; min-height: 0; object-fit: cover; display: block; }
.chief-wrap .city-univ .cu-body { flex: 0 0 auto; min-width: 0; padding: 12px 14px 14px; display: flex; flex-direction: column; justify-content: center; }
.chief-wrap .city-univ .cu-t { font-size: 15px; font-weight: 800; color: #a4342b; letter-spacing: .5px; }
.chief-wrap .city-univ .cu-stat { font-size: 13px; color: #57483a; margin: 4px 0 7px; line-height: 1.5; }
.chief-wrap .city-univ .city-btn { font-size: 14px; padding: 6px 14px; align-self: flex-start; }
[data-theme="dark"] .chief-wrap .city-univ { border-color: #7a3d33; background: #2a241c; box-shadow: none; }
[data-theme="dark"] .chief-wrap .city-univ .cu-t { color: #d96a58; }
[data-theme="dark"] .chief-wrap .city-univ .cu-stat { color: #b8a98f; }
@media (max-width: 1240px) {
  .chief-wrap { grid-template-columns: 1fr; }
  .chief-wrap .city-side-grid { grid-template-columns: minmax(0, 1fr) 420px; }
  .chief-wrap .city-hero { min-height: 340px; }
  .chief-wrap .city-hero img { min-height: 340px; }
}

/* 城市治理整体压缩（主区） */
.chief-wrap .city-side h3 { font-size: 17px; margin-bottom: 6px; }
.chief-wrap .city-subunits { margin: 3px 0 8px; gap: 5px; }
.chief-wrap .city-card img { height: 68px; }
.chief-wrap .city-card .cc-ic { height: 68px; font-size: 26px; }
.chief-wrap .city-card .cc-body { padding: 4px 8px 5px; }
.chief-wrap .city-card .cc-body b { font-size: 13px; }
.chief-wrap .city-card .cc-stat { font-size: 11px; margin-top: 1px; }
.chief-wrap .city-fin-mini { font-size: 13.5px; padding: 5px 8px; margin: 3px 0 5px; }
.chief-wrap .police-mini { font-size: 13.5px; margin: 3px 0 5px; }
.chief-wrap .city-side-trait, .chief-wrap .city-side-camp { font-size: 13px; padding: 4px 8px; margin-top: 3px; }
.chief-wrap .city-side-proj { font-size: 13px; padding: 4px 8px; }
.chief-wrap .city-attr-grid { grid-template-columns: repeat(3, 1fr); gap: 2px 12px; margin: 4px 0; }
.chief-wrap .city-attr-grid .stat-head.small { font-size: 13.5px; margin-bottom: 1px; }
.chief-wrap .city-attr-grid .stat-track.mini { height: 7px; }
.chief-wrap .city-data-mini { font-size: 13px; padding: 5px 8px; margin: 5px 0 3px; }
.chief-wrap .goal-mini { font-size: 13.5px; padding: 5px 8px; margin: 4px 0; }
.chief-wrap .city-side-foot { font-size: 13.5px; margin-top: 6px; gap: 8px; }
.chief-wrap .city-btn { padding: 8px 16px; font-size: 14px; }
.chief-wrap .city-hero .ch-tag { font-size: 12px; padding: 3px 10px; }
.chief-wrap .chief-right { gap: 10px; }
.chief-wrap .org-side, .chief-wrap .proj { padding: 10px 12px; }

/* ---------- 正国级（tier 10）独立面板 · 全国治理 ------------------------------
   只作用于 .nation-wrap（UI.nationalGov 的根类）。tier 0–9 的面板不含此类，
   因此以下规则对下方所有职级零影响。全部复用既有组件变量，不新增设计语言。 */
.nation-wrap .nation-board .cz-t { font-size: 13.5px; }
.nation-wrap .nation-board h3 { font-size: 17px; }
/* 省域统揽：五省一京共 6 单元，2 列排布（比地方 6 区更宽，卡片容得下省名+主官） */
.nation-wrap .nation-prov-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.nation-wrap .nation-prov-grid .city-card .cc-ic { height: 44px; font-size: 22px; }
.nation-wrap .nation-prov-grid .city-card .cc-body { padding: 5px 9px 6px; }
.nation-wrap .nation-prov-grid .city-card .cc-body b { font-size: 13.5px; }
.nation-wrap .nation-prov-grid .city-card .cc-stat { font-size: 11.5px; }
/* 中央机构：窄栏里 short 名要压得住 */
.nation-wrap .nation-org .org-rname { min-width: 0; }
.nation-wrap .nation-org .org-rtitle { font-size: 12.5px; }
.nation-wrap .nation-proj .disclist li { margin-bottom: 7px; }

@media (max-width: 900px) {
  .nation-wrap .nation-prov-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .nation-wrap .city-attr-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 620px) {
  .nation-wrap .nation-prov-grid { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  .chief-wrap .city-attr-grid { grid-template-columns: 1fr; }
  .chief-wrap .city-side-grid { grid-template-columns: minmax(0, 1fr) 320px; }
  .chief-wrap .city-hero { min-height: 300px; }  .chief-wrap .city-hero img { min-height: 300px; }
}
@media (max-width: 620px) {
  .chief-wrap .city-side-grid { grid-template-columns: minmax(0, 1fr) 240px; }
  .chief-wrap .city-hero { min-height: 220px; }
  .chief-wrap .city-hero img { min-height: 220px; }
}

/* 重点项目作战图：插图 + 按钮红色加大 */
/* ★ 2026-10-20 兜底（昊：「镇域图进入建筑物里面很多插图都没铺满」第二轮）：
   家底簿 / 作战图这两张图在**弹窗里是独立渲染的**（面板从镇财政所点进去，
   没有 .chief-right 祖先），于是下面那条带祖先的尺寸规则压根不匹配 ——
   img 按 1320×391 的原始像素铺出去，比 626 宽的卡片还宽一倍（实测 fillW=2.109），
   右下角连同「台账 · N 项在册」角标一起被卡片裁掉。
   补一条不带祖先的兜底：宽跟容器、高按比例、cover 兜住被压扁的情况。
   ⚠ 带 .chief-right / .proj-ledger 的那两条更具体，仍按原样走固定高，一行没动。 */
.proj-ill { display: block; width: 100%; max-width: 100%; height: auto; object-fit: cover; object-position: center; border-radius: 8px; margin: 6px 0 8px; border: 1px solid #e3d5c3; }
.chief-right .proj .proj-ill { width: 100%; height: 168px; object-fit: cover; object-position: center; border-radius: 8px; margin: 6px 0 8px; display: block; border: 1px solid #e3d5c3; }
[data-theme="dark"] .chief-right .proj .proj-ill { border-color: #3d3428; }
.chief-right .org-side .chip, .chief-right .proj .chip {
  font-size: 15px; font-weight: 700; padding: 9px 20px;
  background: linear-gradient(135deg, #a4342b, #c25a4a); color: #fff; border-color: #8c2b23;
  border-radius: 8px; letter-spacing: .5px; box-shadow: 0 2px 6px rgba(164, 52, 43, .2);
}
.chief-right .org-side .chip:hover, .chief-right .proj .chip:hover {
  background: linear-gradient(135deg, #8c2b23, #b04a3c); transform: translateY(-1px); color: #fff;
}
.chief-right .org-side .chip:disabled, .chief-right .proj .chip:disabled { opacity: .5; cursor: not-allowed; }

/* 组织架构：统计文字化 + 按钮缩小贴底 + 三框红线描边 */
.chief-right .org-side { display: flex; flex-direction: column; }
.chief-right .org-side-m { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 4px 0 6px; }
.chief-right .org-stat { font-size: 14px; color: var(--ink2); font-weight: 600; }
.chief-right .org-stat.ok { color: var(--ok, #3f7d55); }
.chief-right .org-stat.bad { color: var(--danger); }
.chief-right .org-side .acts { margin-top: auto; padding-top: 8px; justify-content: flex-end; }
.chief-right .org-side .acts .chip {
  font-size: 13px; padding: 5px 14px; background: var(--paper); color: var(--seal);
  border: 1px solid var(--line); box-shadow: none; font-weight: 600; border-radius: 6px;
}
.chief-right .org-side .acts .chip:hover {
  border-color: var(--seal); color: var(--seal); background: rgba(164, 52, 43, .06); transform: none;
}
.chief-wrap .city-side, .chief-wrap .org-side, .chief-wrap .proj { border: 1px solid #b03a2e; }

/* 组织架构：技能树插图 */
.chief-right .org-side .org-tree { width: 100%; height: 148px; object-fit: cover; object-position: center; border-radius: 8px; margin: 4px 0 8px; display: block; border: 1px solid #e3d5c3; }
[data-theme="dark"] .chief-right .org-side .org-tree { border-color: #3d3428; }
/* 官身气象：默认展开，与立绘头像框同长（高度对齐） */
.profile-box.collapsed .stats.profile-box, .stats.profile-box .profile-stats, .stats.profile-box .profile-stats * { line-height: 1.35; }
.profile-stats { display: flex; flex-direction: column; justify-content: space-between; gap: 4px; }
.profile-box { min-height: 252px; display: flex; flex-direction: column; }
.profile-box .stats-head { cursor: default; }
.profile-box .gs-caret { display: none; }

/* 官身气象压缩：与立绘头像框同长 */
.profile-box { min-height: 0; }
.profile-stats { gap: 3px; }
.profile-stats .stat-card { padding: 2px 6px 2px 5px; }
.profile-stats .sc-ic { width: 22px; height: 22px; font-size: 12px; }
.profile-stats .sc-num { font-size: 14px; }
.profile-stats .stat-track { height: 4px; }
.profile-stats .sc-name { font-size: 11px; }
.profile-stats .net3 { gap: 8px; }
.profile-stats .net-rows { gap: 2px; }
.profile-stats .net-row .stat-track { height: 4px; }
.profile-box .stats-head { padding-bottom: 4px; margin-bottom: 2px; font-size: 13.5px; }

/* 官身气象与立绘头像框双向对齐 */
.profile-stats { gap: 2px; }
.profile-stats .stat-card { padding: 1px 6px 1px 5px; }
.profile-box .stats-head { padding-bottom: 2px; margin-bottom: 1px; }
.portrait.hero { height: 220px; }

/* 立绘头像框拉高 + 官身气象再压 → 高度对齐 */
.layout > aside .hero-card .portrait.hero { width:100%; height: auto; max-height: none; }
.profile-stats .stat-card { padding: 0 6px 0 5px; }
.profile-stats .sc-ic { width: 20px; height: 20px; font-size: 11px; }
.profile-stats .sc-num { font-size: 13px; }

/* 官身气象最终压缩：与立绘头像框同长 */
.profile-stats .stat-card { padding: 0 5px; gap: 5px; }
.profile-stats .sc-ic { width: 18px; height: 18px; font-size: 10px; }
.profile-stats .sc-num { font-size: 12.5px; }
.profile-stats .sc-name { font-size: 10px; }
.profile-stats .stat-track { height: 3px; }
.profile-stats .net-rows { gap: 1px; }
.profile-stats .net-row .nt-l { font-size: 10px; }
.profile-stats .net-row .nt-v { font-size: 11.5px; }
.profile-box .stats-head { padding-bottom: 0; margin-bottom: 0; font-size: 13px; }

/* ��ʼְλ������㿨Ƭ */
.start-post-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;width:100%}
.start-post{min-height:64px;padding:10px 12px;text-align:left;border:none;background:url(../assets/scenes/select_frame_preview.jpg?v=20261027PERF1) center/100% 100% no-repeat,#faf7f0;border-radius:8px;cursor:pointer;display:flex;flex-direction:column;gap:4px;box-shadow:0 1px 3px rgba(30,22,8,.1)}
.start-post .act-nm{font-size:13.5px;font-weight:800;color:#1a150e}
.start-post .lock-tag{font-size:11px;background:transparent;border:none;padding:0;color:#8a7a68;text-align:left}
.start-post.tip{border-color:#a82828;box-shadow:inset 0 0 0 1px #a82828;background:rgba(168,40,40,.06)}
/* ★ 起始职位 · 完整版专属（省委书记 / 国家主席） */
.start-post .vip-ic{font-size:15px;line-height:1;margin-right:1px}
.start-post .vip-tag{display:inline-block;margin-top:3px;font-size:10.5px;font-weight:800;letter-spacing:.5px;padding:1px 8px;border-radius:20px;line-height:1.5;width:fit-content}
.start-post.vip{border:1.5px solid #c9a45c;background:linear-gradient(135deg,#fffdf6,#fbf3dd);box-shadow:0 1px 7px rgba(201,164,92,.30)}
.start-post.vip .act-nm{color:#7a5b1e}
.start-post.vip .vip-tag{color:#6d4f0a;background:#f7ecc6;border:1px solid #d9b95c}
.start-post.locked{border:1.5px dashed rgba(120,110,95,.45);background:#f2efe9;cursor:not-allowed;opacity:.74}
.start-post.locked .act-nm{color:#9b9185}
.start-post.locked .vip-tag{color:#8a7a68;background:#eee9df;border:1px solid #ddd4c4}
[data-theme="dark"] .start-post.vip{background:linear-gradient(135deg,#3a2f1c,#4a3c20);border-color:#c9a45c}
[data-theme="dark"] .start-post.vip .act-nm{color:#e6c98a}
[data-theme="dark"] .start-post.locked{background:#26221c;border-color:rgba(255,255,255,.22)}
.start-post-all{width:100%}
.start-post-all summary{cursor:pointer;font-size:12.5px;color:#7a5b45}
[data-theme="dark"] .start-post{background:#2a241c;border-color:rgba(255,255,255,.25)}
[data-theme="dark"] .start-post .act-nm{color:#d4b896}

/* 顶部信息条：水墨小图标 */
.tl-ic { width: 18px; height: 18px; border-radius: 50%; vertical-align: -4px; margin-right: 3px;
  border: 1px solid rgba(140,100,40,.35); box-shadow: 0 1px 3px rgba(90,60,20,.18); background: #fbf5e6; }
[data-theme='dark'] .tl-ic { border-color: #4a3d2a; background: #2a2419; }

/* 本年记事：全部记录按钮 + 滚动容器 */
.log-all { margin-left: 6px; vertical-align: 1px; display:inline-flex; align-items:center; gap:5px; background:var(--seal); border:1px solid rgba(212,175,55,.6); color:#fff; padding:3px 12px 3px 8px; border-radius:6px; font-weight:800; letter-spacing:.5px; }
.log-all:hover { filter:brightness(1.12); }
.log-all-ic { width:18px; height:18px; border-radius:4px; object-fit:cover; flex:0 0 auto; }
.ss-desk{margin:0 0 12px;padding:12px 14px}
.ss-desk-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.ss-desk-ic{width:34px;height:34px;border-radius:8px;object-fit:cover;flex:none}
.ss-desk-body{display:flex;align-items:center;gap:10px;background:#fffaf2;border:1px solid #e9dcbf;border-radius:8px;padding:8px 10px}
.promoall-list{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.promoall-row{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:#fff8ef;border:1px solid #e4d5b8;border-radius:8px;cursor:pointer;text-align:left;font:inherit;color:inherit}
.promoall-row:hover{border-color:#b03030;background:#fdf1e9}
.promoall-row .chip-ic{width:26px;height:26px;border-radius:6px;flex:none}
.chip-ic { width:18px; height:18px; border-radius:4px; object-fit:cover; flex:0 0 auto; vertical-align:-3px; margin-right:4px; }
.log-scroll { max-height: 58vh; overflow-y: auto; padding-right: 4px; }
.log-scroll .log { margin: 4px 0 0; }

/* heavy rail：左侧栏按钮厚重化（深棕底 · 朱红点 · 立体） */
.actbtn .act-ic { padding: 0; overflow: hidden; }
.actbtn .act-ic img { width: 100%; height: 100%; object-fit: cover; border-radius: 10px; display: block; }
.tool-ic { width: 18px; height: 18px; border-radius: 50%; object-fit: cover; display: inline-block; vertical-align: -3px; }
.actbtn.act-office-standalone {
  border: 2px solid #8a5a28;
  background: linear-gradient(180deg, #5a3318, #3a1f0c);
  color: #e8603c;
  box-shadow: 0 3px 12px rgba(40, 20, 5, .35);
}
.actbtn.act-office-standalone:hover:not([disabled]) {
  background: linear-gradient(180deg, #6b3d1e, #46250f);
  border-color: #a06a2e; color: #ff7a52;
}
.actbtn.act-office-standalone .act-sub { color: #d9b88a; }
.actbtn.act-office-standalone .act-ic { border-color: rgba(232, 96, 60, .35); background: rgba(232, 96, 60, .12); }
.actbtn.act-tool {
  border: 1px solid #7a5226;
  background: linear-gradient(180deg, #543318, #3a2110);
  color: #f2e2c2;
  box-shadow: 0 2px 8px rgba(40, 20, 5, .25);
}
.actbtn.act-tool:hover:not([disabled]) {
  border-color: #b0813c; color: #ffe9c8; transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(40, 20, 5, .35);
}
.actbtn.act-tool .act-nm { color: #ffe3b0; display: flex; align-items: center; gap: 5px; }
.actbtn.act-tool .act-sub { color: #c9a87c; }
.acts-rail .grp-tab {
  border: 1px solid #6b4a26;
  background: linear-gradient(180deg, #4a2f18, #2f1d0d);
  color: #f0e0c0;
  box-shadow: 0 2px 6px rgba(30, 15, 5, .3);
}
.acts-rail .grp-tab:hover { border-color: #a06a2e; color: #ffe9c8; transform: translateY(-1px); }
.acts-rail .grp-tab.on {
  background: linear-gradient(180deg, #a43a2c, #7c2a1e);
  border-color: #c74a36; color: #fff;
}
.acts-rail .grp-tab .gt-n { color: #d9b88a; }
.acts-rail .grp-tab.locktab {
  background: linear-gradient(180deg, #40332a, #2a2118);
  border-color: #5a4a3a; color: #cfc0a8;
}
.acts-rail .grp-tab.locktab.on { background: linear-gradient(180deg, #8a6a30, #63491e); border-color: #a6843e; color: #fff; }
[data-theme="dark"] .actbtn.act-tool {
  background: linear-gradient(180deg, #543318, #3a2110);
  border-color: #7a5226;
}

/* heavy rail v2：分组按钮红 · 工具按钮棕 */
.acts-rail .grp-tab {
  border: 1px solid #a43a2c;
  background: linear-gradient(180deg, #a43a2c, #7c2a1e);
  color: #fff;
  box-shadow: 0 2px 6px rgba(120, 30, 20, .35);
}
.acts-rail .grp-tab:hover { border-color: #d05a40; color: #fff; background: linear-gradient(180deg, #b8452f, #8a2f20); transform: translateY(-1px); }
.acts-rail .grp-tab.on { background: linear-gradient(180deg, #d05a30, #a03820); border-color: #e07040; color: #fff; }
.acts-rail .grp-tab .gt-n { color: #ffd9c0; }
.acts-rail .grp-tab.locktab {
  border-color: #7a3428;
  background: linear-gradient(180deg, #8a3a2c, #66241a);
  color: #e8c8b8;
}
.acts-rail .grp-tab.locktab.on { background: linear-gradient(180deg, #a04628, #7a2c18); border-color: #c05838; color: #fff; }
.actbtn.act-tool {
  border: 1px solid #9a6a2c;
  background: linear-gradient(180deg, #7a4a1e, #54300f);
}
[data-theme="dark"] .actbtn.act-tool { background: linear-gradient(180deg, #7a4a1e, #54300f); }

/* 分组按钮水墨图标 + 今年要紧浅红 */
.gt-ic-img { width: 20px; height: 20px; border-radius: 50%; object-fit: cover; display: inline-block; vertical-align: -4px; }
.tip-panel { background: linear-gradient(180deg, #fdf0ee, #f9e0dc); border: 1px solid #e5a8a0; }
.tip-panel h3 { color: #a43222; letter-spacing: 2px; }

/* modal red frame：所有弹窗朱红描边 */
.modal-box { border: 2px solid #b03a2c; box-shadow: 0 6px 30px rgba(120, 30, 20, .28); }

/* 今年要紧：重配色（米白底 · 朱红框 · 内部白卡红字） */
.tip-panel { background: #fdf6f1; border: 2px solid #b03a2c; box-shadow: 0 2px 10px rgba(120, 30, 20, .12); }
.tip-panel h3 { color: #a43222; }
.tip-panel .actbtn { background: #fff; border: 1px solid #d98a78; box-shadow: 0 1px 4px rgba(120, 30, 20, .08); }
.tip-panel .actbtn .act-nm { color: #a43222; }
.tip-panel .actbtn .tip-why { color: #b85c48; }
.tip-panel .actbtn .act-ap { background: rgba(212, 175, 55, .14); border-color: rgba(212, 175, 55, .45); color: #8a6d1a; }

/* 分组按钮：白字 + 金色点缀 */
.acts-rail .grp-tab { border: 1px solid #b78a4e; }
.acts-rail .grp-tab .gt-caret { color: #ffd9a0; }
.acts-rail .grp-tab .gt-n { color: #ffe3b0; background: rgba(212, 175, 55, .16); border: 1px solid rgba(212, 175, 55, .45); border-radius: 10px; padding: 0 8px; }
.acts-rail .grp-tab.on { border-color: #e0b050; }
.acts-rail .grp-tab.on .gt-n { background: rgba(255, 217, 160, .22); border-color: rgba(255, 217, 160, .6); color: #fff; }
.acts-rail .grp-tab.locktab { border-color: #7a5a3a; }
.acts-rail .grp-tab.locktab .gt-n { background: rgba(160, 130, 90, .18); border-color: rgba(160, 130, 90, .4); color: #d8c0a0; }

/* urgent brown v2：急务/今年要紧 → 商城同款棕色系，内部多彩渐变 */
.tip-panel {
  border: 2px solid #9a6a2c;
  background: linear-gradient(180deg, #6b4420, #3f2410);
  box-shadow: 0 2px 10px rgba(60, 30, 5, .35);
}
.tip-panel h3 { color: #ffe3b0; letter-spacing: 2px; }
.tip-panel .actbtn {
  background: linear-gradient(180deg, #8a5222, #5e3310);
  border: 1px solid #b0813c;
  box-shadow: 0 1px 4px rgba(40, 20, 5, .3);
}
.tip-panel .actbtn:nth-child(odd) {
  background: linear-gradient(180deg, #7e3a28, #552012);
  border-color: #c05a3c;
}
.tip-panel .actbtn:hover:not([disabled]) {
  border-color: #e0a050; transform: translateY(-1px);
  box-shadow: 0 3px 10px rgba(60, 30, 5, .4);
}
.tip-panel .actbtn .act-nm { color: #fff; }
.tip-panel .actbtn .tip-why { color: #ffd9a0; }
.tip-panel .actbtn .act-ap { background: rgba(212, 175, 55, .2); border-color: rgba(212, 175, 55, .55); color: #ffe3b0; }
.tip-panel .actbtn .act-ic { background: rgba(255, 217, 160, .12); border-color: rgba(255, 217, 160, .3); }
.qgrp.urgent {
  border: 2px solid #a04a30;
  background: linear-gradient(180deg, #7a3224, #4e1d12);
  border-radius: 10px; padding: 8px 10px;
  box-shadow: 0 2px 8px rgba(60, 15, 5, .3);
}
.qgrp.urgent .qgrp-t { color: #ffd9b0; border-bottom-color: rgba(255, 180, 130, .35); }
.qgrp.urgent .chip {
  background: linear-gradient(180deg, #8a4526, #5e2a12);
  border-color: #c0783c; color: #ffe9c8;
}
.qgrp.urgent .chip.hot, .qgrp.urgent .chip.danger {
  background: linear-gradient(180deg, #a03a28, #6a1f10);
  border-color: #d06040; color: #fff;
}
.qgrp.urgent .chip:hover { border-color: #e09050; transform: translateY(-1px); }

/* tip uniform brown：今年要紧统一棕色 */
.tip-panel .actbtn, .tip-panel .actbtn:nth-child(odd) {
  background: linear-gradient(180deg, #8a5222, #5e3310);
  border-color: #b0813c;
}

/* user bg tint：自定义背景色调（半透明叠加，默认无） */
:root { --user-bg: transparent; }
body {
  background-image:
    url('deco/side-red.webp?v=20261027PERF1'),
    linear-gradient(var(--user-bg), var(--user-bg)),
    radial-gradient(ellipse at center, transparent 52%, rgba(60,45,20,.11) 100%),
    radial-gradient(circle at 16% 8%, rgba(154,123,63,.07), transparent 42%),
    radial-gradient(circle at 86% 82%, rgba(164,52,43,.05), transparent 46%),
    var(--mount),
    var(--tex);
  background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
  background-size: 100% 100%, auto, auto, auto, auto, 100% 300px, 180px 180px;
  background-position: center, center, center, center, center, bottom center, center;
}

/* story pair align：剧情双框等宽对齐 · 插画等高 · 描边统一 */
.story-pair { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.story-pair .scene-illus img { height: auto; max-height: 185px; width: auto; max-width: 100%; margin: 0 auto; object-fit: contain; object-position: center; display:block; }
.story-pair .story-ai .ai-event { border-left: 3px solid var(--seal); background: none; }
.story-pair .event h3, .story-pair .ai-event h3 { font-size: 17px; line-height: 1.5; }
.story-pair .event h3 .tag, .story-pair .ai-event h3 .tag { vertical-align: middle; }
.story-pair .story-col > .panel { overflow: hidden; }

/* panel tint：框内色调（半透明叠加，默认无） */
:root { --panel-tint: transparent; }
.panel { background-image: linear-gradient(var(--panel-tint), var(--panel-tint)); }

/* panel tint v2：全框覆盖（剧情/AI/侧栏/官身），!important 防具体规则；有色框多层叠加保留原渐变 */
.panel { background-image: url(../assets/scenes/row_bg.jpg?v=20261027PERF1) center/cover no-repeat, linear-gradient(var(--panel-tint), var(--panel-tint)) !important; background-color: #faf5e8; }
.side-main, .profile-card, .stat-card, .side-card, .city-side, .city-panel, .grp-tabs, .tool-row, .acts-rail { background-image: linear-gradient(var(--panel-tint), var(--panel-tint)) !important; }
.tip-panel { background-image: linear-gradient(var(--panel-tint), var(--panel-tint)), linear-gradient(180deg, #6b4420, #3f2410) !important; }
.qgrp.urgent { background-image: linear-gradient(var(--panel-tint), var(--panel-tint)), linear-gradient(180deg, #7a3224, #4e1d12) !important; }
.tool-row { background-image: linear-gradient(var(--panel-tint), var(--panel-tint)), linear-gradient(180deg, rgba(122, 74, 30, .25), rgba(84, 48, 15, .25)) !important; }

/* work cover */
.wk-cover { width: 100%; height: 160px; object-fit: cover; object-position: center; object-position: center 40%; border-radius: 7px; margin-bottom: 9px; display: block; border: 1px solid #e8d9c3; }

/* 班子建设红色按钮 */
.chief-gov .city-btn.danger {
  background: linear-gradient(135deg, #b02a1f, #d4543c);
  color: #fff; border-color: #8c1f15;
  box-shadow: 0 2px 10px rgba(176, 42, 31, .35);
}
.chief-gov .city-btn.danger:hover { background: linear-gradient(135deg, #8c1f15, #b03a28); }

/* 在职学业 */
.edu-score { font-size: 12.5px; margin: 2px 0 6px; }
.edu-score b { font-size: 14px; }
.edu-ev .edu-ev-tag { font-size: 12px; color: #8c5a2b; margin-bottom: 4px; }
.edu-ev .edu-ev-title { font-size: 17px; margin: 2px 0 8px; color: #5c3a1e; }
.edu-ev .edu-ev-scene { font-size: 13px; line-height: 1.65; color: #3d2c1c; background: #fbf3e4; border: 1px solid #e8d9c3; border-radius: 6px; padding: 8px 10px; margin: 0 0 8px; }
.edu-ev .btn-block { display: block; width: 100%; margin: 0 0 6px; text-align: left; }

/* 中青班卡片 */
.edu-card.edu-zq { border-color: #b02a1f; background: #fdf3ec; box-shadow: 0 0 0 1px rgba(176,42,31,.08); }
.edu-card.edu-zq .edu-h b { color: #8c1f15; }
.btn-block { display: block; width: 100%; margin: 0 0 6px; text-align: left; }

/* 学业履历 */
.edu-hist { margin: 8px 0 2px; border: 1px solid #e3cfae; background: #fdfaf3; padding: 8px 10px; border-radius: 8px; }
.eh-h { font-size: 12.5px; margin-bottom: 6px; color: #6b4a2b; }
.eh-row { display: flex; gap: 8px; align-items: center; padding: 4px 0; border-bottom: 1px dashed #eee0c6; font-size: 12.5px; }
.eh-row:last-child { border-bottom: none; }
.eh-row .tag { padding: 1px 8px; font-size: 11px; }

/* 主角立绘框：米色底 + 红字（庄重官场风，去掉藏蓝底） */
.hero-card {
  background: linear-gradient(180deg, rgba(212,175,55,.12), rgba(212,175,55,0) 46%), var(--card) !important;
  color: #c0352b;
}
.hero-card .hero-meta b { color: #d02020 !important; text-shadow: 0 1px 2px rgba(0,0,0,.15); }
.hero-card .hero-meta span { color: #b81818 !important; }
.hero-card .hero-meta span.hero-post { color: #d02020 !important; text-shadow: 0 1px 2px rgba(0,0,0,.15); }
.hero-card .hero-age { color: #b81818 !important; background: transparent; border: none; }
.hero-card::before { background: linear-gradient(90deg, rgba(192,53,43,.2), #c0352b, rgba(192,53,43,.2)); }

/* ==================== 官身气象面板 · 重设计 v2（2026-09-14） ==================== */
/* 头部：朱印罗盘 + 题名 + 综合评级小印；整体与立绘框等高对齐 */
.stats.profile-box { gap: 4px; padding: 8px 9px 9px; justify-content: space-between; }
.stats.profile-box .stats-head { align-items: center; gap: 5px; padding-bottom: 5px; margin-bottom: 0; font-size: 13.5px; letter-spacing: 2px; }
.stats.profile-box .sh-ic {
  flex: none; width: 19px; height: 19px; display: flex; align-items: center; justify-content: center;
  font-size: 10px; border-radius: 5px; color: #fdf6ea;
  background: linear-gradient(160deg, #b8453a, #8a2b23);
  border: 1px solid rgba(120,30,22,.55);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35), 0 1px 2px rgba(90,30,20,.28);
}
.stats.profile-box .sh-t { flex: none; white-space: nowrap; }
.stats.profile-box .stats-head em { flex: 1; min-width: 0; text-align: right; padding-right: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 9.5px; letter-spacing: 1px; }
.stats.profile-box .sh-grade {
  flex: none; font-family: var(--font-ui); font-size: 11px; font-weight: 800; line-height: 1;
  letter-spacing: 1px; color: var(--seal2, #8a2b23);
  padding: 3px 5px 4px; border: 1px solid currentColor; border-radius: 4px;
  background: rgba(164,52,43,.08); box-shadow: inset 0 0 0 1px rgba(255,255,255,.35);
}
/* 六维：2×3 印章小卡（名称+楷体数值+细条） */
.stats.profile-box, .stats.profile-box .profile-stats, .stats.profile-box .profile-stats * { line-height: 1.35; }
.profile-stats { display: flex; flex-direction: column; justify-content: space-between; gap: 4px; }
.stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }
.stat-cell {
  display: flex; flex-direction: column; gap: 3px;
  padding: 3px 6px 4px; border-radius: 7px;
  background: linear-gradient(180deg, rgba(255,253,246,.75), rgba(250,244,230,.55));
  border: 1px solid rgba(140,100,40,.16);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.55);
  transition: background .2s ease, border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}
.stat-cell:hover { background: rgba(255,255,255,.9); border-color: rgba(140,100,40,.38); transform: translateY(-1px); box-shadow: inset 0 1px 0 rgba(255,255,255,.6), 0 2px 6px rgba(90,60,20,.12); }
.stat-cell .sc-line { display: flex; justify-content: space-between; align-items: baseline; gap: 4px; }
.stat-cell .sc-name { font-size: 10px; letter-spacing: 1.5px; color: var(--ink2); white-space: nowrap; }
.stat-cell .sc-num { font-family: var(--font-ui); font-size: 14px; font-weight: 900; line-height: 1; color: var(--ink); font-variant-numeric: tabular-nums; }
.stat-cell .stat-track { height: 4px; border-radius: 2px; }
/* 警戒态：数值转朱红、卡面泛红、条转朱砂（压力过高或其余低于35） */
.stat-cell.warn { border-color: rgba(164,52,43,.42); background: linear-gradient(180deg, rgba(164,52,43,.1), rgba(164,52,43,.045)); }
.stat-cell.warn .sc-num { color: var(--danger); }
.stat-cell.warn .stat-track i { background: linear-gradient(90deg, #a4342b, #d0685c); }
.stat-cell.warn:hover { border-color: rgba(164,52,43,.6); }
/* 人脉分区：虚线隔开 + 层级小签（上/中/下） */
.net-block { margin-top: 5px; padding-top: 6px; border-top: 1px dashed rgba(140,100,40,.3); }
.net-head { display: flex; align-items: center; gap: 5px; margin-bottom: 4px; }
.net-head i { flex: 1; height: 0; border-top: 1px solid rgba(140,100,40,.2); }
.net-head span { font-family: var(--font-ui); font-size: 11px; font-weight: 800; letter-spacing: 2px; color: var(--ink2); }
.net-head em { font-style: normal; font-size: 9.5px; letter-spacing: .5px; color: var(--ink2); opacity: .8; white-space: nowrap; }
.net-rows { display: flex; flex-direction: column; gap: 3px; }
.net-row { display: flex; align-items: center; gap: 6px; }
.net-row .nt-l {
  width: 14px; height: 14px; flex: none; display: flex; align-items: center; justify-content: center;
  font-family: var(--font-ui); font-size: 10px; font-weight: 700; line-height: 1;
  border-radius: 4px; border: 1px solid rgba(140,100,40,.3);
  background: rgba(255,255,255,.5); color: var(--ink2);
}
.net-row .nt-上 { color: #8a2b23; border-color: rgba(164,52,43,.4); background: rgba(164,52,43,.07); }
.net-row .nt-中 { color: #7a5c1e; border-color: rgba(154,123,63,.45); background: rgba(154,123,63,.09); }
.net-row .nt-下 { color: #3f6a4d; border-color: rgba(63,125,85,.4); background: rgba(63,125,85,.08); }
.net-row .stat-track { flex: 1; height: 4px; border-radius: 2px; }
.net-row .nt-v { width: 18px; flex: none; text-align: right; font-family: var(--font-ui); font-size: 11.5px; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
/* 人脉条配色：上·朱 / 中·金 / 下·青，与层级小签呼应 */
.stat-track i.c-upper { background: linear-gradient(90deg, #a4342b, #c96a5b); }
.stat-track i.c-mid { background: linear-gradient(90deg, #9a7b3f, #c9a961); }
.stat-track i.c-lower { background: linear-gradient(90deg, #3f7d55, #6fae83); }
/* 立绘悬停浮层：同一套新皮肤 */
.hero-gs-pop .stat-grid { margin-bottom: 8px; }
.hero-gs-pop .stat-cell { padding: 6px 8px 7px; }
.hero-gs-pop .stat-cell .sc-name { font-size: 11.5px; }
.hero-gs-pop .stat-cell .sc-num { font-size: 16px; }
.hero-gs-pop .net-block { margin-top: 8px; }
/* 暗色主题 */
[data-theme="dark"] .stats.profile-box .sh-ic { background: linear-gradient(160deg, #a4402f, #7c2a1f); border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .stats.profile-box .sh-grade { color: #d8907f; background: rgba(208,96,82,.1); box-shadow: none; }
[data-theme="dark"] .stat-cell { background: rgba(255,255,255,.045); border-color: rgba(255,255,255,.1); box-shadow: none; }
[data-theme="dark"] .stat-cell:hover { background: rgba(255,255,255,.09); border-color: rgba(201,169,78,.4); }
[data-theme="dark"] .stat-cell.warn { background: rgba(208,96,82,.08); border-color: rgba(208,96,82,.4); }
[data-theme="dark"] .net-block { border-top-color: rgba(201,169,78,.28); }
[data-theme="dark"] .net-head i { border-top-color: rgba(201,169,78,.2); }
[data-theme="dark"] .net-row .nt-l { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.16); }
[data-theme="dark"] .net-row .nt-上 { color: #e08a7c; border-color: rgba(224,104,92,.45); background: rgba(224,104,92,.08); }
[data-theme="dark"] .net-row .nt-中 { color: #d8c281; border-color: rgba(201,169,78,.4); background: rgba(201,169,78,.08); }
[data-theme="dark"] .net-row .nt-下 { color: #8fc79f; border-color: rgba(111,174,131,.4); background: rgba(111,174,131,.08); }

.stat-delta { font-size: 10.5px; margin-left: 4px; font-weight: 700; }
.stat-delta.up { color: #2f8f46; }
.stat-delta.down { color: #c0352b; }

.sec-draft-btn { background: #3d2b1f; color: #f0d9b5; border: 1px solid #6b4f33; padding: 4px 10px; font-weight: 700; border-radius: 6px; cursor: pointer; font-size: 12.5px; }
.sec-draft-btn:hover { background: #5a3f2b; color: #fff; }

.city-growth { margin-top: 10px; border-top: 1px dashed rgba(190,160,120,.4); padding-top: 8px; }
.cg-head { font-size: 12.5px; font-weight: 800; color: #7a1f1f; margin-bottom: 6px; }
.cg-row { display: grid; grid-template-columns: 86px 30px 44px 44px 1fr; align-items: center; gap: 4px; padding: 2.5px 0; border-bottom: 1px dotted rgba(150,130,100,.18); }
.cg-name { font-size: 12px; color: #8c1f28; font-weight: 700; white-space: nowrap; }
.cg-val { font-size: 12.5px; font-weight: 800; color: #333; text-align: right; }
.cg-up { color: #2f8f46; font-size: 11px; font-weight: 700; }
.cg-dn { color: #c0352b; font-size: 11px; font-weight: 700; }
.cg-n { color: #9a8a76; font-size: 11px; }
.cg-spark { display: inline-flex; align-items: flex-end; gap: 2px; height: 26px; }
.cg-spark i { width: 4px; background: linear-gradient(180deg, #b03a2e, #d98a4a); border-radius: 1px; display: inline-block; }

.fx-line { margin-top: 8px; font-size: 12px; color: #8a5a2a; background: rgba(240,225,200,.55); border: 1px solid rgba(200,165,120,.5); border-radius: 6px; padding: 4px 8px; font-weight: 700; }

/* ==================== 自由行动 · 卷宗分组签重设计（2026-09-15，保留原 PNG 图标） ==================== */
/* 左栏六个分组签：两列卷宗签，右上斜切角；选中态填朱 + 底部朱线 */
.acts-rail .grp-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 12px; }
.acts-rail .grp-tabs > .grp-tab {
  position: relative; display: flex; align-items: center; gap: 6px;
  padding: 7px 8px; border-radius: 7px; text-align: left; cursor: pointer;
  font-family: var(--font-ui); font-size: 12.5px; font-weight: 800; letter-spacing: 1.5px;
  color: #f2e2c2; line-height: 1.3;
  border: 1px solid #7a5226;
  background: linear-gradient(180deg, #543318, #3a2110);
  box-shadow: 0 2px 8px rgba(40,20,5,.25);
  clip-path: polygon(0 0, calc(100% - 7px) 0, 100% 7px, 100% 100%, 0 100%);
  transition: transform .18s ease, border-color .18s ease, background .18s ease, color .18s ease;
}
.acts-rail .grp-tabs > .grp-tab:hover { transform: translateY(-1px); border-color: #b0813c; background: linear-gradient(180deg, #61401f, #462813); color: #ffe9c8; }
/* 原 PNG 圆图标包进描边小印格 */
.acts-rail .grp-tabs > .grp-tab .gt-ic {
  width: 24px; height: 24px; flex: none; display: flex; align-items: center; justify-content: center;
  border-radius: 6px; border: 1px solid rgba(232,96,60,.35);
  background: rgba(232,96,60,.12);
  transition: background .18s ease, border-color .18s ease;
}
.acts-rail .grp-tabs > .grp-tab .gt-ic-img { width: 17px; height: 17px; vertical-align: 0; border-radius: 4px; }
.acts-rail .grp-tabs > .grp-tab .gt-name { flex: 1; min-width: 0; font-size: 12.5px; letter-spacing: 1.5px; white-space: nowrap; }
/* 数量改朱印数字徽章 */
.acts-rail .grp-tabs > .grp-tab .gt-n {
  flex: none; min-width: 19px; height: 17px; padding: 0 4px;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-ui); font-size: 10.5px; font-weight: 800; letter-spacing: 0;
  color: #ffd9a0; border: 1px solid rgba(212,175,55,.45); border-radius: 4px;
  background: rgba(212,175,55,.14);
}
.acts-rail .grp-tabs > .grp-tab .gt-caret { display: none; }
/* 选中：填朱 */
.acts-rail .grp-tabs > .grp-tab.on { border-color: #c74a36; background: linear-gradient(180deg, #a43a2c, #7c2a1e); color: #fff; }
.acts-rail .grp-tabs > .grp-tab.on .gt-ic { background: rgba(255,255,255,.14); border-color: rgba(255,255,255,.35); }
.acts-rail .grp-tabs > .grp-tab.on .gt-n { color: #fff; background: rgba(255,255,255,.2); border-color: rgba(255,255,255,.5); }
/* 展开体横跨两列 */
.acts-rail .grp-tabs > .grp-body { grid-column: 1 / -1; margin-top: 4px; }
/* 锁定签保持虚线金调 */
.acts-rail .grp-tabs > .grp-tab.locktab { border-style: dashed; border-color: #8a6a3a; color: #d8bd8a; background: linear-gradient(180deg, #4a3a20, #332612); }
/* 暗色主题：深棕铜底两套主题通用，无需另行覆盖 */


/* ==================== 自由行动 · 分组内行动按钮笺条卡（2026-09-15） ==================== */
/* 名称首字朱印 + 名称 + AP 金徽；悬停印章填朱、整条右移 */
.acts-rail .grp-body .actbtn {
  display: flex; align-items: center; gap: 8px; flex-direction: row;
  width: 100%; min-height: 0; padding: 7px 9px; border-radius: 8px;
  border: 1px solid rgba(140,100,40,.22);
  background: linear-gradient(180deg, rgba(255,253,246,.92), rgba(248,242,228,.72));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.55);
  color: var(--ink); text-align: left;
  transition: transform .16s ease, border-color .16s ease, background .16s ease, box-shadow .16s ease;
}
.acts-rail .grp-body .actbtn::before {
  content: attr(data-seal);
  position: static; transform: none;
  width: 24px; height: 24px; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-ui); font-size: 12.5px; font-weight: 800; line-height: 1;
  color: var(--seal2, #8a2b23);
  background: linear-gradient(160deg, rgba(244,231,205,.95), rgba(228,206,158,.8));
  border: 1px solid rgba(140,100,40,.35); border-radius: 6px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5);
  transition: background .16s ease, color .16s ease, border-color .16s ease;
}
.acts-rail .grp-body .actbtn:hover:not([disabled]) {
  transform: translateX(2px); border-color: rgba(164,52,43,.45);
  background: rgba(255,255,255,.95); color: var(--seal);
  box-shadow: 1px 2px 7px rgba(90,60,20,.12);
}
.acts-rail .grp-body .actbtn:hover:not([disabled])::before {
  background: linear-gradient(160deg, #b8453a, var(--seal2, #8a2b23));
  color: #fdf6ea; border-color: rgba(120,30,22,.5);
}
.acts-rail .grp-body .actbtn .act-nm {
  flex: 1; min-width: 0; font-size: 13px; font-weight: 700; letter-spacing: .5px; line-height: 1.35;
}
.acts-rail .grp-body .actbtn .act-ap {
  display: flex; flex: none; align-items: center;
  font-family: var(--font-ui); font-size: 11px; font-weight: 800; color: #7a5c1e;
  background: rgba(154,123,63,.12); border: 1px solid rgba(154,123,63,.4);
  padding: 2px 5px; border-radius: 5px; letter-spacing: .5px; line-height: 1; white-space: nowrap;
}
.acts-rail .grp-body .actbtn .act-ap i { font-style: normal; font-size: 8px; margin-left: 1px; opacity: .75; }
/* 锁定项：虚线纸笺 + 灰印 */
.acts-rail .grp-body .actbtn.locked {
  background: rgba(250,247,240,.55); border-style: dashed; border-color: rgba(140,100,40,.3);
  opacity: .78; flex-direction: row; align-items: center; gap: 8px;
}
.acts-rail .grp-body .actbtn.locked::before { color: #a09478; background: rgba(230,220,195,.6); border-color: rgba(140,100,40,.25); }
.acts-rail .grp-body .actbtn.locked .act-nm { color: #6b6252; }
.acts-rail .grp-body .actbtn.locked:hover { transform: none; background: rgba(250,247,240,.55); }
/* 险招（灰色行动）：首字印转红 */
.acts-rail .grp-body .actbtn.risk::before { color: #a82828; background: rgba(168,40,40,.08); border-color: rgba(168,40,40,.4); }
.acts-rail .grp-body .actbtn.risk:hover:not([disabled])::before { background: linear-gradient(160deg, #a82828, #7c1a12); color: #fdf6ea; }
/* 暗色主题：笺条卡转深纸色 */
[data-theme="dark"] .acts-rail .grp-body .actbtn { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); box-shadow: none; color: var(--ink); }
[data-theme="dark"] .acts-rail .grp-body .actbtn::before { color: #d8907f; background: rgba(208,96,82,.1); border-color: rgba(208,96,82,.4); box-shadow: none; }
[data-theme="dark"] .acts-rail .grp-body .actbtn:hover:not([disabled]) { background: rgba(255,255,255,.1); border-color: rgba(208,96,82,.5); color: #e8a294; }
[data-theme="dark"] .acts-rail .grp-body .actbtn:hover:not([disabled])::before { background: linear-gradient(160deg, #a4402f, #7c2a1f); color: #fdf6ea; }
[data-theme="dark"] .acts-rail .grp-body .actbtn .act-ap { color: #d8c281; background: rgba(201,169,97,.12); border-color: rgba(201,169,97,.4); }
[data-theme="dark"] .acts-rail .grp-body .actbtn.locked { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.1); }
[data-theme="dark"] .acts-rail .grp-body .actbtn.locked::before { color: #8a8172; background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }

/* ==================== 顶栏右侧信息牌 + 城市治理分区（2026-09-15） ==================== */
/* 徽章皮肤（两排布局见上方 .t-right / .t-chip-row 唯一权威定义，此处勿写布局属性） */
.tl-chip {
  padding: 3.5px 10px; border-radius: 8px; font-size: 12.5px; font-weight: 700; color: var(--ink2);
  border: 1px solid rgba(140,100,40,.3);
  background: linear-gradient(180deg, rgba(255,253,246,.95), rgba(246,238,222,.85));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.6), 0 1px 2px rgba(90,60,20,.08);
}
.tl-chip img.tl-ic { width: 14px; height: 14px; border-radius: 50%; box-shadow: 0 0 0 1px rgba(140,100,40,.25); }
[data-theme="dark"] .tl-chip { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.14); color: var(--ink2); box-shadow: none; }
.t-btns { justify-content: flex-end; gap: 7px; }
.t-btns .btn {
  padding: 6px 13px; font-size: 13px; border-radius: 9px; font-weight: 700;
  border: 1px solid rgba(140,100,40,.32); color: var(--ink);
  background: linear-gradient(180deg, rgba(255,253,246,.95), rgba(246,238,222,.85));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.6);
}
.t-btns .btn:hover { border-color: var(--seal); color: var(--seal); transform: translateY(-1px); }
.t-btns .btn.primary {
  padding: 7px 16px; letter-spacing: 1px; color: #fdf6ea;
  background: linear-gradient(180deg, #b8453a, #8a2b23);
  border: 1px solid rgba(120,30,22,.55);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 2px 6px rgba(120,30,22,.3);
  text-shadow: 0 1px 0 rgba(0,0,0,.25);
}
.t-btns .btn.primary:hover { background: linear-gradient(180deg, #c85044, #963125); color: #fff; transform: translateY(-1px); }

/* —— 城市治理：分区标题 + 盘面带 —— */
.cz-t {
  display: flex; align-items: center; gap: 6px;
  margin: 9px 0 6px; font-family: var(--font-ui); font-size: 12.5px; font-weight: 800;
  letter-spacing: 2px; color: var(--seal2, #8a2b23);
}
.cz-t::before { content: ''; flex: none; width: 4px; height: 12px; border-radius: 2px; background: linear-gradient(180deg, #c96a5b, #a4342b); }
.cz-t::after { content: ''; flex: 1; height: 0; border-top: 1px dashed rgba(140,100,40,.32); }
.chief-gov .cz-t, .chief-wrap .cz-t { font-size: 14px; margin: 12px 0 7px; }
.chief-gov .cz-t::before, .chief-wrap .cz-t::before { height: 14px; width: 5px; }
.chief-gov .cz-t:first-child, .chief-wrap .cz-t:first-child { margin-top: 0; }
.cz-band { border: 1px solid rgba(140,100,40,.22); border-radius: 9px; padding: 7px 9px 5px; background: linear-gradient(180deg, rgba(255,253,246,.7), rgba(248,242,228,.5)); }
.chief-gov .cz-band, .chief-wrap .cz-band { padding: 8px 11px 6px; }
[data-theme="dark"] .cz-band { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
/* 六维：一格一指标（标签+数值+条不再拆散错位），两列对齐 */
.city-attr-grid .ca-cell { min-width: 0; }
.chief-gov .city-attr-grid, .chief-wrap .city-attr-grid { grid-template-columns: 1fr 1fr; gap: 8px 18px; }
.ca-cell .stat-head.small { margin-bottom: 2px; }
/* 增长指标：无历史数据时给提示行 */
.cg-hint { font-size: 12px; color: var(--ink3); padding: 1px 0 3px; }
.cg-empty .cg-head { margin-bottom: 3px; }
/* 底部操作条：窄栏整体换行，按钮不压成竖排 */
.chief-gov .city-side-foot, .chief-wrap .city-side-foot { flex-wrap: wrap; row-gap: 6px; }
.chief-gov .city-side-foot .chip, .chief-wrap .city-side-foot .chip { white-space: nowrap; flex: none; }

/* =====================================================================
   中层玩法（tier 4-6）：年度责任状 + 条块协调台账  2026-09-15
   ===================================================================== */
.pledge-banner { border-left: 3px solid var(--seal); }
/* 责任状进度卡 */
.mid-pledge { border-left: 3px solid var(--gold); }
.mid-pledge .mp-h { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; margin-bottom: 10px; flex-wrap: wrap; }
.mid-pledge .mp-h .tag { font-size: 11px; font-weight: 400; padding: 1px 7px; border-radius: 9px; border: 1px solid var(--line); }
.mid-pledge .t-stretch { color: var(--seal); border-color: var(--seal); }
.mid-pledge .t-bargain { color: var(--ink2); }
.mid-pledge .t-base { color: var(--ok); border-color: var(--ok); }
.mp-items { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 18px; }
.mp-item { padding: 7px 10px; background: var(--paper2); border-radius: 6px; border: 1px solid transparent; }
.mp-item.ok { border-color: var(--ok); }
.mp-item .mp-t { display: flex; align-items: baseline; gap: 6px; font-size: 14px; }
.mp-item .mp-dim { font-size: 11px; color: var(--ink2); }
.mp-bar { height: 6px; background: var(--paper); border: 1px solid var(--line); border-radius: 4px; overflow: hidden; margin: 6px 0 4px; }
.mp-bar i { display: block; height: 100%; background: var(--gold); }
.mp-item.ok .mp-bar i { background: var(--ok); }
.mp-n { display: flex; justify-content: space-between; font-size: 12px; gap: 8px; flex-wrap: wrap; }
.mp-n .up { color: var(--ok); }
.mp-foot { margin-top: 9px; padding-top: 7px; border-top: 1px dashed var(--line); }
/* 协调台账 */
.mid-coord { border-left: 3px solid var(--warn); }
.mid-coord .mc-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 15px; font-weight: 700; margin-bottom: 10px; flex-wrap: wrap; }
.mc-item { padding: 9px 11px; background: var(--paper2); border-radius: 6px; margin-bottom: 8px; }
.mc-item .mc-t { display: flex; align-items: baseline; gap: 7px; font-size: 14px; flex-wrap: wrap; }
/* 领导小组与专班 · 在办清单（tf-item）
   注：这块和上面的 .mc-item 是同构的。UI.tfBlock 直接沿用了「中层协调台账」的骨架
   （mc-h 标题、mc-foot 页脚、mc-empty 空态、mc-stale 停摆提示、mp-bar 进度条，
   以及 mc-dim 等级徽章），但行容器 .tf-item 和它的两行子元素 .tf-t / .tf-n
   从未落过样式。结果在办专班的卡片背景、行距、标题/数字分栏全部缺失，
   多条专班糊成一整片，与协调台账的观感割裂。这里按 mc-item / mc-t 的口径补齐。 */
.tf-item { padding: 9px 11px; background: var(--paper2); border-radius: 6px; margin-bottom: 8px; }
.tf-item .tf-t { display: flex; align-items: baseline; gap: 7px; font-size: 14px; flex-wrap: wrap; }
.tf-item .tf-n { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 12.5px; color: var(--ink2); flex-wrap: wrap; }
.tf-warn { margin: 2px 0 0; }
.mc-dim { font-size: 11px; color: var(--ink2); border: 1px solid var(--line); border-radius: 8px; padding: 0 6px; }
.mc-stale { font-size: 11px; color: var(--danger); }
.mc-brief { font-size: 13px; color: var(--ink2); line-height: 1.7; margin: 4px 0 6px; }
.mc-depts { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 7px; }
.mc-dept { font-size: 12px; padding: 2px 7px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); }
.mc-dept i { font-style: normal; color: var(--danger); margin-left: 4px; font-size: 11px; }
.mc-dept.signed { color: var(--ok); border-color: var(--ok); background: transparent; }
.mc-wait { font-size: 12px; padding-top: 2px; }
.mc-empty { padding: 4px 0; }
.mc-foot { margin-top: 4px; padding-top: 7px; border-top: 1px dashed var(--line); }
/* ===== 部门台账 · 打过交道（2026-10-27）=====
   不是统计数字，是「这一片谁认你」。全签的转墨绿，一次没签的转朱砂，
   中间态留墨色——扫一眼就知道自己在哪个部门面前还有面子。 */
.mc-ledger { margin-top: 8px; padding-top: 7px; border-top: 1px dashed var(--line); display: flex; flex-wrap: wrap; align-items: baseline; gap: 5px; }
.mc-ledger-h { font-size: 11px; letter-spacing: 2px; color: var(--ink2); margin-right: 2px; }
.mc-lg { font-size: 11.5px; padding: 1px 7px; border: 1px solid var(--line); border-radius: 9px; background: var(--card); }
.mc-lg i { font-style: normal; color: var(--ink2); margin-left: 4px; }
.mc-lg.ok { border-color: var(--ok); }
.mc-lg.ok i { color: var(--ok); }
.mc-lg.bad { border-color: var(--danger); }
.mc-lg.bad i { color: var(--danger); }
/* 人事账本（mid-hl 面板 + 弹窗） */
.mid-hl { border-left: 3px solid var(--seal); }
.mid-hl .mc-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 15px; font-weight: 700; margin-bottom: 10px; flex-wrap: wrap; }
.mid-hl .mc-h .hl-w { display: inline-flex; align-items: center; gap: 5px; color: var(--seal); font-weight: 700; letter-spacing: .3px; }
.mid-hl .mc-h .hl-w.up { color: var(--ok); }
.mid-hl .mc-h .hl-w.dn { color: var(--danger); }
.hl-w-ic { width: 17px; height: 17px; border-radius: 4px; object-fit: cover; box-shadow: 0 1px 2px rgba(0,0,0,.25); }
.hl-bar { height: 7px; background: var(--paper); border: 1px solid var(--line); border-radius: 5px; overflow: hidden; margin: 8px 0 9px; }
.hl-bar i { display: block; height: 100%; background: linear-gradient(90deg, #a8352f, #e0b45a); }
.hl-bar i.up { background: linear-gradient(90deg, #1e8a5a, #57c78f); }
.hl-bar i.dn { background: linear-gradient(90deg, #b03a3a, #e06b5e); }
.hl-meta { font-size: 12px; line-height: 1.7; margin-bottom: 7px; }
.hl-l { padding: 8px 10px; background: var(--paper2); border-radius: 6px; margin-bottom: 7px; }
.hl-l .hl-t { display: flex; align-items: baseline; gap: 7px; font-size: 14px; flex-wrap: wrap; }
.hl-g { font-size: 11px; padding: 1px 7px; border-radius: 9px; border: 1px solid var(--line); color: var(--ink2); }
.hl-g.hi { color: var(--danger); border-color: var(--danger); }
.hl-g.mid { color: #c97f1f; border-color: #c97f1f; }
.hl-warn { margin-top: 7px; padding: 7px 10px; font-size: 12px; line-height: 1.6; border-radius: 6px; color: var(--danger); background: rgba(176,58,58,.07); border: 1px solid rgba(176,58,58,.35); }
.hl-fold-ctrl { margin: 2px 0 6px; }
.hl-fold-ctrl .chip { font-size: 12px; padding: 3px 10px; }
.hl-flex { display: flex; gap: 14px; align-items: stretch; }
.hl-main { flex: 1 1 auto; min-width: 0; }
.hl-fair { flex: 0 0 196px; display: flex; flex-direction: column; gap: 6px; align-items: center; text-align: center; padding: 10px; border: 2px solid rgba(168,53,47,.45); border-radius: 10px; background: linear-gradient(180deg, rgba(168,53,47,.07), rgba(255,253,246,.35)); }
.hl-fair-ill { width: 100%; aspect-ratio: 16/9; object-fit: cover; object-position: center; border-radius: 8px; border: 1px solid var(--line); }
.hl-fair-t { font-size: 13.5px; font-weight: 800; color: var(--seal); letter-spacing: 2px; }
.hl-fair-d { line-height: 1.55; margin: 0; font-size: 12px; }
.hl-fair-btn { font-size: 12px; padding: 3px 10px; }
@media (max-width: 980px) { .hl-flex { flex-direction: column; } .hl-fair { flex: auto; width: 100%; } }
/* 右侧栏人事账本：纵向紧凑（公开表态独立成行后，账本本体为半宽面板） */
.side-hl { margin-bottom: 12px; }
.side-hl .hl-flex { flex-direction: column; }
.side-hl .hl-fair { flex: auto; width: 100%; }
/* 嫡系|人事账本并排对称：账本作为独立面板补齐边框 */
.layout > aside > .side-hl { border: 3px solid var(--seal); border-radius: 10px; padding: 12px 14px; background: var(--card); box-shadow: var(--shadow); box-sizing: border-box; background-image: linear-gradient(var(--panel-tint), var(--panel-tint)) !important; }
/* 人事账本：外层 side-hl 已承担红框，内层 mid-hl 面板去掉边框避免双层 */
.layout > aside > .side-hl > .panel.mid-hl { border: none; background: transparent; box-shadow: none; padding: 0; }
.layout > aside > .side-hl .hl-meta { font-size: 11px; }
/* 公开表态独立整行：全宽面板样式 */
.layout > aside > .hl-fair { display: flex; flex-direction: column; gap: 7px; align-items: center; text-align: center; padding: 12px 16px; border: 3px solid var(--seal); border-radius: 10px; background: linear-gradient(180deg, rgba(168,53,47,.07), rgba(255,253,246,.35)); box-sizing: border-box; }
.layout > aside > .hl-fair .hl-fair-ill { width: 100%; max-width: 360px; aspect-ratio: 16/7; object-fit: cover; object-position: center; border-radius: 8px; border: 1px solid var(--line); }
.layout > aside > .hl-fair .hl-fair-t { font-size: 15px; font-weight: 800; color: var(--seal); letter-spacing: 2px; }
.layout > aside > .hl-fair .hl-fair-d { max-width: 640px; }
.layout > aside > .hl-fair .hl-fair-btn { font-size: 13px; padding: 5px 14px; }
.side-hl .hl-fair-ill { aspect-ratio: 16/7; }
.side-hl .hl-meta { font-size: 11px; }
.hl-book .hl-bh { display: flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 600; margin-bottom: 10px; color: var(--ink); }
.hl-book .hl-bh b { color: var(--seal); font-size: 16px; }
.hl-wlog { margin-top: 8px; padding: 8px 10px; background: var(--paper2); border-left: 3px solid var(--warn); border-radius: 4px; font-size: 13px; }
.hl-wlog b { color: var(--danger); }

/* 签状弹窗 */
.ps-box .ps-lead { font-size: 14px; line-height: 1.9; margin-bottom: 10px; }
.ps-item { padding: 8px 10px; background: var(--paper2); border-radius: 6px; margin-bottom: 7px; }
.ps-item .ps-t { display: flex; align-items: baseline; gap: 7px; font-size: 14px; }
.ps-dim { font-size: 11px; color: var(--ink2); }
.ps-why { margin: 3px 0 5px; }
.ps-n { display: flex; gap: 6px; flex-wrap: wrap; }
.ps-c { font-size: 11px; padding: 1px 7px; border-radius: 9px; border: 1px solid var(--line); }
.ps-c.up { color: var(--seal); border-color: var(--seal); }
.ps-c.dn { color: var(--ok); border-color: var(--ok); }
.ps-c.b { color: var(--ink2); }
.ps-opts { display: grid; gap: 8px; margin-top: 12px; }
.ps-opts .btn { text-align: left; padding: 9px 12px; line-height: 1.6; }
.ps-opts .btn b { display: block; font-size: 14px; margin-bottom: 2px; }
/* 协调结果 */
.mc-res .mc-res-way { font-size: 12px; color: var(--ink2); border-bottom: 1px dashed var(--line); padding-bottom: 5px; margin-bottom: 8px; }
.mc-res-n { font-size: 13px; color: var(--ok); margin-top: 6px; }
.mc-res-done { margin-top: 9px; padding: 8px 10px; border: 1px solid var(--ok); border-radius: 6px; color: var(--ok); font-size: 14px; }
/* ===== 会签回执单（2026-10-27）=====
   一个函发下去，各部门的脸色不一样。左竖线用朱砂，像一份真的回执夹在公文里。
   已签的整行转墨绿、未签的留墨色——一眼扫下来就知道卡在谁那儿。 */
.mc-rc { margin-top: 10px; border-top: 1px dashed var(--line); padding-top: 9px; }
.mc-rc-h { font-size: 11px; letter-spacing: 2px; color: var(--ink2); margin-bottom: 6px; }
.mc-rc-row { padding: 6px 0 6px 9px; border-left: 2px solid var(--danger); margin-bottom: 5px; }
.mc-rc-row.ok { border-left-color: var(--ok); }
.mc-rc-t { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; font-size: 13px; }
.mc-rc-t b { font-weight: 600; }
.mc-rc-row.ok .mc-rc-t b { color: var(--ok); }
.mc-rc-by { font-size: 11px; color: var(--ink2); }
.mc-rc-tag { font-size: 10px; padding: 0 5px; border-radius: 8px; border: 1px solid currentColor; line-height: 1.6; }
.mc-rc-tag.s-support { color: var(--ok); }
.mc-rc-tag.s-partial { color: var(--seal); }
.mc-rc-tag.s-delay { color: #B5713E; }
.mc-rc-tag.s-object { color: var(--danger); }
.mc-rc-x { font-size: 12px; color: var(--ink2); line-height: 1.75; margin-top: 3px; }
@media (max-width: 560px) {
  .mc-rc-t { font-size: 12px; }
  .mc-rc-x { font-size: 11.5px; }
}
@media (max-width: 900px) { .mp-items { grid-template-columns: 1fr; } }


/* ==================== 顶栏右上角信息牙牌两排 · 城市治理分区划线 · 作战图插画（2026-09-15 修正3） ==================== */
/* 布局（两排、贴右）已在上方 .t-right 唯一权威定义处声明，此处只做视觉皮肤，勿再写布局属性 */
/* 徽章：统一宣纸牙牌样式（色系统一，仅图标与数字区分） */
.tl-chip.t-loc, .tl-chip.t-money, .tl-chip.t-fac, .tl-chip.t-focus {
  border-color: rgba(180,140,40,.4);
  background: linear-gradient(180deg, rgba(255,253,246,.98), rgba(247,238,216,.9));
  color: var(--ink2);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 1px 2px rgba(90,60,20,.08);
}
.tl-chip .t-num { font-family: var(--font-kai); font-size: 15px; color: #8a6a16; letter-spacing: .5px; margin-left: 2px; }
.tl-chip.t-money, .tl-chip.t-fac { font-weight: 800; }
.tl-chip.t-money .t-num { font-size: 16px; color: #8a6a16; }
/* 可点击牙牌（存款→账单）：给出明确的指针与悬停反馈 */
.tl-chip[data-act] { cursor: pointer; transition: border-color .15s, box-shadow .15s, transform .12s; }
.tl-chip[data-act]:hover { border-color: var(--seal); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 2px 8px rgba(140,40,30,.18); transform: translateY(-1px); }
.tl-chip[data-act]:focus-visible { outline: 2px solid var(--seal); outline-offset: 2px; }
.tl-chip[data-act]:active { transform: translateY(0); }
.tl-chip.t-money .tl-ic { margin-right: 3px; }
/* 账外资产牙牌：警示配色，同样可点开账单 */
.tl-chip.t-hidden { border-color: rgba(178,58,44,.5); background: linear-gradient(180deg, rgba(255,249,246,.98), rgba(250,232,226,.9)); }
.tl-chip.t-hidden .t-num { color: #a8341f; }
[data-theme="dark"] .tl-chip.t-hidden { background: rgba(200,60,40,.12); border-color: rgba(220,90,70,.4); }
[data-theme="dark"] .tl-chip.t-hidden .t-num { color: #e9a08c; }
.tl-chip.t-fac .t-win { font-style: normal; font-size: 10.5px; font-weight: 800; color: #fff; background: linear-gradient(180deg, #c03a2c, #8f241a); border-radius: 4px; padding: 1px 5px; margin-left: 3px; letter-spacing: 1px; box-shadow: 0 1px 2px rgba(140,40,30,.35); }
/* 按钮组：描金印钮，右对齐 */
.t-btns { justify-content: flex-end; gap: 7px; }
.t-btns .btn { border-color: rgba(180,140,40,.4); background: linear-gradient(180deg, rgba(255,252,242,.98), rgba(247,238,216,.88)); }
.t-btns .btn:hover { border-color: var(--seal); color: var(--seal); }
[data-theme="dark"] .tl-chip.t-loc, [data-theme="dark"] .tl-chip.t-money, [data-theme="dark"] .tl-chip.t-fac, [data-theme="dark"] .tl-chip.t-focus { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.16); color: var(--ink2); box-shadow: none; }
[data-theme="dark"] .tl-chip .t-num { color: #e3cf9a; }
[data-theme="dark"] .t-btns .btn { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.16); color: var(--ink2); }

/* —— 城市治理：仅分区划线（不动布局、不动市区风貌图） —— */
.chief-wrap .city-side-col > .city-cards,
.chief-wrap .city-side-col > .cz-band,
.chief-wrap .city-side-col > .city-attr-grid,
.chief-wrap .city-side-col > .city-growth,
.chief-wrap .city-side-col > .goal-mini {
  border: 1px solid rgba(140,100,40,.16); border-radius: 9px;
  padding: 6px 9px; background: rgba(255,253,246,.45);
}
.chief-wrap .city-side-col > .city-attr-grid { padding-top: 7px; }
.chief-wrap .city-side-col > .city-growth { padding-top: 7px; }
[data-theme="dark"] .chief-wrap .city-side-col > .city-cards,
[data-theme="dark"] .chief-wrap .city-side-col > .cz-band,
[data-theme="dark"] .chief-wrap .city-side-col > .city-attr-grid,
[data-theme="dark"] .chief-wrap .city-side-col > .city-growth,
[data-theme="dark"] .chief-wrap .city-side-col > .goal-mini { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }

/* —— 组织架构 + 作战图：新竖版插图（保持原尺寸对齐城市治理）、角标、按钮右对齐 —— */
.org-ill-wrap, .proj-ill-wrap { position: relative; }
.org-ill-tag, .proj-ill-tag { position: absolute; right: 6px; bottom: 6px; background: rgba(60,35,20,.72); color: #f7ecd9; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 5px; letter-spacing: .5px; }
.chief-right .org-side .acts, .chief-right .proj .acts { justify-content: flex-end; }
.chief-right .proj .acts.proj-acts { margin-top: 8px; }

/* ==================== 右栏卡片填充：插图加高 + 班子花名册（2026-09-15） ==================== */
.chief-right .org-side .org-tree { height: 218px; }
.chief-right .proj .proj-ill { height: 196px; }
.org-roster { margin: 8px 0 2px; display: flex; flex-direction: column; gap: 4px; }
.org-roster-h { margin-bottom: 2px; letter-spacing: 1px; }
.org-rrow { display: flex; align-items: center; gap: 8px; padding: 3px 8px; background: rgba(255,253,246,.55); border: 1px solid rgba(140,100,40,.14); border-radius: 6px; }
.org-rname { font-weight: 700; font-size: 13px; }
.org-rtitle { flex: 1; }
[data-theme="dark"] .org-rrow { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.1); }

/* ==================== 花名册样式收紧（2026-09-15） ==================== */
.org-roster { gap: 3px; }
.org-rrow { display: flex; align-items: center; gap: 7px; padding: 2px 8px; background: rgba(255,253,246,.55); border: 1px solid rgba(140,100,40,.14); border-radius: 5px; line-height: 1.5; }
.org-rname { font-weight: 800; font-size: 13px; }
.org-rtitle { flex: 1; font-size: 13px; color: #b23b30; font-weight: 600; }
.org-mood { font-size: 11.5px; font-weight: 700; letter-spacing: 1px; }
.org-mood.ok { color: #2e7d32; }
.org-mood.bad { color: #c03a2c; }
.org-mood:not(.ok):not(.bad) { color: #8a6a16; }
[data-theme="dark"] .org-rrow { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.1); }
[data-theme="dark"] .org-rtitle { color: #d97068; }

/* ==================== 嫡系面板：插图 + 进度条（2026-09-15） ==================== */
.disc-ill-wrap { position: relative; margin: 6px 0 8px; }
.disc-ill { width: 100%; height: 148px; object-fit: cover; object-position: center; border-radius: 8px; border: 1px solid rgba(140,100,40,.25); }
/* 赴上级对接与两办联络并排时：插图压缩适配半宽 */
.sec-lobby-pair .disc-ill { height: 76px; }
.sec-lobby-pair .disclist { max-height: 92px !important; }
.sec-lobby-pair .disc-ill-tag { font-size: 10px; padding: 1px 6px; }
.sec-lobby-pair .sec-av { width: 42px; height: 54px; }
.sec-lobby-pair .sec-btns .chip { font-size: 11px; padding: 3px 6px; }
.sec-lobby-pair .sec-meta b { font-size: 13px; }
.sec-lobby-pair .disc-h b { font-size: 12.5px; }
.sec-lobby-pair .disc-bar .disc-barlab { font-size: 11px; }
.disc-ill-tag { position: absolute; right: 6px; bottom: 6px; background: rgba(60,35,20,.72); color: #f7ecd9; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 5px; letter-spacing: .5px; }
.disc-stage { font-size: 11.5px; font-weight: 700; color: var(--seal); margin: 0 2px; }
.disc-bar { display: flex; align-items: center; gap: 6px; margin: 2px 0; }
.disc-barlab { font-size: 11px; color: var(--ink2); width: 26px; flex: none; }
.disc-bar .stat-track { flex: 1; }
.disc-bar b { font-size: 11.5px; width: 26px; text-align: right; flex: none; }

/* ==================== 组建领导小组 · 专班弹窗（2026-09-15） ==================== */
.tf-form { display: flex; flex-direction: column; gap: 11px; }
.tf-sec {
  border: 1px solid rgba(140,100,40,.22); border-radius: 10px; padding: 9px 11px 10px;
  background: linear-gradient(180deg, rgba(255,253,246,.72), rgba(248,242,228,.5));
}
.tf-sec-h {
  display: flex; align-items: center; gap: 7px; margin-bottom: 9px;
  font-family: var(--font-kai); font-size: 15.5px; font-weight: 800; letter-spacing: 2px; color: var(--seal2, #8a2b23);
}
.tf-sec-h::after { content: ''; flex: 1; height: 0; border-top: 1px dashed rgba(140,100,40,.3); }
/* 一、攻坚事项：单选卡 */
.tf-m {
  display: flex; gap: 8px; align-items: flex-start; cursor: pointer;
  padding: 7px 9px; border-radius: 8px; border: 1px solid transparent;
  transition: background .15s ease, border-color .15s ease;
}
.tf-m + .tf-m { margin-top: 3px; }
.tf-m input { margin: 4px 0 0; flex: none; }
.tf-m > span { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.tf-m b { font-size: 15.5px; letter-spacing: .3px; color: var(--ink); font-weight: 800; }
.tf-m i { font-style: normal; font-size: 13px; color: var(--seal); line-height: 1.6; font-weight: 600; }
.tf-m em { font-style: normal; font-size: 12.5px; font-family: var(--font-ui); font-weight: 800; color: var(--seal); }
.tf-m:hover { background: rgba(255,255,255,.85); border-color: rgba(140,100,40,.3); }
.tf-m:has(input:checked) { background: rgba(164,52,43,.07); border-color: rgba(164,52,43,.45); }
.tf-m:has(input:checked) b, .tf-m input:checked ~ span b { color: var(--seal); }
/* 二、谁挂帅：同款单选卡 */
.tf-l {
  display: flex; gap: 8px; align-items: flex-start; cursor: pointer;
  padding: 7px 9px; border-radius: 8px; border: 1px solid transparent;
  transition: background .15s ease, border-color .15s ease;
}
.tf-l + .tf-l { margin-top: 3px; }
.tf-l input { margin: 4px 0 0; flex: none; }
.tf-l > span { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.tf-l b { font-size: 15.5px; letter-spacing: .3px; color: var(--ink); font-weight: 800; }
.tf-l i { font-style: normal; font-size: 13px; color: var(--seal); line-height: 1.6; font-weight: 600; }
.tf-l em { font-style: normal; font-size: 12.5px; font-family: var(--font-ui); font-weight: 800; }
.tf-l em.dn { color: var(--danger); }
.tf-l em.up { color: var(--ok); }
.tf-l:hover { background: rgba(255,255,255,.85); border-color: rgba(140,100,40,.3); }
.tf-l:has(input:checked) { background: rgba(164,52,43,.07); border-color: rgba(164,52,43,.45); }
.tf-l:has(input:checked) b, .tf-l input:checked ~ span b { color: var(--seal); }
/* 三、给多少钱 */
.tf-form .sel {
  width: 100%; max-width: 320px; padding: 6px 10px; border-radius: 8px;
  border: 1px solid rgba(140,100,40,.35); background: #fffdf8; color: var(--ink);
  font-family: inherit; font-size: 14.5px; font-weight: 600;
}
[data-theme="dark"] .tf-form .sel { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.16); color: var(--ink); }
/* 五、抽谁：两列复选卡 */
.tf-draw { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.tf-d {
  display: flex; gap: 7px; align-items: flex-start; cursor: pointer;
  padding: 6px 9px; border-radius: 8px;
  border: 1px solid rgba(140,100,40,.18); background: rgba(255,255,255,.55);
  transition: border-color .15s ease, background .15s ease;
}
.tf-d:hover { border-color: rgba(164,52,43,.45); background: rgba(255,255,255,.9); }
.tf-d input { margin: 3px 0 0; flex: none; }
.tf-d > span { display: flex; flex-direction: column; gap: 0; min-width: 0; }
.tf-d span { font-size: 14px; font-weight: 700; color: var(--ink); }
.tf-d i { font-style: normal; font-size: 12px; color: var(--ink3); }
[data-theme="dark"] .tf-sec { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
[data-theme="dark"] .tf-m:hover, [data-theme="dark"] .tf-l:hover { background: rgba(255,255,255,.08); border-color: rgba(201,169,97,.4); }
[data-theme="dark"] .tf-m:has(input:checked), [data-theme="dark"] .tf-l:has(input:checked) { background: rgba(208,96,82,.12); border-color: rgba(208,96,82,.5); }
[data-theme="dark"] .tf-d { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] .tf-d:hover { background: rgba(255,255,255,.09); border-color: rgba(208,96,82,.5); }
[data-theme="dark"] .tf-m b, [data-theme="dark"] .tf-l b, [data-theme="dark"] .tf-d span { color: var(--ink); }

/* 组建专班弹窗：说明小字加大加重（2026-09-15 二次调整） */
.tf-form .muted.small { font-size: 13px; color: var(--ink2); font-weight: 500; }
.tf-form .acts.center .btn { font-size: 15px; padding: 8px 22px; }

/* 领导小组与专班主面板顶部统计小字（在办/结项/未交账）提亮为红色（2026-09-15） */
.mid-coord .mc-h .mc-stat { color: var(--seal); font-weight: 700; letter-spacing: .3px; }

/* ==================== 政务子分类签 · 收敛配色（2026-09-15） ==================== */
/* 原来继承「heavy rail v2」的亮红底，改为与卷宗签同族的深棕铜；展开中仍用朱红标示 */
.acts-rail .grp-tabs .gov-subtab {
  border: 1px solid #7a5226;
  background: linear-gradient(180deg, #543318, #3a2110);
  color: #f2e2c2;
  box-shadow: 0 2px 6px rgba(30, 15, 5, .3);
}
.acts-rail .grp-tabs .gov-subtab:hover { border-color: #b0813c; color: #ffe9c8; background: linear-gradient(180deg, #61401f, #462813); }
.acts-rail .grp-tabs .gov-subtab.on { background: linear-gradient(180deg, #a43a2c, #7c2a1e); border-color: #c74a36; color: #fff; }
.acts-rail .grp-tabs .gov-subtab .gt-n {
  color: #ffd9a0; background: rgba(212, 175, 55, .14);
  border: 1px solid rgba(212, 175, 55, .45); border-radius: 10px; padding: 0 8px;
}
.acts-rail .grp-tabs .gov-subtab.on .gt-n { color: #fff; background: rgba(255, 255, 255, .2); border-color: rgba(255, 255, 255, .5); }
.acts-rail .grp-tabs .gov-subtab .gt-caret { color: #d9b88a; }
.acts-rail .grp-tabs .gov-subtab.on .gt-caret { color: rgba(255, 255, 255, .9); }

/* 人事账本·压担子记录 */
.hl-burs { margin: 6px 0; display: flex; flex-direction: column; gap: 3px; }
.hl-b { font-size: 12px; color: var(--ink2); padding: 2px 6px; background: rgba(255,253,246,.5); border-radius: 4px; }
.hl-b b { color: var(--seal); margin-right: 4px; }
[data-theme="dark"] .hl-b { background: rgba(255,255,255,.05); }

/* ==================== 商城 · 烟酒线性小图标（2026-09-15） ==================== */
.g-ic svg.ic, .polrow .g-ic svg.ic, .tf-d svg.ic {
  width: 20px; height: 20px;
  fill: none; stroke: currentColor; stroke-width: 1.5;
  stroke-linecap: round; stroke-linejoin: round; display: block;
}
.g-ic { color: #6b4a26; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; flex: 0 0 auto; }
[data-theme="dark"] .g-ic { color: #d8b88a; }
.g-ic-img { width: 38px; height: 38px; object-fit: contain; border-radius: 8px; background: #f6efe3; border: 1px solid rgba(107,74,38,.25); }
[data-theme="dark"] .g-ic-img { background: rgba(255,255,255,.05); border-color: rgba(216,184,138,.25); }
.polrow .g-ic { width: 34px; height: 34px; }
.polrow .g-ic-img { width: 32px; height: 32px; }

/* 晋升进度面板上下收紧 2026-09-15 */
.promo-wide{padding:8px 12px !important;margin-bottom:10px !important}
.promo-wide-h{margin-bottom:4px !important}
.promo-wide .checks .chk,.checks .chk{padding:3px 8px !important;margin:0 0 2px !important;line-height:1.35 !important}
.promo-wide .promo-miss{margin:2px 0 0 !important}
.promo-wide .promo-hint{margin:0 !important;font-size:11.5px !important}
.promo-wide .promo-acts{margin-top:2px !important}

/* ===== AI 参谋（P0）：参谋部面板 + 进言条子（2026-09-15） ===== */
.adv-list { display: grid; gap: 10px; margin: 10px 0; }
.adv-card { border: 1px solid var(--line, #d8cfc0); border-left: 3px solid var(--seal, #a4342b); border-radius: 8px; padding: 10px 12px; background: var(--card, #fffdf8); }
.adv-h { display: flex; align-items: center; gap: 6px; }
.adv-ic { font-size: 15px; }
.adv-tag { font-size: 12px; color: var(--seal, #a4342b); font-weight: 700; margin-left: 6px; }
.adv-m { font-size: 12.5px; color: var(--ink2, #5c5348); margin-top: 4px; }
.adv-m b { color: var(--seal, #a4342b); }
.adv-yr { color: var(--ink3, #8a8074); }
.adv-hl { color: var(--seal, #a4342b); font-weight: 800; }
.adv-note { border-left: 3px solid var(--seal, #a4342b); }
.adv-note .adv-note-t { font-family: var(--font-kai, serif); font-weight: 800; color: var(--seal, #a4342b); font-size: 15px; margin: 6px 0; }

/* ============ 科室带队伍（t2–t3 非主官）：右栏卡片 ============ */
.sq-side h3 { margin-bottom: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sq-list { display: flex; flex-direction: column; gap: 4px; margin: 6px 0; }
.sq-row { display: grid; grid-template-columns: 3.6em 2.6em 1fr 1.3em auto; align-items: center; gap: 6px; font-size: 12.5px; }
.sq-nm { font-weight: 700; color: var(--ink, #2b2622); }
.sq-p { color: var(--ink3, #8a8074); font-size: 11.5px; }
.sq-bar { height: 5px; border-radius: 3px; background: var(--line, #e3ddd3); overflow: hidden; }
.sq-bar > i { display: block; height: 100%; background: var(--seal, #a4342b); opacity: .72; }
.sq-mood { text-align: center; font-size: 13px; }
.sq-mood.ok { color: #2f7d4f; }
.sq-mood.mid { color: var(--ink3, #8a8074); }
.sq-mood.low { color: #b4574a; }
.sq-pt { color: var(--seal, #a4342b); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.sq-act { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }

/* ===== 名单风声（whisper）：一句话，也不知真假 ===== */
.wh-side h3 { margin-bottom: 6px; }
.wh-cur { margin: 4px 0 2px; }
.wh-lead { font-size: 11.5px; color: var(--ink3, #8a8074); }
.wh-text { margin: 3px 0 5px; font-size: 13px; line-height: 1.62; color: var(--ink, #2b2622); font-family: var(--font-kai, serif); }
.wh-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 11.5px; margin-bottom: 6px; }
.wh-src { color: var(--ink2, #5b554a); }
.wh-kind { padding: 0 5px; border-radius: 3px; background: var(--paper2, #ece3d4); color: var(--ink2, #5b554a); }
.wh-v { font-weight: 700; }
.wh-v.t { color: var(--ok, #3f7d55); }
.wh-v.f { color: var(--danger, #a4342b); }
.wh-v.x { color: var(--warn, #b4761f); }
.wh-act { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.wh-none { margin: 4px 0 2px; }
.wh-log { margin-top: 7px; border-top: 1px dashed var(--line, #e3ddd3); padding-top: 5px; display: flex; flex-direction: column; gap: 3px; }
.wh-li { display: grid; grid-template-columns: 5.4em 1fr auto; gap: 6px; font-size: 11.5px; align-items: baseline; }
.wh-ly { color: var(--ink3, #8a8074); font-variant-numeric: tabular-nums; }
.wh-lt { color: var(--ink2, #5b554a); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wh-lb { font-weight: 700; font-size: 11px; }
.wh-lb.t { color: var(--ok, #3f7d55); }
.wh-lb.f { color: var(--danger, #a4342b); }

/* ===== 署名台账（credit）：材料是你写的，署名不是你的 ===== */
.cr-side h3 { margin-bottom: 6px; }
.cr-list { display: flex; flex-direction: column; gap: 3px; margin: 4px 0 5px; }
.cr-li { display: grid; grid-template-columns: 5.4em 1fr auto; gap: 6px; font-size: 11.5px; align-items: baseline; }
.cr-y { color: var(--ink3, #8a8074); font-variant-numeric: tabular-nums; }
.cr-t { color: var(--ink2, #5b554a); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cr-tag { font-size: 11px; font-weight: 700; white-space: nowrap; }
.cr-tag.good { color: var(--ok, #3f7d55); }
.cr-tag.warn { color: var(--warn, #b4761f); }
.cr-tag.bad { color: var(--danger, #a4342b); }
.cr-tag.mute { color: var(--ink3, #8a8074); font-weight: 400; }
.cr-hint { font-size: 11.5px; color: var(--ink3, #8a8074); margin-top: 2px; }
.cr-line { font-size: 12px; color: var(--ink2, #5b554a); margin-top: 5px; line-height: 1.6; border-top: 1px dashed var(--line, #e3ddd3); padding-top: 5px; }

/* ===== 存档系统加固：损坏可见 / 删除 / 导出导入 ===== */
.slot-warn { display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 8px; font-size: 11px; font-weight: 700; color: #fff; background: var(--danger, #a4342b); letter-spacing: 0; }
.slot-card.broken { border-top-color: var(--danger, #a4342b); border-style: solid; background: rgba(164,52,43,.05); }
.slot-card.broken .slot-no { color: var(--danger, #a4342b); }
.slot-acts { flex-wrap: wrap; }
.slots-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0 6px; }
.fileinp { display: block; margin: 6px 0 10px; font-size: 13px; color: var(--ink2); }
.fileinp::file-selector-button { margin-right: 8px; padding: 5px 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--paper); color: var(--ink); font-size: 13px; cursor: pointer; }
.fileinp::file-selector-button:hover { border-color: var(--seal); color: var(--seal); }

/* ============ 主持全面工作面板 · 排版统一（分区醒目 + 字号层级 + 间距紧凑） ============ */
.chief-wrap .panel { font-size: 15px; }
/* 分类标题：浅红底 + 深红字 + 粗竖线，分区一眼可辨 */
.chief-wrap .cz-t {
  display: flex; align-items: center; gap: 8px;
  font-size: 16.5px; font-weight: 800; letter-spacing: 3px;
  color: var(--seal);
  background: linear-gradient(90deg, rgba(164,52,43,.12), rgba(164,52,43,.03) 70%);
  border-radius: 6px; padding: 7px 12px; margin: 18px 0 9px;
}
.chief-wrap .cz-t::before { width: 6px; height: 17px; background: linear-gradient(180deg, #c0513f, #a4342b); }
.chief-wrap .cz-t::after { border-top: 1px solid rgba(164,52,43,.22); }
.chief-wrap .cz-t:first-child { margin-top: 0; }
/* 一级信息行：政务盘面 / 治安纪检 / 禀赋战役 / 在建项目 / 任期目标 */
.chief-wrap .city-fin-mini,
.chief-wrap .police-mini,
.chief-wrap .city-side-trait,
.chief-wrap .city-side-camp,
.chief-wrap .city-side-proj,
.chief-wrap .goal-mini { font-size: 14.5px; line-height: 1.65; }
.chief-wrap .city-fin-mini { padding: 8px 11px; margin: 6px 0 8px; }
.chief-wrap .city-side-trait, .chief-wrap .city-side-camp, .chief-wrap .city-side-proj { padding: 6px 10px; margin-top: 6px; }
.chief-wrap .goal-mini { padding: 7px 10px; margin: 8px 0; }
/* 二级辅助：数据条 / 增长指标头 / 卡片状态 */
.chief-wrap .city-data-mini { font-size: 13.5px; padding: 7px 10px; }
.chief-wrap .cg-head { font-size: 14px; letter-spacing: .5px; }
.chief-wrap .cg-hint { font-size: 13px; }
.chief-wrap .cc-stat { font-size: 12.5px; }
/* 辖区卡片：名称加大 */
.chief-wrap .city-card .cc-body b { font-size: 15px; }
.chief-wrap .city-card .cc-body { padding: 6px 9px 7px; }
/* 六维属性：标签与数值加大 */
.chief-wrap .ca-cell .stat-head.small { font-size: 14.5px; }
.chief-wrap .city-attr-grid { gap: 9px 18px; }
/* 组织架构：名单字号对齐 */
.chief-wrap .org-rname { font-size: 14px; }
.chief-wrap .org-rtitle { font-size: 13px; }
.chief-wrap .org-stat { font-size: 14.5px; }
.chief-wrap .org-side-m { margin-top: 6px; }
/* 底部操作：按钮加大、间距匀称 */
.chief-wrap .city-side-foot { font-size: 14px; margin-top: 10px; gap: 8px; padding: 8px 0 2px; }
.chief-wrap .city-side-foot-btns { margin-top: 4px; padding-top: 0; justify-content: flex-start; flex-wrap: wrap; row-gap: 6px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.chief-wrap .city-side-foot-btns .city-btn { width: 100%; min-height: 44px; min-width: 0; display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 14px; font-weight: 800; padding: 8px 10px; border-radius: 7px; box-sizing: border-box; white-space: nowrap; }
.chief-wrap .city-side-foot-btns .city-bic { flex: none; }
.rank-self td { background: rgba(156, 43, 43, .06); font-weight: 600; }
.rank-sum { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 8px; }
/* 底部四按钮图标统一尺寸：emoji 字形各异（📋矮/💰高/🎯圆/🗓方），固定容器+字号强制一致 */
.city-side-foot-btns .city-btn .city-bic {
  display: inline-block; width: 22px; height: 22px; line-height: 22px;
  text-align: center; font-size: 18px; font-style: normal;
  vertical-align: -3px; margin-right: 5px;
}
.chief-wrap .city-btn { font-size: 15px; font-weight: 800; padding: 7px 15px; border-radius: 7px; }
/* 四宫格按钮统一尺寸（覆盖 foot 内嵌按钮） */
.city-side-foot-btns .city-btn { width: 100%; min-height: 44px; min-width: 0; display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 14px; font-weight: 800; padding: 8px 10px; border-radius: 7px; box-sizing: border-box; white-space: nowrap; flex: 1 1 0; }
.chief-wrap .chip.tiny { font-size: 13px; padding: 3px 10px; }
.chief-wrap .org-acts .btn, .chief-wrap .proj-acts .chip { font-size: 14.5px; padding: 6px 14px; }
/* 暗色主题适配 */
[data-theme="dark"] .chief-wrap .cz-t { background: linear-gradient(90deg, rgba(201,81,63,.22), rgba(201,81,63,.06) 70%); }

/* ============ 主持分工面板 · 区域划区（每区独立卡片，红左线 + 浅底） ============ */
.pf-sec {
  margin-bottom: 12px;
  padding: 10px 12px 12px;
  border: 1px solid rgba(140,100,40,.22);
  border-left: 3px solid var(--seal);
  border-radius: 9px;
  background: linear-gradient(180deg, rgba(255,253,246,.65), rgba(248,242,228,.4));
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.45);
}
.pf-sh {
  display: flex; align-items: center; gap: 7px;
  font-family: var(--font-kai); font-size: 16.5px; font-weight: 800;
  color: var(--seal); letter-spacing: 1px;
  border-bottom: none; padding-bottom: 0; margin-bottom: 7px;
}
.pf-sh::before { content: ''; flex: none; width: 4px; height: 15px; border-radius: 2px; background: linear-gradient(180deg, #c96a5b, #a4342b); }
.pf-sec .muted.small { font-weight: 500; }
[data-theme="dark"] .pf-sec {
  background: rgba(255,255,255,.045);
  border-color: rgba(255,255,255,.1);
  border-left-color: #c0513f;
  box-shadow: none;
}

/* ============ 主持全面工作面板 · 再细化（政务盘面拆卡 + 分区更清 + 字体清晰） ============ */
/* ① 政务盘面：大框拆成独立小卡（财政 / 治安 / 纪检 / 禀赋 / 战役 / 在建），各自成区 */
.chief-wrap .city-side-col > .cz-band {
  border: none; background: transparent; padding: 0;
  display: flex; flex-direction: column; gap: 8px;
}
.chief-wrap .cz-band .city-fin-mini,
.chief-wrap .cz-band .police-mini,
.chief-wrap .cz-band .city-side-trait,
.chief-wrap .cz-band .city-side-camp,
.chief-wrap .cz-band .city-side-proj {
  border: 1px solid rgba(140,100,40,.22);
  border-left: 3px solid var(--seal);
  border-radius: 8px;
  background: linear-gradient(180deg, rgba(255,253,246,.72), rgba(248,242,228,.5));
  padding: 8px 11px; margin: 0;
}
.chief-wrap .cz-band .city-row2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px; margin: 0; }
.chief-wrap .cz-band .city-row2 .police-mini { margin: 0; }
.chief-wrap .cz-band .police-mini { margin-top: 0; }
/* ② 子卡标题加粗醒目（财政/治安/生态前缀行） */
.chief-wrap .cz-band .city-fin-mini { font-weight: 700; color: var(--ink); }
.chief-wrap .cz-band .city-fin-mini b { color: var(--seal); }
.chief-wrap .cz-band .police-mini b { font-weight: 800; }
/* ③ 六维气象 / 增长指标 / 目标：标题与数值清晰化 */
.chief-wrap .ca-cell .stat-head.small span:last-child { font-weight: 800; }
.chief-wrap .cg-row .cg-val { font-size: 16px; }
/* ④ 组织架构：统计条 / 班子名单分块卡 */
.chief-wrap .org-side-m { background: var(--paper2); border: 1px solid rgba(140,100,40,.16); border-radius: 8px; padding: 6px 10px; display: flex; flex-wrap: wrap; gap: 4px 14px; }
.chief-wrap .org-roster { border: 1px solid rgba(140,100,40,.18); border-radius: 8px; padding: 7px 9px; background: rgba(255,253,246,.55); }
.chief-wrap .org-roster-h { margin-bottom: 4px; }
/* ⑤ 重点项目作战图：项目行成卡，进度清晰 */
.chief-wrap .proj .prow { border: 1px solid rgba(140,100,40,.16); border-radius: 7px; padding: 7px 9px; background: rgba(255,253,246,.55); margin-bottom: 6px; }
/* ⑤b 家底簿（2026-10-16）：填右栏尾部荒地。竖长窄栏 ⇒ 头部统计条 + 门槛条 + 年份分组流水 */
/* 插图比作战图的 196px 矮一档（132px，同 .ap-plate-img.xl）：
   v5 加了插图 + 可立项区后面板会高三截，右栏反而超过左栏、把左栏顶出空白，
   所以这里刻意收着点 —— 账本插图是横幅气氛，不需要作战图那种大幅面。 */
.chief-wrap .proj-ledger .proj-ill { height: 120px; }
.chief-wrap .proj-ledger .pl-head { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 6px 0 8px; }
.chief-wrap .proj-ledger .pl-upkeep { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 13px; color: #6a5a48; background: rgba(255,253,246,.55); border: 1px solid rgba(140,100,40,.16); border-left: 3px solid #9a7b3f; border-radius: 7px; padding: 5px 9px; margin-bottom: 8px; }
.chief-wrap .proj-ledger .pl-upkeep b { font-size: 15px; font-weight: 800; color: var(--ink); }
.chief-wrap .proj-ledger .pl-upkeep.warn { border-left-color: #c9922a; }
.chief-wrap .proj-ledger .pl-upkeep.warn b { color: #a9761a; }
.chief-wrap .proj-ledger .pl-upkeep.bad { border-left-color: #a4342b; background: rgba(164,52,43,.07); }
.chief-wrap .proj-ledger .pl-upkeep.bad b { color: #a4342b; }
.chief-wrap .proj-ledger .pl-hi { text-align: center; font-size: 13px; color: #6a5a48; background: rgba(255,253,246,.55); border: 1px solid rgba(140,100,40,.16); border-radius: 7px; padding: 5px 4px; }
.chief-wrap .proj-ledger .pl-hi b { display: block; font-size: 19px; font-weight: 800; color: var(--ink); line-height: 1.25; }
.chief-wrap .proj-ledger .pl-hi.bad { border-color: rgba(164,52,43,.4); }
.chief-wrap .proj-ledger .pl-hi.bad b { color: #a4342b; }
/* 累计投入：一任砸下去的总数（含烂尾，钱是真花出去的）。左侧一道红线跟别的格子区分 */
.chief-wrap .proj-ledger .pl-hi.spent { border-left: 3px solid var(--seal); }
.chief-wrap .proj-ledger .pl-hi.spent b { color: var(--seal); }
.chief-wrap .proj-ledger .pl-gate { border: 1px solid rgba(140,100,40,.18); border-radius: 8px; padding: 7px 9px; background: rgba(255,253,246,.55); margin-bottom: 8px; }
.chief-wrap .proj-ledger .pl-gate-t { font-size: 13.5px; font-weight: 700; color: var(--ink2); margin-bottom: 5px; }
.chief-wrap .proj-ledger .pl-gate-t b { font-size: 15.5px; color: var(--seal); }
.chief-wrap .proj-ledger .pl-gate.ok { border-color: rgba(63,125,85,.45); }
.chief-wrap .proj-ledger .pl-gate .stat-track { margin-bottom: 5px; }
.chief-wrap .proj-ledger .pl-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 4px; }
.chief-wrap .proj-ledger .pl-list { display: flex; flex-direction: column; gap: 7px; max-height: 300px; overflow-y: auto; padding-right: 2px; }
.chief-wrap .proj-ledger .pl-more { margin: 4px 0 0; text-align: center; }
/* ⑤c 尚未立项：可立项池的未动项。标签云形式，title 带项目描述 */
.chief-wrap .proj-ledger .pl-pool { border: 1px dashed rgba(140,100,40,.3); border-radius: 8px; padding: 7px 9px; margin-top: 8px; background: rgba(255,253,246,.4); }
.chief-wrap .proj-ledger .pl-pool.ok { border-style: solid; border-color: rgba(63,125,85,.4); }
.chief-wrap .proj-ledger .pl-pool-t { font-size: 13px; font-weight: 700; color: var(--ink2); margin-bottom: 5px; }
.chief-wrap .proj-ledger .pl-pool-t b { font-size: 15px; color: var(--seal); }
.chief-wrap .proj-ledger .pl-pool .pl-tags { display: flex; flex-wrap: wrap; gap: 4px; max-height: 72px; overflow-y: auto; padding-right: 2px; }
.chief-wrap .proj-ledger .pl-pool .tag { font-size: 11.5px; background: rgba(255,255,255,.6); border: 1px solid rgba(140,100,40,.22); color: #6a5a48; cursor: help; }
.chief-wrap .proj-ledger .pl-pool .tag:hover { border-color: var(--seal); color: var(--seal); }
.chief-wrap .proj-ledger .pl-year { border-left: 2px solid rgba(164,52,43,.3); padding-left: 9px; }
.chief-wrap .proj-ledger .pl-yn { display: block; font-size: 12px; font-weight: 800; letter-spacing: 1px; color: var(--seal); margin-bottom: 3px; }
.chief-wrap .proj-ledger .pl-row { display: flex; align-items: baseline; gap: 8px; padding: 2px 0; font-size: 13.5px; line-height: 1.5; }
.chief-wrap .proj-ledger .pl-rn { flex: 1; min-width: 0; color: var(--ink); }
.chief-wrap .proj-ledger .pl-rm { flex: 0 0 auto; font-size: 12.5px; color: #6a5a48; }
.chief-wrap .proj-ledger .pl-row.bad .pl-rn { color: #a4342b; text-decoration: line-through; text-decoration-color: rgba(164,52,43,.5); }
.chief-wrap .proj-ledger .pl-row.bad .pl-rm { color: #a4342b; font-weight: 700; }
/* ⑤d 建成加成（v6 2026-10-16）：逐项标出「这个项目给城市加了什么」。
   小号胶囊跟在项目名**同一行** —— 不另起一行，否则流水行高翻倍、限高 300px 更早触顶。 */
.chief-wrap .proj-ledger .pl-eff { display: inline-flex; flex-wrap: wrap; gap: 3px; margin-left: 5px; vertical-align: baseline; }
.chief-wrap .proj-ledger .pl-eff em { font-style: normal; font-size: 11px; line-height: 1.6; padding: 0 5px; border-radius: 4px; background: rgba(63,125,85,.12); color: #3f7d55; border: 1px solid rgba(63,125,85,.28); white-space: nowrap; }
.chief-wrap .proj-ledger .pl-eff em.down { background: rgba(164,52,43,.1); color: #a4342b; border-color: rgba(164,52,43,.28); }
/* 烂尾：加成一分没落地（引擎烂尾分支只扣民心政绩、不动城市属性）—— 灰胶囊，不假装算数 */
.chief-wrap .proj-ledger .pl-eff em.dead { background: rgba(140,100,40,.08); color: #8a6a3a; border-color: rgba(140,100,40,.24); }
/* 烂尾行整行带删除线，但「未落地」这颗胶囊得免掉 —— 否则三个字自己也被划掉 */
.chief-wrap .proj-ledger .pl-row.bad .pl-eff, .chief-wrap .proj-ledger .pl-row.bad .pl-eff em { text-decoration: none; }
/* 累计加成：这一任砸下去的钱，一共把城市抬了多少（烂尾不计 —— 钱花了，城没变） */
.chief-wrap .proj-ledger .pl-sum { display: flex; align-items: baseline; gap: 6px; margin-top: 8px; padding: 5px 9px; border-radius: 7px; background: rgba(63,125,85,.07); border: 1px solid rgba(63,125,85,.22); }
.chief-wrap .proj-ledger .pl-sum-t { flex: 0 0 auto; font-size: 12.5px; font-weight: 800; color: #3f7d55; }
.chief-wrap .proj-ledger .pl-eff.big em { font-size: 12px; }
/* ⑤e 在建（v7）：进度 + 预计加成。
   灰调、独立区块 —— 与已建成那条绿色实绩胶囊必须一眼分得开：
   在建的加成还没落地，不许看起来像已经拿到手。 */
.chief-wrap .proj-ledger .pl-wip { border: 1px solid rgba(140,100,40,.18); border-radius: 8px; padding: 7px 9px; background: rgba(255,253,246,.45); margin-bottom: 8px; }
.chief-wrap .proj-ledger .pl-wip-t { font-size: 13px; font-weight: 700; color: var(--ink2); margin-bottom: 6px; }
.chief-wrap .proj-ledger .pl-wip-t b { font-size: 15px; color: var(--seal); }
.chief-wrap .proj-ledger .pl-wrow { padding: 3px 0 5px; }
.chief-wrap .proj-ledger .pl-wrow + .pl-wrow { border-top: 1px dashed rgba(140,100,40,.16); }
.chief-wrap .proj-ledger .pl-wtop { display: flex; align-items: baseline; gap: 8px; font-size: 13px; }
.chief-wrap .proj-ledger .pl-wn { flex: 1; min-width: 0; color: var(--ink); }
.chief-wrap .proj-ledger .pl-wq { flex: 0 0 auto; font-size: 12px; color: #6a5a48; }
.chief-wrap .proj-ledger .pl-wrow .stat-track { margin: 3px 0; }
.chief-wrap .proj-ledger .pl-weff { font-size: 11.5px; color: #8a8070; }
/* ⑥ 全局字体清晰：弱化色加深（仅主持全面工作面板内） */
.chief-wrap .muted.small { color: #6a5a48; }
.chief-wrap .city-data-mini { color: #57483a; }
.chief-wrap .cg-hint { color: #6a5a48; }
.chief-wrap .cc-stat { color: #6a5a48; }
.chief-wrap .city-side-foot .muted.small { color: #6a5a48; }
/* 暗色主题适配 */
[data-theme="dark"] .chief-wrap .cz-band .city-fin-mini,
[data-theme="dark"] .chief-wrap .cz-band .police-mini,
[data-theme="dark"] .chief-wrap .cz-band .city-side-trait,
[data-theme="dark"] .chief-wrap .cz-band .city-side-camp,
[data-theme="dark"] .chief-wrap .cz-band .city-side-proj,
[data-theme="dark"] .chief-wrap .org-roster,
[data-theme="dark"] .chief-wrap .proj .prow { background: rgba(255,255,255,.045); border-color: rgba(255,255,255,.1); border-left-color: #c0513f; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-hi,
[data-theme="dark"] .chief-wrap .proj-ledger .pl-gate { background: rgba(255,255,255,.045); border-color: rgba(255,255,255,.1); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-hi,
[data-theme="dark"] .chief-wrap .proj-ledger .pl-rm { color: #b8a48c; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-upkeep { background: rgba(255,255,255,.045); border-color: rgba(255,255,255,.1); border-left-color: #b08b4a; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-upkeep.warn { border-left-color: #d8a83a; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-upkeep.bad { border-left-color: #c0513f; background: rgba(200,80,60,.1); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-upkeep.warn b { color: #e0b048; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-gate-t { color: #d8c8b0; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-year { border-left-color: rgba(200,90,70,.45); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-pool { background: rgba(255,255,255,.035); border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-pool .tag { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.14); color: #b8a48c; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-pool .tag:hover { border-color: #c0513f; color: #e0705c; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-pool.ok { border-color: rgba(90,160,110,.4); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-row.bad .pl-rn,
[data-theme="dark"] .chief-wrap .proj-ledger .pl-row.bad .pl-rm,
[data-theme="dark"] .chief-wrap .proj-ledger .pl-hi.bad b { color: #e0705c; }
/* ⑤d 建成加成（v6）暗色 */
[data-theme="dark"] .chief-wrap .proj-ledger .pl-eff em { background: rgba(120,200,150,.12); color: #8fd0a4; border-color: rgba(120,200,150,.28); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-eff em.down { background: rgba(200,80,60,.12); color: #e0705c; border-color: rgba(200,80,60,.3); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-eff em.dead { background: rgba(255,255,255,.05); color: #b8a48c; border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-sum { background: rgba(120,200,150,.08); border-color: rgba(120,200,150,.22); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-sum-t { color: #8fd0a4; }
/* ⑤e 在建（v7）暗色 */
[data-theme="dark"] .chief-wrap .proj-ledger .pl-wip { background: rgba(255,255,255,.035); border-color: rgba(255,255,255,.1); }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-wip-t { color: #d8c8b0; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-wq,
[data-theme="dark"] .chief-wrap .proj-ledger .pl-weff { color: #b8a48c; }
[data-theme="dark"] .chief-wrap .proj-ledger .pl-wrow + .pl-wrow { border-top-color: rgba(255,255,255,.1); }
[data-theme="dark"] .chief-wrap .org-side-m { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }

/* ============ 主持分工面板 · 字体放大 + 线内结构化（指标卡 / 风险行 / 局长条） ============ */
.pf-doc { font-size: 15.5px; }
.pf-doc .muted.small { font-size: 13.5px; }
/* ① 每条线的头行：线名加大，间隔拉开 */
.pf-doc .pf-line { gap: 12px; padding: 10px 2px 8px; }
.pf-doc .pf-line b { min-width: 130px; font-size: 17px; letter-spacing: 1px; }
.pf-doc .pf-line > .chip.tiny { margin-left: auto; }
/* ② 专属指标：独立小卡，数值醒目 */
.pf-doc .pf-metric {
  display: flex; align-items: baseline; gap: 10px;
  font-size: 14.5px;
  background: rgba(255,255,255,.55); border: 1px solid rgba(140,100,40,.16);
  border-left: 3px solid var(--seal); border-radius: 7px; padding: 6px 11px; width: fit-content;
}
.pf-doc .pf-m-n { font-weight: 700; color: var(--ink2); }
.pf-doc .pf-metric b { font-size: 16px; font-weight: 800; color: var(--ink); }
/* ③ 生态描写 / 风险：加大行距与字号 */
.pf-doc .pf-scene { font-size: 14.5px; line-height: 1.75; color: #4a3a2c; }
.pf-doc .pf-risk { font-size: 14px; line-height: 1.7; }
.pf-doc .pf-risk-t { font-size: 12.5px; padding: 1px 8px; }
/* ④ 局长操作条：浅底成块，字加大 */
.pf-doc .pf-chief {
  background: rgba(140,100,40,.07); border-radius: 7px;
  padding: 7px 10px; margin-top: 4px; gap: 10px;
}
.pf-doc .pf-chief-n { font-size: 15.5px; }
.pf-doc .pf-chief .chip.tiny { font-size: 13px; }
/* ⑤ 本季经营 / 条线专属 行动按钮放大 */
.pf-doc .acts .chip, .pf-doc .sec-acts .chip { font-size: 14px; padding: 5px 12px; }
/* ⑥ 公安口 / 纪检简报：全部放大 */
.pf-doc .pb-row { font-size: 15px; margin-bottom: 4px; }
.pf-doc .pb-line { font-size: 14.5px; line-height: 1.6; }
.pf-doc .pb-note { font-size: 14px; line-height: 1.6; }
.pf-doc .police-brief .muted.small, .pf-doc .disc-brief .muted.small { font-size: 13.5px; }
/* ⑦ 本年实事 / 待办 / 沿革 条目放大 */
.pf-doc .pf-item b { font-size: 15.5px; }
.pf-doc .pf-item .muted.small { font-size: 13.5px; }
/* 暗色主题微调 */
[data-theme="dark"] .pf-doc .pf-metric { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.1); border-left-color: #c0513f; }
[data-theme="dark"] .pf-doc .pf-chief { background: rgba(255,255,255,.05); }

/* ============ 主持全面工作 · 按钮与文字颜色分区（不再白字透明底） ============ */
/* ① 政务盘面内入口按钮（公安口 / 纪检台账 / 举报箱）：深棕底白字，加大 */
.chief-wrap .city-side-col .cz-band .chip {
  background: #6b4a2e; color: #fff; border: none;
  font-size: 14px; font-weight: 700; padding: 5px 13px; border-radius: 7px;
}
/* ② 组织架构 / 重点项目主操作按钮（班子建设 / 定方针 / 查看架构 / 人事研究 / 立项）：政务红底白字 */
.chief-wrap .org-side .chip,
.chief-wrap .proj .chip {
  background: var(--seal, #a4342b); color: #fff; border: none;
  font-size: 15px; font-weight: 700; padding: 6px 15px; border-radius: 7px;
}
/* ③ 组织架构统计数字 / 六维数值：加深加大，一眼可读 */
.chief-wrap .org-side-m { color: #3a2e22; font-size: 15px; font-weight: 700; }
.chief-wrap .org-side-m .ok { color: var(--ok, #3f7d55); }
.chief-wrap .ca-cell .stat-head.small span:last-child { color: #3a2e22; font-size: 16px; }
/* ④ 盘面各卡数值（财政/民生/治安等）：加深 */
.chief-wrap .cz-band .stat-head span:last-child,
.chief-wrap .cz-band .cg-val { color: #3a2e22; }
/* ⑤ 按钮悬停反馈 */
.chief-wrap .city-side-col .cz-band .chip:hover,
.chief-wrap .org-side .chip:hover,
.chief-wrap .proj .chip:hover { filter: brightness(1.12); }
/* 暗色主题：按钮底色维持，文字保持白 */
[data-theme="dark"] .chief-wrap .city-side-col .cz-band .chip { background: #7a5636; }

/* ============ 主持全面工作 · 红色字体强化（红标题 + 棕数值 + 灰说明） ============ */
/* ① 三大区标题统一政务红：组织架构 / 重点项目（与「下辖辖区/政务盘面/六维气象」一致） */
.chief-wrap .org-side > h3,
.chief-wrap .proj > h3 { color: var(--seal, #a4342b); }
/* ② 政务盘面卡内行名（财政/库款/治安/发案率等）改红 */
.chief-wrap .cz-band .stat-head span:first-child { color: var(--seal, #a4342b); }
/* ③ 增长指标 / 任期目标 标题改红 */
.chief-wrap .cg-head { color: var(--seal, #a4342b); }
.chief-wrap .goal-mini b { color: var(--seal, #a4342b); }
/* ④ 官册 / 作战图 状态条改红 */
.chief-wrap .org-ill-wrap, .chief-wrap .proj-ill-wrap { color: var(--seal, #a4342b); font-weight: 700; }
.chief-wrap .org-side-bar { color: var(--seal, #a4342b); }
/* ⑤ 城市速览（人口/财收/满意/网办）改红 */
.chief-wrap .city-data-mini span { color: var(--seal, #a4342b); font-weight: 700; }
/* ⑥ 组织架构名单标题行改红（姓名保持黑） */
.chief-wrap .org-roster-h,
.chief-wrap .org-roster b { color: var(--seal, #a4342b); }
/* ⑦ 暗色主题适配：红色标题在暗底提亮 */
[data-theme="dark"] .chief-wrap .org-side > h3,
[data-theme="dark"] .chief-wrap .proj > h3,
[data-theme="dark"] .chief-wrap .cz-band .stat-head span:first-child,
[data-theme="dark"] .chief-wrap .cg-head,
[data-theme="dark"] .chief-wrap .org-ill-wrap,
[data-theme="dark"] .chief-wrap .proj-ill-wrap,
[data-theme="dark"] .chief-wrap .city-data-mini span { color: #d96a58; }

/* ============ 政务盘面各卡行名红色（容器红 + 数值深棕 + 说明灰） ============ */
.chief-wrap .cz-band .city-fin-mini,
.chief-wrap .cz-band .police-mini,
.chief-wrap .cz-band .city-side-trait,
.chief-wrap .cz-band .city-side-camp,
.chief-wrap .cz-band .city-side-proj { color: var(--seal, #a4342b); font-weight: 700; }
.chief-wrap .cz-band .city-fin-mini b,
.chief-wrap .cz-band .police-mini b,
.chief-wrap .cz-band .city-side-trait b,
.chief-wrap .cz-band .city-side-camp b,
.chief-wrap .cz-band .city-side-proj b { color: #3a2e22; font-weight: 800; }
.chief-wrap .cz-band .muted.small { color: #6a5a48; font-weight: 500; }
[data-theme="dark"] .chief-wrap .cz-band .city-fin-mini b,
[data-theme="dark"] .chief-wrap .cz-band .police-mini b,
[data-theme="dark"] .chief-wrap .cz-band .city-side-trait b,
[data-theme="dark"] .chief-wrap .cz-band .city-side-camp b,
[data-theme="dark"] .chief-wrap .cz-band .city-side-proj b { color: #e8d9c3; }

/* ============ 六维气象卡：行名改政务红（数值保持深棕） ============ */
.chief-wrap .ca-cell .stat-head.small span:first-child { color: var(--seal, #a4342b); font-weight: 700; }
[data-theme="dark"] .chief-wrap .ca-cell .stat-head.small span:first-child { color: #d96a58; }

/* ============ 住宅（回家）：插图 · 访客卡 · 装修（2026-09-16 新增，只追加不改旧） ============ */
.hm-scene { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--card); }
.hm-scene svg { display: block; width: 100%; height: auto; }
.hm-metrics { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0; }
.hm-metrics > span { flex: 1 1 108px; min-width: 108px; background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 6px 8px; display: flex; flex-direction: column; gap: 2px; }
.hm-metrics em { font-style: normal; font-size: 13px; font-weight: var(--ui-small-weight); color: var(--ink2); font-family: var(--font-ui); }
.hm-metrics b { font-size: 19px; color: var(--seal); line-height: 1.2; font-family: var(--font-serif); }
.hm-metrics i { font-style: normal; font-size: 12px; font-weight: var(--ui-small-weight); color: var(--ink2); font-family: var(--font-ui); }
.hm-fold summary { font-family: var(--font-ui); font-size: 14px; font-weight: 700; }
.hm-fold-body { font-family: var(--font-ui); font-size: 13.5px; font-weight: var(--ui-small-weight); line-height: 1.8; }
.hm-visitor { border: 1px solid var(--line); border-left: 3px solid var(--seal); border-radius: 8px; padding: 8px 10px; background: var(--card); margin-bottom: 10px; }
.hm-vhead { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; flex-wrap: wrap; }
.hm-avatar { width: 30px; height: 30px; border-radius: 50%; background: var(--seal); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; flex: none; }
.hm-vname { font-weight: 600; }
.hm-visitor .narr { font-size: 15px; line-height: 1.9; margin-bottom: 6px; }
.hm-visitor .narr:last-of-type { margin-bottom: 4px; }
.chip.risk { border-style: dashed; border-color: var(--seal); color: var(--seal); }
/* 右栏紧凑版：细边框+小间距+小圆角 */
.layout > aside .panel {
  border: 1px solid #c8b89a !important;
  border-top: none !important;
  border-left: none !important;
  border-radius: 4px !important;
  padding: 8px 10px !important;
  margin-bottom: 8px !important;
  box-shadow: none !important;
}
.layout > aside .panel h3 {
  margin: 0 0 6px !important;
  font-size: 12px !important;
  letter-spacing: 0.5px !important;
  font-weight: 700 !important;
  border-left: none !important;
  padding-left: 0 !important;
  color: #8c1f28 !important;
  font-family: inherit !important;
}
.layout > aside .panel h3::before {
  content: '◆' !important;
  color: #8c1f28 !important;
  margin-right: 4px;
  font-size: 10px;
}
.layout > aside .panel h3 .muted {
  font-size: 10px !important;
  font-weight: 400 !important;
  color: #999 !important;
}

/* 班底与表态：嫡系+账本+公开表态 合并框 */
.team-ledger { display: block !important; }
.tl-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.tl-title { font-size: 14px; font-weight: 700; color: #8c1f28; letter-spacing: 1px; }
.tl-ill { position: relative; border-radius: 5px; overflow: hidden; margin-bottom: 8px; border: 1px solid #e4d5b8; }
.tl-ill-img { width: 100%; display: block; max-height: 110px; object-fit: cover; object-position: center; }
.tl-ill-tag { position: absolute; left: 6px; top: 6px; font-size: 10px; color: #8c1f28; background: rgba(245,236,216,.92); border-radius: 3px; padding: 1px 6px; font-weight: 600; }
.tl-sec { margin-bottom: 8px; }
.tl-sec-h { font-size: 12px; font-weight: 700; color: #1a1a1a; margin-bottom: 5px; }
.tl-sec-h .tl-watch { color: #8c1f28; font-size: 14px; }
.tl-disc-row { background: #faf6ec; border: 1px solid #e8dcc4; border-radius: 4px; padding: 5px 7px; margin-bottom: 5px; }
.tl-disc-row.cur { border-color: #8c1f28; }
.tl-disc-h { font-size: 11px; margin-bottom: 4px; }
.tl-disc-h .disc-stage { color: #8c1f28; font-weight: 600; }
.tl-disc-bars { display: flex; align-items: center; gap: 4px; font-size: 10px; }
.tl-barlab { color: #999; }
.tl-barval { color: #333; }
.tl-disc-bars .stat-track { flex: 1; }
.tl-disc-empty { font-size: 11px; line-height: 1.6; background: #faf6ec; border: 1px dashed #e8dcc4; border-radius: 4px; padding: 6px 8px; }
.tl-bar { height: 6px; background: #efe6d4; border-radius: 3px; overflow: hidden; margin: 5px 0; }
.tl-bar i { display: block; height: 100%; background: #8c1f28; border-radius: 3px; }
.tl-bar i.up { background: #2d6a2d; }
.tl-bar i.dn { background: #d4a017; }
.tl-meta { line-height: 1.5; }
.tl-hot { color: #8c1f28; }
.tl-empty { font-size: 11px; margin-top: 3px; }
.tl-acts { display: flex; gap: 6px; margin-top: 4px; }
.tl-btn-main { flex: 1.4; text-align: center; background: #8c1f28; color: #fff !important; border: none; font-size: 12px; font-weight: 700; padding: 7px 0; border-radius: 4px; cursor: pointer; }
.tl-btn-sub { flex: 1; text-align: center; background: #fff; color: #8c1f28 !important; border: 1.5px solid #8c1f28; font-size: 12px; font-weight: 600; padding: 7px 0; border-radius: 4px; cursor: pointer; }
.tl-btn-main:disabled, .tl-btn-sub:disabled { opacity: .55; cursor: not-allowed; }

/* 右栏红框统一：名单风声 / 两办联络 / 赴上级对接 / 住处 / 案头工作台 / 嫡系 —— 与「班底与表态」一致（外红框 + 米白底） */
.layout > aside .wh-side,
.layout > aside .sec-panel,
.layout > aside .lobby-side,
.layout > aside .home-side,
.layout > aside .desk-side,
.layout > aside .panel.disc,
.layout > aside .panel.proj {
  border: 3px solid var(--seal) !important;
  border-radius: 10px;
  background: var(--card) !important;
  box-shadow: var(--shadow);
}
.layout > aside .wh-side,
.layout > aside .sec-panel,
.layout > aside .lobby-side { padding: 12px 14px; }

/* 案头工作台内部块：去掉内嵌红框（desk-subject / 在办 / 空闲 / 岔子 / 署名），仅保留外面容器红框 */
.desk-side .desk-subject { border: 1px solid #ead9c6; background: rgba(250,240,233,.6); }
.desk-side .desk-active,
.desk-side .desk-idle,
.desk-side .desk-twist { border: 1px solid #ead9c6; background: rgba(250,240,233,.35); }
.desk-side .desk-credit { border: 1px dashed #d8c8a8; }


/* ===== 群团工作总览 ===== */
.union-stats { display:flex; flex-wrap:wrap; gap:8px 14px; margin:10px 0 6px; padding:10px 12px; border:1px solid #e5c9b0; border-radius:8px; background:#fdf8f1; font-size:13px; color:#6b4f3a; }
.union-stats b { color:#b03a2e; font-weight:700; margin-left:2px; }
.union-tools { display:flex; gap:6px; margin:8px 0 10px; }
.union-quip { margin:8px 0; padding:8px 12px; border-left:3px solid #c0392b; background:#fdf3ee; color:#7a4a3a; font-size:13px; border-radius:0 6px 6px 0; }
.union-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:12px; margin:6px 0 10px; }
.union-card { border:1px solid #e2c7b2; border-radius:10px; overflow:hidden; background:#fffdf9; display:flex; flex-direction:column; }
.union-ill { position:relative; height:120px; background:#f4ecdf; }
.union-ill img { width:100%; height:100%; object-fit: cover; object-position: center; display:block; }
.union-ill-t { position:absolute; left:0; right:0; bottom:0; padding:4px 10px; background:linear-gradient(180deg,rgba(0,0,0,0),rgba(60,35,20,.72)); color:#fff; font-weight:700; font-size:14px; }
.union-body { padding:10px 12px; display:flex; flex-direction:column; gap:6px; flex:1; }
.union-h { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.union-meta { display:grid; grid-template-columns:repeat(2,1fr); gap:3px 10px; color:#6b5a48; font-size:12px; }
.union-meta b.ok { color:#2e7d32; }
.union-foot { margin-top:auto; padding-top:6px; border-top:1px dashed #e5d4c2; display:flex; align-items:center; justify-content:space-between; gap:8px; }
.gtag.hot { border:1px solid #c0392b; background:#fdecea; color:#c0392b; border-radius:10px; padding:1px 8px; font-size:12px; }

/* ===== 群团动态增强 ===== */
.ev-ill { margin-bottom:10px; border-radius:8px; overflow:hidden; border:1px solid #e5d4c2; }
.ev-ill img { width:100%; height:220px; object-fit: cover; object-position:center; display:block; }
.union-banner { border-left:3px solid #b03a2e !important; }
.elder-card { border-style:dashed; }
.union-quip b { color:#b03a2e; }

/* ==================== 主菜单古风两栏布局（2026091809） ==================== */
.mhead.mhead-flex { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; text-align: left; }
.mhead-flex .mhead-main { flex: 1 1 340px; min-width: 280px; text-align: center; }
.mhead-top-right { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex: 0 0 auto; padding-top: 6px; }
.act-banner.mini { padding: 6px 16px; border-radius: 20px; border: 1.5px solid var(--seal); background: linear-gradient(135deg, rgba(164,52,43,.1), rgba(164,52,43,.16)); display: flex; align-items: center; gap: 8px; box-shadow: 0 2px 8px rgba(164,52,43,.18); }
.act-banner.mini .act-badge-t { color: var(--seal); font-size: 14px; font-weight: 900; letter-spacing: 1px; }
.act-banner.mini .act-badge-s { display: block; color: rgba(120,90,40,.85); font-size: 11px; font-weight: 700; }
.mhead-author { font-size: 13px; color: #7a5c33; font-weight: 700; letter-spacing: 1px; }
.menu-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 12px 0 14px; padding: 10px 14px; border: 1px solid var(--line2); border-radius: 10px; background: linear-gradient(90deg, rgba(255,253,246,.9), rgba(248,243,229,.75)); box-shadow: var(--shadow); }
.menu-tools .tool-spacer { margin-left: auto; }
.donate-group { display: inline-flex; gap: 8px; align-items: center; }
.donate-pill { display: inline-flex; align-items: center; gap: 7px; padding: 8px 18px; color: #fff; text-decoration: none; border-radius: 24px; font-size: 13.5px; font-weight: 800; letter-spacing: 1px; transition: transform .15s; box-shadow: 0 2px 8px rgba(39,174,96,.3); }
.donate-pill:hover { transform: scale(1.05); }
.donate-pill.heart { background: linear-gradient(135deg, #27ae60, #2ecc71); }
.donate-pill.contact { background: linear-gradient(135deg, #27ae60, #2ecc71); box-shadow: 0 2px 8px rgba(39,174,96,.3); }
.donate-pill img { width: 24px; height: 24px; vertical-align: middle; border-radius: 4px; }
.menu-legacy-line { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 18px; font-size: 13.5px; color: var(--ink2); }
.menu-legacy-line b { color: var(--seal); font-size: 17px; font-weight: 900; }
.createform.menu-cols { display: flex; gap: 16px; align-items: stretch; padding: 18px 20px; }
.form-col { flex: 1 1 0; min-width: 280px; border: 1.5px solid rgba(154,123,63,.65); border-radius: 10px; background: rgba(255,253,246,.5); padding: 14px 16px; box-sizing: border-box; box-shadow: inset 0 0 0 1px rgba(255,255,255,.5); }
.form-col-t { font-size: 16px; font-weight: 900; color: var(--seal); letter-spacing: 3px; border-left: 4px solid var(--seal); padding-left: 8px; margin-bottom: 12px; font-family: var(--font-kai); }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; }
.form-grid .row.full { grid-column: 1 / -1; }
.form-col .form-col-load { margin-top: 12px; text-align: center; }
@media (max-width: 940px) {
  .createform.menu-cols { flex-direction: column; }
  .form-col { flex: 1 1 auto; }
  .mhead.mhead-flex { flex-direction: column; align-items: center; }
  .mhead-top-right { align-items: center; }
}

/* ========== head-side rail (hsr-*) ========== */
.menu-donate-row {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: center;
  padding: 2px 0 10px; margin-bottom: 6px;
  border-bottom: 1px dashed rgba(154,123,63,.4);
}
.menu-donate-row .donate-pill { padding: 8px 18px; font-size: 13.5px; letter-spacing: 1px; }


/* 布局修正：右侧栏 1500 断点不得覆盖 900 单列（窄窗主区占满） */
@media (max-width: 900px) {
  .layout { grid-template-columns: 1fr; }
}

/* 政务盘面：公安口/纪检台账/举报箱 与组织架构按钮同款、强制横排（覆盖 cz-band grid） */
.chief-wrap .cz-band .city-row2-btns { display: flex; flex-wrap: nowrap; gap: 6px; margin: 4px 0 2px; }
.chief-wrap .cz-band .city-row2-btns .btn { flex: 1 1 0; min-width: 0; font-size: 13.5px; padding: 5px 8px; white-space: nowrap; text-align: center; }

/* ---- 省属高校侧栏框：插图收紧为条带，配字/按钮完整保留（2026-09-18） ---- */
.chief-wrap .city-side-right .city-univ { aspect-ratio: auto; }
.city-univ { aspect-ratio: auto; }
.chief-wrap .city-univ .cu-ill { flex: 0 0 60px; min-height: 0; }
.chief-wrap .city-univ .cu-ill img { height: 60px; min-height: 0; object-fit: cover; }
.city-univ .cu-ill { flex: 0 0 60px; min-height: 0; }
.city-univ .cu-ill img { height: 60px; min-height: 0; object-fit: cover; }

/* ---- 年度财政决算报告（2026-09-18） ---- */
.fin-tt { font-family: var(--font-kai, KaiTi, serif); font-size: 17px; color: #a4342b; text-align: center; margin: 10px 0 8px; line-height: 1.6; }
.fin-sum { margin: 3px 0; font-size: 14px; }
.fin-sec { background: rgba(164,52,43,.08); font-weight: 700; color: #a4342b; }
.econ-paper .tbl td.fin-sec { text-align: center; letter-spacing: 1px; }

/* ========== head-side rail (hsr-*) ========== */
.city-row2-btns .btn { padding: 5px 11px; font-size: 12.5px; border-radius: 6px; }
.city-row2-btns { gap: 6px; }

/* ========== head-side rail (hsr-*) ========== */
.city-side-foot-btns .btn { padding: 5px 11px; font-size: 12.5px; border-radius: 6px; letter-spacing: .5px; }
.city-side-foot-btns .city-btn { font-size: 12.5px; padding: 5px 11px; }

/* ==================== 省属高校系统框 · 撑满右栏剩余高度（2026-09-18） ==================== */
/* 原来框体塌成一行内容、右栏下面大片留白；现在右栏拉伸、框体吃掉剩余高度，插图铺满 */
.chief-wrap .city-side-right { align-self: stretch; }
.chief-wrap .city-side-right .city-univ { flex: 1 1 auto; min-height: 230px; }
.chief-wrap .city-univ .cu-t { font-size: 16px; }
.chief-wrap .city-univ .cu-stat { font-size: 13.5px; margin: 5px 0 9px; }
.chief-wrap .city-univ .city-btn { font-size: 14.5px; padding: 7px 18px; }

/* ========== head-side rail (hsr-*) ========== */
.chief-wrap .city-side-right .city-univ { margin-top: 0; flex: 1 1 auto; width: 100%; aspect-ratio: auto; min-height: 380px; align-self: stretch; }
.chief-wrap .city-univ .cu-ill { flex: 1 1 auto; min-height: 200px; }
.chief-wrap .city-univ .cu-ill img { width: 100%; height: 100%; min-height: 200px; object-fit: cover; object-position: center; }
.chief-wrap .city-univ .cu-body { padding: 14px 16px 16px; border-top: 2px solid rgba(176,58,46,.18); }
.chief-wrap .city-univ .cu-t { font-size: 16px; }
.chief-wrap .city-univ .cu-stat { font-size: 13.5px; }
.chief-wrap .city-univ .city-btn { font-size: 13.5px; padding: 6px 14px; align-self: flex-start; }

/* ========== head-side rail (hsr-*) ========== */
.chief-wrap .city-side-right .city-univ { margin-top: 45px; flex: 0 0 auto; width: 100%; aspect-ratio: auto; min-height: 0; align-self: start; }
.chief-wrap .city-univ .cu-ill { flex: 0 0 170px; min-height: 0; }
.chief-wrap .city-univ .cu-ill img { height: 170px; min-height: 0; width: 100%; object-fit: cover; object-position: center; }
.chief-wrap .city-univ .cu-body { padding: 10px 14px 12px; border-top: 2px solid rgba(176,58,46,.18); }
.chief-wrap .city-univ .cu-t { font-size: 15px; }
.chief-wrap .city-univ .cu-stat { font-size: 12.5px; margin: 3px 0 6px; }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-six-duo { display: flex; gap: 10px; margin: 6px 0 4px; align-items: stretch; } .chief-wrap .city-six-col { flex: 1 1 0; min-width: 0; } .chief-wrap .city-six-col .cz-t { margin: 4px 0 6px; } .chief-wrap .city-six-col .city-attr-grid { border: 1px solid rgba(140,100,40,.16); border-radius: 9px; padding: 7px 9px; background: rgba(255,253,246,.45); } .chief-wrap .city-six-col .zs-hold { border: 1px dashed rgba(140,100,40,.4); border-radius: 9px; background: rgba(255,253,246,.45); min-height: 128px; display: flex; align-items: center; justify-content: center; color: #9a8b6f; font-size: 16px; font-weight: 700; letter-spacing: 8px; } [data-theme='dark'] .chief-wrap .city-six-col .city-attr-grid, [data-theme='dark'] .chief-wrap .city-six-col .zs-hold { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); } [data-theme='dark'] .chief-wrap .city-six-col .zs-hold { color: #8f8271; }
@media (max-width: 760px) { .chief-wrap .city-six-duo { flex-direction: column; } .chief-wrap .city-six-col .zs-hold { min-height: 70px; } }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-side-right .city-invest { margin: 0 0 10px; } .chief-wrap .city-side-right .city-invest .cz-t { margin: 2px 0 6px; } .chief-wrap .city-side-right .city-invest .zs-hold { border: 1px dashed rgba(140,100,40,.4); border-radius: 9px; background: rgba(255,253,246,.45); min-height: 240px; display: flex; align-items: center; justify-content: center; color: #9a8b6f; font-size: 16px; font-weight: 700; letter-spacing: 8px; } [data-theme='dark'] .chief-wrap .city-side-right .city-invest .zs-hold { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); color: #8f8271; }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-side-right .city-univ .cz-t { margin: 2px 0 6px; } .chief-wrap .city-side-right .city-univ .cu-body .cu-t { display: none; } .chief-wrap .city-side-right .city-invest { margin: 18px 0 0; }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-side-grid { grid-template-columns: minmax(0, 1fr) 300px; }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-univ .cu-body .chip { padding: 3px 10px; font-size: 12px; } .chief-wrap .city-side-right .city-invest { margin-top: 17px; }
/* ========== head-side rail (hsr-*) ========== */ .chief-wrap .city-univ .cu-tt { display: flex; align-items: center; gap: 6px; margin: 2px 0 6px; font-family: inherit; font-size: 14px; font-weight: 800; letter-spacing: 1.5px; color: #8a2b23; } .chief-wrap .city-univ .cu-tt::before { content: ''; flex: none; width: 5px; height: 14px; border-radius: 2px; background: linear-gradient(180deg, #c96a5b, #a4342b); } [data-theme='dark'] .chief-wrap .city-univ .cu-tt { color: #d96a58; }

/* ========== head-side rail (hsr-*) ========== */
/* 城市面板那一格：与省属高校同款（插图 + 状态 + 按钮） */
.chief-wrap .city-side-right .city-invest { margin-top: 10px; flex: 0 0 auto; width: 100%; }
.chief-wrap .city-invest { display: flex; flex-direction: column; border: 1px solid rgba(140,100,40,.16); border-radius: 10px; overflow: hidden; background: rgba(255,253,246,.45); }
.chief-wrap .city-invest .cu-t { flex: 0 0 auto; padding: 7px 12px 5px; font-size: 14px; font-weight: 800; color: #a4342b; letter-spacing: .5px; }
.chief-wrap .city-invest .cu-ill { flex: 0 0 170px; }
.chief-wrap .city-invest .cu-ill img { width: 100%; height: 170px; object-fit: cover; object-position: center; display: block; }
.chief-wrap .city-invest .cu-body { padding: 16px 16px 18px; border-top: 2px solid rgba(176,58,46,.18); display: flex; flex-direction: column; gap: 12px; }
.chief-wrap .city-invest .cu-stat { font-size: 13.5px; line-height: 2.0; color: var(--ink2); margin: 2px 0; }
.chief-wrap .city-invest .cu-stat b { color: var(--ink); }
.chief-wrap .city-invest .city-btn { align-self: flex-start; font-size: 12.5px; padding: 5px 12px; }
[data-theme='dark'] .chief-wrap .city-invest { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
[data-theme='dark'] .chief-wrap .city-invest .cu-t { color: #d96a58; }

/* 大会面板 */
.iv-dim { padding: 8px 0 10px; border-bottom: 1px solid rgba(140,100,40,.12); }
.iv-dim:last-child { border-bottom: none; }
.iv-dim-h { font-size: 13.5px; font-weight: 700; color: var(--ink); margin-bottom: 6px; display: flex; align-items: center; gap: 8px; }
.iv-firm { padding: 10px 12px; margin-bottom: 10px; background: rgba(255,255,255,.55); border: 1.5px solid rgba(30,22,8,.5); outline: 1px solid rgba(164,52,43,.14); outline-offset: 2.5px; border-radius: 10px; box-shadow: 0 1px 3px rgba(30,22,8,.08); }
.iv-firm:last-child { margin-bottom: 0; }
.iv-firm-h { font-size: 13.5px; color: var(--ink); margin-bottom: 5px; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.iv-amt { color: var(--seal2); font-weight: 700; }
.iv-btns { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.iv-sum { margin-top: 10px; padding: 9px 11px; border-radius: 8px; background: rgba(154,123,63,.09); font-size: 13px; line-height: 1.7; color: var(--ink2); font-weight: 550; }
.iv-sum b { color: var(--ink); }
.iv-tag { display: inline-block; padding: 1px 7px; border-radius: 4px; font-size: 11.5px; font-weight: 700; border: 1px solid; }
.iv-tag.ok { color: var(--ok); border-color: rgba(63,125,85,.4); background: rgba(63,125,85,.08); }
.iv-tag.warn { color: var(--warn); border-color: rgba(180,118,31,.4); background: rgba(180,118,31,.08); }
.iv-tag.bad { color: var(--danger); border-color: rgba(164,52,43,.4); background: rgba(164,52,43,.08); }
[data-theme='dark'] .iv-dim, [data-theme='dark'] .iv-firm { border-color: rgba(255,255,255,.18); }
[data-theme='dark'] .iv-firm { background: rgba(255,255,255,.05); }
[data-theme='dark'] .iv-sum { background: rgba(255,255,255,.05); }

/* ---- 招商面板：指标条 / 档位键 / 元信息 / 阶段条 / 承诺账 / 考核表 ---- */

/* 上级指标大数字 */
.iv-gauge { display: flex; align-items: baseline; gap: 8px; margin: 2px 0 8px; padding: 7px 11px; border-radius: 8px; background: rgba(154,123,63,.09); }
.iv-gauge-k { font-size: 12.5px; color: var(--ink2); }
.iv-gauge-v { font-size: 20px; font-weight: 700; line-height: 1; color: #a4342b; }
.iv-gauge-v i { font-size: 12px; font-weight: 400; font-style: normal; color: var(--ink2); margin-left: 2px; }
[data-theme='dark'] .iv-gauge { background: rgba(255,255,255,.05); }
[data-theme='dark'] .iv-gauge-v { color: #d96a58; }

/* 指标条：用地 / 能耗 */
.iv-bar { display: flex; align-items: center; gap: 8px; margin: 5px 0; font-size: 12.5px; }
.iv-bar-l { flex: 0 0 56px; color: var(--ink2); }
.iv-bar-t { flex: 1 1 auto; height: 7px; border-radius: 4px; background: rgba(140,100,40,.16); overflow: hidden; }
.iv-bar-t i { display: block; height: 100%; border-radius: 4px; }
.iv-bar-t i.ok { background: #639922; }
.iv-bar-t i.warn { background: #ba7517; }
.iv-bar-t i.bad { background: #a32d2d; }
.iv-bar-n { flex: 0 0 auto; font-weight: 700; font-variant-numeric: tabular-nums; }
.iv-bar-n.ok { color: var(--ink2); }
.iv-bar-n.warn { color: #854f0b; }
.iv-bar-n.bad { color: #a32d2d; }
[data-theme='dark'] .iv-bar-t { background: rgba(255,255,255,.12); }
[data-theme='dark'] .iv-bar-n.warn { color: #ef9f27; }
[data-theme='dark'] .iv-bar-n.bad { color: #f09595; }

/* 政策包档位键：白/黄/红 三色，选中态描边加粗 */
.iv-key { border-left: 3px solid transparent; }
.iv-key.white { border-left-color: #639922; }
.iv-key.yellow { border-left-color: #ba7517; }
.iv-key.red { border-left-color: #a32d2d; }
.iv-key.white.on { background: rgba(99,153,34,.14); border-color: #639922; color: #27500a; }
.iv-key.yellow.on { background: rgba(186,117,23,.14); border-color: #ba7517; color: #633806; }
.iv-key.red.on { background: rgba(163,45,45,.13); border-color: #a32d2d; color: #791f1f; }
[data-theme='dark'] .iv-key.white.on { color: #c0dd97; }
[data-theme='dark'] .iv-key.yellow.on { color: #fac775; }
[data-theme='dark'] .iv-key.red.on { color: #f7c1c1; }

/* 企业卡片 / 项目卡片的元信息行 */
.iv-firm-ic { font-size: 15px; line-height: 1; }
.iv-quote { padding-left: 9px; border-left: 2px solid rgba(140,100,40,.28); font-style: italic; }
.iv-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.iv-meta-i { padding: 1px 7px; border-radius: 4px; font-size: 12px; color: var(--ink2); background: rgba(140,100,40,.09); font-weight: 600; }
.iv-meta-i b { color: var(--ink); font-weight: 700; }
.iv-meta-i.warn { background: rgba(180,118,31,.16); color: #854f0b; }
.iv-meta-i.ok { background: rgba(63,125,85,.14); color: #27500a; }
.iv-meta-i.bad { background: rgba(164,52,43,.13); color: #791f1f; }
[data-theme='dark'] .iv-meta-i { background: rgba(255,255,255,.07); }
[data-theme='dark'] .iv-meta-i.warn { color: #ef9f27; }
[data-theme='dark'] .iv-meta-i.ok { color: #c0dd97; }
[data-theme='dark'] .iv-meta-i.bad { color: #f09595; }

/* 三阶段进度条：签约 → 落地 → 投产 */
.iv-step { display: flex; align-items: center; gap: 4px; margin: 7px 0 2px; }
.iv-step-i { padding: 1px 8px; border-radius: 10px; font-size: 11.5px; border: 1px solid rgba(140,100,40,.3); color: var(--ink3); background: transparent; }
.iv-step-i.done { background: rgba(99,153,34,.16); border-color: #639922; color: #27500a; }
.iv-step-i.cur { background: #ba7517; border-color: #ba7517; color: #fff; font-weight: 700; }
.iv-step-a { flex: 0 0 14px; height: 1px; background: rgba(140,100,40,.34); }
.iv-step.dead .iv-step-i { border-color: rgba(164,52,43,.4); color: #791f1f; text-decoration: line-through; }
[data-theme='dark'] .iv-step-i.done { color: #c0dd97; }
[data-theme='dark'] .iv-step.dead .iv-step-i { color: #f09595; }

/* 承诺账：一行一笔 */
.iv-pm { margin-top: 4px; }
.iv-pm-r { display: flex; align-items: baseline; gap: 8px; padding: 4px 9px; margin: 3px 0; border-radius: 6px; border-left: 3px solid rgba(140,100,40,.3); background: rgba(140,100,40,.06); font-size: 12.5px; }
.iv-pm-r.ok { border-left-color: #639922; }
.iv-pm-r.warn { border-left-color: #ba7517; }
.iv-pm-r.bad { border-left-color: #a32d2d; background: rgba(164,52,43,.08); }
.iv-pm-n { flex: 1 1 auto; color: var(--ink); }
.iv-pm-a { flex: 0 0 auto; font-weight: 700; font-variant-numeric: tabular-nums; }
.iv-pm-s { flex: 0 0 auto; font-size: 11.5px; color: var(--ink3); }
.iv-pm-r.bad .iv-pm-a, .iv-pm-r.bad .iv-pm-s { color: #791f1f; }
[data-theme='dark'] .iv-pm-r { background: rgba(255,255,255,.05); }
[data-theme='dark'] .iv-pm-r.bad .iv-pm-a, [data-theme='dark'] .iv-pm-r.bad .iv-pm-s { color: #f09595; }

/* 考核表：3:5:2 逐行 */
.iv-score { margin: 4px 0 2px; }
.iv-score-r { display: flex; align-items: baseline; gap: 10px; padding: 4px 10px; border-bottom: 1px dashed rgba(140,100,40,.2); font-size: 12.5px; }
.iv-score-r:last-child { border-bottom: none; }
.iv-score-r span { flex: 0 0 84px; color: var(--ink2); }
.iv-score-r i { flex: 1 1 auto; font-style: normal; color: var(--ink3); font-variant-numeric: tabular-nums; }
.iv-score-r b { flex: 0 0 auto; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--ink); }
.iv-score-r.bad b, .iv-score-r.bad i { color: #a32d2d; }
.iv-score-r.total { margin-top: 3px; padding-top: 6px; border-top: 1px solid rgba(140,100,40,.3); border-bottom: none; }
.iv-score-r.total b { font-size: 15px; color: #a4342b; }
[data-theme='dark'] .iv-score-r.bad b, [data-theme='dark'] .iv-score-r.bad i { color: #f09595; }
[data-theme='dark'] .iv-score-r.total b { color: #d96a58; }

/* ========== head-side rail (hsr-*) ========== */
.estate-row{display:grid;grid-template-columns:130px 1fr;gap:10px;align-items:center;padding:10px 12px;border:1px solid rgba(140,100,40,.16);border-radius:10px;margin-bottom:8px;background:rgba(255,253,246,.5);}
.estate-row.sel{border-color:#a4342b;background:rgba(164,52,43,.06);}
.estate-left{display:flex;align-items:center;gap:8px;font-size:14px;color:#57483a;font-weight:700;}
.estate-ic{flex:none;width:36px;height:36px;border-radius:8px;background:rgba(164,52,43,.1);display:flex;align-items:center;justify-content:center;font-size:20px;}
.estate-right{display:flex;align-items:center;gap:12px;min-width:0;}
.estate-img{flex:none;width:64px;height:64px;border-radius:8px;object-fit:cover;border:1px solid rgba(140,100,40,.2);background:#f0e8d8;}
.estate-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.estate-line{font-size:13.5px;color:#57483a;}
.estate-line b{color:#a4342b;}
.estate-act{flex:none;}
[data-theme="dark"] .estate-row{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.14);}
[data-theme="dark"] .estate-left{color:#d9c9a8;}
[data-theme="dark"] .estate-line{color:#c9b898;}
@media(max-width:640px){.estate-row{grid-template-columns:1fr;gap:6px;}.estate-right{flex-wrap:wrap;}}

/* ========== head-side rail (hsr-*) ========== */
.prop-cat{margin-bottom:14px;}
.prop-cat-t{display:block;font-size:14px;font-weight:800;color:#a4342b;margin-bottom:6px;letter-spacing:1px;}


/* ---- chip tone：给招商/财政等面板的 chip 选项按风险/性质显色（2026-09-19）
   之前 chip 默认只有 1px 灰描边和小图标，亮色主题下按钮整体看着发白，
   几个选项摆在一起区分不开。现在按 tone 给底色，
   good=绿、warn=橙、bad=红、info=蓝、mute=灰。
   关键：底色要够浅才能让 chip 上的图标/文字保持可读。 */
.chip.tiny.tone-good { background: rgba(63,125,85,.14); color: #27500a; border-color: rgba(63,125,85,.45); }
.chip.tiny.tone-good:hover:not([disabled]) { background: rgba(63,125,85,.24); }
.chip.tiny.tone-warn { background: rgba(186,117,23,.14); color: #854f0b; border-color: rgba(186,117,23,.45); }
.chip.tiny.tone-warn:hover:not([disabled]) { background: rgba(186,117,23,.24); }
.chip.tiny.tone-bad  { background: rgba(164,52,43,.13); color: #791f1f; border-color: rgba(164,52,43,.45); }
.chip.tiny.tone-bad:hover:not([disabled])  { background: rgba(164,52,43,.22); }
.chip.tiny.tone-info { background: rgba(47,93,140,.13); color: #1f3f63; border-color: rgba(47,93,140,.42); }
.chip.tiny.tone-info:hover:not([disabled]) { background: rgba(47,93,140,.22); }
.chip.tiny.tone-mute { background: rgba(140,100,40,.08); color: #4d3b1f; border-color: rgba(140,100,40,.28); }
.chip.tiny.tone-mute:hover:not([disabled]) { background: rgba(140,100,40,.16); }

/* 选中态（在 primary 上叠加 tone）：底色更深、字色翻白。tone-mute + primary
   默认就是纯朱红；其它色调都按 tone 的语义色加深一档。 */
.chip.tiny.tone-good.primary { background: #27500a; border-color: #27500a; color: #fff; }
.chip.tiny.tone-warn.primary { background: #854f0b; border-color: #854f0b; color: #fff; }
.chip.tiny.tone-bad.primary  { background: #791f1f; border-color: #791f1f; color: #fff; }
.chip.tiny.tone-info.primary { background: #1f3f63; border-color: #1f3f63; color: #fff; }
.chip.tiny.tone-mute.primary { background: var(--seal); border-color: var(--seal); color: #fff; }

/* 暗色主题：底色更亮，描边更亮 */
[data-theme='dark'] .chip.tiny.tone-good { background: rgba(108,180,120,.16); color: #b6e3ad; border-color: rgba(108,180,120,.5); }
[data-theme='dark'] .chip.tiny.tone-warn { background: rgba(216,159,70,.16); color: #f0c97f; border-color: rgba(216,159,70,.5); }
[data-theme='dark'] .chip.tiny.tone-bad  { background: rgba(228,108,98,.4); border-color: rgba(228,108,98,.5); }
[data-theme='dark'] .chip.tiny.tone-info { background: rgba(110,150,200,.16); color: #b9d2ee; border-color: rgba(110,150,200,.5); }
[data-theme='dark'] .chip.tiny.tone-mute { background: rgba(255,255,255,.08); color: #d6c8a3; border-color: rgba(255,255,255,.22); }

.story-block { margin-bottom: 12px; line-height: 1.8; } .story-block p { margin: 6px 0; }

/* 住处折叠按钮 */
.hm-fold { margin: 6px 0; border: 1px solid #d4c5a9; border-radius: 8px; background: #fbf7ee; }
.hm-fold summary { padding: 8px 12px; cursor: pointer; font-weight: 600; font-size: 13.5px; color: #5a3e2b; list-style: none; user-select: none; }
.hm-fold summary::before { content: '▸ '; color: #8c1f28; }
.hm-fold[open] summary::before { content: '▾ '; }
.hm-fold-body { padding: 8px 12px; border-top: 1px solid #e4d5b8; }


/* 主持工作面板：6个大按钮自动贴底 */
.city-side .city-side-foot-btns { margin-top: 10px; padding-top: 12px; border-top: 2px solid var(--seal); }
.desk-side .city-side-foot-btns { margin-top: auto !important; }


/* 主持工作面板：左列改成flex列，6个大按钮自动贴底 */
/* 2026-10-13 移除：.city-side-col 不再强制 flex 列，foot-btns 紧贴 foot，避免 grid stretch 下的贴底大空白（desk-side 贴底由下方 6395 保留） */
/* 2026-10-13 移除：同 6399 */


/* 右边面板：公安口/纪检台账/举报箱 三个按钮大小一致 */
.city-side-right .city-invest .city-btn { flex: 1; min-width: 0; white-space: nowrap; }

/* 游戏内页面弱化红色背景：半透明米色盖底，正文清晰，两侧仍露红水墨 */
#gameScreen { background: linear-gradient(rgba(251,247,239,.92), rgba(245,239,228,.94)); border-radius: 12px; }

/* ========== head-side rail (hsr-*) ========== */
.layout > aside.aside-head {
  grid-column: 3 !important;
  grid-row: 1 !important;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  align-self: start !important;
  justify-content: flex-start;
  gap: 14px;
  width: 100%;
  max-width: none;
  margin-left: 0;
  margin-top: 0;
  padding-top: 0;
  min-width: 0;
  position: sticky;
  /* ★ 同 aside-ap：让开 #backLauncher（fixed，top:70 高 36 ⇒ 底边 106） */
  top: 118px;
}
.head-rail { display: flex; flex-direction: column; gap: 14px; width: 100%; align-self: flex-start; margin-top: 0; padding-top: 0; }
.head-rail > :first-child { margin-top: 0; }
.hsr-label {
  font-family: var(--font-ui);
  font-size: 10px; font-weight: var(--ui-small-weight);
  letter-spacing: .32em;
  color: var(--ink2);
  padding-left: 2px;
}
.hsr-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 4px;
  box-shadow: 0 1px 2px rgba(42, 33, 26, .06);
  overflow: hidden;
}
.hsr-sect {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 11px 14px 9px;
  border-bottom: 1px solid var(--line);
}
.hsr-sect h2 {
  font-family: var(--font-kai);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: .16em;
  margin: 0;
}
.hsr-sect .hsr-r {
  margin-left: auto;
  font-size: 11px;
  color: var(--ink2);
  letter-spacing: .06em;
}
.hsr-dot { width: 6px; height: 6px; background: var(--seal); border-radius: 50%; flex: none; }
.hsr-body { padding: 14px; }

/* �� Ԫ���� */
.hsr-idcard {
  background: linear-gradient(180deg, #F7F1E4, var(--card) 48%, #F3ECDD);
  color: var(--ink);
  border: 1px solid var(--line);
  position: relative;
}
.hsr-rule {
  height: 3px;
  background: linear-gradient(90deg, var(--gold), rgba(154, 123, 63, .15));
}
.hsr-idtop { display: flex; gap: 16px; padding: 18px 16px 14px; }
.hsr-portrait {
  width: 96px;
  height: 122px;
  flex: none;
  border: 1px solid rgba(42, 33, 26, .18);
  position: relative;
  background: radial-gradient(80% 70% at 50% 30%, #C8BCA6, #8A7E6C 75%);
  cursor: pointer;
  overflow: visible;
  box-shadow: 0 1px 3px rgba(42, 33, 26, .1);
}
.hsr-portrait img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
  display: block;
}
.hsr-seal {
  position: absolute;
  right: -9px;
  bottom: -9px;
  width: 34px;
  height: 34px;
  border: 2px solid var(--seal);
  color: var(--seal);
  font-size: 10px; font-weight: var(--ui-small-weight);
  letter-spacing: .06em;
  display: flex;
  align-items: center;
  justify-content: center;
  transform: rotate(-4deg);
  background: rgba(251, 247, 239, .92);
  line-height: 1.15;
  text-align: center;
  font-family: var(--font-ui);
}
.hsr-idmeta { flex: 1; min-width: 0; }
.hsr-eyebrow {
  font-size: 10px; font-weight: var(--ui-small-weight);
  letter-spacing: .3em;
  color: var(--gold);
  font-family: var(--font-ui);
}
.hsr-idmeta h1 {
  font-family: var(--font-kai);
  font-size: 32px;
  letter-spacing: .14em;
  margin: 6px 0 4px;
  color: var(--ink);
  font-weight: 600;
}
.hsr-sub {
  font-size: 11.5px;
  color: var(--ink2);
  letter-spacing: .08em;
}
.hsr-hr { height: 1px; background: rgba(42, 33, 26, .1); margin: 12px 0 10px; }
.hsr-kv {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  padding: 3px 0;
  color: var(--ink2);
}
.hsr-kv b { color: var(--ink); font-weight: 600; letter-spacing: .06em; }
.hsr-foot {
  display: flex;
  gap: 6px;                      /* ★ 原来 gap=0，实测两按钮间距 0px */
  padding: 6px;                  /* 让按钮不贴卡边 */
  border-top: 1px solid rgba(42, 33, 26, .1);
}
.hsr-foot > * {
  flex: 1;
  padding: 12px 0 13px;
  text-align: center;
  font-family: var(--font-ui);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: .22em;
  cursor: pointer;
  background: transparent;
  border-radius: 4px;            /* 有间距后必须各带圆角，否则仍像一块 */
  transition: background .15s ease, color .15s ease;
}
.hsr-btn-o {
  color: var(--seal);
  border: none;
  border-right: 1px solid rgba(42, 33, 26, .1);
}
.hsr-btn-o:hover { background: rgba(164, 52, 43, .07); }
.hsr-btn-o:active { background: rgba(164, 52, 43, .12); }
.hsr-btn-t {
  color: var(--ink2);
  border: none;
  letter-spacing: .18em;
}
.hsr-btn-t:hover { color: var(--seal); background: rgba(42, 33, 26, .05); }
.hsr-btn-t:active { background: rgba(42, 33, 26, .08); }
.hsr-foot > *:focus-visible {
  outline: 1px solid rgba(154, 123, 63, .7);
  outline-offset: -3px;
}

/* �� ס�� */
.hsr-home { display: flex; gap: 0; }
.hsr-thumb {
  width: 118px;
  flex: none;
  background: linear-gradient(165deg, #D8B98E, #A9603C 55%, #6E3A24);
  background-size: cover;
  background-position: center;
  position: relative;
}
.hsr-thumb span {
  position: absolute;
  left: 8px;
  bottom: 7px;
  font-size: 9px;
  letter-spacing: .12em;
  color: rgba(255, 255, 255, .75);
}
.hsr-homebody { flex: 1; padding: 12px 14px; min-width: 0; }
.hsr-htitle {
  font-family: var(--font-kai);
  font-size: 15px;
  letter-spacing: .1em;
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 8px;
}
.hsr-tag {
  font-style: normal;
  font-size: 10px;
  color: #C33A2A;
  border: 1px solid rgba(195, 58, 42, .45);
  padding: 1px 5px;
  border-radius: 2px;
  letter-spacing: .12em;
}
.hsr-hrow {
  display: flex;
  gap: 14px;
  font-size: 11.5px;
  color: var(--ink2);
  margin-top: 8px;
  letter-spacing: .05em;
}
.hsr-link {
  display: inline-block;
  margin-top: 10px;
  padding: 2px 0 3px;
  font-family: var(--font-ui);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--seal);
  letter-spacing: .14em;
  border: none;
  border-bottom: 1px solid rgba(156, 35, 24, .35);
  background: none;
  cursor: pointer;
  transition: color .15s ease, border-color .15s ease, transform .15s ease;
}
.hsr-link:hover {
  color: var(--seal2);
  border-bottom-color: rgba(156, 35, 24, .7);
  transform: translateX(2px);
}
.hsr-link:active { transform: translateX(0); }
.hsr-link:focus-visible { outline: 1px solid rgba(156, 35, 24, .45); outline-offset: 3px; }

/* �� ˽������ */
.hsr-person { display: flex; gap: 14px; }
.hsr-ava {
  width: 62px;
  height: 80px;
  flex: none;
  border: 1px solid var(--line);
  object-fit: cover;
  object-position: top center;
  background: radial-gradient(70% 60% at 50% 32%, #B8AC98, #5C5145);
}
.hsr-pmeta { flex: 1; min-width: 0; }
.hsr-pname {
  font-family: var(--font-kai);
  font-size: 19px;
  letter-spacing: .14em;
  font-weight: 600;
}
.hsr-pinfo {
  font-size: 11.5px;
  color: var(--ink2);
  margin-top: 5px;
  letter-spacing: .06em;
  line-height: 1.8;
}
.hsr-meter {
  display: grid;
  grid-template-columns: 30px 1fr 24px;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  color: var(--ink2);
  margin-top: 7px;
  letter-spacing: .14em;
}
.hsr-bar {
  height: 4px;
  background: rgba(42, 33, 26, .1);
  border-radius: 2px;
  overflow: hidden;
}
.hsr-bar i { display: block; height: 100%; background: #A8802C; }
.hsr-meter b {
  color: var(--ink);
  font-weight: 600;
  font-size: 12px;
  text-align: right;
}
.hsr-load {
  margin-top: 14px;
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  color: var(--ink2);
  letter-spacing: .14em;
}
.hsr-slots { display: flex; gap: 3px; flex: 1; }
.hsr-slots span {
  width: 100%;
  height: 8px;
  background: rgba(42, 33, 26, .1);
  border-radius: 1px;
}
.hsr-slots span.on { background: #A8802C; }
.hsr-grid3 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
  margin-top: 12px;
}
.hsr-gbtn {
  border: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(255, 253, 247, .55), rgba(245, 239, 228, .25));
  border-radius: 3px;
  padding: 9px 4px 10px;
  font-family: var(--font-ui);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .14em;
  color: var(--ink);
  cursor: pointer;
  transition: border-color .15s ease, color .15s ease, background .15s ease, transform .12s ease, box-shadow .15s ease;
}
.hsr-gbtn:hover {
  border-color: var(--seal);
  color: var(--seal);
  background: linear-gradient(180deg, rgba(164, 52, 43, .08), rgba(164, 52, 43, .03));
  transform: translateY(-1px);
  box-shadow: 0 1px 3px rgba(42, 33, 26, .08);
}
.hsr-gbtn:active {
  transform: translateY(0);
  box-shadow: none;
  background: rgba(164, 52, 43, .1);
}
.hsr-gbtn:focus-visible {
  outline: 1px solid rgba(164, 52, 43, .55);
  outline-offset: 2px;
}
.hsr-quote {
  margin-top: 12px;
  font-size: 12.5px;
  line-height: 1.9;
  color: var(--ink2);
  letter-spacing: .04em;
}
.hsr-sec-empty { padding: 8px 0 2px; }

/* �� ������̬ */
.hsr-fig {
  height: 146px;
  position: relative;
  background:
    radial-gradient(90% 120% at 25% 110%, #C6A98A 0%, transparent 62%),
    linear-gradient(168deg, #EFE6D3 0%, #DCC8AC 52%, #B98F6B 100%);
}
.hsr-fig::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(42, 33, 26, .5), transparent 55%);
  pointer-events: none;   /* ★ 2026-10-15：装饰蒙版不得吃点击（立绘可点） */
}
.hsr-fig span {
  position: absolute;
  left: 12px;
  bottom: 10px;
  color: #F0E7D6;
  font-size: 11px; font-weight: var(--ui-small-weight);
  letter-spacing: .3em;
  font-family: var(--font-ui);
}
.hsr-tl {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px;
  letter-spacing: .12em;
  margin-top: 14px;
}
.hsr-tl:first-child { margin-top: 2px; }
.hsr-tl b { color: var(--seal); font-weight: 600; }
.hsr-goldbar {
  height: 5px;
  background: rgba(42, 33, 26, .1);
  border-radius: 3px;
  overflow: hidden;
  margin-top: 8px;
}
.hsr-goldbar i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #C79A3C, #A8802C);
}
.hsr-fine {
  font-size: 11.5px;
  color: var(--ink2);
  line-height: 1.85;
  margin-top: 10px;
  letter-spacing: .05em;
}
.hsr-faction { display: flex; gap: 8px; margin-top: 14px; }
.hsr-faction .hsr-primary { flex: 3; }
.hsr-faction .hsr-ghost { flex: 2; }
.hsr-primary {
  background: linear-gradient(180deg, var(--seal), var(--seal2));
  color: #F6EFE2;
  border: none;
  border-radius: 3px;
  padding: 13px 0 14px;
  font-family: var(--font-ui);
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: .2em;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(42, 33, 26, .12);
  transition: background .15s ease, transform .12s ease, box-shadow .15s ease, opacity .15s ease;
}
.hsr-primary:hover:not([disabled]) {
  background: linear-gradient(180deg, var(--seal2), var(--seal));
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(42, 33, 26, .18);
}
.hsr-primary:active:not([disabled]) {
  transform: translateY(0);
  box-shadow: 0 1px 2px rgba(42, 33, 26, .1);
}
.hsr-primary[disabled] {
  opacity: .45;
  cursor: not-allowed;
  box-shadow: none;
  transform: none;
}
.hsr-primary:focus-visible {
  outline: 1px solid rgba(164, 52, 43, .55);
  outline-offset: 2px;
}
.hsr-ghost {
  background: linear-gradient(180deg, rgba(255, 253, 247, .55), rgba(245, 239, 228, .25));
  border: 1px solid var(--line);
  border-radius: 3px;
  padding: 13px 0 14px;
  font-family: var(--font-ui);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: .18em;
  color: var(--ink);
  cursor: pointer;
  transition: border-color .15s ease, color .15s ease, background .15s ease, transform .12s ease, box-shadow .15s ease;
}
.hsr-ghost:hover {
  border-color: var(--seal);
  color: var(--seal);
  background: linear-gradient(180deg, rgba(164, 52, 43, .08), rgba(164, 52, 43, .03));
  transform: translateY(-1px);
  box-shadow: 0 1px 3px rgba(42, 33, 26, .08);
}
.hsr-ghost:active {
  transform: translateY(0);
  box-shadow: none;
}
.hsr-ghost:focus-visible {
  outline: 1px solid rgba(164, 52, 43, .55);
  outline-offset: 2px;
}

@media (max-width: 1100px) {
  .layout > aside.aside-head { grid-column: 1 / -1 !important; grid-row: auto !important; max-width: none; margin-left: 0; }
}

/* 肖像换立绘角标（元首牌） */
.hsr-up {
  position: absolute;
  top: 4px;
  right: 4px;
  z-index: 4;
  font-family: var(--font-ui);
  font-size: 10.5px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 3px;
  color: var(--seal);
  background: rgba(251, 247, 239, .92);
  border: 1px solid rgba(164, 52, 43, .35);
  cursor: pointer;
  opacity: .92;
  transition: opacity .15s, background .15s, color .15s;
  line-height: 1.4;
}
.hsr-up:hover {
  opacity: 1;
  background: var(--seal);
  color: #fff;
}
.hsr-portrait:hover .hsr-up { opacity: 1; }

/* 置业中心 · 车/房列表：提亮文字对比 */
.estate-row {
  background: #FFFCF5 !important;
  border-color: rgba(42, 33, 26, .16) !important;
}
.estate-left { color: var(--ink) !important; font-weight: 700; }
.estate-left b { color: var(--ink); }
.estate-line { color: var(--ink2) !important; font-size: 13.5px; }
.estate-line b { color: var(--seal) !important; font-weight: 700; }
.estate-info .muted, .estate-info .muted.small, .estate-info .small {
  color: var(--ink2) !important;
  opacity: 1;
}
.estate-row.sel {
  background: rgba(164, 52, 43, .08) !important;
  border-color: var(--seal) !important;
}
.gtag.ok {
  background: rgba(47, 122, 79, .14);
  color: #1f5c38 !important;
  border-color: rgba(47, 122, 79, .45);
  font-weight: 700;
}
/* ══════════════════════════════════════════════════════════════════════════
   右栏（正国级）配色 —— 2026-10-23 改版
   ──────────────────────────────────────────────────────────────────────────
   原注释写的是「右栏外圈朱红描边 + 按钮统一红色」：那是一套配 **6px 纯红外框**
   的方案，红框 + 满屏红按钮自洽。
   但外框已换成卷草纹（见 assets/head-rail-frame.css），
   此时「按钮统一红色」就成了问题 —— 实测侧栏 13 个按钮**全部是红色实底**
   （翻看履历/换立绘/功成身退/定接班/回家看看/秘书处 6 颗/公开表态/翻开账本），
   一片红墙，主次彻底消失，玩家看不出哪个是主要动作。
   新规则：**红只留给真正的主操作**，次要按钮回到浅底描边。
     · 保留红：翻看履历/换立绘(ap-btn.primary)、功成身退/定接班(hsr-btn-o/t)、
               公开表态(hsr-primary)、回家看看(hsr-link)
     · 改回浅：秘书处那 6 颗(hsr-gbtn)、翻开账本(hsr-ghost)
   外框本身的下述样式已由 head-rail-frame.css 接管（那里有 !important），
   这里仅保留一份不含描边的兜底，避免两份红框互相打架。
   ══════════════════════════════════════════════════════════════════════════ */
.layout > aside.aside-head {
  border-radius: 8px;
  padding: 12px;
  background: linear-gradient(180deg, rgba(251, 247, 239, .55), rgba(245, 239, 228, .35));
}
.hsr-btn-o,
.hsr-btn-t {
  background: linear-gradient(180deg, var(--seal), var(--seal2)) !important;
  color: #F6EFE2 !important;
  font-weight: 600;
}
.hsr-btn-o {
  /* ★ 2026-10-23：从「红底一块」改成「浅底描边」。
     实测原来它和「定接班」并排、gap=0、圆角 0、同为红渐变，
     屏幕上连成一条 327px 的红带，读起来像一个控件而不是两个动作。
     语义上两者也不是同级：功成身退=交权退场（终局、低频），
     定接班=指定接班人（当季主操作）。主次分开才对。 */
  background: linear-gradient(180deg, rgba(255, 253, 247, .75), rgba(245, 239, 228, .40)) !important;
  color: var(--ink) !important;
  border: 1px solid rgba(150, 58, 43, .24) !important;
  font-weight: 700 !important;
}
.hsr-btn-o:hover {
  background: linear-gradient(180deg, rgba(164, 52, 43, .12), rgba(164, 52, 43, .05)) !important;
  color: var(--seal) !important;
  border-color: rgba(150, 58, 43, .48) !important;
}
.hsr-btn-o:hover,
.hsr-btn-t:hover {
  background: linear-gradient(180deg, var(--seal2), var(--seal)) !important;
  color: #fff !important;
}
.hsr-btn-t {
  color: rgba(246, 239, 226, .88) !important;
}
.hsr-link {
  background: var(--seal);
  color: #F6EFE2 !important;
  border: none !important;
  border-radius: 3px;
  padding: 8px 14px !important;
  font-weight: 600;
}
.hsr-link:hover {
  background: var(--seal2) !important;
  color: #fff !important;
  transform: translateY(-1px);
}
.hsr-gbtn {
  /* 秘书处那 6 颗（秘书处/交办政务/拟讲话稿/说话/下放锻炼/档案）是**并列的次级入口**，
     不是主操作。改为浅底 + 细边，hover 时才泛红。 */
  background: linear-gradient(180deg, rgba(255, 253, 247, .72), rgba(245, 239, 228, .38)) !important;
  color: var(--ink) !important;
  border: 1px solid rgba(150, 58, 43, .22) !important;
  font-weight: 600;
}
.hsr-gbtn:hover {
  background: linear-gradient(180deg, rgba(164, 52, 43, .10), rgba(164, 52, 43, .04)) !important;
  color: var(--seal) !important;
  border-color: rgba(150, 58, 43, .45) !important;
}
.hsr-primary {
  /* 公开表态是这一栏唯一的主操作，保留红 */
  background: linear-gradient(180deg, var(--seal), var(--seal2)) !important;
  color: #F6EFE2 !important;
}
.hsr-ghost {
  /* 「翻开账本」是次要看账动作，与 hsr-primary 并排时不该同红 */
  background: linear-gradient(180deg, rgba(255, 253, 247, .72), rgba(245, 239, 228, .38)) !important;
  color: var(--ink) !important;
  border: 1px solid rgba(150, 58, 43, .22) !important;
  font-weight: 600;
}
.hsr-ghost:hover {
  background: linear-gradient(180deg, rgba(164, 52, 43, .10), rgba(164, 52, 43, .04)) !important;
  color: var(--seal) !important;
  border-color: rgba(150, 58, 43, .45) !important;
}
.hsr-up {
  background: var(--seal) !important;
  color: #fff !important;
  border-color: transparent !important;
}
.hsr-up:hover {
  background: var(--seal2) !important;
}
/* 右栏小字加粗（可读性） */
.hsr-sub,
.hsr-kv,
.hsr-kv b,
.hsr-hrow,
.hsr-hrow span,
.hsr-tag,
.hsr-sect .hsr-r,
.hsr-pinfo,
.hsr-meter,
.hsr-meter span,
.hsr-meter b,
.hsr-load,
.hsr-load span,
.hsr-load b,
.hsr-gbtn,
.hsr-quote,
.hsr-tl,
.hsr-tl span,
.hsr-tl b,
.hsr-fine,
.hsr-seal,
.hsr-thumb span,
.hsr-eyebrow,
.hsr-htitle {
  font-weight: 700 !important;
}
.hsr-sub,
.hsr-kv,
.hsr-hrow,
.hsr-pinfo,
.hsr-meter,
.hsr-load,
.hsr-quote,
.hsr-fine,
.hsr-sect .hsr-r {
  color: var(--ink) !important;
}
.hsr-quote,
.hsr-fine {
  color: var(--ink2) !important;
  font-weight: 700 !important;
}
/* 国家工程 · 方卡格（两列紧凑，压扁高度） */
.nation-proj .nation-proj-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 6px 0 8px;
}
.nation-proj .np-card {
  border: 1px solid rgba(140, 100, 40, .2);
  border-radius: 8px;
  padding: 8px 10px;
  background: rgba(255, 253, 246, .7);
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-height: 0;
}
.nation-proj .np-head {
  display: flex;
  align-items: baseline;
  gap: 6px;
}
.nation-proj .np-head b {
  flex: 1;
  min-width: 0;
  font-size: 13px;
  font-family: var(--font-ui);
  font-weight: 700;
  color: var(--ink);
  line-height: 1.3;
}
.nation-proj .np-pct {
  flex: none;
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 13px;
  color: var(--seal);
}
.nation-proj .np-sub {
  font-size: 11.5px;
  color: var(--ink2);
  font-weight: 600;
}
.nation-proj .np-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 8px;
  font-size: 11.5px;
  color: var(--ink2);
  font-weight: 600;
}
.nation-proj .np-queue {
  font-size: 11px;
  color: var(--gold);
  font-weight: 700;
}
.nation-proj .np-card .proj-ops {
  margin-top: 4px;
}
.nation-proj .np-card .proj-ops .ofc-card-h {
  padding: 6px 8px;
}
.nation-proj .np-card .stat-track.mini {
  height: 6px;
  margin: 2px 0;
}
@media (max-width: 1400px) {
  .nation-proj .nation-proj-grid { grid-template-columns: 1fr; }
}
/* ===== 《案牍》一把手右栏（ap-*） ===== */
/* ★ 2026-10-21：sticky 起点从 8px 下移到 118px。
   #backLauncher 是 position:fixed（right:78px / top:70px，高 36 ⇒ 底边 106），
   右栏又是 sticky，滚动后卡片会顶到 8px 处，按钮就叠在卡片左上角 ——
   套云头裱边之前只是压住标题，套之后正好压穿云头，所以这次一并让开。
   卡片本身 2100px 高，少这 110px 可视高度不构成影响。 */
.layout > aside.aside-ap {
  grid-column: 3 !important;
  grid-row: 1 !important;
  align-self: start !important;
  width: 100%;
  max-width: none;
  margin: 0;
  min-width: 0;
  position: sticky;
  top: 118px;
}
.ap-panel {
  width: 100%;
  background: #F4E9C4;
  border: 3px solid #A6382C;
  padding: 16px 26px 46px 18px;
  position: relative;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E"), #F4E9C4;
  background-blend-mode: multiply;
  box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset, 0 10px 28px rgba(120, 92, 44, .16);
}
.ap-panel::before {
  content: ""; position: absolute; top: 0; bottom: 0; right: 0; width: 14px;
  background: linear-gradient(270deg, rgba(166, 56, 44, .5), rgba(166, 56, 44, .14) 60%, transparent);
  pointer-events: none;   /* ★ 2026-10-15：装饰带不得吃点击 */
}
.ap-panel::after {
  content: ""; position: absolute; top: 0; bottom: 0; right: 16px; width: 1px;
  background: #A6382C; opacity: .7;
  pointer-events: none;   /* ★ 2026-10-15：装饰线不得吃点击 */
}
.ap-zone { margin-bottom: 22px; }
.ap-zh {
  display: flex; align-items: center; gap: 9px;
  padding-bottom: 7px; margin-bottom: 12px; border-bottom: 1px solid rgba(31, 27, 21, .14);
}
.ap-zn {
  flex: none; width: 21px; height: 21px; border-radius: 50%;
  background: #A6382C; color: #FBF7EE;
  font-family: var(--font-ui); font-size: 12px; font-weight: var(--ui-small-weight);
  display: flex; align-items: center; justify-content: center;
}
.ap-zh h2 {
  margin: 0;
  font-family: var(--font-kai); font-size: 16px; color: #A6382C;
  letter-spacing: .14em; font-weight: 700;
}
.ap-zm { margin-left: auto; font-size: 12.5px; color: var(--ink2); font-weight: 700; }
/* 主界面右侧栏（案牍六段）小字加大：头部右侧 meta 与数值更清晰 */
.ap-zone .ap-zm { font-size: 14px; }
.ap-zb { display: flex; flex-direction: column; gap: 11px; }
.ap-plate {
  border: 1px solid rgba(31, 27, 21, .28); background: #EEE0B2; overflow: hidden; margin: 0;
}
.ap-plate img { display: block; width: 100%; height: auto; object-fit: cover; object-position: top center; }
.ap-plate-ph { height: 72px; background: linear-gradient(165deg, #E8D9B0, #C8B07A); }
.ap-plate-ph.tall { height: 64px; }
/* ★ 边栏横条真图（镇/县/市/省/走廊），替换米色占位块 */
.ap-plate-img { display: block; width: 100%; height: 72px; object-fit: cover; object-position: center; border: 1px solid rgba(120,95,55,.25); border-radius: 4px; }
.ap-plate-img.tall { height: 64px; }
.modal-banner { display: block; width: 100%; height: 120px; object-fit: cover; object-position: center; border-radius: 6px; margin: 0 0 12px; border: 1px solid rgba(120,95,55,.25); }
.ap-plate figcaption {
  padding: 5px 9px; border-top: 1px solid rgba(31, 27, 21, .14);
  background: #F4E9C4; font-size: 12.5px; color: var(--ink2); font-weight: 700;
}
.ap-hero { display: flex; gap: 12px; align-items: flex-start; }
.ap-plate-hero { flex: none; width: 148px; }
.ap-plate-hero img { aspect-ratio: 148 / 196; }
.ap-plate-hero figcaption { font-size: 11.5px; padding: 4px 6px; text-align: center; }
.ap-hinfo { flex: 1; min-width: 0; }
.ap-name {
  margin: 0 0 3px;
  font-family: var(--font-kai); font-size: 18px; color: var(--ink);
  letter-spacing: .14em; font-weight: 600;
}
.ap-sub { margin: 0; font-size: 13px; color: var(--ink2); font-weight: 700; }
.ap-lead {
  margin: 0; font-family: var(--font-kai); font-size: 15.5px; color: var(--ink);
  line-height: 1.9; font-weight: 600;
}
.ap-quote {
  margin: 0; border-left: 2px solid #A6382C; padding: 1px 0 1px 11px;
  font-family: var(--font-ui); font-size: 14px; color: var(--ink); line-height: 1.9; font-weight: 600;
}
.ap-meter {
  display: grid; grid-template-columns: 52px 1fr 48px; align-items: center; gap: 9px;
}
.ap-meter .lab { font-size: 13px; color: var(--ink); font-weight: 700; }
.ap-meter .track { height: 2px; background: rgba(31, 27, 21, .12); }
.ap-meter .track i { display: block; height: 100%; background: var(--ink); }
.ap-meter.red .track i { background: #A6382C; }
.ap-meter .val {
  text-align: right; font-family: var(--font-kai); font-size: 17px; font-weight: 600;
  color: var(--ink); font-variant-numeric: tabular-nums;
}
/* 主界面右侧栏（案牍六段）数值加大 */
.ap-zone .ap-meter .val { font-size: 19px; }
/* 两办联络栏（秘书）按钮改红：chips 红边红字、指令/叙话按钮红底白字 */
.ap-zone.ap-sec .ap-chips .chip {
  border-color: #A6382C; color: #A6382C; background: rgba(166, 56, 44, .10) !important;
}
.ap-zone.ap-sec .ap-chips .chip:hover { background: rgba(166, 56, 44, .22) !important; }
.ap-zone.ap-sec .ap-btns .ap-btn { background: #A6382C; color: #FBF7EE; }
.ap-zone.ap-sec .ap-btns .ap-btn:hover { filter: brightness(1.08); }
.ap-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ap-chips .chip {
  font-size: 12.5px; color: var(--ink); border: 1px solid rgba(31, 27, 21, .28);
  background: #EEE0B2; padding: 2px 8px; font-weight: 700; cursor: pointer;
}
.ap-chips .chip.red { border-color: rgba(166, 56, 44, .42); color: #A6382C; }
.ap-empty {
  border: 1px dashed rgba(31, 27, 21, .28); background: rgba(255, 255, 255, .35);
  padding: 11px; text-align: center; font-size: 13px; color: var(--ink2); font-weight: 700;
  margin: 0;
}
.ap-btns { display: flex; gap: 9px; }
.ap-btns.col { flex-direction: column; gap: 7px; margin-top: 9px; }
.ap-btn {
  flex: 1; min-height: 36px; display: flex; align-items: center; justify-content: center;
  font-family: var(--font-serif) !important; font-size: 14.5px; font-weight: 700; letter-spacing: .06em;
  border: 1px solid #A6382C; background: transparent; color: #A6382C; cursor: pointer;
  border-radius: 0;
}
.ap-btn.primary { background: #A6382C; color: #FBF7EE; text-shadow: 0 1px 1px rgba(0,0,0,.25); }
.ap-btn:hover:not([disabled]) { filter: brightness(1.06); }
.ap-btn[disabled] { opacity: .45; cursor: not-allowed; }
.ap-ledger { display: flex; flex-direction: column; gap: 7px; }
.ap-ledger .row {
  /* ★ 2026-10-23：全局 .row 规则是 flex-direction:column（为别处竖排设计），
     这里必须显式声明 row，否则「标签+数值」被竖向堆叠，行高虚高 50px+。
     这是之前各种 2×2 布局尝试全部失败的真正原因。 */
  display: flex; flex-direction: row; justify-content: space-between; gap: 10px; align-items: baseline;
  padding-bottom: 6px; border-bottom: 1px solid rgba(31, 27, 21, .14);
  font-size: 13.5px; font-weight: 700; color: var(--ink);
}
.ap-ledger .row:last-child { border-bottom: 0; padding-bottom: 0; }
.ap-ledger .v {
  font-family: var(--font-kai); font-size: 17px; font-weight: 600; color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.ap-ledger .v.gold { color: #B08D45; }
.ap-season {
  display: flex; justify-content: space-between; align-items: baseline;
  border-top: 1px solid rgba(31, 27, 21, .14); margin-top: 11px; padding-top: 8px;
  font-size: 12.5px; color: var(--ink2); font-weight: 700;
}
.ap-season b {
  font-family: var(--font-kai); font-size: 16px; font-weight: 600; color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.ap-season .ap b { color: #A6382C; }
.ap-seal {
  position: absolute; right: 30px; bottom: 14px; width: 44px; height: 44px;
  border: 2px solid #A6382C; border-radius: 3px; transform: rotate(-3deg);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-kai); font-size: 15px; font-weight: 600; color: #A6382C;
}
/* 案牍栏：与主题纸色一致 + 单列撑满（修过黄/侧边裁切/竖排折字） */
.layout > aside.aside-ap {
  display: block !important;
  grid-template-columns: 1fr !important;
  width: 100%;
  max-width: 100%;
  overflow: visible;
}
.ap-panel {
  width: 100%;
  max-width: 100%;
  background: var(--card) !important;
  background-image: none !important;
  background-blend-mode: normal !important;
  box-shadow: 0 1px 3px rgba(42, 33, 26, .06) !important;
  overflow: visible;
  box-sizing: border-box;
}
.ap-plate, .ap-chips .chip, .ap-empty {
  background: var(--paper) !important;
}
.ap-plate figcaption {
  background: var(--card) !important;
}
.ap-zb { min-width: 0; }
.ap-hero { min-width: 0; }
.ap-hinfo { min-width: 0; flex: 1 1 auto; }
.ap-name, .ap-sub, .ap-lead, .ap-quote, .ap-btn {
  word-break: keep-all;
  overflow-wrap: anywhere;
}
.ap-btn { white-space: nowrap; min-width: 0; padding: 0 8px; }
.ap-season { flex-wrap: wrap; gap: 6px 12px; }
.ap-panel::before {
  right: 0;
  width: 12px;
  background: linear-gradient(270deg, rgba(166, 56, 44, .4), rgba(166, 56, 44, .1) 60%, transparent) !important;
}
.ap-panel::after { right: 12px; opacity: .55 !important; }
/* 立绘区：去脚注 · 按钮实心朱 · 右栏强制撑满 */
.ap-plate-hero figcaption { display: none !important; }
.ap-plate-hero { width: 148px !important; flex: 0 0 148px !important; }
.layout > aside.aside-ap,
.layout > aside.aside-ap > .ap-panel {
  display: block !important;
  width: 100% !important;
  min-width: 280px !important;
  max-width: 100% !important;
  float: none !important;
}
.ap-panel .ap-hinfo {
  flex: 1 1 0 !important;
  min-width: 120px !important;
  width: auto !important;
}
.ap-panel .ap-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ap-panel .ap-btn.primary,
.ap-panel .ap-btns.col .ap-btn {
  background: #A6382C !important;
  color: #FBF7EE !important;
  border-color: #A6382C !important;
  white-space: nowrap !important;
  /* ★ 2026-09-29 全站思源宋体：这条原本强制微软雅黑（!important），会把人物卡按钮从思源宋体里摘出去 */
  font-family: var(--font-serif) !important;
  font-weight: 700 !important;
  text-shadow: 0 1px 1px rgba(0,0,0,.25) !important;
}
/* 肆伍放大插图完整露出 · 陆压缩 */
.ap-zone-lg .ap-plate-img.xl {
  display: block;
  width: 100%;
  height: 132px;
  object-fit: cover;
  object-position: center;
}
.ap-zone-lg .ap-plate { margin-bottom: 2px; }
.ap-zone-lg .ap-plate figcaption { padding: 3px 8px; font-size: 11.5px; }
.ap-zone-sm { margin-bottom: 10px; }
.ap-zone-sm .ap-zb { gap: 8px; }
.ap-ledger.compact {
  /* ★ 2026-10-23：4 项排 2×2，读起来比单列短一半，也比原来"两列被拉到两边"聚拢。
     前提是 .row 必须 flex-direction: row（已在上方修好）——否则行高虚高。 */
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: 14px;
  row-gap: 3px;
  max-width: 300px;
}
.ap-ledger.compact .row {
  padding-bottom: 2px;
  border-bottom: 1px solid rgba(31, 27, 21, .1);
  font-size: 12.5px;
  align-items: baseline;
  line-height: 1.4;
  white-space: nowrap;
}
.ap-ledger.compact .row:last-child { border-bottom: 0; padding-bottom: 0; }
.ap-ledger.compact .v { font-size: 14px; line-height: 1.4; }
.ap-ledger.compact .v { font-size: 15px; }
/* ��ί�߷ÿ��������� / ������ */
.dept-card-wrap { display:flex; flex-direction:column; gap:4px; }
.dept-card-acts { display:flex; gap:6px; padding:0 2px 4px; }
.dept-card-acts .chip { flex:1; text-align:center; }


/* ���̻� �� ѡ�����ɶ��� */
.uv-sec h5 { color: var(--ink) !important; font-weight: 800 !important; font-size: 14px !important; }
.uv-sec .uv-note { color: var(--ink) !important; font-weight: 600 !important; }
.uv-sec .uv-note.muted, .uv-sec .muted { color: var(--ink2) !important; opacity: 1 !important; font-weight: 600 !important; }
.uv-sec .iv-btns .chip,
.uv-sec .iv-btns .hsr-gbtn {
  background: linear-gradient(180deg, var(--seal), var(--seal2)) !important;
  color: #FBF7EE !important;
  border: 1px solid var(--seal) !important;
  font-weight: 700 !important;
  font-size: 12.5px !important;
}
.uv-sec .iv-btns .chip:hover:not([disabled]) {
  filter: brightness(1.08);
  color: #fff !important;
}
.uv-sec .iv-btns .chip.primary {
  box-shadow: 0 0 0 2px #d8a942, 0 2px 10px rgba(216,169,66,.5) !important;
  border-color: #d8a942 !important;
  transform: translateY(-1px);
}
/* ★ 2026-09-25 修「深红底上的黑字」（玩家截图报障）：
   上面那三条写成 `.uv-sec .iv-btns .chip`，权重 (0,3,0)；
   而本文件更靠后的 `.modal .chip.tiny`（第 7220 行附近）同样是 (0,3,0) ——
   **权重并列**，且两边都带 !important ⇒ 只能靠源码顺序决胜负，后者在后，于是白字被刷回
   `var(--ink)`（近黑）。表现就是招商面板里「政策包未选中项 / 产业链 / 指标怎么扛 /
   办会规模 / 推进·1 AP / 定落点」全是黑字压深红底；只有选中项与 `.btn.primary`
   是白字（因为 `.modal .chip.primary` 单独设了 #FBF7EE）。
   ★ 修法：补一组带 `.modal` 前缀的选择器，把权重提到 (0,4,0)，
     从此**不再依赖文件顺序**；原选择器保留，供非弹窗场景使用。
   ★ 别改成调换文件顺序 —— 那只是把同样的坑留给下一个改 CSS 的人。 */
.modal .uv-sec .iv-btns .chip,
.modal .uv-sec .iv-btns .hsr-gbtn {
  background: linear-gradient(180deg, var(--seal), var(--seal2)) !important;
  color: #FBF7EE !important;
  border: 1px solid var(--seal) !important;
  font-weight: 700 !important;
  font-size: 12.5px !important;
}
.modal .uv-sec .iv-btns .chip:hover:not([disabled]) {
  filter: brightness(1.08);
  color: #fff !important;
}
.modal .uv-sec .iv-btns .chip.primary {
  box-shadow: 0 0 0 2px #d8a942, 0 2px 10px rgba(216,169,66,.5) !important;
  border-color: #d8a942 !important;
  transform: translateY(-1px);
}
.iv-sum { color: var(--ink) !important; font-weight: 700 !important; }
.iv-sum b { color: var(--seal) !important; font-weight: 800 !important; }

/* �����о� / ��ί��ȵ����ɶ��� */
.modal .muted,
.modal .muted.small,
.modal .small,
.modal p,
.modal li,
.modal td,
.modal th {
  color: var(--ink) !important;
  font-weight: 600 !important;
  opacity: 1 !important;
}
.modal h3, .modal h4, .modal h5, .modal .sec-h, .modal .ofc-card-h b,
.modal .tl-title, .modal .z-head h2 {
  color: var(--ink) !important;
  font-weight: 800 !important;
}
.modal .chip, .modal .gbtn, .modal .ap-btn, .modal .btn:not(.primary):not(.ghost) {
  font-weight: 700 !important;
}
.modal .chip.tiny, .modal .chip {
  color: var(--ink) !important;
  border-color: rgba(42, 33, 26, .35) !important;
}
.modal .chip.primary, .modal .chip.hot, .modal .btn.primary {
  background: linear-gradient(180deg, var(--seal), var(--seal2)) !important;
  color: #FBF7EE !important;
  border-color: var(--seal) !important;
  font-weight: 700 !important;
}
.modal .iv-tag, .modal .tag {
  font-weight: 700 !important;
}
.modal .talk-line .tl-text, .modal .quote, .modal .ap-quote, .modal .uv-note {
  color: var(--ink) !important;
  font-weight: 600 !important;
}

/* sponsor icon cap */
.donate-pill img{width:18px !important;height:18px !important;max-width:18px !important;object-fit:contain !important;display:inline-block !important}

/* 组织部长/换届面板可读性：字号加大、字重加粗、内容框加大 */
.modal:has(.ofc-card) .muted,
#menuScreen .muted { font-size: 14px !important; }
.ofc-card { padding: 14px 16px !important; }
.ofc-card p { font-size: 15px !important; line-height: 1.75 !important; font-weight: 600 !important; }
.ofc-card .muted.small { font-size: 13.5px !important; font-weight: 700 !important; opacity: 1 !important; }
.ofc-card-h b { font-size: 16px !important; font-weight: 800 !important; }
.ofc-card-h .muted { font-size: 13px !important; font-weight: 600 !important; }
.modal .sec-h { font-size: 16px !important; font-weight: 800 !important; }
.modal .ofc-card .acts .chip,
.modal .ofc-card .acts .btn { font-size: 14px !important; font-weight: 700 !important; min-height: 36px; }
/* 退留/差额/组织部长弹窗本体加宽 */
.modal-box:has(.ofc-card) { width: min(720px, 96vw) !important; }
.modal-box:has(.ofc-card) .modal-body { font-size: 15.5px !important; line-height: 1.75 !important; }

/* ==================================================================================
   ★ 2026-09-24：起始页「去后期底色」—— 外框（.menuwrap）内部不再自铺底
   ----------------------------------------------------------------------------------
   诉求：把起始页外框内「后期加的背景色」全部去掉，统一露出外框那层原始背景
        （.menuwrap::before 铺的 menu-art-bottom.webp ／外框纸面 --paper）。
   做法：只把 background、以及随之而来的 box-shadow 归零；**边框、字号、间距、
        选中态一律不动**。版面骨架还在，只是不再有一块块白底/米底浮在画上。
   范围：全部以 #menuScreen 起头 → 只作用于起始页；游戏内同名类（.row / .actbtn /
        .chip / .slot-card / .shopitem …）完全不受影响。
   回退：想留哪一块，把对应那几行删掉即可；整块删除＝回到改前。
   ================================================================================== */

/* ① 已激活横幅：原本是一条金色渐变色带，还带一道扫过的流光 */
#menuScreen .act-banner {
  display: flex; width: fit-content; margin: 6px auto 2px;
  background: linear-gradient(120deg, rgba(253,246,227,.5), rgba(246,231,178,.38), rgba(236,207,124,.32), rgba(246,231,178,.38), rgba(253,246,227,.5));
  border: 1px solid #c9a45c;
  box-shadow: 0 1px 4px rgba(120,90,40,.18);
  padding: 7px 12px; border-radius: 9px;
}
#menuScreen .act-banner::before {
  content: ''; position: absolute; inset: 3px; border: 1px dashed rgba(201,164,92,.45);
  border-radius: 7px; pointer-events: none;
}
#menuScreen .act-banner::after { display: none; }

/* ② 传承点数条（传承点数 1334 ｜ 已通结局 …） */
#menuScreen .legacybox { background: none; box-shadow: none; }

/* ③ 建档表单外框 + 每一格字段 */
#menuScreen .createform { background: rgba(255,255,255,.45) url(../assets/scenes/form_card_bg.jpg?v=20261027PERF1) center/cover no-repeat; border: 2px solid rgba(30,22,8,.55); outline: 1px solid rgba(164,52,43,.18); outline-offset: 3px; border-radius: 12px; box-shadow: 0 2px 12px rgba(30,22,8,.12); }
#menuScreen .createform .row { background: rgba(255,255,255,.5) url(../assets/scenes/row_bg.jpg?v=20261027PERF1) center/100% 100% no-repeat; border: 1.5px solid rgba(30,22,8,.5); outline: 1px solid rgba(164,52,43,.14); outline-offset: 2.5px; border-radius: 10px; box-shadow: 0 1px 3px rgba(30,22,8,.08); }

/* ④ 证件照格子（选中态 .sel 保留，否则看不出选了哪张） */
#menuScreen .idphoto-item { background: none; }

/* ⑤ 起始职位卡（选中态 .tip 保留，它是「当前选中」的唯一标识） */
#menuScreen .start-post-grid .actbtn { background: url(../assets/scenes/select_frame_preview.jpg?v=20261027PERF1) center/cover no-repeat, #faf7f0; box-shadow: 0 1px 3px rgba(30,22,8,.1); }
#menuScreen .start-post-grid .actbtn.locked { background: none; }

/* ⑥ 保密约定框 */
#menuScreen .pledge-box { background: none; }

/* ⑦ 存档折叠条 + 四个档位卡（空位卡本来就是透明的） */
#menuScreen .slotsfold .slotsbar { background: none; box-shadow: none; }
#menuScreen .slot-card { background: none; box-shadow: none; }

/* ⑧ 传承兑换（点「展开传承兑换」才出现；.owned 已购态保留） */
#menuScreen .shop { background: none; box-shadow: none; }
#menuScreen .shopitem { background: none; }
#menuScreen .disclist li { background: none; }

/* ==================================================================================
   ★ 2026-09-24：封面（头图）与下方纸面 —— 底部渐隐 + 整体配色调和
   ----------------------------------------------------------------------------------
   ◆ 问题一（接缝）：封面图 menu-art.webp 下沿是浅奶白 rgb(252,245,234)，
     下方纸面是 --paper rgb(240,227,195)，B 通道差 39 ⇒ 一条笔直的横向色阶线。
   ◆ 问题二（整体）：即便接缝淡了，两边**整体色调仍不一致**。渲染后取像素实测：
         封面主区均值 (239,225,207)   下方纸面均值 (239,226,195)
     ⇒ R、G 两通道已经对齐，**只差蓝通道 12**：头图偏冷白，下方偏暖黄。
   ----------------------------------------------------------------------------------
   ◆ 做法一（渐隐）：给封面图画一层自下而上的蒙版，让图**自己变透明**，
     露出的正是它下面那层（.cover 的 background = --paper / 深色主题下的深纸），
     所以浅色、深色两套主题自动同色，不用各写一遍色值。
     渐隐只吃最后 10% —— 标题墨迹底在整幅的 90%，之前必须全实
     （实测墨迹 357~418px，封面下沿 458px；上一版从 46% 起淡，把标题下缘洗白了，已修正）。
   ◆ 做法二（调和）：既然只差蓝通道，就**只削蓝、不动红绿** ——
     multiply 一层 rgb(255,255,240)：蓝 × 240/255 = ×0.941 ⇒ 207 × 0.941 ≈ 195，正好落到纸面。
     为什么不用"盖一层黄色"：盖黄会把 R/G 也一起抬高，反而过头；
     multiply 一层白里带黄，恰好只压蓝、保留原有的红绿平衡。
   ◆ 为什么两层共用同一条渐隐（--jyCoverFade）：
     最底部渐隐会让图变透明、露出容器纸面，若那里也被 multiply 就会**新造**一条色阶。
     共用曲线 ⇒ 图淡到哪、校正就淡到哪，最底部只剩纯粹的纸面。
   ----------------------------------------------------------------------------------
   范围：只作用于起始页 .cover（#menuScreen 起头）。游戏内无元素用 .cover，
        外框背景图（.menuwrap::before）一个字节没碰。
   调法：想更暖 ⇒ 把 rgb(255,255,240) 的蓝再调低；想更淡 ⇒ 往上调。
        渐隐长短 ⇒ 改 --jyCoverFade 里的百分比。
   回退：删掉本块 = 回到改前。
   ================================================================================== */

/* 渐隐曲线只写一次，图与校正层共用（想调渐隐长短，只改这里）
   ★ 2026-09-24 三改：尾段换成**平滑 S 曲线**（smoothstep：alpha = 1−3u²+2u³，u = 进度/10%）。
     - 为什么不是"直线式"（旧版 0.26→0 砸到 0）：那一段斜率最大落在**最后一像素**上，
       等于明明在渐隐却收了一条淡边 —— 人眼看到的就是"渐隐带有个下沿"。
     - 为什么不是"手动排一串缓降数"（试过：.47@98.6 / .29@99.4 / .13@99.8 / 0@100）：
       看着更缓，其实最后一格仍要一口吃掉 0.13，**深色主题下实测逐行跳变从 12.4 恶化到 22.9**
       （深色底与亮头图落差 200+ 级，任何残余透明度都会放大成一条带）。
     - S 曲线的两端斜率都是 0（起得柔、收得也柔），中段最陡也只有 1.5/单位，实测：
         浅色主题 最大逐行跳变 3（与改前持平，本来就没有跳变）
         深色主题 最大逐行跳变 7.3（改前 12.4 ⇒ 反而更顺）
     - 起点仍是 90%，一个字没动 —— 标题墨迹底在 90.5%，起点再往上就会洗到字。 */
#menuScreen .cover {
  --jyCoverFade: linear-gradient(180deg,
    #000 0%, #000 90%,
    rgba(0,0,0,.972) 91%,
    rgba(0,0,0,.896) 92%,
    rgba(0,0,0,.784) 93%,
    rgba(0,0,0,.648) 94%,
    rgba(0,0,0,.500) 95%,
    rgba(0,0,0,.352) 96%,
    rgba(0,0,0,.216) 97%,
    rgba(0,0,0,.104) 98%,
    rgba(0,0,0,.028) 99%,
    rgba(0,0,0,0) 100%);
}
#menuScreen .cover img {
  -webkit-mask-image: var(--jyCoverFade);
          mask-image: var(--jyCoverFade);
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
}
/* 暖色校正层：垫在图上的一层极淡暖白，multiply 混色。
   padding: inherit + background-clip: content-box ⇒ 只铺在 <img> 那一块；
   .cover 的 5px 内衬（露的是纸面）不会被压黄，避免在左/右/上三边新造细色阶。 */
#menuScreen .cover::after {
  content: "";
  position: absolute;
  inset: 0;
  display: block;
  /* ★ 这两行必须显式重置：早期规则（本表 .cover::after，行 3977 附近）给这个伪元素
     定过 height:14px 和 margin:0 -5px。绝对定位下 height 不是 auto 时，bottom:0 会被
     判定为"过约束"而直接丢弃 ⇒ 校正层被压成一条 14px 高的小条、贴在图顶，
     不但不调和，反倒在头图上沿画了一道暗线（实测差异正好 14 行，y=54~67）。 */
  height: auto;
  margin: 0;
  padding: inherit;
  /* ★ 纵向渐变校正（2026-09-24 三改）：
     原来这里是 background-image:none + 纯色 rgb(255,255,240)，等于**全图一个系数**（蓝 ×0.941）。
     但封面上下亮度并不一样 —— 实测未校正时：
       上半区（有山、天）y300 ≈ (233,221,206) → 需要蓝 ×0.95
       下半区（标题以下那片空白奶白）y500 ≈ (245,236,223) → 需要蓝 ×0.874、绿 ×0.962
     用统一系数只能满足上半区，于是**标题以下那一大片比纸面亮（B 通道 +28）**，
     到接缝才靠 mask 收回来 —— 眼睛看到的正是这条"亮色带"结束的横线。
     改成纵向渐变后：越往下乘得越暖越沉，封面底部直接**等于纸面色**，
     接缝不再依赖渐隐去遮，而是"本来就没有色差"。
     上半区（68% 以上）仍是原来的 rgb(255,255,240)，一个像素没变。
     ★ 注意：这条 background-image 同时**顶掉了**早期 .cover::after（本表 3977 行）
       用 background 简写塞进来的那张深色渐变图 —— 不用再单独写 none 了。 */
  background-image: linear-gradient(180deg,
    rgba(250, 245, 227, 0) 68%,
    rgb(249, 244, 225) 93%);
  background-color: rgb(255, 255, 240);
  background-clip: content-box;
  mix-blend-mode: multiply;
  pointer-events: none;
  -webkit-mask-image: var(--jyCoverFade);
          mask-image: var(--jyCoverFade);
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
}
/* 封面与下方之间的 1px 描边同样是一条硬线，一起去掉 */
#menuScreen .cover { border-bottom-color: transparent; }

/* 组织部长弹窗：强制清晰（黑体 + 大字 + 加粗 + 宽框） */
.modal-box:has(.ofc-card) {
  width: min(860px, 96vw) !important;
  max-height: 90vh;
}
.modal-box:has(.ofc-card) .modal-body {
  /* ★ 2026-09-29 全站思源宋体：办公室弹窗正文原本强制微软雅黑 17px，会盖过思源宋体 */
  font-family: var(--font-serif) !important;
  font-size: 17px !important;
  line-height: 1.8 !important;
  color: var(--ink) !important;
  padding: 20px 22px !important;
}
.modal-box:has(.ofc-card) .modal-body * { font-family: inherit !important; }
.modal-box:has(.ofc-card) .sec-h {
  font-size: 18px !important;
  font-weight: 800 !important;
  letter-spacing: 1px;
  margin: 14px 0 10px !important;
}
.modal-box:has(.ofc-card) .city-side-trait,
.modal-box:has(.ofc-card) .ofc-card {
  padding: 14px 16px !important;
  font-size: 16px !important;
  line-height: 1.8 !important;
  font-weight: 600 !important;
}
.modal-box:has(.ofc-card) .ofc-card p,
.modal-box:has(.ofc-card) .ofc-card .muted,
.modal-box:has(.ofc-card) .ofc-card .muted.small,
.modal-box:has(.ofc-card) .muted.small,
.modal-box:has(.ofc-card) .muted {
  font-size: 15px !important;
  font-weight: 700 !important;
  color: var(--ink) !important;
  opacity: 1 !important;
  line-height: 1.75 !important;
}
.modal-box:has(.ofc-card) .ofc-card-h b,
.modal-box:has(.ofc-card) .ofc-card-h .muted {
  font-size: 17px !important;
  font-weight: 800 !important;
}
.modal-box:has(.ofc-card) .acts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}
.modal-box:has(.ofc-card) .acts .chip,
.modal-box:has(.ofc-card) .acts .btn {
  font-size: 15px !important;
  font-weight: 800 !important;
  min-height: 40px !important;
  padding: 8px 14px !important;
  border-radius: 8px;
  letter-spacing: .5px;
}
.modal-box:has(.ofc-card) ul {
  font-size: 15px !important;
  font-weight: 600 !important;
  line-height: 1.85 !important;
}

/* ===== 全局可读性：弹窗/面板字号加大加粗，框装不下就加宽 ===== */
.modal-box {
  width: min(860px, 96vw) !important;
  max-width: 96vw !important;
  max-height: 92vh;
}
.modal-body {
  font-family: var(--font-serif) !important;
  font-size: 16.5px !important;
  line-height: 1.8 !important;
  color: var(--ink) !important;
  padding: 18px 22px 22px !important;
}
.modal-body p, .modal-body li, .modal-body .muted, .modal-body .small, .modal-body .muted.small {
  font-size: 15px !important;
  font-weight: 700 !important;
  color: var(--ink) !important;
  opacity: 1 !important;
  line-height: 1.75 !important;
}
.modal-body h4, .modal-body .sec-h, .modal-body h3 {
  font-size: 17px !important;
  font-weight: 800 !important;
}
.modal-body .chip, .modal-body .btn, .modal-body .opt, .modal-body .actbtn {
  font-size: 14.5px !important;
  font-weight: 700 !important;
  min-height: 36px;
}
.modal-body .chip.tiny { font-size: 13.5px !important; padding: 5px 11px !important; }
.modal-body .ofc-card, .modal-body .city-side-trait, .modal-body .talk-line, .modal-body .polrow {
  padding: 12px 14px !important;
  font-size: 15px !important;
}
.modal-body .ofc-card p, .modal-body .ofc-card .muted.small {
  font-size: 14.5px !important;
  font-weight: 700 !important;
}
.modal-body ul { font-size: 14.5px !important; font-weight: 600 !important; line-height: 1.8 !important; }
/* 主界面常用小字提一档（装不下就撑开） */
.panel .muted, .panel .muted.small, .panel .small,
.ofc-card .muted, .ofc-card .muted.small, .ofc-card p,
.hsr-card .muted, .hsr-card .muted.small, .hsr-sub, .hsr-kv,
.ap-card .muted, .ap-lead, .ap-sub {
  font-size: 13.5px !important;
  font-weight: 700 !important;
  opacity: 1 !important;
}
.chip.tiny { font-size: 13px !important; font-weight: 700 !important; padding: 4px 10px !important; }
.opt-meta, .opt-sub, .stat-head, .slot-meta, .disc-m, .tl-meta {
  font-size: 13.5px !important;
  font-weight: 600 !important;
}
/* 拥挤网格自适应加宽 */
.ofc-grid { gap: 12px !important; }
.acts { flex-wrap: wrap; gap: 8px; }

/* 醒目反馈弹窗 */
.flashrep { border: 2px solid var(--seal); border-radius: 10px; padding: 16px 18px; background: linear-gradient(180deg, rgba(255,252,240,.95), rgba(245,239,228,.92)); }
.flashrep-h { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--seal); }
.flashrep-h b { font-size: 18px !important; font-weight: 800 !important; letter-spacing: 2px; color: var(--seal); font-family: var(--font-kai); }
.flashrep-h em { font-style: normal; margin-left: auto; font-size: 12px; font-weight: 700; color: var(--ink2); border: 1px solid var(--line); padding: 2px 8px; border-radius: 999px; }
.flashrep-seal { width: 28px; height: 28px; border: 2px solid var(--seal); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--seal); font-weight: 800; font-size: 13px; transform: rotate(-8deg); font-family: var(--font-ui); }
.flashrep-b { font-family: var(--font-serif) !important; font-size: 15.5px !important; font-weight: 700 !important; line-height: 1.8 !important; color: var(--ink) !important; }


/* ==================================================================================
   ★ 2026-09-24：主席右栏（headSideRail）按钮文字可读性优化
   ----------------------------------------------------------------------------------
   诉求：右栏按钮文字太小太细（楷体小字号 + 大字距 → 视觉模糊）。
        统一加大字号、加粗、收紧字距：功成身退/定接班、回家看看、秘书六键、
        公开表态、翻开账本，以及立绘下方的功成身退（内联样式同样覆盖）。
   ================================================================================== */
.hsr-foot .hsr-btn-o,
.hsr-foot .hsr-btn-t {
  font-size: 14.5px !important;
  font-weight: 800 !important;
  letter-spacing: .04em !important;
}
.hsr-gbtn {
  font-size: 14px !important;
  font-weight: 800 !important;
  letter-spacing: .04em !important;
}
.hsr-primary {
  font-size: 15px !important;
  font-weight: 800 !important;
  letter-spacing: .12em !important;
}
.hsr-ghost {
  font-size: 14.5px !important;
  font-weight: 800 !important;
  letter-spacing: .06em !important;
}
.hsr-link {
  font-size: 14px !important;
  font-weight: 800 !important;
  letter-spacing: .06em !important;
}
button[data-act="retireapply"],
button[data-act="retireprogress"] {
  font-size: 14px !important;
}

/* 荣誉插图（国家级荣誉 · 2026-09-24）：水墨淡彩，喜报/档案两处通用 */
.honor-art { width: min(480px, 100%); max-height: 150px; object-fit: contain; border-radius: 6px; margin: 6px 0 2px; display: block; border: 1px solid #e4d5b8; box-sizing: border-box; }
.honor-chip { min-width: 150px; max-width: 230px; }
.honor-chip .honor-art { width: 100%; max-height: 96px; margin: 0 0 5px; }

/* ===== 国家工程台账（np-ledger）· 2026-09-24 =====
   右栏的国家工程从「铺开画卡片」收成一个入口之后，np-card 那套卡片搬进了 modal
   （UI.showNationProj）。modal 是 max-width 1100px，与原来右栏窄栏的宽度不同，
   所以这里只补「装进 modal」这一层差异：列宽自适应（窄则单列、宽则两列）。
   ★ .nation-proj / .np-card / .np-head / .np-sub / .np-meta / .np-queue / .stat-track
     全部沿用原样式，**不重复定义** —— 右栏收窄后那套 CSS 不是死代码，仍服务本面板。 */
.np-ledger .nation-proj-grid {
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  margin: 6px 0 10px;
}
.np-ledger .np-card.np-done {
  border-style: dashed;
  opacity: .92;
}
.np-ledger .np-card.np-done .np-pct { color: var(--ok); }

/* 国家工程侧栏：配水墨插图 + 台账按钮贴底（2026-09-25）
   ★ 作用域必须写死 .panel.proj.nation-proj —— .nation-proj 还被台账弹窗
     （.nation-proj.np-ledger）共用，裸类名会把弹窗的 grid 也掰成纵向列。 */
.panel.proj.nation-proj { display: flex; flex-direction: column; }
.panel.proj.nation-proj .nation-proj-ill { height: 128px; }
.panel.proj.nation-proj .nation-proj-acts { margin-top: auto; justify-content: center; padding-top: 6px; }

/* 主席右栏 ④ 班底与表态：hsr-fig 插图（2026-09-25） */
.hsr-fig-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border: 0; display: block; }
.hsr-fig::before { z-index: 1; }
.hsr-fig span { z-index: 2; }

/* 纯淡入：无 transform，避免文字倾斜/模糊（2026-09-25） */
@keyframes stampFade { from { opacity: 0; } to { opacity: 1; } }

/* ============================================================================
   国家主席视角 · 右侧栏字体（2026-09-25 用户要求「换成方正字体」）
   ----------------------------------------------------------------------------
   ★ 作用域**只有 tier 10**：`<aside>` 的类由 ui.js:7328 按职级决定 ——
     tier 10 ⇒ `aside-head`，其他主官 ⇒ `aside-ap`，其余 ⇒ 无类。
     ⇒ 只挂 `.aside-head`，**tier 0–9 的侧栏一行不受影响**。
   ★ 为什么用 `*` + `!important`：styles.css 里有 170 处 font-family 声明，
     其中两处**直接作用在侧栏元素上**（`.hero-meta b.hero-name` 与
     `.sec-card .sc-id b`，都用了 `--font-kai` 楷体）——光靠继承盖不住。
     用 `!important` 一次性统一，避免以后新增类又漏掉。
   ★ 字体栈复用项目既有的方正写法（与 `--ofc-font` 同源），
     并保留系统中文字体兜底：玩家机器没装方正字体时不会掉成英文衬线。
   ============================================================================ */
:root {
  /* ★ 2026-09-29 全站思源宋体：这处是**第二个 :root**（方正字栈），同样改为思源宋体优先。 */
  --font-fz: var(--font-serif), "方正黑体简体", "方正书宋简体", "方正仿宋简体", "方正楷体简体",
    "FZHei-B01", "FZShuSong-Z01", "FZShuSong-Z01S", "FZFangSong-Z02S",
    "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", sans-serif;
}
.layout > aside.aside-head,
.layout > aside.aside-head * {
  font-family: var(--font-fz) !important;
}

/* ==================== 世界影响力 · 可玩性增强层 UI（2026-09-25） ==================== */
/* 战略局势行 */
.il-strip {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  margin-top: 12px; padding: 8px 12px; border-radius: 10px;
  border: 1px solid rgba(140,100,40,.26);
  background: linear-gradient(180deg, rgba(255,253,246,.85), rgba(246,238,222,.7));
}
[data-theme="dark"] .il-strip { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
.il-cell { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink); white-space: nowrap; }
.il-cell.warn { color: #a4342b; font-weight: 700; }
[data-theme="dark"] .il-cell.warn { color: #e08a7c; }
.il-cell b { font-family: var(--font-kai); }
/* 拉锯迷你双条 */
.il-mini { display: block; height: 5px; border-radius: 3px; background: rgba(0,0,0,.09); overflow: hidden; min-width: 54px; }
.il-mini i { display: block; height: 100%; border-radius: 3px; }
.il-mini.ok i { background: linear-gradient(90deg, #3f7d55, #6fae83); }
.il-mini.bad i { background: linear-gradient(90deg, #8a5a8a, #b07ab0); }
/* 倾向 / 诉求 / 合作小签 */
.il-tag {
  display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 4px;
  font-size: 10.5px; font-weight: 700; line-height: 1.5; vertical-align: 1px;
  border: 1px solid currentColor;
}
.il-tag.ok { color: #3f7d55; background: rgba(63,125,85,.08); }
.il-tag.mid { color: #9a7b3f; background: rgba(154,123,63,.09); }
.il-tag.bad { color: #a4342b; background: rgba(164,52,43,.08); }
.il-tag.want { color: #4a6f8a; background: rgba(74,111,138,.08); }
.il-tag.coop { color: #2a6b3a; background: rgba(63,125,85,.1); }
[data-theme="dark"] .il-tag.ok { color: #8fc79f; }
[data-theme="dark"] .il-tag.mid { color: #d8c281; }
[data-theme="dark"] .il-tag.bad { color: #e08a7c; }
[data-theme="dark"] .il-tag.want { color: #8ab8d8; }
[data-theme="dark"] .il-tag.coop { color: #8fc79f; }
/* 里程碑印 */
.il-mark {
  display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: #7a5c1e;
  border: 1px solid rgba(154,123,63,.45); background: rgba(212,175,55,.1);
}
[data-theme="dark"] .il-mark { color: #d8c281; }
/* 国别档案 */
.il-ds-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.il-ds-bars { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.il-ds-l { display: flex; justify-content: space-between; font-size: 12.5px; margin-bottom: 2px; }
.il-coop { margin-top: 4px; padding: 8px 10px; border-radius: 8px; border: 1px dashed rgba(140,100,40,.3); background: rgba(255,255,255,.5); font-size: 12.5px; display: flex; flex-direction: column; gap: 5px; }
.il-coop.done { border-color: rgba(63,125,85,.5); background: rgba(63,125,85,.06); color: #2a6b3a; }
.il-coop.bad { border-color: rgba(164,52,43,.5); background: rgba(164,52,43,.06); color: #a4342b; }
[data-theme="dark"] .il-coop { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .il-coop.done { color: #8fc79f; border-color: rgba(111,174,131,.4); }
[data-theme="dark"] .il-coop.bad { color: #e08a7c; border-color: rgba(224,104,92,.4); }
.il-danger { color: #a4342b; font-weight: 700; }
[data-theme="dark"] .il-danger { color: #e08a7c; }
/* 议程卡 */
.il-agcard { margin-top: 10px; padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(140,100,40,.26); background: linear-gradient(180deg, rgba(255,253,246,.9), rgba(246,238,222,.72)); }
[data-theme="dark"] .il-agcard { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
.il-ag-h { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.il-ag-t { margin: 6px 0 8px; font-size: 13.5px; line-height: 1.8; white-space: pre-wrap; }
.il-opts { display: flex; flex-direction: column; gap: 6px; }
.il-opt {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px; text-align: left;
  padding: 7px 11px; border-radius: 8px; cursor: pointer; font-family: inherit;
  border: 1px solid rgba(140,100,40,.3);
  background: linear-gradient(180deg, rgba(255,253,246,.95), rgba(246,238,222,.8));
  transition: border-color .15s ease, background .15s ease, transform .15s ease;
}
.il-opt b { font-size: 13.5px; color: var(--ink); }
.il-opt:hover { border-color: rgba(164,52,43,.55); background: rgba(255,255,255,.96); transform: translateX(3px); }
.il-opt:hover b { color: var(--seal); }
[data-theme="dark"] .il-opt { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] .il-opt:hover { background: rgba(255,255,255,.09); border-color: rgba(208,96,82,.5); }
.il-agres { padding: 9px 12px; border-radius: 9px; border: 1px solid rgba(63,125,85,.4); background: rgba(63,125,85,.07); margin-bottom: 4px; }
.il-agres p { margin: 4px 0 0; font-size: 13px; line-height: 1.75; white-space: pre-wrap; }
[data-theme="dark"] .il-agres { border-color: rgba(111,174,131,.4); background: rgba(111,174,131,.08); }

/* ==================== 世界影响力二改：政要名册 / 印象簿（2026-09-25） ==================== */
.il-guests { display: flex; flex-direction: column; gap: 7px; }
.il-guest {
  padding: 8px 11px; border-radius: 9px;
  border: 1px solid rgba(140,100,40,.24);
  background: linear-gradient(180deg, rgba(255,253,246,.9), rgba(246,238,222,.7));
  display: flex; flex-direction: column; gap: 4px;
}
[data-theme="dark"] .il-guest { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
.il-guest-h { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; }
.il-guest-h b { font-size: 14.5px; }
.il-guest-m { font-size: 12.5px; color: var(--ink2); }
.il-feed li { line-height: 1.7; }

/* 任职通告弹窗加宽（2026-09-25）：红头文件 + 干部任免审批表 + 简历共用加宽容器。
   ★ 谁会被加宽**不再由调用点决定**：`UI.modal` 里按内容里有没有 `.promo-doc`
     自动挂上 `modal--wide`（原先 4 个入口漏了 2 个，同一份公文宽窄不一）。
   ★ 注意：光给 `max-width` 在窄视口里几乎没用 —— 实测 430px 视口下
     「只加宽不压内边距」只从 286px 变成 293px。真正的瓶颈是三层内边距叠加，
     见本文件末尾的窄视口块。 */
.modal-box.modal--wide { max-width: 1280px; width: min(1280px, 98vw); }
.modal:has(.modal--wide) { padding: 10px; }
.modal-box.modal--wide .promo-doc { padding: 0 22px 22px; }
.modal-box.modal--wide .promo-doc .pd-banner { margin: -26px -22px 16px; }
.modal-box.modal--wide .promo-doc .pd-tbl th,
.modal-box.modal--wide .promo-doc .pd-tbl td { padding: 6px 8px; font-size: 14px; }

/* ★★ 窄视口（内置浏览器侧栏常只有 430~500px）下的公文弹窗。
   上面那条 max-width 在窄视口里**根本不起作用** —— 瓶颈不是 max-width，
   而是三层内边距叠加：`.modal` 20px + `.modal-body` 22px + `.promo-doc` 30px。
   实测 430px 视口：默认只剩 286px 正文宽，压到 6/10/12 后是 372px（+30%）。
   审批表 4 列（th 12% + td 38% ×2）在 372px 里每格只剩 40px / 140px，
   长值会逐字换行 ⇒ 窄屏下把每个逻辑行**重排成「标签 / 值」两列**。 */
@media (max-width: 640px) {
  .modal:has(.modal--wide) { padding: 6px; }
  .modal-box.modal--wide .modal-head { padding: 10px 12px; }
  .modal-box.modal--wide .modal-head h3 { font-size: 15px; letter-spacing: 1.5px; }
  .modal-box.modal--wide .modal-body { padding: 10px; }
  .modal-box.modal--wide .promo-doc { padding: 0 12px 14px; }
  .modal-box.modal--wide .promo-doc .pd-banner { margin: -26px -12px 12px; }
  .modal-box.modal--wide .promo-doc .pd-issuer { font-size: 17px; letter-spacing: 1px; }
  .modal-box.modal--wide .promo-doc .pd-title { font-size: 16px; letter-spacing: 0; }
  .modal-box.modal--wide .promo-doc .pd-line,
  .modal-box.modal--wide .promo-doc .pd-resume .pd-line { font-size: 14px; }
  .modal-box.modal--wide .promo-doc .pd-tbl { font-size: 13px; }
  /* 4 列表 → 每个逻辑行折成两行：th 在左（标签）、td 在右（值） */
  .modal-box.modal--wide .promo-doc .pd-tbl tr {
    display: grid; grid-template-columns: minmax(74px, auto) 1fr;
  }
  .modal-box.modal--wide .promo-doc .pd-tbl th,
  .modal-box.modal--wide .promo-doc .pd-tbl td {
    width: auto; white-space: normal; text-align: left; background: transparent;
    border: none; border-bottom: 1px solid var(--line); padding: 5px 7px;
  }
  .modal-box.modal--wide .promo-doc .pd-tbl td.c { text-align: left; }
  /* 家庭主要成员表是 3 列（称谓/姓名/单位职务），窄屏压成 3 窄列即可 */
  .modal-box.modal--wide .promo-doc .pd-tbl3 tr {
    grid-template-columns: minmax(44px, auto) minmax(52px, auto) 1fr;
  }
  .modal-box.modal--wide .promo-doc .pd-kv { flex-wrap: wrap; gap: 2px 8px; }
  .modal-box.modal--wide .promo-doc .pd-foot { gap: 10px; }
  .modal-box.modal--wide .promo-doc .pd-seal { width: 64px; height: 64px; }
  .modal-box.modal--wide .acts { flex-wrap: wrap; }
}
/* 官邸入住剧情文案（搬进中北海 / 搬进一号院）：正文改方正体，标题仍楷体 */
.glory-card.house-story { font-family: var(--font-fz); }
.glory-card.house-story .glory-body,
.glory-card.house-story .narr,
.glory-card.house-story .glory-sub { font-family: var(--font-fz); }

/* ==================== 拨付后跟踪 / 对内反哺（2026-09-25） ==================== */
.fin-track-item { margin-bottom: 8px; padding: 8px 10px; border-radius: 9px; border: 1px solid rgba(140,100,40,.24); background: linear-gradient(180deg, rgba(255,253,246,.9), rgba(246,238,222,.7)); }
.fin-track-item.warn { border-color: rgba(164,52,43,.5); background: rgba(164,52,43,.05); }
[data-theme="dark"] .fin-track-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] .fin-track-item.warn { background: rgba(208,96,82,.08); border-color: rgba(208,96,82,.5); }
.ftp-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 5px; }
.ftp-h b { font-size: 14px; }
.ftp-bars { display: flex; flex-direction: column; gap: 4px; }
.ftp-bar { display: grid; grid-template-columns: 76px 1fr 42px; align-items: center; gap: 8px; font-size: 11.5px; }
.ftp-l { color: var(--ink2); }
.ftp-issue { margin-top: 7px; padding: 8px 10px; border-radius: 8px; border: 1px solid rgba(164,52,43,.4); background: rgba(164,52,43,.05); }
.ftp-issue b { color: #a4342b; font-size: 13px; }
[data-theme="dark"] .ftp-issue { border-color: rgba(208,96,82,.45); background: rgba(208,96,82,.08); }
[data-theme="dark"] .ftp-issue b { color: #e08a7c; }
.ftp-issue p { margin: 4px 0 7px; font-size: 12.5px; line-height: 1.7; }
/* 对内反哺块 */
.il-home {
  margin-top: 12px; padding: 9px 12px; border-radius: 10px;
  border: 1px solid rgba(63,125,85,.4);
  background: linear-gradient(180deg, rgba(63,125,85,.07), rgba(63,125,85,.03));
}
[data-theme="dark"] .il-home { border-color: rgba(111,174,131,.4); background: rgba(111,174,131,.07); }
.il-home-h { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.il-home-h b { font-size: 14px; }
.il-home-items { margin: 6px 0 0; padding-left: 18px; font-size: 12.5px; line-height: 1.8; }


/* ==================== 年度成绩单（进步感系统 M1，2026-09-25） ==================== */
.rc-sheet { display: flex; flex-direction: column; gap: 12px; }
.rc-grade {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 12px 14px; border-radius: 10px;
  border: 1px solid rgba(164,52,43,.4);
  background: linear-gradient(180deg, rgba(164,52,43,.09), rgba(164,52,43,.03));
}
.rc-grade-name {
  font-family: var(--font-kai); font-size: 34px; font-weight: 900; line-height: 1;
  color: var(--seal); letter-spacing: 2px;
  text-shadow: 0 1px 0 rgba(255,255,255,.5);
}
.rc-grade-txt { flex: 1; min-width: 200px; font-size: 13.5px; font-weight: var(--ui-small-weight); line-height: 1.8; font-family: var(--font-ui); }
.rc-bench { font-size: 12px; color: var(--ink2); white-space: nowrap; }
.rc-sec b { display: block; margin-bottom: 5px; font-size: 13.5px; letter-spacing: 1px; }
.rc-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.rc-chip {
  display: inline-block; padding: 2px 10px; border-radius: 999px;
  font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums;
  border: 1px solid;
}
.rc-chip.up { color: #2a6b3a; border-color: rgba(63,125,85,.45); background: rgba(63,125,85,.08); }
.rc-chip.down { color: #a4342b; border-color: rgba(164,52,43,.45); background: rgba(164,52,43,.07); }
[data-theme="dark"] .rc-chip.up { color: #8fc79f; }
[data-theme="dark"] .rc-chip.down { color: #e08a7c; }
.rc-best { padding: 9px 12px; border-radius: 9px; border: 1px dashed rgba(154,123,63,.5); background: rgba(212,175,55,.06); }
.rc-best-h { font-size: 13px; font-weight: 800; color: #7a5c1e; margin-bottom: 3px; }
[data-theme="dark"] .rc-best { border-color: rgba(201,169,97,.4); background: rgba(201,169,97,.07); }
[data-theme="dark"] .rc-best-h { color: #d8c281; }
.rc-best p { margin: 0; font-size: 13px; font-weight: var(--ui-small-weight); line-height: 1.8; font-family: var(--font-ui); }
.rc-lines { margin: 4px 0 0; padding-left: 18px; font-size: 12.5px; line-height: 1.9; }
.rc-steps { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink2); }
/* ★ 2026-10-28：档位折算成实绩的回执行（reportMake 写 card.meritGain，老档无此键）。
   放在档位卡下面单独一条，用金色细边——和「政绩盘」的绿/红增减片区分开，
   让人一眼看出这是「成绩单本身带来的收入」，不是某条分线的涨跌。 */
.rc-merit {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  padding: 7px 12px; border-radius: 9px;
  border: 1px solid rgba(154,123,63,.45); background: rgba(212,175,55,.07);
  font-size: 13px; font-weight: 700; color: #7a5c1e;
  font-variant-numeric: tabular-nums;
}
.rc-merit b { font-size: 17px; font-family: var(--font-kai); color: #8a6b2f; letter-spacing: .5px; }
/* ★ ≤12.5px 小字一律走 --vd-sans/--ink2（宋体 + --ink3 会发虚），这里跟着这条纪律 */
.rc-merit .muted.small { font-size: 12px; font-family: var(--font-ui); color: var(--ink2); font-weight: 400; }
[data-theme="dark"] .rc-merit { border-color: rgba(201,169,97,.4); background: rgba(201,169,97,.08); color: #d8c281; }
[data-theme="dark"] .rc-merit b { color: #e8d49a; }
[data-theme="dark"] .rc-merit .muted.small { color: #a89f8c; }
[data-theme="dark"] .rc-grade { border-color: rgba(208,96,82,.4); background: rgba(208,96,82,.07); }
[data-theme="dark"] .rc-grade-name { color: #e08a7c; text-shadow: none; }


/* ==================== 军令状（进步感系统 M2，2026-09-25） ==================== */
.panel.ss-desk {
  border: 16px solid transparent;
  border-image-source: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22300%22 height=%22300%22 viewBox=%220 0 300 300%22%3E%3Crect x=%224%22 y=%224%22 width=%22292%22 height=%22292%22 fill=%22none%22 stroke=%22%239c5a2c%22 stroke-width=%224%22/%3E%3Crect x=%2213%22 y=%2213%22 width=%22274%22 height=%22274%22 fill=%22none%22 stroke=%22%23d9c7a8%22 stroke-width=%222%22/%3E%3Crect x=%2220%22 y=%2220%22 width=%22260%22 height=%22260%22 fill=%22none%22 stroke=%22%23c9a227%22 stroke-width=%221.4%22/%3E%3Cdefs%3E%3Cg id=%22b%22 fill=%22none%22%3E%3Cpath d=%22M4 38 L4 13 Q4 4 13 4 L38 4%22 stroke=%22%239c5a2c%22 stroke-width=%226%22/%3E%3Cpath d=%22M12 28 C12 17 17 12 28 12%22 stroke=%22%23a8763e%22 stroke-width=%222.4%22/%3E%3Cpath d=%22M17 21 c0 -7 9 -11 15 -7 c-8 0 -10 4 -7 8%22 stroke=%22%23a8763e%22 stroke-width=%222%22/%3E%3Ccircle cx=%2211%22 cy=%2211%22 r=%223.2%22 fill=%22%23a8763e%22/%3E%3C/g%3E%3C/defs%3E%3Cuse href=%22%23b%22/%3E%3Cuse href=%22%23b%22 transform=%22translate(300,0) scale(-1,1)%22/%3E%3Cuse href=%22%23b%22 transform=%22translate(0,300) scale(1,-1)%22/%3E%3Cuse href=%22%23b%22 transform=%22translate(300,300) scale(-1,-1)%22/%3E%3C/svg%3E");
  border-image-slice: 30;
  border-image-width: 16px;
  border-image-repeat: round;
  border-radius: 0;
  padding: 34px 38px 34px 38px;
}
.panel.orders-wide { border-top-color: transparent; }
.panel.orders-wide .promo-wide-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.panel.orders-wide .promo-wide-h span:first-child { font-size: 15px; font-weight: 800; color: var(--seal); letter-spacing: 1px; }
.order-row { margin-bottom: 9px; }
.order-row:last-child { margin-bottom: 0; }
.order-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.order-h b { font-size: 13.5px; }
.order-m { margin-top: 4px; font-size: 12px; color: var(--ink2); line-height: 1.7; }
.order-m .muted { display: block; margin-top: 1px; }


/* ==================== 史书传记（进步感系统 M3，2026-09-25） ==================== */
.hist-book {
  margin: 14px auto; max-width: 720px; padding: 16px 22px 14px;
  border: 1px solid rgba(140,100,40,.4); border-radius: 10px;
  background: linear-gradient(180deg, rgba(253,250,240,.95), rgba(245,238,222,.9));
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.5), 0 2px 8px rgba(90,60,20,.1);
  text-align: left;
}
[data-theme="dark"] .hist-book { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
.hist-head { font-family: var(--font-kai); font-size: 15px; font-weight: 800; letter-spacing: 2px; color: var(--seal); margin-bottom: 8px; text-align: center; }
.hist-text { margin: 0; font-size: 14px; line-height: 2.1; }
.hist-seal {
  margin-top: 10px; text-align: right;
  font-family: var(--font-ui); font-size: 13px; font-weight: 800; color: var(--seal);
}
.hist-seal::before { content: ''; display: inline-block; width: 40px; height: 1px; background: rgba(140,100,40,.4); vertical-align: middle; margin-right: 10px; }
.slot-epitaph { color: #7a5c1e; font-family: var(--font-kai); font-weight: 700; }
[data-theme="dark"] .slot-epitaph { color: #d8c281; }


/* ==================== 财政决算报告（仿公文，2026-09-25） ==================== */
.fd-doc { max-width: 700px; margin: 0 auto; }
.fd-title {
  font-family: var(--font-kai); font-size: 17px; font-weight: 800; letter-spacing: 1px;
  text-align: center; color: var(--ink); margin-bottom: 4px; line-height: 1.6;
}
.fd-sub { text-align: center; font-size: 11px; color: var(--ink3); margin-bottom: 12px; letter-spacing: 2px; }
.fd-sec { margin-bottom: 12px; padding: 9px 12px; border-radius: 9px; border: 1px solid rgba(140,100,40,.24); background: linear-gradient(180deg, rgba(255,253,246,.85), rgba(246,238,222,.6)); }
[data-theme="dark"] .fd-sec { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
.fd-sec-h { font-family: var(--font-ui); font-size: 14px; font-weight: 800; letter-spacing: 1.5px; color: var(--seal2, #8a2b23); margin-bottom: 6px; }
.fd-p { margin: 4px 0; font-size: 12.5px; line-height: 1.85; }
.fd-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 2.5px 0; font-size: 12.5px; border-bottom: 1px dotted rgba(150,130,100,.2); }
.fd-row b { font-variant-numeric: tabular-nums; color: var(--ink); white-space: nowrap; }
.fd-dim { margin: 6px 0 2px; font-size: 11.5px; color: var(--gold); font-weight: 700; letter-spacing: 1px; }

/* 国家主席右栏：中央机构 / 国家工程框紧凑化（2026-09-25）——缩图、收行距、压按钮 */
.nation-wrap .chief-right .org-side .org-tree { height: 104px; margin: 2px 0 6px; }
.nation-wrap .chief-right .proj.nation-proj .nation-proj-ill { height: 96px; margin: 2px 0 6px; }
.nation-wrap .chief-right .org-roster { gap: 2px; margin: 4px 0 2px; }
.nation-wrap .chief-right .org-rrow { padding: 2px 8px; font-size: 13px; }
.nation-wrap .chief-right .panel h3 { margin-bottom: 6px; }
.nation-wrap .chief-right .org-side-bar { margin-bottom: 4px; }
.nation-wrap .chief-right .org-acts { margin-top: 4px; }
.nation-wrap .chief-right .org-acts .btn { padding: 4px 12px; font-size: 13.5px; }


/* ==================== 城市治理 · 折叠分区（2026-09-25） ==================== */
.cz-t.fold { cursor: pointer; user-select: none; }
.cz-t.fold:hover { color: var(--seal); }
.cz-t.fold .cz-caret {
  margin-left: auto; font-size: 11px; color: var(--ink3);
  transition: transform .18s ease; transform-origin: center;
}
.cz-t.fold.closed .cz-caret { transform: rotate(-90deg); }
.cz-body { min-width: 0; }


/* ==================== 城市治理 · 折叠分区（2026-09-25） ==================== */
.cz-t.fold { cursor: pointer; user-select: none; }
.cz-t.fold:hover { color: var(--seal); }
.cz-t.fold .cz-caret {
  margin-left: auto; font-size: 11px; color: var(--ink3);
  transition: transform .18s ease; transform-origin: center;
}
.cz-t.fold.closed .cz-caret { transform: rotate(-90deg); }
.cz-body { min-width: 0; }


/* ==================== 体验感三件套（2026-09-25） ==================== */
/* —— ① 红头文件与手迹 —— */
.doc-paper {
  position: relative; max-width: 680px; margin: 10px auto; padding: 18px 26px 14px;
  border: 1px solid rgba(140,100,40,.35); border-radius: 4px;
  background: linear-gradient(180deg, #fdfaf3, #faf5e8);
  box-shadow: 0 2px 10px rgba(90,60,20,.12);
  text-align: left; overflow: hidden;
}
[data-theme="dark"] .doc-paper { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.14); }
.docp-head {
  text-align: center; font-family: var(--font-kai); font-size: 24px; font-weight: 900;
  color: #c0392b; letter-spacing: 6px; line-height: 1.4;
}
.docp-line { height: 3px; background: #c0392b; border-radius: 1px; margin: 6px 0 4px; }
.docp-no { text-align: center; font-size: 11.5px; color: #8a6a3a; letter-spacing: 1px; margin-bottom: 10px; }
.docp-title { text-align: center; font-family: var(--font-kai); font-size: 16px; font-weight: 800; margin-bottom: 10px; letter-spacing: 1px; }
.docp-body { position: relative; z-index: 1; }
.docp-p { font-family: 'FangSong', '仿宋', var(--font-doc); font-size: 14.5px; line-height: 2; margin: 6px 0; text-indent: 2em; }
.docp-foot { display: flex; justify-content: space-between; align-items: flex-end; margin-top: 14px; font-size: 12.5px; color: var(--ink2); }
.docp-unit { font-family: var(--font-kai); font-weight: 700; }
.docp-seal { position: absolute; right: 26px; bottom: 44px; width: 110px; height: 110px; transform: rotate(-12deg); opacity: .9; }
.hand-note {
  max-width: 560px; margin: 8px auto; padding: 10px 16px 12px;
  border-radius: 6px; transform: rotate(-.6deg);
  background: repeating-linear-gradient(180deg, transparent 0 27px, rgba(154,123,63,.16) 27px 28px), #fffdf6;
  border: 1px solid rgba(154,123,63,.35);
  box-shadow: 1px 2px 6px rgba(90,60,20,.12);
}
[data-theme="dark"] .hand-note { background: rgba(255,255,255,.04); border-color: rgba(201,169,97,.3); }
.hand-note-h { font-size: 11px; color: var(--ink3); letter-spacing: 2px; margin-bottom: 4px; }
.hand-note-t {
  font-family: 'Kaiti SC', 'STKaiti', 'KaiTi', '楷体', var(--font-kai);
  font-size: 15.5px; line-height: 1.9; color: #7a2b1e; white-space: pre-wrap;
}
[data-theme="dark"] .hand-note-t { color: #e0a898; }
/* —— ③ 身边人私语 —— */
.whisper {
  margin-top: 10px; padding: 8px 12px; border-radius: 9px;
  border-left: 3px solid rgba(154,123,63,.6);
  background: linear-gradient(180deg, rgba(212,175,55,.06), rgba(212,175,55,.02));
  font-size: 12.5px; line-height: 1.8;
}
.whisper-who { font-weight: 800; color: #7a5c1e; margin-right: 8px; font-family: var(--font-kai); }
.whisper-txt { color: var(--ink2); font-family: var(--font-kai); }
[data-theme="dark"] .whisper { border-left-color: rgba(201,169,97,.6); background: rgba(201,169,97,.05); }
[data-theme="dark"] .whisper-who { color: #d8c281; }
/* —— ⑤ 季节氛围层 —— */
.season-layer {
  position: fixed; inset: 0; pointer-events: none; z-index: 3;
  transition: opacity .8s ease;
}
.season-layer.sp-spring {
  background:
    radial-gradient(circle at 8% 4%, rgba(214,69,69,.06), transparent 120px),
    radial-gradient(circle at 92% 4%, rgba(214,69,69,.06), transparent 120px),
    radial-gradient(ellipse at 50% 0%, rgba(120,180,90,.05), transparent 60%);
}
.season-layer.sp-summer {
  background: radial-gradient(ellipse at 50% 0%, rgba(80,170,90,.06), transparent 55%);
}
.season-layer.sp-autumn {
  background:
    radial-gradient(circle at 12% 10%, rgba(217,138,74,.07), transparent 90px),
    radial-gradient(circle at 88% 18%, rgba(217,138,74,.06), transparent 70px),
    radial-gradient(ellipse at 50% 0%, rgba(217,138,74,.05), transparent 60%);
}
.season-layer.sp-winter {
  background:
    radial-gradient(circle at 6% 8%, rgba(160,200,235,.14), transparent 3px),
    radial-gradient(circle at 18% 22%, rgba(160,200,235,.12), transparent 2px),
    radial-gradient(circle at 32% 6%, rgba(160,200,235,.14), transparent 3px),
    radial-gradient(circle at 55% 14%, rgba(160,200,235,.12), transparent 2px),
    radial-gradient(circle at 74% 8%, rgba(160,200,235,.14), transparent 3px),
    radial-gradient(circle at 91% 20%, rgba(160,200,235,.12), transparent 2px),
    radial-gradient(circle at 44% 30%, rgba(160,200,235,.1), transparent 2px),
    radial-gradient(circle at 68% 34%, rgba(160,200,235,.1), transparent 2px);
}


/* ==================== 派系博弈 · 政敌卡与应对（2026-09-25） ==================== */
.panel.rival-wide { border-top-color: #8a4a2a; }
.panel.rival-wide .promo-wide-h span:first-child { color: #8a4a2a; }
[data-theme="dark"] .panel.rival-wide .promo-wide-h span:first-child { color: #d8907f; }
.rival-modal { max-width: 640px; }
.rival-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.rival-modal .il-ds-bars { margin-top: 10px; }

/* ==================== 正国级面板 · 省域统揽在宽栏铺 3 列（2026-09-25） ====================
   「对外贸易 / 国家战略」两块上移到「国家治理指数」之前（UI.nationalGov 里的顺序调整，
   纯字符串重排、无 CSS 参与）之后，左栏的下半段变成：
     省域统揽 → 治理抓手 → 对外贸易 → 国家战略 → 国家治理指数 → 国家政务
   省域统揽仍是左栏最靠上、最长的一段，6 张省卡按原规则铺 2 列会把「省名 + 主官」
   挤成两行；宽栏铺 3 列刚好一行放下。
   ★ 必须放在 styles.css:4520 那条双类名规则之后 —— 同优先级靠源码顺序取胜。
   ★ 只作用于 .nation-wrap .chief-gov，tier 0–9 的面板不含这两个类，零影响。 */
.nation-wrap .chief-gov .nation-prov-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1100px) {
  .nation-wrap .chief-gov .nation-prov-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}


/* ==================== 分管领域主区面板（副县长/副市长，2026-09-25） ==================== */
/* 方形化：分管领域主区面板直角（与全局公文风一致） */
.chief-gov .city-side, .chief-gov .city-side .pf-line, .chief-gov .city-side .cz-band {
  border-radius: 0 !important;
}
.chief-gov .city-side .city-side-foot-btns .btn { border-radius: 0; }
.chief-gov .city-side .pf-line { margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px dotted rgba(150,130,100,.18); }
.chief-gov .city-side .pf-line:last-of-type { border-bottom: 0; }
.chief-gov .city-side .pf-line b { font-size: 14px; margin-right: 6px; }
.chief-gov .city-side .pf-metric { margin-top: 4px; }
.chief-gov .city-side .pf-scene, .chief-gov .city-side .pf-risk { margin-top: 4px; }
.chief-gov .city-side .cz-band { padding: 9px 11px; border-radius: 9px; border: 1px solid rgba(140,100,40,.24); background: linear-gradient(180deg, rgba(255,253,246,.8), rgba(246,238,222,.6)); }
[data-theme="dark"] .chief-gov .city-side .cz-band { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
.chief-gov .city-side .cz-t { display: flex; align-items: center; gap: 6px; margin: 9px 0 6px; font-family: var(--font-ui); font-size: 12.5px; font-weight: 800; letter-spacing: 2px; color: var(--seal2, #8a2b23); }
.chief-gov .city-side .cz-t::before { content: ''; flex: none; width: 4px; height: 12px; border-radius: 2px; background: linear-gradient(180deg, #c96a5b, #a4342b); }
.chief-gov .city-side .cz-t::after { content: ''; flex: 1; height: 0; border-top: 1px dashed rgba(140,100,40,.32); }


/* ==================== 体验优化：方形主界面 + 副职面板分层（2026-09-26） ==================== */
/* ★★ 2026-09-29 修正：这一段是**全局字体覆盖** —— 原本把 body/.panel/.modal/.chip/.btn
   全部指向「方正小标宋/仿宋」栈，思源宋体被压到第 6 位 ⇒ 玩家装了思源宋体也看不到。
   这就是「改字体后游戏没变」的元凶。
   ⇒ 改为 `var(--font-serif)`（思源宋体优先），方正系列仍在栈里兜底。

   ★★★ 2026-10-25「字体看不清」总修 —— 第二次动这里，原因相同：
   这段规则排在文件**第 50 万字符处**，特异性与前面的 `body{font-family}` 相同、
   但位置更靠后 ⇒ **谁排在后面谁赢**。所以只改文件开头那条 body 规则对它无效
   （我第一次就栽在这，改了 body 却毫无变化）。必须在这里一并改。
   现在的分工：
     · body / .panel / .modal / .chip / .btn / button → **黑体**（界面文字、按钮、面板正文）
     · 大标题（h1~h3、印章、诏书等 89 条规则各自声明 var(--font-kai)/var(--font-serif)）
       → 仍是宋体，公文庄重感不受影响
   为什么必须让这里也走黑体：`.panel` / `.modal` 是绝大多数小字的祖先容器，
   它们一旦声明宋体，里面所有不写 font-family 的小字就全部继承成宋体 —— 改多少类名都没用。 */
/* —— 全局字体：界面用黑体保清晰，标题类另走宋体 —— */
body, .panel, .modal, .chip, .btn, button {
  font-family: var(--font-ui);
}
h1, h2, h3, .cz-t, .pf-sh, .stats-head {
  font-family: var(--font-serif), "方正楷体_GBK", "Kaiti SC", "STKaiti", "KaiTi", "楷体";
}
/* —— 主界面方形化 —— */
#gameScreen {
  border-radius: 0 !important;
}
#gameScreen .panel, #gameScreen .modal-box {
  border-radius: 0 !important;
}
/* 方形化撤回：保留游戏原生三栏布局（240px 1fr 460px），不再强行两栏 */
/* —— 副职面板分层 —— */
.dp-line { padding: 8px 10px; border: 1px solid rgba(140,100,40,.18); border-radius: 0; margin-bottom: 8px; background: rgba(255,253,246,.6); }
[data-theme="dark"] .dp-line { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
.dp-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.dp-head b { font-size: 14px; }
.dp-info { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; margin: 4px 0 6px; font-size: 12px; color: var(--ink2); }
.dp-scene { font-size: 12px; color: var(--ink2); }
.dp-scene::before { content: '⚠ '; color: #b8860b; }
.dp-chief {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 5px 8px; margin: 4px 0 6px;
  background: rgba(154,123,63,.07); border: 1px solid rgba(154,123,63,.2);
  font-size: 12px;
}
.dp-chief-t { color: var(--ink2); }
.dp-acts { display: flex; flex-wrap: wrap; gap: 5px; }

/* 常委工作台 · 三合一（功能入口 / 分管领域 / 分管线口） */
.sc-unified{border:2px solid var(--seal);border-radius:12px;background:var(--card);padding:12px 14px;margin:0 0 12px;box-shadow:var(--shadow)}
.sc-unified-h{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;color:var(--seal);letter-spacing:1px;padding-bottom:8px;border-bottom:2px solid var(--seal);margin-bottom:10px}
.sc-unified-h em{margin-left:auto;font-style:normal;font-size:11px;font-weight:600;color:var(--muted);letter-spacing:0}
.sc-unified-dot,.sc-sec-dot{width:8px;height:8px;border-radius:50%;background:var(--seal);display:inline-block;flex:none}
.sc-sec{margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:linear-gradient(180deg,rgba(140,31,40,.03),transparent 60%)}
.sc-sec:last-child{margin-bottom:0}
.sc-sec-t{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:800;color:#5a3e2b;letter-spacing:1px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--line)}
.sc-sec-t em{margin-left:auto;font-style:normal;font-size:11px;font-weight:600;color:var(--muted);letter-spacing:0}
.sc-sec-lines .sc-sec-body{max-height:340px;overflow:auto}
.sc-sec-lines .panel{border:none;box-shadow:none;padding:0;margin:0}
.sc-entry-grid{display:flex;flex-wrap:wrap;gap:6px}
.sc-pair-row{display:flex;gap:10px;align-items:stretch;margin:0 0 12px}
.sc-pair-row .sc-sec{flex:1 1 0;min-width:0;margin:0}
.sc-pair-row .sc-sec:last-child{margin:0}
@media(max-width:760px){.sc-pair-row{flex-direction:column}.sc-pair-row .sc-sec{margin:0 0 12px}.sc-pair-row .sc-sec:last-child{margin:0}}
.sc-entry-grid .sc-entry-btn{flex:1 1 30%;min-width:0;justify-content:center}
@media(max-width:760px){.sc-entry-grid .sc-entry-btn{flex:1 1 100%}}
.dep-hub .sc-entry-grid{gap:8px;justify-content:center}
.dep-hub .sc-entry-grid .sc-entry-btn{flex:1 1 0;min-width:96px;height:36px;display:inline-flex;align-items:center;justify-content:center;text-align:center;line-height:1.2}
/* 顶栏装饰线全部移除（多余红/金横条） */
.top::before, .top::after { content: none !important; display: none !important; }

/* ==================== 开门接访 · 三幕剧情（2026-09-25） ==================== */
.jz-act { max-width: 640px; margin: 0 auto; }
.jz-act-h { font-family: var(--font-kai); font-size: 15.5px; font-weight: 800; letter-spacing: 1px; color: var(--seal2, #8a2b23); margin-bottom: 8px; }
.jz-act-t { font-size: 14px; line-height: 2; white-space: pre-wrap; margin: 6px 0 10px; }


/* ==================== 纪委书记 · 廉政审查（2026-09-25） ==================== */
.ofc-card .acts .chip.tiny { margin-right: 4px; }

/* ==================== 副职政治 · 甲 · 班子座次（2026-10-16） ==================== */
/* 班次表：名义序位 vs 实权序位。挂在 dephubcab 弹层顶部，不另起面板。 */
.cab-seat{border:1px solid var(--line);border-radius:10px;background:rgba(255,253,248,.75);padding:9px 10px;margin:0 0 10px}
.cs-head{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.cs-head .cs-t{font-weight:800;font-size:14px;color:var(--seal);letter-spacing:.5px}
.cs-head .cs-sub{font-size:11.5px;color:var(--muted);margin-left:auto}
.cs-gap{display:flex;align-items:baseline;gap:8px;font-size:12.5px;padding:6px 8px;border-radius:7px;margin-bottom:7px;background:rgba(140,31,40,.05);border-left:3px solid rgba(140,31,40,.35)}
.cs-gap b{font-weight:800;letter-spacing:.5px;flex:none}
.cs-gap span{color:var(--muted)}
.cs-gap-strong{background:rgba(47,107,58,.08);border-left-color:#2f6b3a}
.cs-gap-strong b{color:#2f6b3a}
.cs-gap-weak{background:rgba(164,52,43,.09);border-left-color:#a4342b}
.cs-gap-weak b{color:#a4342b}
.cs-gap-none{background:rgba(140,120,90,.07);border-left-color:rgba(140,120,90,.4)}
.cs-gap-none b{color:var(--muted)}
.cs-tb{width:100%;border-collapse:collapse;font-size:12px}
.cs-tb th{font-weight:600;font-size:11px;color:var(--muted);text-align:left;padding:3px 4px;border-bottom:1px solid var(--line);white-space:nowrap}
.cs-tb td{padding:3px 4px;border-bottom:1px dashed rgba(160,120,80,.16)}
.cs-tb tr:last-child td{border-bottom:none}
.cs-no{font-weight:800;color:#8a6a1a;width:2.2em;text-align:center}
.cs-nm{font-weight:700;white-space:nowrap}
.cs-ln{color:var(--muted);white-space:nowrap}
.cs-yr{color:var(--muted);text-align:right;width:2.4em}
.cs-fv{text-align:right;width:2.4em}
.cs-fv.ok{color:#2f6b3a;font-weight:700}
.cs-fv.bad{color:#a4342b}
.cs-am{text-align:right;width:2.4em}
.cs-am.hot{color:#a4342b;font-weight:800}
.cs-ag{text-align:right;width:2.4em;color:var(--muted)}
.cs-ag.warn{color:#b8860b;font-weight:700}
.cs-nt{white-space:nowrap}
.cs-tag{display:inline-block;font-size:10px;padding:1px 5px;border-radius:999px;background:rgba(140,31,40,.1);color:#8c1f28;margin-right:3px}
.cs-tag.ok{background:rgba(47,107,58,.12);color:#2f6b3a}
.cs-tag.bad{background:rgba(164,52,43,.14);color:#a4342b}
.cs-tag.warn{background:rgba(184,134,11,.16);color:#8a6a1a}
.cs-tag.me{background:rgba(140,31,40,.16);color:#8c1f28;font-weight:700}
.cs-dlt{font-size:10.5px;color:var(--muted)}
.cs-dlt.strong{color:#2f6b3a;font-weight:700}
.cs-dlt.weak{color:#a4342b}
.cs-tb tr.cs-me td{background:rgba(140,31,40,.055)}
.cs-tb tr.cs-me .cs-no,.cs-tb tr.cs-me .cs-nm{color:#8c1f28;font-weight:800}
.cs-foot{font-size:11.5px;color:var(--muted);margin-top:6px;padding-top:5px;border-top:1px solid var(--line)}
.cs-foot b{color:var(--ink2)}
.cs-log{margin-top:5px}
.cs-logrow{font-size:11px;color:var(--muted);line-height:1.6}
.cs-logy{display:inline-block;min-width:4.6em;color:#8a6a1a}
[data-theme="dark"] .cab-seat{background:rgba(30,26,22,.62);border-color:rgba(200,170,130,.2)}
[data-theme="dark"] .cs-head .cs-t{color:#e8a598}
[data-theme="dark"] .cs-tb th{border-bottom-color:rgba(200,170,130,.22)}
[data-theme="dark"] .cs-tb td{border-bottom-color:rgba(200,170,130,.13)}
[data-theme="dark"] .cs-tb tr.cs-me td{background:rgba(200,80,70,.12)}
[data-theme="dark"] .cs-tb tr.cs-me .cs-no,[data-theme="dark"] .cs-tb tr.cs-me .cs-nm{color:#e8a598}
[data-theme="dark"] .cs-no{color:#e0c070}
[data-theme="dark"] .cs-gap{background:rgba(200,80,70,.1);border-left-color:rgba(200,80,70,.45)}
[data-theme="dark"] .cs-gap-strong{background:rgba(80,180,110,.12);border-left-color:#3f7a52}
[data-theme="dark"] .cs-gap-strong b{color:#8fd0a4}
[data-theme="dark"] .cs-gap-weak b{color:#e0705c}
[data-theme="dark"] .cs-fv.ok{color:#8fd0a4}
[data-theme="dark"] .cs-fv.bad,[data-theme="dark"] .cs-am.hot{color:#e0705c}
[data-theme="dark"] .cs-ag.warn{color:#e0c070}
[data-theme="dark"] .cs-tag{background:rgba(200,80,70,.18);color:#e8a598}
[data-theme="dark"] .cs-tag.ok{background:rgba(80,180,110,.16);color:#8fd0a4}
[data-theme="dark"] .cs-tag.bad{background:rgba(200,80,70,.2);color:#e0705c}
[data-theme="dark"] .cs-tag.warn{background:rgba(210,170,60,.18);color:#e0c070}
[data-theme="dark"] .cs-tag.me{background:rgba(200,80,70,.24);color:#f0b8ac}
[data-theme="dark"] .cs-dlt.strong{color:#8fd0a4}
[data-theme="dark"] .cs-dlt.weak{color:#e0705c}
[data-theme="dark"] .cs-logy{color:#e0c070}
[data-theme="dark"] .cs-foot{border-top-color:rgba(200,170,130,.2)}

/* 分管线口扁平行式（常委工作台内，不再框套框） */
.scl-list{display:flex;flex-direction:column;gap:6px}
.scl-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 8px;border-radius:8px;background:rgba(255,253,248,.7);border:1px solid rgba(160,120,80,.18)}
.scl-row-soft{background:transparent;border-style:dashed}
.scl-bar{width:4px;align-self:stretch;min-height:28px;border-radius:2px;background:#c4b49a;flex:none}
.scl-bar.ok{background:#2f6b3a}.scl-bar.bad{background:#a03a2a}.scl-bar.num-mid{background:#b8860b}
.scl-name{font-weight:800;min-width:4.5em;font-size:13px}
.scl-val{font-weight:800;font-size:15px;min-width:2em;text-align:right}
.scl-val.ok{color:#2f6b3a}.scl-val.bad{color:#a03a2a}.scl-val.num-mid{color:#8a6a1a}
.scl-m{font-size:11.5px;color:var(--muted);flex:1;min-width:8em}
.scl-chief{font-size:11.5px;color:var(--muted);min-width:7em}
.scl-acts{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto}
.sc-sec-lines .sc-sec-t{margin-bottom:6px}
/* 分区框减淡：外框已描红，内框不再层层加粗 */
.sc-sec{border-color:rgba(160,120,80,.22);padding:10px}
/* 议事统一核 */
.meet-core-bar{margin:0 0 10px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:rgba(140,31,40,.04)}
.meet-core-steps{margin:4px 0;font-size:12px;color:var(--muted)}
.meet-step{display:inline-block;margin-right:2px}
/* 常委工作台 · 整洁条带 */
.sc-clean{border:2px solid var(--seal);border-radius:10px;background:var(--card);padding:10px 12px;margin:0 0 12px}
.sc-clean-h{display:flex;align-items:baseline;gap:10px;padding-bottom:6px;border-bottom:1px solid var(--line);margin-bottom:8px}
.sc-clean-h b{font-size:15px;color:var(--seal);letter-spacing:1px}
.sc-clean-h em{font-style:normal;font-size:12px;color:var(--muted);margin-left:auto}
.sc-clean-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.sc-clean-row .chip{min-width:4.5em}
.sc-clean-stat{font-size:12.5px;color:var(--ink2);padding:6px 8px;background:rgba(140,31,40,.04);border-radius:6px;margin-bottom:8px}
.sc-clean .scl-row{margin-bottom:4px}
/* 常委工作台 · 小按钮 */
.sc-clean-row .chip{padding:2px 9px;font-size:12px;min-width:0;border-radius:999px;line-height:1.6;background:#fff;border:1px solid rgba(140,31,40,.35);color:#8c1f28;font-weight:600}
.sc-clean-row .chip.primary{padding:3px 10px}
.sc-clean-stat{font-size:12px;padding:5px 8px}
/* 副职分管块 · 紧凑按钮（禁止撑满整行） */
.dp2-deepbox .chip{display:inline-flex!important;width:auto!important;flex:0 0 auto;padding:2px 10px!important;font-size:12px!important;min-height:0;line-height:1.5}
.dp2-deepbox .dp2-sub{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0}
.dp2-deepbox .dp2-sub .muted{flex:1 1 12em;min-width:0}
.dp2-deepbox .dp2-deephead{margin-bottom:4px}
.dp2-acts{display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end}
.dp2-acts .chip{display:inline-flex!important;width:auto!important;padding:2px 9px!important;font-size:11.5px!important}
.dp2-opsbox{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px}

/* 2026-09-30 副职侧栏描红兜底：副职处境+科室框，其他职级/位置出现同样描红 */
.panel.deputy,.panel.sq-side{border:3px solid var(--seal)}

/* ★ 确认提交按钮（2026-10-11）：子流程里选完之后的「就这么办/交上去」——
   实心红底白字，与普通选项一眼区分 */
.opt.opt-go {
  background: #8c1f28 !important;
  border-color: #8c1f28 !important;
  color: #fff !important;
  box-shadow: 0 2px 6px rgba(140, 31, 40, .3);
}
.opt.opt-go .opt-label { color: #fff !important; font-weight: 800; }
.opt.opt-go .opt-meta { color: rgba(255, 255, 255, .85) !important; }
.opt.opt-go:disabled {
  background: #6e6257 !important;
  border-color: #6e6257 !important;
  color: rgba(255, 255, 255, .78) !important;
  box-shadow: none;
  transform: none;
  opacity: 1;
}
.opt.opt-go:disabled .opt-label { color: rgba(255, 255, 255, .78) !important; }
.opt.opt-go:disabled .opt-meta { color: rgba(255, 255, 255, .62) !important; }
/* 提交键与选项堆拉开距离，独占一行 */
.opts .opt.opt-go { margin-top: 10px; grid-column: 1 / -1; }

/* ================================================================
   ★ 军令状外框（2026-10-11，玩家素材）：卷草纹卡片框
   —— 只叠外框，盒模型/内容零改动（伪元素环 + pointer-events:none）
   　slice 不带 fill：中心透明，不遮盖原内容；round 等比缩放防角饰断裂
   ================================================================ */
/* \u6307\u4ee4\u4e66\u6807\u51c6\u6cd5\uff1a\u5bb9\u5668\u76f4\u52a0 border-image + \u5185\u8fb9\u8ddd\u8865\u507f\uff08\u6587\u5b57\u4f4d\u7f6e\u4e0d\u53d8\uff09 */
.panel.orders-wide {
  border: 20px solid transparent;
  border-image-source: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22300%22 height=%22300%22 viewBox=%220 0 300 300%22%3E%3Crect x=%225%22 y=%225%22 width=%22290%22 height=%22290%22 fill=%22none%22 stroke=%22%237a2018%22 stroke-width=%226%22/%3E%3Crect x=%2217%22 y=%2217%22 width=%22266%22 height=%22266%22 fill=%22none%22 stroke=%22%23b06a4a%22 stroke-width=%222.5%22/%3E%3Crect x=%2226%22 y=%2226%22 width=%22248%22 height=%22248%22 fill=%22none%22 stroke=%22%23c9a227%22 stroke-width=%221.6%22/%3E%3Cdefs%3E%3Cg id=%22a%22 fill=%22none%22%3E%3Cpath d=%22M5 40 L5 14 Q5 5 14 5 L40 5%22 stroke=%22%237a2018%22 stroke-width=%229%22/%3E%3Cpath d=%22M17 33 L17 19 Q17 17 19 17 L33 17%22 stroke=%22%23c9987e%22 stroke-width=%222.5%22/%3E%3Cpath d=%22M13 6 L22 15 L13 24 L4 15 Z%22 fill=%22%23a83226%22 stroke=%22%23e8c987%22 stroke-width=%221.2%22/%3E%3C/g%3E%3C/defs%3E%3Cuse href=%22%23a%22/%3E%3Cuse href=%22%23a%22 transform=%22translate(300,0) scale(-1,1)%22/%3E%3Cuse href=%22%23a%22 transform=%22translate(0,300) scale(1,-1)%22/%3E%3Cuse href=%22%23a%22 transform=%22translate(300,300) scale(-1,-1)%22/%3E%3C/svg%3E");
  border-image-slice: 30;
  border-image-width: 20px;
  border-image-repeat: round;
  border-radius: 0;
  padding: 38px 42px 36px 42px;
}

/* ★ 任上案头入口网格（2026-10-11）：收拖七个模块塞进晋升面板的入口按钮 */
.deskentry { margin-top: 10px; }
.deskgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.deskcard {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 9px 11px;
}
.deskcard-h b { font-size: 13px; color: var(--ink); }
.deskcard-d { margin: 3px 0 6px; line-height: 1.5; }
.deskcard-b { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
@media (max-width: 900px) { .deskgrid { grid-template-columns: 1fr; } }

/* ================================================================
   ★ 晋升进度外框（2026-10-11 新素材）：阶梯纹角饰 + 五星印
   —— 仅外框，盒模型/内容零改动（内边距补偿，文字位置不变）
   ================================================================ */
.panel.promo, .promo { position: relative; }
/* ★★ 2026-10-15 修 BUG：副厅「发起提拔考核」点不动
   病因：本块原来那行 border-image-source 的 data URI 缺一个闭合引号，未闭合的 url( 会
   吞掉其后所有声明 ⇒ pointer-events:none 从未生效 ⇒ inset:-12px 的 18px 透明边框伪元素
   按默认 auto 盖满整张「📈 晋升进度」卡，卡内所有按钮点击全被它吃掉（按钮不灰、不报错、点了没反应）。
   修法：删掉那条从未渲染成功的 border-image-source（视觉零变化），恢复 pointer-events:none。
   详见 .workbuddy-ai/memory/2026-10-15.md。 */
.panel.promo::after, .promo::after {
  content: '';
  position: absolute;
  inset: -12px;
  border: 18px solid transparent;
  border-image-slice: 44;
  border-image-width: 18px;
  border-image-repeat: round;
  pointer-events: none;
}
.panel.promo, .promo { padding: 34px 32px 28px 32px; }

/* 案头卡版式 v2：等高卡、状态行、按钮底部对齐 */
.deskcard { display: flex; flex-direction: column; min-height: 128px; }
.deskcard-h { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
.deskcard-h b { font-size: 13.5px; }
.deskcard-s {
  margin: 5px 0 0;
  font-size: 12px;
  color: #8c1f28;
  background: rgba(140, 31, 40, .06);
  border-left: 2px solid #8c1f28;
  padding: 3px 7px;
  border-radius: 3px;
  line-height: 1.5;
}
.deskcard-d { margin: 4px 0 0; }
.deskcard-b { margin-top: auto; padding-top: 6px; }
.deskcard-b .chip { max-width: 100%; }

/* 组织工作分页：段落间距 */
.ow-sec { margin-top: 10px; }
.ow-sec .dp2-deepbox { margin-bottom: 10px; }
.ow-sec .dp2-sub { line-height: 1.7; margin: 3px 0; }

/* ★ 财政简报/专项债券 卡片分区 */
.fin-card { background: rgba(255,255,255,.55); border: 1.5px solid rgba(30,22,8,.5); outline: 1px solid rgba(164,52,43,.14); outline-offset: 2.5px; border-radius: 10px; padding: 10px 12px; margin: 8px 0; box-shadow: 0 1px 3px rgba(30,22,8,.08); }
.bond-proj { background: rgba(255,255,255,.55); border: 1.5px solid rgba(30,22,8,.5); outline: 1px solid rgba(164,52,43,.14); outline-offset: 2.5px; border-radius: 10px; padding: 10px 12px !important; box-shadow: 0 1px 3px rgba(30,22,8,.08); }
[data-theme='dark'] .fin-card, [data-theme='dark'] .bond-proj { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.18); }

/* ★ 年度施政大会 · 班子表态细化（govplan.js 2026-10-13）GOVPLAN_VOTE */
.govcar-row .tiny{min-width:46px;padding:2px 6px;font-size:12px}
.govcar-row .tiny.t-warn{border-color:#a33;color:#a33;background:rgba(170,51,51,.08)}
.govcar-row .muted.t-ok{color:#2f7a3f;font-weight:700}
.govcar-row .muted.t-risk{color:#8b6914;font-weight:700}
.govp-ta{width:100%;box-sizing:border-box;border:1px solid #c9b8dd;border-radius:6px;padding:8px;background:rgba(255,255,255,.95);color:#3a2a20;font:inherit;font-size:13px;line-height:1.6;resize:vertical}
[data-theme="dark"] .govp-ta{background:rgba(40,28,20,.9);color:#e8dcc8}


/* ==================== 年度施政大会 · 庭议会：班子成员多选共议（2026-10-13） ==================== */
.govp-m-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 8px 0; }
.govp-m { display: flex; align-items: center; gap: 6px; border: 1px solid rgba(140,100,40,.22); border-radius: 8px; background: rgba(255,253,246,.6); padding: 5px 6px; cursor: pointer; text-align: left; width: 100%; }
.govp-m:hover { border-color: rgba(164,52,43,.5); }
.govp-m.picked { border-color: var(--seal,#a33); background: rgba(164,52,43,.08); box-shadow: 0 0 0 1px rgba(164,52,43,.25); }
.govp-m-pt { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; flex: none; border: 1px solid rgba(140,100,40,.3); background: #f6efe4; }
.govp-m-t { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.govp-m-t b { font-size: 12.5px; color: #5a3e2b; }
.govp-m-t small { font-size: 10.5px; color: #8a7a5e; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.govp-m-t em { font-style: normal; font-size: 10px; color: var(--seal,#a33); }
.govp-m-ck { font-size: 14px; color: var(--seal,#a33); flex: none; }
.govp-disc-body { max-height: 300px; overflow-y: auto; display: flex; flex-direction: column; gap: 7px; margin: 6px 0; }
.govp-disc-row { display: flex; gap: 7px; align-items: flex-start; background: rgba(255,253,246,.6); border: 1px solid rgba(140,100,40,.16); border-radius: 8px; padding: 5px 7px; }
.govp-disc-row .govp-m-pt { width: 26px; height: 26px; }
.govp-disc-b { flex: 1; min-width: 0; }
.govp-disc-b b { font-size: 12px; color: #5a3e2b; }
.govp-disc-b em { font-style: normal; font-size: 10px; color: #2a6b3a; background: rgba(42,107,58,.1); border-radius: 4px; padding: 0 4px; margin-left: 4px; }
.govp-disc-b em.govp-src.loc { color: #8a6d3b; background: rgba(138,109,59,.1); }
.govp-disc-b p { margin: 2px 0 0; font-size: 12.5px; line-height: 1.6; color: #4c3a26; }
@media (max-width: 640px) { .govp-m-grid { grid-template-columns: repeat(2, 1fr); } }
[data-theme="dark"] .govp-m, [data-theme="dark"] .govp-disc-row { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .govp-m.picked { background: rgba(201,81,63,.18); border-color: rgba(201,81,63,.55); }
[data-theme="dark"] .govp-m-t b, [data-theme="dark"] .govp-disc-b b { color: #e6d9bb; }
[data-theme="dark"] .govp-disc-b p { color: #d8cbb0; }

.govp-m-tick { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; text-align: left; background: none; border: none; padding: 0; cursor: pointer; font: inherit; }
.govp-m-chat { position: absolute; top: 2px; right: 2px; width: 21px; height: 21px; border-radius: 50%; border: 1px solid rgba(140,100,40,.32); background: rgba(255,253,246,.97); color: #5a3e2b; font-size: 12px; line-height: 19px; cursor: pointer; padding: 0; text-align: center; }
.govp-m-chat:hover { border-color: var(--seal,#a33); color: var(--seal,#a33); }
.govp-chat-box { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 7px; margin: 6px 0; }
.govp-chat-row { display: flex; gap: 7px; align-items: flex-start; background: rgba(255,253,246,.6); border: 1px solid rgba(140,100,40,.16); border-radius: 8px; padding: 5px 7px; }
.govp-chat-row.me { background: rgba(164,52,43,.07); border-color: rgba(164,52,43,.24); }
.govp-chat-row .govp-m-pt { width: 26px; height: 26px; }
.govp-chat-b { flex: 1; min-width: 0; }
.govp-chat-b b { font-size: 12px; color: #5a3e2b; }
.govp-chat-b p { margin: 2px 0 0; font-size: 12.5px; line-height: 1.6; color: #4c3a26; }
.govp-chat-row.me b { font-size: 12px; color: #8a3c2a; }
.govp-chat-opts { display: flex; flex-direction: column; gap: 5px; margin: 6px 0; }
.govp-chat-opt { text-align: left; white-space: normal; }
[data-theme="dark"] .govp-chat-row { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
[data-theme="dark"] .govp-chat-row.me { background: rgba(201,81,63,.16); border-color: rgba(201,81,63,.45); }
[data-theme="dark"] .govp-chat-b b, [data-theme="dark"] .govp-chat-b p { color: #d8cbb0; }

/* 施政大会弹窗加宽：窄视口下撑满可用宽度、提高可用高度，发言区按视口扩容 */
.modal:has(.modal--govp) { padding: 10px; }
.modal--govp { width: calc(100vw - 20px); max-width: none; max-height: 96vh; }
.modal--govp .govp-disc-body { max-height: 46vh; }
.modal--govp .govp-chat-box { max-height: 46vh; }
.modal--govp .modal-body { max-height: 82vh; }

.modal:has(.modal--govp) { padding: 6px; }
.modal--govp { width: calc(100vw - 14px); max-width: none; max-height: 100vh; }
.modal--govp .modal-body { max-height: 90vh; }
.modal--govp .scene-illus { max-width: none; margin-bottom: 8px; }
.modal--govp .scene-illus img { height: auto; max-height: 150px; width: auto; max-width: 100%; margin: 0 auto; object-fit: contain; object-position: center; display:block; }
.modal--govp .govp-disc-body { max-height: 56vh; }
.modal--govp .govp-chat-box { max-height: 56vh; }

/* 一把手段位面板：底部按钮贴底（flex 列 + margin-top:auto；配合 .chief-wrap 取消等高拉伸，贴底且不产生大空白） */
.chief-gov .city-side-foot-btns { margin-top: auto !important; }

/* 抢人大战插图与事件卡（2026-10-13） */
.tw-hero{display:block;width:100%;border-radius:10px;margin:0 0 10px;max-height:190px;object-fit: cover; object-position: center}
.tw-policy,.tw-inflow{display:block;width:100%;border-radius:8px;margin:8px 0;max-height:140px;object-fit: cover; object-position: center}
.tw-evt{background:var(--paper2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 10px}
.tw-evt-h{font-weight:700;color:var(--ink);margin-bottom:4px}
.tw-evt p{font-size:12.5px;color:var(--ink2);margin:0 0 8px}

/* 贴底通用化：所有一把手 citySide 面板（含市级等无 .chief-gov 包装的档）底部按钮贴底 */
.city-side-col { min-width: 0; display: flex; flex-direction: column; }
.city-side .city-side-foot-btns { margin-top: auto !important; }

/* ============================================================
   ★ 2026-10-14 驻村三件事：困难户帮扶 / 在村里逛逛 / 村里建设
   （villageaid.js + villagewalk.js + villagebuild.js + villageplus.js）
   全部走既有主题变量（--paper2 / --line / --ink / --ink2 / --seal），
   亮色与暗色主题都不会出白底黑字或黑底黑字。
   ============================================================ */

/* —— 驻村主页：三张功能框分列「村情与行动」两边（2026-10-14 改版） ——
   版式：左 1 张（五保户） | 中 村情面板 | 右 2 张（逛逛 / 建设）
   三栏等高；窗格窄了自动降成「中栏在上、两卡在下」，再窄单列。
   用容器查询而不是视口查询：主栏宽度取决于三栏断点，视口宽度是它的坏代理。 */
.village-home { width: 100%; max-width: 1080px; margin: 12px auto; text-align: center; container-type: inline-size; }
.vh-wrap { display: grid; grid-template-columns: 1fr; gap: 10px; align-items: stretch; text-align: left; }
/* 三栏最小宽度合计 150+280+150+20 = 600 < 630（降级阈值），所以三栏状态下永远不会横向溢出 */

/* 单张功能卡：插图在上，说明居中，按钮钉底 */
.vh-card { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; min-height: 100%; padding: 0; border: 1.5px solid var(--seal); border-radius: 10px; background: #fffdf6; cursor: pointer; overflow: hidden; font-family: inherit; text-align: left; box-shadow: 0 2px 8px rgba(60,45,20,.10); transition: transform .15s, box-shadow .15s, border-color .15s; }
.vh-card:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(120,96,60,.18); border-color: var(--seal); }
.vh-card.hot { border-color: var(--seal2, var(--seal)); }
.vh-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 4px; align-items: stretch; }
.vh-num { display: block; font-size: 12.5px; font-weight: 800; color: var(--seal); margin-top: 4px; line-height: 1.45; }
.vh-img { display: block; flex: 0 0 92px; min-height: 92px; max-height: 92px; overflow: hidden; background: var(--paper2); }
/* 左栏只有 1 张卡，会被拉到跟中栏一样高：插图别无限长高，封顶 380 —— 再高就把横幅插图裁成细条了 */
.vh-img img { width: 100%; height: 100%; object-fit: cover; object-position: center 52%; display: block; }
.vh-body { display: block; padding: 8px 10px 0; }
.vh-tit { display: block; font-size: 12.5px; font-weight: 700; color: var(--ink); line-height: 1.35; }
.vh-k { display: block; font-size: 11px; color: var(--ink2); margin-top: 3px; line-height: 1.45; }
.vh-sub { display: block; font-size: 10.5px; color: var(--ink2); opacity: .8; line-height: 1.45; margin-top: 2px; }
.vh-go { display: block; margin: auto 10px 10px; padding: 6px 8px; text-align: center; font-size: 11.5px; font-weight: 700; letter-spacing: 1px; color: #fff; background: var(--seal); border-radius: 7px; }
.vh-card:hover .vh-go { background: var(--seal2, var(--seal)); }

/* 中栏：插图 → 小字入口按钮（原来那句说明）→ 村情 */
.vh-main { display: flex; flex-direction: column; min-width: 0; text-align: center; border: 1.5px solid #c9a227; border-radius: 10px; background: #fffdf6; padding: 12px; box-shadow: 0 2px 8px rgba(60,45,20,.10); }
.vh-hero { display: block; width: 132px; height: 132px; object-fit: cover; object-position: center; border-radius: 10px; border: 2px solid #c9a227; box-shadow: 0 2px 8px rgba(0,0,0,.14); margin: 12px auto 0; }
.vh-gate { display: flex; align-items: center; gap: 9px; width: 100%; margin: 10px 0 0; padding: 9px 12px; border: 1px solid #7d241e; border-left: 4px solid #7d241e; border-radius: 8px; background: linear-gradient(180deg, #c23a2f, #a4342b); color: #fff; font-family: inherit; font-size: 11.5px; line-height: 1.55; text-align: left; cursor: pointer; box-shadow: 0 2px 6px rgba(164,52,43,.35); transition: border-color .15s, background .15s, box-shadow .15s; }
.vh-gate:hover { border-color: #8e2a21; background: linear-gradient(180deg, #cf4638, #b23a30); box-shadow: 0 3px 10px rgba(120,30,20,.18); }
.vh-gate-tx { flex: 1 1 auto; min-width: 0; }
.vh-gate-go { flex: 0 0 auto; font-weight: 700; color: #ffe3c8; white-space: nowrap; letter-spacing: .5px; }
.vb-bar{display:flex;align-items:center;justify-content:space-between;width:100%;margin:8px 0 0;padding:8px 12px;border:1px solid #c9a227;border-radius:8px;background:#fffdf6;color:#2a2018;font-size:12px;cursor:pointer;box-shadow:0 1px 4px rgba(60,45,20,.08)}
.vb-bar b{color:#a4342b}
.vb-list{display:flex;flex-direction:column;gap:6px;margin:8px 0}
.vb-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid #e3d8bd;border-radius:8px;background:#fffdf6}
.vb-row .vb-t{flex:1 1 auto;font-size:12.5px;color:#2a2018}
.vb-row .vb-tag{font-size:10.5px;color:#8a7a5e}
.vb-row b{font-size:12.5px;color:#a4342b}
.vb-go{width:100%;margin-top:8px;padding:10px;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit}
.vb-opt:hover{border-color:#c9a227;box-shadow:0 2px 6px rgba(60,45,20,.12)}

.vh-main h3 { border-left: 0; padding-left: 0; }
.vh-inner { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; margin-top: 8px; }
.vh-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; text-align: left; }
.vh-info .vh-p { margin: 2px 0; }
.vh-main h3 { text-align: center; }
.vh-card .vh-tit, .vh-card .vh-num, .vh-card .vh-sub { text-align: center; }
.vh-p { margin: 2px 0; }
.vh-p b { color: var(--ink); }
.vh-main .vh-pain { color: var(--seal); }
.vh-bars { margin: 6px 0 0; }

/* ★ 2026-10-27 村情与行动弹窗 · 行动按钮整改（用户截图报改：按钮过大/文字过多/样式难看）
   结构改成了 chip tiny（小胶囊、可换行流式排布），长说明全部移进悬停提示。
   .vact-ap 是小号 AP 徽标；.off 是 AP/集体账不足时的置灰。
   ★ 必须压住两条全局「放大镜」规则，否则「做小」落不了地：
     styles.css:8759 `.modal-body .chip{font-size:14.5px!important;min-height:36px}`
     styles.css:8764 `.modal-body .chip.tiny{font-size:13.5px!important;padding:5px 11px!important}`
     ⇒ 选择器要比它们更具体（同为 .modal-body 后代时靠类名个数取胜），
       并用 !important 覆盖。 */
.village-modal .opts, .modal .opts { display: flex; flex-wrap: wrap; gap: 6px; }
.vact { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.modal-body .opts .chip.tiny.vact { font-size: 12.5px !important; padding: 4px 10px !important; line-height: 1.35; min-height: 0 !important; }
.modal-body .opts .chip.tiny.vact .vact-ap { font-style: normal; font-size: 10px; font-weight: 800; line-height: 1; padding: 1px 5px; border-radius: 8px; background: rgba(125,36,30,.10); color: var(--seal); }
.vact.off { opacity: .55; }
.vact.off .vact-ap { background: rgba(90,74,51,.12); color: #8a7a5f; }
.vact:hover:not(:disabled) { border-color: var(--seal); }

/* ★ 2026-10-27 为提拔运作 · 动作按钮整改（同批报改：按钮过大/文字过多/样式难看）
   原来九个 .btn 整宽竖排、每格里塞一整句话，弹窗被撑得极长。
   现在收成两列小胶囊网格：标签只留动作名，AP 做成小徽标，说明进 title 悬停提示。 */
.promo-acts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.modal-body .promo-acts .chip.tiny { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; font-size: 12.5px !important; padding: 4px 11px !important; min-height: 0 !important; font-weight: 700 !important; letter-spacing: .5px; line-height: 1.35; }
.promo-acts .chip.tiny .vact-ap { font-style: normal; font-size: 10px; font-weight: 800; line-height: 1; padding: 1px 5px; border-radius: 8px; background: rgba(125,36,30,.10); color: var(--seal); }
.promo-acts .chip.tiny.primary { background: var(--seal); color: #fff; border-color: var(--seal); }
.promo-acts .chip.tiny.primary .vact-ap { background: rgba(255,255,255,.22); color: #fff; }
.promo-acts .chip.tiny.primary:hover:not(:disabled) { background: var(--seal2); }
.promo-acts .chip.tiny:disabled { opacity: .5; }
.promo-acts .chip.tiny.ghost { background: transparent; border-style: dashed; }
.promo-acts .chip.tiny:hover:not(:disabled) { border-color: var(--seal); }

@container (max-width: 630px) {
  .vh-wrap { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: repeat(2, 1fr); }
  .vh-main { grid-column: 1 / -1; grid-row: 1; }
}
@container (max-width: 430px) {
  .vh-wrap { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: 1fr; }
}
/* 容器查询不被支持时的窄屏兜底 */
@media (max-width: 760px) {
  .vh-wrap { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: repeat(2, 1fr); }
  .vh-main { grid-column: 1 / -1; grid-row: 1; }
}
@media (max-width: 520px) {
  .vh-wrap { grid-template-columns: 1fr; }
  .vh-row { grid-template-columns: 1fr; }
}

/* —— 困难户帮扶（2026-10-15：六口径分区 + 需求/户类型双色标 + 户主立绘） —— */
/* ★★ 2026-10-24 昊：「困难帮扶框里的黄色底太丑了吧 生成新的适合的资源换上」
   ────────────────────────────────────────────────────────────────
   病根：`.va-group` 和 `.va-card` 都直接铺 `var(--paper2)` = **#e3d3ac 实心土黄**，
         `.va-ghead` 又叠一层 `--paper3`（这个 token 全站**从未定义**，一直在吃
         回退值 #f0e9dc）。两层土黄叠在纸白弹窗里，整块面板像一片黄泥地。
   改法：三层全换成**商汤生成的宣纸纹理位图**（assets/paper/*.webp，512px 无缝平铺），
        `.va-group` 用 paper_main（米黄 #f5e8c5，与 --paper 同色系），
        `.va-card` 用 paper_light（近纸白 #f8f3e6），`.va-ghead` 用半透纸白。
        纹理只有 ±3 的色差，肉眼是「纸的质感」而不是「一块颜色」。
   ★ 素材不能直接改色值：它们是位图，改色会花；要换色请改这两张 webp。
   ★ 暗色主题下纸纹会发白 ⇒ 用 `filter` 压暗 + 降低不透明度（见后面暗色段）。 */
.va-paper, .va-group, .va-card {
  background-repeat: repeat;
  background-size: 512px 512px;
}
.va-group {
  margin-top: 10px; border-radius: 10px; padding: 8px 8px 4px;
  background-color: var(--paper, #f7f1e6);
  /* ★ 分组区**不加白罩**，直接用纸纹本身的米黄（实测 (244,232,197)）。
     踩过两轮：加 0.34 白罩 → 渲成 (253,250,238)，与卡片区（254,252,246）几乎同色，
     六个分区糊成一片、层次全丢；加 0.10 也只到 (252,248,234)，仍然分不开。
     结论：层次靠「分组区用米黄纸纹 / 卡片用纸白」拉开，不靠白罩调。 */
  background-image: url("paper/paper_main.webp?v=20261027PERF1");
  border: 1px solid rgba(120, 96, 60, .16);
}
.va-ghead { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin: 0 0 4px; padding: 5px 9px; border-radius: 7px;
  background: rgba(255, 253, 247, .72);
  border: 1px solid var(--line); }
.va-gt { font-weight: 700; font-size: 13px; color: var(--ink); }
.va-gtc { border-radius: 5px; padding: 1px 8px; }
.va-gn { font-size: 11px; color: var(--seal); font-weight: 700; }
.va-gs { font-size: 11px; color: var(--ink3, #8a7f6c); flex: 1 1 100%; }
/* 需求色标图例（面板头上）—— 底也换成纸纹，别再是第二种米黄 */
.va-legend { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: 8px 0 2px; padding: 6px 9px; border-radius: 8px;
  background-color: var(--paper2, #fbf6ec);
  background-image: linear-gradient(rgba(255, 253, 247, .78), rgba(255, 253, 247, .78)), url("paper/paper_light.webp?v=20261027PERF1");
  background-size: 512px 512px;
  border: 1px dashed var(--line); }
.va-lg-k { font-size: 11px; font-weight: 800; color: var(--seal); letter-spacing: .05em; flex: none; }
/* 单户卡片：立绘 + 正文 两栏，框边强化 */
.va-list { display: flex; flex-direction: column; gap: 8px; margin-top: 5px; }
.va-card { position: relative; display: block;
  border: 1.5px solid var(--line); border-left: 4px solid var(--seal); border-radius: 12px;
  background-color: var(--card, #fbf7ef);
  /* ★ 白罩 0.30：纸纹（248,243,230）+ 一层薄白 ⇒ 明显比分组区的米黄浅一档，
     六区之间的分隔才看得出来。0.80 是把纸纹压没了（等于白换图），0.42 还不够浅。 */
  background-image: linear-gradient(rgba(255, 254, 250, .30), rgba(255, 254, 250, .30)), url("paper/paper_light.webp?v=20261027PERF1");
  overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.35), 0 2px 6px rgba(120,96,60,.08); }
.va-card.acted { border-color: #9db489;
  background-image: linear-gradient(rgba(246, 249, 238, .50), rgba(246, 249, 238, .50)), url("paper/paper_light.webp?v=20261027PERF1"); }
/* 分类插画：圆角方图 + 细描边（现代微彩水墨，随户类型变化） */
.va-art { display: flex; align-items: center; justify-content: center; }
.va-art img { width: 84px; height: 84px; object-fit: cover; border-radius: 10px;
  border: 1.5px solid var(--line); background: #efe8d8; }
/* 正文列 */
.va-main { min-width: 0; }
.va-sec { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; padding: 7px 12px; background: linear-gradient(#fbf4ea, #f6ecdb); border-bottom: 1px solid var(--line); }
.va-body { display: grid; grid-template-columns: 110px 1fr; gap: 12px; padding: 10px 12px; align-items: start; }
.va-art img { width: 110px; height: 110px; }
.va-hr { border-top: 1.5px solid #cdb98f; margin: 0 12px; }
.va-no { font-size: 10.5px; font-weight: 800; color: #fff; background: var(--seal); border-radius: 4px; padding: 1px 7px; letter-spacing: .5px; }
.va-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.va-ty { font-size: 11.5px; color: var(--seal); border: 1px solid var(--line); border-radius: 20px; padding: 1px 8px; background: var(--paper); }
.va-tyc { border-radius: 20px; padding: 1px 8px; font-size: 11.5px; font-weight: 700; }
.va-name { font-size: 14.5px; font-weight: 700; color: var(--ink); letter-spacing: .3px; }
.va-meta { font-size: 11px; color: var(--ink3, #8a7f6c); }
.va-cause { font-size: 12px; color: var(--ink2); margin: 5px 0 4px; line-height: 1.5; }
/* 需求行：标签 + 需求项（按需求类别着色：见 NEED_COLOR；待摸排=灰） */
.va-needrow { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; margin: 0 0 6px; }
.va-needk { font-size: 10.5px; font-weight: 700; color: var(--seal); border: 1px solid var(--seal); border-radius: 4px; padding: 0 5px; line-height: 1.6; flex: none; }
.va-nd { display: inline-block; font-size: 13px; font-weight: 700; border-radius: 4px; padding: 1px 7px; margin: 0 4px 2px 0; }
/* ★ 2026-10-24：图标进来后色标变成「图 + 字」两段，改用 inline-flex 让图标与字垂直居中。
   （不用 `:has()` 做条件分支——旧内核不支持，直接一律 flex，emoji 兜底时同样正常） */
.va-ndc { display: inline-flex; align-items: center; gap: 3px;
  font-size: 12.5px; font-weight: 700; border-radius: 4px; padding: 1px 7px; margin: 0 4px 2px 0;
  line-height: 1.5; vertical-align: middle; }
/* 需求图标：商汤生成的水墨剪影位图（96px 透明底，米黄圆盘已在安装时裁掉）。
   ⚠️ 尺寸别小于 16px —— 这批图是按「20px 可辨识」重画过的，
      再小（比如压到 12px）撕纸和床就又开始糊了。18px 是实测的舒服值。 */
.va-ndi { width: 18px; height: 18px; flex: none; object-fit: contain;
  display: inline-block; vertical-align: -4px; }
.va-nd.unk { color: var(--ink3, #8a7f6c); background: transparent; border-color: var(--line); font-style: italic; }
/* 数值条：标签中性、数值与进度同色（高=绿/中=黄/低=红，与需求色区分） */
.va-bars { display: flex; flex-direction: column; gap: 4px; margin-bottom: 4px; }
.va-bar { display: grid; grid-template-columns: 56px 1fr 34px; align-items: center; gap: 8px; font-size: 11px; }
.va-bk { color: var(--ink3, #8a7f6c); letter-spacing: .5px; }
.va-bar .stat-track.mini { height: 7px; background: rgba(120,96,60,.14); border-radius: 4px; overflow: hidden; }
.va-bar .stat-track.mini i { display: block; height: 100%; border-radius: 4px; }
.va-bar .stat-track.mini i.c-ok { background: #6f9a5b; }
.va-bar .stat-track.mini i.c-proj { background: #d9a23c; }
.va-bar .stat-track.mini i.c-no { background: #b5543f; }
.va-bv { text-align: right; font-weight: 700; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.va-bv.c-ok-tx { color: #4f7a3e; }
.va-bv.c-proj-tx { color: #b3791f; }
.va-bv.c-no-tx { color: #a33e2b; }
/* 底部：户主感受（按档着色）+ 动作按钮 */
.va-foot { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
.va-mood { font-size: 11px; flex: 1; }
.va-mood.g-ok { color: #4f7a3e; font-weight: 600; }
.va-mood.g-mid { color: #8a7f6c; }
.va-mood.g-low { color: #b3791f; }
.va-mood.g-bad { color: #a33e2b; font-weight: 600; }
/* ★ 2026-10-24 暗色：纸纹是**浅色位图**，在深底上会亮成一块白斑。
   做法不是换图（要维护两套），而是用 filter 压暗 + 半透明深色罩层盖住。
   ⚠️ 罩层必须在 background-image 的最后进（CSS 多背景：先写的在上层）。 */
[data-theme="dark"] .va-group {
  background-color: #201e1a;
  background-image: linear-gradient(rgba(26, 24, 20, .88), rgba(26, 24, 20, .88)), url("paper/paper_main.webp?v=20261027PERF1");
  border-color: rgba(255, 255, 255, .09);
}
[data-theme="dark"] .va-card {
  background-color: #26241f;
  background-image: linear-gradient(rgba(34, 32, 27, .90), rgba(34, 32, 27, .90)), url("paper/paper_light.webp?v=20261027PERF1");
}
[data-theme="dark"] .va-card.acted {
  background-image: linear-gradient(rgba(38, 46, 34, .90), rgba(38, 46, 34, .90)), url("paper/paper_light.webp?v=20261027PERF1");
}
[data-theme="dark"] .va-legend {
  background-color: #232119;
  background-image: linear-gradient(rgba(32, 30, 26, .90), rgba(32, 30, 26, .90)), url("paper/paper_light.webp?v=20261027PERF1");
}
[data-theme="dark"] .va-ghead { background: rgba(255, 255, 255, .05); }
[data-theme="dark"] .va-sec { background: rgba(255, 255, 255, .035); }
/* 需求图标在暗底上偏暗（剪影本色是深色）⇒ 提亮 + 一圈浅色描边把轮廓托出来。
   ★ 实测两条弯路，都写在样式表里防回退：
     · brightness(1.28) 不够 —— 赤红「看病吃药」、藕紫「无人照料」、黛灰「欠债遭灾」
       在深底上仍看不出轮廓。
     · brightness(1.75)+saturate(1.5) 过了 —— 颜色发荧光（橙的像荧光橘、紫的像霓虹紫），
       跟全站「宣纸水墨」的"素"完全相反。
     最终取中间值：亮度只提到 1.35，靠 drop-shadow 的浅色外圈托轮廓，颜色保持本来的墨调。 */
[data-theme="dark"] .va-ndi {
  filter: brightness(1.35) saturate(1.1)
          drop-shadow(0 0 1px rgba(255, 250, 240, .55))
          drop-shadow(0 0 2px rgba(255, 250, 240, .28));
}
/* 窄屏：立绘收窄、两栏变单栏堆叠 */
@media (max-width: 560px) {
  .va-card { grid-template-columns: 64px 1fr; gap: 8px; }
  .va-art img { width: 80px; height: 80px; }
  .va-por img { width: 46px; height: 46px; }
  .va-bar { grid-template-columns: 50px 1fr 30px; gap: 6px; }
}

/* —— 村里建设 —— */
/* ⚠ 2026-10-24 重要：项目卡 .vb-card / .vb-src 的**生效样式不在这里**。
   src/villagebuild.js 顶部有一份 VB_CSS，运行时以 <style id="vb-look-style"> 注入 <head>，
   它在文档流里排在 styles.css 之后，会盖掉本文件的同名规则（而且带 !important）。
   改卡片外观请去 villagebuild.js 的 VB_CSS，改这里无效——已实测确认（改完 computed 不变）。
   下面这段是原始骨架规则，只在 JS 未加载时兜底。 */
.vb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(178px, 1fr)); gap: 8px; margin-top: 6px; }
.vb-card { display: flex; flex-direction: column; gap: 3px; text-align: left; border: 1px solid var(--line); border-radius: 9px; padding: 9px 10px; background: var(--paper2); cursor: pointer; font-family: inherit; transition: border-color .15s, box-shadow .15s; }
.vb-card:hover { border-color: var(--seal); box-shadow: 0 4px 12px rgba(120,96,60,.15); }
.vb-card.done { opacity: .92; }
.vb-ico { font-size: 18px; line-height: 1; }
.vb-name { font-size: 12.5px; font-weight: 700; color: var(--ink); }
.vb-cost { font-size: 11px; color: var(--seal); opacity: .9; }
.vb-eff { font-size: 11px; color: var(--ink2); }
.vb-why { font-size: 10.5px; color: var(--ink2); opacity: .8; line-height: 1.4; margin-top: 2px; }
.vb-doing { padding: 6px 0; border-bottom: 1px dashed var(--line); }
.vb-srcs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 6px; }
@media (max-width: 760px) { .vb-srcs { grid-template-columns: 1fr; } }
.vb-src { display: flex; flex-direction: column; gap: 3px; text-align: left; border: 1px solid var(--line); border-radius: 9px; padding: 9px 10px; background: var(--paper2); cursor: pointer; font-family: inherit; transition: border-color .15s, box-shadow .15s; }
.vb-src:hover:not([disabled]) { border-color: var(--seal); box-shadow: 0 4px 12px rgba(120,96,60,.15); }
.vb-src[disabled] { opacity: .5; cursor: not-allowed; }
.vb-src-h { font-size: 12.5px; font-weight: 700; color: var(--ink); }
.vb-src-d { font-size: 11px; color: var(--ink2); line-height: 1.4; }
.vb-src-p { font-size: 10.5px; color: var(--seal); opacity: .9; }
.vb-voter { display: grid; grid-template-columns: 1fr auto; gap: 2px 8px; padding: 5px 0; border-bottom: 1px dashed var(--line); font-size: 12px; }
.vb-vname { color: var(--ink); }
.vb-vwhy { grid-column: 1 / -1; font-size: 11px; color: var(--ink2); line-height: 1.45; }

/* ============================================================
   履新记（2026-10-14）：主页入口块 + 五幕面板 + 人情账
   全部走主题变量（--paper2/--line/--ink/--ink2/--seal/--ok/--warn），
   暗色主题自动跟随；窄容器降级。
   ============================================================ */
.lx-card { width: 640px; margin: 12px auto; }
.lx-card.hot { border-color: var(--seal); }
.lx-card-h { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.lx-dots { display: inline-flex; gap: 4px; flex: 0 0 auto; }
.lx-dot { width: 8px; height: 8px; border-radius: 50%; border: 1px solid var(--line); background: var(--paper2); display: inline-block; }
.lx-dot.on { background: var(--seal); border-color: var(--seal); }
.lx-dot.cur { box-shadow: 0 0 0 3px rgba(164, 52, 43, .18); }
.lx-arrow { color: var(--seal); font-weight: 700; }

.lx-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--paper2); }
.lx-head-l b { font-size: 14px; color: var(--ink); }
.lx-head-r { font-size: 12.5px; color: var(--ink2); }
.lx-prog { font-size: 12px; color: var(--ink2); margin: 7px 0 8px; }

.lx-row { display: grid; grid-template-columns: 26px minmax(120px, 1fr) minmax(150px, 1.6fr) auto auto; gap: 8px; align-items: center; padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--paper2); margin-bottom: 6px; }
.lx-row.done { opacity: .74; }
.lx-row.cur { border-color: var(--seal); box-shadow: inset 3px 0 0 var(--seal); }
.lx-no { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; background: var(--paper); border: 1px solid var(--line); font-size: 12px; color: var(--ink2); }
.lx-row.cur .lx-no { background: var(--seal); color: #fff; border-color: var(--seal); }
.lx-nm { font-size: 13px; font-weight: 700; color: var(--ink); }
.lx-dc { font-size: 12px; color: var(--ink2); }
.lx-tag { font-size: 11px; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--line); white-space: nowrap; color: var(--ink2); }
.lx-tag.ok { color: var(--ok); border-color: var(--ok); }
.lx-tag.cur { color: #fff; background: var(--seal); border-color: var(--seal); }

.lx-sub { font-size: 13px; color: var(--ink); line-height: 1.75; margin: 4px 0 8px; }
.lx-p { font-size: 13px; line-height: 1.85; margin: 4px 0; color: var(--ink); }
.lx-quote { font-size: 12.5px; line-height: 1.8; color: var(--ink2); border-left: 3px solid var(--seal); padding: 6px 10px; margin: 6px 0; background: rgba(164, 52, 43, .05); border-radius: 0 6px 6px 0; }
.lx-note { font-size: 12px; color: var(--ink2); margin: 6px 0 0; }
.lx-eff { margin-top: 8px; font-size: 12px; color: var(--ink2); border-top: 1px dashed var(--line); padding-top: 6px; }

.lx-list-h { font-size: 12px; letter-spacing: 2px; color: var(--seal); font-weight: 700; margin: 10px 0 4px; }
.lx-list-i { display: flex; justify-content: space-between; gap: 10px; font-size: 12.5px; padding: 5px 8px; border-bottom: 1px dashed var(--line); }
.lx-list-i b { color: var(--ink); }

.lx-tones { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.lx-tone { display: flex; flex-direction: column; gap: 3px; text-align: left; padding: 9px 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--paper2); cursor: pointer; font-family: inherit; color: var(--ink); transition: border-color .15s, transform .15s, box-shadow .15s; }
.lx-tone:hover { border-color: var(--seal); transform: translateY(-2px); box-shadow: 0 6px 14px rgba(120, 96, 60, .16); }
.lx-tone-ic { font-size: 16px; }
.lx-tone-nm { font-size: 13px; font-weight: 700; color: var(--ink); }
.lx-tone-br { font-size: 11.5px; color: var(--ink2); line-height: 1.5; }
.lx-tone-ef { font-size: 11px; color: var(--seal); margin-top: 2px; }

.lx-fav { border: 1px solid var(--line); border-radius: 9px; padding: 8px 10px; margin-bottom: 6px; background: var(--paper2); }
.lx-fav.done { opacity: .7; }
.lx-fav-w b { font-size: 13px; color: var(--ink); }
.lx-fav-a { font-size: 12.5px; color: var(--ink2); line-height: 1.7; margin-top: 2px; }

@media (max-width: 700px) {
  .lx-card { width: auto; }
  .lx-row { grid-template-columns: 26px 1fr; }
  .lx-row .lx-dc { grid-column: 2; }
  .lx-tones { grid-template-columns: 1fr; }
}
/* 运行数据折叠区横幅插图 */
.cz-ill-wrap{display:block;margin:0 0 10px}
.cz-ill{width:100%;height:120px;object-fit:cover;object-position:center;border-radius:8px;display:block;border:1px solid #e3d5c3}
[data-theme="dark"] .cz-ill{border-color:#3d3428}

/* ==========================================================================
   右侧信息卡 · 朱红古金外框（2026-10-17）
   --------------------------------------------------------------------------
   素材：assets/frames/*.svg（素材包原样复制，未改一字节；dark/ 为派生副本）
   做法：**纯 CSS 多层背景**，不新增任何 DOM 节点 ⇒ 结构、按钮、事件全不动，
        装饰层在物理上不可能拦住鼠标（页面里根本不存在覆盖元素）。
   层序（上→下）：四角 ×4 → 上下边线 ×2 → 左右边线 ×2 → 纸面 → 底色
   对位：角饰按 --fr-c 等比缩放（s = --fr-c / 160）；边线条纹按 1.4s 缩放、
        再上移 11.6s，使「朱红主线」与「浅金内线」与角饰重合（金线误差 <0.7px）。
   适用范围：非主官档（科员/副科/副职/正职）的三栏布局右栏 .layout > aside。
        一把手 .chief-right 与正国级 .aside-head 是另一套骨架，本段不覆盖。
   ★ 选择口径：只框「顶层卡片」，不框卡片里套的卡片。
        右栏的顶层容器有 .side-main / .side-sub / .side / .sec-lobby-pair；
        顶层卡片是它们的直接子 .panel，另外 .side-hl（班底与表态）与
        直接挂在 aside 下的 .hl-fair（公开表态独立卡）本身就是卡片。
        team-ledger 内部还嵌着 .hl-fair，用它做后代选择器会套 2–3 层框，
        故一律显式写 > 。
   ========================================================================== */
/* 说明：既有 .panel.disc / .panel.proj 规则带 !important（border 3px + background 简写），
   权重 (0,3,1) 高于裸 .layout > aside > .panel (0,2,1)。这里统一加 :root 前缀把权重抬到
   (0,3,1) 且位置更靠后 ⇒ 稳赢，不必去改既有的 disc/proj 规则。 */
:root .layout > aside > .panel,
:root .layout > aside > .side-main > .panel,
:root .layout > aside > .side-sub > .panel,
:root .layout > aside > .side > .panel,
:root .layout > aside > .sec-lobby-pair > .panel,
:root .layout > aside > .side-hl,
:root .layout > aside > .hl-fair,
:root .main > .panel.promo-wide {
  --fr-c: 72px;                 /* 角饰边长：固定值 ⇒ 永不随卡片拉伸 */
  --fr-half: 36px;
  --fr-edge: 30.24px;           /* 48 × 1.4 × 0.45（边线厚度，等比缩放） */
  --fr-tile: 322.56px;          /* 512 × 0.63（单片长度；只沿长边平铺，绝不拉伸） */
  --fr-off: -5.22px;            /* 左边/上边：图左(上)沿外移 5.22 ⇒ 红线落在 3.6px */
  --fr-far: -17.82px;           /* 右边/下边：图右(下)沿外移 17.82 ⇒ 红线落在 W-3.6 */
  --fr-tl: url(../assets/frames/frame_corner_tl.svg?v=20261027PERF1);
  --fr-tr: url(../assets/frames/frame_corner_tr.svg?v=20261027PERF1);
  --fr-bl: url(../assets/frames/frame_corner_bl.svg?v=20261027PERF1);
  --fr-br: url(../assets/frames/frame_corner_br.svg?v=20261027PERF1);
  --fr-eh: url(../assets/frames/frame_edge_horizontal.svg?v=20261027PERF1);
  --fr-ev: url(../assets/frames/frame_edge_vertical.svg?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  border-radius: 0 !important;
  padding: 24px 18px 20px !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh), var(--fr-ev), var(--fr-ev),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}

/* 原「顶部鎏金细线」在 .panel::after，会横穿新框 ⇒ 右栏关掉 */
.layout > aside .panel::after { display: none !important; }
/* 立绘卡原有 2px 顶部朱金条，同样会压在外框上 ⇒ 右栏关掉（框线已接管） */
.layout > aside .panel.hero-card::before { display: none !important; }

/* 标题与原左竖线已由外框接管；下移 10px，让出左上/右上卷纹的位置 */
.layout > aside .panel h3 { margin-top: 10px !important; }
/* 角饰已经承担了「起首标记」，标题前那颗印泥菱形在右栏与卷纹叠在一起 ⇒ 右栏隐去 */
.layout > aside .panel h3::before { content: none !important; }
/* 题下饰线（divider_ornament）：110×19.56 与原图 180×32 同比例，不拉伸 */
.layout > aside .panel h3::after {
  content: ''; display: block; width: 110px; height: 9px; margin-top: 5px;
  background: url(../assets/frames/divider_ornament.svg?v=20261027PERF1) left center / 110px 19.56px no-repeat;
  opacity: .92;
}

/* 班底与表态（tier≥4）：框套在 .side-hl 外层，里面的 .panel 只是内容块，
   必须剥掉它自带的框，否则会出现「框中框」。.hl-fair 是块内小卡，保持原样不动。 */
.layout > aside > .side-hl .panel {
  background-image: none !important;
  border: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
}

/* ============================================================================
   右栏 / 主区宽卡 · story 套窄版参数（2026-10-21，用户口径「按比例调整」）
   ----------------------------------------------------------------------------
   为什么不能直接套 102px 那组：右栏 aside 实测 300px，双列卡只有 **147px**。
   两枚 102px 角饰就要 204px > 147px，四角自己先叠在一起；
   而「标题横让 96px」在 147px 卡上算出来是负数 ⇒ 标题被挤成竖排单字（上一轮实测）。
   ⇒ 窄卡换让位方向：**纵向让位**。云头整枚（含垂尾 y70..99）缩到 C 后只占
     x 21..90.5、y 30..99 的 (C/102) 倍，标题整体下移一枚角饰的高度就完全避开，
     横向反而能吃掉整条卡宽 —— 147px 卡的标题从「可用 -5px」变成「可用 100% 且单行」。
   ⇒ 参数全部按 102 → 56 的同一比例缩放（0.549）：
     角饰 56、边条 10.4×79（144×0.549 / 19×0.549）、内距 14。
   ★ 与宽卡套的唯二差别：`--fr-half` 仍必须 = `--fr-c`（约束①不变）；
     四边仍分别取 edge_h / edge_h_down / edge_v / edge_v_right（约束②不变）。
   ★ 适用范围刻意收窄到「非主官档右栏」这几个容器：一把手 `.aside-ap` 与
     正国级 `.aside-head` 是另外的骨架，本段不碰（见 8447 行说明）。
   ========================================================================== */
:root:not([data-theme="dark"]) .layout > aside > .panel,
:root:not([data-theme="dark"]) .layout > aside > .side-main > .panel,
:root:not([data-theme="dark"]) .layout > aside > .side-sub > .panel,
:root:not([data-theme="dark"]) .layout > aside > .side > .panel,
:root:not([data-theme="dark"]) .layout > aside > .sec-lobby-pair > .panel,
:root:not([data-theme="dark"]) .layout > aside > .side-hl,
:root:not([data-theme="dark"]) .layout > aside > .hl-fair {
  --fr-c: 56px;
  --fr-half: 56px;              /* 必须 = --fr-c */
  --fr-edge: 10.4px;            /* 19 × 0.549 */
  --fr-tile: 79px;              /* 144 × 0.549 */
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  /* 角饰/边条必须贴着卡外沿起绘：padding-box 会让 26px 内距把整圈框线内缩（实测云头被推离左沿）。 */
  background-origin: border-box !important;
  border-radius: 0 !important;
  /* 上 14：给天头留一条窄裱边，云头本体（y 30..65 ×0.549 = 16..36）刚好在正文之上；
     左 12 / 右 12：窄卡内容本来就紧，26px 会把正文挤没。 */
  padding: 14px 12px 12px !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}

/* 标题：纵向让位。云头整枚（含垂尾）在 56px 角饰里占到 y≈54（99×0.549），
   所以标题首行必须 ≥ 55 才真正避开。内距 14 + padding-top 44 = 58 起排，
   实测首行墨迹落在 y≈60，垂尾底 54，留 6px 余量。
   ★ 不能用 margin 抬：`.panel h3` 带着 margin-bottom，抬 margin-top 会连带把
     后面的正文顶上云头，实测正文首行会压到垂尾。 */
:root:not([data-theme="dark"]) .layout > aside .panel > h3,
:root:not([data-theme="dark"]) .layout > aside .side-hl > h3,
:root:not([data-theme="dark"]) .layout > aside > .panel > h3 {
  padding-left: 0 !important;
  padding-top: 44px !important;
  min-height: 0 !important;
  margin-top: 0 !important;
}
/* 立绘卡（hero-card）没有 h3，第一块是 .hero-frame（立绘框）；给它同样的天头，
   否则立绘会顶到左上角云头。hero-card 若带「功成身退」按钮，按钮本身就是第一块，
   也一并下移 —— 用 :first-child 兜住两种情况。 */
:root:not([data-theme="dark"]) .layout > aside .panel.hero-card > :first-child {
  margin-top: 40px !important;
}
/* 主区晋升卡（promo-wide）：左边是 210px 满高插画，插画会盖掉左上/左下角饰；
   与旧套同一处理 —— 左侧留 74px 装裱边，插画从框线内侧起（74 < 102，
   所以插画会吃掉一部分云头下沿，但云头本体只到 y65、插画垂直居中，视觉上是「压边」而非「切角」）。
   这里改成 96px 与云头右沿对齐，插画从云头右侧起，四角全露。 */
:root:not([data-theme="dark"]) .main > .panel.promo-wide {
  padding-left: 96px !important;
}
:root:not([data-theme="dark"]) .main > .panel.promo-wide .promo-art {
  width: 196px; min-width: 196px; border-radius: 4px;
}
/* ==========================================================================
   主区宽卡 · 云头裱边框（2026-10-21 抽出为共用块）
   --------------------------------------------------------------------------
   原来这段选择器只框**三张固定宽卡**（promo-wide / rival-wide / mid-tf / logbox），
   主区其余卡片一律光板 —— 玩家截图指出「全国两会待开 / 单位安排住房 / 群众来信 /
   组建专班 / 抢人大战」这些横幅还是旧的样子，和主区三张宽卡摆在一起像两个页面。

   ★ 同一套画法必须能盖住**任意高度的卡**：横幅 60~190px、宽卡 400px+。
     所以这组变量写成 `:where(...)`（零特异性）挂在一个自定义属性 `--fr-wide` 上，
     由下面「按卡选档」的规则逐卡赋 `--fr-c / --fr-edge / --fr-tile / padding`。
     直接给选择器写死 102px 会出两种事故（2026-10-21 实测）：
       · 横幅高 93px 时上下各 102 角饰 ⇒ 四角互叠，渲染成「胶囊」；
       · 边条按 144px 原尺寸横铺，比角饰的 102/204 缩小比例大 1.4 倍，
         朱红主线跑到角饰金线外侧，接缝处错开 8px。
     现在 `--fr-tile` 与 `--fr-edge` 一律由 `--fr-c` 按素材原比例算出来
     （角饰 204×204、边条 288×38），任何档位都严丝合缝。
   素材：assets/frames/story/*.png（角饰四枚 + 上下左右边条 + 纸面底）。
   ========================================================================== */
:root:not([data-theme="dark"]) :where(.main > .panel.promo-wide, .main > .panel.rival-wide,
  .main > .panel.mid-tf, .main > .panel.logbox, .main > .panel.crisis-banner,
  .main > .panel.talk-banner) {
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-edge: calc(var(--fr-c) * 38 / 204);
  --fr-tile: calc(var(--fr-c) * 288 / 204);
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  background-origin: border-box !important;
  border-radius: 0 !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}

/* 主区三张无标题宽卡（政敌 / 专班 / 记事）：宽卡不必纵让，横向让 54px 即可，
   第一行是 .promo-wide-h / .mc-h / .log-title，给它们左侧内边距。 */
:root:not([data-theme="dark"]) .main > .panel.rival-wide,
:root:not([data-theme="dark"]) .main > .panel.mid-tf,
:root:not([data-theme="dark"]) .main > .panel.logbox,
:root:not([data-theme="dark"]) .main > .panel.promo-wide {
  --fr-c: 102px;
  --fr-half: 102px;
  padding: 22px 26px 24px !important;
}
/* 主区宽卡第一行让出云头（云头本体 x21..90.5）
   ★ 记事卡（logbox）走**纵向让位 + 56px 降档**：
     它的首行是一整排按钮（全部记录 / AI 剧情 / 身边人 / 季度正文 / 笔记本），
     横向让 96px 会把这一排整体右推，云头孤零零挂在左边、视觉上像「被掏空」。
     改成纵让后按钮排能吃满整宽；同时把角饰降到 56px（与政敌/专班同档），
     云头只到 y54，天头 40px 就够 —— 若留 102px 角饰则要让 86px，天头太重。
   ★ 数值算法（别凭感觉）：卡内距 22 + 云头垂尾底 54 − 标题行高上半 12 ⇒ padding-top 40。
     第一版只算到云头本体（y35）就够，漏了垂尾，实测首行落在 y≈42 仍压在垂尾上。 */
:root:not([data-theme="dark"]) .main > .panel.logbox {
  --fr-c: 56px;
  --fr-half: 56px;
  --fr-edge: 10.4px;
  --fr-tile: 79px;
  padding: 16px 20px 16px !important;
}
:root:not([data-theme="dark"]) .main > .panel.logbox > .log-title {
  padding-left: 0 !important;
  padding-top: 40px !important;
  min-height: 0 !important;
  /* 原有 3px 朱红竖线（.panel h3 的 border-left）会横穿云头 ⇒ 拆掉 */
  border-left: 0 !important;
}

/* ----------------------------------------------------------------------------
   两张「矮宽卡」降档（政敌 176px / 专班 187px）
   ----------------------------------------------------------------------------
   102px 角饰上下各一就需要 204px，比这两张卡还高（176 / 187）⇒ 四角必然互压，
   渲染出来是「胶囊」。这里按同比例降到 56px（与右栏窄版同一档），
   角饰占高降到 112/176 ≈ 64%，四角之间留出呼吸。
   判据是「已知这两张卡定高」，不写死高度 —— 卡片内容一变（例如政敌多了里程碑）
   高度会长，56px 依然够小，不会反过来超框。
   ---------------------------------------------------------------------------- */
:root:not([data-theme="dark"]) .main > .panel.rival-wide,
:root:not([data-theme="dark"]) .main > .panel.mid-tf {
  --fr-c: 56px;
  --fr-half: 56px;
  --fr-edge: 10.4px;
  --fr-tile: 79px;
  padding: 16px 18px 16px !important;
}
/* 这两张卡的首行是 .promo-wide-h / .mc-h，56px 角饰下横向让 54px 足够 */
:root:not([data-theme="dark"]) .main > .panel.rival-wide > .promo-wide-h,
:root:not([data-theme="dark"]) .main > .panel.mid-tf > .mc-h {
  padding-left: 54px !important;
  min-height: 30px;
}

/* ----------------------------------------------------------------------------
   主区横幅（crisis-banner 一族）· 云头裱边降档  2026-10-21
   ----------------------------------------------------------------------------
   玩家截图：「全国两会待开 / 单位安排住房 / 群众来信 / 抢人大战」这些框还是旧样式。
   它们是 `.panel.crisis-banner`（62~190px 高），和主区三张宽卡摆在同一条纵列里，
   一个套了裱边、一个光板，看着像两套皮。

   ★ 为什么单独一档：102px 角饰上下各一就要 204px，比横幅还高 ⇒ 四角打成一团。
     按「横幅实际高度 60~190」反推，角饰降到 44px：两枚占 88px，
     在 93px 的标准横幅里正好上下各露一角、中间留 5px 呼吸；再矮的卡（< 88px）
     会轻微互压 —— 那一档另有下面 `--fr-c: 34px` 的兜底。
   ★ 横向让位：云头本体宽约 x21..90.5（204px 原图），44px 档缩到 x4.5..19.5，
     内容左内距 22px 已经越过云头，不必再额外让；只需把内距收到 14px，
     否则 93px 高的横幅被 24px 上下内距吃掉一半。
   ---------------------------------------------------------------------------- */
/* ★ 2026-10-21 补漏：`.talk-banner` 一族（群众来信 / 领导谈话 / 组织部约谈 /
   住房烦恼 / 子女事件 / 会后余波 / 班子例会 …）此前不在选择器里，所以玩家截图里
   「群众来信」还是光板，跟旁边套了裱边的卡像两套皮。
   ★ 但 talk-banner 与 crisis-banner 有**实质差别**：`.panel` 本身不是 flex，
     crisis-banner 自己写了 `display:flex; align-items:center`，talk-banner 只改了
     border-left-color ⇒ 内容是块级竖排（实测 1000×170~200，图标/标题/按钮各占一行）。
     套裱边前必须先把骨架对齐，否则框里是散的 —— 这是本条规则存在的原因。 */
:root:not([data-theme="dark"]) .main > .panel.crisis-banner,
:root:not([data-theme="dark"]) .main > .panel.talk-banner {
  --fr-c: 40px;
  --fr-half: 40px;
  padding: 14px 22px 15px 46px !important;
}
/* talk-banner 补齐 crisis-banner 的横排骨架：图标 + 文字列 + 按钮一行 */
.main > .panel.talk-banner {
  display: flex;
  align-items: center;
  gap: 12px;
}
.main > .panel.talk-banner > .cb-t { min-width: 0; align-items: flex-start; }
/* 标签（.tag.t-mailkind 等）在 column 布局里会被拉成整行宽 —— 钉回内容宽。
   crisis-banner 那批没有内联标签所以没暴露，talk-banner 的来信/谈话横幅有。 */
.main > .panel.talk-banner > .cb-t > .tag,
.main > .panel.crisis-banner > .cb-t > .tag { align-self: flex-start; }
/* ★ 云头让位（横幅档）：40px 角饰下云头本体占 x 8.2..35.5（全部 ×40/102），
   横幅首行是「📮 图标 + 标题」，图标原本在 x22 起 —— 正好压在云头上
   （实测截图里图标叠着云头）。内容整体右让到 x46 起（云头右沿 35.5 + 10 余量）。
   34px 矮档云头只到 x30，让 38 即可。 */
:root:not([data-theme="dark"]) .main > .panel.talk-banner:not(:has(.cb-t > span)),
:root:not([data-theme="dark"]) .main > .panel.crisis-banner:not(:has(.cb-t > span)) {
  --fr-c: 34px;
  --fr-half: 34px;
  padding: 12px 20px 13px 38px !important;
}
/* 矮于 88px 的横幅（换届之年 / 老秘书来电这类一两行的）：再降一档，角饰 34px */
:root:not([data-theme="dark"]) .main > .panel.crisis-banner:not(:has(.cb-t > span)),
:root:not([data-theme="dark"]) .main > .panel.talk-banner:not(:has(.cb-t > span)) {
  --fr-c: 34px;
  --fr-half: 34px;
  padding: 12px 20px 13px 20px !important;
}
/* 横幅内部原来的朱红左边线（.crisis-banner / .talk-banner / .letter-banner 的
   border-left:4px）已被外框接管：留着会在云头位置多出一条竖线，压住角饰。 */
:root:not([data-theme="dark"]) .main > .panel.crisis-banner,
:root:not([data-theme="dark"]) .main > .panel.talk-banner { border-left: 0 !important; }
/* 首页呼吸动画只闪 box-shadow，会被上面的 !important 覆盖 ⇒ 改为闪 outline，
   与裱边框叠加不打架（原来带 !important 的 box-shadow 让它一直是死的）。 */
:root:not([data-theme="dark"]) .main > .panel.crisis-banner { animation: cplFrame 1.6s ease-in-out infinite; }
/* talk-banner 原来只在左沿呼吸（border-left-color），进了外框后同样改闪 outline */
:root:not([data-theme="dark"]) .main > .panel.talk-banner { animation: cplFrame 1.6s ease-in-out infinite; }
@keyframes cplFrame {
  0%, 100% { outline: 0 solid rgba(164, 52, 43, 0); outline-offset: 0; }
  50% { outline: 2px solid rgba(164, 52, 43, .22); outline-offset: 1px; }
}

/* 暗色主题：横幅也换成暗色派生素材（与右栏同一套） */
:root[data-theme="dark"] :where(.main > .panel.rival-wide, .main > .panel.mid-tf,
  .main > .panel.logbox, .main > .panel.crisis-banner, .main > .panel.talk-banner) {
  --fr-tl: url(../assets/frames/dark/frame_corner_tl.svg?v=20261027PERF1);
  --fr-tr: url(../assets/frames/dark/frame_corner_tr.svg?v=20261027PERF1);
  --fr-bl: url(../assets/frames/dark/frame_corner_bl.svg?v=20261027PERF1);
  --fr-br: url(../assets/frames/dark/frame_corner_br.svg?v=20261027PERF1);
  --fr-eh: url(../assets/frames/dark/frame_edge_horizontal.svg?v=20261027PERF1);
  --fr-ev: url(../assets/frames/dark/frame_edge_vertical.svg?v=20261027PERF1);
  --fr-paper: url(../assets/frames/dark/panel_paper_background.svg?v=20261027PERF1);
  background-color: #211F1A !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .5), 0 10px 22px rgba(0, 0, 0, .35) !important;
}

/* ----------------------------------------------------------------------------
   一把手 / 顶层档右栏（aside-ap → .ap-panel）· story 云头裱边  2026-10-21
   ----------------------------------------------------------------------------
   玩家截图：《功成身遂 / 起居 / 两办联络…》整栏还是旧的朱红古金矢量框
   （3px 朱红描边 + 右侧绛色渐变带 + 一条竖细线），跟主区已经换过皮的卡摆在一起
   像两个页面。这是全站倒数第二处还没换皮的体系（另一处是 aside-head 顶层档）。

   ★ 为什么用 72px 而不是 56px：这一栏实测 300×2093 —— 高得离谱，纵向完全够。
     102px 角饰虽然装得下（204 ≤ 2093），但 300px 宽时两角占 68%，
     云头会把「壹 功成身遂」那行标题挤到没地方；72px 两角占 48%，留得住标题。
     边条按素材原比例算：edge = 38/204 × 72 = 13.4，tile = 288/204 × 72 = 101.6。

   ★ 内部装饰必须一起拆（都在 .ap-panel 上，与裱边打架）：
     ① 3px 朱红 border → 角饰外侧会多一圈红框，且 border 撑内距会把框线挤进卡里；
     ② ::before 右侧绛色渐变带（14px）+ ::after 竖细线 → 竖线正好压在右边条上；
     ③ 原有 padding 16/26/46/18 不对称（右下 46 是给 .ap-seal 印章留的位）——
        改成对称 26，印章自己还在，靠 right/bottom 定位不受影响。
   ---------------------------------------------------------------------------- */
:root:not([data-theme="dark"]) .layout > aside.aside-ap > .ap-panel {
  --fr-c: 72px;
  --fr-half: 72px;                 /* 必须 = --fr-c */
  --fr-edge: 13.4px;               /* 38 × 72/204 */
  --fr-tile: 101.6px;              /* 288 × 72/204 */
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  border-radius: 0 !important;
  /* 角饰必须贴卡外沿起绘：否则 26px 内距会把整圈框线往里推（老坑，见门口卡那轮） */
  background-origin: border-box !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  background-blend-mode: normal !important;
  /* 原 16/26/46/18：右下 46 是给 .ap-seal 留位，改对称后印章靠 absolute 定位照旧 */
  padding: 26px 26px 40px 26px !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}
/* 右侧绛色渐变带与竖细线：会压在右边条上，拆掉 */
:root:not([data-theme="dark"]) .layout > aside.aside-ap > .ap-panel::before,
:root:not([data-theme="dark"]) .layout > aside.aside-ap > .ap-panel::after {
  content: none !important;
  display: none !important;
}
/* 第一条分区标题（壹 · 功成身遂）：纵向让开云头。
   72px 档云头含垂尾到 y≈70（99 × 72/102），内距 26 之后的 .ap-zh 首行落在 y≈26，
   必须再推 46 才越过。整栏高 2093，吃掉 46 完全无感。 */
:root:not([data-theme="dark"]) .layout > aside.aside-ap > .ap-panel > .ap-zone:first-child {
  padding-top: 46px;
}
/* .ap-seal 印章原来贴右下角，套框后会被角饰压住 ⇒ 抬到角饰上方 */
:root:not([data-theme="dark"]) .layout > aside.aside-ap > .ap-panel > .ap-seal {
  right: 40px;
  bottom: 84px;
}

/* 暗色主题恢复原样：aside-ap 走旧的暗色口径（本套只做亮色，与全站一致） */
:root[data-theme="dark"] .layout > aside.aside-ap > .ap-panel {
  border: 3px solid #8a2f26 !important;
  background-image: none !important;
  padding: 16px 26px 46px 18px !important;
}
:root[data-theme="dark"] .layout > aside.aside-ap > .ap-panel::before {
  content: "" !important; display: block !important;
  background: linear-gradient(270deg, rgba(200, 120, 100, .35), rgba(200, 120, 100, .1) 60%, transparent) !important;
}
:root[data-theme="dark"] .layout > aside.aside-ap > .ap-panel::after {
  content: "" !important; display: block !important;
  background: #8a2f26 !important;
}
:root[data-theme="dark"] .layout > aside.aside-ap > .ap-panel > .ap-zone:first-child { padding-top: 0; }
:root[data-theme="dark"] .layout > aside.aside-ap > .ap-panel > .ap-seal { right: 30px; bottom: 14px; }

/* 暗色主题：换成派生暗色素材，纸面转深，框线提亮到 --seal/--gold 的亮度 */
:root[data-theme="dark"] .layout > aside > .panel,
:root[data-theme="dark"] .layout > aside > .side-main > .panel,
:root[data-theme="dark"] .layout > aside > .side-sub > .panel,
:root[data-theme="dark"] .layout > aside > .side > .panel,
:root[data-theme="dark"] .layout > aside > .sec-lobby-pair > .panel,
:root[data-theme="dark"] .layout > aside > .side-hl,
:root[data-theme="dark"] .layout > aside > .hl-fair,
:root[data-theme="dark"] .main > .panel.promo-wide {
  --fr-tl: url(../assets/frames/dark/frame_corner_tl.svg?v=20261027PERF1);
  --fr-tr: url(../assets/frames/dark/frame_corner_tr.svg?v=20261027PERF1);
  --fr-bl: url(../assets/frames/dark/frame_corner_bl.svg?v=20261027PERF1);
  --fr-br: url(../assets/frames/dark/frame_corner_br.svg?v=20261027PERF1);
  --fr-eh: url(../assets/frames/dark/frame_edge_horizontal.svg?v=20261027PERF1);
  --fr-ev: url(../assets/frames/dark/frame_edge_vertical.svg?v=20261027PERF1);
  --fr-paper: url(../assets/frames/dark/panel_paper_background.svg?v=20261027PERF1);
  background-color: #211F1A !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .5), 0 10px 22px rgba(0, 0, 0, .35) !important;
}

/* 晋升进度卡（主区 .panel.promo-wide）：亮色已改套 story 裱边（见上），
   以下这条 padding 只留给暗色分支 —— 它原本是给旧朱金套的 74px 装裱边。
   ★ 必须加 `[data-theme="dark"]` 前缀：裸 `:root` 的 padding 会盖掉新套的 22/26，
     上一轮就是这么让亮色环境下的插画又缩回 74px 边的（实测插画压到左下角饰）。 */
:root[data-theme="dark"] .main > .panel.promo-wide { padding: 24px 22px 20px 74px !important; }
:root[data-theme="dark"] .main > .panel.promo-wide .promo-wide-h { padding-right: 58px; }
:root[data-theme="dark"] .main > .panel.promo-wide .promo-art { width: 210px; min-width: 210px; border-radius: 4px; }

/* 窄屏（≤1520）：卡片宽度掉到 700 上下，74px 装裱边 + 210 插画会把正文挤到 386px、勾选文字折行。
   这里把整套框等比缩到 56/72，装裱边收到 58，插画 180 —— 四角仍为原比例，不变形。
   ★ 同样只对暗色生效（亮色新套另有窄屏规则，见下方 @media）。 */
@media (max-width: 1520px) {
  :root[data-theme="dark"] .main > .panel.promo-wide {
    --fr-c: 56px; --fr-half: 28px; --fr-edge: 23.52px; --fr-tile: 250.88px;
    --fr-off: -4.06px; --fr-far: -13.86px;
    padding-left: 58px !important;
  }
  :root[data-theme="dark"] .main > .panel.promo-wide .promo-art { width: 180px; min-width: 180px; }
}

/* 1000–1280：卡片只有 500 出头，56px 框 + 180 插画仍会把勾选框挤成逐字竖排（旧版此处同样竖排，属欠账）。
   这一段：框再缩到 44/72、装裱边 46、插画 150×240 缩略图、勾选改单列 —— 保证窄屏也读得下去。 */
@media (min-width: 1000px) and (max-width: 1280px) {
  :root .main > .panel.promo-wide {
    --fr-c: 44px; --fr-half: 22px; --fr-edge: 18.48px; --fr-tile: 197.12px;
    --fr-off: -3.19px; --fr-far: -10.89px;
    padding-left: 46px !important;
  }
  :root .main > .panel.promo-wide .checks { grid-template-columns: 1fr; }
  :root .main > .panel.promo-wide .promo-art { width: 150px; min-width: 150px; height: 240px; align-self: flex-start; }
}

/* ==========================================================================
   剧情叙述外框 · 手绘淡彩青灰如意云头（2026-10-21）
   --------------------------------------------------------------------------
   素材：assets/frames/story/*.png（商汤 SenseNova 出图，postprocess.py 九宫格裁切）
   与右侧信息卡那套的区别：旧的是纯矢量密集卷草 + 双线延伸 + 肘部菱形；
   这套是手绘淡彩，青灰如意云头只落在左上角内侧、带一笔下垂云尾，
   朱红 + 古金 + 淡金三线疏朗收边，纸面大面积留白。
   做法与旧套一致：纯 CSS 多层背景，零 DOM，装饰层不可能拦鼠标。
   ★ 与旧套的两个差异：
     1) 新套四边不同源（母版四边不对称，翻转对不上），第 5/6/7/8 层必须
        分别用 edge_h / edge_h_down / edge_v / edge_v_right，不能共用一个变量；
     2) --fr-half 必须等于 --fr-c（102px）。旧套是 36px = 半宽，因为角饰是
        向外飘的卷草；新套云头贴在内侧，从 51px 起铺会让边条的淡金细线
        横穿云头上半部。
   ★ 云头实测侵入范围（CSS px，见 tools/framenova/_probe_flourish*.py）：
        本体 x 21..90.5 / y 30..65，垂尾 3px 宽、y 70..99（alpha≈94 的淡墨）。
        所以标题不能按 24px 内距顶格排 —— 会正好压在云头上。
        做法：标题抬成「引首」式 —— 左侧留 96px 装裱边、垂直居于云头中段，
        正文仍从正常边距起排。只给标题让位，不牺牲整块面板的天头。
   ========================================================================== */
:root:not([data-theme="dark"]) .story-pair .story-main > .panel,
:root:not([data-theme="dark"]) .story-pair .story-ai > .panel {
  --fr-c: 102px;                /* 角饰边长 340 母版px × 0.3 */
  --fr-half: 102px;             /* 必须 = --fr-c，见上 */
  --fr-edge: 19px;              /* 边条厚度 64 × 0.3 = 19.2 */
  --fr-tile: 144px;             /* 边条长度 480 × 0.3 */
  --fr-off: 0px;                /* 新套红线中心距外沿 3.6px，图已自带留白 */
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  border-radius: 0 !important;
  padding: 24px 26px 26px !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}

/* 卡片自带的两处旧装饰会压在新框上：顶部鎏金细线、以及事件卡的左强调条
   （边框被 border:0 剥掉了，这里也不再补 —— 框线本身已经足够区分） */
.story-pair .story-main > .panel::after,
.story-pair .story-ai > .panel::after { display: none !important; }

/* 标题：左侧让出 96px 装裱边，落在云头（x 21..90.5 / y 30..65）的右侧。
   ★ 不要用 flex —— 标题里的 <span class="tag"> 会变成独立 flex item，
     flex-wrap 会让它整块掉到第二行（首版实测「AI 剧情」标签被挤下去）；
     保持普通 block 流，tag 仍跟在标题文字末尾自然折行。
   垂直方向只下移 12px，让标题带（24+12 .. 66）大致居中于云头，视觉上是
   「标题嵌在云头右侧」的装裱关系。原来的左侧 3px 竖线去掉，改由装裱边起首。 */
:root:not([data-theme="dark"]) .story-pair .story-main > .panel > h3,
:root:not([data-theme="dark"]) .story-pair .story-ai > .panel > h3 {
  border-left: 0 !important;
  padding-left: 96px !important;
  margin: 12px 0 12px !important;
  /* 云头垂尾一直拖到 y≈99（alpha≈94 的淡墨，压在 17px 正文下面会糊字）。
     54px = 让标题块下沿落到 90，正文随之起于 102，整枚云饰（含尾）全部让开。
     右栏标题折两行时自然高于 54，不受影响。 */
  min-height: 54px;
}
/* 右栏空态卡是居中排版的，标题跟着居中，不套装裱边 */
:root:not([data-theme="dark"]) .story-pair .story-ai > .ai-story-placeholder > h3 {
  padding-left: 0 !important;
  margin: 0 0 8px !important;
  min-height: 0;
}
/* 空态卡原本 min-height 180，套上 102px 的角饰后上下两角几乎相接（180 - 48 内距 = 132）。
   抬到 220，让四角完整、留白舒展；同时避免云头与居中字样挨得太近。 */
:root:not([data-theme="dark"]) .story-pair .story-ai > .ai-story-placeholder {
  min-height: 220px;
}
/* 居中卡不需要「起首标记」：标题本身已带 🤖，再顶一颗印泥菱形就是三个标记连排 */
:root:not([data-theme="dark"]) .story-pair .story-ai > .ai-story-placeholder > h3::before {
  content: none !important;
}

/* ★ 兜底卡没有 <h3>（"本年事件尚未生成。" 这类），正文会直接顶到 24px 内距上，
   正好压在云头里。给首个子元素补同样的天头。
   66px 是「标题上边 12 + 标题块 54」的让位高度；实测首段落点 90（24 内距 + 66），
   仍在云头垂尾（y≈99）之内 ⇒ 取 78，首段落到 102，完整越过尾梢。 */
:root:not([data-theme="dark"]) .story-pair .story-col > .panel > p:first-child,
:root:not([data-theme="dark"]) .story-pair .story-col > .panel > .muted:first-child {
  margin-top: 78px !important;
}

/* ==========================================================================
   左栏「自由行动」· story 云头裱边（2026-10-22）
   --------------------------------------------------------------------------
   玩家截图：「这按钮群一圈的红线去掉，换成素材中的这个素材」——
   指的就是 .acts-rail 上那圈 `border: 3px solid var(--seal)`（3888 行
   「用户指定：三处红粗框」那批），换成剧情栏同款手绘淡彩框。

   ★ 为什么走**纵向让位**：实测 .acts-rail = 240 × 1420（窄高条）。
     240px 宽时两枚 102px 角饰就占 204，再加内距立刻就贴脸；
     而「标题横让 96px」在 240px 宽度上会算成负数。
     ⇒ 与右栏 aside 同一档：角饰 56px、--fr-half 必须 = --fr-c（约束①不变）、
       四边仍分别取 edge_h / edge_h_down / edge_v / edge_v_right（约束②不变）。
   ★ 云头让位算法：56px 档云头含垂尾到 y≈54（99 × 56/102），本体 x 11.5..49.7。
     首块是 `.ap-line`（「自由行动 · 剩 12 AP」），原本落在 y≈15 ⇒ 正好压在云头上。
   ========================================================================== */
:root:not([data-theme="dark"]) .acts-rail {
  --fr-c: 56px;
  --fr-half: 56px;              /* 必须 = --fr-c */
  --fr-edge: 10.4px;            /* 19 × 56/102 */
  --fr-tile: 79px;              /* 144 × 56/102 */
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  /* ★ 拆掉那圈 3px 朱红粗线（玩家点名要去掉的红线），改由角饰+边条描边 */
  border: 0 !important;
  border-radius: 0 !important;
  /* 角饰必须贴卡外沿起绘：默认 padding-box 会让内距把整圈框线往里推 */
  background-origin: border-box !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  /* 天头 56：云头垂尾底 54 + 2 余量。左右各 12：这栏只有 240px 可用，
     旧值就是 12，保持不动，免得按钮被挤窄导致「办公室」那类长名折行。 */
  padding: 56px 12px 14px !important;
  box-shadow: 0 1px 3px rgba(96, 48, 24, .06), 0 10px 22px rgba(96, 48, 24, .05) !important;
}
/* AP 行（首块）原来压在云头上：56px 档云头本体到 x≈49.7 ⇒ 左让 58 让开；
   再用负 margin 抵消一部分天头，使 AP 行与云头同高（不空出一大块白）。
   ★ 用 block + line-height 竖向居中，不能改 flex：flex 会吃掉
     「剩 <b>12</b> AP」两处文本节点的空格，实测渲染成「剩12AP」。 */
:root:not([data-theme="dark"]) .acts-rail > .ap-line {
  padding-left: 58px !important;
  min-height: 42px;
  line-height: 42px;
  margin: -44px 0 10px !important;
}

/* ===== 县域俯视地图（county-map） ===== */
.county-map-panel { padding: 12px 14px; }
.cm-head { display:flex; justify-content:space-between; align-items:baseline; margin-bottom:8px; font-weight:700; color:#8c1f28; }
.cm-map { position: relative; width: 100%; border-radius: 10px; overflow: hidden; border: 1px solid rgba(140,100,40,.35); box-shadow: 0 2px 8px rgba(0,0,0,.08); background:#e8dcc0; }
.cm-base { display: block; width: 100%; height: auto; }
.cm-pin { position: absolute; transform: translate(-50%,-50%); text-align: center; cursor: pointer; }
.cm-bldg { width: 64px; height: 64px; object-fit: cover; border-radius: 6px; border: 1.5px solid rgba(140,100,40,.5); box-shadow: 0 2px 6px rgba(0,0,0,.18); background:#fff; }
.cm-pin.big .cm-bldg { width: 88px; height: 88px; border-color: #c02020; }
.cm-pin span { display: block; margin: 3px auto 0; font-size: 11px; line-height:1.3; background: rgba(255,255,255,.88); padding: 2px 6px; border-radius: 3px; white-space: nowrap; color: #5a3a1a; font-weight: 600; border: 1px solid rgba(140,100,40,.25); }
.cm-pin:hover .cm-bldg { border-color:#c02020; transform: scale(1.05); transition: all .15s; }


/* ===== 2026-10-18 晋升进度插图：左侧竖版满高 =====
   恢复左侧竖图布局；配竖版资源后插图满高铺满左栏。 */
:root .main > .panel.promo-wide .promo-art { align-self: stretch !important; height: auto !important; }
/* ===== 2026-10-18 晋升进度框贴左不留白：收起左侧装裱边 ===== */
:root .main > .panel.promo-wide { padding-left: 14px !important; }

/* ============================================================
   微彩水墨 · 关系网人物对话框 v3
   1) 祥云边框包【整个弹窗 modal-box】（含标题栏），用 :has 只命中对话弹窗
   2) 内容区不再加内层框
   3) 按钮沿用 v2 水墨样式
   ============================================================ */

/* ---------- 整个弹窗：祥云九宫格 ---------- */
.modal-box:has(.chat-wrap) {
  border: 46px solid transparent !important;
  border-image-source: url("inkui/frames/frame-yunwen.jpg?v=20261027PERF1") !important;
  border-image-slice: 220 290 220 290 fill !important;
  border-image-width: 46px !important;
  border-image-repeat: stretch !important;
  border-radius: 0 !important;
  background: #f4ead9 !important;
}

/* ---------- 内容区去掉内层框 ---------- */
.modal .modal-body .chat-wrap {
  border: none !important;
  padding: 2px !important;
  border-image: none !important;
}

/* 头像框 */
.modal .chat-wrap .chat-av {
  border: 1.5px solid #a08868 !important;
  border-radius: 8px !important;
  box-shadow: 0 1px 4px rgba(90,60,30,.18) !important;
}

/* 消息记录区 */
.modal .chat-wrap .chat-log {
  background: rgba(255, 251, 242, .7) !important;
  border: 1px solid #c9b491 !important;
  border-radius: 10px !important;
  box-shadow: inset 0 1px 3px rgba(120,90,50,.08) !important;
}

/* ---------- 意图 / 关系网按钮：瓷白双层胶囊（2026-10-18 按按钮素材 v3） ----------
   素材版式：米白渐变底 + 外层 1px 棕线 + 2px 米白间隙 + 内层 1px 棕线，全圆角，楷体棕字。
   双层描边用 border（外线）+ 两条 inset box-shadow（间隙 + 内线）叠出来——
   CSS 没有双 border，这是不引伪元素、不额外套 div 的最省做法。
   选择器同时覆盖「对话意图按钮」和关系网列表里加了 .porcelain 的按钮。 */
.chip.porcelain,
.modal .chat-wrap .chat-intents .chip {
  font-family: var(--font-kai, "KaiTi", serif) !important;
  font-size: 13.5px !important;
  letter-spacing: 1.5px !important;
  font-weight: 700 !important;
  color: #5c3d28 !important;
  background: linear-gradient(180deg, #fcf6e9 0%, #f3e7d1 55%, #ecdcbe 100%) !important;
  border: 1px solid #b08d64 !important;
  border-radius: 999px !important;
  padding: 5px 16px !important;
  box-shadow:
    inset 0 0 0 2px #fdf9f0,
    inset 0 0 0 3px rgba(176, 141, 100, .55),
    0 1px 3px rgba(92, 62, 38, .16) !important;
  text-shadow: 0 1px 0 rgba(255, 255, 255, .65) !important;
  transition: filter .14s ease, box-shadow .14s ease, transform .14s ease !important;
}
.chip.porcelain:hover:not([disabled]),
.modal .chat-wrap .chat-intents .chip:hover:not([disabled]) {
  filter: brightness(1.035) !important;
  box-shadow:
    inset 0 0 0 2px #fdf9f0,
    inset 0 0 0 3px rgba(176, 141, 100, .72),
    0 2px 6px rgba(92, 62, 38, .22) !important;
}
.chip.porcelain:active:not([disabled]),
.modal .chat-wrap .chat-intents .chip:active:not([disabled]) {
  transform: scale(.96) !important;
}
.chip.porcelain[disabled] { opacity: .42 !important; filter: grayscale(.35) !important; }
/* 关系网表格里按钮密排：内边距收一点，别把行高撑开 */
.modal table .chip.porcelain { padding: 3px 11px !important; font-size: 12.5px !important; letter-spacing: 1px !important; }

/* ---------- 返回/关闭 · 米白回纹次按钮（2026-10-18 按按钮素材 v2） ---------- */
.btn.ghost,
.chip[data-close="1"]:not(.primary):not(.hot),
.chip[data-back="1"]:not(.primary):not(.hot) {
  background-color: #f0e6d0 !important;
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18'><path d='M2 16 V2 H16 M6 16 V6 H16' stroke='%235a3a26' stroke-width='1.2' fill='none'/></svg>") left 6px top 6px / 18px 18px no-repeat,
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18'><path d='M2 16 V2 H16 M6 16 V6 H16' stroke='%235a3a26' stroke-width='1.2' fill='none'/></svg>") right 6px top 6px / 18px 18px no-repeat,
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18'><path d='M2 16 V2 H16 M6 16 V6 H16' stroke='%235a3a26' stroke-width='1.2' fill='none'/></svg>") left 6px bottom 6px / 18px 18px no-repeat,
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18'><path d='M2 16 V2 H16 M6 16 V6 H16' stroke='%235a3a26' stroke-width='1.2' fill='none'/></svg>") right 6px bottom 6px / 18px 18px no-repeat !important;
  color: #3d2616 !important;
  border: 2px solid #5a3a26 !important;
  border-radius: 3px !important;
  font-family: var(--font-title, '方正小标宋简体', serif) !important;
  font-weight: 700 !important;
  letter-spacing: 1.5px !important;
  box-shadow: inset 0 0 0 3px #f0e6d0, inset 0 0 0 4.5px #8a6a4a, 0 1px 3px rgba(90,58,38,.2) !important;
}
.btn.ghost:hover,
.chip[data-close="1"]:not(.primary):not(.hot):hover,
.chip[data-back="1"]:not(.primary):not(.hot):hover {
  color: #1a0e06 !important;
  border-color: #3d2616 !important;
}

/* ---------- 送礼物：墨褐金边 ---------- */
.modal .chat-wrap .chat-gift .chip.hot {
  font-family: var(--font-kai, "KaiTi", serif) !important;
  font-size: 14.5px !important;
  letter-spacing: 2px !important;
  color: #f5e8d0 !important;
  background: linear-gradient(180deg, #5d4d3a, #3e3226) !important;
  border: 1.5px solid #c8a860 !important;
  border-radius: 8px !important;
  padding: 7px 18px !important;
  box-shadow: 0 2px 8px rgba(40,30,15,.35) !important;
}
.modal .chat-wrap .chat-gift .chip.hot:hover { filter: brightness(1.12) !important; }

/* ---------- 输入框 ---------- */
.modal .chat-wrap .chat-input .inp {
  background: rgba(255, 251, 242, .9) !important;
  border: 1.5px solid #b59a74 !important;
  border-radius: 8px !important;
  color: #3a2e20 !important;
}
.modal .chat-wrap .chat-input .inp:focus {
  border-color: #8a5a38 !important;
  box-shadow: 0 0 0 2px rgba(160,90,50,.15) !important;
  outline: none !important;
}

/* ---------- 发送：朱砂红 ---------- */
.modal .chat-wrap .chat-input .chip.primary {
  font-family: var(--font-kai, "KaiTi", serif) !important;
  font-size: 15px !important;
  letter-spacing: 3px !important;
  font-weight: 700 !important;
  color: #fbf3e4 !important;
  background: linear-gradient(165deg, #b04038, #8e2a24) !important;
  border: 1px solid #7a221c !important;
  border-radius: 8px !important;
  padding: 8px 24px !important;
  box-shadow: inset 0 0 0 1px rgba(255,240,225,.28), 0 3px 10px rgba(120,30,20,.3) !important;
}
.modal .chat-wrap .chat-input .chip.primary:hover { filter: brightness(1.1) !important; }
.modal .chat-wrap .chat-input .chip.primary:active { transform: scale(.96) !important; }

/* ===== 2026-10-18 弹窗外框：祥云纹素材（九宫格 border-image） =====
   素材 assets/frames/modal-cloud.jpg = 原图 1920×1440 等比缩到 720×540（0.375）。
   为什么缩放：border-image 的 slice 按「原图像素」切，slice 与 border-width 的比值决定压缩倍数。
   直接拿 1920 图（四角云团约 400px）配 60px 边框 ⇒ 纵向压扁 6.7 倍，云纹糊成细横条；
   缩到 720 后四角云团约 150px，配 64px 边框压缩仅 2.3 倍，轮廓清晰。
   slice=200 ⇒ 四角正好包住云团（像素实测：云团延伸到约 180×180，160 会切在云团中间），
   中间区 320×140 ⇒ 上边 972px 平铺 3 段、左边 572px 平铺 4 段，round 下几乎不变形。
   repeat:round ⇒ 边条按整数段平铺；用 stretch 会把云纹横向拉长 2.4 倍。
   不带 fill ⇒ 只换外圈，弹窗内部仍走 --card：light 下与素材宣纸底（#f5e9dd）几乎同色，
   dark 下形成「亮框暗心」的纸质画框，无需另做暗色派生素材。
   border-width 用 clamp：桌面 72px、窄屏收到 20px，保证手机上内容区不被框吃掉。 */
.modal-box {
  border-width: clamp(20px, 5.5vw, 72px);
  border-style: solid;
  border-color: transparent;
  border-image-source: url(../assets/frames/modal-cloud.jpg?v=20261027PERF1);
  border-image-slice: 200;
  border-image-width: 1;
  border-image-repeat: round;
  border-radius: 0;
  background-clip: padding-box;
  box-shadow: 0 26px 80px rgba(40, 30, 20, .38);
}

/* ==========================================================================
   室内场景层（scene-place.js）—— 县委·县政府大楼 · 楼内分区
   --------------------------------------------------------------------------
   · DOM 覆盖层，z-index: 70 —— 比 .modal（80）低，楼内打开的面板照常盖在上面
   · 左侧区域条（楼层+区域+项数）+ 右侧功能区（真行动按钮网格）+ 今日动态
   · 区域美术位缺失时整块隐藏（模块里 error 捕获），不留破图
   ========================================================================== */
.place-layer {
  position: fixed; inset: 0; z-index: 70;
  background: rgba(24, 18, 10, .6);
  display: flex; align-items: center; justify-content: center;
  padding: 22px;
}
.place-card {
  width: min(1040px, 96vw); max-height: 94vh;
  display: flex; flex-direction: column; overflow: hidden;
  background: var(--card); border: 1px solid var(--line);
  border-top: 4px solid var(--seal); border-radius: 10px;
  box-shadow: 0 18px 50px rgba(20, 14, 6, .35);
}
.place-top {
  flex: 0 0 auto; display: flex; align-items: center; gap: 10px;
  padding: 10px 14px; border-bottom: 1px solid var(--line);
}
.place-top b { font-size: 15px; color: var(--ink); }
.place-sub { font-size: 12px; color: var(--ink3); }
.place-ap {
  margin-left: auto; font-size: 12px; color: var(--seal);
  border: 1px solid rgba(164, 52, 43, .3); background: rgba(164, 52, 43, .06);
  border-radius: 999px; padding: 2px 10px;
}
.place-x {
  border: 1px solid var(--line); background: transparent; color: var(--ink2);
  border-radius: 6px; padding: 4px 12px; font-size: 12px; cursor: pointer;
}
.place-x:hover { border-color: var(--seal); color: var(--seal); }
.place-body { flex: 1 1 auto; display: flex; min-height: 0; }
.place-side {
  flex: 0 0 190px; width: 190px; padding: 8px; overflow: auto;
  border-right: 1px solid var(--line); background: rgba(0, 0, 0, .015);
}
.place-nav-item {
  display: grid; grid-template-columns: 36px 1fr auto; align-items: center; gap: 6px;
  width: 100%; padding: 7px 8px; margin-bottom: 2px; text-align: left;
  border: 1px solid transparent; border-radius: 8px; background: transparent; cursor: pointer;
}
.place-nav-item i { font-size: 10px; font-style: normal; color: var(--ink3); }
.place-nav-item b { font-size: 13px; font-weight: 600; color: var(--ink2); }
.place-nav-item em { font-size: 10px; font-style: normal; color: var(--ink3); }
.place-nav-item:hover { background: rgba(164, 52, 43, .05); }
.place-nav-item.on { border-color: var(--seal); background: rgba(164, 52, 43, .08); }
.place-nav-item.on b { color: var(--seal); }
.place-main { flex: 1 1 auto; min-width: 0; padding: 14px 16px 12px; overflow: auto; }
.place-zone-h h4 { margin: 0 0 4px; font-size: 16px; color: var(--ink); }
.place-zone-h p { margin: 0 0 12px; font-size: 12px; line-height: 1.7; color: var(--ink3); }
/* 同一机构里的几个门（县政府办公室 → 县长 / 常务副 / 各部门）。
   做成胶囊签而不是第二列导航：它们不是并列的「区」，是同一个楼里的几间房。 */
.place-rooms { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.place-room {
  border: 1px solid var(--line); background: transparent; color: var(--ink2);
  border-radius: 999px; padding: 4px 14px; font-size: 12px; cursor: pointer;
}
.place-room:hover { border-color: var(--seal); color: var(--seal); }
.place-room.on { border-color: var(--seal); background: var(--seal); color: #fbf3e4; }
/* 在场的人：一个名字一张小卡，点一下开口（place-talk.js） */
.place-people {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(196px, 1fr));
  gap: 6px; margin: 0 0 10px;
}
.place-person {
  display: grid; grid-template-columns: 1fr auto; gap: 2px 8px; align-items: baseline;
  padding: 8px 10px; text-align: left; cursor: pointer;
  border: 1px solid var(--line); border-radius: 8px; background: transparent;
}
.place-person b { font-size: 13px; color: var(--ink); }
.place-person span { grid-column: 1; font-size: 11px; color: var(--ink3); line-height: 1.5; }
.place-person em {
  grid-column: 2; grid-row: 1; align-self: center;
  font-size: 11px; font-style: normal; color: var(--seal);
}
.place-person:hover { border-color: var(--seal); background: rgba(164, 52, 43, .04); }
/* 对话面板 */
.pt-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.pt-head b { font-size: 16px; color: var(--ink); }
.pt-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }
.pt-say {
  padding: 10px 12px; margin: 0 0 12px;
  border-left: 3px solid var(--seal); border-radius: 0 8px 8px 0;
  background: rgba(0, 0, 0, .022);
}
.pt-say p { margin: 0 0 8px; font-size: 13.5px; line-height: 1.85; color: var(--ink2); }
.pt-say p:last-child { margin-bottom: 0; }
.place-art { margin: 0 auto 12px; width: fit-content; max-width: 100%; }
.place-art img {
  display: block; width: auto; max-width: 100%; max-height: 30vh;
  object-fit: contain; border-radius: 8px;
}
/* 门口卡横幅：3:1 超宽图要横贯整卡，不能被 max-height:30vh 缩回去（首版就是被它
   卡成 666px 宽，被用户判「不够长」）。这里对门口卡单独放开高度、强制满宽。 */
.place-door-art { width: 100%; }
.place-door-art img { width: 100%; height: auto; max-height: none; }

/* ============================================================================
   门口卡套装裱边（2026-10-21，用户要求「剧情外框那个素材给这个换上」）
   ----------------------------------------------------------------------------
   素材完全复用剧情叙述外框那套 9 张：assets/frames/story/corner_*.png + edge_*.png
   + assets/frames/panel_paper_background.svg。不新出图、不另做一套。
   两套的差别只在落地位置：
     · 剧情面板：框在 `.panel` 上，内部 padding 24/26，标题让出 96px 装裱边；
     · 门口卡：框在 `.place-card.place-door` 上，卡本身有自己的顶栏（标题+回车上），
       所以顶栏接替「标题」的位置 —— 同样让出 96px 躲开左上角云头。
   四条硬约束（全部来自剧情那套踩过的坑，别改）：
     ① `--fr-half` 必须 = `--fr-c`：新套云头贴内侧，从 51px 起铺会让边条淡金线
        横穿云头上半部；
     ② 新套四边不同源，9 层第 5/6/7/8 层必须分别写 eh / eh_down / ev / ev_right
        （旧朱红套四层共用两个变量，照抄会上下边条颠倒）；
     ③ 暗色主题自动回原生卡片（`:root:not([data-theme="dark"])`），用户口径是先只做亮色；
     ④ `background-origin` 默认 padding-box，border 归零后 padding 盒 = 边框盒，
        角饰才能贴着卡的外沿 —— 所以 padding 只能给内边距，不能用 border 撑。
   ========================================================================== */
:root:not([data-theme="dark"]) .place-card.place-door {
  --fr-c: 102px;
  --fr-half: 102px;             /* 必须 = --fr-c，见约束① */
  --fr-edge: 19px;
  --fr-tile: 144px;
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  border-radius: 0 !important;
  /* 角饰/边条必须贴着卡外沿起绘：padding-box 会让 26px 内距把整圈框线内缩。 */
  background-origin: border-box !important;
  /* 内距对齐剧情那套（24/26/26）：角饰母版最内侧的描金细线落在距边 14px 处，
     26px 内距留 12px 空隙，正是剧情面板的观感；20px 只有 6px，插图会顶到线上。
     不能用 border 撑内距 —— border 归零后角饰才会贴着卡外沿（约束④）。 */
  padding: 22px 26px 24px !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 18px 50px rgba(20, 14, 6, .35) !important;
}

/* 顶栏接替剧情面板里「标题」的角色：左侧让出 96px 装裱边，落在云头右侧。
   云头本体 x 21..90.5 / y 30..65，垂尾 3px 宽一直拖到 y≈99 ⇒
   顶栏不能只有一行文字的高度，给到 58px 让文字带居中于云头、下沿越过垂尾。
   卡自带的 border-bottom 要拆掉，否则一条实线横穿裱边。 */
:root:not([data-theme="dark"]) .place-card.place-door .place-top {
  border-bottom: 0 !important;
  /* 左侧 96 让云头，右侧 26 与卡内距对齐（首版漏了右边，「回车上」直接压在描金线上）。
     上 18 / 下 6：让标题文字带垂直居中于云头（云头本体 y 30..65）。 */
  padding: 18px 26px 6px 96px !important;
  min-height: 58px;
}
:root:not([data-theme="dark"]) .place-card.place-door .place-top b { font-size: 16px; }

/* 卡本身已有 20px 内距，body 不能再叠一层，否则插图离框线太远、看着空。 */
:root:not([data-theme="dark"]) .place-card.place-door .place-door-body {
  padding: 0 !important;
}

/* 右下角被底栏按钮压住一块，给按钮行留出框线内距 */
:root:not([data-theme="dark"]) .place-card.place-door .place-acts {
  padding-bottom: 2px;
}

/* ============================================================================
   楼内分区卡套装裱边（2026-10-21，与门口卡同一套素材、同一套参数）
   ----------------------------------------------------------------------------
   `.place-card.place-scene` 有两处来源：scene-place.js（县委县政府大楼楼层分区）
   与 prov-complex.js（省域大院省委/省政府楼内分区）。两处结构一致：
   `.place-top` 顶栏 + `.place-body`（左楼层条 + 右功能区）+ `.place-foot` 底栏。
   卡宽 min(1040px, 96vw) —— 与门口卡同宽，102px 角饰完全放得下，
   所以**直接复用门口卡那组参数**，只是把顶栏让位、拆底边线一并搬过来。
   ★ 不新写变量：`:is()` 把门口卡和分区卡并成一个选择器组，
     改一处两处同时生效，避免以后只改一半导致两套参数漂移。
   ========================================================================== */
:root:not([data-theme="dark"]) .place-card.place-scene {
  --fr-c: 102px;
  --fr-half: 102px;             /* 必须 = --fr-c，见门口卡注释约束① */
  --fr-edge: 19px;
  --fr-tile: 144px;
  --fr-off: 0px;
  --fr-far: 0px;
  --fr-tl: url(../assets/frames/story/corner_tl.png?v=20261027PERF1);
  --fr-tr: url(../assets/frames/story/corner_tr.png?v=20261027PERF1);
  --fr-bl: url(../assets/frames/story/corner_bl.png?v=20261027PERF1);
  --fr-br: url(../assets/frames/story/corner_br.png?v=20261027PERF1);
  --fr-eh: url(../assets/frames/story/edge_h.png?v=20261027PERF1);
  --fr-eh-down: url(../assets/frames/story/edge_h_down.png?v=20261027PERF1);
  --fr-ev: url(../assets/frames/story/edge_v.png?v=20261027PERF1);
  --fr-ev-right: url(../assets/frames/story/edge_v_right.png?v=20261027PERF1);
  --fr-paper: url(../assets/frames/panel_paper_background.svg?v=20261027PERF1);

  border: 0 !important;
  /* 角饰/边条必须贴着卡外沿起绘：padding-box 会让 26px 内距把整圈框线内缩（实测云头被推离左沿）。 */
  background-origin: border-box !important;
  border-radius: 0 !important;
  padding: 22px 26px 24px !important;
  background-color: #F8F1E3 !important;
  background-image:
    var(--fr-tl), var(--fr-tr), var(--fr-bl), var(--fr-br),
    var(--fr-eh), var(--fr-eh-down), var(--fr-ev), var(--fr-ev-right),
    var(--fr-paper) !important;
  background-repeat:
    no-repeat, no-repeat, no-repeat, no-repeat,
    repeat-x, repeat-x, repeat-y, repeat-y,
    no-repeat !important;
  background-size:
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-c) var(--fr-c),
    var(--fr-tile) var(--fr-edge),
    var(--fr-tile) var(--fr-edge),
    var(--fr-edge) var(--fr-tile),
    var(--fr-edge) var(--fr-tile),
    100% 100% !important;
  background-position:
    left top, right top, left bottom, right bottom,
    left var(--fr-half) top var(--fr-off),
    left var(--fr-half) bottom var(--fr-far),
    left var(--fr-off) top var(--fr-half),
    right var(--fr-far) top var(--fr-half),
    center !important;
  box-shadow: 0 18px 50px rgba(20, 14, 6, .35) !important;
}

/* 顶栏接替标题：左侧让 96px 躲云头。分区卡的顶栏比门口卡多一行副标题，
   所以上 18 / 下 6 之后最小高仍给 58，云头不会被挤到半行处。 */
:root:not([data-theme="dark"]) .place-card.place-scene .place-top {
  border-bottom: 0 !important;
  padding: 18px 26px 6px 96px !important;
  min-height: 58px;
}
:root:not([data-theme="dark"]) .place-card.place-scene .place-top b { font-size: 16px; }

/* 左侧楼层条自带右边框 + 淡底，会横穿裱边的左右边条 ⇒ 拆掉，改用间距区分 */
:root:not([data-theme="dark"]) .place-card.place-scene .place-side {
  border-right: 0 !important;
  background: transparent !important;
  padding-top: 10px !important;
}
/* 底栏那条实线同样横穿底边条 */
:root:not([data-theme="dark"]) .place-card.place-scene .place-foot {
  border-top: 0 !important;
  padding: 6px 0 2px !important;
}
/* 功能区与楼层条之间补一道虚线，替代被拆掉的实线分隔 */
:root:not([data-theme="dark"]) .place-card.place-scene .place-main {
  border-left: 1px dashed rgba(140, 100, 40, .28);
  padding: 10px 0 12px 14px !important;
}

.place-funcs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.place-fn {
  position: relative; display: flex; flex-direction: column; gap: 3px;
  min-height: 58px; padding: 10px 46px 10px 12px; text-align: left;
  border: 1px solid var(--line); border-radius: 8px; background: #fff; cursor: pointer;
}
.place-fn:hover { border-color: var(--seal); box-shadow: 0 2px 8px rgba(120, 60, 40, .08); }
.place-fn .fn-nm { font-size: 13px; font-weight: 600; color: var(--ink); }
.place-fn .fn-hint { font-size: 11px; line-height: 1.45; color: var(--ink3); }
.place-fn .fn-ap {
  position: absolute; right: 10px; top: 9px;
  font-size: 12px; font-weight: 700; color: var(--seal);
}
.place-fn .fn-ap i { margin-left: 1px; font-size: 9px; font-style: normal; font-weight: 400; }
.place-fn.locked, .place-fn.nop {
  border-style: dashed; background: #f6f2e8; cursor: not-allowed;
}
.place-fn.locked .fn-nm, .place-fn.nop .fn-nm { color: var(--ink3); }
.place-fn .fn-why { font-size: 11px; color: var(--ink3); }
.place-fn.panel { border-color: rgba(164, 52, 43, .35); background: rgba(164, 52, 43, .04); }
.place-live {
  display: flex; flex-wrap: wrap; gap: 6px;
  margin-top: 12px; padding-top: 10px; border-top: 1px dashed rgba(140, 100, 40, .25);
}
.place-live span {
  font-size: 11px; color: var(--ink2);
  background: rgba(0, 0, 0, .035); border-radius: 999px; padding: 2px 9px;
}
.place-foot {
  flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
  padding: 8px 14px; border-top: 1px solid var(--line);
}
.place-tip { margin-right: auto; font-size: 11px; color: var(--ink3); }
.place-btn {
  border: 1px solid var(--line); background: transparent; color: var(--ink2);
  border-radius: 8px; padding: 6px 14px; font-size: 13px; cursor: pointer;
}
.place-btn:hover { border-color: var(--seal); color: var(--seal); }
.place-btn.primary { background: var(--seal); border-color: var(--seal); color: #fbf3e4; }
.place-btn.primary:hover { background: var(--seal2); color: #fff; }
.place-door-body { padding: 12px 16px 14px; }
.place-lines { margin: 0 0 12px; padding-left: 18px; }
.place-lines li { font-size: 13px; line-height: 1.9; color: var(--ink2); }
[data-theme="dark"] .place-card { background: #211f1a; border-color: rgba(255, 255, 255, .12); }
[data-theme="dark"] .place-top, [data-theme="dark"] .place-foot { border-color: rgba(255, 255, 255, .1); }
[data-theme="dark"] .place-side { border-color: rgba(255, 255, 255, .1); background: rgba(255, 255, 255, .02); }
[data-theme="dark"] .place-nav-item b { color: #d8cfbc; }
[data-theme="dark"] .place-fn { background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .12); }
[data-theme="dark"] .place-fn .fn-nm { color: #e6dcc6; }
[data-theme="dark"] .place-fn.locked, [data-theme="dark"] .place-fn.nop { background: rgba(255, 255, 255, .02); }
[data-theme="dark"] .place-btn { color: #d8cfbc; }
[data-theme="dark"] .place-lines li { color: #cfc6b2; }
[data-theme="dark"] .place-room { color: #cfc6b2; border-color: rgba(255, 255, 255, .16); }
[data-theme="dark"] .place-room.on { background: #c9a227; border-color: #c9a227; color: #1b1814; }
[data-theme="dark"] .place-person { border-color: rgba(255, 255, 255, .14); }
[data-theme="dark"] .place-person b { color: #e6dcc6; }
[data-theme="dark"] .pt-head b { color: #e6dcc6; }
[data-theme="dark"] .pt-say { background: rgba(255, 255, 255, .04); }
[data-theme="dark"] .pt-say p { color: #cfc6b2; }
@media (max-width: 900px) {
  .place-body { flex-direction: column; }
  .place-side {
    flex: 0 0 auto; width: auto; display: flex; gap: 4px; overflow-x: auto;
    border-right: 0; border-bottom: 1px solid var(--line);
  }
  .place-nav-item { flex: 0 0 auto; width: auto; grid-template-columns: auto auto; padding: 5px 10px; }
  /* 窄屏去掉「一楼 / 东楼」这种小字：8 个区挤在一条横向滚动条上，
     留着楼层字会让最后一项（东楼·县政府办公室）永远滑不到尽头。 */
  .place-nav-item i { display: none; }
  .place-nav-item b { font-size: 12px; }
  .place-nav-item em { display: none; }
  .place-funcs { grid-template-columns: 1fr; }
}



/* ==========================================================================
   县长办公室 · 门口与面谈（place-mayor.js）
   --------------------------------------------------------------------------
   两块：.pm-door（门口秘书）与 .pm-room（进屋面谈）。
   复用 .chat-msg / .chat-bub 的既有气泡样式，不另造一套对话外观。
   亮 / 暗两套，暗色只换底与字色，不改变尺寸。
   ========================================================================== */
.pm-door, .pm-room { display: flex; flex-direction: column; gap: 10px; }

/* ★ 2026-10-24 身份对照条：玩家看不出自己相对县长是什么位置，台词就容易读错味。
   三个人物同一个骨架，只换左边那条朱红/墨色竖线来区分上下位。 */
.pm-rel {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px;
  padding: 7px 11px; border-radius: 7px;
  border: 1px solid var(--line); border-left-width: 3px;
  background: rgba(154, 123, 63, .06);
  font-size: 12.5px; color: var(--ink2); line-height: 1.5;
}
.pm-rel b { color: var(--ink); font-weight: 800; }
.pm-rel-ar { color: var(--gold); font-weight: 700; }
.pm-rel-note { margin-left: auto; font-size: 11.5px; color: var(--seal); font-weight: 700; }
/* 你是上级（书记）：朱红线 */
.pm-rel-up { border-left-color: var(--seal); background: rgba(164, 52, 43, .055); }
/* 你是他的下级：淡墨线，语气更中性 */
.pm-rel-down { border-left-color: rgba(30, 22, 8, .32); background: rgba(30, 22, 8, .03); }
.pm-rel-down .pm-rel-note { color: var(--ink2); font-weight: 600; }
/* 这间屋子就是你的：金线 */
.pm-rel-self { border-left-color: var(--gold); }
.pm-rel-self .pm-rel-note { color: var(--gold); }

/* ★ 2026-10-24 身份核验横幅（place-mayor / place-exec 门口）。
   与市域图（.place-*）和门面（.xf-banner）同一条做法：一行判定 + 一句说明。
   .pm-sec 自带上边框，这里只压一下间距，别跟下面的秘书卡叠成两层线。 */
.pm-roleban { padding: 0 0 2px; border-bottom: 1px dashed var(--line); }
.pm-roleban .pm-sec-t > b { letter-spacing: 1px; }
.pm-roleban .pm-say { margin: 4px 0 6px; }

.pm-sec, .pm-person {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--card2, rgba(0, 0, 0, .015));
}
.pm-person { align-items: center; padding-bottom: 12px; border-bottom: 1px solid var(--line); }

/* ★★ 2026-10-25 布局塌陷修复（考功用人 / 一线指挥 / 监督执纪 / 政法调度 四面板）：
   .pm-sec 原本只为「.pm-face 头像 + .pm-sec-t 内容」两栏设计（见 place-exec /
   place-doors / prov-talk）。但 city-cadre / county-front / faith-law 三包把它
   当成「标题 + 正文 + 按钮」三段平铺容器用 —— flex:row 会把三段并排，
   .pm-sec-t 的 flex:1;min-width:0 又被 p / .acts 的固有宽度挤到 0，
   表现为**标题逐字竖排、正文被切成窄条**（运行时实测 .pm-sec-t 宽 0×462）。
   修法：没有 .pm-face 时不并排，改为纵向堆叠 —— 三段的自然宽度因此恢复。
   有 .pm-face 的两栏卡一律不动（:not(:has(.pm-face)) 精准命中，不影响
   place-exec / place-doors / prov-talk / sc-desk 等既有面板）。 */
.pm-sec:not(:has(> .pm-face)) { display: block; }
.pm-sec:not(:has(> .pm-face)) > .pm-sec-t { flex: none; min-width: 0; }
.pm-sec:not(:has(> .pm-face)) > .pm-sec-t + p { margin-top: 6px; }
.pm-sec:not(:has(> .pm-face)) > .acts { margin-top: 8px; }
/* 连续卡片之间留出呼吸缝隙：.pm-sec 自带 1px 边框，紧贴会并成一条线，
   读起来像一张表格而不是几张卡片（考功用人 / 一线指挥 都是 3~4 张连排）。 */
.pm-sec + .pm-sec { margin-top: 9px; }
/* 无头像卡片的标题给一点视觉权重：朱砂短竖线（与 .sec-t / .lr-name 同一设计语言）。
   原来标题 14px 和下面的正文 13px 只差 1px、同色，四个卡片读起来分不出层。 */
.pm-sec:not(:has(> .pm-face)) > .pm-sec-t > b {
  padding-left: 8px; position: relative; display: inline-block;
}
.pm-sec:not(:has(> .pm-face)) > .pm-sec-t > b::before {
  content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 2px; height: 13px; background: var(--seal); border-radius: 1px;
}

.pm-face {
  flex: 0 0 44px; width: 44px; height: 44px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(160deg, #c9a227, #8c6d1f); color: #fff;
  font-size: 15px; letter-spacing: 1px; font-weight: 700;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28);
}

.pm-sec-t { flex: 1; min-width: 0; }
.pm-sec-t b { font-size: 14px; margin-right: 8px; }
.pm-sec-t .muted { display: block; margin-top: 2px; }
.pm-say { margin: 7px 0 0; font-size: 13px; line-height: 1.8; color: var(--ink2); }

.pm-intel {
  padding: 9px 12px; border-left: 2px solid var(--seal, #9b2c24);
  background: rgba(155, 44, 36, .045); border-radius: 0 6px 6px 0;
}
.pm-intel p { margin: 4px 0; font-size: 12.5px; line-height: 1.75; color: var(--ink2); }
.pm-intel p:first-child { margin-top: 0; }
.pm-intel p:last-child { margin-bottom: 0; }

.pm-src {
  margin-left: auto; flex: 0 0 auto;
  font-size: 11px; color: var(--ink3); border: 1px solid var(--line);
  border-radius: 999px; padding: 2px 8px; white-space: nowrap;
}

.pm-log {
  max-height: 240px; overflow-y: auto; padding: 8px 2px;
  display: flex; flex-direction: column; gap: 8px;
}
.pm-log .chat-bub { white-space: normal; }
.pm-ava {
  flex: 0 0 26px; width: 26px; height: 26px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(160deg, #d8b452, #9a7a26); color: #2b1f05;
  font-size: 13px; font-weight: 700; margin-top: 2px;
}

.pm-wait { margin: 0; font-size: 12px; color: var(--ink3); font-style: italic; }

.pm-ask { border-top: 1px dashed var(--line); padding-top: 8px; }
.pm-ask-h { font-size: 11.5px; letter-spacing: .06em; color: var(--ink3); margin-bottom: 6px; }
.pm-chips { display: flex; flex-wrap: wrap; gap: 5px; }

.pm-in { display: flex; gap: 6px; margin-top: 2px; }
.pm-in input {
  flex: 1; min-width: 0; padding: 8px 10px;
  border: 1px solid var(--line); border-radius: 6px;
  background: var(--card); color: var(--ink); font-size: 13px;
}
.pm-in input:focus { outline: none; border-color: var(--seal, #9b2c24); }
.pm-in input:disabled { opacity: .6; }

[data-theme="dark"] .pm-sec, [data-theme="dark"] .pm-person { background: rgba(255, 255, 255, .03); }
/* 身份对照条 · 暗色：底压到 3%，朱红换成亮一档的砖红以免在深底上发黑 */
[data-theme="dark"] .pm-rel { background: rgba(255, 255, 255, .03); border-color: rgba(255, 255, 255, .14); }
[data-theme="dark"] .pm-rel-up { border-left-color: #d06052; background: rgba(208, 96, 82, .09); }
[data-theme="dark"] .pm-rel-down { border-left-color: rgba(255, 255, 255, .28); background: rgba(255, 255, 255, .03); }
[data-theme="dark"] .pm-rel-self { border-left-color: #c9a227; }
[data-theme="dark"] .pm-rel-note { color: #d06052; }
[data-theme="dark"] .pm-rel-self .pm-rel-note { color: #c9a227; }
[data-theme="dark"] .pm-face { background: linear-gradient(160deg, #c9a227, #6d5316); color: #1b1814; }
[data-theme="dark"] .pm-ava { background: linear-gradient(160deg, #c9a227, #6d5316); color: #1b1814; }
[data-theme="dark"] .pm-say, [data-theme="dark"] .pm-intel p { color: #cfc6b2; }
[data-theme="dark"] .pm-intel { background: rgba(201, 162, 39, .09); border-left-color: #c9a227; }
[data-theme="dark"] .pm-in input { background: #1b1814; color: #e6dcc6; }

@media (max-width: 900px) {
  .pm-log { max-height: 180px; }
  .pm-face { flex-basis: 38px; width: 38px; height: 38px; font-size: 13px; }
  .pm-src { display: none; }
}

/* ===== 2026-10-18 县城全图外框：与弹窗同款祥云纹 =====
   同 assets/frames/modal-cloud.jpg 九宫格 border-image（slice 200 / round）。
   县城全图在主区、面板更宽，边框厚度用 clamp(16px, 2.6vw, 52px)（比 modal 的 72 收一档）。
   顶部鎏金细线（.panel::after）会横穿祥云框 ⇒ 按 promo-wide 的处理关掉。 */
.county-map-panel {
  border: clamp(24px, 4vw, 64px) solid transparent;
  border-image: url(../assets/frames/modal-cloud.jpg?v=20261027PERF1) 200 200 200 200 round;
  border-radius: 0;
  background-clip: padding-box;
}
.county-map-panel::after { display: none !important; }

/* ===== 2026-10-18 县城全图：去掉地图外圈米色底板，让地图直接贴祥云框 =====
   原来 .county-map-panel 有 12px 14px 内边距 + .cm-map 有 10px 圆角和 1px 描边，
   视觉上地图和祥云框之间夹了一圈米色（用户截图里蓝线外的黄区）。
   改法：panel 内边距归零、地图去圆角/描边/底色；标题栏自己留内边距，保住可读性。 */
.county-map-panel { padding: 0; }
.county-map-panel .cm-head { padding: 10px 16px 8px; margin-bottom: 0; }
.county-map-panel .cm-map {
  border-radius: 0;
  border: 0;
  box-shadow: none;
  background: transparent;
}

/* ===== 2026-10-18 县城全图顶栏：DOM 标题栏也向下渐隐，和 canvas 顶栏的渐变接上 =====
   canvas 里的 drawTopBar 已改成「顶部实、底部透明」，这里把 DOM 的 .cm-head 做成同一节奏，
   整块顶部不再是一张硬底板；panel 背景透明，让主区底色透上来。 */
.county-map-panel { background: transparent; }
.county-map-panel .cm-head {
  background: linear-gradient(180deg, rgba(251,247,239,.96) 0%, rgba(251,247,239,.58) 55%, rgba(251,247,239,0) 100%);
}

/* 2026-10-18 再收一层：.cm-head 也不铺底（主区底色透上来，和地图天空同色系） */
.county-map-panel .cm-head { background: transparent; }

/* 2026-10-18 顶栏收尾：把 .cm-head 的底色对齐地图天空（实测 #EDE3D7），
   并向下渐隐到透明 —— 第一行与 canvas 里的地图天空同色，看不出「另一块底板」。 */
.county-map-panel .cm-head {
  background: linear-gradient(180deg, #EDE3D7 0%, #EDE3D7 55%, rgba(237,227,215,0) 100%);
}
[data-theme="dark"] .county-map-panel .cm-head {
  background: linear-gradient(180deg, #2A2822 0%, #2A2822 55%, rgba(42,40,34,0) 100%);
}

/* ===== 2026-10-19 镇域图外框：与县城全图共用同一套祥云框 =====
   用户反馈「镇域全图外框没有像县域外框那样的素材」。县域那条外框其实不在
   canvas 里，是 .county-map-panel 的 border-image；镇域图面板 .town-map-panel
   从来没写过这一条，所以是光板一块。这里照抄同一张 modal-cloud.jpg、同一组
   九宫格切分参数，两张图才像一个系列；顺带把内边距/圆角/阴影对齐县城版。 */
.town-map-panel {
  border: clamp(24px, 4vw, 64px) solid transparent;
  border-image: url(../assets/frames/modal-cloud.jpg?v=20261027PERF1) 200 200 200 200 round;
  border-radius: 0;
  padding: 0;
  background-clip: padding-box;
}
.town-map-panel::after { display: none !important; }
.town-map-panel .cm-head {
  padding: 10px 16px 8px;
  margin-bottom: 0;
  background: linear-gradient(180deg, #EDE3D7 0%, #EDE3D7 55%, rgba(237,227,215,0) 100%);
}
[data-theme="dark"] .town-map-panel .cm-head {
  background: linear-gradient(180deg, #2A2822 0%, #2A2822 55%, rgba(42,40,34,0) 100%);
}
.town-map-panel .cm-map {
  border-radius: 0;
  border: 0;
  box-shadow: none;
  background: transparent;
}

/* ===== 2026-10-19 纪检纵深「红色实底」按钮 =====
   用户要求廉政账户行的操作按钮改成红色、去小图标。直接用朱红实底白字，
   与县全图顶部按钮(同 #8c1f28)一致；hover 略提亮。 */
.chip.red {
  background: #8c1f28; color: #fff; border: 1px solid #6d141c;
  font-weight: 700; box-shadow: 0 1px 3px rgba(120,30,20,.25);
}
.chip.red:hover:not([disabled]) { background: #a02a34; color: #fff; border-color: #8c1f28; }
.chip.red[disabled] { opacity: .45; cursor: not-allowed; }

/* ★★★ 2026-10-21 手机档 aside-ap 复位 —— 必须留在文件末尾
   ---------------------------------------------------------------------------
   ① .layout > aside.aside-ap { grid-column: 3 !important } 在 :7803，
      min-width: 280px !important 在 :8002 —— 都是「同特异性 + 同为 !important」，
      后写者胜 ⇒ 本块若写在前面（如 :4530 那个 @media），computed 恒为旧值；
   ② 实测（640px 档）：写在 :4530 时 aside 恒为 grid-column:3 / min-width:280px / 宽 305 /
      left 317；同一段内容挪到文件末尾立刻变 1 / 0px / 604 / 18；
   ③ grid-column: 1 / -1 这种「起点 / 负线号」写法会被整条丢弃（computed 仍是旧值），
      必须写 1 / span 3；
   ⇒ 凡是覆盖 aside-ap 的 grid-column / min-width 的 !important，都必须追加在此文件末尾。
   --------------------------------------------------------------------------- */
@media (max-width: 900px) {
  .layout > aside.aside-ap { grid-column: 1 / span 3 !important; grid-row: auto !important; }
  .layout > aside.aside-ap,
  .layout > aside.aside-ap > .ap-panel { min-width: 0 !important; }
  .layout > aside.aside-ap > .ap-panel { padding-left: 10px; padding-right: 18px; }
  .ap-panel .ap-hinfo { min-width: 0 !important; }
  .ap-plate-hero { width: 104px !important; flex: 0 0 104px !important; }
  .ap-hero { gap: 9px; }
}

/* ★★★ 2026-10-21 手机档顶栏收口 —— 同理必须留在文件末尾
   ---------------------------------------------------------------------------
   ① .t-left 在 :2322 是 flex:none + min-width:220px，.tl-chip 又全是 white-space:nowrap，
     360 档实测 .t-left 被撑到 420px（视口可用宽仅 324）⇒ 整页横向溢出 78px；
   ② .t-right 同为 flex:none，上排 capsule 行实测 460px ⇒ 溢出 118px。
   这里只改「能否收缩 + 允许换行」，不改任何宽屏排版：把两块都放进 900 断点内，
   且追加在本文件末尾（与 aside-ap 同理，理由见上一段注释）。
   --------------------------------------------------------------------------- */
@media (max-width: 900px) {
  .top-c { gap: 10px 14px; }
  .t-left { flex: 0 1 auto; min-width: 0; max-width: 100%; flex-wrap: wrap; gap: 8px 10px; }
  .t-ymeta { min-width: 0; }
  .t-line { letter-spacing: 0; white-space: normal; overflow-wrap: anywhere; }
  .t-year-seal { width: 60px; height: 60px; border-radius: 10px; }
  .t-year-seal .y { font-size: 24px; }
  .t-right { flex: 1 1 100%; width: 100%; min-width: 0; align-items: stretch; }
  .t-chip-row { max-width: 100%; justify-content: flex-start; }
  .t-chip-row .tl-chip { min-width: 0; white-space: normal; }
  .t-btns { align-self: stretch; justify-content: flex-start; }
}
/* ★★★ 2026-10-21 手机档 .cm-head 收口 —— 同理必须留在文件末尾
   ---------------------------------------------------------------------------
   镇域/县城面板的 .cm-head（:10241）是 display:flex + justify-content:space-between，
   右侧按钮组内联 style 是「display:flex + gap:6px」，四个按钮还都是 white-space:nowrap。
   360 档实测右侧那个 span 被撑到 336px（可用宽约 300）⇒ 溢出 75px。
   只改「能否换行 + 是否收缩」，宽屏排版不变（宽屏一行放得下，wrap 不会触发）。 */
@media (max-width: 900px) {
  .cm-head { flex-wrap: wrap; gap: 6px 10px; }
  .cm-head > span { flex-wrap: wrap; min-width: 0; }
  /* 晋升面板 .promo-top（:3537）是 flex + gap:18px，.pt-rankbox 有 min-width:110px，
     360 档实测把 .pt-mid 挤出视口（.pt-count b 的 right 到 423）⇒ 溢出 75px。 */
  .promo-top { flex-wrap: wrap; gap: 10px; }
  .pt-rankbox { min-width: 0; }
  .pt-rank { letter-spacing: 1px; }
  .pt-mid { flex: 1 1 100%; }
  /* 六维检查项：.promo-wide .checks 是三列网格（:3546），每格里 .chk-top 是
     space-between + .chk-num 是 nowrap ⇒ 360 档右侧溢出。
     保持三列，但允许每格收缩、数字换行（改成 1fr 反而更糟：.chk 自身 min-width
     会把 109px 的格子顶到 right=395）。 */
  .promo-wide .checks .chk { min-width: 0; }
  .promo-wide .chk-top { gap: 6px; }
  .promo-wide .chk-num { white-space: normal; }
  /* .chk-label 是 nowrap+ellipsis，本身不溢出；但它把 .chk-top 的剩余宽度吃光，
     .chk-num（39–45px）就被推到格子外 ⇒ 360 档溢出 11px。窄屏让标签也换行。 */
  .promo-wide .chk-label { white-space: normal; overflow: visible; }
  /* 360 档实测 .main > .panel.promo-wide 的 computed margin-right = -52px（来源未在样式表
     中找到，疑为运行时注入），把 .chk-num 顶出视口 11px。窄屏一律清零负边距。 */
  .main > .panel.promo-wide { margin-left: 0; margin-right: 0; }
  /* 真正的根因：.promo-wide（:3523）是 display:flex，左侧 .promo-art 有 min-width:210px
     + gap:14px ⇒ 360 档右侧内容区被压成 0 宽（.promo-body 宽 0、.promo 宽 64、
     .checks 宽 0 但子项仍按 min-content 排布 ⇒ .chk-num 溢出 11px）。
     窄屏让插画改为可缩、并允许整块换行。 */
  .promo-wide { flex-wrap: wrap; gap: 10px; }
  .promo-wide .promo-art { width: 120px; min-width: 0; flex: 0 1 120px; height: auto; }
  .promo-wide .promo-body { flex: 1 1 100%; min-width: 0; }
}

/* ===== 会议账 · 会单卡片（2026-10-23 P1a）=====
   起因：玩家原话「分区的背景色是这难看」。原卡片用 --paper2（#e3d3ac 土黄），
   压在弹窗的 --card（#fbf7ef）上像一块补丁，且和正文深灰字对比生硬。
   改法：做成「会议纪要纸」——商汤生成的宣纸纹（提亮降对比）打底，
   底色靠近弹窗底但不完全相同（纸片浮起），左侧一道竖线分层：
   普通会是淡金，必到会是印章红。
   素材：assets/ui/tex_meet_scroll.webp（1024×1024，可平铺，另存 quality 82）。
   ★ 注意：本文件在 assets/ 里，所以图片写 ui/xxx，不能写 assets/ui/xxx。 */
.meet-card {
  position: relative;
  display: grid;
  grid-template-columns: 86px minmax(0, 1fr);
  column-gap: 13px;
  align-items: start;
  margin: 12px 0;
  padding: 12px 15px 11px;
  border: 1px solid rgba(150, 128, 96, .40);
  border-left: 3px solid rgba(154, 123, 63, .55);
  border-radius: 6px;
  background-color: #f7f1e2;
  background-image: url("ui/tex_meet_scroll.webp?v=20261027PERF1");
  background-size: 280px 280px;
  background-blend-mode: multiply;
  box-shadow: 0 1px 2px rgba(70, 50, 25, .07), inset 0 1px 0 rgba(255, 255, 255, .55);
}
.meet-card.is-must { border-left-color: var(--seal); }

.meet-card-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.meet-card-name { font-size: 15.5px; letter-spacing: .3px; color: var(--ink); }
.meet-card-meta { font-size: 12px; color: var(--ink3); white-space: nowrap; }
.meet-card-meta .must { color: var(--seal); }
.meet-card-sub { margin-top: 2px; font-size: 12px; color: var(--ink3); }
.meet-card-what { margin: 7px 0 0; font-size: 13.5px; line-height: 1.72; color: var(--ink2); }
.meet-card-why { margin: 7px 0 0; font-size: 12px; line-height: 1.6; color: var(--ink3); }
.meet-card-acts { margin-top: 9px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.meet-card-done { font-size: 13px; font-weight: 600; color: var(--seal); }
.meet-card-hint { font-size: 12px; color: var(--ink3); }

/* 暗色：纹理是浅色的，直接压上去会糊 → 关掉纹样，只留底色与描边层级 */
html[data-theme="dark"] .meet-card {
  background-color: #262218;
  background-image: none;
  border-color: rgba(196, 170, 120, .22);
  border-left-color: rgba(196, 170, 120, .34);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .04);
}
html[data-theme="dark"] .meet-card.is-must { border-left-color: var(--seal); }

/* 会议账头部统计条：和卡片同一套纸感，但更薄 */
.meet-bar {
  display: flex; gap: 14px; flex-wrap: wrap;
  padding: 8px 0 9px;
  margin-bottom: 2px;
  border-bottom: 1px dashed var(--line);
  font-size: 13px; color: var(--ink2);
}
.meet-bar b { color: var(--ink); }
.meet-bar .hot { color: var(--seal); }

/* 规则脚注 */
.meet-foot {
  margin-top: 14px; padding-top: 10px;
  border-top: 1px dashed var(--line);
  font-size: 12px; line-height: 1.75; color: var(--ink3);
}
/* ===== 会议账 · 插图（2026-10-23 第三轮）=====
   素材：商汤 sn-image-base 生成的微彩水墨（淡墨线 + 一点靛青/赭石/朱砂）。
   ★ 关键手法：mix-blend-mode: multiply。
     图是宣纸白底淡墨，multiply 后白纸自然透掉，只剩墨色压在卡片宣纸底上，
     不需要抠图，也不会出现一块白方块。
   ★ 暗色主题：白底会糊成一片灰 → 反相成「黑底白线」，再压暗不透明地贴合深底。
   ★ 素材清单：assets/ui/ill_meet_{legal,escort,upper,line,cmd,rite}.webp（320×320）
                assets/ui/ill_meet_top.webp（1536×512，面板题图） */

/* 面板题图：一进门先看见会议室 */
.meet-hero {
  position: relative;
  margin: 0 0 11px;
  border: 1px solid rgba(150, 128, 96, .36);
  border-radius: 6px;
  overflow: hidden;
  background: #f3ecdc;
}
.meet-hero-img {
  display: block;
  width: 100%;
  height: 148px;
  object-fit: cover;
  object-position: center 48%;
  opacity: .95;
}
.meet-hero-cap {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 18px 12px 9px;
  text-align: right;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .6px;
  color: #4a3a22;
  background: linear-gradient(to top, rgba(250, 245, 233, .93), rgba(250, 245, 233, 0));
}
/* 题注压在画上，必须自带药丸底——否则字会跟椅子线条缠在一起 */
.meet-hero-cap span {
  display: inline-block;
  padding: 2px 9px;
  border-radius: 10px;
  background: rgba(251, 247, 239, .82);
  box-shadow: 0 1px 2px rgba(70, 50, 25, .06);
}

/* 卡内插图 */
.meet-card-fig { position: relative; width: 86px; }
.meet-card-ill {
  display: block;
  width: 86px;
  height: 86px;
  border-radius: 4px;
  object-fit: cover;
  mix-blend-mode: multiply;
  opacity: 1;
}
.meet-card-fig::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 4px;
  border: 1px solid rgba(154, 123, 63, .30);
  pointer-events: none;
}
.meet-card.is-must .meet-card-fig::after { border-color: rgba(158, 42, 38, .34); }
/* 已处置：这一页翻过去了，画面褪掉一半 */
.meet-card.is-done .meet-card-ill { opacity: .38; }
.meet-card.is-done .meet-card-fig::after { border-color: rgba(150, 128, 96, .18); }

.meet-card-body { min-width: 0; }

html[data-theme="dark"] .meet-hero {
  border-color: rgba(196, 170, 120, .22);
  background: #221e16;
}
html[data-theme="dark"] .meet-hero-img {
  filter: invert(1) hue-rotate(180deg) brightness(1.05) saturate(.75);
  opacity: .62;
}
html[data-theme="dark"] .meet-hero-cap {
  color: #d8c9a8;
  background: linear-gradient(to top, rgba(34, 30, 22, .95), rgba(34, 30, 22, 0));
}
html[data-theme="dark"] .meet-hero-cap span { background: rgba(34, 30, 22, .78); color: #e2d4b4; }
html[data-theme="dark"] .meet-card-ill {
  mix-blend-mode: normal;
  filter: invert(1) hue-rotate(180deg) brightness(1.18) saturate(.7);
  opacity: .68;
}
html[data-theme="dark"] .meet-card.is-done .meet-card-ill { opacity: .2; }

/* 窄屏：插图让位给字，缩到 64 */
@media (max-width: 560px) {
  .meet-card { grid-template-columns: 64px minmax(0, 1fr); column-gap: 10px; }
  .meet-card-fig, .meet-card-ill { width: 64px; }
  .meet-card-ill { height: 64px; }
  .meet-hero-img { height: 104px; }
}
/* ===== 会议账 · 上季回响（2026-10-23 P2）=====
   季度流水里念一次（G.xfApEchoInto），面板里也留一条——
   因为玩家常常关掉流水直接看会单，回响不能只出现一次。
   视觉：左侧一道虚线竖线 + 极淡的纸色底，像夹在会单里的一张便条。 */
.meet-echo {
  margin: 10px 0 4px;
  padding: 9px 12px 10px;
  border-left: 2px solid rgba(154, 123, 63, .35);
  border-radius: 0 5px 5px 0;
  background: rgba(154, 123, 63, .05);
  font-size: 12.5px;
  line-height: 1.72;
  color: var(--ink2);
}
.meet-echo-hd {
  margin-bottom: 3px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .4px;
  color: var(--ink3);
}
.meet-echo-li { color: var(--ink2); }
html[data-theme="dark"] .meet-echo {
  background: rgba(196, 170, 120, .07);
  border-left-color: rgba(196, 170, 120, .30);
}
/* ===== 生涯节点视频 · 一次性三段（2026-10-23）=====
   陪会制计划书 §8.7：视频只留给三个「一辈子一次」的瞬间。
   字条压在画面左下，朱砂竖线起头；字比画面晚 0.5s 淡进来，
   先让人看见会，再让人看见这句话。 */
.mn-overlay { cursor: pointer; z-index: 99999; }
.mn-slip {
  position: absolute; left: 6%; bottom: 12%; z-index: 3;
  max-width: min(62vw, 540px);
  padding: 16px 22px 16px 20px;
  border-left: 4px solid var(--seal);
  /* 视频里有大片亮部（白瓷杯、窗），.52 的底压不住正文，抬到 .7 并加一层轻模糊 */
  background: rgba(16, 12, 8, .70);
  backdrop-filter: blur(3px);
  opacity: 0; transform: translateY(10px);
  transition: opacity .9s ease .5s, transform .9s cubic-bezier(.2, .9, .25, 1) .5s;
}
.intro-overlay.on .mn-slip { opacity: 1; transform: translateY(0); }
.mn-slip-hd {
  font-family: var(--font-kai); font-size: 25px; letter-spacing: 3px;
  font-weight: 800; color: #fbf5e6; text-shadow: 0 1px 8px rgba(0, 0, 0, .62);
}
.mn-slip-tx {
  margin-top: 9px; font-size: 14.5px; line-height: 1.8;
  color: rgba(248, 242, 226, .94);
  text-shadow: 0 1px 5px rgba(0, 0, 0, .55);
}
.mn-slip-sub {
  font-size: 12px; letter-spacing: 1px;
  color: rgba(246, 239, 221, .62);
}
/* 年份与「点一下继续」同一行：右下角是 sd-link 的常驻工具条，
   独立摆放一定会被压住，收进字条里就再也不会撞。 */
.mn-slip-ft {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 18px; margin-top: 10px;
}
.mn-slip-go {
  font-size: 12px; letter-spacing: 1px; color: rgba(246, 239, 221, .55);
  opacity: 0; transition: opacity .6s ease 1.3s;
}
.intro-overlay.on .mn-slip-go { opacity: 1; }
/* 播放这 5 秒时把右下角工具条收起来，放完自动还原 */
body.mn-playing #sdLinkDock { opacity: 0 !important; pointer-events: none !important; }
@media (max-width: 560px) {
  .mn-slip { left: 5%; right: 5%; bottom: 10%; max-width: none; padding: 12px 16px; }
  .mn-slip-hd { font-size: 20px; letter-spacing: 2px; }
  .mn-slip-tx { font-size: 13px; }
}
/* ===== 生涯节点 · 去视频后的字条版（2026-10-27）=====
   四段短片（hall / stage / called / 履新）全部下线，只剩字条。
   原来字条压在画面左下（left 6% / bottom 12%）是为了给画面里的人脸让位；
   现在没有画面了，左下角会空落，于是改成居中。
   底子：深褐渐层 + 顶上一抹金、底下一抹朱砂，把「仪式感」从画面搬到光上。
   字条：既然没有画面可压，就不该再是半透明黑条——换成宣纸卡片，
        和开局入场卡、各类表单是同一套纸＋朱砂细边的语言，看着是「设计过的」，
        而不是「视频没加载出来」。 */
.intro-overlay.mn-overlay.no-video {
  background:
    radial-gradient(120% 88% at 50% -8%, rgba(196, 154, 60, .20), transparent 60%),
    radial-gradient(96% 72% at 50% 108%, rgba(140, 32, 26, .24), transparent 68%),
    linear-gradient(158deg, #1e1811 0%, #16110c 54%, #100c08 100%);
}
/* ---- 底图：虚化的会场（2026-10-27）----
   昊要的是「中间卡片、四周是虚化的会场环境」，不是纯渐变。
   模糊（radius 7.5 @880px）和压暗（0.66）已经**烘进图片**，单张 8~10KB：
     · 手机不用实时算高斯模糊（低端机 blur 一次能掉十几帧）；
     · 体积比原图小一个数量级（原图 64~350KB）；
     · 模糊烘进图里就不会有「blur 后边缘透出底色」的经典毛病，省掉 scale 补偿。
   这一层只负责铺满 + 极缓的推镜（11 秒从 1.13 到 1.02），让画面不是死图。 */
.intro-overlay.mn-overlay.no-video .mn-bg {
  position: absolute; inset: 0;
  background-position: center; background-size: cover; background-repeat: no-repeat;
  transform: scale(1.02);
  animation: mnBgDrift 11s ease-out both;
}
@keyframes mnBgDrift {
  from { transform: scale(1.13); }
  to   { transform: scale(1.02); }
}
.mn-bg-hall   { background-image: url(intro/bg/hall.webp?v=20261027NOVID2); }
.mn-bg-stage  { background-image: url(intro/bg/stage.webp?v=20261027NOVID2); }
.mn-bg-called { background-image: url(intro/bg/called.webp?v=20261027NOVID2); }
.mn-bg-inaug  { background-image: url(intro/bg/inaug.webp?v=20261027NOVID2); }
/* 竖屏换竖版：16:9 的图 cover 到 390×844，横向只剩中间一条，
   穹顶弧、主席台、椅排全被裁掉，糊成一团看不出是会场。
   所以另出四张 620×1340 的竖版（同样是烘好的模糊，11~15KB），
   窄屏换过去，整张会场的横向结构才留得住。 */
@media (max-width: 560px) {
  .mn-bg-hall   { background-image: url(intro/bg/hall_p.webp?v=20261027NOVID2); }
  .mn-bg-stage  { background-image: url(intro/bg/stage_p.webp?v=20261027NOVID2); }
  .mn-bg-called { background-image: url(intro/bg/called_p.webp?v=20261027NOVID2); }
  .mn-bg-inaug  { background-image: url(intro/bg/inaug_p.webp?v=20261027NOVID2); }
}
/* 压暗罩：四周沉下去、中间留一线亮，卡片才立得住；
   顺手把「顶上一抹金、底下一抹朱砂」的仪式感叠回到底图之上。 */
.intro-overlay.mn-overlay.no-video .mn-veil {
  position: absolute; inset: 0;
  background:
    radial-gradient(120% 88% at 50% -8%, rgba(196, 154, 60, .16), transparent 58%),
    radial-gradient(96% 72% at 50% 108%, rgba(140, 32, 26, .20), transparent 66%),
    radial-gradient(78% 72% at 50% 50%, rgba(12, 8, 4, .20) 0%, rgba(12, 8, 4, .46) 58%, rgba(8, 5, 2, .80) 100%);
}
.intro-overlay.mn-overlay.no-video .mn-slip {
  left: 50%; top: 50%; bottom: auto; right: auto;
  width: min(78vw, 620px);
  padding: 32px 40px 26px;
  border-left: 5px solid var(--seal);
  border-radius: 4px;
  background: linear-gradient(180deg, rgba(252, 247, 235, .97), rgba(243, 232, 207, .95));
  outline: 1px solid rgba(164, 52, 43, .20);
  outline-offset: 4px;
  box-shadow: 0 24px 64px rgba(0, 0, 0, .62), 0 2px 0 rgba(255, 255, 255, .5) inset;
  transform: translate(-50%, calc(-50% + 16px));
  transition: opacity .8s ease .15s, transform .8s cubic-bezier(.2, .9, .25, 1) .15s;
}
/* .on 态必须单独抬一级特异度（5 个类 > 通用规则的 3 个），
   否则会被上面那条 translate 吃掉，字条永远淡不进来。 */
.intro-overlay.mn-overlay.no-video.on .mn-slip {
  opacity: 1;
  transform: translate(-50%, -50%);
}
/* 纸底上不能再用白字＋黑描边（那是压视频用的），全部换成墨色 */
.intro-overlay.mn-overlay.no-video .mn-slip-hd {
  font-size: 30px; letter-spacing: 7px; color: #2a2118;
  text-shadow: 0 1px 0 rgba(255, 255, 255, .65);
}
.intro-overlay.mn-overlay.no-video .mn-slip-tx {
  margin-top: 14px; font-size: 15.5px; line-height: 1.95; color: #4a4034;
  text-shadow: none;
}
.intro-overlay.mn-overlay.no-video .mn-slip-sub { color: rgba(74, 64, 52, .52); }
.intro-overlay.mn-overlay.no-video .mn-slip-ft { margin-top: 16px; }
.intro-overlay.mn-overlay.no-video .mn-slip-go { color: rgba(74, 64, 52, .48); }
@media (max-width: 560px) {
  .intro-overlay.mn-overlay.no-video .mn-slip {
    width: 90vw; padding: 22px 22px 18px;
  }
  .intro-overlay.mn-overlay.no-video .mn-slip-hd { font-size: 22px; letter-spacing: 4px; }
  .intro-overlay.mn-overlay.no-video .mn-slip-tx { font-size: 13.5px; margin-top: 10px; }
}
/* ===== 会议账 · 数字对不上（P3 入口条，2026-10-23）=====
   和「上季的会散了以后」同一套便条语言，但左侧线换成印章红——
   这条是"要你处理的事"，不是"已经过去的事"。 */
.meet-note {
  margin: 12px 0 4px;
  padding: 9px 12px 10px;
  border-left: 2px solid var(--seal);
  border-radius: 0 5px 5px 0;
  background: rgba(178, 58, 46, .045);
  font-size: 12.5px;
  line-height: 1.72;
  color: var(--ink2);
}
.meet-note-hd {
  margin-bottom: 3px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .4px;
  color: var(--seal);
}
.meet-note-li { color: var(--ink2); }
html[data-theme="dark"] .meet-note {
  background: rgba(200, 90, 76, .09);
  border-left-color: rgba(210, 110, 96, .55);
}

/* ===== 数字水分面板（P3，2026-10-23）=====
   两个数的并排是这张卡的骨架：左边台账、右边报送，中间一个箭头。
   不写百分比大字——差额写在标签行里，正文只摆两个数，让眼睛自己发现它们不一样。 */
.water-id { margin-bottom: 8px; }
.water-id b { font-size: 14.5px; letter-spacing: .3px; color: var(--ink); }
.water-id-sub {
  margin-top: 5px;
  font-size: 12.5px;
  line-height: 1.72;
  color: var(--ink3);
}

.water-bar {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  padding: 8px 0;
  margin-bottom: 4px;
  border-bottom: 1px dashed var(--line);
  font-size: 13px;
  color: var(--ink2);
}
.water-bar .is-warn { color: var(--seal); }

.water-card {
  margin: 12px 0;
  padding: 12px 15px 11px;
  border: 1px solid rgba(150, 128, 96, .40);
  border-left: 3px solid rgba(154, 123, 63, .55);
  border-radius: 6px;
  background-color: #f7f1e2;
  background-image: url("ui/tex_meet_scroll.webp?v=20261027PERF1");
  background-size: 280px 280px;
  background-blend-mode: multiply;
  box-shadow: 0 1px 2px rgba(70, 50, 25, .07), inset 0 1px 0 rgba(255, 255, 255, .55);
}
/* 待处置的卡左侧挂印章红：一眼看出哪几份还没签 */
.water-card:not(.is-done) { border-left-color: var(--seal); }
.water-card.is-done { opacity: .82; }

.water-card-hd { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.water-card-hd b { font-size: 15.5px; letter-spacing: .3px; color: var(--ink); }
.water-card-tag { font-size: 12px; color: var(--ink3); white-space: nowrap; }

.water-nums {
  display: flex;
  align-items: baseline;
  gap: 14px;
  margin: 9px 0 2px;
  flex-wrap: wrap;
}
.water-num { display: flex; align-items: baseline; gap: 5px; }
.water-num small { font-size: 11.5px; color: var(--ink3); letter-spacing: .5px; }
.water-num b { font-size: 21px; font-weight: 700; color: var(--ink); letter-spacing: .5px; }
.water-num em { font-size: 11.5px; font-style: normal; color: var(--ink3); }
.water-num.is-said b { color: var(--seal); }        /* 报上来的那个数用印章红：它才是要你签的 */
.water-arrow { font-size: 14px; color: var(--ink3); }

.water-why { margin: 6px 0 0; font-size: 12.5px; line-height: 1.72; color: var(--ink2); }
.water-acts { margin-top: 10px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.water-hint { font-size: 12px; line-height: 1.6; color: var(--ink3); }
.water-done { font-size: 13px; font-weight: 600; color: var(--seal); }

.water-foot {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px dashed var(--line);
  font-size: 12px;
  line-height: 1.78;
  color: var(--ink3);
}
/* 三个按钮的名字在脚注里当小标签用：不靠颜色，靠字重和缩进分主次 */
.water-foot-k {
  display: inline-block;
  min-width: 2.6em;
  margin-right: 6px;
  font-weight: 700;
  color: var(--ink2);
}
/* P4：后果清单。当前落在哪一档就用印章红标出来——
   玩家该一眼看到「我现在站在哪一条线上」，而不是自己去比对数字。 */
.water-foot-hd {
  margin: 12px 0 5px;
  padding-top: 9px;
  border-top: 1px dashed var(--line);
  font-weight: 700;
  color: var(--ink2);
}
.water-foot-li {
  margin: 3px 0;
  padding-left: 10px;
  border-left: 2px solid transparent;
  line-height: 1.7;
}
.water-foot-li.is-now {
  border-left-color: var(--seal);
  color: var(--ink);
}
html[data-theme="dark"] .water-foot-li.is-now { border-left-color: #c8695b; }

html[data-theme="dark"] .water-card {
  background-color: #262218;
  background-image: none;
  border-color: rgba(196, 170, 120, .22);
  border-left-color: rgba(196, 170, 120, .34);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .04);
}
html[data-theme="dark"] .water-card:not(.is-done) { border-left-color: var(--seal); }
html[data-theme="dark"] .water-num.is-said b { color: #e08677; }

@media (max-width: 560px) {
  .water-num b { font-size: 18px; }
  .water-nums { gap: 9px; }
}
/* ===== 谈画面板（P5b，2026-10-23）=====
   现场交锋页的三选一改成「把两个数摆在他面前」。
   一竖列：报上去的数（印章红）→ 差额线 → 台账的数。
   差额线不是装饰：它是这张卡的论点——两个数不相等，而中间那截没人在账上。
   不写解释文字。他要问的就一句，卡片也只说一句。 */
.water-talk {
  margin: 9px 0 4px;
  padding: 10px 14px 9px;
  border: 1px solid rgba(150, 128, 96, .42);
  border-left: 3px solid var(--seal);
  border-radius: 6px;
  background-color: #f8f2e3;
  background-image: url("ui/tex_meet_scroll.webp?v=20261027PERF1");
  background-size: 280px 280px;
  background-blend-mode: multiply;
  box-shadow: 0 1px 2px rgba(70, 50, 25, .07), inset 0 1px 0 rgba(255, 255, 255, .55);
}
.water-talk-hd { margin-bottom: 1px; }
.water-talk-hd b { font-size: 13.5px; letter-spacing: .5px; color: var(--ink2); }

/* 两个数上下摆：上「你签的字」，下「会计手里那本」 */
.water-pair { display: flex; flex-direction: column; gap: 0; }
.water-pair-row {
  display: flex;
  align-items: baseline;
  gap: 7px;
  padding: 2px 0;
}
.water-pair-k {
  min-width: 5.2em;
  font-size: 11.5px;
  letter-spacing: .8px;
  color: var(--ink3);
}
.water-pair-row b {
  font-size: 22px;
  font-weight: 700;
  letter-spacing: .5px;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.water-pair-row em { font-size: 12px; font-style: normal; color: var(--ink3); }
.water-pair-who {
  margin-left: auto;
  font-size: 11px;
  color: var(--ink3);
  letter-spacing: .3px;
  white-space: nowrap;
}
/* 报上去的那个用印章红——它是被签过、被报走、现在被翻出来的那一个 */
.water-pair-row.is-said b { color: var(--seal); }

/* 差额线：左右两条短横把一个「差 N 个点」夹在中间，像账本上划的一道杠 */
.water-gap-line {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 2px 0 2px 2px;
  color: var(--seal);
  font-size: 11.5px;
  letter-spacing: .5px;
}
.water-gap-line::before,
.water-gap-line::after {
  content: "";
  flex: 1 1 auto;
  height: 0;
  border-top: 1px dashed rgba(154, 72, 58, .45);
}
.water-gap-line span { white-space: nowrap; }

/* 那一句问话。楷体、稍大、独立成行——他问的就是这一句 */
.water-talk-q {
  margin: 6px 0 0;
  font-family: var(--font-ui);
  font-size: 13.5px; font-weight: var(--ui-small-weight);
  line-height: 1.7;
  color: var(--ink);
  letter-spacing: .3px;
}
.water-talk-acts {
  margin-top: 7px;
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}
.water-talk-acts .chip { margin: 0; }

.water-talk-done {
  margin-top: 10px;
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
}
.water-talk-mv { font-size: 12px; color: var(--ink3); }

html[data-theme="dark"] .water-talk {
  background-color: #262218;
  background-image: none;
  border-color: rgba(196, 170, 120, .22);
  border-left-color: var(--seal);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .04);
}
html[data-theme="dark"] .water-pair-row.is-said b { color: #e08677; }
html[data-theme="dark"] .water-gap-line { color: #c8695b; }
html[data-theme="dark"] .water-gap-line::before,
html[data-theme="dark"] .water-gap-line::after { border-top-color: rgba(200, 105, 91, .4); }

@media (max-width: 560px) {
  .water-pair-row b { font-size: 21px; }
  .water-pair-who { display: none; }
  .water-talk-q { font-size: 13.5px; }
}
/* 谈画卡在场时：插图让位（P5b）
   这一页原本没卡片，插画占 218px 也不挤；加了两个数 + 差额线 + 三个应对之后，
   总高超过 86vh，「动员会表态」被顶出纸框外——玩家会以为那一页没有结案按钮。
   让位的次序是：插画 > 清单 > 卡片。数字是这一页的主角，插画只是氛围。 */
.has-water-talk .scene-illus { margin-bottom: 10px; }
.has-water-talk .scene-illus img { max-height: 84px; }
/* 清单在这一页可以挤一点：三条都是短句，行距收紧也不会读错 */
/* .modal-body .polrow 带 !important 的 12px——清单三条就吃掉 108px。
   这一页要靠清单省高度，所以必须用 !important 压回去（同权重 + !important 取胜）。
   只在这一页生效（.has-water-talk 是本次 showInspection 才挂的类），不影响别处。 */
.has-water-talk .modal-body .polrow { padding: 4px 14px !important; }
@media (max-height: 900px) {
  .has-water-talk .scene-illus { display: none; }
}
/* 自由作答折叠框（P5b）
   三个应对 + 一个常驻输入框摆在一起，玩家会以为「必须选一个再说两句」。
   折起来之后，这一页的第一眼只剩三个按钮；想自己写的人点开 summary 就有位置。
   视觉上做成一条虚线边的窄条，不要做成按钮——它不是主路径。 */
.water-free-fold {
  margin: 7px 0 0;
  border: 1px dashed rgba(150, 128, 96, .40);
  border-radius: 5px;
  background: transparent;
}
.water-free-fold > summary {
  padding: 5px 10px;
  font-size: 12px;
  color: var(--ink3);
  cursor: pointer;
  list-style: none;
  letter-spacing: .3px;
}
.water-free-fold > summary::-webkit-details-marker { display: none; }
.water-free-fold > summary::after { content: " ▾"; font-size: 10px; }
.water-free-fold[open] > summary::after { content: " ▴"; }
.water-free-fold > summary:hover { color: var(--ink2); }
.water-free-fold[open] { padding-bottom: 8px; }
/* ★ details 收起时必须自己关掉子元素。
   UA 样式表是 `details:not([open]) > *:not(summary) { display: none }`，
   而作者样式里的 `.acts { display: flex }` 优先级更高，会把那条覆盖掉——
   结果折叠框收起时里面的按钮还露着半个（截图里第一次就是这样）。
   这不是浏览器 bug，是 details 的经典坑：只要子元素自己声明了 display，就得手动补一条。 */
.water-free-fold:not([open]) > *:not(summary) { display: none; }
.water-free-fold .acts { margin: 2px 10px 6px; }
.water-free-fold .lt-ta { margin: 0 10px; width: calc(100% - 20px); }
html[data-theme="dark"] .water-free-fold { border-color: rgba(196, 170, 120, .26); }

/* ══════════════════════════════════════════════════════════════════════════
   国企专属侧栏（案牍）· soe-side-rail.js
   ──────────────────────────────────────────────────────────────────────────
   问题：直接复用 .ap-* 通用样式时，第一段实测 374px ——
        立绘 148×196 撑起 216px，右侧「翻看履历/经营简报」两个按钮又纵向排列
        （.ap-btns.col）再加 79px；chips 两个换行又是 66px。
        五段合计 1777px，和原来那套党政栏（1977px）几乎没差，等于白做。
   做法：国企栏里立绘压到 120px 宽（比例不变），按钮改横排、chips 单行，
        五段压到 1100px 量级，一屏半内看完。
   ══════════════════════════════════════════════════════════════════════════ */
/* ★ 必须带 !important：8112 行有 `.ap-plate-hero { width:148px !important; flex:0 0 148px !important }`，
   否则这里写了也不生效（实测宽度仍是 148、立绘仍是 195px 高）。 */
.ap-panel .ap-plate-hero { width: 118px !important; flex: 0 0 118px !important; }
.ap-panel .ap-plate-hero img { aspect-ratio: 118 / 156; height: auto; }
/* 按钮横排：.ap-btns.col 是纵向，国企栏不需要那么大的点击区 */
.ap-panel .ap-btns.col { flex-direction: row; gap: 8px; margin-top: 8px; }
.ap-panel .ap-btns.col .ap-btn { min-height: 32px; font-size: 13.5px; }
/* chips：宁可变两行，也不能裁掉可点的键。
   ★ 2026-10-23 修正：原为 flex-wrap:nowrap + overflow:hidden（当初只想压国企栏高度），
     实测乡镇党委书记档「两办联络」有 6 个键（党政办/交办政务/拟讲话稿/说话/下派锻炼/档案），
     6 键合计 312px > 容器 276px，最后一个「档案」被切掉一半、右缘还溢出侧栏 8px。
     这 6 个都是 data-act 真按钮，裁掉等于少一个功能入口，不能用省略号换高度。
     改回可换行；国企栏 chips 只有 2 个（146px），换行规则不会让它多占行。 */
.ap-panel .ap-chips { flex-wrap: wrap; overflow: visible; }
.ap-panel .ap-chips .chip { white-space: nowrap; font-size: 12px; padding: 1px 6px; }
/* 秘书 6 键：3 列网格，两行各 3 个、列位对齐。
   ★ 自由换行排成「4+2」，第二行右侧空一大片，像漏排了键。
   3 列后每格 (276-12)/3 = 88px，文字居中，两行等宽。 */
.ap-panel .ap-chips--grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
.ap-panel .ap-chips--grid .chip {
  display: flex; align-items: center; justify-content: center;
  min-width: 0; padding: 4px 2px; text-align: center;
  overflow: hidden; text-overflow: ellipsis;
}
/* 段与段之间收紧：通用是 22px */
.ap-panel .ap-zone { margin-bottom: 14px; }
.ap-panel .ap-zone:last-of-type { margin-bottom: 6px; }
/* 段内纵排间距收紧 */
.ap-panel .ap-zb { gap: 6px; }

/* 国企侧栏 2×2 数值格（替代 .ap-ledger 竖排，省一半高度） */
.ap-panel .sr-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px 10px;
}
.ap-panel .sr-cell {
  display: flex; flex-direction: column; gap: 1px;
  background: rgba(31, 27, 21, .035);
  border-radius: 5px;
  padding: 4px 7px;
  min-width: 0;
}
.ap-panel .sr-cell span {
  font-size: 11.5px; color: var(--ink2); font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ap-panel .sr-cell b {
  font-family: var(--font-kai); font-size: 16px; font-weight: 600;
  color: var(--ink); font-variant-numeric: tabular-nums;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ap-panel .sr-cell b.ok { color: #2f6b3a; }
.ap-panel .sr-cell b.bad { color: #A6382C; }
.ap-panel .sr-cell b.gold { color: #B08D45; }

/* ===== 历任交接（P6，2026-10-23）=====
   面板最底下的一节：你在别处留下的账。
   不做成卡片、不配图标、不给按钮——它不是待办，是档案。
   行高比正文紧一档，因为它要显得密，像一张真的交接单附表。 */
.water-hands {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px dashed var(--line);
}
.water-hands-hd {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .4px;
  color: var(--ink2);
}
.water-hands-sub {
  margin: 3px 0 7px;
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--ink3);
}
.water-hands-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 2px 0;
  font-size: 12px;
  line-height: 1.6;
  color: var(--ink2);
  border-bottom: 1px dotted rgba(150, 128, 96, .22);
}
.water-hands-row:last-child { border-bottom: 0; }
.water-hands-y {
  min-width: 3.4em;
  color: var(--ink3);
  font-variant-numeric: tabular-nums;
}
.water-hands-p {
  font-weight: 600;
  color: var(--ink);
}
.water-hands-j {
  flex: 1 1 auto;
  font-size: 11.5px;
  color: var(--ink3);
}
/* 点数用印章红：这一栏是账，不是成绩 */
.water-hands-n {
  white-space: nowrap;
  color: var(--seal);
  font-variant-numeric: tabular-nums;
}

/* 接手的那一笔：独立一段，左侧一道竖线——像是从别人账本上撕下来的一页 */
.water-inh {
  margin-top: 12px;
  padding: 9px 12px;
  border-left: 3px solid var(--seal);
  background: rgba(154, 72, 58, .05);
  border-radius: 0 4px 4px 0;
  font-size: 12px;
  line-height: 1.75;
  color: var(--ink2);
}
.water-inh b {
  color: var(--seal);
  font-variant-numeric: tabular-nums;
}

html[data-theme="dark"] .water-hands-row { border-bottom-color: rgba(196, 170, 120, .16); }
html[data-theme="dark"] .water-hands-n { color: #e08677; }
html[data-theme="dark"] .water-inh {
  background: rgba(200, 105, 91, .1);
  border-left-color: #c8695b;
}
html[data-theme="dark"] .water-inh b { color: #e08677; }
.water-hands > summary {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
  cursor: pointer;
  list-style: none;
  outline: none;
}
.water-hands > summary::-webkit-details-marker { display: none; }
.water-hands > summary::-moz-list-bullet { display: none; }
.water-hands > summary::before {
  content: "▸";
  font-size: 10px;
  color: var(--ink3);
  transition: transform .15s;
}
.water-hands[open] > summary::before { content: "▾"; }
.water-hands-sum {
  font-size: 11.5px;
  color: var(--ink3);
  letter-spacing: .2px;
}
.water-hands[open] > summary { margin-bottom: 6px; }

/* ══════════════════════════════════════════════════════════════════════════
   国企首屏四卡 · 带配图（ui.js secMini）
   ──────────────────────────────────────────────────────────────────────────
   布局：左图（96px 竖条，铺满卡身）+ 右内容（三格指标 + 入口按钮）。
   为什么竖条而不是顶图：顶图每卡要多 52~92px，四卡合计区块 +207px，
   与「面板高度从 1110 压到 504」的方向相反。左图右内容不额外占高，
   图占的是原本空着的左侧位，卡高只涨 4px。
   ══════════════════════════════════════════════════════════════════════════ */
.secm {
  border: 1px solid rgba(160,120,90,.25);
  border-radius: 8px;
  overflow: hidden;
  background: rgba(255,252,245,.5);
  display: flex; flex-direction: column;
  min-width: 0;
}
.secm-h {
  font-weight: 700; color: var(--seal); font-size: 13px;
  font-family: var(--fzt);
  padding: 5px 8px;
  background: rgba(163,38,38,.06);
  display: flex; justify-content: space-between; align-items: center;
  gap: 6px; min-width: 0;
}
.secm-h > span:first-child { flex: 0 0 auto; white-space: nowrap; }
.secm-tip {
  font-size: 10.5px; font-weight: 400;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  min-width: 0; flex: 0 1 auto;
}
/* 上半部：左方图 + 右指标 */
.secm-top {
  display: flex; align-items: stretch;
  flex: 1; min-height: 0;
}
/* 图位：1:1 方图，边长跟随卡片上半部高度（约 96~110px），零裁切 */
.secm-illus {
  /* ★ 固定正方形 88×88：早先写 width:104px 配 align-items:stretch，
     实测被拉成 104×75（1.39:1），1:1 的方图上下各被裁掉约 14%，
     车间顶部和地面都没了。定死宽高比才能零裁切。 */
  flex: 0 0 88px;
  width: 88px; height: 88px;
  overflow: hidden;
  background: #e6dcc4;
  border-right: 1px solid rgba(160,120,90,.18);
  border-bottom: 1px solid rgba(160,120,90,.18);
}
.secm-illus img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: center;
  display: block;
}
/* 右侧三格指标：竖向均分，不挤图 */
.secm-metrics {
  flex: 1 1 auto; min-width: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-content: center;
  gap: 5px;
  padding: 7px 8px;
}
/* 下半部：通栏按钮 */
.secm-foot { padding: 0 8px 8px; }
.secm-btn {
  width: 100%; font-size: 12.5px; font-weight: 700; padding: 6px 0;
  display: block;
}
.secm-lock {
  text-align: center; background: #9a8c76; color: #fff;
  font-size: 12.5px; font-weight: 700; padding: 6px 0; border-radius: 6px;
}
@media (max-width: 1100px) {
  .secm-illus { width: 88px; }
}
@media (max-width: 820px) {
  .secm-illus { width: 76px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   国企状态带 v2（ui.js soeStatusBar）
   ──────────────────────────────────────────────────────────────────────────
   为什么重做：旧版单行三段（身份 / 4指标 / 2折叠）在 550px 主区里，
   指标 281 + 折叠按钮 190 + 间距 32 = 503px，只剩 28px 给企业名，
   企业名被压成 8px 宽、显示成「临…」。
   新版：身份行独占一整行（企业名不再被挤），数据按「经营/责任/改革」三行分栏，
   每行 8/6/4 格等宽 —— 行内是 grid，格宽固定，永远不挤。
   ══════════════════════════════════════════════════════════════════════════ */
.ssb2 { display: flex; flex-direction: column; gap: 5px; }
/* —— 行1 身份 —— */
.ssb2-id { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.ssb2-id b {
  /* 企业名**永不压缩**：之前 flex:0 1 auto，和副标题（岗位·年月）抢空间，
     实测只剩 106px 而需要 122px，显示成「临江市融资担…」。
     企业名是这一行最该看全的信息，副标题可以省略（岗位在下面红横幅里还有一份）。 */
  font-size: 13.5px; color: var(--seal); font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  flex: 0 0 auto; max-width: 62%;
}
.ssb2-sub {
  font-size: 11.5px; color: #8a7a5f; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto;
}
.ssb2-tags {
  display: flex; align-items: center; gap: 5px; flex-wrap: wrap;
  margin-left: auto; flex: 0 0 auto;
}
.ssb2-tag {
  font-size: 11px; color: #6a5a48; white-space: nowrap;
  padding: 1px 7px; border-radius: 10px;
  background: rgba(140,100,40,.07);
  border: 1px solid rgba(140,100,40,.16);
}
.ssb2-tag b { color: var(--ink); font-weight: 800; }
.ssb2-tag-k { border-color: rgba(164,52,43,.32); background: rgba(164,52,43,.07); color: var(--seal); }
.ssb2-tag-k b { color: var(--seal); }
/* 档案入口（折叠） */
.ssb2-more { position: relative; }
.ssb2-more summary {
  font-size: 11px; color: #6a5a48; cursor: pointer; list-style: none;
  white-space: nowrap; padding: 1px 7px; border-radius: 10px;
  background: rgba(140,100,40,.07); border: 1px solid rgba(140,100,40,.16);
}
.ssb2-more summary::-webkit-details-marker { display: none; }
.ssb2-more summary::before { content: '▸ '; color: #b08b5a; }
.ssb2-more[open] summary::before { content: '▾ '; }
.ssb2-pop {
  position: absolute; right: 0; top: calc(100% + 5px); z-index: 40;
  background: #fbf6e8; border: 1px solid rgba(164,52,43,.35);
  border-radius: 8px; padding: 8px; min-width: 220px;
  box-shadow: 0 6px 18px rgba(120,92,44,.20);
}
/* —— 行2/3/4 数据带 —— */
/* ══════════════════════════════════════════════════════════════════════════
   指标表：三行共用一套列轨道
   ──────────────────────────────────────────────────────────────────────────
   原来每行各自是一个 grid，列数按本行项目数算：
     经营 9 项 → 每格 54px ｜ 责任 7 项 → 71px ｜ 改革 4 项 → 127px
   三行格宽差 2.4 倍，**列完全对不齐** —— 眼睛找不到一条垂直参照线，
   数字再准也读不快。这就是「表格不够清晰」的真正原因，不是字号或留白。
   改法：把 .ssb2-rows 做成**一个** grid，9 条列轨道全表共享；
   行容器与 .ssb2-g 都设 display:contents，让单元格直接落到外层的轨道上。
   于是任何一格的左右边缘都落在同一条轨道线上 —— 像真表格的 colspan。
   行内项目数不同（9/7/4）不再造成错位，只在右侧留白，读起来就是「这行项少」。
   ══════════════════════════════════════════════════════════════════════════ */
.ssb2-rows {
  display: grid;
  grid-template-columns: 26px repeat(9, minmax(0, 1fr));
  gap: 4px;
  align-items: stretch;
}
.ssb2-row { display: contents; }
.ssb2-g { display: contents; }
.ssb2-lb {
  /* 加一层极淡底色：让「经营/责任/改革」读起来是行头，而不是普通小字。
     竖线加粗到 3px 并加深，作为全表的左基准线。 */
  display: flex; align-items: center; justify-content: center;
  font-size: 10.5px; font-weight: 700; color: #6a5a48;
  background: rgba(164,52,43,.05);
  border-left: 3px solid rgba(164,52,43,.42);
  border-radius: 3px;
  padding: 0 2px;
  letter-spacing: .5px;
  grid-column: 1;
}
/* ★ 2026-10-23：取消「改革行每格跨 2 条轨道」。
   之前让 4 项各占 112px，理由是"填满宽度"，但实测后果是：
     经营行格宽 54px / 责任行 54px / **改革行 112px**
   全表出现两种格宽，纵向扫读时改革行明显"胖"，反而破坏一致性。
   现在所有格统一 54px，行与行的差别只体现在**项数**（9/7/4），
   改革行右侧自然留白——这才是表格该有的样子：格等宽，项数不同。 */
.ssb2-c {
  /* 原来只有 rgba(0,0,0,.032) 的纯底色，实测格边界几乎看不见，
     9 个格子挤在一起读起来像一串数字而不是表格。
     改成「淡底 + 一圈极细边框」：边界可辨，但仍然轻，不抢数字。 */
  background: rgba(255,252,245,.55);
  border: 1px solid rgba(140,100,40,.16);
  border-radius: 4px;
  padding: 3px 4px; text-align: center; min-width: 0; overflow: hidden;
}
.ssb2-c i {
  display: block; font-style: normal; font-size: 9.5px; color: #8a7a5f;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.4;
}
.ssb2-c b {
  display: block; font-size: 13px; font-weight: 800; color: #3a2e22;
  font-variant-numeric: tabular-nums; line-height: 1.35;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ssb2-c b em { font-style: normal; font-size: 9.5px; font-weight: 600; opacity: .62; margin-left: 1px; }
.ssb2-c b.ok { color: #2f6b3a; }
.ssb2-c b.bad, .ssb2-c b.hot { color: #a4342b; }
.ssb2-hot {
  display: flex; align-items: center; gap: 8px;
  font-size: 11.5px; color: var(--seal);
  border-top: 1px dashed rgba(164,52,43,.28); padding-top: 4px;
}
.ssb2-hot span { color: #8a7a5f; }
@media (max-width: 1100px) {
  .ssb2-g { grid-template-columns: repeat(4, minmax(0,1fr)) !important; }
  .ssb2-row:nth-child(3) .ssb2-g { grid-template-columns: repeat(3, minmax(0,1fr)) !important; }
}

/* 身份行：企业名（左）+ 标签组（右）同一行，不换行 */
.ssb2-head {
  display: flex; align-items: center; gap: 8px; min-width: 0;
}
.ssb2-head .ssb2-id { flex: 1 1 auto; min-width: 0; }
.ssb2-head .ssb2-tags { flex: 0 0 auto; margin-left: auto; flex-wrap: nowrap; }

/* ══════════════════════════════════════════════════════════════════════════
   今日要办 · 重做（ui.js todoHtml）
   ──────────────────────────────────────────────────────────────────────────
   前两版实测问题：
     · 第二行两颗按钮是**竖排**的（y=310 / 343）—— .acts 带 flex-wrap,
       右栏一窄就折行，整行被撑到 73px；
     · 第一行 1 颗按钮（40px）、第二行 2 颗（73px），行高差 33px、右缘参差；
     · 描述被按钮挤到 222px，末尾成「…」。
   新版三栏：图 46px + 文字块（描述最多 2 行）+ 按钮列（竖排、等宽、贴右）。
   按钮刻意竖排：一行一个主操作，主次靠实心/描边区分，不再挤成一串。
   ══════════════════════════════════════════════════════════════════════════ */
.todo-box {
  border: 1.5px solid rgba(163,38,38,.45);
  border-radius: 10px;
  overflow: hidden;
  background: rgba(255,252,245,.7);
}
.todo-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  background: linear-gradient(135deg,#a32626,#7e1a1a);
  color: #fff; font-family: var(--fzt); font-weight: 700; font-size: 14px;
  padding: 7px 11px;
}
.todo-head-tip { font-size: 10.5px; font-weight: 400; opacity: .88; white-space: nowrap; }
.todo-empty { padding: 9px 11px; }

/* 单条：图 | 文字 | 按钮列 */
.todo-row {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 9px;
  padding: 7px 10px;
  border-top: 1px solid rgba(160,120,90,.22);
}
.todo-row:first-of-type { border-top: 0; }
.todo-illo {
  /* ★ 2026-10-23 方案A：配图放大到可读。
     为什么是 96×54 而不是 88×88 方形：
       待办配的 8 张原图里 7 张是 1.78（16:9 类），只有 1 张是 3:1。
       方形位配 1.78 的图，cover 要裁掉左右各 ~44%，只剩中间 56% 宽度；
       96×54 本身就是 1.78，**零裁切**，整幅画面都在。
     面积从 46×46=2116 涨到 96×54=5184（2.45 倍），
     而行高不用动：图 54 + 上下 padding 14 = 68 < 行最小高 74。 */
  width: 96px; height: 54px; flex: none;
  border-radius: 6px; overflow: hidden;
  background: #e6dcc4;
  border: 1px solid rgba(120,95,55,.28);
  /* 内描边：让缩略图读起来像一张「画」，不是一块灰 */
  box-shadow: inset 0 0 0 1px rgba(255,252,245,.5);
}
.todo-illo img {
  width: 100%; height: 100%; object-fit: cover; object-position: center;
  display: block;
}
.todo-main { min-width: 0; }
.todo-title {
  font-weight: 700; color: #4a2f1e; font-size: 13px;
  display: flex; align-items: baseline; gap: 5px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.todo-ico { flex: none; font-size: 13px; }
.todo-desc {
  margin-top: 2px;
  font-size: 11px; color: #7d7264; line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
/* 按钮列：竖排、等宽、贴右。
   ★ min-height 由实测定：一行 1 颗按钮时按钮列只有 27px（占行高 36%），
   另一行 2 颗是 58px（占 78%）——两行**高度都是 74px 完全相等**，
   但按钮列的填充率差一倍，看起来就像右缘一轻一重、"两行不等高"。
   把按钮列统一撑到 58px 并垂直居中，两行的视觉重量就一致了。 */
.todo-acts {
  display: flex; flex-direction: column; gap: 4px;
  align-items: stretch; justify-content: center; flex: none;
  min-width: 96px; min-height: 58px;
}
.todo-btn {
  font-family: inherit; font-size: 12px; font-weight: 700;
  padding: 4px 10px; border-radius: 5px; cursor: pointer;
  white-space: nowrap;
  border: 1px solid rgba(163,38,38,.42);
  background: transparent; color: #a32626;
  transition: .15s;
}
.todo-btn.primary {
  background: linear-gradient(135deg,#b02a2a,#8a1c1c);
  border-color: #8a1c1c; color: #fff;
  text-shadow: 0 1px 1px rgba(0,0,0,.22);
}
.todo-btn:hover { filter: brightness(1.08); }
.todo-btn:active { transform: translateY(1px); }

@media (max-width: 1100px) {
  .todo-row { grid-template-columns: auto minmax(0, 1fr); }
  .todo-acts { grid-column: 1 / -1; flex-direction: row; justify-content: flex-end; }
  .todo-illo { width: 80px; height: 45px; }
}

/* ── 块间节奏：两块之间留白必须明显大于块内行距 ────────────────────────
   原来待办块与「经营与治理」红条之间 12px，而卡内行距也接近 12px，
   两块黏在一起。这里把块间距抬到 18px，并把两块的标题条做出层级差：
   外框「经营与治理」是主区块，标题条稍高；待办是次级块，标题条稍矮。 */
.chief-gov .ap-zb > .todo-box { margin-top: 10px; }
.chief-gov .ap-zb > .soe-bigbox { margin-top: 18px; }
.chief-gov .ap-zb > .soe-bigbox + .todo-box { margin-top: 18px; }

/* 待办两行等高：一行 1 颗按钮、一行 2 颗，按钮竖排时行高自然不同
   （实测 61 vs 73）。min-height 设为 74 而不是 72：
   72 时第二行内容 73px 仍溢出 1px，两行差 1px；74 能同时容纳两者。 */
.todo-row { min-height: 74px; }

/* （2026-10-23 已删除 .soe-pagetop 系列样式：整条「企业治理台」页头已移除，
   相关规则成为死代码，故清掉。返回入口改由状态带内的 .ssb2-back 承担。） */
/* 状态带内的「完整界面」入口（替代原来那条独立红横幅）
   ★ 不能做成胶囊：第一版给它 1px 描边 + 10px 圆角，而旁边的状态标签
     也是 1px 描边 + 10px 圆角 + 同样 11px 字号，只差颜色深浅 ——
     实测并排时它就是「第 4 个标签」，玩家不会认为它可以点。
   改成「竖线分隔 + 文字链接」：无圆角、无边框盒、朱砂色 + 箭头，
   与左侧标签之间用一条竖分隔线断开。 */
.ssb2-back {
  margin-left: 3px;
  padding: 0 0 0 9px;
  font-family: inherit; font-size: 11px; font-weight: 700;
  color: var(--seal); background: transparent;
  border: 0;
  border-left: 1px solid rgba(140,100,40,.34);
  border-radius: 0;
  cursor: pointer; white-space: nowrap;
  transition: .15s;
  /* ★ 不能加浅朱砂底：标签的底色就是 rgba(164,52,43,.07)，
     我加同款淡底后实测 distinct=false，反而更像「第 4 个标签」。
     改用链接语义：无底、无圆角、朱砂字 + 虚线下划线。
     下划线是「可点」最通用的信号，且与胶囊标签在形状上完全不冲突。 */
  padding: 0 0 0 9px;
  text-decoration: underline;
  text-decoration-style: dotted;
  text-underline-offset: 3px;
  text-decoration-color: rgba(164,52,43,.55);
}
.ssb2-back:hover {
  text-decoration-style: solid;
  text-decoration-color: var(--seal);
  color: #8a1c1c;
}

/* ══════════════════════════════════════════════════════════════════════════
   右栏避让右下角常驻工具条（2026-10-23）
   ──────────────────────────────────────────────────────────────────────────
   实测：sd-link.js 建的 #sdLinkDock（百科/写给作者/复制链接）是
        position:fixed; right:14px; z-index:99998 —— 左边缘固定在 x=1186。
        而 .aside-ap 这一档 padding 为 0，.ap-panel 直接顶到 aside 右边缘 1216，
        两者相交 30px：被压住的是「官身」卡右上、经营盘右缘、
        以及个别数值格的尾部。
   .aside-head（正国级）已在 head-rail-frame.css 里用 32px 内边距避让；
   这里给 .aside-ap 补同样的避让，让两档行为一致。
   360 - 32 = 328px 仍远大于该档 min-width 280px，不会触发挤压。
   ══════════════════════════════════════════════════════════════════════════ */
.layout > aside.aside-ap {
  padding-right: 32px !important;
}
@media (max-width: 1100px) {
  /* 窄屏时侧栏落到整行，下方不再有工具条压迫，恢复满宽 */
  .layout > aside.aside-ap { padding-right: 0 !important; }
}

/* ── 无特殊类的普通职级侧栏（副区长/县长/处长…）同样避让右下角工具条 ─────
   实测副区长档：aside 左 856 / 宽 360 / padding 0，side-sub 右缘正好 1216，
   与 dock 左缘 1186 相交 30px，命中的是右列卡片的右边缘与数值格尾部（5 个元素）。
   扣 32px 后两列各 161px（176 → 161），仍大于内部最宽内容（数值格 min 44px×2）。
   ══════════════════════════════════════════════════════════════════════ */
.layout > aside:not(.aside-head):not(.aside-ap) {
  padding-right: 32px !important;
}
@media (max-width: 1100px) {
  .layout > aside:not(.aside-head):not(.aside-ap) { padding-right: 0 !important; }
}

/* ==========================================================================
 * 十六、住处面板（`.modal--home` + `.hmv` 作用域）—— 2026-10-24 全面返工
 *
 * 昊的原话：「住处整改 字体不好看，字体颜色区分不明显，按钮太丑 插图还有异物
 * 不符合游戏风格」——四个问题逐条对着改，改之前先量过基线（tools/_home_shot.js）：
 *
 *   ① 字体不好看
 *      病根不在住处面板，在 8642 行那条全局规则：
 *        .modal-body p, .modal-body li, .modal-body .muted, .modal-body .small
 *          { font-weight: 700 !important; }
 *      它把**所有**弹窗的正文都压成 700 字重。15px 宋体在 700 下笔画糊在一起，
 *      横竖不分，读起来又黑又挤——这是"字体不好看"的真正来源。
 *      ⇒ 不能改那条（几百个面板都在用），只在 `.hmv` 里用同等特异度的选择器复位。
 *      正文 500、说明 400、标题 700、数字 700：靠**字重梯度**分层，不靠堆粗。
 *
 *   ② 字体颜色区分不明显
 *      基线实测：`.hm-metrics em`（标签）与 `i`（说明）**完全同色** rgb(91,85,74)，
 *      只差 1px 字号；而 `.modal-body p` 的 color:var(--ink)!important 把
 *      `.muted` `.small` 全染成主墨色 ⇒ 三个层级塌成一层。
 *      ⇒ 重新分成四档：标签(ink3 淡) / 数值(seal 朱红) / 说明(ink2 中) / 正文(ink 深)。
 *
 *   ③ 按钮太丑
 *      基线实测：border-radius 14px（药丸形）、border rgba(42,33,26,.35)（比 panel
 *      的 --line 重得多）、高 36px。一排药丸配一圈黑框，跟方正奏折气质完全相反。
 *      ⇒ 圆角收到 3px（奏折是方的）、边框换成 --line 淡线、选中态用「左朱红条」，
 *      这是 `.panel` 一直在用的语言（1px 细线 + 3px seal 左条）。
 *
 *   ④ 插图异物 → 已改在 src/home.js（装饰层不再画不透明实心面 + decor=0 不画装饰
 *      + viewBox 按房型真实比例走）。CSS 这边只把边框接回 token。
 *
 * ★ 为什么另起 `.hmv` 而不复用 `.hm-*`：
 *   `.hm-fold` 被 secstart.js / ui.js / village 等 10+ 个模块共用（国际/经贸/抽屉都靠它），
 *   改 `.hm-fold` 全局 = 顺手改掉十几个面板。住处面板的一切样式**必须**落在
 *   `.modal--home .hmv` 之下，才有局部性。
 * ======================================================================== */

/* ---------- ① 字重梯度：复位 8642 行那条 !important ---------- */
/* 注意：必须用 `.modal-body .hmv ...` 这种三段式，特异性才压得过 8642 行的两段式
   （`.modal-body p`）。只写 `.hmv p` 会输，被 700 覆盖回去——已实测。 */
.modal-body .hmv p,
.modal-body .hmv li,
.modal-body .hmv .muted,
.modal-body .hmv .small,
.modal-body .hmv .muted.small {
  font-weight: 400 !important;
  color: var(--ink2) !important;
  font-size: 14px !important;
  line-height: 1.85 !important;
}
/* 正文（叙述段）：比说明重一档，但仍不是 700 */
.modal-body .hmv p.hm-desc {
  font-weight: 500 !important;
  color: var(--ink) !important;
  font-size: 14.5px !important;
}
/* 折叠体里的说明文字：淡一档，让主次分明 */
.modal-body .hmv .hm-fold-body > p.muted,
.modal-body .hmv .hm-fold-body > p.muted.small { color: var(--ink3) !important; }
/* 强调（<b>）：700，但只给真正的信息点 */
.modal-body .hmv b { font-weight: 700 !important; color: var(--ink) !important; }
/* 面板内标题 */
.modal-body .hmv h4.sec-h {
  font-size: 15.5px !important; font-weight: 700 !important;
  color: var(--seal) !important; letter-spacing: .5px;
  border-left: 3px solid var(--seal); padding-left: 8px;
  margin: 16px 0 10px !important;
}
.modal-body .hmv .sec-h .muted { font-size: 12px !important; font-weight: 400 !important; color: var(--ink3) !important; }

/* ---------- ② 四档颜色：数值朱红 / 标签淡墨 / 说明中墨 ---------- */
.modal-body .hmv .hm-metrics { gap: 7px; margin: 10px 0 12px; }
.modal-body .hmv .hm-metrics > span {
  background: var(--card);
  border: 1px solid var(--line);
  border-left: 2px solid var(--gold);
  border-radius: 3px;              /* ★ 方正，不用 8px 圆角 */
  padding: 7px 9px 8px;
  gap: 1px;
}
.modal-body .hmv .hm-metrics em {
  font-style: normal; font-size: 12px !important; font-weight: 400 !important;
  /* ★ 这里不能用 var(--ink3)（#8a8272）：在 --card #fbf7ef 上实测对比度只有 3.56，
     低于 WCAG AA 的 4.5，12px 这么大的字读着发虚。换成 #726a5c → 5.00，达标，
     且仍比 ink2(#5b554a, 6.91) 淡一档，"标签 / 数值 / 说明 / 正文"四层的梯度没丢。
     （读数来自 tools/_home_shot.js 的 color_* 段） */
  color: #726a5c !important; letter-spacing: .8px;
}
.modal-body .hmv .hm-metrics b {
  font-size: 20px !important; font-weight: 700 !important;
  color: var(--seal) !important; line-height: 1.15;
  font-variant-numeric: tabular-nums;
}
.modal-body .hmv .hm-metrics i {
  font-style: normal; font-size: 11.5px !important; font-weight: 400 !important;
  color: var(--ink2) !important;
}
/* 数值按语义分色（只有「廉洁痕迹」这类有明确好坏的才分色，其余保持朱红） */
.modal-body .hmv .hm-metrics b.hmv-ok   { color: #4f7a3e !important; }
.modal-body .hmv .hm-metrics b.hmv-warn { color: #b3791f !important; }
.modal-body .hmv .hm-metrics b.hmv-bad  { color: #a33e2b !important; }

/* 描述行尾的「干净 / 有痕迹 / 风险高」小签 —— 细线 + 淡渲染，不用实底 */
.hmv .hm-tag {
  /* ★ 原来是 margin-left:8px 紧贴正文句号，视觉上像黏在字上。
     改成 0.5em（随字号缩放）并把行高调齐，读起来才是一枚独立的签。 */
  display: inline-block; margin-left: .5em; padding: 0 7px;
  font-size: 11.5px; line-height: 19px; border-radius: 2px;
  border: 1px solid currentColor; vertical-align: 1px;
  white-space: nowrap;
}
.hmv .hm-tag.is-ok   { color: #4f7a3e; background: rgba(79,122,62,.07); }
.hmv .hm-tag.is-warn { color: #b3791f; background: rgba(179,121,31,.08); }
.hmv .hm-tag.is-bad  { color: #a33e2b; background: rgba(163,62,43,.08); }

/* 儿童行 / 状态词 */
.hmv .hmv-ok   { color: #4f7a3e; }
.hmv .hmv-mid  { color: var(--ink2); }
.hmv .hmv-bad  { color: #a33e2b; }
.hmv .hmv-kid {
  display: flex; justify-content: space-between; align-items: center;
  gap: 10px; padding: 8px 0;
  border-bottom: 1px dotted var(--line);
}
.hmv .hmv-kid:last-of-type { border-bottom: none; }

/* ---------- ③ 按钮：方角 + 淡线 + 左朱红条（沿用 .panel 的语言） ---------- */
.modal-body .hmv .chip.tiny,
.modal-body .hmv .acts .chip {
  border-radius: 3px !important;          /* ★ 14px 药丸 → 3px 方角 */
  border: 1px solid var(--line) !important;
  border-left: 2px solid transparent !important;
  background: var(--card) !important;
  color: var(--ink2) !important;
  font-size: 13px !important;
  font-weight: 500 !important;            /* 按钮不该是 700 重黑 */
  padding: 5px 11px !important;
  min-height: 30px !important;            /* 36 → 30：一排按钮不再占掉半屏 */
  line-height: 1.5 !important;
  box-shadow: none !important;
  transition: background .14s ease, border-color .14s ease, color .14s ease !important;
}
.modal-body .hmv .chip.tiny:hover:not([disabled]),
.modal-body .hmv .acts .chip:hover:not([disabled]) {
  border-color: var(--seal) !important;
  border-left-color: var(--seal) !important;
  color: var(--seal) !important;
  background: rgba(164,52,43,.045) !important;
  transform: none !important;             /* 去掉上浮，奏折不该弹 */
}
/* 选中态：白纸底 + 朱红左条 + 朱红字。不用满底朱红（那是 `.primary` 的"重"）。 */
.modal-body .hmv .chip.tiny.primary,
.modal-body .hmv .acts .chip.primary {
  background: rgba(164,52,43,.06) !important;
  background-image: none !important;
  border-color: var(--line) !important;
  border-left: 2px solid var(--seal) !important;
  color: var(--seal) !important;
  font-weight: 700 !important;
  opacity: 1 !important;                  /* 选中项原本 disabled+opacity .5，像坏掉 */
  box-shadow: none !important;
  cursor: default !important;
}
.modal-body .hmv .chip.tiny[disabled]:not(.primary) {
  opacity: .55 !important;
  border-style: dashed !important;
  color: var(--ink3) !important;
}

/* ---------- ④ 折叠条：接回 token，不再硬编码 #fbf7ee/#5a3e2b ---------- */
.modal-body .hmv .hm-fold {
  margin: 7px 0;
  border: 1px solid var(--line);
  border-left: 2px solid rgba(164,52,43,.30);
  border-radius: 3px;
  background: var(--card);
  overflow: hidden;
}
.modal-body .hmv .hm-fold summary {
  padding: 9px 12px;
  cursor: pointer; list-style: none; user-select: none;
  font-size: 13.5px !important; font-weight: 700 !important;
  color: var(--ink) !important;
  background: rgba(154,123,63,.045);
}
.modal-body .hmv .hm-fold summary::before { content: '▸ '; color: var(--seal); font-weight: 400; }
.modal-body .hmv .hm-fold[open] summary::before { content: '▾ '; }
.modal-body .hmv .hm-fold[open] summary { border-bottom: 1px solid var(--line); }
.modal-body .hmv .hm-fold summary .muted.small {
  font-size: 11.5px !important; font-weight: 400 !important; color: var(--ink3) !important;
  margin-left: 4px;
}
.modal-body .hmv .hm-fold-body {
  padding: 10px 12px;
  font-size: 13.5px !important; line-height: 1.85 !important;
  border-top: none;
}

/* ---------- 插图框：细线 + 无圆角，跟奏折一致 ---------- */
.hmv .hm-scene {
  border: 1px solid var(--line);
  border-radius: 3px;
  overflow: hidden;
  background: var(--paper2);
  box-shadow: inset 0 0 0 1px rgba(255,253,247,.5);
}

/* ---------- 暗色：整段必须显式改，否则硬编码浅色底会在深底上亮成白条 ---------- */
[data-theme="dark"] .modal-body .hmv .hm-fold {
  background: #232019; border-color: rgba(255,255,255,.11);
  border-left-color: rgba(208,96,82,.45);
}
[data-theme="dark"] .modal-body .hmv .hm-fold summary { background: rgba(255,255,255,.04); color: #e8e0d0 !important; }
[data-theme="dark"] .modal-body .hmv .hm-fold[open] summary { border-bottom-color: rgba(255,255,255,.09); }
[data-theme="dark"] .modal-body .hmv .hm-fold-body { color: #ddd5c3; }
[data-theme="dark"] .modal-body .hmv .hm-metrics > span {
  background: #262319; border-color: rgba(255,255,255,.11);
  border-left-color: rgba(200,168,104,.5);
}
[data-theme="dark"] .modal-body .hmv .hm-metrics em,
[data-theme="dark"] .modal-body .hmv .hm-metrics i { color: #a89f8c !important; }
[data-theme="dark"] .modal-body .hmv .hm-metrics b { color: #d06052 !important; }
[data-theme="dark"] .modal-body .hmv .hm-metrics b.hmv-ok   { color: #8fbf78 !important; }
[data-theme="dark"] .modal-body .hmv .hm-metrics b.hmv-warn { color: #e0a94f !important; }
[data-theme="dark"] .modal-body .hmv .hm-metrics b.hmv-bad  { color: #e07060 !important; }
[data-theme="dark"] .modal-body .hmv .chip.tiny,
[data-theme="dark"] .modal-body .hmv .acts .chip {
  background: rgba(255,255,255,.055) !important;
  border-color: rgba(255,255,255,.16) !important;
  color: #ddd5c3 !important;
}
[data-theme="dark"] .modal-body .hmv .chip.tiny:hover:not([disabled]) {
  border-color: #d06052 !important; border-left-color: #d06052 !important; color: #f0a898 !important;
  background: rgba(208,96,82,.12) !important;
}
[data-theme="dark"] .modal-body .hmv .chip.tiny.primary {
  background: rgba(208,96,82,.16) !important;
  border-color: rgba(255,255,255,.16) !important;
  border-left-color: #d06052 !important;
  color: #f0a898 !important;
}
[data-theme="dark"] .modal-body .hmv .hm-fold summary::before { color: #d06052; }
[data-theme="dark"] .modal-body .hmv p,
[data-theme="dark"] .modal-body .hmv li,
[data-theme="dark"] .modal-body .hmv .muted,
[data-theme="dark"] .modal-body .hmv .small { color: #b8ae99 !important; }
[data-theme="dark"] .modal-body .hmv p.hm-desc,
[data-theme="dark"] .modal-body .hmv b { color: #e8e0d0 !important; }
[data-theme="dark"] .modal-body .hmv h4.sec-h { color: #d06052 !important; }
[data-theme="dark"] .hmv .hm-scene { background: #201e18; border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .hmv .hmv-ok   { color: #8fbf78; }
[data-theme="dark"] .hmv .hmv-bad  { color: #e07060; }

/* ---------- 窄屏：metrics 自动两列 ---------- */
@media (max-width: 560px) {
  .modal-body .hmv .hm-metrics > span { flex: 1 1 calc(50% - 7px); min-width: 0; }
  .modal-body .hmv .hmv-kid { flex-wrap: wrap; }
}

/* ---------- emoji 字体回退（2026-10-24） ----------
   `.sec-h` 的「🛠 拾掇屋子」在宋体族下渲染成一团浑浊的怪符号：
   🛠 是 U+1F6E0，**没有** emoji 变体选择符，而 --font-serif 的整条回退链
   （Noto Serif SC → 思源宋体 → … → serif）里没有一个覆盖它的彩色字形，
   于是落到系统的黑白符号字体，笔画糊成一团。
   解法：单独给它一条带 emoji 字体的 font-family，优先级排在宋体之前。
   ★ 只作用于这个 span，不动 `.hmv` 整体 —— 正文绝不能沾 emoji 字体，
     否则数字和标点会变成彩色/宽体，跟宋体格不入。 */
.hmv .hmv-emo,
.modal--home .hmv-emo {
  font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji",
               "Segoe UI Symbol", sans-serif;
  font-weight: 400;
  font-size: 1.05em;
  line-height: 1;
  vertical-align: -1px;
}

/* ============================================================================
   十七、身边人遴选（秘书 / 司机）—— 2026-10-24
   ----------------------------------------------------------------------------
   昊的需求原话：「可以换秘书司机…主要是档案齐全 精美立绘让玩家选，女多男少」

   这一段的骨架就三件事：**立绘要大、档案要全、三条通路要一眼分清**。
   所以布局是「一屏一个人」，横向滚动翻人——不做 8 人小格子，
   因为档案有 14 栏，挤成网格就只能看到名字和两个数字，等于让玩家瞎选。

   ★ 全部规则挂在 `.modal--staff` 作用域下（同住处面板 `.hmv` 的做法）：
     这套类名（.sp-*）是本模块独有的，不碰任何共用类，
     把 `.modal-body` 的全局 !important（styles.css:8642）也一并复位。
   ========================================================================== */

/* —— 弹窗容器：宽一点，让立绘有地方站 —— */
.modal-box.modal--staff { max-width: 1080px; }
.modal-box.modal--staff .modal-body { padding: 14px 16px 18px; }

/* 全局弹窗正文的 700 字重复位（三段式特异性，写两段式压不过） */
.modal-body .modal--staff p,
.modal-box.modal--staff .modal-body p,
.modal-box.modal--staff .modal-body .muted,
.modal-box.modal--staff .modal-body .small {
  font-weight: 400 !important;
  color: var(--ink2) !important;
  font-size: 13.5px !important;
  line-height: 1.8 !important;
}

/* —— 顶部：现任是谁 + 换人规则 —— */
.modal--staff .sp-head { margin-bottom: 10px; }
.modal--staff .sp-lead {
  font-size: 14px !important; font-weight: 500 !important;
  color: var(--ink) !important; margin: 0 0 8px;
}
.modal--staff .sp-cur {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  padding: 8px 11px; background: var(--card);
  border: 1px solid var(--line); border-left: 3px solid var(--seal); border-radius: 3px;
  font-size: 13.5px; color: var(--ink);
}
.modal--staff .sp-cur b { font-weight: 700; }
.modal--staff .sp-cur i { font-style: normal; color: var(--ink2); font-size: 12.5px; }
.modal--staff .sp-cd {
  margin-left: auto; padding: 2px 8px; border-radius: 2px;
  background: rgba(164,52,43,.07); color: #a33e2b;
  font-size: 12px; border: 1px solid rgba(164,52,43,.25);
}
.modal--staff .sp-ok {
  margin-left: auto; padding: 2px 8px; border-radius: 2px;
  background: rgba(79,122,62,.07); color: #4f7a3e;
  font-size: 12px; border: 1px solid rgba(79,122,62,.25);
}
.modal--staff .sp-cd-note { color: #a33e2b !important; font-size: 13px !important; margin: 6px 0 0; }

/* —— 顶部场景插图 ——
   通用 .scene-illus 的图高 218px，本面板顶上还有现任条、三条通路说明，
   再叠一张 218px 的图会把候选卡整排压到首屏之外（要滚动才看得见人）。
   所以本面板压低到 116px，并把外边距收到 10px —— 图只是氛围，
   「让人挑」才是这一屏的正事。 */
.modal--staff .sp-illus { margin: 0 0 10px; }
.modal--staff .sp-illus .scene-illus { margin: 0 0 10px; max-width: 100%; }
.modal--staff .sp-illus .scene-illus img { max-height: 116px; }
@media (max-width: 640px) {
  .modal--staff .sp-illus .scene-illus img { max-height: 84px; }
}

/* —— 三条通路的分组说明 —— */
.modal--staff .sp-src-note {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px;
}
.modal--staff .sp-src {
  display: flex; flex-direction: column; gap: 3px;
  padding: 8px 10px; background: rgba(154,123,63,.045);
  border: 1px solid var(--line); border-radius: 3px;
}
.modal--staff .sp-src b { font-size: 13px; font-weight: 700; color: var(--ink); }
.modal--staff .sp-src b i { font-style: normal; font-weight: 400; color: #726a5c; font-size: 12px; }
.modal--staff .sp-src em {
  font-style: normal; font-size: 12px; line-height: 1.6; color: #726a5c;
}

/* —— 候选卡横排 —— */
.modal--staff .sp-wrap {
  display: flex; gap: 12px; overflow-x: auto; padding: 2px 2px 12px;
  scroll-snap-type: x proximity;
}
.modal--staff .sp-wrap::-webkit-scrollbar { height: 8px; }
.modal--staff .sp-wrap::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }

.modal--staff .sp-card {
  flex: none; width: 400px; scroll-snap-align: start; position: relative;
  display: flex; flex-direction: column;
  background: var(--card); border: 1px solid var(--line); border-radius: 4px;
  overflow: hidden; cursor: pointer;
  transition: border-color .16s ease, box-shadow .16s ease;
}
.modal--staff .sp-card:hover { border-color: var(--gold); box-shadow: 0 2px 10px rgba(0,0,0,.07); }
/* 「现任」与「此刻选中」是两件事，必须长得不一样：
   现任 = 朱红细内边（稳定状态）；选中 = 金色外发光 + 右上勾（临时状态）。
   共用同一个 class 的话，玩家点了一张卡会以为自己点的就是现任。 */
.modal--staff .sp-card.is-current { border-color: var(--seal); box-shadow: 0 0 0 1px var(--seal) inset; }
.modal--staff .sp-card.is-sel {
  border-color: var(--gold);
  box-shadow: 0 0 0 2px rgba(154,123,63,.55), 0 3px 14px rgba(154,123,63,.22);
}
.modal--staff .sp-card.is-sel::after {
  content: '✓'; position: absolute; right: 8px; top: 8px;
  width: 22px; height: 22px; line-height: 22px; text-align: center;
  background: var(--gold); color: #fff; border-radius: 50%;
  font-size: 13px; font-weight: 700;
}

/* 立绘：3:4 竖构图，与 assets/people 现有立绘一致 */
.modal--staff .sp-art { position: relative; background: var(--paper2); line-height: 0; }
.modal--staff .sp-art img {
  width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: center 22%; display: block;
}
.modal--staff .sp-art-tag {
  position: absolute; left: 8px; top: 8px;
  padding: 2px 8px; border-radius: 2px;
  background: rgba(251,247,239,.92); border: 1px solid var(--line);
  color: var(--seal); font-size: 11.5px; letter-spacing: .5px;
}
/* 「现任」角标：朱红实底、贴右下，与左上「来源」标签分开，不打架 */
.modal--staff .sp-art-cur {
  position: absolute; right: 8px; bottom: 8px;
  padding: 2px 9px; border-radius: 2px;
  background: var(--seal); color: #fff;
  font-size: 11.5px; letter-spacing: 1px;
}

.modal--staff .sp-info { padding: 10px 12px 12px; display: flex; flex-direction: column; gap: 7px; }
.modal--staff .sp-name {
  display: flex; align-items: baseline; gap: 8px;
  font-size: 16px; font-weight: 700; color: var(--ink);
}
.modal--staff .sp-name i { font-style: normal; font-size: 12px; font-weight: 400; color: var(--ink2); }

.modal--staff .sp-tags { display: flex; flex-wrap: wrap; gap: 5px; }
.modal--staff .sp-t {
  padding: 2px 7px; border-radius: 2px; font-size: 12px;
  background: var(--paper); border: 1px solid var(--line); color: var(--ink2);
}
.modal--staff .sp-t-air { color: var(--seal); border-color: rgba(164,52,43,.28); background: rgba(164,52,43,.04); }

/* 三项数值：能力/忠诚/风险 */
.modal--staff .sp-stats {
  display: flex; gap: 14px; padding: 7px 0;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.modal--staff .sp-stats span { display: flex; align-items: baseline; gap: 4px; font-size: 12px; color: #726a5c; }
.modal--staff .sp-stats b {
  font-size: 17px; font-weight: 700; color: var(--seal);
  font-variant-numeric: tabular-nums;
}
.modal--staff .sp-stats b.sp-risk-hi { color: #a33e2b; }
.modal--staff .sp-stats b.sp-risk-lo { color: #4f7a3e; }
.modal--staff .sp-stats b.sp-risk-mid { color: #b3791f; }
.modal--staff .sp-stats i { font-style: normal; font-size: 11.5px; color: var(--ink2); }

/* 档案表：14 栏，这是「档案齐全」的正面呈现 */
.modal--staff .sp-dossier { display: flex; flex-direction: column; }
.modal--staff .sp-row {
  display: flex; gap: 8px; padding: 4.5px 0;
  border-bottom: 1px dashed rgba(216,204,184,.55);
}
.modal--staff .sp-row:last-child { border-bottom: 0; }
.modal--staff .sp-k {
  flex: none; width: 4.6em; text-align: justify; text-align-last: justify;
  font-size: 12px; color: #726a5c; letter-spacing: 0;
}
.modal--staff .sp-v { flex: 1; font-size: 12.5px; line-height: 1.65; color: var(--ink); }

/* —— 底部 —— */
.modal--staff .sp-foot { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.modal--staff .sp-hint { flex: 1; font-size: 13px !important; color: #726a5c !important; margin: 0; }

/* —— 确认条：默认不占位（display:none），点中候选卡才显形 ——
   遴选一年只能换一次，点卡即定会误触，所以必须再点一下「就定 TA」。
   用 display 而不是 visibility/opacity，是为了它出现时把底部按钮往下推，
   而不是盖在「返回」上面。 */
.modal--staff .sp-confirm {
  display: none; align-items: center; gap: 12px;
  margin-top: 12px; padding: 10px 12px;
  background: rgba(154,123,63,.06);
  border: 1px solid rgba(154,123,63,.32); border-left: 3px solid var(--gold);
  border-radius: 3px;
}
.modal--staff .sp-confirm.on { display: flex; }
.modal--staff .sp-pickwho {
  flex: 1; font-size: 13.5px; color: var(--ink); font-weight: 500;
}

/* —— 身边人总览（hub）——
   2026-10-24 v2：第一版是「两行字 + 一个按钮」，昊看了一眼就要美化 ——
   问题不在配色，在**信息结构**：玩家辛苦挑的脸，进总览就只剩「杨雪梅 · 副处 · 谨慎」。
   走进这一屏的心理是「看看我身边现在站着谁」，所以必须**把立绘放回来**，
   并且把「能力/忠诚/风险/来路/在岗年限」摊在一张卡上，让人一眼认得出、看得出。

   布局：秘书、司机各一张横卡（立绘在左、信息在右）。
   为什么横卡而不是竖卡：这一屏是**查看**不是挑选，两张竖卡要滚一屏才看完，
   横卡能在首屏把两个人同时交代清楚。挑选时的大立绘在 showStaffPick 里，两处不重复。 */

/* 当前无人时的空槽：虚线框 + 一句为什么，不摆一张假脸 */
.modal--staff .sh-empty {
  display: flex; flex-direction: column; gap: 6px; align-items: center; justify-content: center;
  padding: 22px 16px; border: 1px dashed var(--line); border-radius: 6px;
  background: rgba(154,123,63,.035); text-align: center;
}
.modal--staff .sh-empty b { font-size: 14px; color: var(--ink2); font-weight: 700; }
.modal--staff .sh-empty span { font-size: 12.5px; color: #726a5c; line-height: 1.7; }

/* 现任卡：左立绘 104px、右信息自适应 */
.modal--staff .sh-card {
  display: flex; gap: 14px; align-items: stretch;
  padding: 12px; background: var(--card);
  border: 1px solid var(--line); border-left: 3px solid var(--seal);
  border-radius: 6px;
}
.modal--staff .sh-card + .sh-card { margin-top: 10px; }

/* 立绘：与遴选卡同一切法（3:4、center 22%），保证「同一个人在两屏看起来是同一张脸」 */
.modal--staff .sh-pic {
  flex: none; width: 104px; border-radius: 4px; overflow: hidden;
  background: var(--paper2); line-height: 0;
  border: 1px solid var(--line);
}
.modal--staff .sh-pic img {
  width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: center 22%; display: block;
}
.modal--staff .sh-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 7px; }

/* 头行：岗位标签 + 姓名 + 职级 */
.modal--staff .sh-top { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.modal--staff .sh-post {
  flex: none; padding: 1px 7px; border-radius: 2px;
  background: rgba(164,52,43,.07); border: 1px solid rgba(164,52,43,.22);
  color: var(--seal); font-size: 11.5px; letter-spacing: 1px; font-weight: 700;
  font-family: var(--font-ui);
}
.modal--staff .sh-name { font-size: 17px; font-weight: 700; color: var(--ink); letter-spacing: .5px; }
.modal--staff .sh-meta { font-size: 12.5px; color: #726a5c; }
.modal--staff .sh-noslot {
  font-size: 11.5px; color: #8a7a5c; padding: 1px 6px;
  border: 1px solid var(--line); border-radius: 2px;
}

/* 数值条：三格并排，刻度用短横线画（不用进度条 —— 这条目的数字本来就窄，条形反而糊） */
.modal--staff .sh-stats { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; }
.modal--staff .sh-stat { display: flex; align-items: baseline; gap: 5px; font-size: 12.5px; color: #726a5c; }
.modal--staff .sh-stat b { font-size: 15px; font-weight: 700; color: var(--ink); font-family: var(--font-num, inherit); }
.modal--staff .sh-stat i { font-style: normal; font-size: 11.5px; color: #8a7a5c; }
.modal--staff .sh-stat.hi b { color: #a33e2b; }
.modal--staff .sh-stat.lo b { color: #4f7a3e; }

/* 一句话档案：来路 + 性情 + 在岗 */
.modal--staff .sh-note { font-size: 12.5px; color: #726a5c; line-height: 1.7; }
.modal--staff .sh-note b { color: var(--ink2); font-weight: 600; }

/* 右下操作：靠底对齐，不跟文字抢行 */
.modal--staff .sh-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: auto; }

/* 换人冷却提示条：贴在本屏最上，比塞在正文里更显眼（这条规则会真的拦住玩家） */
.modal--staff .sh-cd {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 11px; margin-bottom: 10px;
  background: rgba(164,52,43,.055); border: 1px solid rgba(164,52,43,.22);
  border-left: 3px solid var(--seal); border-radius: 3px;
  font-size: 13px; color: #a33e2b;
}
.modal--staff .sh-cd b { font-weight: 700; }
.modal--staff .sh-cd span { color: #8a6a55; }

/* —— 履历台账 —— */
.modal--staff .sh-hist {
  margin-top: 12px; padding: 10px 12px;
  background: rgba(154,123,63,.03); border: 1px solid var(--line); border-radius: 4px;
}
.modal--staff .sh-hist-h {
  font-size: 12.5px; letter-spacing: 1.5px; color: var(--ink2); font-weight: 700;
  padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--line);
}

/* —— 窄屏：一屏一卡，档案字号回退 —— */
@media (max-width: 640px) {
  .modal--staff .sp-src-note { grid-template-columns: 1fr; }
  .modal--staff .sp-card { width: 86vw; }
  .modal--staff .sp-v { font-size: 12px; line-height: 1.6; }
  .modal--staff .sp-confirm { flex-wrap: wrap; }
  .modal--staff .sp-pickwho { flex: 1 0 100%; }
  /* 总览：立绘从「左图右文」改成「上图下文」——手机上一行放不下 104px 的图和一行姓名 */
  .modal--staff .sh-card { flex-direction: column; gap: 10px; }
  .modal--staff .sh-pic { width: 100%; max-width: 148px; align-self: center; }
  .modal--staff .sh-stats { gap: 12px; }
  .modal--staff .sh-foot { justify-content: stretch; }
  .modal--staff .sh-foot .chip { flex: 1; }
}

/* —— 暗色：全部显式覆盖，不靠父级 token 兜底 —— */
[data-theme="dark"] .modal--staff .sp-cur { background: #232019; border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .sp-card {
  background: #232019; border-color: rgba(255,255,255,.11);
}
[data-theme="dark"] .modal--staff .sp-art { background: #1c1a15; }
[data-theme="dark"] .modal--staff .sp-art-tag {
  /* 实量对比度：原 #d06052 在 #232019 上只有 4.24（低于正文 4.5 的线）。
     #e08a76 得 6.24 —— 与亮色那侧（#a4342b on #fbf7ef = 6.33）基本对齐。
     角标是 11.5px 小字，比正文更需要余量。 */
  background: rgba(35,32,25,.92); border-color: rgba(255,255,255,.14); color: #e08a76;
}
[data-theme="dark"] .modal--staff .sp-src { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .sp-src b,
[data-theme="dark"] .modal-box.modal--staff .modal-body p,
[data-theme="dark"] .modal--staff .sp-name,
[data-theme="dark"] .modal--staff .sp-v { color: #e8e0d0 !important; }
[data-theme="dark"] .modal--staff .sp-src em,
[data-theme="dark"] .modal--staff .sp-src b i,
[data-theme="dark"] .modal--staff .sp-k,
[data-theme="dark"] .modal--staff .sp-t,
[data-theme="dark"] .modal--staff .sp-stats span,
[data-theme="dark"] .modal--staff .sp-hint { color: #a49a86 !important; }
[data-theme="dark"] .modal--staff .sp-t { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] .modal--staff .sp-t-air { color: #d06052; border-color: rgba(208,96,82,.34); }
[data-theme="dark"] .modal--staff .sp-stats { border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .sp-row { border-bottom-color: rgba(255,255,255,.07); }
[data-theme="dark"] .modal--staff .sh-card {
  background: #232019; border-color: rgba(255,255,255,.11); border-left-color: #b8443a;
}
[data-theme="dark"] .modal--staff .sh-pic { background: #1c1a15; border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .sh-name { color: #e8e0d0; }
[data-theme="dark"] .modal--staff .sh-meta,
[data-theme="dark"] .modal--staff .sh-note,
[data-theme="dark"] .modal--staff .sh-stat { color: #a49a86; }
[data-theme="dark"] .modal--staff .sh-note b { color: #e8e0d0; }
[data-theme="dark"] .modal--staff .sh-stat b { color: #e8e0d0; }
[data-theme="dark"] .modal--staff .sh-stat i { color: #8f8674; }
[data-theme="dark"] .modal--staff .sh-stat.hi b { color: #e08a76; }
[data-theme="dark"] .modal--staff .sh-stat.lo b { color: #8fbb7c; }
[data-theme="dark"] .modal--staff .sh-post {
  background: rgba(184,68,58,.16); border-color: rgba(224,138,118,.36); color: #e08a76;
}
[data-theme="dark"] .modal--staff .sh-noslot { color: #a49a86; border-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .sh-empty {
  background: rgba(255,255,255,.025); border-color: rgba(255,255,255,.14);
}
[data-theme="dark"] .modal--staff .sh-empty b { color: #cfc4ae; }
[data-theme="dark"] .modal--staff .sh-empty span { color: #a49a86; }
[data-theme="dark"] .modal--staff .sh-cd {
  background: rgba(184,68,58,.12); border-color: rgba(184,68,58,.34); color: #e08a76;
}
[data-theme="dark"] .modal--staff .sh-cd span { color: #b0a08c; }
[data-theme="dark"] .modal--staff .sh-hist {
  background: rgba(255,255,255,.025); border-color: rgba(255,255,255,.11);
}
[data-theme="dark"] .modal--staff .sh-hist-h { color: #cfc4ae; border-bottom-color: rgba(255,255,255,.11); }
[data-theme="dark"] .modal--staff .so-row { border-bottom-color: rgba(255,255,255,.09); }
[data-theme="dark"] .modal--staff .sp-confirm {
  background: rgba(154,123,63,.10); border-color: rgba(154,123,63,.34);
}
[data-theme="dark"] .modal--staff .sp-pickwho { color: #e8e0d0; }
[data-theme="dark"] .modal--staff .sp-art-cur { background: #b8443a; color: #fff; }
[data-theme="dark"] .modal--staff .sp-card.is-current { box-shadow: 0 0 0 1px #b8443a inset; }
[data-theme="dark"] .modal--staff .sp-card.is-sel {
  border-color: #c2a05a; box-shadow: 0 0 0 2px rgba(194,160,90,.5), 0 3px 14px rgba(0,0,0,.4);
}
[data-theme="dark"] .modal--staff .sp-card.is-sel::after { background: #c2a05a; color: #1c1a15; }



/* ============================================================================
   ★★ 2026-10-25 字体清晰度总修 · 第四段：JS 内联样式兜底
   ────────────────────────────────────────────────────────────────────────────
   背景：前几段已经把 styles.css 里所有「小字号 + 宋体」的规则换成黑体，
         但 src/*.js 里还有 5 处**内联 style**（拼字符串写死 font-family:var(--fzt)
         或 var(--font-kai)），CSS 选择器管不到内联声明 —— 只能靠 !important 压过一次。
         这些内联样式都在 13~14px，正是最容易糊的区间（国企面板 / 民生面板标题）。
   做法：把「字号 <= 14px 且字体为宋体系」的内联样式统一提到黑体。
         ★ 只针对这几个确实要改的选择器，不做全局 * 覆盖，
           免得把大标题、印章、诏书的宋体一并压掉。
   ★ 若将来某个标题确实想用宋体，请把它的 font-size 提到 15px 以上，
     或者在该元素上接受宋体（本段只压 <=14px 的那批，不会误伤）。
   ============================================================================ */
.soe-cat-h,
.civic-cat,
.uv-k b,
.uv-pool-h b,
.uv-extra b,
.uv-nm b,
.uv-dh,
.uv-sec h5 {
  font-family: var(--font-ui) !important;
}
/* ★ 只对「确实内联写死宋体」的那几个类生效。
   ⚠️ 不要改用 [style*="font-size:13px"] 这种属性选择器：全库 38 处内联 13px，
      其中 crisis-head / sec-draft-pre 等段落本就该是正文宋体，会被误伤成黑体。 */
.soe-cat-h .soe-cat-t,
.soe-cat-h span,
.soe-cat-h b {
  font-family: var(--font-ui) !important;
}

/* ==================================================================================
   ★ 2026-10-25：深色主题「浅色残留」总修（界面美化 · 第一批）
   ----------------------------------------------------------------------------------
   问题：切到深色主题后，上半屏仍大片米黄，与下半屏墨黑割裂。
   实测（修改前）——整图平均亮度 133.4、亮块占 48.7%；顶带亮度 215.6，
   与浅色主题同区（219.3）几乎一样亮。

   排查出四类根因，逐条对症（都写在下面，别删）：

   根因 1：#gameScreen 的 border-image（云纹宣纸框）是**图片**，
           图片中央自带米黄填充；而 .top 只有一层很淡的金色渐变，透出下面的米黄。
           → 给深色下的 .top 铺实色底 var(--paper) 盖住。
   （实验证据：只去掉 border-image，顶带亮度 215.6 → 226.8，没变暗；
     只把 #gameScreen 背景改深色、保留 border-image，顶带仍是 215.6；
     两者都改，才降到 51.2。说明米黄来自 border-image，不是 CSS 背景。）

   根因 2：.btn.ghost / .chip[data-close] 那条规则带 !important 的浅米底（#f0e6d0），
           深色分支没带 !important，被压过。
           → 深色分支必须同样带 !important，否则永远输。
   ★ 教训：这个文件里凡带 !important 的浅色规则，都要检查有没有配对的深色 !important 分支。

   根因 3：.promo-wide .checks .chk.ok/.no（3 个类）特异性高于
           [data-theme="dark"] .checks .chk.ok（2 类 + 1 属性），深色规则写了却输掉。
           .panel 第 5851 行那条也是同款（带 !important 的浅底）。
           → 深色分支补足特异性 + !important。

   根因 4：零散白底 chip / 浅底卡（.acts-rail .rail-subject .chip 等）。
           → 逐一补深色分支。

   实测（修复后）：浅色实底残留 16 处 → 0 处。
   改动原则：只加不改——下面所有规则都新写在本文件末尾，靠 CSS 层叠压过旧规则，
   不动任何一条既有规则，方便随时回退（回退 = 删掉本段即可）。
   ================================================================================== */

/* —— 根因 1：顶栏铺实底，盖住 border-image 的米黄 —— */
html[data-theme="dark"] .top {
  background: var(--paper);
  border-bottom-color: var(--line);
}
html[data-theme="dark"] .top::after { background: rgba(201, 169, 97, .28); }
html[data-theme="dark"] .top-c .yearline {
  background: rgba(255, 255, 255, .04);
  border-color: rgba(200, 180, 130, .22);
  box-shadow: none;
}
/* 顶栏里的年份徽章、按钮组在深色下重铺一遍，避免半透明浅底透出米黄 */
html[data-theme="dark"] .t-year-seal {
  box-shadow: inset 0 0 0 2px rgba(212, 175, 55, .16), inset 0 0 22px rgba(0, 0, 0, .35), 0 4px 14px rgba(0, 0, 0, .4);
}
html[data-theme="dark"] .t-chip-row .t-chip {
  background: rgba(255, 255, 255, .05);
  border-color: rgba(200, 180, 130, .22);
  color: var(--ink2);
}

/* —— 根因 2：!important 必须对 !important —— */
html[data-theme="dark"] .btn.ghost {
  background-color: rgba(255, 255, 255, .06) !important;
  color: var(--ink) !important;
  border-color: rgba(200, 180, 130, .28) !important;
}
html[data-theme="dark"] .btn.ghost:hover:not([disabled]) {
  background-color: rgba(201, 169, 97, .14) !important;
  color: var(--gold) !important;
  border-color: rgba(201, 169, 97, .5) !important;
}
html[data-theme="dark"] .chip[data-close="1"]:not(.primary):not(.hot),
html[data-theme="dark"] .chip[data-back="1"]:not(.primary):not(.hot) {
  background-color: rgba(255, 255, 255, .06) !important;
  color: var(--ink2) !important;
  border-color: rgba(200, 180, 130, .24) !important;
}
html[data-theme="dark"] .panel {
  background-image: linear-gradient(var(--panel-tint), var(--panel-tint)) !important;
  background-color: var(--card) !important;
}

/* —— 根因 3：补足特异性，压过 .promo-wide 那几条 —— */
html[data-theme="dark"] .promo-wide .checks .chk,
html[data-theme="dark"] .promo-wide .checks .chk.ok,
html[data-theme="dark"] .promo-wide .checks .chk.no {
  background: transparent !important;
  border-color: rgba(196, 170, 120, .2) !important;
}
html[data-theme="dark"] .checks .chk.ok {
  background: rgba(111, 174, 131, .1) !important;
  border-color: rgba(111, 174, 131, .22) !important;
}
html[data-theme="dark"] .checks .chk.no {
  background: rgba(224, 104, 92, .08) !important;
  border-color: rgba(224, 104, 92, .2) !important;
}
html[data-theme="dark"] .promo-wide .chk.ok .chk-ic,
html[data-theme="dark"] .promo-wide .chk.no .chk-ic {
  background: rgba(255, 255, 255, .07) !important;
  color: var(--ink2) !important;
}
html[data-theme="dark"] .promo-wide .chk-track i,
html[data-theme="dark"] .promo-wide .chk.ok .chk-track i {
  background: rgba(201, 162, 94, .55) !important;
}

/* —— 根因 4：零散白底 chip / 浅底卡 —— */
html[data-theme="dark"] .acts-rail .rail-subject .chip {
  background: rgba(255, 255, 255, .07) !important;
  color: var(--ink) !important;
  border-color: rgba(200, 180, 130, .26) !important;
}
html[data-theme="dark"] .banq-picks .chip {
  background: rgba(255, 255, 255, .06) !important;
  color: #cbb8e8 !important;
  border-color: rgba(180, 150, 220, .3) !important;
}
html[data-theme="dark"] .term-goal { background: rgba(255, 255, 255, .04); }
html[data-theme="dark"] .legacybox,
html[data-theme="dark"] .slotsbar {
  border-color: rgba(196, 170, 120, .22);
  background: linear-gradient(180deg, rgba(255, 255, 255, .05), rgba(255, 255, 255, .02));
}
html[data-theme="dark"] .tm-self {
  border-color: rgba(201, 162, 75, .55);
  background: linear-gradient(180deg, rgba(201, 162, 75, .12), rgba(255, 255, 255, .02));
}
html[data-theme="dark"] .net-me {
  background: linear-gradient(120deg, rgba(201, 162, 75, .14), rgba(247, 231, 178, .05));
  box-shadow: none;
}
html[data-theme="dark"] .hero-up { text-shadow: none; }
html[data-theme="dark"] .dp-line { background: rgba(255, 255, 255, .04); }

/* ==================================================================================
   ★ 2026-10-25：深色主题「浅色残留」总修 · 第二批（文字色配对）
   ----------------------------------------------------------------------------------
   背景：第一批把 .promo-wide 勾选行的浅底改成了深底，但那几行的**文字色**
         仍是给浅底配的深棕（#5c4632 / #6b4a2b），在深底上对比度实测只有 1.86:1。
         —— 改背景必须同时改文字色，这是配套动作，漏了就会出现「看不见的字」。
   顺带把同源的其它浅底配深字一并配对。
   实测：修复后深色低对比文字从 33 处降到个位数（见 _ui_lint.js 输出）。
   ================================================================================== */

/* —— 晋升/差事清单：文字色按深色主题配对 —— */
html[data-theme="dark"] .promo-wide .chk-label { color: var(--ink); }
html[data-theme="dark"] .promo-wide .chk-num,
html[data-theme="dark"] .promo-wide .chk.ok .chk-num,
html[data-theme="dark"] .promo-wide .chk.no .chk-num { color: #e0a89c; }
html[data-theme="dark"] .promo-wide .chk-ic,
html[data-theme="dark"] .promo-wide .chk.ok .chk-ic,
html[data-theme="dark"] .promo-wide .chk.no .chk-ic { color: var(--ink2); }
html[data-theme="dark"] .promo-wide-h,
html[data-theme="dark"] .promo-wide .promo-wide-h { color: var(--ink); }

/* —— 城市财政小条：浅底 + 深字，深色下都换掉 —— */
html[data-theme="dark"] .city-fin-mini {
  color: var(--ink2);
  background: rgba(255, 255, 255, .05);
  border-color: rgba(200, 180, 130, .22);
}

/* ==================================================================================
   ★ 2026-10-25：深色主题「浅色残留」总修 · 第三批（面板内零散项）
   ----------------------------------------------------------------------------------
   来源：_dark_sweep.js 逐个打开 24 个面板后扫出的残余，共 5 处。
     · .promoall-row   晋升全览的每一行，写死 #fff8ef 浅底
     · .portrait.net   关系网里的头像占位底（图片本身，底色偏白）
   注：.spec-meet-line 的浅底写在 src/spec.js 的内联 style 里，CSS 覆盖不到，见该文件改动。
   ================================================================================== */

html[data-theme="dark"] .promoall-row {
  background: rgba(255, 255, 255, .05);
  border-color: rgba(200, 180, 130, .22);
  color: var(--ink);
}
html[data-theme="dark"] .promoall-row:hover {
  background: rgba(201, 169, 97, .12);
  border-color: rgba(201, 169, 97, .45);
}
html[data-theme="dark"] .promoall-row .pa-num,
html[data-theme="dark"] .promoall-row b { color: var(--gold); }

html[data-theme="dark"] .portrait.net {
  background: rgba(255, 255, 255, .07);
  border-color: rgba(200, 180, 130, .28);
}

/* ==================================================================================
   ★ 2026-10-25：.spec-meet-line 从「内联样式」改为「CSS 类」
   ----------------------------------------------------------------------------------
   原来 src/spec.js 里这么写：
     <div class="spec-meet-line" style="border:1px dashed rgba(164,52,43,.35);
          background:#fffdf8;border-radius:6px;padding:5px 9px;font-size:12.5px;margin:0 0 8px">
   内联样式优先级高于样式表，深色主题根本盖不住，会留一块白。
   现在拆成类：下面这份**逐字照搬原值**，保证浅色主题视觉零变化；
   深色主题再单独给一套。
   ================================================================================== */

.spec-meet-line {
  border: 1px dashed rgba(164, 52, 43, .35);
  background: #fffdf8;
  border-radius: 6px;
  padding: 5px 9px;
  font-size: 12.5px;
  margin: 0 0 8px;
}
html[data-theme="dark"] .spec-meet-line {
  border-color: rgba(224, 168, 156, .3);
  background: rgba(255, 255, 255, .05);
  color: var(--ink2);
}

/* ==================================================================================
   ★ 2026-10-25：线性图标集 .gi（src/iconset.js 生成，替换全项目系统 emoji）
   ----------------------------------------------------------------------------------
   口径：
     · 尺寸用 1em 跟随字号，vertical-align:-0.12em 让图标与汉字基线对齐
       （汉字视觉重心偏低，纯 baseline 对齐会显得图标偏高）。
     · 颜色继承 currentColor —— 深色主题、朱砂标题、灰化态全部自动跟随，
       不需要为每个图标写颜色。
     · stroke 1.7 是在 12–16px 下的最佳可读线宽（1.5 太细发虚、2 太粗糊成块）。
     · 豁免名单（🏛 🗳 🗂 🏮 ❄ 🌐）不在此列，仍由系统字体渲染。
   ================================================================================== */
.gi {
  width: 1em;
  height: 1em;
  display: inline-block;
  vertical-align: -0.12em;
  flex: none;
  stroke-width: 1.7;
  /* 图标在字号很小时会糊，最低 12px 兜底 */
  min-width: 12px;
  min-height: 12px;
}
/* 标题/大字场景：略加粗线宽并放宽下限 */
h1 .gi, h2 .gi, h3 .gi, h4 .gi, .cm-head .gi, .modal-head .gi { min-width: 15px; min-height: 15px; }
/* 按钮/chip 内图标与文字间距 */
.chip .gi, .btn .gi, button .gi { margin-right: .3em; }
.chip .gi:last-child, .btn .gi:last-child, button .gi:last-child { margin-right: 0; }
/* 小号 muted 文字里的图标略降对比，避免抢主信息 */
.muted .gi, .small .gi { opacity: .82; }

/* ==================================================================================
   ★ 2026-10-25 排版整改批：面板「分区标题 + 单选卡 + 清单行」统一版式
   ----------------------------------------------------------------------------------
   背景：解法阶梯 / 公开表态 / 汇报准备 / 门口申请 / 对公报账 这批弹窗各写各的——
   行内 style 的红色小标题、dashed 底线串行的选项、polrow 里三段挤一行导致
   长手段名换行后 meta 悬在第二行中间。本批立三个通用件，逐面板接入：
     · .sec-t   —— 分区标题（楷字 + 朱砂竖线 + 尾随虚线），替代散落的行内红字 div
     · .pick    —— 单选/多选卡（选中态高亮、整卡可点），替代 dashed 串行的裸 label
     · .ladder-row —— 阶梯清单行：左名称列 / 右成本+按钮列，两列分栏不再互相挤压
   ================================================================================== */

/* —— ① 分区标题 —— */
.sec-t {
  display: flex; align-items: center; gap: 8px;
  margin: 16px 0 8px;
  font-family: var(--font-kai); font-size: 14.5px; font-weight: 800;
  letter-spacing: 2px; color: var(--seal);
}
.sec-t::before {
  content: ''; width: 3px; height: 14px; border-radius: 2px;
  background: var(--seal); flex: none;
}
.sec-t::after {
  content: ''; flex: 1; height: 0;
  border-top: 1px dashed rgba(140, 100, 40, .32);
}
.sec-t .sec-t-sub {
  font-family: var(--font-ui, inherit); font-size: 12px; font-weight: 500;
  letter-spacing: .5px; color: var(--ink3);
}
.sec-t:first-child { margin-top: 2px; }

/* —— ② 单选/多选卡（口径、场合、材料清单共用） —— */
.pick {
  display: flex; gap: 10px; align-items: flex-start; cursor: pointer;
  padding: 9px 12px; margin: 0 0 6px;
  border: 1px solid var(--line); border-radius: 9px;
  background: rgba(255, 253, 246, .6);
  transition: background .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.pick:last-child { margin-bottom: 0; }
.pick input { margin: 3px 0 0; flex: none; }
.pick > span { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.pick .pk-name { font-size: 15px; font-weight: 800; color: var(--ink); letter-spacing: .3px; }
.pick .pk-note { font-size: 13px; line-height: 1.7; color: var(--ink2); }
.pick .pk-cost { font-size: 12.5px; line-height: 1.7; color: var(--seal); font-weight: 600; }
.pick:hover { background: #fffdf6; border-color: rgba(140, 100, 40, .4); box-shadow: 0 1px 5px rgba(60, 45, 20, .07); }
.pick:has(input:checked) {
  background: rgba(164, 52, 43, .06); border-color: rgba(164, 52, 43, .48);
  box-shadow: inset 3px 0 0 var(--seal);
}
.pick:has(input:checked) .pk-name { color: var(--seal); }
.pick.off { opacity: .5; cursor: default; }
.pick.off:hover { background: rgba(255, 253, 246, .6); border-color: var(--line); box-shadow: none; }
[data-theme="dark"] .pick { background: rgba(255, 255, 255, .03); }
[data-theme="dark"] .pick:hover { background: rgba(255, 255, 255, .06); }
[data-theme="dark"] .pick:has(input:checked) { background: rgba(200, 80, 70, .1); }

/* —— ③ 解法阶梯行：两列分栏（左=第n手+名称，右=成本+状态+按钮） —— */
.ladder-row {
  display: flex; align-items: center; gap: 12px; flex-wrap: nowrap;
  padding: 9px 12px; margin: 0 0 6px;
  border: 1px solid var(--line); border-radius: 9px;
  background: rgba(255, 253, 246, .55);
}
.ladder-row:last-child { margin-bottom: 0; }
.ladder-row.locked { opacity: .58; background: rgba(240, 235, 225, .4); }
.lr-l { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.lr-name { font-size: 15px; font-weight: 800; color: var(--ink); line-height: 1.5; }
.lr-r { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; }
.lr-meta { font-size: 12.5px; color: var(--ink3); white-space: nowrap; }
.lr-meta b { color: var(--seal); font-weight: 800; }
.ladder-row .sol-badge {
  display: inline-block; font-style: normal; font-size: 11px; font-weight: 800;
  color: var(--seal); border: 1px solid rgba(164, 52, 43, .4); border-radius: 4px;
  padding: 0 5px; margin-right: 7px; vertical-align: 1px; letter-spacing: 1px;
}
.ladder-row.done { background: rgba(140, 30, 30, .055); border-color: rgba(140, 30, 30, .35); }
[data-theme="dark"] .ladder-row { background: rgba(255, 255, 255, .03); }
[data-theme="dark"] .ladder-row.locked { background: rgba(255, 255, 255, .02); }

/* —— ④ 弹窗内叙述段去悬挂缩进：行内小标题版式的面板统一不吃 .narr 的 2.4em 首行缩进 —— */
.modal--plain .narr { text-indent: 0; font-size: 15.5px; line-height: 1.9; }

/* —— ⑤ 提示框（隐患/情报）统一成带底色细边条，不再散用行内样式 —— */
.hint-bar {
  margin: 8px 0; padding: 7px 11px;
  border: 1px solid rgba(180, 118, 31, .4); border-left: 3px solid var(--warn, #b4761f);
  border-radius: 7px; background: rgba(180, 118, 31, .07);
  font-size: 13.5px; line-height: 1.75; color: var(--ink2);
}
.hint-bar b { color: var(--seal); }
.hint-bar.bad { border-color: rgba(164, 52, 43, .4); border-left-color: var(--seal); background: rgba(164, 52, 43, .06); }
[data-theme="dark"] .hint-bar { background: rgba(180, 118, 31, .1); }
[data-theme="dark"] .hint-bar.bad { background: rgba(200, 80, 70, .1); }

/* —— ⑥ 深色主题 chip 轮廓（2026-10-25 色治理配套）——
   真凶是 8445 行 `.modal .chip { border-color: rgba(42,33,26,.35) !important }`：
   深棕边框压在深色卡（--card #211f1a）上几乎同色，"选它"这类小按钮只剩文字没轮廓。
   该规则带 !important，普通覆盖赢不了 ⇒ 这里同样用 !important，
   且选择器特异性 (0,3,0) > 它的 (0,2,0)，同为 important 时高特异性胜。
   不动 --line 本身，避免波及全部分隔线；primary 自带 seal 底不受影响。 */
[data-theme="dark"] .modal .chip:not(.primary) { border-color: rgba(201, 169, 97, .42) !important; }
[data-theme="dark"] .modal .chip:not(.primary):hover:not([disabled]) { border-color: var(--seal) !important; }


/* ---------- 证券账户面板（2026-10-27 股票系统，src/stocks.js）----------
   四只票一列排开，每只一张小牙牌：上面名称/净值，中间持有量，下面三档买入按钮。
   折线图用内联 SVG，容器只负责留白与一条浅底，不引任何图表库。 */
.stk-list { display: flex; flex-direction: column; gap: 10px; margin: 10px 0 4px; }
.stk-row {
  border: 1px solid var(--line); border-radius: 8px;
  padding: 8px 11px; background: rgba(255, 255, 255, .28);
}
.stk-hd { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.stk-hd b { font-size: 14.5px; color: var(--ink); letter-spacing: .5px; }
.stk-nav { margin-left: auto; font-size: 12.5px; color: var(--ink2); font-variant-numeric: tabular-nums; }
.stk-sub { margin: 3px 0 6px; font-variant-numeric: tabular-nums; }
.stk-row .acts { gap: 6px; }
.stk-chart { margin: 12px 0 2px; }
.stk-chart svg { display: block; border-bottom: 1px solid var(--line); }
/* 涨红跌绿：图表描边在 JS 里按首尾比大小着色，这里只兜住浅底 */
.stk-chart .muted { margin-top: 4px; }

[data-theme="dark"] .stk-row { background: rgba(255, 255, 255, .05); border-color: rgba(201, 169, 97, .28); }
[data-theme="dark"] .stk-chart svg { border-bottom-color: rgba(201, 169, 97, .3); }

/* 证券面板内容区：自建滚动（原因见 src/stocks.js 里 .stk-scroll 的注释 ——
   .modal-body 的 overflow:auto 在 max-height 的 flex 容器里会失效，内容被裁掉）*/
.stk-scroll { max-height: calc(86vh - 92px); overflow-y: auto; overflow-x: hidden; padding-right: 2px; }
.stk-scroll::-webkit-scrollbar { width: 6px; }
.stk-scroll::-webkit-scrollbar-thumb { background: var(--line); border-radius: 3px; }
/* 净值与涨跌幅之间留一口气，别贴成一串数字 */
.stk-pct { margin-left: 3px; }
/* 四只票之间松一点，别挤成一张表 */
.stk-list { gap: 12px; }

/* ★ 证券面板的高度链修正（只作用于含 .stk-scroll 的弹窗，不动全局）：
   .modal（fixed, padding20） → .modal-box（max-height:86vh, flex column）
   → .modal-body（**没有** flex:1 / min-height:0） → .stk-scroll
   缺了中间那一段，子元素的高度撑不住，overflow 自然不会生效，内容被直接裁掉
   （实测：金岭只露半行，「这些钱说得清吗」整段看不见）。
   这里把这个弹窗内的 .modal-body 变成真正的弹性区，滚动交给 .stk-scroll。 */
.modal-box:has(.stk-scroll) .modal-body { flex: 1 1 auto; min-height: 0; overflow: hidden; }
.modal-box:has(.stk-scroll) { overflow: hidden; }
/* :has() 在旧 Edge 上不生效 ⇒ 兜底：stk-scroll 自己也限死高度 */
.stk-scroll { max-height: calc(86vh - 200px); }

/* 证券面板里插画不必占掉四分之一屏（全局 218px），缩到 118px，
   腾出的高度正好让「这些钱说得清吗」在一屏内看全 —— 那一段才是这面板的正事。*/
.stk-scroll .scene-illus { margin: 0 auto 10px; }
.stk-scroll .scene-illus img { max-height: 118px; }
.stk-scroll .narr { margin: 4px 0 8px; line-height: 1.75; }
.stk-scroll .sec-h { margin: 14px 0 4px; }

/* ===== 整改销号台账（RECTUI2） ===== */
.rect-desk,.rect-detail{display:grid;gap:14px;padding-bottom:24px}.rect-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.rect-summary span,.rect-card,.rect-section{border:1px solid var(--line);background:var(--paper,#fff);border-radius:10px;padding:12px}.rect-summary span{text-align:center}.rect-card{display:grid;gap:10px}.rect-card-head,.rect-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rect-title h2{width:100%;margin:4px 0 0}.rect-source,.rect-status,.rect-confidence{display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:700}.rect-source{background:rgba(120,88,40,.12);color:var(--ink)}.rect-status-active,.rect-confidence-good{background:#e8f4ea;color:#276b38}.rect-status-verify,.rect-confidence-wait{background:#fff1c9;color:#805c00}.rect-status-overdue,.rect-confidence-risk{background:#fde3e1;color:#9d2822}.rect-meta{display:grid;grid-template-columns:1fr 1fr;gap:10px}.rect-meta span{display:grid;gap:3px}.rect-meta small{color:var(--muted)}.rect-progress{display:grid;gap:5px}.rect-progress>div:first-child{display:flex;justify-content:space-between}.rect-progress-track{height:10px;border-radius:999px;overflow:hidden;background:rgba(90,70,45,.14)}.rect-progress-track i{display:block;height:100%;background:#9b6b36}.rect-progress-track i.real{background:#357456}.rect-gap,.rect-risk{padding:9px;border-radius:7px;background:rgba(157,40,34,.08)}.rect-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.rect-btn{min-height:44px;white-space:normal}.rect-btn-secondary{border:1px solid var(--line);background:var(--paper);color:var(--ink)}.rect-btn-primary{background:rgba(164,52,43,.10)!important;border:1px solid #a4342b!important;color:#7d241e!important;box-shadow:inset 0 0 0 1px rgba(255,255,255,.35)}.rect-btn-danger{background:#9d2822!important;border-color:#7d1e1a!important;color:#fff!important}.rect-decisions{display:grid;gap:9px}.rect-decisions .rect-btn{width:100%}.rect-candidates{display:grid;gap:8px}.rect-candidates .rect-btn{display:flex;justify-content:space-between;align-items:center}.rect-confirm{display:grid;gap:14px;padding-bottom:18px}.rect-confirm-actions{display:grid;grid-template-columns:1fr 1fr;gap:9px}.rect-empty{padding:20px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:10px}
@media(max-width:390px){.rect-desk,.rect-detail{gap:11px;padding-bottom:32px}.rect-summary{grid-template-columns:1fr}.rect-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.rect-actions .rect-btn,.rect-card>.rect-btn,.rect-candidates .rect-btn{min-height:44px}.rect-decisions .rect-btn,.rect-confirm-actions .rect-btn{width:100%;min-height:44px}.rect-confirm-actions{grid-template-columns:1fr}.rect-meta{grid-template-columns:1fr 1fr}.rect-card{padding:11px}}

/* ===== 三处专属界面层级（UIPOLISH1） ===== */
.promo-window{font-variant-numeric:tabular-nums}.promo-win-head{display:grid;gap:10px}.promo-win-head>.sec-h{font-size:16px;font-weight:800;margin:0}.promo-win-status{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap}.promo-win-pair{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}.promo-win-label{font-size:13px;font-weight:700;color:var(--muted)}.promo-win-open{padding:4px 9px;border-radius:999px;font-size:13px;font-weight:800}.promo-win-open-yes{color:#2f7a3f;background:#e8f4ea}.promo-win-open-no{color:#675f54;background:rgba(90,70,45,.10)}.promo-win-prob{font-size:16px;font-weight:800;color:#8a6b2f}.promo-win-reason{margin:0;color:var(--muted);font-size:13px}.promo-win-risk{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;padding:10px 12px;border-radius:8px;background:rgba(138,107,47,.08);font-size:13px;color:var(--ink2,var(--muted))}.promo-win-risk-value{font-size:14px;font-weight:700}.promo-win-risk strong{padding:2px 8px;border-radius:999px}.promo-win-risk-low strong{color:#765a24;background:#f5ecd7}.promo-win-risk-notice strong{color:#955b19;background:#fff0d3}.promo-win-risk-high strong{color:#a4342b;background:#fde3e1}.promo-win-quote{margin:0;padding:10px 12px;border-left:2px solid #a9843d;background:#fbf3df;color:var(--ink);font-size:14px;font-weight:500;line-height:1.75}.promo-window+.acts .chip{min-height:44px;white-space:normal}
.exp-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}.exp-stats>span{display:grid;gap:2px;text-align:center;padding:10px 6px;border:1px solid var(--line);border-radius:8px;background:rgba(138,107,47,.06)}.exp-stats b{font-size:18px;font-weight:800;font-variant-numeric:tabular-nums}.exp-stats small{font-size:12px;font-weight:600;color:var(--muted)}.exp-candidate-card{display:grid;grid-template-columns:minmax(180px,1fr) auto;grid-template-areas:'main action' 'desc desc';column-gap:16px;row-gap:8px;padding:16px;border:1px solid var(--line);border-radius:10px;background:var(--paper,#fff)}.exp-candidate-card+.exp-candidate-card{margin-top:10px}.exp-candidate-main{grid-area:main;display:grid;align-content:start;gap:4px;min-width:0}.exp-candidate-main>b{font-size:16px;font-weight:800;line-height:1.45}.exp-candidate-main>span{font-size:13px;font-weight:600;color:var(--muted)}.exp-candidate-action{grid-area:action;align-self:start}.exp-candidate-action .chip{display:grid;place-items:center;min-width:190px;min-height:44px;white-space:normal}.exp-candidate-action .chip span{display:block;font-size:11px;font-weight:500;opacity:.82}.exp-candidate-desc{grid-area:desc;min-width:0;margin:8px 0 0;font-size:14px;font-weight:500;line-height:1.75;color:var(--ink2,var(--muted));overflow-wrap:anywhere}.exp-pack-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap}.exp-pack-head>strong{min-width:0;overflow-wrap:anywhere}.exp-pack-tags{display:flex;gap:5px;flex-wrap:wrap}.exp-pack-desc{width:100%;margin:9px 0;font-size:14px;line-height:1.75;color:var(--ink2,var(--muted))}.exp-pack-actions{display:flex;gap:8px;flex-wrap:wrap}.exp-pack-actions .chip{min-height:44px;white-space:normal}
.rect-desk{grid-template-columns:repeat(2,minmax(280px,1fr))}.rect-summary,.rect-empty{grid-column:1/-1}.rect-summary-zero{opacity:.58}.rect-card{position:relative;overflow:hidden;padding-left:16px}.rect-card:before{content:'';position:absolute;inset:0 auto 0 0;width:4px;background:#357456}.rect-card-verify:before{background:#b88a25}.rect-card-overdue:before{background:#a4342b}.rect-card>h3{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.45;margin:0}.rect-unverified{margin:0;padding:8px 9px;border-radius:7px;background:rgba(90,70,45,.07);color:var(--muted);font-size:13px}.rect-empty{display:grid;justify-items:center;gap:14px;padding:28px 24px;border:1px dashed var(--line);border-radius:12px;background:rgba(138,107,47,.04)}.rect-empty-icon{display:grid;place-items:center;width:52px;height:52px;border:2px solid #a9843d;border-radius:8px;color:#8a6b2f;font-weight:800;background:#fbf3df;box-shadow:5px 5px 0 rgba(138,107,47,.12)}.rect-empty h2{margin:0;font-size:16px;font-weight:800}.rect-empty-sources{display:flex;justify-content:center;gap:7px;flex-wrap:wrap}.rect-empty-note{width:min(100%,620px);padding:12px 14px;border-radius:8px;background:#fbf3df;border-left:2px solid #a9843d;text-align:left}.rect-empty-note strong{font-size:14px}.rect-empty-note p{margin:5px 0 0;font-size:14px;line-height:1.7}.rect-empty-next{margin:0;color:var(--muted);font-size:13px;text-align:center}
@media(max-width:620px){.promo-win-status{align-items:flex-start}.promo-win-risk{align-items:flex-start}.exp-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.exp-candidate-card{grid-template-columns:minmax(0,1fr);grid-template-areas:'main' 'desc' 'action';padding:14px}.exp-candidate-action,.exp-candidate-action .chip{width:100%}.exp-candidate-action .chip{min-width:0}.exp-pack-actions .chip{width:100%}.rect-desk{grid-template-columns:minmax(0,1fr)}.rect-empty{padding:24px 14px}.rect-card,.rect-empty,.rect-summary{min-width:0}}
/* CHAIN124 三系统专属宣纸/朱砂 UI */
.inst-desk,.inst-detail,.appperf-list,.appperf-detail,.coord-chain{display:grid;gap:14px;color:var(--ink)}.inst-section,.appperf-detail>section,.coord-chain-section{border:1px solid var(--line);border-radius:10px;padding:14px;background:linear-gradient(145deg,rgba(255,253,246,.94),rgba(248,240,222,.72))}.inst-section h2,.inst-section h3,.appperf-detail h3,.coord-chain-section h3{margin:0 0 10px}.inst-section h2 em{font-style:normal;color:var(--seal)}.inst-card,.appperf-card{position:relative;display:grid;gap:9px;border:1px solid var(--line);border-radius:9px;padding:13px;background:var(--paper)}.inst-card header,.appperf-card header,.inst-detail-head,.appperf-detail>header,.coord-chain-head,.coord-chain-rel header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.inst-kind,.inst-state,.appperf-grade,.coord-promise,.coord-debt{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:800}.inst-kind{color:var(--seal);background:rgba(164,52,43,.09)}.inst-state{background:rgba(138,107,47,.12)}.inst-empty,.appperf-empty{display:grid;justify-items:center;gap:8px;padding:24px;text-align:center;border:1px dashed var(--line);border-radius:10px}.inst-empty-seal,.appperf-folder span{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--seal);color:var(--seal);font-size:20px;font-weight:900;transform:rotate(-4deg)}.inst-choice-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.inst-choice,.inst-angle{min-height:64px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);text-align:left;padding:10px;cursor:pointer}.inst-choice span,.inst-angle span{display:block;margin-top:4px;color:var(--muted);font-size:12px}.inst-choice.selected,.inst-angle.selected{border-color:var(--seal);background:rgba(164,52,43,.09);box-shadow:inset 0 0 0 1px rgba(164,52,43,.18)}.inst-angle-list{display:grid;gap:7px}.inst-confirm{width:100%;min-height:44px;margin-top:10px}.inst-decisions,.appperf-actions,.coord-credit-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.inst-decisions>*,.appperf-actions>*{min-height:44px}.inst-secondary,.appperf-secondary,.coord-secondary{border-color:#9b7a45!important;background:#fbf3df!important}.inst-warning,.appperf-warning,.coord-warning{border-color:#b76d22!important;background:#fff0d3!important;color:#874b13!important}.inst-muted{border-style:dashed!important;color:var(--muted)!important}.appperf-danger,.coord-danger{border-color:#8f211d!important;background:#9d2822!important;color:#fff!important}.inst-danger-confirm,.appperf-confirm,.coord-chain-confirm{display:grid;justify-items:center;gap:12px;text-align:center;padding:18px}.inst-danger-confirm>span,.appperf-confirm>span,.coord-chain-confirm>span{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--seal);color:var(--seal);font-size:22px;font-weight:900;border-radius:50%}.inst-danger-confirm>div,.appperf-confirm>div,.coord-chain-confirm>div{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.inst-clarity{min-width:130px}.inst-clarity span,.inst-clarity b{display:block}.inst-clarity i,.coord-trust i{display:block;height:7px;background:rgba(90,70,45,.14);border-radius:99px;overflow:hidden}.inst-clarity u,.coord-trust u{display:block;height:100%;background:var(--seal)}.inst-timeline,.appperf-years{list-style:none;margin:0;padding:0}.inst-timeline li,.appperf-years li{position:relative;padding:0 0 18px 26px}.inst-timeline li:before,.appperf-years li:before{content:'';position:absolute;left:6px;top:8px;bottom:-4px;width:2px;background:rgba(164,52,43,.35)}.inst-timeline li:last-child:before,.appperf-years li:last-child:before{display:none}.inst-timeline li>i,.appperf-years li>i{position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid var(--seal);border-radius:50%;background:var(--paper)}.inst-timeline li.current>i{background:var(--seal)}.inst-timeline li div,.appperf-years li div{display:grid;grid-template-columns:1fr auto;gap:3px 12px}.appperf-card>i{position:absolute;inset:0 auto 0 0;width:4px;background:#8d887d}.appperf-card.grade-excellent>i{background:#b88a25}.appperf-card.grade-steady>i{background:#357456}.appperf-card.grade-mistake>i,.appperf-card.grade-risk>i{background:#a4342b}.appperf-card dl{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:0}.appperf-card dl div{padding:7px;background:rgba(138,107,47,.06);border-radius:6px}.appperf-card dt{font-size:11px;color:var(--muted)}.appperf-card dd{margin:2px 0 0;font-weight:700}.appperf-open{min-height:44px}.appperf-detail>header>div{display:flex;gap:10px}.appperf-avatar{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:var(--seal);color:#fff;font-weight:900}.appperf-boundary{padding:9px;border-left:3px solid var(--gold);background:#fbf3df;font-size:13px}.coord-rel-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.coord-chain-rel{display:grid;gap:8px;border:1px solid var(--line);border-radius:8px;padding:11px;background:var(--paper)}.coord-lead-seal{font-style:normal;color:var(--seal);border:1px solid var(--seal);padding:2px 6px;transform:rotate(-3deg)}.coord-debt{color:#874b13;background:#fff0d3}.coord-trust{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:7px}.coord-promise.done,.coord-commit .done{background:#e8f4ea;color:#276b38}.coord-promise.wait,.coord-commit .wait{background:#fff0d3;color:#805c00}.coord-promise.paper,.coord-commit .paper{background:rgba(90,70,45,.1)}.coord-lead-big{padding:6px 10px;border:2px solid var(--seal);color:var(--seal);transform:rotate(-2deg)}.coord-commit,.coord-result{padding:11px;border-left:3px solid var(--gold);background:#fbf3df}.coord-basic-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.coord-credit-actions button{display:grid;gap:3px;place-items:center;min-height:54px}.coord-final{border-color:rgba(164,52,43,.42)}
/* CHAIN124 QA2：弹窗内 36px 规则权重修正 + 移动端正文宽度 + 遮挡 */
.modal-body .inst-decisions>*,.modal-body .appperf-actions>*,.modal-body .coord-credit-actions>*,.modal-body .inst-confirm,.modal-body .appperf-open,.modal-body .inst-danger-confirm>div>button,.modal-body .appperf-confirm>div>button,.modal-body .coord-chain-confirm>div>button,.modal-body .coord-chain-rel>.chip,.modal-body .coord-basic-actions>.chip{min-height:44px!important}
.modal-body .inst-choice,.modal-body .inst-angle{min-height:64px!important}
/* CHAIN124 QA3：列表唯一入口 + 返回 + 关闭也要 44px。
   `.inst-open` 是收文/发文夹里唯一的进详情入口（原先吃 `.modal-body .chip` 的 36px）；
   `.modal-back` / 头部「关闭」在 `.modal-head` 里，是 `.modal-body` 的**兄弟**，
   写 `.modal-body .modal-back` 命中不了 —— 必须从 `.modal-head` 下压。
   `.modal-back` 基样式在第 801 行 `padding:5px 11px`，要显式覆盖上下来给足高度。 */
.modal-body .inst-open{min-height:44px!important;padding-top:10px;padding-bottom:10px}
.modal-head .modal-back,.modal-head .btn.ghost{min-height:44px!important;padding-top:10px;padding-bottom:10px;display:inline-flex;align-items:center}
/* 详情头部「类型 + 状态」同排：两枚徽标收进一行，标题独占下一行，390 下也不挤成三行碎片。 */
.inst-detail-head .inst-badges{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:4px}
.inst-detail-head .inst-kind,.inst-detail-head .inst-state{white-space:nowrap;flex:0 0 auto}
/* CHAIN124 QA4：390 二级页头部挤压。实测 390 可用宽 310：h3「请示责任链」被压成 2 行 68.4px，
   `.modal-back` scrollWidth 125 > clientWidth 103（文字被裁，省略号也画不出来），
   「关闭」折成两行 58px。
   ⚠ 别用 flex-wrap + 标题 `flex:1 1 auto`：flex 断行按 max-content 预估，标题一长
   （11 字「督查督办与整改销号台账」）就把「关闭」拉到次行左侧，320px 下更裂成
   「标题 / 关闭 / 返回」三行 —— 排布取决于标题长度和屏宽，不可控。
   固定两行网格：首行「标题 | 关闭」，次行「（空）| ← 返回」，返回与关闭右边缘对齐成一列。
   标题只吃第 1 列，任何长度都单行省略；1280 在媒体查询外，完全不受影响。
   另外全宽度给标题加省略：481–700px 这段长标题（16 字）原本也会把头部撑成
   「标题两行 / 关闭两行 / 返回被裁」，这一条是既有缺陷，与窄屏无关，一并根修。 */
.modal-head h3{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.modal-head .modal-back,.modal-head .btn.ghost{flex:0 0 auto;white-space:nowrap}
@media(max-width:480px){
  .modal-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:8px;row-gap:6px}
  .modal-head h3{grid-area:1/1;min-width:0;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
  .modal-head .btn.ghost[data-close]{grid-area:1/2;justify-self:end;white-space:nowrap}
  .modal-head .modal-back{grid-area:2/1/3/3;justify-self:end;margin-left:0;max-width:100%;flex:0 0 auto}
}
/* ≤340px 把标题再让出 10px：320 下「请示责任链」max-content 110px、可用只有 109px，
   差 1px 就出省略号变成「请示责任…」。横向内边距 22→18（+8）、列间距 8→6（+2），
   同时 18px 也刚好靠近正文的 16px 内边距，视觉上更齐。390 及以上不受影响。 */
@media(max-width:340px){
  .modal-head{padding-left:18px;padding-right:18px;column-gap:6px}
}
/* 确认层小字：全局 `.modal-body p` 是 15px!important，这里要用更具体的选择器 + !important 才压得住。 */
.modal-body .inst-danger-confirm>p,.modal-body .appperf-confirm>p,.modal-body .coord-chain-confirm>p,.modal-body p.inst-confirm-note{font-size:13px!important;line-height:1.65!important;font-weight:600!important;padding:6px 8px!important;margin:0}
.inst-confirm-note,.appperf-confirm p,.coord-chain-confirm p,.inst-danger-confirm p{font-size:13px;line-height:1.65;padding:6px 8px;margin:0}
/* 弹窗打开时常驻工具条（sd-link，z-index:99998）会压住弹层底部按钮：整层让开。 */
body:has(.modal) #sdLinkDock{z-index:60!important;opacity:0!important;pointer-events:none!important}
/* 双空合并后的单空态：给一个明确的下一步按钮；单侧空态用 slim 版不抢戏。 */
.inst-empty-next{justify-self:center;margin-top:4px;text-decoration:none}
.inst-empty-slim{padding:16px 12px;background:rgba(138,107,47,.03)}
.inst-empty-slim b{font-size:14px}
.inst-empty-slim p{margin:0;font-size:13px;color:var(--muted)}
/* 逐部门承诺三态：只有数据里真有承诺才出现，颜色与「已转督办/等待批示」同源。 */
.coord-commit-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.coord-commit-state{display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:800;background:rgba(90,70,45,.1)}
.coord-commit-state.done{background:#e8f4ea;color:#276b38}
.coord-commit-state.overdue{background:#fde3e1;color:#9d2822}
.coord-commit-state.todo{background:#fff0d3;color:#805c00}
@media(max-width:480px){.modal-box{border-width:20px!important;border-image-width:20px!important;border-image-slice:200!important}.modal-body{padding:16px!important;font-size:15.5px!important}.modal-box .modal-body{max-height:calc(92vh - 40px)}.inst-desk,.inst-detail,.appperf-list,.appperf-detail,.coord-chain{overflow-x:hidden}}
.ofc-inst-card [data-act="instdesk"],.org-acts [data-act="appperf"],.mc-item [data-act="coordchain"]{min-height:44px}
@media(max-width:390px){.inst-choice-grid,.inst-decisions,.appperf-actions,.coord-rel-grid,.coord-credit-actions,.inst-danger-confirm>div,.appperf-confirm>div,.coord-chain-confirm>div{grid-template-columns:1fr}.inst-detail-head,.appperf-detail>header,.coord-chain-head{display:grid}.inst-choice,.inst-angle,.inst-decisions>*,.appperf-actions>*,.coord-credit-actions>*{width:100%;min-height:44px}.promo-window+.acts .chip{width:100%;min-height:44px}.exp-stats b{font-size:16px}.exp-stats small{font-size:11px}.rect-desk{overflow-x:hidden}.rect-card>.rect-btn{width:100%;min-height:44px}.ofc-inst-card [data-act="instdesk"],.org-acts [data-act="appperf"],.mc-item [data-act="coordchain"]{width:100%;min-height:44px}}
/* ★ 2026-10-28 大设计主席四界面（cstage/war/pbc/brief）—— 沿用链条界面口径：
   paper 渐变分区 / seal 印色 / 44px 触点 / 480px 收边。 */
.cstage-wrap,.brief-desk{display:grid;gap:12px;color:var(--ink)}
.cstage-act,.war-banner,.war-rebuild,.pbc-strip{border:1px solid var(--line);border-radius:10px;padding:12px;background:linear-gradient(145deg,rgba(255,253,246,.94),rgba(248,240,222,.72))}
.cstage-act>b,.pbc-strip>b,.war-banner>b{display:block;margin-bottom:5px}
.cstage-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.cstage-meter,.war-meter{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;margin-top:7px;font-size:12.5px}
.cstage-meter i,.war-meter i{display:block;height:7px;background:rgba(90,70,45,.14);border-radius:99px;overflow:hidden}
.cstage-meter u,.war-meter u{display:block;height:100%;background:var(--seal)}
.cstage-meter.ok u,.war-meter.ok u{background:#357456}
.cstage-meter.bad u,.war-meter.bad u{background:#a4342b}
.cstage-speech textarea{width:100%;margin-top:6px}
.cstage-confirm{width:100%;min-height:44px;margin-top:8px}
.war-banner{border-color:rgba(164,52,43,.42)}
.war-banner.war-rebuild{border-color:#357456;background:linear-gradient(145deg,rgba(232,244,234,.9),rgba(248,240,222,.7))}
.war-front{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:800;background:rgba(138,107,47,.12);vertical-align:middle}
.war-front.good{background:#e8f4ea;color:#276b38}
.war-front.bad{background:#9d2822;color:#fff}
.war-negotiate{min-height:44px;margin-top:8px}
.pbc-members{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.pbc-member{display:grid;grid-template-columns:auto 56px auto;align-items:center;gap:6px;border:1px solid var(--line);border-radius:8px;padding:5px 8px;background:var(--paper);font-size:12.5px}
.pbc-loy{display:block}
.pbc-loy i{display:block;height:6px;width:56px;background:rgba(90,70,45,.14);border-radius:99px;overflow:hidden}
.pbc-loy u{display:block;height:100%;background:var(--seal)}
.pbc-member.loy-hi b{color:#357456}
.pbc-member.loy-mid b{color:#b88a25}
.pbc-member.loy-lo b{color:#a4342b}
.brief-item{position:relative;display:grid;gap:7px;border:1px solid var(--line);border-radius:9px;padding:12px 12px 12px 17px;background:var(--paper)}
.brief-item>i{position:absolute;inset:0 auto 0 0;width:4px;background:#b88a25;border-radius:3px 0 0 3px}
.brief-item.sev-red{border-color:rgba(164,52,43,.35)}
.brief-item.sev-red>i{background:#a4342b}
.brief-item header{display:flex;justify-content:space-between;align-items:center;gap:8px}
.brief-item header b{font-size:14px}
.brief-badge{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:800;white-space:nowrap}
.brief-badge.sev-red{color:#fff;background:#9d2822}
.brief-badge.sev-yellow{color:#874b13;background:#fff0d3}
.brief-actions{display:flex;gap:8px;flex-wrap:wrap}
.brief-actions .chip{min-height:44px}
.brief-empty{display:grid;justify-items:center;gap:8px;padding:24px;text-align:center;border:1px dashed var(--line);border-radius:10px}
.brief-empty-seal{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--seal);color:var(--seal);font-size:20px;font-weight:900;transform:rotate(-4deg)}
.brief-missed{padding:9px;border-left:3px solid var(--gold);background:#fbf3df;font-size:13px}
.brief-office [data-act="brief"]{min-height:44px}
@media(max-width:480px){.cstage-wrap,.brief-desk{overflow-x:hidden}.cstage-row .chip,.brief-actions .chip{flex:1 1 auto}.pbc-member{grid-template-columns:auto 44px auto}.cstage-meter,.war-meter{grid-template-columns:auto 1fr}}
/* ★ 2026-10-28 深度美化：满届评价 + 呈报编号/已阅列 + 战损刻度 + 幕序印章 */
.headexit-desk{display:grid;gap:10px;color:var(--ink)}
.headexit-lead{font-size:14px}
.headexit-ledger{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0}
.headexit-ledger>div{padding:9px 6px;background:rgba(138,107,47,.06);border-radius:8px;text-align:center}
.headexit-ledger dt{font-size:11px;color:var(--muted)}
.headexit-ledger dd{margin:3px 0 0}
.headexit-ledger dd b{font-size:19px;margin-right:3px}
.headexit-ledger dd span{font-size:11px;color:var(--muted)}
.headexit-meter{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;font-size:12.5px}
.headexit-meter i{display:block;height:7px;background:rgba(90,70,45,.14);border-radius:99px;overflow:hidden}
.headexit-meter u{display:block;height:100%;background:var(--seal)}
.headexit-meter.ok u{background:#357456}
.headexit-meter.bad u{background:#a4342b}
.headexit-tag{margin:0;padding:8px 10px;border-left:3px solid var(--gold);background:#fbf3df;font-size:13px}
.headexit-capped{padding:8px 10px;border:1px dashed var(--seal);color:var(--seal);border-radius:8px;font-size:13px}
.headexit-renew{min-height:44px}
.brief-no{font-style:normal;color:var(--muted);font-size:11px;font-weight:400;margin-right:5px}
.brief-done{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12.5px}
.brief-done-item{border:1px solid var(--line);border-radius:999px;padding:3px 9px;background:rgba(232,244,234,.6);color:#276b38}
.brief-office.has-red .cc-body>b::after{content:'●';color:#a4342b;margin-left:6px;font-size:12px;vertical-align:2px}
.war-meter i{position:relative}
.war-meter i::before{content:'';position:absolute;left:60%;top:-3px;bottom:-3px;width:2px;background:rgba(164,52,43,.5)}
.war-meter i::after{content:'';position:absolute;left:90%;top:-3px;bottom:-3px;width:2px;background:rgba(164,52,43,.8)}
.war-talks{background:rgba(90,70,45,.1)}
.cstage-seal{display:inline-grid;place-items:center;width:22px;height:22px;margin-right:7px;border:2px solid var(--seal);color:var(--seal);font-size:12px;font-weight:900;font-style:normal;transform:rotate(-6deg);vertical-align:-5px}
.cstage-done-mark{font-style:normal;color:#276b38;font-size:12px;font-weight:700;margin-left:8px}
.cstage-act.act-done{opacity:.72}
@media(max-width:480px){.headexit-ledger{grid-template-columns:1fr 1fr}.headexit-meter{grid-template-columns:auto 1fr}}
.pbc-member.loy-hi .pbc-loy u{background:#357456}
.pbc-member.loy-mid .pbc-loy u{background:#b88a25}
.pbc-member.loy-lo .pbc-loy u{background:#a4342b}
/* ★ 2026-10-28 总理满届评价（pmexit-*，与 headexit-* 同款手法） */
.pmexit-desk{display:grid;gap:10px;color:var(--ink)}
.pmexit-lead{font-size:14px}
.pmexit-ledger{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0}
.pmexit-ledger>div{padding:9px 6px;background:rgba(138,107,47,.06);border-radius:8px;text-align:center}
.pmexit-ledger dt{font-size:11px;color:var(--muted)}
.pmexit-ledger dd{margin:3px 0 0}
.pmexit-ledger dd b{font-size:19px;margin-right:3px}
.pmexit-ledger dd span{font-size:11px;color:var(--muted)}
.pmexit-meter{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;font-size:12.5px}
.pmexit-meter i{display:block;height:7px;background:rgba(90,70,45,.14);border-radius:99px;overflow:hidden}
.pmexit-meter u{display:block;height:100%;background:var(--seal)}
.pmexit-meter.ok u{background:#357456}
.pmexit-meter.bad u{background:#a4342b}
.pmexit-tag{margin:0;padding:8px 10px;border-left:3px solid var(--gold);background:#fbf3df;font-size:13px}
.pmexit-capped{padding:8px 10px;border:1px dashed var(--seal);color:var(--seal);border-radius:8px;font-size:13px}
.pmexit-renew{min-height:44px}
@media(max-width:480px){.pmexit-ledger{grid-template-columns:1fr 1fr}.pmexit-meter{grid-template-columns:auto 1fr}}
