/* 审核中心（PKG-026-T01 · 照老项目原型 `proto/原型/assets/review-sources.css` 的做法）。
 *
 * **三档来源**（原型原话）：
 *   · 蓝 `--blue`     ＝ 代码/规则提出（`review-source-automation`）；
 *   · 绿 `--green-ink`＝ AI 建议（`review-source-assistant`）；
 *   · 黄绿 `--official`＝ 官文信息待核对（`review-source-official`）—— **第三档，本批新补**。
 *   颜色**只许来自令牌**（§1.3）⇒ 第三档的令牌 `--official / --official-ink / --officiald`
 *   定义在 `css/deepseek.css` 的 `:root`（全站令牌只定义一处）。
 *
 * **呼吸文字**：待确认的值用**彩色呼吸文字**（`.proposed-text` ＋ `data-proposal-state`），
 *   已保存的用**黑字粗体**（原型图例：「彩色文字呼吸：待确认　黑字粗体：已保存」）。
 *   动画复用公共的 `review-source-pulse`（在 `css/chat-module.css` 里），这里不重写一份。
 *
 * ⚠️ **弹窗的外框不在这里**（2026-10-23）：审核中心那扇大弹窗走**公共弹窗件** `.os-dialog`
 *   （`css/workbench.css`），外框（边框/圆角/背景/字色/遮罩/按钮尺寸）**一律归公共件**，
 *   这里只写它的**修饰类**（宽高与三段排法）。早先这里手抄的那套 `.review-center-dialog` 外框
 *   **已经删干净**（全仓没有任何 JS 建那个类 —— 留着只会让人以为弹窗还在用它）。
 */
.review-center-head {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 16px 18px 12px;
  border-bottom: 1px solid var(--line);
}
.review-center-headings { flex: 1; min-width: 0; }
.review-center-eyebrow { font-size: 11px; color: var(--fg3); letter-spacing: .4px; }
.review-center-head h2 { margin: 3px 0 0; font-size: 18px; font-weight: 650; letter-spacing: 0; }
.review-center-head .iconbutton { border: 0; background: none; font-size: 18px; color: var(--fg3); cursor: pointer; padding: 0 4px; }

.review-tabs { display: flex; gap: 6px; padding: 10px 18px; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.review-tab {
  display: inline-flex; align-items: center; gap: 6px;
  height: 30px; padding: 0 10px; cursor: pointer;
  border: 1px solid var(--line2); border-radius: var(--r-sm);
  background: var(--card); color: var(--fg2); font: inherit; font-size: 12px;
}
.review-tab[data-review-active="1"] { border-color: var(--green); color: var(--green-ink); background: var(--accd); }
.review-tab-count { font-size: 11px; color: var(--fg3); font-variant-numeric: tabular-nums; }

.review-center-body { padding: 14px 18px; max-height: 56vh; overflow: auto; }
.review-center-note { margin: 0 0 10px; font-size: 12px; color: var(--fg3); }
.review-empty { margin: 24px 0; text-align: center; font-size: 12px; color: var(--fg3); }

.review-select-all {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 8px 10px; margin-bottom: 10px;
  border: 1px solid var(--line); border-radius: var(--r); background: var(--bg-alt);
  font-size: 12px; color: var(--fg2);
}
.review-select-all label { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }

.review-item {
  padding: 12px 0; border-top: 1px solid var(--line); min-width: 0;
}
.review-item:first-of-type { border-top: 0; }
.review-item-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.review-item-pick { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; font-size: 13px; }
.review-item-state { font-size: 11px; color: var(--fg3); flex-shrink: 0; }

.review-value-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 8px 0; }
.review-value-cell { min-width: 0; }
.review-value-cell label { display: block; font-size: 11px; color: var(--fg3); margin-bottom: 2px; }
.review-value-cell p { margin: 0; font-size: 13px; overflow-wrap: anywhere; }
.review-value-cell .official-value { color: var(--fg); font-weight: 600; }

/* 彩色呼吸文字：待确认 ⇒ 呼吸；已保存 ⇒ 黑字粗体；过期 ⇒ 灰字不呼吸。
   ⚠️ **呼吸只用透明度**：旧项目那档是 `ip-candidate-breathe 2.4s`（`0%,100%{opacity:1} 50%{opacity:.55}`）。
   公共的 `review-source-pulse` **会缩放文字**（`transform:scale(.85)→scale(1.15)`）⇒ 文字在长长缩缩、
   还会挤动版面 ⇒ 违反契约 §interaction「呼吸仅改变视觉轻重，不移动文字、不造成布局跳动」。
   ⇒ 审核中心自己用一条**只改透明度**的呼吸，节奏照旧项目那档 2.4s。 */
@keyframes review-candidate-breathe { 0%,100% { opacity:1; } 50% { opacity:.55; } }
.review-value-cell .proposed-text { color: var(--blue); animation: review-candidate-breathe 2.4s ease-in-out infinite; }
.review-item.source-official .proposed-text { color: var(--official-ink); }
.review-item.source-assistant .proposed-text { color: var(--green-ink); }
.review-value-cell .proposed-text[data-proposal-state="failed"] { color: var(--fg3); animation: none; }
.review-value-cell .proposed-text[data-proposal-state="confirmed"],
.review-value-cell .proposed-text[data-proposal-state="applied"] { color: var(--fg); font-weight: 600; animation: none; }

.review-evidence { margin: 8px 0 0; font-size: 12px; color: var(--fg2); }
.review-evidence p { margin: 2px 0; overflow-wrap: anywhere; }
.review-footnote { display: block; margin-top: 6px; font-size: 11px; color: var(--fg3); }
.review-error { margin: 6px 0 0; font-size: 12px; color: var(--red); }
.review-receipt { margin: 6px 0 0; font-size: 12px; color: var(--green-ink); }
.review-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }

.review-checklist { display: grid; gap: 4px; margin: 8px 0 0; }
.review-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--fg2); cursor: pointer; }

.review-inline-form { margin-top: 8px; padding: 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--bg-alt); }
.review-inline-form textarea {
  display: block; box-sizing: border-box; width: 100%; resize: vertical; margin: 4px 0 0;
  padding: 8px; background: var(--card); color: var(--fg);
  border: 1px solid var(--line2); border-radius: var(--r-sm); font: inherit; font-size: 12px;
}

.review-center-footer {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  padding: 12px 18px; border-top: 1px solid var(--line); background: var(--bg-alt);
}
.review-footer-status { font-size: 12px; color: var(--fg2); }
.review-footer-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.review-confirm-notice { margin: 0; font-size: 12px; color: var(--fg2); }
.review-confirm-list { margin: 4px 0; padding-left: 18px; font-size: 12px; color: var(--fg2); max-height: 96px; overflow: auto; }

/* 来源徽标 ＋ 呼吸点（三档：蓝 / 绿 / 黄绿）。 */
.review-source-badge { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; color: var(--fg2); }
.review-source-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex-shrink: 0; }
.review-source-automation .review-source-dot { background: var(--blue); animation: review-source-pulse 1.6s ease-in-out infinite; }
.review-source-assistant .review-source-dot { background: var(--green); animation: review-source-pulse 1.6s ease-in-out infinite; }
.review-source-official .review-source-dot { background: var(--official); animation: review-source-pulse 1.6s ease-in-out infinite; }
.review-source-official .review-source-badge { color: var(--official-ink); }

/* 侧栏入口：「待核对」＋ 待核对总数徽标（用户 2026-10-22 15:35 批注后，页头那条横条全站去掉了）。
   ⚠️ `.side-item` 是 `display:flex` ⇒ 光靠 `hidden` 属性**藏不住**
   （作者样式压过浏览器默认的 `[hidden]{display:none}`）⇒ 这里显式写一条。
   徽标一个样：没有待办就藏起来。 */

/* —— 审核中心**独立页**（PKG-028-T01）——
   版式用平台现成的骨架：`.platform-page`（页容器）＋ `.page-hd`（页头条）＋ `.platform-section`（内容块）。

   ⚠️ **左右留白只用公共壳那一层**（规范 §2.1.2 · PKG-029-T01 的三层标准）：
     L1 页面内容列 ＝ `.platform-page` 的 padding（26px／窄屏 16px）—— **这一页自己不再加**；
     L2 页头条 ＝ 横向 0（标题文字与内容块外沿同一条竖线）；
     L3 内容块 ＝ 横向 0 ＋ 块内 padding 16px（`.platform-section` 自带）。
   ⇒ 这一页只补**域/壳自己那一层**（页头字号、面包屑、页内部件的留白归零），
     **不另定一套边距**（另一批「边距统一」动到 `.platform-page` 时这里跟着它走）。
   ⚠️ 弹窗（那扇左右分栏的大窗）走**公共弹窗件** `.os-dialog` —— 这一段只管独立页。 */
/* ⚠️ **只留纵向，横向那一层留给公共壳**（PKG-031-T01）：
   这一页的页面根容器**就是** `.platform-page` 那一个元素，
   以前写 `padding:0 0 18px`（简写）⇒ 把公共壳给的横向 26px **一起**盖成了 0
   ⇒ 这一页落在 24px（`.main-scroll` 那一层）而不是参照系的 26px。
   ⇒ 改成长写 `padding-bottom`，横向 26px 由 `.platform-page` 的 L1 给，底部 18px 照旧。 */
.review-center-page { padding-bottom: 18px; }
.review-center-crumb { padding: 14px 0 10px; color: var(--fg3); font-size: 11px; }
.review-center-crumb span { margin: 0 6px; color: var(--line); }
.review-center-page .page-hd h1 { margin: 0; font-size: 20px; font-weight: 650; letter-spacing: 0; }
.review-center-page .page-hd .sub { margin-top: 5px; color: var(--fg3); font-size: 11.5px; line-height: 1.7; }
.review-center-section { display: flex; flex-direction: column; min-width: 0; }

/* —— 卡片列表的「待处理／已处理」两档 ＋ 搜索（旧项目那页就有这两样） —— */
.review-center-tools {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 0 0 10px;
}
.review-state-tabs { display: inline-flex; gap: 4px; }
.review-state-tab {
  height: 28px; padding: 0 12px; cursor: pointer;
  border: 1px solid var(--line2); border-radius: var(--r-sm);
  background: var(--card); color: var(--fg2); font: inherit; font-size: 12px;
}
.review-state-tab[data-review-active="1"] {
  border-color: var(--green); color: var(--green-ink); background: var(--accd);
}
.review-center-tools input[data-review-search] {
  flex: 1 1 220px; min-width: 160px; max-width: 360px;
  height: 30px; padding: 0 10px;
  border: 1px solid var(--line2); border-radius: var(--r-sm);
  background: var(--card); color: var(--fg); font: inherit; font-size: 12px;
}
.review-center-tools input[data-review-search]:focus-visible {
  outline: 2px solid var(--green); outline-offset: 1px;
}

/* 页内的部件沿用弹窗那套（同一批部件，只是容器不同）⇒ 只把「弹窗留白」去掉。 */
.review-center-section .review-tabs { padding: 10px 0; }
.review-center-section .review-center-body { padding: 14px 0; max-height: none; overflow: visible; }
/* 页级底栏**只在保存后有回执时**才挂出来（平时不挂 —— 用户 2026-10-23：背后要精简）。 */
.review-center-section .review-center-footer {
  position: sticky; bottom: 0; padding: 12px 0;
  background: var(--bg); border-top: 1px solid var(--line);
}

/* 「AI 建议修改」指路条：这一页**不审** AI ⇒ 指到尚书对话里处理（老项目口径：AI 归助手）。 */
.review-agent-jump {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 12px; padding: 10px 12px;
  border: 1px solid var(--line); border-radius: var(--r); background: var(--bg-alt);
  font-size: 12px; color: var(--fg2);
}
.review-agent-jump-title { font-weight: 650; color: var(--fg); }
.review-agent-jump-count { color: var(--fg3); font-size: 11px; }
.review-agent-jump-text { flex: 1; min-width: 0; color: var(--fg3); }

@media (prefers-reduced-motion: reduce) {
  .review-value-cell .proposed-text,
  .review-source-automation .review-source-dot,
  .review-source-assistant .review-source-dot,
  .review-source-official .review-source-dot { animation: none !important; }
}

/* —— 审核中心（公共闸门版 · PKG-033-T01）——
   页面本体归核心域；域只注册**声明**。这一段是公共壳的新版式：
     · **凭据级卡片**（一份凭据 ＝ 一组变更，卡片上不点开也知道要不要现在看）；
     · **左右分栏的大弹窗**（左＝要改成什么，右＝凭据）—— 一套渲染器、两个槽位。

   ⚠️ 留白口径照旧：横向那一层由 `.platform-page` 给（26px／窄屏 16px），
   页内各块横向一律 0（规范 §2.1.2 的 L1/L2/L3 三层）。 */

/* —— 凭据级卡片 ——
   ⚠️ 2026-10-23（用户 10:1x 批注：「**卡片信息太多了**，去看看原版的那个卡片」）：
   早先这张卡上摆着：域标签 ＋ 摘要 ＋ **字段对照表（现值→候选值）** ＋ 项数 ＋ **凭据逐条名** ＋ 动作。
   原版（旧项目实际文件审核页 `.fr-file-card`）只有 5 样：
   **图标 ＋ 标题／类型·大小／上传时间／关联案件／动作** ⇒ 照那一档收：
     · 卡头＝**类型块 ＋ 凭据名 ＋ 状态**；
     · 一行**元信息**＝类型 · 共 N 项待核对（原版的「类型 · 大小」）；
     · 一行**关联案件**（原版那块灰底）；
     · **动作**（打开核对）。
   **字段对照表与凭据逐条名都撤了** —— 逐项核对在**弹窗左栏**，原件在**弹窗右栏**。 */
.review-card {
  padding: 14px 0; border-top: 1px solid var(--line); min-width: 0;
}
.review-card:first-of-type { border-top: 0; }
.review-card-head { display: flex; align-items: center; gap: 10px; }
/* 类型块＝原版那个小方块（浅绿底 ＋ 扩展名/类型字）。 */
.review-card-icon {
  flex: none; min-width: 34px; height: 26px; padding: 0 8px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 5px; background: var(--accd); color: var(--green-ink);
  font-size: 11px; font-weight: 600; letter-spacing: .3px;
}
.review-card-title {
  margin: 0; flex: 1; min-width: 0; font-size: 14px; font-weight: 650; letter-spacing: 0;
  overflow-wrap: anywhere;
}
.review-card-head .review-item-state { flex: none; }
.review-card-meta { margin: 7px 0 0; font-size: 12px; color: var(--fg2); }
/* 关联案件＝原版那块灰底（标签 ＋ 值同一行）。 */
.review-card-case {
  margin: 7px 0 0; padding: 6px 10px; border-radius: 4px;
  background: var(--bg-alt); font-size: 12px; color: var(--fg2); overflow-wrap: anywhere;
}

/* —— 左右分栏的大弹窗 ——
   ⚠️ 2026-10-23（用户：「这个弹窗就不是我们尚书的统一样式，也没有复用任何的组件」）：
   早先这里**自己手抄了一份外壳**（边框/圆角/背景/字色/遮罩）⇒
   **公共件的规则一条都不生效** —— `.os-dialog header/main/footer`、`.os-dialog .btn`
   全都挂在那个类底下 ⇒ 底栏那个「整组保存」掉回浏览器默认（高 23px、内边距 1px 6px）、
   弹窗字体掉回页面默认（预览页里甚至掉回衬线体）、遮罩也太浅（背后页面透出来抢眼）。
   ⇒ 现在：**外框一律不写**（字体/圆角/背景/遮罩/按钮尺寸全归公共件 `css/workbench.css`），
   这个修饰类**只管宽高与三段布局**。范本：`.os-dialog.mail-review-dialog`。 */
.os-dialog.review-split {
  width: min(1180px, 94vw);
  height: min(820px, 90vh);
  max-width: calc(100vw - 32px);
  max-height: calc(100dvh - 32px);
  overflow: hidden;
}
/* —— **弹窗本体是竖向弹性盒**（旧项目那套排法：`ip.css` 的 `.fr-review{display:flex;flex-direction:column}`）。
   ⚠️ 必须带 `[open]`：`<dialog>` 没打开时靠 UA 的 `dialog:not([open]){display:none}` 藏着，
   不带 `[open]` 写 `display:flex` 会把**没打开的弹窗也摆出来**。 */
.os-dialog.review-split[open] { display: flex; flex-direction: column; }
/* 公共件 `.os-dialog header` 给了 flex/对齐/分隔线；这里只改**这一栏**要的两处。
   ⚠️ 修饰类必须带 `.os-dialog ` 前缀（两个类 ＝ 0,2,0）——
   只写 `.review-split-head`（0,1,0）**压不过**公共件的 `.os-dialog header`（0,1,1）。 */
.os-dialog .review-split-head {
  align-items: flex-start;  /* 表头是上下两行 ⇒ 顶对齐（公共件是居中） */
  padding: 12px 18px 10px;  /* 留白收一档（公共件 14px 20px） */
  flex: none;               /* 表头不压缩（旧项目 `.fr-header{flex:none}`） */
}
.review-split-titles { flex: 1; min-width: 0; }
.review-split-domain {
  /* 徽标是**行内件** —— 块级会把底色铺满整行（弹窗表头里成一条灰带，2026-10-23 实踩）。 */
  display: inline-block;
  font-size: 11px; color: var(--fg2);
  padding: 1px 7px; border-radius: var(--r-xs);
}
.review-split-head h2 { margin: 3px 0 0; font-size: 17px; font-weight: 650; letter-spacing: 0; }
.review-split-summary { margin: 4px 0 0; font-size: 12px; color: var(--fg3); }
.review-split-head .iconbutton { border: 0; background: none; font-size: 18px; color: var(--fg3); cursor: pointer; padding: 0 4px; }

/* —— 左右分栏的大弹窗 ——
   ⚠️ **两栏的比例照旧项目那档**（`三英知识产权/开发/尚书管理系统` 的 `ip.css`）：
   旧版 `.fr-review-dialog .fr-body` ＝ `minmax(360px,0.8fr) minmax(0,1.2fr)`、间距 16px
   ⇒ **左栏窄（字段块那一列）、右栏宽（原件那一列要放得下一页）**。
   早先这里写的是 `1fr 1fr`（两栏一样宽）⇒ 原件那页被挤成半栏 —— 与旧版完全不是那个观感。 */
/* 公共件 `.os-dialog main` 是 `padding:20px;overflow:auto;max-height:60dvh`
   ⇒ 那是给「单栏短正文」弹窗的；左右分栏这一档要**两栏各自滚** ⇒ 逐条改掉。
   ⚠️ 同样必须带 `.os-dialog ` 前缀（0,2,0）才压得过公共件的 `.os-dialog main`（0,1,1）。 */
.os-dialog .review-split-body {
  display: grid;
  grid-template-columns: minmax(360px, 0.8fr) minmax(0, 1.2fr);
  gap: 16px;
  /* ⚠️ **不许再写死「这一栏多高」**：早先写的是 `height: calc(100% - 118px)`，
     而真实的表头高（91px）＋ 底栏高（~42px）＝ 133px > 118px
     ⇒ 多出来的那截从底栏上被裁掉（`.review-split` 是 `overflow:hidden`）
     ⇒ 「已核对 N/M 项」「整组保存」只露半条。
     现在照旧项目那套：这一栏**吃掉剩下的高度**（`flex:1` ＋ `min-height:0`），
     内容再多也只在自己这一栏里滚（`.review-slot{overflow:auto}`），底栏永远整条。 */
  flex: 1 1 auto;
  min-height: 0;
  max-height: none;
  overflow: hidden;
  padding: 0;
}
.review-slot { min-width: 0; overflow: auto; padding: 12px 16px; }
/* 右栏＝**一张纸**：灰底 ＋ 内衬，原件摆在中间（旧项目那栏就是这个观感）。 */
.review-slot-right {
  background: var(--bg-alt);
  border-radius: var(--r);
  padding: 16px;
}
.review-slot-title { margin: 0 0 10px; font-size: 13px; font-weight: 650; letter-spacing: 0; }
.review-slot-body { min-width: 0; }

/* 公共件 `.os-dialog footer` 是 `justify-content:flex-end;padding:12px 20px`；
   这一档是「左边进度、右边按钮」⇒ 改对齐，并**把留白收小**（用户 2026-10-23：
   「和底边的 padding 太大了，不美观」；邮件那条先例是 `padding:7px 18px`）。
   ⚠️ 同样要带 `.os-dialog ` 前缀（0,2,0）才压得过公共件（0,1,1）。 */
.os-dialog .review-split-foot {
  justify-content: space-between;
  gap: 12px;
  padding: 7px 18px;
  flex: none;   /* 底栏不压缩（旧项目 `.fr-footer{flex:none}`）—— 进度条与保存按钮整条可见 */
}
.review-split-progress { font-size: 12px; color: var(--fg2); font-variant-numeric: tabular-nums; }
.review-split-receipt { font-size: 12px; color: var(--green-ink); }

/* —— 两栏共用的内容件（field-table / email / pdf / image / text / attachment-list） —— */
/* 字段块＝**旧项目那套密排**：字段名 11px 小字在上一行、当前正式值弱化跟在后面、
   候选值在下一行整行（26px 高，是视觉重点）；不是上下两张对照卡。 */
.review-values { display: flex; flex-direction: column; gap: 0; }
.review-value-row { padding: 6px 0 7px; border-bottom: 1px solid var(--line); min-width: 0; }
.review-value-row:last-child { border-bottom: 0; }
.review-field-line { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.review-value-label { font-size: 11px; color: var(--fg3); flex: 0 0 auto; }
.review-value-before { font-size: 12px; color: var(--fg2); min-width: 0; overflow-wrap: anywhere; }
.review-value-row .review-value-cell { display: block; min-width: 0; }
.review-value-row .proposed-text { margin: 0; font-size: 14px; line-height: 26px; }
.review-change-state { font-size: 11px; color: var(--fg3); }
.review-value-cell .observed-text { margin: 0; font-size: 13px; color: var(--fg); overflow-wrap: anywhere; }

/* —— **原件本体**（右栏那一栏摆的是原件本身，不是文件名加一段摘录） —— */
.review-original {
  margin: 10px 0; border: 1px solid var(--line); border-radius: var(--r);
  background: var(--card); overflow: hidden;
}
.review-original iframe { display: block; width: 100%; height: 100%; min-height: 440px; border: 0; background: var(--card); }
.review-original img { display: block; max-width: 100%; height: auto; margin: 0 auto; }
.review-original pre {
  margin: 0; padding: 20px; white-space: pre-wrap; overflow-wrap: anywhere;
  font: 13px/1.8 inherit; color: var(--fg);
}
.review-original-failed { margin: 0; padding: 12px 14px; color: var(--red); font-size: 12px; }
.review-original-failed[hidden] { display: none; }

.review-emails, .review-pdfs, .review-images, .review-texts, .review-attachments { display: flex; flex-direction: column; gap: 10px; }
.review-email, .review-pdf, .review-image, .review-text {
  padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--bg-alt);
}
.review-email-head { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--fg2); }
.review-email-subject { margin: 6px 0 0; font-size: 13px; font-weight: 600; }
.review-email-body { margin: 6px 0 0; font-size: 12px; color: var(--fg2); white-space: pre-wrap; overflow-wrap: anywhere; }
.review-email-files { margin: 6px 0 0; padding-left: 18px; font-size: 12px; color: var(--fg3); }
.review-pdf-name { margin: 0; font-size: 13px; font-weight: 600; overflow-wrap: anywhere; }
.review-pdf-locator { margin: 4px 0 0; font-size: 11px; color: var(--fg3); }
.review-pdf-excerpt { margin: 6px 0; font-size: 12px; color: var(--fg2); white-space: pre-wrap; overflow-wrap: anywhere; }
.review-pdf-excerpt mark, .review-text-body mark { background: var(--accd); color: var(--green-ink); }
.review-text-body { margin: 4px 0 0; font-size: 12px; color: var(--fg2); white-space: pre-wrap; overflow-wrap: anywhere; }
.review-attachment { display: flex; align-items: center; gap: 10px; font-size: 12px; }
.review-attachment-name { color: var(--fg); overflow-wrap: anywhere; }
.review-attachment-meta { color: var(--fg3); font-size: 11px; }

/* —— 采用/改写的状态色（**变色不冒充成功**：本地采用 ≠ 已保存） —— */
.review-value-cell .proposed-text[data-proposal-state="adopted"],
.review-value-cell .proposed-text[data-proposal-state="edited"] {
  color: var(--fg); font-weight: 500; animation: none; cursor: pointer;
}
.review-value-cell .proposed-text[data-proposal-state="saved"] {
  color: var(--fg); font-weight: 600; animation: none;
}
.review-value-cell .proposed-text[data-proposal-state="failed"] { color: var(--fg3); animation: none; }
.review-value-cell .proposed-text { cursor: pointer; }
.review-value-cell textarea {
  display: block; box-sizing: border-box; width: 100%; resize: vertical;
  padding: 8px; background: var(--card); color: var(--fg);
  border: 1px solid var(--line2); border-radius: var(--r-sm); font: inherit; font-size: 13px;
}

