/* ==========================================================================
   知识产权领域样式（三英总表 / 案件详情 / 官文预览 / 邮件窗格 / 协作面板）
   复用平台设计令牌；只补本领域组件需要的布局与状态样式。
   排版规则遵循 css/ui-primitives.css（任务书 5.5）。
   ========================================================================== */

/* ============ 0. 领域令牌（U10）：本文件的变量只在这里定义一次 ============
   规则：
   1. 平台级令牌（--fg/--fg2/--fg3/--line/--line2/--bg/--bg-alt/--card/--green/
      --green2/--green-ink/--acc/--blue/--amber/--red/--r-*/--sans/--pop）
      由 css/deepseek.css 的 :root 定义。--green-ink 这类"看着像没定义"的变量
      归属就在那里，本文件只消费，不重定义。
   2. 运行时布局变量由 JS 或更具体的选择器在元素上设置（写在括号里的是设置方），
      这里只给兜底值，且与原兜底值一致：
      --ip-work-*（ip-cases.js 详情定位）、--mail-folders/--mail-list（ip-mail.js 三栏）、
      --ip-removal-width（ip-settings.js / ip-cases.js 回收弹窗）、
      --ip-page-gutter（本文件 .ip-master-page）、--sidebar-width/--ai-width（协作态布局）。
   3. 历史遗留别名（--text/--surface/--surface-soft/--bg1/--bg2/--danger/--font-sans/
      --accent/--proposal-ink/--review-source）此前只在各条规则里写 var(..., 兜底)，
      属于"被引用但没有定义"。这里一次性给出定义：取值等于原来最常用的那个兜底值，
      视觉不变；--accent/--proposal-ink/--review-source 原本没有统一兜底，
      按品牌语义（候选=蓝、执行来源=绿）定值。
   4. 仍然保留逐条兜底的三个变量（不在这里定义，因为同一变量在不同规则里的兜底值
      本来就不一致，统一定义会改动现有观感）：--border（3 处，兜底分别为
      #dfe2e5 / #e5e7eb / #d8dedb，属日志与旧模板区块）、--mail-folders / --mail-list
      （ip-mail.js 的 layout() 在元素上设置，窄屏规则另有 300px 兜底）。
   ========================================================================== */
:root {
  /* 间距（4 的倍数） */
  --ip-space-1: 4px; --ip-space-2: 8px; --ip-space-3: 12px; --ip-space-4: 16px;
  --ip-space-5: 20px; --ip-space-6: 24px; --ip-space-8: 32px;
  /* 文字层级：正文下限 12px，小标签 11px（不出现更小字号硬塞） */
  --ip-text-2xs: 11px; --ip-text-xs: 12px; --ip-text-sm: 12.5px;
  --ip-text-md: 13px; --ip-text-lg: 15px; --ip-text-xl: 17px;
  /* 边框与圆角 */
  --ip-line: var(--line); --ip-line-strong: var(--line2);
  --ip-radius-sm: var(--r-xs, 4px); --ip-radius-md: var(--r, 6px); --ip-radius-lg: var(--r-lg, 8px);
  /* 控件与按钮尺寸（--ip-touch-h 是触屏最小可点高度） */
  --ip-control-h: 32px; --ip-control-h-lg: 36px; --ip-touch-h: 44px;
  /* 状态色：颜色只是辅助，文字说明见本文件第 12 节与 ip-edit-state.js 的状态表。
     一个字段同一时刻只取一种状态，优先级：冲突 > 失败 > 保存中 > 手改未保存 >
                                        已采用待保存 > 候选 > 正式值 > 只读。 */
  --ip-state-formal: var(--fg);
  --ip-state-candidate-a: #7355cc;
  --ip-state-candidate-b: #2563eb;
  --ip-state-candidate-rule: #2563eb;
  --ip-state-candidate-agent: #10b981;
  --ip-state-candidate-official: #c1ff72;
  --ip-state-adopted: #171717;
  --ip-state-draft: #10b981;
  --ip-state-saving: #8a5a12;
  --ip-state-failed: #a12a2a;
  --ip-state-conflict: #8a5a12;
  --ip-state-readonly: rgba(0, 0, 0, .45);
  /* 运行时布局变量的兜底（设置方见本段第 2 条） */
  --ip-work-left: 0px; --ip-work-top: 0px; --ip-work-width: 100vw; --ip-work-height: 100dvh;
  --ip-removal-width: 380px; --ip-page-gutter: 24px;
  --sidebar-width: 176px; --ai-width: 36vw;
  /* 历史遗留别名：取值 = 原兜底值 */
  --text: #171717; --surface: var(--bg); --surface-soft: #f5f7f6;
  --bg1: #fafafa; --bg2: #f8f9f9; --danger: #b42318;
  --font-sans: var(--sans);
  /* 来源与提案墨色：由 .source-* 更具体地覆盖 */
  --review-source: var(--ip-state-candidate-agent);
  --proposal-ink: var(--ip-state-candidate-b);
  --accent: var(--green);
}

/* ============ 1. 三英总表（4.2） ============ */
.ip-cases { display: flex; flex-direction: column; min-width: 0; gap: 10px; padding: 12px 14px 18px; }
.ip-cases-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ip-cases-head > div:first-child { min-width: 0; }
.ip-cases-head h1 { margin: 0; font-size: 17px; }
.ip-cases-head p { margin: 4px 0 0; color: var(--fg3); font-size: 12.5px; overflow-wrap: anywhere; }
.ip-cases-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }

.ip-filter-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-alt); }
.ip-filter-form label { display: flex; min-width: 150px; max-width: 220px; flex: 1 1 150px; flex-direction: column; gap: 4px; color: var(--fg3); font-size: 12px; }
.ip-filter-form input, .ip-filter-form select { width: 100%; height: 34px; padding: 0 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }
.ip-filter-form input:disabled { cursor: not-allowed; opacity: .6; }
.ip-filter-search { max-width: 260px; }
.ip-filter-actions { display: flex; gap: 6px; }
.ip-filter-note { flex-basis: 100%; margin: 2px 0 0; color: var(--fg3); font-size: 12px; white-space: normal; overflow-wrap: anywhere; }

.ip-cases-columns { border: 1px solid var(--line); border-radius: 10px; background: var(--bg); padding: 12px; }
.ip-columns-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; margin-bottom: 8px; }
.ip-columns-head span { color: var(--fg3); font-size: 12px; }
.ip-columns-groups { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; }
.ip-columns-group { min-width: 0; }
.ip-columns-group b { display: block; margin-bottom: 4px; font-size: 12.5px; }
.ip-columns-group label { display: flex; align-items: center; gap: 6px; min-width: 0; font-size: 12.5px; }
.ip-columns-group label span { overflow-wrap: anywhere; }
.ip-columns-foot { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; margin-top: 10px; }
.ip-columns-foot label { display: flex; flex-direction: column; gap: 4px; color: var(--fg3); font-size: 12px; }
.ip-columns-foot input { height: 32px; padding: 0 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }

.ip-cases-body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; min-width: 0; }
.ip-cases[data-detail-open][data-detail-wide="1"] .ip-cases-body { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); }
.ip-cases-tablewrap { min-width: 0; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); overflow: auto; max-height: calc(100vh - 300px); }
.ip-cases-table-host { min-width: 0; }
.ip-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13.5px; }
.ip-table-caption { padding: 8px 10px; color: var(--fg3); font-size: 12px; text-align: left; }
.ip-table th, .ip-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); text-align: left; vertical-align: top; }
.ip-table th { position: sticky; top: 0; z-index: 2; background: var(--bg-alt); font-size: 12.5px; font-weight: 600; white-space: nowrap; }
.ip-table td { max-width: 340px; }
.ip-table tbody tr { cursor: pointer; }
.ip-table tbody tr:hover td { background: color-mix(in srgb, var(--green) 3%, var(--bg)); }
.ip-table tbody tr.is-selected td { background: color-mix(in srgb, var(--green) 7%, var(--bg)); }
.ip-table tbody tr:focus-visible { outline: 2px solid var(--green); outline-offset: -2px; }
/* 冻结案号列：表头固定，列本身 sticky */
.ip-table .is-frozen { position: sticky; left: 0; z-index: 1; background: var(--bg); }
.ip-table th.is-frozen { z-index: 3; background: var(--bg-alt); }
.ip-th-inner { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.ip-sort { border: 0; background: none; color: inherit; font: inherit; font-weight: 600; cursor: pointer; padding: 0; text-align: left; }
.ip-sort:hover { color: var(--green-ink); }
.ip-th-projection { color: #6b4ea8; font-size: 11px; font-style: normal; }
.ip-col-resizer { display: inline-block; width: 6px; margin-left: 6px; cursor: col-resize; user-select: none; }
.ip-cell { display: block; overflow-wrap: anywhere; word-break: normal; }
.ip-cell-wrap { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
.ip-cell-check { width: 34px; text-align: center; }
.ip-cell-link { display: inline-block; color: var(--green-ink); font-weight: 600; overflow-wrap: anywhere; }
.ip-cell-link:hover { text-decoration: underline; }
.ip-cell-link:focus-visible { outline: 2px solid var(--green); outline-offset: 1px; border-radius: 3px; }

.ip-cases-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; font-size: 12.5px; color: var(--fg3); }
.ip-foot-pages, .ip-foot-nav { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.ip-foot-pages label, .ip-foot-nav label { display: inline-flex; align-items: center; gap: 5px; }
.ip-foot-nav input, .ip-foot-pages select { height: 32px; padding: 0 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }
.ip-foot-nav input[type="number"] { width: 72px; }

/* 总表编辑模式（5.2）：默认单击打开案件；进入编辑模式后单击选择、双击或 Enter 编辑 */
.ip-cases-editbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 8px 12px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg-alt); font-size: 12.5px; }
.ip-cases-editbar-actions { display: flex; gap: 6px; margin-left: auto; padding-left: 12px; }
.ip-cases-editbar[hidden] { display:none !important; }
.ip-template-compose footer { flex-wrap:wrap; }
.ip-template-compose footer [role=alert] { flex-basis:100%; margin:0; }
.ip-template-compose footer [role=alert]:empty { display:none; }
.ip-table td.is-cell-selected { outline: 2px solid var(--green); outline-offset: -2px; }
.ip-cell-input { width: 100%; min-width: 80px; padding: 3px 6px; border: 1px solid var(--green); border-radius: 4px; background: var(--bg); color: var(--fg); font: inherit; } .ip-transfer-page { display: flex; flex-direction: column; gap: 12px; } .ip-transfer-queue { min-width: 0; } .ip-transfer-queue-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 8px; } .ip-transfer-queue-item { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 9px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); text-align: left; cursor: pointer; font: inherit; } .ip-transfer-queue-item:hover { background: var(--bg-alt); } .ip-transfer-queue-item small { color: var(--fg3); font-size: 11.5px; }
.ip-reconcile { display: flex; flex-direction: column; gap: 10px; min-width: 0; } .ip-transfer-card { min-width: 0; padding: 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); }
.ip-reconcile-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; font-size: 13px; }
.ip-reconcile-card-head span { color: var(--fg3); font-size: 12px; }
.ip-preview-host { margin-top: 8px; min-height: 16rem; }
.ip-reconcile-panel { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 8px; }
.ip-reconcile-reason, .ip-transfer-reason { display: flex; flex-direction: column; gap: 4px; color: var(--fg3); font-size: 12px; }
.ip-reconcile-reason textarea, .ip-transfer-reason textarea { width: 100%; padding: 6px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; resize: vertical; }
.ip-reconcile-panel-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.ip-reconcile-hint { margin: 0; color: var(--fg3); font-size: 12px; overflow-wrap: anywhere; }
.ip-transfer { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.ip-transfer-head h2 { margin: 0; font-size: 15px; }
.ip-transfer-head p { margin: 3px 0 0; color: var(--fg3); font-size: 12.5px; }
.ip-transfer-body { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.ip-transfer-card > b { display: block; margin-bottom: 8px; font-size: 13px; }
.ip-transfer-targets { display: flex; flex-wrap: wrap; gap: 6px; }
.ip-transfer-target { display: flex; flex-direction: column; gap: 2px; align-items: flex-start; padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); cursor: pointer; font: inherit; }
.ip-transfer-target.on { border-color: color-mix(in srgb, var(--green) 45%, var(--line)); background: var(--bg-alt); }
.ip-transfer-target small { color: var(--fg3); font-size: 11.5px; }
.ip-transfer-actions { display: flex; gap: 6px; margin-top: 8px; }

/* ============ 3. 案件详情（4.3） ============ */
.ip-cases-drawer { min-width: 0; }
.ip-cases-drawer[hidden] { display: none; }
/* 展开为完整页：详情占满工作区，表格让位（不是只锁滚动条）。 */
.ip-cases-drawer.is-fullpage { display: block; }
.ip-cases[data-detail-fullpage="1"] .ip-cases-body { grid-template-columns: minmax(0, 1fr); }
.ip-cases[data-detail-fullpage="1"] .ip-cases-tablewrap { ; }


.ip-summary-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 8px 12px; margin: 0; }
.ip-summary-grid > div { min-width: 0; }
.ip-summary-grid dt { color: var(--fg3); font-size: 12px; }
.ip-summary-grid dd { margin: 2px 0 0; font-size: 13px; overflow-wrap: anywhere; }


.ip-section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.ip-section-head h3 { margin: 0; font-size: 14px; }
.ip-section-head p { flex-basis: 100%; margin: 2px 0 0; color: var(--fg3); font-size: 12px; overflow-wrap: anywhere; }
.ip-section-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--fg3); font-size: 12.5px; }

/* 字段：原值黑色、Agent 建议灰色、正在保存、冲突各有状态标签（4.8） */


/* 同名 @keyframes 会被后面的定义整体覆盖：ip-candidate-breathe 只在本文件末尾
   （第 12 节）声明一处，这里不再重复；ip-review-prototype / ip-agent-breathe /
   ip-review-pulse / ip-agent-breathe 用于各自的阶段；候选值统一按来源着色。
   --green-ink 是 css/deepseek.css 的设计令牌（深色底绿字），归属见本文件第 0 节，本文件只消费不定义。 */


.ip-diff { display: flex; flex-direction: column; gap: 8px; }
.ip-diff-row { min-width: 0; }
.ip-diff-label { color: var(--fg3); font-size: 12px; }
.ip-diff-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; margin-top: 4px; }
.ip-diff-old, .ip-diff-new { min-width: 0; padding: 6px 8px; border: 1px solid var(--line); border-radius: 8px; font-size: 12.5px; }
.ip-diff-old { background: var(--bg-alt); }
.ip-diff-new { border-color: color-mix(in srgb, #6b7280 35%, var(--line)); background: color-mix(in srgb, #6b7280 6%, var(--bg)); }
.ip-diff-old small, .ip-diff-new small { display: block; color: var(--fg3); font-size: 11.5px; }


/* 补充材料（4.7 第 3 行） */
.ip-supply { margin-bottom: 10px; padding: 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-alt); }
.ip-supply-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; flex-wrap: wrap; font-size: 13px; }
.ip-supply-head span { color: var(--fg3); font-size: 12px; }
.ip-supply-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; font-size: 12px; }
.ip-supply-file { cursor: pointer; }
.ip-attach-pending-item { display: flex; align-items: center; gap: 8px; min-width: 0; margin-top: 6px; }
.ip-attach-pending-item > span:first-child { flex: 1 1 auto; min-width: 0; }
.ip-supply-form { display: grid; gap: 6px; margin-top: 8px; padding: 8px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); }
.ip-supply-form label { display: flex; flex-direction: column; gap: 3px; color: var(--fg3); font-size: 12px; }
.ip-supply-form select, .ip-supply-form input { height: 32px; padding: 0 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }
.ip-supply-form-actions { display: flex; gap: 6px; }
.ip-supply-error { margin: 0; color: #a12a2a; font-size: 12.5px; overflow-wrap: anywhere; }

/* 日志 */
.ip-log-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ip-log-item { display: grid; grid-template-columns: 128px minmax(0, 1fr); gap: 10px; min-width: 0; padding-bottom: 8px; border-bottom: 1px dashed var(--line); }
.ip-log-when { min-width: 0; color: var(--fg3); font-size: 12px; }
.ip-log-when time { display: block; overflow-wrap: anywhere; }
.ip-log-what { min-width: 0; display: flex; flex-direction: column; gap: 3px; font-size: 13px; }
.ip-log-reason { margin: 0; color: var(--fg2); font-size: 12.5px; overflow-wrap: anywhere; }
.ip-log-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; color: var(--fg3); font-size: 12px; }

/* 附件 */

/* 邮件页签的头部：提示与"共 N 条"在**同一行**（用户 2026-09-20）。 */
/* 邮件页签的头部行现在只放条数（提示与「选择通知并准备草稿」已去掉），靠左与关联文件的条数行对齐。 */
.ip-mail-head-row { display:flex; align-items:center; justify-content:flex-start; gap:12px; flex-wrap:wrap; margin:0 0 12px; }
.ip-mail-head-row p { margin:0; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ip-section-count { color:var(--fg3); font-size:12px; }
/* 邮件页签的无标题头（用户 2026-09-20）：提示与"共 N 条"并排一行。 */
.ip-section-head-inline { display:flex; align-items:baseline; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.ip-section-head-inline p { margin:0; }

/* 「搜索 + 筛选」公共组件（用户 2026-09-20）：一个搜索框 + 右侧一个筛选下拉，
   同一行、同高（36px）、垂直居中对齐、面板挂在组件内部；当前项打勾。
   关联文件页签与邮件页签共用这一份，页面只给选项与回调，不各自写一套外观。 */
.ip-search-filter { position:relative; display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:12px; }
.ip-search-filter input[type=search] { flex:1 1 auto; min-width:0; height:36px; box-sizing:border-box; padding:7px 12px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--fg); font-family:inherit; font-size:13px; line-height:1.4; }
.ip-search-filter > .btn { flex:none; height:36px; box-sizing:border-box; }
.ip-search-filter-select { position:relative; flex:none; }
/* 选中的值再长也只在框内省略（用户 2026-09-21 真站：长案件名折行跑出框外）；全文在 title 上。 */
.ip-search-filter-trigger { height:36px; min-width:132px; box-sizing:border-box; padding:7px 30px 7px 12px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--fg); font-family:inherit; font-size:13px; line-height:1.4; text-align:left; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; cursor:pointer; position:relative; }
.ip-search-filter-trigger::after { content:'⌄'; position:absolute; right:10px; top:50%; transform:translateY(-50%); color:var(--fg3); }
/* 面板被容器夹住（用户 2026-09-21 真站：长案件名把面板撑出左栏、左边被裁）：left 对齐、宽度不超过组件。 */
.ip-search-filter-panel { position:absolute; left:0; top:calc(100% + 6px); z-index:6; min-width:180px; max-width:100%; box-sizing:border-box; padding:6px; border:1px solid var(--line); border-radius:6px; background:var(--bg); box-shadow:var(--pop); display:flex; flex-direction:column; }
.ip-search-filter-panel[hidden] { display:none; }
.ip-search-filter-panel button { display:flex; align-items:center; justify-content:space-between; gap:10px; width:100%; padding:8px 10px; border:0; border-radius:4px; background:none; font:inherit; font-size:13px; color:var(--fg); text-align:left; white-space:normal; overflow-wrap:anywhere; cursor:pointer; }
.ip-search-filter-panel button:hover { background:var(--ip-m4-fill); }
.ip-search-filter-panel button[aria-selected=true]::after { content:'✓'; color:var(--green-ink); }
/* 面板内搜索（2026-09-21 扩展）：长清单（如案件）在面板里按关键词找，选中即收起。 */
.ip-search-filter-panel-input { width:100%; box-sizing:border-box; height:32px; margin-bottom:4px; padding:5px 10px; border:1px solid var(--line); border-radius:4px; background:var(--bg); color:var(--fg); font-family:inherit; font-size:13px; }
.ip-search-filter-panel-list { display:flex; flex-direction:column; max-height:min(320px,45dvh); overflow:auto; }
.ip-search-filter-panel-status { margin:4px 2px 0; color:var(--fg3); font-size:12px; line-height:1.5; }
.ip-search-filter-panel-status[hidden] { display:none; }

.ip-file-list { display:flex; flex-direction:column; gap:10px; }
.ip-file-row { display:flex; align-items:center; gap:12px; padding:12px 14px; background:var(--ip-m4-fill); border:0; border-radius:4px; min-width:0; }
.ip-file-ext { flex:none; width:40px; height:40px; display:grid; place-items:center; border-radius:6px; background:var(--bg); color:var(--fg3); font-size:11px; font-weight:700; letter-spacing:.5px; }
.ip-file-row-main { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:6px; }
.ip-file-row-name { border:0; background:none; padding:0; font:inherit; font-size:14px; font-weight:700; color:var(--fg); text-align:left; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 只有可点的文件名（按钮）给手型和下划线；详情里的只读文件名是普通文字。 */
button.ip-file-row-name { cursor:pointer; }
button.ip-file-row-name:hover { color:var(--green-ink); text-decoration:underline; }
.ip-file-row-meta { display:flex; align-items:center; gap:10px; flex-wrap:wrap; color:var(--fg3); font-size:12px; }
.ip-file-state { display:inline-flex; align-items:center; padding:2px 8px; border-radius:4px; background:color-mix(in srgb, var(--green) 14%, white); color:#24322a; font-size:11px; font-weight:600; }
.ip-file-state.is-muted { background:var(--tag); color:var(--fg3); font-weight:400; }
.ip-file-row-actions { flex:none; display:flex; align-items:center; gap:6px; position:relative; }
.ip-file-more { position:absolute; right:0; top:calc(100% + 6px); z-index:5; min-width:150px; padding:6px; border:1px solid var(--line); border-radius:6px; background:var(--bg); box-shadow:var(--pop); display:flex; flex-direction:column; }
.ip-file-more button { padding:8px 10px; border:0; border-radius:4px; background:none; font:inherit; font-size:13px; text-align:left; cursor:pointer; }
.ip-file-more button:hover { background:var(--ip-m4-fill); }

/* 关联文件页签（用户 2026-09-20）：官文与其他文件合成**一条列表**（一条条排，像邮件那样），
   不再用折叠分组；分类改由顶部组件的筛选表达，列表上面只说条数。 */
.ip-attach-count { margin:-4px 0 12px; color:var(--fg3); font-size:12px; }
.ip-attach-list { display:flex; flex-direction:column; gap:10px; }
/* 每段（官文 / 其他文件）的外壳不占位：条目直接参与这条列表的排布。 */
.ip-attach-part { display:contents; }
/* 官文条目与文件条目同一行语法：左侧类型徽标 + 名称 + 状态胶囊 + 日期 + 行尾动作。 */
.ip-notice-item { display:flex; align-items:flex-start; gap:12px; padding:12px 14px; min-width:0; }
.ip-notice-main { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:6px; }
.ip-notice-title { display:block; font-size:14px; font-weight:700; color:var(--green-ink); overflow-wrap:anywhere; cursor:pointer; }
.ip-notice-title:hover { text-decoration:underline; }
.ip-notice-title:focus-visible { outline:2px solid var(--green); outline-offset:1px; border-radius:3px; }
.ip-notice-meta { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-top:0; color:var(--fg3); font-size:12px; }
.ip-notice-deadline, .ip-notice-response { margin-top:0; font-size:12.5px; overflow-wrap:anywhere; }
.ip-notice-actions { flex:none; display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; gap:6px; max-width:46%; }
/* 邮件列表：每条邮件与详情字段块是**同一个公共色块**（用户 2026-09-20 口径），
   面样式只由下面 .ip-surface 那一处定义，这里只管排布与块间留白。 */
.ip-mail-list { display: flex; flex-direction: column; gap: 10px; }
.ip-mail-item { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap; padding: 10px 14px; min-width: 0; }
.ip-mail-main { min-width: 0; flex: 1 1 260px; }
.ip-mail-main b { display: block; font-size: 13px; overflow-wrap: anywhere; }
.ip-mail-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 4px; color: var(--fg3); font-size: 12px; }


.ip-mail-actions { display: flex; gap: 6px; }

/* 官文条目的外观与文件条目同源：布局在上面「关联文件页签」那段统一定义，这里不再重复。 */


/* ============ 3. 详情内协作面板（4.8） ============ */
.ip-collab-host { min-width: 0; display: flex; flex-direction: column; gap: 8px; height: 100%; }
.ip-collab-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.ip-collab-head b { min-width: 0; font-size: 13px; }
.ip-collab-head > div { display: flex; gap: 6px; }
.ip-collab-refs { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 6px 12px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg-alt); font-size: 12.5px; }
.ip-ref-item { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ip-ref-item b { color: var(--fg3); font-size: 12px; }
.ip-ref-item span { overflow-wrap: anywhere; }
.ip-ref-hint { grid-column: 1 / -1; margin: 0; color: var(--fg3); font-size: 12px; overflow-wrap: anywhere; }
.ip-collab-chat { min-width: 0; flex: 1; min-height: 22rem; display: flex; flex-direction: column; }
#ai-copilot.in-detail { position: static; width: 100%; height: 100%; min-height: 22rem; border-radius: 10px; box-shadow: none; }
#ai-copilot.in-detail .copilot-head, #ai-copilot.in-detail .chat-float-panel { display: none; }
#ai-copilot.in-detail .chat-scroll { flex: 1; }

/* ============ 4. 对话附件队列（4.4） ============ */
.chat-att-queue-host { margin: 0 10px 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-alt); font-size: 12.5px; }
.chat-att-queue-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; padding: 6px 10px; border-bottom: 1px solid var(--line); }
.chat-att { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; flex-wrap: wrap; padding: 8px 10px; border-bottom: 1px solid var(--line); min-width: 0; }
.chat-att:last-of-type { border-bottom: 0; }
.chat-att-main { min-width: 0; flex: 1 1 200px; }
.chat-att-name { display: block; font-size: 13px; overflow-wrap: anywhere; }
.chat-att-meta { display: flex; flex-wrap: wrap; gap: 4px 8px; margin-top: 3px; color: var(--fg3); font-size: 12px; }
.chat-att-error { margin: 4px 0 0; color: #a12a2a; font-size: 12px; }
.chat-att-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.chat-att-blocked { margin: 0; padding: 6px 10px; color: #8a5a12; font-size: 12px; }
.chat-att-purpose { display: flex; flex-direction: column; gap: 4px; padding: 6px 10px; border-top: 1px solid var(--line); }
.chat-att-purpose-item { display: flex; align-items: flex-start; gap: 6px; min-width: 0; }
.chat-att-purpose-item span { min-width: 0; display: flex; flex-direction: column; }
.chat-att-purpose-item small { color: var(--fg3); font-size: 11.5px; overflow-wrap: anywhere; }
.chat-att-purpose-item.is-disabled { opacity: .55; }
.chat-att-list { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.chat-upload-state { display: inline-flex; align-items: center; gap: 4px; color: var(--fg3); font-size: 12px; max-width: 240px; overflow-wrap: anywhere; }
#chat-upload-btn[data-upload-state="error"] { color: #a12a2a; }
#chat-upload-btn[data-upload-state="loading"] { color: var(--fg3); }
#chat-input-box.is-dragover { outline: 2px dashed var(--green); outline-offset: -2px; }
.chat-new-msg { align-self: center; margin: 6px 0; padding: 4px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); color: var(--fg2); font-family:inherit; font-size:12.5px; cursor: pointer; }
.ctx-chip { display: inline-block; margin: 0 2px; padding: 0 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg-alt); font-size: 12px; }
.ctx-confirm { border-color: color-mix(in srgb, #8a5a12 40%, var(--line)); color: #8a5a12; }
.ctx-pin { margin-left: 6px; border: 0; background: none; color: var(--green-ink); font-family:inherit; font-size:12px; text-decoration: underline; cursor: pointer; }
.cf-retry-note { display: block; margin-top: 6px; color: #a12a2a; font-size: 12.5px; overflow-wrap: anywhere; }
.cf-locate { font-size: 12px; }

/* ============ 5. 工作台业务入口与待办（4.1） ============ */
.platform-entry-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px; }
.platform-quick.is-primary { border-color: color-mix(in srgb, var(--green) 45%, var(--line)); }
.ip-work-list { display: flex; flex-direction: column; gap: 8px; }
.ip-work-item { display: grid; grid-template-columns: auto minmax(0, 1fr) 120px 130px auto; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); text-align: left; cursor: pointer; min-width: 0; font: inherit; }
.ip-work-item:hover { background: var(--bg-alt); }
.ip-work-kind { flex: 0 0 auto; }
.ip-work-main { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ip-work-main b { font-size: 13px; overflow-wrap: anywhere; }
.ip-work-main small { display: flex; flex-wrap: wrap; gap: 2px 8px; color: var(--fg3); font-size: 12px; }
.ip-work-owner, .ip-work-deadline { color: var(--fg2); font-size: 12.5px; overflow-wrap: anywhere; }
.ip-work-action { color: var(--green-ink); font-size: 12.5px; white-space: nowrap; }
.ip-work-index { display: none; }
.workbench-retry { grid-column: 1 / -1; }
.workbench-cell-error { color: #8a5a12; }
.workbench-note { margin: 6px 0 0; color: var(--fg3); font-size: 12px; }
.ip-agent-group { border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; margin-bottom: 8px; }
.ip-agent-group summary { display: flex; align-items: center; justify-content: space-between; gap: 8px; cursor: pointer; font-size: 13px; }
.ip-agent-group summary span { color: var(--fg3); font-size: 12px; }
.ip-agent-list { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.ip-agent-item { display: flex; flex-direction: column; gap: 5px; min-width: 0; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; }
.ip-agent-item b { font-size: 13px; overflow-wrap: anywhere; }
.ip-agent-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; color: var(--fg3); font-size: 12px; }
.ip-agent-steps { display: flex; flex-wrap: wrap; gap: 6px; color: var(--fg3); font-size: 12px; }
.ip-agent-steps span { padding: 1px 8px; border: 1px solid var(--line); border-radius: 999px; overflow-wrap: anywhere; }
.ip-agent-actions { display: flex; gap: 6px; }

/* ============ 6. 独立邮件窗格（4.6） ============ */
.ip-mail-page-body {min-width:0}
.ip-mail-pane { display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: 12px; }
.ip-mail-pane-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.ip-mail-pane-title { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }
.ip-mail-pane-title h2 { margin: 0; font-size: 15px; }
.ip-mail-pane-title p { margin: 3px 0 0; color: var(--fg3); font-size: 12.5px; overflow-wrap: anywhere; }
.ip-mail-pane-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.ip-mail-dirty { margin: 0; color: #8a5a12; font-size: 12.5px; }
.ip-mail-save-state { margin: 0; color: var(--fg3); font-size: 12.5px; }
.ip-mail-denied { margin: 0; padding: 6px 10px; border: 1px solid color-mix(in srgb, #8a5a12 35%, var(--line)); border-radius: 8px; background: color-mix(in srgb, #8a5a12 5%, var(--bg)); color: #8a5a12; font-size: 12.5px; overflow-wrap: anywhere; }
.ip-mail-save-state.is-ok { color: #1f6f43; }
.ip-mail-pane-body { display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); gap: 12px; min-width: 0; }
.ip-mail-pane-body:has(.ip-mail-side:not([hidden])) { grid-template-columns: minmax(0, 200px) minmax(0, 1fr) minmax(0, 260px); }
.ip-mail-cases { min-width: 0; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-alt); padding: 10px; }
.ip-mail-cases[hidden] { display: none; }
.ip-mail-cases-head { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; font-size: 12.5px; }
.ip-mail-cases-head input { height: 32px; padding: 0 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }
.ip-mail-cases-list { display: flex; flex-direction: column; gap: 6px; max-height: 40vh; overflow: auto; }
.ip-mail-case { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: 7px 9px; border: 1px solid transparent; border-radius: 8px; background: var(--bg); color: var(--fg); text-align: left; cursor: pointer; font: inherit; }
.ip-mail-case.on { border-color: color-mix(in srgb, var(--green) 45%, var(--line)); }
.ip-mail-case small { color: var(--fg3); font-size: 11.5px; overflow-wrap: anywhere; }
.ip-mail-cases-note { margin: 8px 0 0; color: var(--fg3); font-size: 11.5px; overflow-wrap: anywhere; }
.ip-mail-editor { min-width: 0; display: flex; flex-direction: column; gap: 10px; }


.ip-mail-contacts { min-width: 0; border: 1px solid var(--line); border-radius: 10px; padding: 10px; font-size: 12.5px; }
.ip-mail-contacts-head {display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px}
.ip-mail-contacts-list { display: flex; flex-wrap: wrap; gap: 6px; }
.ip-mail-contacts-list button { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; max-width: 260px; }
.ip-mail-contacts-list small { color: var(--fg3); overflow-wrap: anywhere; }

/* 每行材料 = 勾选行 + 行内"预览"小按钮（预览不另起一整行，5.5 排版口径）。 */

/* 冻结历史版本的实际发送附件：文件名 + artifact ID + 行内预览。 */


.ip-mail-proposal { border: 1px solid color-mix(in srgb, #6b7280 35%, var(--line)); border-radius: 10px; padding: 10px; background: color-mix(in srgb, #6b7280 5%, var(--bg)); }
.ip-mail-proposal-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; font-size: 13px; }
.ip-mail-proposal-note { margin: 8px 0 0; color: var(--fg3); font-size: 12px; overflow-wrap: anywhere; }
.ip-mail-side { min-width: 0; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-alt); padding: 10px; }
.ip-mail-side[hidden] { display: none; }
.ip-mail-side-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 6px; font-size: 12.5px; }
.ip-mail-views { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 8px; }
.ip-mail-view { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); color: var(--fg2); font-family:inherit; font-size:12px; cursor: pointer; }
.ip-mail-view.on { border-color: color-mix(in srgb, var(--green) 45%, var(--line)); background: var(--bg-alt); font-weight: 600; }
.ip-mail-view span { color: var(--fg3); font-size: 11.5px; }
.ip-mail-view-unknown { align-self: center; color: var(--fg3); font-size: 11.5px; }
.ip-mail-side-list { display: flex; flex-direction: column; gap: 6px; max-height: 45vh; overflow: auto; }
.ip-mail-history { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 7px 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); text-align: left; cursor: pointer; font: inherit; }
.ip-mail-history small { color: var(--fg3); font-size: 11.5px; overflow-wrap: anywhere; }
.ip-mail-review { max-width: min(680px, 92vw); }
.ip-mail-review h2 { margin: 0; font-size: 16px; }
.ip-mail-review p { margin: 4px 0 0; color: var(--fg3); font-size: 12.5px; }
.ip-mail-review-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px 12px; margin: 10px 0; }
.ip-mail-review-grid > div { min-width: 0; }
.ip-mail-review-grid dt { color: var(--fg3); font-size: 12px; }
.ip-mail-review-grid dd { margin: 2px 0 0; font-size: 13px; overflow-wrap: anywhere; }
.ip-mail-review footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.ip-mail-preview { max-width: min(720px, 92vw); }
.ip-mail-preview header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ip-mail-preview h2 { margin: 0; font-size: 16px; }
.ip-mail-preview-meta { display: flex; flex-direction: column; gap: 2px; margin: 8px 0; color: var(--fg3); font-size: 12px; }

/* ============ 7. 响应式（4.3 / 4.6 / M09 / V04） ============ */
@media (max-width: 1180px) {
  .ip-cases[data-detail-open] .ip-cases-body { grid-template-columns: minmax(0, 1fr); }

  .ip-mail-pane-body, .ip-mail-pane-body:has(.ip-mail-side:not([hidden])) { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 680px) {
  .ip-cases { padding: 8px 8px 16px; }
  .ip-cases-actions, .ip-mail-pane-actions, .ip-attach-actions, .ip-notice-actions {width:100%}
  .ip-cases-actions .btn, .ip-mail-pane-actions .btn {flex:0 0 auto}
  .ip-cases-actions { overflow-x: auto; }
  .ip-filter-form { display: grid; grid-template-columns: minmax(0, 1fr); }
  .ip-filter-form label { max-width: none; }
  .ip-cases-tablewrap { max-height: 62vh; }
  .ip-work-item { grid-template-columns: auto minmax(0, 1fr); }
  .ip-work-owner, .ip-work-deadline, .ip-work-action { grid-column: 2; }
  .ip-log-item { grid-template-columns: minmax(0, 1fr); }
  .ip-summary-grid {grid-template-columns:minmax(0,1fr)}
  .ip-mail-cases { max-height: 42vh; overflow: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .ip-table tbody tr { transition: none; }
}
/* 125% / 200% 缩放：字体随用户设定放大，不通过固定高度裁文字 */
@media (min-resolution: 1.25dppx) {
  .ip-table { font-size: 14px; }
  .ip-cases-tablewrap { max-height: calc(100vh - 280px); }
}

/* ============ 8. 本轮审查修复补充（F04 / F15 / F16 / F21 / F25） ============ */
/* 脏格（有未保存修改）：逐格标记，让员工看清将提交什么。 */
.ip-table td .ip-cell.is-dirty { border-bottom: 2px solid color-mix(in srgb, #8a5a12 55%, transparent); background: color-mix(in srgb, #8a5a12 6%, var(--bg)); }
.ip-cell-suggest { margin-left: 4px; padding: 0 4px; border: 1px solid var(--line); border-radius: 999px; color: #6b7280; font-size: 11px; }
/* 单元格里的编辑控件与文字控件同宽，不撑破行高。 */
.ip-cell-input {width:100%;min-width:80px;padding:3px 6px;border:1px solid var(--green);border-radius:4px;background:var(--bg);color:var(--fg);font:inherit}


/* 只读/提案模式说明与标题栏一致可见，不藏在按钮提示里。 */
.ip-mail-mode-note { margin: 0; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg-alt); color: var(--fg2); font-size: 12.5px; }
/* 离开守卫对话框：三个分支必须都看得见。 */
.ip-mail-guard form { display: flex; flex-direction: column; gap: 10px; min-width: min(420px, 92vw); }
.ip-mail-guard header h2 { margin: 0 0 4px; font-size: 15px; }
.ip-mail-guard header p { margin: 0; color: var(--fg3); font-size: 12.5px; }
.ip-mail-guard footer { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
/* 附件用途面板：与附件卡同宽，展开后才出现。 */
.chat-att-purpose-slot { border-top: 1px dashed var(--line); }
.chat-att-purpose-slot[hidden] { display: none; }
/* 固定引用必须与跟随页面的引用区分开（F08）。 */
.ctx-chip.is-pinned { border-color: color-mix(in srgb, var(--green) 45%, var(--line)); }
.ctx-pin { margin-left: 6px; padding: 0 8px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); color: var(--fg2); font-family:inherit; font-size:12px; cursor: pointer; }
/* 预览器状态块在容器内自带关闭入口，错误态不困住用户（F25）。 */
.ui-preview-body .ui-preview-error,
.ui-preview-body .ui-preview-forbidden,
.ui-preview-body .ui-preview-missing,
.ui-preview-body .ui-preview-unsupported,
.ui-preview-body .ui-preview-empty { padding: 18px; }

/* ============ 9. 执行阻断与自助对账（第十六轮契约：未核对副作用） ============ */
.ip-blocks-page { display: flex; flex-direction: column; gap: 12px; }
.ip-blocks { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.ip-blocks-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.ip-blocks-head h2 { margin: 0; font-size: 15px; }
.ip-blocks-head p { margin: 3px 0 0; color: var(--fg3); font-size: 12.5px; overflow-wrap: anywhere; }
.ip-blocks-body { display: grid; grid-template-columns: minmax(0, 320px) minmax(0, 1fr); gap: 12px; min-width: 0; }
/* 窄屏折叠：先列出待对账，再把登记表单放到下面。
   必须写在基础声明之后——同权重时后写优先，放到第 7 节会被这条覆盖掉。 */
@media (max-width: 1180px) {
  .ip-blocks-body { grid-template-columns: minmax(0, 1fr); }
}
.ip-blocks-list, .ip-blocks-detail { min-width: 0; }
.ip-blocks-items { display: flex; flex-direction: column; gap: 6px; }
.ip-blocks-item { display: flex; align-items: flex-start; gap: 8px; width: 100%; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); text-align: left; cursor: pointer; font: inherit; min-width: 0; }
.ip-blocks-item.on { border-color: color-mix(in srgb, #a12a2a 40%, var(--line)); background: var(--bg-alt); }
.ip-blocks-item-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ip-blocks-item-main b { font-size: 13px; }
.ip-blocks-item-main small { color: var(--fg3); font-size: 12px; }
.ip-blocks-item-meta { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; color: var(--fg3); font-size: 11.5px; white-space: nowrap; }
.ip-blocks-more { align-self: flex-start; }
.ip-blocks-note-line { margin: 6px 0 0; color: var(--fg3); font-size: 12px; }
.ip-blocks-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 6px 12px; margin: 0 0 10px; }
.ip-blocks-facts div { min-width: 0; }
.ip-blocks-facts dt { color: var(--fg3); font-size: 11.5px; }
.ip-blocks-facts dd { margin: 2px 0 0; font-size: 12.5px; overflow-wrap: anywhere; }
/* 技术取值（签名 / 凭证名 / 运行 ID）等宽呈现，一眼能分清"业务事实"和"技术引用"。 */
.ip-blocks-technical { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--fg2); overflow-wrap: anywhere; }
.ip-blocks-pending { margin-bottom: 10px; }
.ip-blocks-pending > b { display: block; margin-bottom: 4px; font-size: 12.5px; }
.ip-blocks-pending-list { margin: 0; padding-left: 16px; display: flex; flex-direction: column; gap: 3px; }
.ip-blocks-pending-list small { display: block; color: var(--fg3); font-size: 11.5px; }
.ip-blocks-form { display: flex; flex-direction: column; gap: 8px; border-top: 1px solid var(--line); padding-top: 10px; }
.ip-blocks-form > b { font-size: 13px; }
.ip-blocks-choices { display: flex; flex-direction: column; gap: 6px; }
.ip-blocks-choice { display: flex; align-items: flex-start; gap: 8px; padding: 7px 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); cursor: pointer; }
.ip-blocks-choice.on { border-color: color-mix(in srgb, #8a5a12 45%, var(--line)); background: var(--bg-alt); }
.ip-blocks-choice span { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ip-blocks-choice small { color: var(--fg3); font-size: 11.5px; overflow-wrap: anywhere; }
.ip-blocks-form input[type="text"], .ip-blocks-form select { width: 100%; min-height: 32px; padding: 4px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-family: inherit; font-size: 13px; }
/* 回执：解除与未解除必须一眼分得清，不靠读完整段话。 */
.ip-blocks-receipt { margin-top: 10px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg-alt); display: flex; flex-direction: column; gap: 4px; }
.ip-blocks-receipt.is-released { border-color: color-mix(in srgb, #1f6f43 45%, var(--line)); }
.ip-blocks-receipt.is-pending { border-color: color-mix(in srgb, #a12a2a 40%, var(--line)); }
.ip-blocks-receipt b { font-size: 13px; }
.ip-blocks-receipt p { margin: 0; color: var(--fg2); font-size: 12.5px; overflow-wrap: anywhere; }
/* 冻结运行的对话出口：正文由服务端给，这里只补一条明确入口。 */
.chat-blocked { margin-top: 8px; padding: 8px 10px; border: 1px solid color-mix(in srgb, #a12a2a 40%, var(--line)); border-radius: 8px; background: color-mix(in srgb, #a12a2a 5%, var(--bg)); display: flex; flex-direction: column; gap: 5px; }
.chat-blocked b { font-size: 12.5px; color: #a12a2a; }
.chat-blocked p { margin: 0; font-size: 12.5px; color: var(--fg2); overflow-wrap: anywhere; }
.chat-blocked button { align-self: flex-start; }

/* 原型迁移：案件正常以置顶模态打开，协作才展开业务面（原版 Agent 留在产品壳）。 */


.ip-cases[data-detail-fullpage="1"] .ip-cases-tablewrap { display: block; }


/* 邮件页两栏（用户 2026-09-21 大改）：左栏＝状态标签 + 搜索筛选 + 列表；右栏＝这封邮件的主体。
   草稿在右栏直接编辑（与弹窗同一份写信窗格）；发送中/已发送/失败待处理/已删除是冻结快照——
   正文区灰、不可编辑，收件人/附件/回复/转发/投递结果照常。 */
.ip-mail-workspace { min-width: 0; height: 100%; display: flex; flex-direction: column; }
/* 工作区上方不叠三层空白（用户 2026-09-21）：frame 的上外边距去掉（原来 16px）；
   左栏自己保留统一 10px 内衬（用户 2026-09-21：筛选块不能和 side 并到一块），
   右侧主体本来就各留 10px——两栏左右上下对称。 */
.ip-mail-page .ip-mail-frame { margin-top: 0; }
/* 筛选块自己的内边距按文件中心工具条那一档（10px 16px，用户 2026-09-21：8px 看着像没有）：
   左侧 16px 与下方邮件行的 16px 对齐，搜索框不再贴边。 */
.ip-mail-page .ip-mail-filter-block { padding: 10px 16px; }
.ip-mail-frame { flex: 1; min-height: 0; display: flex; }
.ip-mail-two { display: grid; grid-template-columns: var(--mail-list,340px) 6px minmax(0,1fr); flex: 1; min-height: 0; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); }
.ip-mail-side-column { display: flex; flex-direction: column; gap: 8px; min-width: 0; min-height: 0; padding: 10px; background: var(--bg); }
/* 左栏就两个色块（用户 2026-09-21）：上面「搜索 + 下拉筛选」，下面邮件列表。 */
/* 色块用邮件页自己的浅色底：--ip-m4-fill 只在案件/文件/写信那几个作用域里定义（用户 2026-09-21 真站发现块是透明的）。 */
.ip-mail-filter-block { flex: none; padding: 8px; border-radius: 8px; background: var(--bg-alt); }
.ip-mail-filter-slot { display: block; min-width: 0; }
.ip-mail-filter-slot .ip-search-filter { width: 100%; margin-bottom: 0; gap: 6px; }
.ip-mail-filter-slot .ip-search-filter input[type=search], .ip-mail-filter-slot .ip-search-filter-trigger { height: 32px; font-size: 12px; padding-block: 5px; border: 0; background: var(--bg); }
.ip-mail-filter-slot .ip-search-filter-trigger { min-width: 0; }
.ip-search-filter.is-stacked { flex-wrap: wrap; }
.ip-search-filter.is-stacked input[type=search] { flex: 1 1 100%; }
.ip-search-filter.is-stacked .ip-search-filter-select { flex: 1 1 0; min-width: 0; }
.ip-search-filter.is-stacked .ip-search-filter-trigger { width: 100%; box-sizing: border-box; }
/* 窄栏里面板对齐到整块（而不是那半个下拉），长选项折行也读得完。 */
.ip-search-filter.is-stacked .ip-search-filter-select { position: static; }
.ip-mail-list-block { flex: 1; min-height: 0; overflow: auto; border-radius: 8px; background: var(--bg-alt); }
.ip-mail-mailbox-status { flex: 1 1 200px; min-width: 0; color: var(--fg3); font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; }
.ip-mail-mailbox-status:empty { display: none; }
.ip-mail-messages { flex: 1; min-height: 0; overflow: auto; }
.ip-mail-messages [data-mw-row] { display: flex; flex-direction: column; gap: 6px; width: 100%; text-align: left; border: 0; border-bottom: 1px solid var(--line); padding: 12px 14px; color: var(--fg); background: transparent; font: inherit; cursor: pointer; }
.ip-mail-messages [data-mw-row] b { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; line-height: 1.6; font-size: 13.5px; }
.ip-mail-messages [data-mw-row] small { color: var(--fg3); line-height: 1.5; }
.ip-mail-messages [data-mw-row]:hover { background: var(--bg); }
/* 加载更多＝占满整行，像一个普通列表行（用户 2026-09-21）。 */
.ip-mail-more { display: block; width: 100%; box-sizing: border-box; padding: 12px 14px; border: 0; border-top: 1px solid var(--line); border-radius: 0; background: transparent; color: var(--fg2); font: inherit; font-size: 12.5px; line-height: 1.5; text-align: center; cursor: pointer; }
.ip-mail-more:hover { background: var(--bg-alt); color: var(--fg); }
.ip-mail-messages [data-mw-row].on { background: var(--accd); box-shadow: inset 3px 0 var(--green-ink); }
.ip-mail-two [data-mw-divider] { background: var(--line); cursor: col-resize; touch-action: none; }
.ip-mail-two [data-mw-divider]:hover, .ip-mail-two [data-mw-divider]:focus-visible { background: var(--green); }
/* 右栏与左栏同一档色块（用户 2026-09-21）：外栏是底色块，内容是自己的工作面。
   选择器带 [data-mw-reading]，不碰案件详情里那个同名的 .ip-mail-main（邮件条目）。 */
.ip-mail-main[data-mw-reading] { display: flex; flex-direction: column; gap: 8px; min-width: 0; min-height: 0; overflow: hidden; padding: 10px; }
.ip-mail-main[data-mw-reading] .ip-mail-main-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap; padding: 8px 12px; border: 0; border-radius: 8px; background: var(--bg-alt); }
.ip-mail-main[data-mw-reading] .ip-mail-main-head[hidden] { display: none; }
.ip-mail-main-ident { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; color: var(--fg3); font-size: 12.5px; }
.ip-mail-main-case { overflow-wrap: anywhere; }
.ip-mail-main-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ip-mail-customer-slot:empty { display: none; }
.ip-mail-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px; background: var(--accd); color: var(--fg); font-size: 12px; }
.ip-mail-badge.is-frozen { background: var(--bg); border: 1px solid var(--line); color: var(--fg3); }
/* 外层工作区：邮件页右栏的容器（与弹窗容器 .ip-mail-detail 不再是同一个类）。
   历史阅读视图（收到的邮件）也落在这一层，给同一档色块。 */
.ip-mail-surface-host { display: flex; flex-direction: column; flex: 1; min-height: 0; min-width: 0; overflow: auto; }
.ip-mail-snapshot { display: flex; flex-direction: column; min-height: 0; flex: 1; padding: 16px 18px; border-radius: 8px; background: var(--bg-alt); }
.ip-mail-snapshot .ip-mail-reading-head h2 { margin: 0 0 6px; font-size: 19px; line-height: 1.5; overflow-wrap: anywhere; }
.ip-mail-surface-host > .ui-pane { margin: 0; }
/* 冻结快照：正文区灰、不可编辑；其余信息与动作照常。 */
.ip-mail-main.is-frozen .ip-mail-field-body .ip-mail-rich,
.ip-mail-main.is-frozen .ip-mail-field-body > textarea,
.ip-mail-main.is-frozen .ip-mail-field-body .ip-email-editor-body { background: color-mix(in srgb, var(--fg3) 8%, var(--bg)); color: var(--fg2); }
@media (max-width: 900px) {
  .ip-mail-two { grid-template-columns: minmax(240px,var(--mail-list,300px)) 6px minmax(0,1fr); }
}
@media (max-width: 700px) {
  .ip-mail-two { display: flex; flex-direction: column; height: auto; }
  .ip-mail-messages { max-height: 45dvh; flex: 0 0 auto; }
  .ip-mail-two [data-mw-divider] { display: none; }
  .ip-mail-main[data-mw-reading] { min-height: 320px; }
}

/* 写信：压短信头，正文主区，附件位于主题下方。 */


.ip-mail-dialog-head { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 12px 20px; border-bottom: 1px solid var(--line); }
.ip-mail-dialog-head h2 { font-size: 18px; margin: 0; }
.ip-mail-dialog-head > div { display: flex; gap: 8px; }


.ip-mail-rich { display: flex; flex-direction: column; min-height: 350px; }
.ip-mail-rich .ip-email-editor-body { min-height: 350px; line-height: 1.8; overflow-wrap: anywhere; }

.ip-mail-body-frame { display: block; width: 100%; border: 0; min-height: 160px; background: var(--bg); }
.ip-mail-thread-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.ip-mail-thread-message { margin-top: 16px; border: 1px solid var(--line); border-radius: 6px; padding: 14px; }
.ip-mail-thread-message > summary { cursor: pointer; line-height: 1.6; overflow-wrap: anywhere; }
.ip-mail-thread-message > summary span { margin-left: 16px; color: var(--fg3); font-size: 12px; }
.ip-mail-review, .ip-mail-preview { position:fixed; inset:0; margin:auto; box-sizing:border-box; width: min(900px,calc(100vw - 40px)); max-width: none; max-height: calc(100dvh - 40px); overflow: auto; background: var(--bg); color: var(--fg); border: 1px solid var(--line); border-radius: 8px; }
@media (max-width:700px) {


  .ip-mail-rich .ip-email-editor-body { padding: 14px; }
}

.ip-master-page { height: 100%; min-width: 0; background: var(--bg); }
.ip-master-page > [data-ip-master] { min-width: 0; }
.ip-master-views { display: flex; gap: 24px; overflow-x: auto; border-bottom: 1px solid var(--line); margin: 12px 0 16px; }
.ip-master-views button { flex-shrink: 0; border: 0; padding: 12px 0; font: inherit; background: transparent; color: var(--fg3); cursor: pointer; }
.ip-master-views button.on { color: var(--fg); font-weight: 700; box-shadow: none; }
.ip-master-page .ip-cases-head h1 { ; ; }
.ip-master-page .ip-cases-head p { ; }
.ip-master-page .ip-cases-tablewrap { ; max-width: 100%; }

.ip-settings-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.ip-settings-head h1 { font-size: 26px; }
.ip-settings-head > div { display: flex; gap: 10px; }
.ip-settings-table { overflow: auto; border: 1px solid var(--line); border-radius: 6px; }
.ip-settings-table table { width: 100%; min-width: 1080px; border-collapse: collapse; table-layout: fixed; }
.ip-settings-table th, .ip-settings-table td { padding: 14px 16px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: middle; overflow-wrap: anywhere; line-height: 1.6; }
.ip-settings-table th { font-weight: 500; color: var(--fg3); }
.ip-settings-table th:first-child { width: 240px; }
.ip-settings-link { font: inherit; color: var(--fg); font-weight: 600; text-align: left; background: none; border: 0; padding: 0; cursor: pointer; overflow-wrap: anywhere; }
.ip-settings-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 0; }
.ip-settings-dialog { position:fixed; inset:0; margin:auto; box-sizing:border-box; width: min(820px,calc(100vw - 40px)); max-width: none; max-height: calc(100dvh - 40px); border: 1px solid var(--line); border-radius: 8px; color: var(--fg); background: var(--bg); overflow: auto; padding: 24px; }
.ip-settings-dialog::backdrop { background: rgba(22,29,31,.3); }
.ip-settings-dialog header, .ip-settings-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.ip-settings-dialog h2 { font-size: 22px; overflow-wrap: anywhere; }
.ip-settings-dialog fieldset { border: 0; padding: 16px 0; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 20px 24px; }
.ip-settings-dialog label { display: flex; flex-direction: column; gap: 8px; min-width: 0; font-size: 13px; }
.ip-settings-dialog label.wide { grid-column: 1/-1; }
.ip-settings-dialog input:not([type=checkbox]), .ip-settings-dialog select, .ip-settings-dialog textarea { box-sizing: border-box; width: 100%; min-width: 0; padding: 8px 10px; font: inherit; border: 1px solid var(--line); border-radius: 5px; color: var(--fg); background: var(--bg); }
.ip-settings-dialog .ip-settings-switch { flex-direction: row; align-items: center; }
.ip-settings-switch input { flex: 0 0 18px; width: 18px; height: 18px; margin: 0; accent-color: var(--green); }
.ip-settings-dialog [role=alert] { color: var(--red); overflow-wrap: anywhere; }
.ip-template-compose { width: min(1080px,calc(100vw - 40px)); }
.ip-template-compose form { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.ip-template-fields { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px 20px; }
.ip-template-compose .ip-email-editor-body { min-height: 260px; max-height: 45dvh; overflow: auto; overflow-wrap: anywhere; }
.ip-template-compose .ip-email-editor-toolbar { flex-wrap: wrap; }
.ip-template-compose footer { justify-content: flex-end; }
.ip-preference-templates { grid-column: 1/-1; border-top: 1px solid var(--line); padding-top: 14px; }
.ip-preference-templates summary { cursor: pointer; font-weight: 600; }
.ip-preference-templates [data-pref-templates] { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(240px,100%),1fr)); gap: 12px 20px; margin: 14px 0; }
.ip-mail-external-update { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding: 12px 16px; border-bottom: 1px solid var(--line); font-size: 13px; }
.ip-mail-external-update span { flex: 1 1 240px; min-width: 0; overflow-wrap: anywhere; }
.ip-mail-external-update button { flex: 0 0 auto; }
.ip-host-panel-dialog { box-sizing: border-box; width: min(1120px,calc(100vw - 40px)); height: min(850px,calc(100dvh - 40px)); max-width: none; max-height: none; padding: 0; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); overflow: hidden; }
.ip-host-panel-dialog[open] { display: flex; flex-direction: column; }
.ip-host-panel-dialog::backdrop { background: rgba(22,29,31,.3); }
.ip-host-panel-dialog header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--line); }
.ip-host-panel-dialog header div { display: flex; gap: 8px; flex-wrap: wrap; }
.ip-host-panel-dialog h2 { margin: 0; font-size: 20px; }
.ip-host-panel-dialog p { margin: 0; padding: 10px 20px; font-size: 13px; color: var(--fg2); overflow-wrap: anywhere; }
.ip-host-panel-dialog iframe { flex: 1 1 auto; min-height: 0; width: 100%; border: 0; background: white; }
.ip-host-panel-dialog.is-fullpage { width: 100vw; height: 100dvh; margin: 0; inset: 0; border: 0; border-radius: 0; }
@media (max-width: 720px) {
  .ip-template-fields { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .ip-template-compose { padding: 16px; width: calc(100vw - 24px); max-height: calc(100dvh - 24px); }
}
@media (max-width: 440px) { .ip-template-fields { grid-template-columns: minmax(0,1fr); } }
@media (max-width:600px) { .ip-settings-dialog fieldset { grid-template-columns: minmax(0,1fr); } }
.platform-page.host-page { width: 100%; max-width: none; margin: 0; box-sizing: border-box; }
.host-page .host-page-head { flex-wrap: wrap; }
.host-page .host-page-actions { flex-wrap: wrap; }
.host-page .host-hero-copy > div { min-width: 0; }
.host-page .host-hero-copy p { font-size: 13px; overflow-wrap: anywhere; }
.host-page .host-facts b { overflow-wrap: anywhere; }
.host-page .host-detail-grid > section > header { flex-wrap: wrap; gap: 12px; }
.host-unified-toolbar { display:flex; align-items:center; gap:12px; padding:16px 20px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.host-unified-toolbar h1 { flex:1; min-width:140px; margin:0; font-size:20px; line-height:1.4; }
.host-unified-toolbar .host-page-actions { margin-left:auto; }
.host-page .host-dashboard-board .host-hero { min-height:150px; }
.ip-status-review { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; padding:20px 0; border-bottom:1px solid var(--line); }
.ip-status-review label { display:flex; flex-direction:column; gap:8px; min-width:0; overflow-wrap:anywhere; }
.ip-status-review :is(select,textarea) { width:100%; min-height:36px; font:inherit; }
.ip-official-candidate { align-self:flex-start; background:#28332c; color:#c1ff72; padding:3px 8px; font-weight:400; animation:ip-candidate-breathe 1.8s ease-in-out infinite; }
@media(prefers-reduced-motion:reduce) { .ip-official-candidate { animation:none; } }
@media(max-width:680px) { .ip-status-review { grid-template-columns:1fr; } }
.ip-file-preview-dialog { width:min(1180px,calc(100vw - 40px)); height:calc(100dvh - 40px); max-width:none; max-height:none; margin:auto; padding:16px; border:1px solid var(--line); border-radius:10px; background:var(--bg); }
.ip-file-preview-dialog [data-file-preview] { height:calc(100% - 40px); min-height:0; }
.ip-file-preview-dialog::backdrop { background:rgba(15,23,20,.35); }
.ip-file-preview-dialog:has(.ui-preview.is-fullscreen) { inset:0; width:100vw; height:100dvh; max-width:100vw; max-height:100dvh; margin:0; padding:0; border:0; border-radius:0; }
.ip-file-preview-dialog:has(.ui-preview.is-fullscreen) > button { display:none; }
.ip-file-preview-dialog:has(.ui-preview.is-fullscreen) [data-file-preview] { height:100%; }

/* 独立邮件页填满工作区，三栏各自滚动。 */
.ip-mail-page { display:flex; flex-direction:column; height:calc(100dvh - 32px); min-height:520px; box-sizing:border-box; }
.ip-mail-page > .ip-mail-page-body { flex:1; min-height:0; }
.ip-mail-page .ip-mail-workspace { min-height:0; }
.ip-mail-page .ip-mail-two { flex:1 1 0; height:auto; min-height:0; }
@media (max-width:700px) { .ip-mail-page { height:auto; min-height:calc(100dvh - 24px); } .ip-mail-page .ip-mail-two { min-height:440px; } }

.ip-settings-dialog header h2 { min-width:0; margin:0; font-size:22px; line-height:1.5; overflow-wrap:anywhere; }
.ip-settings-dialog header > button { flex:0 0 auto; }
.ip-settings-head > div { min-width:0; flex-wrap:wrap; align-items:center; }
.ip-settings-head input { max-width:100%; min-width:0; font:inherit; }
.ip-mail-dialog-head { flex-wrap:wrap; }
.ip-mail-dialog-head > div { flex-wrap:wrap; }
.ip-mail-thread-head { flex-wrap:wrap; }

/* 原型的标题 / 工具 / 正文层次，仅作用于 IP 业务页面。 */
.platform-page.ip-settings-page { padding:32px; box-sizing:border-box; min-width:0; }
.ip-settings-page .ip-settings-head { margin:0 0 28px; gap:20px 28px; }
.ip-settings-head h1 { margin:0; line-height:1.4; }
.ip-settings-page [data-pref-permission]:empty { display:none; }
.ip-settings-page [data-pref-permission]:not(:empty) { margin:0 0 20px; line-height:1.7; }
.ip-master-page .ip-cases { ; ; }
.ip-master-page .ip-cases-head { margin-bottom:6px; ; }
.ip-master-page .ip-master-views { ; }
.platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) { padding:28px 32px 24px; box-sizing:border-box; }
.platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) > .platform-page-head { margin:0 0 28px; padding:0; flex-shrink:0; flex-wrap:wrap; }
.platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) > .platform-page-head h1 { margin:0; line-height:1.4; }
.platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) > .platform-page-head .sub { margin-top:8px; line-height:1.7; }
.ip-settings-dialog { padding:28px 32px; }
.ip-settings-dialog header { padding-bottom:24px; border-bottom:1px solid var(--line); align-items:flex-start; }
.ip-settings-dialog fieldset { padding:24px 0; }
.ip-settings-dialog footer { padding-top:20px; border-top:1px solid var(--line); flex-wrap:wrap; }
.ip-settings-dialog header + p { margin:20px 0 0; line-height:1.7; }
.ip-host-panel-dialog { position:fixed; inset:0; margin:auto; }
@media (max-width:900px) {
  .platform-page.ip-settings-page,.ip-master-page .ip-cases,
  .platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) { padding:24px; }
}
@media (max-width:600px) {
  .platform-page.ip-settings-page,.ip-master-page .ip-cases,
  .platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) { padding:20px 16px; }
  .ip-settings-page .ip-settings-head,
  .platform-page:is(.ip-mail-page,.ip-transfer-page,.ip-blocks-page) > .platform-page-head { margin-bottom:20px; }
  .ip-settings-dialog { padding:20px; }
  .ip-settings-dialog header { padding-bottom:20px; }
}

/* 模板编辑器复用邮件工具栏；表单控件宽度不能扩散到字体工具。 */
.ip-settings-dialog .ip-email-editor-toolbar select { width:auto; max-width:180px; min-height:30px; padding:4px 8px; }
.ip-settings-dialog .ip-email-editor-toolbar input[type=color] { width:30px; height:30px; padding:2px; }

.ip-template-variables { border:1px solid var(--line); border-radius:6px; padding:12px 16px; }
.ip-template-variables summary { cursor:pointer; font-weight:600; }
.ip-variable-tools { display:flex; flex-wrap:wrap; gap:12px; margin:14px 0 8px; }
.ip-variable-tools label { flex:1 1 180px; }
.ip-template-variables p { font-size:12px; line-height:1.7; color:var(--fg3); margin:8px 0; overflow-wrap:anywhere; }
.ip-variable-list { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:8px; max-height:160px; overflow:auto; padding:4px; }
.ip-variable-list button { display:flex; flex-direction:column; align-items:flex-start; gap:4px; padding:10px; border:1px solid var(--line); border-radius:5px; background:var(--bg); color:var(--fg); text-align:left; font:inherit; cursor:pointer; min-width:0; }
.ip-variable-list button:hover { background:var(--bg-alt); border-color:var(--green); }
.ip-variable-list code { font-size:12px; overflow-wrap:anywhere; white-space:normal; }
.ip-variable-list small { font-size:11px; color:var(--fg3); }

/* 邮件业务内容对齐已确认原型：面包屑 / 紧凑操作栏 / 到底的三栏邮箱。 */
.platform-page.ip-mail-page { padding:0; overflow:hidden; }
.ip-business-crumb { display:flex; gap:14px; align-items:center; padding:18px 24px; border-bottom:1px solid var(--line); color:var(--fg3); font-size:12px; flex:none; }
.ip-mail-page-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:12px; padding:18px 24px 10px; flex:none; }
.ip-mail-page-toolbar h1 { font-size:21px; margin:0 8px 0 0; line-height:1.4; }
.ip-mail-page-toolbar [data-mail-new] { margin-left:auto; }
.ip-mail-page-toolbar [data-mail-templates] { margin-left:0; }
.ip-mail-work-toolbar { padding:8px 24px 18px; display:flex; align-items:center; flex-wrap:wrap; gap:10px; border-bottom:1px solid var(--line); }
.ip-mail-work-toolbar label { display:flex; align-items:center; gap:8px; font-size:12px; }
.ip-mail-work-toolbar :is(input,select) { min-width:0; max-width:100%; height:34px; padding:6px 10px; font:inherit; font-size:12px; border:1px solid var(--line); border-radius:5px; }
.ip-mail-work-toolbar [data-mw-case] { max-width:280px; flex:1 1 180px; }
.ip-mail-work-toolbar [data-mw-filter] { margin-left:auto; flex:1 1 200px; max-width:340px; }
.ip-mail-frame { display:flex; flex-direction:column; flex:1 1 0; min-width:0; min-height:0; margin:16px 24px; border:1px solid var(--line); border-radius:10px; background:var(--bg); overflow:hidden; }
@media (max-width:700px) { .ip-mail-frame { flex:0 0 auto; margin:12px; } }
.ip-mail-two { border:0; border-radius:0; }
.ip-mail-message-line { display:flex; align-items:baseline; justify-content:space-between; gap:10px; width:100%; min-width:0; }
.ip-mail-message-line strong { font-size:12px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.ip-mail-message-line small { font-size:11px; }
/* 列表每一行的首个元素在行内截断（长案名/长邮箱不再折行）；右侧状态保持可见。 */
.ip-mail-message-line > *:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ip-mail-message-line > small:last-child { flex:none; }
.ip-mail-two [data-mw-row] { line-height:1.6; }
.ip-mail-two [data-mw-row] b { font-size:13px; line-height:1.7; }
.ip-mail-two [data-mw-row].on { background:#edf3ef; box-shadow:inset 3px 0 #4e7660; }
.ip-mail-case-disclosure { min-width:0; }
.ip-mail-case-disclosure > summary { padding:8px 0; cursor:pointer; color:var(--fg2); font-size:13px; }
.ip-mail-case-disclosure:has([data-mail-cases][hidden]) { display:none; }


@media(max-width:700px) {
 .ip-business-crumb { padding:14px 16px; }
 .ip-mail-page-toolbar { padding:14px 16px 8px; }
 .ip-mail-work-toolbar { padding:8px 16px 14px; }
}

/* 总表使用原型的四层结构，表格自身滚动，标题和分页保留在工作区。 */
.platform-page.ip-master-page { display:flex; flex-direction:column; ; ; overflow:hidden; }
.ip-master-page > [data-ip-master] { flex:1; min-height:0; }
.ip-master-page .ip-cases { height:100%; box-sizing:border-box; ; ; ; }
.ip-master-page .ip-cases-head { ; ; flex:none; }
.ip-master-page .ip-master-views { margin:0; ; ; flex:none; }
.ip-master-page .ip-cases-filterbar { ; flex:none; }
.ip-master-page .ip-filter-form { border:0; padding:0; border-radius:0; background:transparent; ; }
.ip-master-page .ip-filter-note { font-size:11px; line-height:1.6; }
.ip-master-page .ip-cases-body { ; ; ; }
.ip-master-page .ip-cases-tablewrap { max-height:none; min-height:0; border-radius:6px; }
.ip-master-page .ip-cases-foot { ; flex:none; }
.ip-master-page .ip-table :is(th,td) { ; ; ; }
.ip-master-page .ip-table th { font-weight:400; font-size:12px; color:var(--fg3); background:#f8f9f8; }
.ip-master-page .ip-table td { ; border-right-color:#00000004; }
.ip-master-page .ip-cases-columns,.ip-master-page .ip-cases-editbar { margin:0 30px 12px; flex:none; }
@media(max-width:700px) {
 .platform-page.ip-master-page { height:auto; min-height:calc(100dvh - 24px); overflow:visible; }
 .ip-master-page .ip-cases-head { padding:24px 16px 18px; }
 .ip-master-page .ip-master-views { padding-inline:16px; }
 .ip-master-page .ip-cases-filterbar { padding:14px 16px; }
 .ip-master-page .ip-cases-body { margin-inline:16px; }
 .ip-master-page .ip-cases-tablewrap { max-height:60dvh; }
 .ip-master-page .ip-cases-foot { padding-inline:16px; }
 .ip-master-page .ip-cases-columns,.ip-master-page .ip-cases-editbar { margin-inline:16px; }
}

.ip-mail-two .ui-pane { border:0; border-radius:0; box-shadow:none; padding:32px 24px; color:var(--fg3); font-size:13px; line-height:1.9; background:transparent; }

/* UC01 总表：按已确认原型的业务画布布局，保留尚书外壳。 */
.platform-page.ip-master-page { padding:0; height:100%; min-height:0; }
.ip-master-page .ip-business-crumb { ; }
.ip-master-page .ip-cases-head { ; }
.ip-master-page .ip-cases-head h1 { font-size:26px; ; font-weight:700; }
.ip-master-page .ip-cases-head h1 small { margin-left:12px; font-size:14px; font-weight:400; color:var(--fg3); }
.ip-master-page .ip-cases-head p { display:block; margin-top:8px; }
.ip-table-options { position:relative; }
.ip-table-options summary { list-style:none; cursor:pointer; padding:8px 12px; border:1px solid var(--line); border-radius:6px; font-size:12px; }
.ip-table-options-menu { position:absolute; z-index:10; top:calc(100% + 6px); right:0; min-width:160px; display:grid; gap:6px; padding:10px; background:var(--bg); border:1px solid var(--line); border-radius:8px; box-shadow:0 8px 24px #0001; }
.ip-master-page [hidden] { display:none!important; }
.ip-master-page .ip-filter-form { align-items:center; flex-wrap:wrap; }
/* 一行排布（用户 2026-09-20）：搜索框吃掉剩余宽度，「添加筛选 / 清除全部」紧跟其右，
   「双击字段编辑 ‹ ›」靠右并与按钮之间留空；已应用的筛选条件标签另起一行。 */
/* 搜索框收窄到原来的约 2/3（用户 2026-09-21）：不再顶满整条筛选条。 */
.ip-master-page .ip-filter-form .ip-compact-search { flex:0 1 590px; width:auto; max-width:none; }
.ip-master-page .ip-filter-form :is(.ip-filter-actions,.ip-table-navigation) { flex:none; }
/* 搜索框会吃掉剩余宽度，所以留白要靠这条 padding 保证（auto 外边距只在更宽时才补）。 */
.ip-master-page .ip-filter-form .ip-table-navigation { margin-left:auto; padding-left:32px; }
.ip-master-page .ip-filter-form [data-active-filters] { flex:1 1 100%; display:flex; flex-wrap:wrap; align-items:center; gap:6px; }
.ip-master-page .ip-filter-form [data-active-filters]:empty { display:none; }
/* 「添加筛选」面板：字段 + 取值 + 取消/添加，挂在按钮下面（与其它浮层同一套边距与投影）。 */
.ip-filter-add { position:relative; }
.ip-filter-add-panel { position:absolute; right:0; top:calc(100% + 6px); z-index:6; width:320px; padding:10px 12px; border:1px solid var(--line); border-radius:8px; background:var(--bg); box-shadow:var(--pop); display:flex; flex-direction:column; gap:8px; }
.ip-filter-add-panel[hidden] { display:none; }
.ip-filter-add-panel label { min-width:0; max-width:none; flex:none; display:flex; flex-direction:column; gap:4px; color:var(--fg3); font-size:12px; }
.ip-filter-add-panel :is(input,select) { width:100%; height:32px; padding:0 8px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--fg); font:inherit; font-size:13px; }
.ip-filter-add-panel [data-filter-value] { display:flex; align-items:center; gap:6px; color:var(--fg); }
.ip-filter-add-panel [data-filter-value] :is(input,select) { min-width:0; }
.ip-filter-add-actions { display:flex; justify-content:flex-end; gap:6px; }
/* 总表搜索（用户 2026-09-20）：一个模糊搜索框，够宽、不截断（原来塞了"搜索范围"下拉、输入框被挤窄）。 */
.ip-compact-search { display:flex; flex:1 1 420px; min-width:280px; max-width:none; gap:0; }
.ip-compact-search input[name=search_text] { flex:1 1 auto; min-width:0; width:100%; }
.ip-master-page .ip-compact-search input { border-radius:6px; }
.ip-table-navigation { margin-left:auto; display:flex; gap:12px; align-items:center; }
.ip-table-navigation > span { font-size:11px; color:var(--fg3); }
.ip-master-page .ip-table-caption { display:none; }
.ip-master-page .ip-cases-body { display:flex; flex-direction:column; ; }
.ip-master-page .ip-cases-tablewrap { flex:1; overflow:auto; scrollbar-width:auto; touch-action:pan-y; }
.ip-master-page .ip-cases-tablewrap::-webkit-scrollbar { height:12px; width:10px; }
.ip-master-page .ip-cases-tablewrap::-webkit-scrollbar-thumb { background:#cbd1cf; border:3px solid white; border-radius:8px; }
.ip-master-page .ip-cases-tablewrap.is-panning { cursor:grabbing; user-select:none; }
.ip-master-page .ip-table { table-layout:fixed; }
.ip-master-page .ip-table td { ; box-sizing:border-box; ; color:var(--fg); }
.ip-master-page .ip-cell-link { color:var(--fg); ; }
.ip-master-page .ip-cell:not(.ip-cell-wrap) { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ip-master-page .ip-cell-wrap { white-space:normal; }
.ip-master-page .ip-tone-muted { ; }
.ip-master-page .ip-col-resizer { position:absolute; right:0; top:0; height:100%; width:8px; margin:0; touch-action:none; }
.ip-review-projection { --review-source:#10B981; border-left:3px solid var(--review-source); padding:2px 0 2px 10px; display:block; }
.ip-review-projection.source-rule { --review-source:#2563EB; }
.ip-review-projection.source-official { --review-source:#C1FF72; }
.ip-master-page .ip-review-projection .ip-cell-suggested { color:var(--review-source); font-weight:400; ; }
.ip-review-projection small { display:block; color:var(--fg3); font-size:var(--ip-text-2xs); line-height:1.7; font-weight:400; white-space:normal; margin-top:4px; }
@keyframes ip-review-pulse { 0%,100% { opacity:.5; } 50% { opacity:1; } }
@media(prefers-reduced-motion:reduce) { .ip-master-page .ip-review-projection .ip-cell-suggested { animation:none; } }

.ip-master-page .ip-compact-status { ; flex:none; }
.ip-master-page .ip-table .ip-row-action { width:104px; white-space:nowrap; }

.ip-source-badge { display:inline-flex; align-items:center; gap:6px; padding:3px 8px; border-radius:4px; font-size:11px; font-weight:600; border:1px solid color-mix(in srgb,var(--review-source) 40%,white); background:color-mix(in srgb,var(--review-source) 13%,white); color:#24322a; }
.ip-source-badge::before { content:''; width:6px; height:6px; border-radius:2px; background:var(--review-source); }
.ip-source-badge.source-rule { --review-source:#2563EB; color:#194aa9; }
.ip-source-badge.source-agent { --review-source:#10B981; color:#075b42; }
.ip-source-badge.source-official { --review-source:#C1FF72; background:#e6ffb9; color:#354619; }
.ip-review-dialog { position:fixed; inset:0; margin:auto; width:min(980px,calc(100vw - 40px)); height:min(780px,calc(100dvh - 40px)); max-width:none; max-height:none; padding:0; border:1px solid var(--line); border-radius:10px; background:var(--bg); color:var(--fg); }
.ip-review-dialog[open] { display:flex; flex-direction:column; }
.ip-review-dialog::backdrop { background:rgba(24,33,29,.36); }
.ip-review-dialog > header { display:flex; align-items:center; justify-content:space-between; padding:22px 28px; border-bottom:1px solid var(--line); }
.ip-review-dialog h2 { margin:0; font-size:21px; }
.ip-review-dialog [data-review-body] { padding:22px 28px; min-height:0; overflow:auto; }
/* 新增案件与案件详情同壳（用户 2026-09-20）：同一头部节奏、同一字段区留白与说明行。 */
dialog.ip-create-case > header { padding:24px 32px 16px; border-bottom:0; }
dialog.ip-create-case [data-review-body] { padding:0 32px 24px; }
/* 协作态保持原来的圆角（.ip-review-dialog 的 10px）：面板停靠时不是详情的 4px。 */
dialog.ip-create-case.is-collaborating { border-radius:10px; }
.ip-create-case .ip-manual-case-note { margin:0 0 12px; font-size:13px; line-height:20px; color:var(--ip-m4-muted); }

.ip-review-formal { display:block; margin-bottom:8px; }
.ip-review-formal > small { display:block; font-size:var(--ip-text-2xs); color:var(--fg3); font-weight:400; }
.ip-review-projection + .ip-review-projection { margin-top:10px; }
.ip-master-page .ip-review-projection .ip-cell { white-space:normal; overflow-wrap:anywhere; }

.ip-status-review-case { grid-column:1/-1; font-weight:650; overflow-wrap:anywhere; }

/* Spacing copied from approved prototype.css; platform shell stays unchanged. */
.ip-master-page .ip-business-crumb{height:49px;padding:0 25px}
.ip-master-page .ip-cases-head{;}
.ip-master-page .ip-master-views{;padding:0 30px}

.ip-master-page .ip-cases-filterbar{gap:9px;padding:16px 30px}
.ip-master-page .ip-cases-foot{gap:20px;padding:14px 30px 22px}

.ip-master-page .ip-cases {padding-bottom:0;}

/* The platform scroll wrapper adds 20/24/60px around every page; UC01 owns its spacing. */
#main > .main-scroll:has(> .ip-master-page) { padding:0!important; overflow:hidden; min-height:0; }
.ip-cases-editbar-actions .btn:disabled { opacity:.4; cursor:not-allowed; }

.ip-manual-case-form {display:flex;flex-direction:column;gap:20px;}
.ip-manual-case-fields .ip-joint-choice {flex-direction:row;align-items:center;}
.ip-joint-choice input {width:16px;flex:none;}
.ip-customer-search {display:flex;gap:10px;}
/* 搜索框是色块、不带边框（用户 2026-09-21）：输入与「搜索」同一份外观，
   客户、案件、文件分类三个消费方共用，页面不再各写一套。 */
.ip-customer-search input,
.ip-customer-search input:not([type=checkbox]) {
  min-width:0;
  flex:1;
  box-sizing:border-box;
  height:32px;
  padding:0 10px;
  border:0;
  border-radius:4px;
  background:var(--ip-m4-fill);
  color:var(--fg);
  font:inherit;
  font-size:13px;
}
.ip-customer-search input:focus { outline:2px solid var(--ip-m4-muted); outline-offset:0; }
.ip-customer-search .btn { flex:none; box-sizing:border-box; height:32px; border:0; border-radius:4px; background:var(--ip-m4-fill); }
.ip-customer-search .btn:hover { background:var(--ip-m4-surface,#e9e9e9); }
/* 客户选择（公共组件 ip-customer-select.js）：收起＝已选胶囊＋「＋ 选择客户」，
   展开＝搜索行＋勾选列表；说明文字跟着列表走，不留一块空白让人猜怎么用。 */
.ip-customer-select {display:flex;flex-direction:column;gap:8px;}
.ip-customer-chosen {display:flex;flex-wrap:nowrap;align-items:center;gap:6px;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;}
/* 横滑时"＋选择客户"要一直看得见：贴在滚动区右缘。 */
.ip-customer-chosen .ip-customer-toggle {position:sticky;right:0;flex:none;background:var(--bg-alt);}
.ip-customer-toggle {flex:none;}
.ip-customer-panel {display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:6px;background:var(--ip-m4-surface,#fafafa);}
.ip-customer-panel[hidden] {display:none!important;}
.ip-customer-options {display:flex;flex-direction:column;max-height:220px;overflow:auto;}
.ip-customer-option {display:flex;align-items:center;gap:8px;padding:6px 4px;border-radius:4px;cursor:pointer;}
.ip-customer-option:hover {background:rgba(0,0,0,.04);}
.ip-customer-option.is-selected {font-weight:600;}
/* 候选项一行：客户名先占位、不逐字换行；申请人/已关联跟在后面，过长截断（用户 2026-09-20 截图里
   客户名被挤成一列一个字，就是因为元信息 flex:none 抢位 + 名字 overflow-wrap:anywhere）。 */
.ip-customer-option {flex-wrap:nowrap;}
.ip-customer-option-name {flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:normal;}
.ip-customer-option.is-selected .ip-customer-option-name {font-weight:600;}
.ip-customer-message {margin:0;font-size:11px;line-height:1.7;color:var(--fg3);}

/* 联系人明细（电话/称呼）：分号文本仍是主输入，明细只补不在文本里的那两项，按邮箱认领。 */
.ip-contact-details {display:flex;flex-direction:column;gap:6px;margin-top:6px;}
.ip-contact-detail-title {font-size:12px;font-weight:400;color:var(--fg3);}
.ip-contact-detail {display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:center;}
.ip-contact-detail-mail {font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ip-contact-detail .ip-field-input {padding:5px 7px;}

/* 简单邮箱列表：边打边成胶囊（输入到分号/回车就落一枚），写回的仍是同一份结构化值。 */
.ip-email-chips {flex-wrap:wrap;align-items:center;gap:6px;}
.ip-email-chips .ip-address-list {display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;}
.ip-chip-entry {min-width:180px;flex:1 1 180px;}

/* 选项多的下拉（审查状态这类）带筛选框。 */
.ip-select-search {display:block;padding:6px 8px;border-bottom:1px solid var(--line);}
.ip-select-search input {width:100%;box-sizing:border-box;padding:5px 7px;font:inherit;}
.ip-select-empty {margin:0;padding:8px;font-size:12px;color:var(--fg3);}
.ip-manual-case-form footer {display:flex;justify-content:flex-end;}
@media(max-width:600px){.ip-manual-case-fields{grid-template-columns:minmax(0,1fr);}}

/* 原型的合并搜索框与字段来源样式。 */
.ip-master-page .ip-filter-form{display:flex;gap:12px;}
.ip-master-page .ip-compact-search{width:330px;max-width:100%;flex:0 1 330px;border:1px solid var(--line);border-radius:6px;background:#f7f7f7;overflow:hidden;}
.ip-master-page .ip-compact-search select{width:90px!important;min-width:0;border:0!important;background:transparent;padding:8px;}
.ip-master-page .ip-compact-search input{width:0!important;flex:1;min-width:60px;border:0!important;background:transparent;padding:8px 10px;}
.ip-master-page .ip-compact-status{width:116px!important;min-width:0;padding:8px;}
.ip-master-page .ip-filter-actions{gap:6px;}
.ip-table td .ip-cell.is-dirty{border:0;background:transparent;}
.ip-table td .ip-cell.is-dirty::after{content:'未保存';display:inline-block;margin-left:8px;padding:1px 5px;font-weight:400;font-size:var(--ip-text-2xs);line-height:1.6;color:var(--fg3);border:1px solid var(--line);border-radius:3px;}
.source-rule{--review-source:#2563EB}.source-agent{--review-source:#10B981}.source-official{--review-source:#C1FF72}
.ip-cell-suggested {color:var(--review-source,#10B981)!important;font-weight:400!important;animation:ip-review-prototype 2.6s ease-in-out infinite}

.source-official .ip-cell-suggested {display:block;width:fit-content;max-width:100%;padding:3px 9px;border-radius:4px;background:#293326}
.ip-review-previous{margin:8px 0 0 13px;font-size:11px;font-weight:400;color:var(--fg3);line-height:1.7;}
@keyframes ip-review-prototype{0%,100%{opacity:1}50%{opacity:.55}}
.ip-master-page .ip-review-projection .ip-cell-suggested{animation:ip-review-prototype 2.6s ease-in-out infinite;}
.ip-draft-proposed{color:#10B981!important;font-weight:400!important;animation:ip-review-prototype 2.6s ease-in-out infinite;}
.ip-draft-proposed:focus{animation:none;}
.ip-review-dialog.is-collaborating{inset:8px auto 8px calc(var(--sidebar-width,176px) + 8px);margin:0;width:calc(100vw - var(--sidebar-width,176px) - var(--ai-width,36vw) - 24px);height:calc(100dvh - 16px);z-index:60;}
.ip-manual-case-form footer{gap:10px;}
.ip-review-center{display:flex;flex-direction:column;gap:18px;}
.ip-review-controls,.ip-review-center footer{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.ip-review-center label{display:flex;align-items:center;gap:8px;font-size:12px;}
.ip-review-center input[type=checkbox]{width:15px;height:15px;flex:none;margin:0;}
.ip-review-center input:not([type=checkbox]),.ip-review-center select{min-width:0;max-width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:5px;font:inherit;}
.ip-review-center [data-scope]{font-size:12px;color:var(--fg3);line-height:1.7;}
.ip-review-item{border:1px solid var(--line);border-left:3px solid var(--review-source);padding:20px 22px;border-radius:6px;margin-bottom:16px;min-width:0;}
.ip-review-item header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;}
.ip-review-item p{font-size:12px;line-height:1.8;overflow-wrap:anywhere;}
.ip-review-item strong{font-weight:700;overflow-wrap:anywhere;}
.ip-review-values{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding:18px 0;margin-top:16px;border-top:1px solid var(--line);}
.ip-review-values small{display:block;font-size:11px;color:var(--fg3);margin-bottom:8px;}
.ip-review-values span{overflow-wrap:anywhere;}
.ip-review-item.is-resolved .ip-cell-suggested{color:var(--fg)!important;font-weight:700!important;animation:none!important;background:transparent;}
.ip-review-center footer{position:sticky;bottom:0;padding:16px 0;background:var(--bg);border-top:1px solid var(--line);}
.ip-review-center [data-result]{width:100%;margin:0;font-size:12px;}
@media(prefers-reduced-motion:reduce){.ip-cell-suggested, .ip-draft-proposed {animation:none!important;opacity:1!important}}
@media(max-width:700px){.ip-table-navigation>span{display:none}.ip-review-values{grid-template-columns:1fr}.ip-review-item{padding:14px}.ip-review-dialog.is-collaborating{left:8px;width:calc(100vw - 16px);}}

/* Stable dialog chrome: title may wrap, controls never change side or order. */
.ip-dialog-head, .ip-review-dialog>header, .ip-settings-dialog>form>header, .ip-mail-dialog-head, .ip-host-panel-dialog>header, .ip-mail-preview>form>header {display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:nowrap;gap:16px}
.ip-dialog-head {padding:16px 20px; border-bottom:1px solid var(--line);}
.ip-dialog-head h2 {margin:0; font-size:18px;}
.ip-dialog-head h2, .ip-review-dialog>header h2, .ip-mail-dialog-head h2, .ip-host-panel-dialog>header h2 {min-width:0;flex:1;overflow-wrap:anywhere}
.ip-dialog-actions, .ip-mail-dialog-head>div, .ip-host-panel-dialog>header>div {display:flex;align-items:center;flex-wrap:nowrap;flex:0 0 auto;width:auto;gap:8px;margin-left:auto}
.ip-dialog-actions [hidden] {display:none!important;}

@media(max-width:600px) {
  .ip-mail-dialog-head, .ip-review-dialog>header, .ip-host-panel-dialog>header {gap:8px;padding:16px}

  .ip-mail-dialog-head .btn {padding-left:6px;padding-right:6px;white-space:nowrap}
}

/* Case history: field / previous value / saved value, with metadata on demand. */
.ip-log-entries {border-top:1px solid var(--line);}
.ip-log-entry {border-bottom:1px solid var(--line);min-width:0;}
.ip-log-entry > summary {display:flex;align-items:center;gap:16px;padding:18px 0;cursor:pointer;list-style:none;}
.ip-log-entry > summary::-webkit-details-marker {display:none;}
.ip-log-entry > summary:hover {background:var(--bg2,#f8f9f9);}
.ip-log-entry > summary > .ip-diff {flex:1;min-width:0;margin:0;}
.ip-log-entry .ip-diff-row {display:grid;grid-template-columns:minmax(110px,.55fr) minmax(0,2fr);align-items:start;gap:24px;padding:0;border:0;margin:0;}
.ip-log-entry .ip-diff-label {font-weight:600;font-size:14px;padding-top:20px;overflow-wrap:anywhere;}
.ip-log-entry .ip-diff-pair {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;}
.ip-log-entry .ip-diff-old,.ip-log-entry .ip-diff-new {padding:0;border:0;border-radius:0;background:transparent;min-width:0;}
.ip-log-entry .ip-diff-pair small {display:block;color:var(--fg3);font-size:12px;margin-bottom:4px;}
.ip-log-entry .ip-diff-pair .ui-text-paragraph {margin:0;overflow-wrap:anywhere;font-size:14px;line-height:1.6;}
.ip-log-entry .ip-diff-new .ui-text-paragraph {font-weight:600;}
.ip-log-chevron {flex:none;width:24px;text-align:center;color:var(--fg3);font-size:22px;}
.ip-log-entry[open] > summary .ip-log-chevron {transform:rotate(90deg);}
.ip-log-expanded {padding:0 0 18px;background:var(--bg2,#f8f9f9);}
.ip-log-expanded dl {display:flex;flex-wrap:wrap;gap:12px 32px;margin:0;padding:16px 0;}
.ip-log-expanded dl > div {min-width:0;}
.ip-log-expanded dt {font-size:12px;color:var(--fg3);margin-bottom:4px;}
.ip-log-expanded dd {margin:0;font-size:13px;overflow-wrap:anywhere;}
.ip-log-event {flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;overflow-wrap:anywhere;}


@media(max-width:600px) {
 .ip-log-entry .ip-diff-row {grid-template-columns:1fr;gap:8px;}
 .ip-log-entry .ip-diff-label {padding-top:0;}
 .ip-log-entry .ip-diff-pair {gap:12px;}

}

/* Familiar attachment chips; frozen messages never expose removal controls. */


.ip-mail-chip-file {display:inline-flex;align-items:center;gap:7px;min-width:0;max-width:320px;border:0;padding:0;background:transparent;color:inherit;font:inherit;cursor:pointer;}
.ip-mail-chip-file > .ui-text-line1 {min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}


.ip-mail-dialog-head h2 {line-height:1.5;overflow-wrap:anywhere;}


/* 所有胶囊行统一口径（用户 2026-09-20）：**一行排列、多出来的溢出裁掉**，
   可点的按钮/输入框不参与收缩（.ip-flex-keep）。 */
.ip-address-chips,.ip-address-list {display:flex;flex-wrap:nowrap;align-items:center;gap:6px;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;}
.ip-address-chips {padding:3px 0;min-height:34px;}
.ip-address-list {display:contents;}
.ip-address-chip {display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--fg);font-size:13px;}
.ip-address-chip > span,.ip-address-chip .ip-address-text>span {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;}
.ip-address-chip button {flex:none;border:0;background:transparent;color:var(--fg3);padding:0 2px;font-size:17px;line-height:1;cursor:pointer;}
.ip-address-chip .ip-address-text {min-width:0;max-width:100%;padding:0;color:inherit;font:inherit;text-align:left;line-height:20px;}
.ip-address-chip.is-invalid {border-color:#d8a1a1;background:#fff7f7;color:#8f2525;}
.ip-address-error {margin:4px 0 0;color:#9b2c2c;font-size:12px;line-height:18px;}


.ip-manual-case-fields .ip-joint-choice {align-self:end;min-height:36px;padding:8px 0;gap:10px;box-sizing:border-box;}
.ip-manual-case-fields .ip-joint-choice input {width:16px;height:16px;padding:0;margin:0;accent-color:#10B981;}
.ip-mail-supplement {display:flex;justify-content:flex-start;}

/* Attachment preview owns its modal shell and uses the same dialog chrome. */
dialog.ip-mail-preview-dialog {position:fixed;inset:0;margin:auto;width:min(1080px,calc(100vw - 48px));height:min(860px,calc(100dvh - 48px));max-width:none;max-height:none;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--fg);overflow:hidden;box-shadow:0 24px 80px #0003;}
dialog.ip-mail-preview-dialog::backdrop {background:rgba(24,33,29,.36);}
.ip-mail-preview-dialog [data-mail-preview-host] {width:100%;height:100%;min-width:0;min-height:0;}
.ip-mail-preview-dialog .ui-preview {border:0;border-radius:0;}
.ip-mail-preview-dialog .ui-preview-head {padding:18px 24px;gap:20px;background:var(--bg);}
.ip-mail-preview-dialog .ui-preview-head b {font-size:17px;line-height:1.5;}
.ip-mail-preview-dialog .ui-preview-actions {flex-wrap:nowrap;align-items:center;}
.ip-mail-preview-dialog .ui-preview-body {min-height:0;background:#f3f4f4;}
.ip-mail-preview-dialog .ui-preview-frame {display:block;min-height:0;}
.ip-mail-preview-dialog:has(.ui-preview.is-fullscreen) {inset:0;margin:0;width:100vw;height:100dvh;border:0;border-radius:0;}
.ip-mail-preview-dialog .ui-preview.is-fullscreen {position:relative;inset:auto;width:100%;height:100%;}
@media(max-width:600px){dialog.ip-mail-preview-dialog{width:calc(100vw - 16px);height:calc(100dvh - 16px);}.ip-mail-preview-dialog .ui-preview-head{padding:14px;gap:10px;}.ip-mail-preview-dialog .ui-preview-head b{font-size:15px;}}

/* UC01 unified upload uses the same centered dialog geometry as case details. */
.ip-material-dialog{position:fixed;inset:0;margin:auto;width:min(1100px,calc(100vw - 48px));height:min(880px,calc(100dvh - 48px));max-width:none;max-height:none;padding:0;border:1px solid var(--line);border-radius:14px;background:var(--bg,#fff);color:var(--fg);overflow:hidden}
.ip-material-dialog[open]{display:flex;flex-direction:column}.ip-material-dialog::backdrop{background:rgba(22,30,28,.35)}
.ip-material-dialog>header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:24px 28px;border-bottom:1px solid var(--line);flex-shrink:0}.ip-material-dialog h2{margin:0;font-size:22px}.ip-material-dialog p{margin:8px 0;color:var(--fg3);line-height:1.6}.ip-material-dialog>main{padding:24px 28px;overflow:auto;min-height:0;flex:1}.ip-material-dialog>footer{display:flex;align-items:center;gap:16px;flex-wrap:wrap;border-top:1px solid var(--line);padding:18px 28px;flex-shrink:0}.ip-material-dialog input[type=checkbox]{width:16px;height:16px;margin:0;flex-shrink:0}.ip-material-dialog label:has(input[type=checkbox]){display:flex;align-items:center;gap:10px}.ip-material-drop{display:flex;flex-direction:column;gap:12px;padding:24px;border:1px dashed var(--line);border-radius:8px;background:#f7f8f8}.ip-material-drop small{color:var(--fg3)}
.ip-material-toolbar{display:flex;align-items:center;justify-content:space-between;margin-top:28px}.ip-material-local{display:grid;grid-template-columns:minmax(0,1fr) 180px auto auto;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.ip-material-local strong{overflow-wrap:anywhere}.ip-material-local small{grid-column:1/-1;color:#a33}.ip-material-item{padding:20px 0;border-top:1px solid var(--line)}.ip-material-item>header{display:flex;justify-content:space-between;gap:20px}.ip-material-item strong{overflow-wrap:anywhere}.ip-material-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 24px;margin-top:18px}.ip-material-fields label{display:flex;flex-direction:column;gap:8px;min-width:0}.ip-material-fields .wide{grid-column:1/-1}.ip-material-fields :is(input,select){width:100%;min-width:0;box-sizing:border-box;padding:9px 12px;border:1px solid var(--line);border-radius:6px;background:var(--bg,#fff);color:var(--fg)}.ip-material-search{display:flex;gap:8px}.ip-material-fields small{color:var(--fg3)}
@media(max-width:650px){.ip-material-dialog{width:calc(100vw - 16px);height:calc(100dvh - 16px)}.ip-material-dialog>header,.ip-material-dialog>main,.ip-material-dialog>footer{padding:16px}.ip-material-fields{grid-template-columns:1fr}.ip-material-local{grid-template-columns:minmax(0,1fr) auto}.ip-material-local strong{grid-column:1/-1}}

/* Exact review geometry from the approved local prototype (review-sources.css). */
.review-center-dialog{width:min(1080px,calc(100vw - 40px));height:min(850px,calc(100dvh - 40px));max-width:none;max-height:calc(100dvh - 40px);padding:0;border-radius:10px;overflow:hidden}.review-center-dialog[open]{display:flex;flex-direction:column}.review-center-dialog::backdrop{background:rgba(24,33,29,.36)}.review-center-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:24px 28px;flex:none;border-bottom:1px solid var(--line)}.review-center-head h2{font-size:21px;margin-top:5px}.review-tabs{display:flex;gap:22px;padding:0 28px;overflow:auto;flex:none;border-bottom:1px solid var(--line)}.review-tabs button{display:flex;align-items:center;gap:8px;padding:14px 0;border-bottom:2px solid transparent;white-space:nowrap}.review-tabs button.on{border-color:var(--fg)}.review-tabs button>span:last-child{font-size:12px}.review-center-body{padding:22px 28px;overflow:auto;min-height:0;flex:1;overscroll-behavior:contain}.review-select-all{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:12px;margin-bottom:20px}.review-select-all>span{color:var(--fg3);font-size:11px}.review-select-all label,.review-item-title label{display:flex;align-items:baseline;gap:9px;min-width:0}.review-center-dialog input[type="checkbox"]{width:15px;height:15px;min-height:15px;flex:none;accent-color:#2563EB}.review-item{border:1px solid var(--line);border-left:3px solid var(--review-source);padding:20px 22px;border-radius:6px;margin-bottom:16px;min-width:0}.review-item-title{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px}.review-item-title>span{font-size:11px;color:var(--fg3)}.review-item-title strong{overflow-wrap:anywhere;line-height:1.75}.review-case-name{font-size:12px;color:var(--fg3);line-height:1.8;margin:8px 0 16px;overflow-wrap:anywhere}.review-value-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding:18px 0;border-top:1px solid var(--line)}.review-value-grid>div{min-width:0}.review-value-grid label{font-size:11px;color:var(--fg3);display:block;margin-bottom:8px}.review-value-grid p{font-size:14px;line-height:1.85;white-space:pre-wrap;overflow-wrap:anywhere}.review-evidence{font-size:12px;line-height:1.8;padding:14px;background:#f7f8f7;border-radius:5px;color:var(--fg2)}.review-evidence p+p{margin-top:5px}.review-evidence .btn{margin-top:10px;min-height:32px}.review-evidence small{display:block;font-size:11px;color:var(--fg3);margin-top:8px}.review-checklist{display:grid;gap:12px;margin:20px 0}.review-checklist label{display:flex;align-items:baseline;gap:9px;font-size:12px;line-height:1.7}.review-checklist input{accent-color:#637f28!important}.review-actions{display:flex;flex-wrap:wrap;gap:9px}.review-return{font-size:12px;padding:12px 0 0;color:var(--fg2)}.review-error{font-size:12px;color:#8c5420;line-height:1.8;margin-top:12px;overflow-wrap:anywhere}.review-receipt{font-size:12px;line-height:1.8;margin-top:14px;font-weight:650;color:var(--fg)}.review-center-note{font-size:12px;line-height:1.8;margin-bottom:18px;color:var(--fg3)}.review-center-footer{display:flex;align-items:center;justify-content:space-between;gap:12px 20px;flex-wrap:wrap;flex:none;padding:16px 28px;border-top:1px solid var(--line);font-size:12px;color:var(--fg3)}.review-center-footer>div{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.review-failure{display:flex;align-items:center;gap:6px;font-size:11px}.review-empty{padding:30px;color:var(--fg3);text-align:center}

.ip-material-dialog.review-center-dialog{inset:0;margin:auto;width:min(1080px,calc(100vw - 40px));height:min(850px,calc(100dvh - 40px))}
.ip-material-dialog .review-item-title label{align-items:center}.ip-material-dialog .official-value{color:var(--fg)!important;font-weight:700!important}.ip-material-dialog .source-rule{--proposal-ink:#2563EB;--review-source:#2563EB}.ip-material-dialog .source-assignment{--proposal-ink:#566a78;--review-source:#b6c2c8}.ip-material-dialog .proposed-text{color:var(--proposal-ink);font-weight:400;animation:ip-review-prototype 2.6s ease-in-out infinite}.ip-completion-dialog{width:min(820px,calc(100vw - 40px));height:auto;max-height:calc(100dvh - 40px)}.ip-material-dialog [hidden]{display:none!important}.ip-material-dialog .review-tabs button{border-radius:0;background:transparent;color:var(--fg)}
@media(max-width:650px){.ip-material-dialog .review-value-grid{grid-template-columns:1fr}.ip-material-dialog .review-item{padding:16px}}
@media(prefers-reduced-motion:reduce){.ip-material-dialog .proposed-text{animation:none}}

/* Material intake: compact steps and one stable action area. */
dialog.ip-material-dialog,dialog.ip-material-dialog.review-center-dialog{background:#fff;color:#242933;width:min(960px,calc(100vw - 40px));height:auto;max-height:calc(100dvh - 40px)}
dialog.ip-material-dialog[data-stage=review]{height:min(800px,calc(100dvh - 40px))}
dialog.ip-completion-dialog{width:min(780px,calc(100vw - 40px));height:auto!important}
.ip-material-dialog>header{padding:22px 28px;align-items:flex-start}.ip-material-dialog>header>div{min-width:0}.ip-material-dialog>header p{font-size:13px;overflow-wrap:anywhere;margin:8px 0 0}.ip-material-dialog>header [aria-label]{width:32px;height:32px;padding:0;font-size:23px;flex:none}
.ip-material-dialog>main{flex:0 1 auto;padding:24px 28px}.ip-material-dialog[data-stage=review]>main{flex:1}.ip-material-dialog>footer{justify-content:space-between;font-size:12px;color:#747b80;padding:16px 28px}.ip-material-dialog>footer>span{flex:1;min-width:0;overflow-wrap:anywhere}.ip-material-dialog>footer>div{display:flex;gap:10px;flex:none}
.ip-material-drop{align-items:center;text-align:center;padding:30px 20px;gap:12px;border:1px dashed #cbd3d0;background:#f8faf9}.ip-material-drop strong{font-size:15px}.ip-material-drop .btn{border:1px solid #d3dad7;background:white}.ip-material-local{grid-template-columns:minmax(0,1fr) auto 32px;gap:16px;font-size:13px}.ip-material-local>span{color:#747b80;font-size:12px;max-width:230px;overflow-wrap:anywhere}.ip-material-local strong{font-weight:600}.ip-material-local .btn{padding:4px}
.ip-completion-dialog .ip-material-fields{gap:22px 20px}.ip-completion-dialog .ip-material-fields>label{display:flex;flex-direction:column;align-items:stretch;gap:10px}.ip-completion-dialog .ip-material-fields>label>span{display:flex;align-items:center;gap:8px;font-size:14px}.ip-completion-dialog [data-field-wrap=case]{grid-column:1/-1}.ip-completion-dialog .ip-material-search{display:flex;gap:8px}.ip-completion-dialog .ip-material-search input{flex:1;min-width:0}.ip-completion-dialog .ip-material-search button{flex:none;border:1px solid #d5dad8;padding:8px 18px}.ip-completion-dialog .ip-material-fields input[type=checkbox]{appearance:auto;width:16px;height:16px;min-height:16px;padding:0;margin:0;accent-color:#10b981}.ip-completion-dialog .ip-material-fields :is(input:not([type=checkbox]),select){height:40px;font:inherit;font-size:14px;border:1px solid #d9dedc;background:#fff;color:#242933}.ip-completion-dialog select:disabled{background:#f7f8f8;color:#89918e}.ip-completion-dialog .ip-completion-guide{font-size:13px;background:#f5f8f7;padding:12px 14px;border-radius:6px;margin:0 0 20px}.ip-material-dialog .review-item{margin-bottom:12px}.ip-material-dialog .ip-material-toolbar{gap:16px}.ip-material-toolbar h3{min-width:0;overflow-wrap:anywhere;font-size:15px}.ip-material-toolbar button{flex:none}
@media(max-width:650px){dialog.ip-material-dialog,dialog.ip-material-dialog.review-center-dialog{width:calc(100vw - 24px);max-height:calc(100dvh - 24px)}.ip-material-dialog>header,.ip-material-dialog>main,.ip-material-dialog>footer{padding:16px}.ip-material-local{gap:8px}.ip-material-local>span{max-width:120px}.ip-material-dialog>footer{align-items:flex-start}.ip-material-dialog>footer>div{margin-left:auto}}

.ip-material-inline.review-center-dialog{position:static;inset:auto;margin:20px 0;width:100%;height:auto!important;max-height:none;border:1px solid #e0e5e2;border-radius:8px;display:block}.ip-material-inline>header{padding:18px 20px}.ip-material-inline>main{overflow:visible;padding:16px 20px}.ip-material-inline>footer{padding:16px 20px}.ip-material-inline h2{font-size:17px}.ip-material-missing{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 0;border-bottom:1px solid #e5e8e6}.ip-material-missing>div{min-width:0}.ip-material-missing h3{font-size:14px;overflow-wrap:anywhere;margin:0}.ip-material-missing p{font-size:12px}.ip-material-missing button{flex:none}
/* Override shared form centering and fixed inset auto-stretch. */
dialog.ip-material-dialog:not([data-stage=review]),dialog.ip-completion-dialog{height:fit-content!important;min-height:0!important}
.ip-completion-dialog .ip-material-fields>label{align-items:stretch!important;justify-content:flex-start!important;text-align:left!important}
.ip-completion-dialog .ip-material-fields>label>span,.ip-completion-dialog .ip-material-search{align-self:stretch!important;width:100%;justify-content:flex-start!important;text-align:left!important}
.ip-completion-dialog .ip-material-search input{width:100%}.ip-completion-dialog>footer{margin-top:0}

/* Completion asks only for missing facts; optional corrections stay collapsed. */
dialog.ip-completion-dialog{width:min(660px,calc(100vw - 40px))}.ip-completion-dialog .ip-material-fields{grid-template-columns:minmax(0,1fr);gap:20px;margin-top:20px}.ip-completion-dialog .ip-material-fields>label{width:100%}.ip-completion-dialog .ip-material-fields .is-required>span{font-weight:600}.ip-completion-dialog .ip-material-fields .is-required>span:after{content:'待补全';font-size:11px;font-weight:400;color:#966729;margin-left:auto}.ip-completion-dialog .ip-material-search{display:grid;grid-template-columns:minmax(0,1fr) auto}.ip-completion-dialog .ip-completion-guide{background:transparent;padding:0;margin:0 0 14px;line-height:1.75}.ip-completion-dialog .ip-material-recognized{padding:12px 14px;border-radius:6px;background:#f5f8f7;color:#68756e;font-size:12px;overflow-wrap:anywhere}.ip-material-extras{border-top:1px solid #e5e8e6;padding-top:16px}.ip-material-extras>summary{cursor:pointer;color:#65756d;font-size:13px}.ip-material-extras .ip-material-fields{margin-top:16px}.ip-completion-dialog>header h2{font-size:21px}.ip-completion-dialog>header{padding:24px 28px}.ip-completion-dialog>main{padding:22px 28px 26px}.ip-completion-dialog>footer .btn{min-height:38px;padding:8px 16px}.ip-completion-dialog>footer{background:#fafbfa}

/* Direct editing: parent/child classification and a single select indicator. */
.ip-completion-dialog .ip-material-field{display:flex;flex-direction:column;align-items:stretch;gap:10px;min-width:0;text-align:left}.ip-completion-dialog .ip-material-field>span{display:flex;align-items:center;font-size:14px;font-weight:600;line-height:1.5}.ip-completion-dialog .ip-material-field.is-required>span:after{content:'待补全';margin-left:auto;color:#966729;font-size:11px;font-weight:400}
.ip-completion-dialog .ip-material-kind-group{display:grid;gap:16px;margin:0;padding:0;min-width:0}.ip-completion-dialog .ip-material-subfield{margin-left:12px;padding-left:16px;border-left:2px solid #e2e9e5}.ip-completion-dialog .ip-material-subfield>span{font-weight:400;color:#64736b}
.ip-completion-dialog .ip-material-fields select{appearance:none!important;-webkit-appearance:none!important;box-sizing:border-box;height:42px!important;border-radius:7px!important;padding:9px 40px 9px 12px!important;background-color:#fff!important;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23717b75' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m7 10 5 5 5-5'/%3E%3C/svg%3E")!important;background-position:right 12px center!important;background-size:16px 16px!important;background-repeat:no-repeat!important;box-shadow:none}.ip-completion-dialog select:focus{outline:2px solid #a4d7c2;outline-offset:1px}.ip-completion-dialog .ip-material-field .ip-material-search{width:100%}


.ip-unified-review-page{background:#fff;min-width:0}
/* Independent file review and shared preview. */
#main > .main-scroll:has(> .ip-unified-review-page){padding:0!important;min-height:0}
.ip-unified-review-page [data-unified-review]{padding:0 30px 20px}
.ip-case-review{color:var(--fg,#1e232c);font-size:14px;min-width:0}
.ip-case-review *,.ip-review-preview *{box-sizing:border-box}
.ip-case-review [hidden]{display:none!important}

.ip-case-review label{display:flex;align-items:center;gap:9px;margin:0;font:inherit}
.ip-case-review input[type=checkbox]{appearance:auto;width:17px;height:17px;flex:0 0 17px;margin:0;accent-color:var(--green,#10b981);vertical-align:middle}
.ip-case-review .cr-item+.cr-item{border-top:1px solid var(--line);padding-top:10px;margin-top:12px}
.ip-case-review :is(select,textarea,input:not([type=checkbox],[type=hidden])){font:inherit;max-width:100%;width:100%;min-width:0;box-shadow:none;border:1px solid var(--line2);border-radius:5px;background-color:var(--bg,#fff);padding:8px 10px;line-height:1.6}
.ip-case-review :is(select,textarea,input):focus-visible{outline:2px solid #93b4fa;outline-offset:2px;background-color:#f8faff}
.ip-case-review select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%23858b95' stroke-width='1.5'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px!important}.ip-case-review summary{cursor:pointer}
.ip-case-review .cr-footer{position:static;display:flex;align-items:center;justify-content:space-between;gap:20px;background:var(--bg,#fff);border-top:1px solid var(--line2);padding:14px 0}
.ip-case-review .cr-footer b{font-size:13px}.ip-case-review [data-result]{display:block;font-size:12px;color:var(--fg3);margin-top:4px;line-height:1.6}
.ip-case-review .cr-item-result{color:var(--red,#dc4444);font-size:12px;margin:6px 0 0}
.ip-case-review .cr-empty{grid-column:1/-1}
.ip-case-review .cr-search{display:flex;gap:10px;margin:12px 0}.ip-case-review [data-matching]>label{margin-top:12px}
dialog.ip-review-preview{position:fixed;inset:0;margin:auto;width:min(1060px,calc(100vw - 48px));height:min(820px,calc(100dvh - 48px));max-width:none;max-height:none;padding:0;border:1px solid var(--line2,#dfe3e8);border-radius:10px;background:var(--bg,#fff);color:var(--fg);box-shadow:0 18px 60px #0003}
dialog.ip-review-preview::backdrop{background:#11182766}
dialog.ip-review-preview[open]{display:flex;flex-direction:column}
dialog.ip-review-preview>header{display:flex;align-items:center;gap:12px;padding:16px 22px;border-bottom:1px solid var(--line);flex-shrink:0}
dialog.ip-review-preview h2{font-size:17px;margin:0;flex:1;overflow-wrap:anywhere}
dialog.ip-review-preview [data-close]{font-size:24px;line-height:1;width:34px;height:34px;flex-shrink:0;padding:0}
dialog.ip-review-preview>main{padding:0;flex:1;min-height:0;overflow:auto}
dialog.ip-review-preview iframe{display:block;width:100%;height:100%;border:0}
dialog.ip-review-preview pre{white-space:pre-wrap;overflow-wrap:anywhere;padding:24px;margin:0;font:14px/1.9 sans-serif}
@media(max-width:700px){.ip-unified-review-page [data-unified-review]{padding:0 16px 16px}.ip-case-review .cr-footer{gap:10px}dialog.ip-review-preview{width:calc(100vw - 24px);height:calc(100dvh - 24px)}}
.ip-case-review .cr-case-search{margin-top:12px;font-size:12px;color:var(--fg3)}
.ip-case-review .cr-case-search .cr-search{max-width:600px}.ip-case-review .cr-case-search p{font-size:12px}

.ip-review-field-link{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;width:100%;border:0;border-left:3px solid #2563eb;padding:8px 10px;margin:8px 0 0;background:transparent;font:inherit;cursor:pointer;border-radius:4px;white-space:normal;overflow-wrap:anywhere}
.ip-review-field-link span{color:#2563eb;font-weight:500;line-height:1.5}.ip-review-field-link small{color:var(--fg3);font-size:11px;line-height:1.5}
.ip-review-field-link.source-agent{border-color:#10b981}.ip-review-field-link.source-agent span{color:#10b981}
.ip-review-field-link.source-official{border-color:#c1ff72}.ip-review-field-link.source-official span{color:#526e25;background:#efffd5}
.ip-review-field-link:hover,.ip-review-field-link:focus-visible{background:#f5f7fa;outline:1px solid var(--line2)}
.ip-case-review .cr-located{box-shadow:0 0 0 2px #2563eb22}

/* Reject one proposed field; never remove a case card or its evidence. */


/* Agent preview: motion only while a live fill is active; formal values never pulse. */
.source-agent .ip-cell-suggested, .ip-master-page .source-agent .ip-cell-suggested, .ip-draft-proposed {animation:none!important}
@keyframes ip-agent-breathe{0%,100%{opacity:1}50%{opacity:.72}}
.is-agent-filling.source-agent .ip-cell-suggested, .ip-review-field-link.source-agent.is-agent-filling>span {color:#10b981!important;animation:ip-agent-breathe 2.4s ease-in-out 3!important}
@media(prefers-reduced-motion:reduce){
 .is-agent-filling.source-agent .ip-cell-suggested, .ip-review-field-link.source-agent.is-agent-filling>span {animation:none!important}
}

.ip-draft-proposed.is-agent-filling{animation:ip-agent-breathe 2.4s ease-in-out 1!important}
@media(prefers-reduced-motion:reduce){.ip-draft-proposed.is-agent-filling{animation:none!important}}

/* 邮件工作区：沿用原型边距，业务容器不再叠加壳层 padding。 */
#main > .main-scroll:has(> .ip-mail-page){padding:0!important;min-height:0;overflow:hidden}
.platform-page.ip-mail-page{padding:0!important;gap:0}
.ip-mail-page .ip-business-crumb{height:49px;padding:0 25px;box-sizing:border-box}
.ip-mail-reading-head{padding:20px 24px}
.ip-mail-reading-head h2{margin:18px 0;font-size:20px;line-height:1.6;overflow-wrap:anywhere}
.ip-mail-reading-head dl{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;margin:0;font-size:12px;line-height:1.75}
.ip-mail-reading-head dt{color:var(--fg3)}
.ip-mail-reading-head dd{display:flex;flex-wrap:wrap;gap:6px;margin:0;min-width:0}
.ip-mail-reading-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--fg3);font-size:11px}
.ip-mail-reading-actions>div{display:flex;gap:8px}
.ip-mail-reading-attachments{display:flex;flex-wrap:wrap;gap:8px;padding:0 24px 12px}
.ip-mail-reading-attachments:empty{display:none}
.ip-mail-thread-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:12px 16px;color:var(--fg3);font-size:12px}
.ip-mail-thread-message .ip-mail-reading-attachments{padding:0 16px 12px}


.ip-address-chip{max-width:100%;overflow-wrap:anywhere}


.ip-attachment-remove{display:inline-flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;padding:0;border:0;border-radius:4px;background:transparent;color:var(--fg3);font-size:20px;cursor:pointer}
.ip-attachment-remove:hover{color:#b54732;background:#fff2ef}.ip-attachment-remove:disabled{opacity:.4;cursor:not-allowed}


.ip-case-mail-files{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.ip-case-mail-files:empty{display:none}
.ip-mail-preview-meta .ip-mail-reading-attachments{padding:0}

/* 邮件附件仅保留胶囊与添加入口；候选清单在独立选择窗内，不挤占正文。 */


.ip-mail-attachment-add{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex-shrink:0;padding-top:0}

.ip-mail-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
dialog.ip-mail-guard,dialog.ip-mail-material-picker{position:fixed;inset:0;margin:auto;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--fg);box-shadow:0 20px 70px #0003;max-width:calc(100vw - 32px);max-height:calc(100dvh - 48px)}
dialog.ip-mail-guard{width:480px;height:fit-content;overflow:auto}
dialog.ip-mail-guard::backdrop,dialog.ip-mail-material-picker::backdrop{background:rgba(24,33,29,.32)}
dialog.ip-mail-guard form{margin:0;padding:0;min-width:0;gap:0}
dialog.ip-mail-guard header{position:relative;display:block;padding:24px 28px 20px}
dialog.ip-mail-guard header h2{padding-right:28px;margin:0 0 12px;font-size:18px;line-height:1.5}
dialog.ip-mail-guard header p{line-height:1.7;margin:0 0 6px}
.ip-mail-guard-close{position:absolute;right:16px;top:16px;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;font-size:22px;color:var(--fg3);cursor:pointer}
dialog.ip-mail-guard footer{position:static;display:flex;justify-content:flex-start;gap:10px;padding:16px 28px;border-top:1px solid var(--line);background:var(--bg-alt);margin:0}
dialog.ip-mail-guard footer .btn{min-height:36px;padding:7px 12px}
dialog.ip-mail-material-picker{width:min(860px,calc(100vw - 32px));height:fit-content;overflow:hidden}
.ip-mail-material-picker>header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:20px 24px;border-bottom:1px solid var(--line)}
.ip-mail-material-picker h2{font-size:18px;margin:0 0 6px}.ip-mail-material-picker header p{font-size:12px;color:var(--fg3);margin:0;line-height:1.6}
.ip-mail-material-picker [data-material-picker-body]{max-height:calc(100dvh - 240px);overflow:auto;padding:0 24px}
.ip-mail-material-caption{display:block;font-size:12px;color:var(--fg3);padding:14px 0 4px}
.ip-mail-material-picker input[type=checkbox]{width:16px;height:16px;margin:0;grid-row:1 / 3;accent-color:var(--green)}
.ip-mail-material-count{font-size:12px;color:var(--fg3);padding:10px 0;margin:0}
.ip-mail-version-error{margin:8px 0 0;color:#b54732;font-size:12px}
.ip-mail-material-picker>footer{display:flex;justify-content:space-between;align-items:center;padding:14px 24px;border-top:1px solid var(--line);font-size:12px;color:var(--fg3)}
@media(max-width:600px){.ip-mail-attachment-add{padding-top:0}}

/* 邮件工作区统一密度：标题 20 / 主题 14 / 操作 13 / 辅助 12。 */
.ip-mail-page{font-family:var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif);font-size:13px;line-height:1.5}
.ip-mail-page .ip-mail-page-toolbar{padding:16px 24px 8px;gap:12px}
.ip-mail-page .ip-mail-page-toolbar h1{font-size:20px;font-weight:650;letter-spacing:0;line-height:32px;margin:0 10px 0 0}
.ip-mail-page :is(.ip-mail-page-toolbar,.ip-mail-work-toolbar) .btn{height:34px;min-height:34px;padding:6px 12px;font-size:13px;line-height:20px;font-weight:500;border-radius:6px}
.ip-mail-page .ip-mail-page-toolbar .btn-pri{font-weight:600;padding-inline:16px}
.ip-mail-page .ip-mail-work-toolbar{padding:8px 24px 14px;gap:8px;min-width:0}
.ip-mail-page .ip-mail-work-toolbar label{gap:8px;color:var(--fg2);font-size:12px;flex:none}
.ip-mail-page .ip-mail-work-toolbar [data-mw-search]{width:150px}
.ip-mail-page .ip-mail-work-toolbar :is(input,select){box-sizing:border-box;height:34px;font-size:13px;line-height:20px;padding:6px 10px;border-radius:6px;background:var(--bg);color:var(--fg)}
.ip-mail-page .ip-mail-work-toolbar [data-mw-case]{flex:1 1 190px;max-width:280px;padding-right:28px;text-overflow:ellipsis}
.ip-mail-page .ip-mail-work-toolbar [data-mw-filter]{flex:1 1 190px;max-width:300px;margin-left:auto}
.ip-mail-page .ip-mail-two [data-mw-divider]{background:linear-gradient(to right,transparent 2px,var(--line) 2px,var(--line) 3px,transparent 3px)}
.ip-mail-page .ip-mail-two [data-mw-divider]:is(:hover,:focus-visible){background:linear-gradient(to right,transparent 2px,var(--green) 2px,var(--green) 4px,transparent 4px)}
.ip-mail-page .ip-mail-two [data-mw-row]{padding:14px 16px;gap:6px}
.ip-mail-page .ip-mail-two [data-mw-row] b{font-size:14px;font-weight:600;line-height:1.5}
.ip-mail-page .ip-mail-message-line strong{font-size:12px;font-weight:500}
.ip-mail-page .ip-mail-two [data-mw-row] small{font-size:12px;line-height:1.5}
.ip-mail-page .ip-mail-two .ui-pane{padding:24px 20px;font-size:13px;line-height:1.7}
.ip-mail-page .ip-mail-reading-head h2{font-size:20px;line-height:1.5;font-weight:600;margin:16px 0}
@media(max-width:900px){.ip-mail-page .ip-mail-work-toolbar [data-mw-filter]{max-width:none}.ip-mail-page .ip-mail-work-toolbar label{flex:1 1 180px}.ip-mail-page .ip-mail-work-toolbar [data-mw-search]{flex:1;min-width:0}}
@media(max-width:600px){.ip-mail-page .ip-mail-page-toolbar{padding:12px 16px 6px}.ip-mail-page .ip-mail-work-toolbar{padding:6px 16px 12px}.ip-mail-page .ip-mail-work-toolbar [data-mw-case]{max-width:none}}

/* 阅读抬头与正文用留白区分，附件集中在浅灰区域。 */
.ip-mail-reading-head{border-bottom:0;padding-bottom:16px}
.ip-mail-reading-attachments{margin:0 24px 8px;padding:10px 12px;background:#f7f8f8;border-radius:6px}
.ip-mail-thread-message .ip-mail-reading-attachments{margin-inline:16px;padding:10px 12px}


.ip-mail-material-picker header [data-close-materials]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-height:28px;padding:0;border:0;background:transparent;color:var(--fg3);font-size:22px;line-height:1}

/* 三栏使用外壳实际剩余高度，不再预扣 32px 留出底部白边。 */
@media(min-width:701px){
 #main>.main-scroll:has(>.ip-mail-page){display:flex;flex-direction:column}
 .platform-page.ip-mail-page{flex:1;min-height:0;height:100%}
 .ip-mail-page>.ip-mail-page-body{display:flex;flex-direction:column}
 .ip-mail-page .ip-mail-workspace{flex:1;height:auto}
 .ip-mail-page .ip-mail-work-toolbar{flex-shrink:0}
}

/* 客户偏好、模板和文件中心：沿用原型 pagehead/tools/sheet/record 的业务结构。 */
#main>.main-scroll:has(>.ip-settings-page){padding:0!important;overflow:hidden;display:flex;flex-direction:column;min-height:0}
.platform-page.ip-settings-page{padding:0!important;display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden;font-size:13px}
.ip-settings-page .ip-business-crumb{padding:18px 24px;flex-shrink:0}
.ip-settings-page .ip-settings-head{padding:30px 30px 22px;margin:0;gap:20px;flex-shrink:0;align-items:center}
.ip-settings-page .ip-settings-head>div:first-child{display:block}
.ip-settings-page .ip-settings-head h1{font-size:26px;font-weight:700;line-height:1.5}
.ip-settings-page .ip-settings-head h1 small{font-size:13px;font-weight:400;color:var(--fg3);margin-left:10px}
.ip-settings-page .ip-settings-head p{margin:9px 0 0;color:var(--fg3);font-size:12px;line-height:1.7}
.ip-settings-tools,.ip-file-filter{display:flex;align-items:center;gap:9px;padding:16px 30px;flex-wrap:wrap;flex-shrink:0}
.ip-settings-tools :is(input,select),.ip-file-filter :is(input,select){min-width:0;max-width:100%;height:36px;box-sizing:border-box;padding:8px 11px;border:1px solid var(--line);border-radius:5px;background:var(--bg);color:var(--fg);font-size:12px}
.ip-settings-tools input,.ip-file-filter input{width:260px}.ip-settings-tools select{max-width:360px}
.ip-settings-tools>span,.ip-file-filter>span{font-size:11px;color:var(--fg3);line-height:1.7}
.ip-settings-tools>[data-pref-refresh],.ip-settings-tools>[data-template-refresh]{margin-left:auto}
.ip-settings-page .ip-settings-table{margin:0 30px;flex:1;min-height:0;overflow:auto;scrollbar-width:auto;scrollbar-color:#b8bfbb #f5f6f5}
.ip-settings-page .ip-settings-table table{table-layout:fixed;width:100%;border-collapse:collapse}
.ip-settings-page .ip-settings-table th{background:#f8f9f8;font-weight:400;font-size:12px;padding:18px 14px;position:sticky;top:0;z-index:1}
.ip-settings-page .ip-settings-table td{font-weight:650;font-size:13px;vertical-align:top;padding:20px 14px;line-height:1.75;border-right:1px solid #00000004}
.ip-settings-page .ip-settings-table td small{display:block;margin-top:7px;font-weight:400;font-size:11px;color:var(--fg3);line-height:1.7}
.ip-settings-page .ip-settings-table :is(th,td):first-child{position:sticky;left:0;z-index:2;background:var(--bg)}
.ip-settings-page .ip-settings-table th:first-child{z-index:3;background:#f8f9f8}
.ip-settings-page .ip-settings-table tr:hover td{background:#f5f8f6}
.ip-settings-page .ip-settings-link{text-align:left;padding:0;line-height:1.75;font:inherit;color:var(--fg);font-weight:650;border:0;background:transparent;cursor:pointer}
.ip-settings-page .ip-settings-link:disabled{color:var(--fg3);cursor:default}
.ip-settings-page .ip-preference-table{min-width:2030px}
.ip-settings-page .ip-template-table{min-width:1890px}
.ip-settings-page .ip-settings-foot{position:static;padding:14px 30px 22px;font-size:11px;color:var(--fg3);flex-shrink:0}
.ip-settings-foot>div{display:flex;gap:8px}.ip-settings-page [data-pref-permission],.ip-settings-page [data-template-result]{margin:0 30px 12px;font-size:12px}.ip-settings-page [data-template-result]:empty{display:none}
.ip-rule-switch{display:inline-flex;align-items:center;gap:7px;padding:0;border:0;background:transparent;font-size:12px;line-height:1.75;white-space:nowrap;font-weight:400;cursor:pointer;color:var(--fg)}
.ip-rule-switch>i{position:relative;display:block;width:28px;height:16px;border-radius:10px;background:#c4c9c6;flex:none}
.ip-rule-switch>i:after{content:'';position:absolute;left:3px;top:3px;width:10px;height:10px;border-radius:50%;background:#fff}
.ip-rule-switch[aria-checked=true]>i{background:#4e7660}.ip-rule-switch[aria-checked=true]>i:after{left:15px}.ip-rule-switch:disabled{opacity:.45;cursor:default}
.ip-template-summary{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;font-weight:400;line-height:1.75}
.ip-table-actions{display:flex;gap:14px;white-space:nowrap}

.ip-file-filter{padding-top:0}
.ip-file-record{display:flex;gap:15px;align-items:center;padding:16px 0;border-bottom:1px solid var(--line)}
.ip-file-record-body{flex:1;min-width:0;overflow-wrap:anywhere;color:var(--fg);font-weight:700}
.ip-file-record-body p{font-weight:400;font-size:11px;color:var(--fg3);margin:7px 0 0;line-height:1.7}
.ip-filemark{font-size:var(--ip-text-2xs);border:1px solid var(--line);padding:10px 6px;color:var(--fg3);border-radius:4px;flex:none;min-width:30px;text-align:center}
.ip-file-record>.btn{min-height:30px;flex:none}.ip-file-case-link{display:inline-block;max-width:100%;border:0;background:transparent;padding:0;color:var(--green-ink);font:inherit;cursor:pointer;text-align:left;white-space:normal;overflow-wrap:anywhere;word-break:break-word;line-height:1.5;vertical-align:middle}
.ip-preference-dialog{width:min(800px,calc(100vw - 40px));padding:0;max-height:calc(100dvh - 40px);border-radius:10px}
.ip-preference-dialog form>header,.ip-preference-dialog form>footer{padding:26px 32px;background:var(--bg)}
.ip-preference-dialog header small{font-size:12px;color:var(--fg3)}.ip-preference-dialog h2{font-size:21px;margin-top:7px}
.ip-preference-dialog fieldset{margin:0;padding:26px 32px;gap:20px 24px}
.ip-preference-dialog form>footer{padding:18px 32px;font-size:11px;color:var(--fg3)}
.ip-preference-dialog .ip-settings-switch{justify-content:space-between;border-top:1px solid var(--line);padding-top:20px;gap:24px;align-items:center}
.ip-preference-dialog .ip-settings-switch b{display:block;font-size:13px;font-weight:600}.ip-preference-dialog .ip-settings-switch small{display:block;font-size:12px;color:var(--fg3);margin-top:5px;line-height:1.7}
.ip-preference-dialog .ip-settings-switch input{appearance:none;width:36px;min-width:36px;height:22px;border:0;border-radius:20px;padding:0;background:#c4c9c6;position:relative;cursor:pointer}
.ip-preference-dialog .ip-settings-switch input:after{content:'';position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:white}.ip-preference-dialog .ip-settings-switch input:checked{background:#4e7660}.ip-preference-dialog .ip-settings-switch input:checked:after{left:17px}
.ip-preference-dialog [data-pref-error]:not(:empty){margin:0 32px 16px}.ip-preference-dialog [data-pref-error]:empty{display:none}
.ip-preference-dialog :is(input:not([type=checkbox]),select,textarea){font-size:14px;min-height:40px;line-height:1.7}
.ip-template-compose{padding:0;width:min(1100px,calc(100vw - 40px));border-radius:10px}
.ip-template-compose form{gap:0}.ip-template-compose form>header{padding:24px 30px}.ip-template-compose form>footer{padding:18px 30px;background:var(--bg);position:sticky;bottom:0}
.ip-template-compose form>:not(header):not(footer){margin:0 30px 18px}.ip-template-compose .ip-template-fields{padding-top:24px;gap:18px 24px}.ip-template-compose h2{font-size:21px}
.ip-template-compose .ip-template-variables{border:1px solid var(--line);border-radius:6px;padding:12px 14px;background:#f8f9f8}
@media(max-width:700px){.ip-settings-page .ip-settings-head{padding:22px 18px 16px}.ip-settings-tools,.ip-file-filter{padding-inline:18px}.ip-settings-page .ip-settings-table {margin-inline:18px}.ip-settings-page .ip-settings-foot{padding-inline:18px}.ip-file-record{flex-wrap:wrap}.ip-file-record-body{flex-basis:calc(100% - 65px)}.ip-preference-dialog fieldset{grid-template-columns:1fr;padding:20px}.ip-template-compose form>:not(header):not(footer){margin-inline:20px}.ip-template-compose form>header,.ip-template-compose form>footer{padding:20px}}
.ip-template-compose .ip-template-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
.ip-template-compose .ip-mail-rich [contenteditable]{min-height:300px}
.ip-template-compose form>.muted{font-size:12px;color:var(--fg3);line-height:1.7}
@media(max-width:600px){.ip-template-compose .ip-template-fields{grid-template-columns:1fr}}
.ip-official-export-dialog{position:fixed;inset:0;margin:auto;width:min(600px,calc(100vw - 32px));height:fit-content;max-height:calc(100dvh - 40px);padding:0;border:1px solid #e2e6e4;border-radius:12px;box-shadow:0 18px 70px #0002;overflow:auto;color:#252b34;background:#fff}.ip-official-export-dialog::backdrop{background:#1e292855}.ip-official-export-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px 24px;border-bottom:1px solid #eee}.ip-official-export-dialog h2{margin:0;font-size:19px;font-weight:700}.ip-official-export-dialog p{margin:10px 0 0;line-height:1.7;font-size:12px;color:#7e8782}.ip-official-export-dialog [data-close]{background:none;border:0;padding:0 4px;font-size:24px;color:#56615b;cursor:pointer}.ip-official-export-dialog main{padding:22px 24px}.ip-official-export-dialog label{display:grid;gap:9px;margin-bottom:20px;font-size:13px}.ip-official-export-dialog input[data-reference]{height:38px;width:100%;border:1px solid #dce2de;border-radius:6px;padding:8px 10px;box-sizing:border-box}.ip-official-export-dialog input[type=file]::file-selector-button{border:1px solid #d4ddd7;border-radius:5px;background:white;padding:8px 12px;margin-right:10px;color:#28372d}.ip-official-export-dialog [data-error]{color:#aa3636}.ip-official-export-dialog footer{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 24px;border-top:1px solid #eee}.ip-official-export-dialog footer span{font-size:12px;color:#52725f}

/* 邮件客户切换始终在协作左侧；每位客户使用独立的编辑会话。 */
.ip-mail-dialog-head > div { position: relative; }
.ip-mail-customer-switch { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ip-mail-customer-menu { position: absolute; top: calc(100% + 8px); right: 0; z-index: 5; width: 300px; max-height: 320px; overflow: auto; padding: 4px; border: 1px solid #e4e8e6; border-radius: 8px; background: white; box-shadow: 0 8px 24px #17282214; }
.ip-mail-customer-menu button { display: flex; flex-direction: column; gap: 3px; width: 100%; padding: 9px 12px; text-align: left; border: 0; border-radius: 4px; background: transparent; color: #252c34; font: inherit; cursor: pointer; }
.ip-mail-customer-menu button:hover, .ip-mail-customer-menu button[aria-checked="true"] { background: #eef6f2; }
.ip-mail-customer-menu small, .ip-mail-customer-error { font-size: 12px; color: #7a8380; }

/* 2026-09-11 页面逐项复核：保留操作入口、减少无效横向滚动。 */
.ip-settings-page .ip-template-table{min-width:1170px}
.ip-settings-table :is(th,td):last-child{position:sticky;right:0;background:var(--bg);box-shadow:-1px 0 0 var(--line);z-index:2}
.ip-settings-table th:last-child{z-index:4;background:var(--surface,var(--bg))}
.ip-settings-page .ip-settings-foot,.ip-master-page .ip-cases-foot{padding-right:120px}
.ip-template-summary.muted{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin-top:6px;font-weight:400}
.ip-template-compose .ip-template-fields{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 16px}
.ip-template-attachments{border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.ip-template-attachments summary{cursor:pointer;line-height:1.6}
.ip-template-attachments [data-attachment-roles]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;max-height:230px;overflow:auto;padding:6px 0}
.ip-template-attachments [data-attachment-roles] label{display:flex;flex-direction:row;align-items:flex-start;gap:8px;margin:0;font-size:13px}
.ip-template-attachments [data-attachment-roles] input{width:16px;height:16px;flex:0 0 16px;margin-top:2px}
.platform-entry-grid:has(>[data-entry^="ip."]){grid-template-columns:repeat(3,minmax(0,1fr))}


#main>.main-scroll:has(>.ip-unified-review-page){display:flex;flex-direction:column;overflow:hidden}
.ip-unified-review-page{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.ip-unified-review-page>[data-unified-review],.ip-unified-review-page .ip-case-review{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.ip-unified-review-page .ip-case-review>[data-cards]{flex:1;min-height:0;overflow:auto}
.ip-unified-review-page .ip-case-review .cr-footer{padding-right:100px;border-top:1px solid var(--line);background:var(--bg)}
@media(max-width:900px){
 .ip-template-compose .ip-template-fields,.ip-template-attachments [data-attachment-roles],.platform-entry-grid:has(>[data-entry^="ip."]){grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:600px){
 .ip-settings-page .ip-settings-table :is(th,td):first-child{position:static}
 .ip-template-compose .ip-template-fields,.ip-template-attachments [data-attachment-roles],.platform-entry-grid:has(>[data-entry^="ip."]){grid-template-columns:1fr}
 .ip-settings-page .ip-settings-foot,.ip-master-page .ip-cases-foot{padding-right:100px;flex-wrap:wrap;gap:8px}
}

/* Full page already owns its heading and refresh action. */
.ip-blocks-page .ip-blocks-head { display: none; }

/* UC01 typography: compact UI rhythm; authored mail and source-review colours stay independent. */

.ip-master-page .ip-cases-head h1,.ip-settings-page .ip-settings-head h1,
.ip-mail-page .ip-mail-page-toolbar h1,.host-unified-toolbar h1,
:is(.ip-transfer-page,.ip-blocks-page,.ip-unified-review-page) > header h1 {
  font-size:20px; font-weight:600; line-height:1.4; letter-spacing:0;
}
.ip-master-page .ip-cases-head,.ip-settings-page .ip-settings-head {padding:20px 24px 14px;gap:12px}
.ip-settings-page .ip-settings-head p {margin-top:5px}
.ip-master-page .ip-business-crumb,.ip-settings-page .ip-business-crumb,.ip-mail-page .ip-business-crumb,.ip-unified-review-page .ip-business-crumb,.ip-logs-page .ip-business-crumb {height:40px;padding:0 24px;box-sizing:border-box;font-size:11px}
.ip-master-page .ip-master-views {padding-inline:24px;gap:20px}
.ip-master-page .ip-master-views button {font-size:12px;font-weight:400;padding-bottom:9px}
.ip-master-page .ip-master-views button.on {font-weight:600}
.ip-master-page .ip-cases-filterbar,.ip-settings-tools {padding:10px 24px;gap:8px}
/* 设置页工具栏（文件中心等）与案件筛选栏同一外观：白底圆角条 + 同规格控件；页面底为灰，白条才立得起来。 */
.ip-settings-tools {margin:0 24px 12px;padding:10px 16px;gap:12px;background:var(--bg);border-radius:4px}
.ip-settings-page .ip-settings-tools :is(input,select) {height:32px;box-sizing:border-box;padding:0 10px;border:1px solid #e5e9e6;border-radius:6px;background:#f7f7f7}
.ip-file-page .ip-settings-tools input {width:auto;flex:1 1 260px;max-width:500px}
/* 状态行只在有消息（读取失败、删除/恢复回执）时占位；日常的"当前页 N 份文件"不再显示。 */
.ip-file-page [data-file-status]:empty {display:none}
/* 检索区复用公共「搜索 + 筛选」组件：页内与 32px 控件同高，搜索框约 500px、案件下拉 180px；刷新留在最右。 */
.ip-file-page .ip-settings-tools [data-file-refresh] {margin-left:auto}
.ip-file-page [data-file-filter] {flex:1 1 auto;min-width:0;max-width:688px}
.ip-file-page [data-file-filter] .ip-search-filter {margin-bottom:0}
.ip-file-page [data-file-filter] .ip-search-filter input[type=search],
.ip-file-page [data-file-filter] .ip-search-filter-trigger {height:32px;font-size:12px;padding-block:5px}
.ip-file-page [data-file-filter] .ip-search-filter-trigger {min-width:180px}
.ip-settings-page .ip-settings-table {margin-inline:24px}
.ip-master-page .ip-table :is(th,td) {padding:9px 12px;vertical-align:top;line-height:1.65}
.ip-master-page .ip-table td {height:40px;font-size:12px;font-weight:600}
.ip-master-page .ip-tone-muted {font-weight:400}
.ip-master-page .ip-cell-link {font-size:12px;font-weight:600}
.ip-settings-page .ip-settings-table th {padding:11px 12px;color:var(--fg2);font-size:12px}
.ip-settings-page .ip-settings-table td {padding:12px;font-size:12px;font-weight:400;line-height:1.65}
.ip-settings-page .ip-settings-link {font-size:12px;font-weight:600;line-height:1.65}
.ip-settings-page .ip-settings-table td small {margin-top:4px;line-height:1.5}
.ip-settings-table td :is(strong,b) {font-weight:500}
.ip-template-summary,.ip-template-summary.muted {line-height:1.65}
.ip-master-page .ip-cases-foot,.ip-settings-page .ip-settings-foot {padding:10px 120px 12px 24px}
/* M4: remove two malformed legacy :is selectors; they swallowed the rest of this stylesheet. */
.ip-settings-tools :is(input,select),.ip-master-page .ip-cases-filterbar :is(input,select) {height:32px;font-size:12px;padding-block:5px}
.ip-mail-page .ip-mail-page-toolbar {padding:14px 24px 8px;gap:8px}
.ip-mail-page :is(.ip-mail-page-toolbar,.ip-mail-work-toolbar) .btn {height:30px;min-height:30px;padding:5px 10px;font-size:12px;line-height:18px}
.ip-mail-page .ip-mail-work-toolbar :is(input,select) {height:32px;font-size:12px;padding-block:5px}
.ip-mail-page .ip-mail-two [data-mw-row] b {font-size:13px;font-weight:500}
.ip-mail-page .ip-mail-reading-head h2 {font-size:17px;font-weight:600;margin:12px 0}


:is(.ip-settings-dialog,.ip-material-dialog,.ip-review-dialog,.ip-mail-material-picker) header h2,
.ip-preference-dialog h2,.ip-template-compose h2 {font-size:18px;font-weight:600}
.ip-preference-dialog :is(input:not([type=checkbox]),select,textarea) {font-size:13px;min-height:34px}
.ip-template-compose .ip-template-fields {padding-top:18px;gap:12px 18px}
.ip-template-attachments [data-attachment-roles] label {font-size:12px}
.ip-transfer-page .ip-transfer-head {display:none}
.ip-transfer-page .platform-section-head h2 {font-size:14px;font-weight:600;margin:0 0 10px}
.ip-transfer-page .platform-section-head h2 small {font-size:12px;font-weight:400;color:var(--fg3);margin-left:8px}
.ip-transfer-pagination {display:flex;align-items:center;gap:8px;margin-top:16px;color:var(--fg3);font-size:12px;padding-right:110px}
.ip-transfer-pagination span {margin-right:auto}
.ip-transfer-page [data-tr-feedback]:empty {display:none}
.ip-transfer-page [data-tr-feedback] {font-size:13px;color:var(--fg2);padding:8px 0}
@media(max-width:700px) {
 .ip-master-page .ip-cases-head,.ip-settings-page .ip-settings-head {padding:16px 16px 12px}
 .ip-master-page .ip-cases-filterbar,.ip-settings-tools {padding-inline:16px}
 .ip-settings-page .ip-settings-table {margin-inline:16px}
 .ip-transfer-pagination {padding-right:0;padding-bottom:40px}
}

/* One gutter for the case table and surrounding controls at every width. */
.ip-master-page {--ip-page-gutter:24px}
.ip-master-page :is(.ip-cases-body,.ip-cases-columns,.ip-cases-editbar) {margin-inline:var(--ip-page-gutter)}
.ip-master-page :is(.ip-cases-head,.ip-master-views,.ip-cases-filterbar) {padding-inline:var(--ip-page-gutter)}
@media(max-width:700px) {.ip-master-page {--ip-page-gutter:16px}}

/* UC01 分工：配置与正在办理的事项在同一工作面。 */
.ip-line-body{padding:0 0 24px;overflow:auto}
.ip-line-summary{display:grid;grid-template-columns:1fr 1fr 1.4fr;border:1px solid var(--line);border-radius:8px;background:#fafbfa}
.ip-line-summary>div{padding:16px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:6px}
.ip-line-summary>div:last-child{border:0}
.ip-line-summary span,.ip-line-summary small{color:var(--fg2);font-size:12px}.ip-line-summary strong{font-size:14px;font-weight:600}
.ip-line-toolbar{display:flex;gap:8px;padding:14px 0}.ip-line-items{margin-top:20px}.ip-line-items>header{display:flex;gap:16px;align-items:baseline;justify-content:space-between;margin-bottom:12px}
.ip-line-items h2,.ip-line-form h2,.ip-line-confirm h2{font-size:15px;font-weight:600;margin:0}.ip-line-items header span,.ip-line-items h2 small{font-size:12px;font-weight:400;color:var(--fg2)}
.ip-line-table{overflow:auto;border:1px solid var(--line);border-radius:8px}.ip-line-table table{width:100%;border-collapse:collapse;font-size:13px}.ip-line-table td,.ip-line-table th{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line)}.ip-line-table th{font-weight:500;color:var(--fg2);background:#fafbfa}.ip-line-table td b{font-weight:500}.ip-line-table td small{display:block;font-size:12px;color:var(--fg2);margin-top:4px}.ip-line-table tr:last-child td{border-bottom:0}
.ip-line-form,.ip-line-confirm{max-width:680px;padding:18px;border:1px solid var(--line);border-radius:8px;background:white;margin-top:12px}.ip-line-form>header,.ip-line-form footer,.ip-line-confirm footer{display:flex;justify-content:space-between;gap:8px;align-items:center}.ip-line-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;margin:14px 0}.ip-line-form select,.ip-line-form input,.ip-line-form textarea{font:inherit;color:var(--fg);padding:8px 10px;border:1px solid var(--line);border-radius:5px;background:white}.ip-line-dates{display:grid;grid-template-columns:1fr 1fr;gap:14px}.ip-line-form .ip-line-check{flex-direction:row;align-items:center}.ip-line-form textarea{resize:vertical}.ip-line-confirm dl>div{display:grid;grid-template-columns:140px 1fr;gap:12px;margin:12px 0;font-size:13px}.ip-line-confirm dt{color:var(--fg2)}.ip-line-confirm dd{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.ip-line-loading{padding:24px;color:var(--fg2);font-size:13px}.ip-line-form [role=alert],.ip-line-confirm [role=alert]{color:#b13b31;font-size:13px}
@media(max-width:700px){.ip-line-body{padding-inline:0}.ip-line-summary{grid-template-columns:1fr}.ip-line-summary>div{border-right:0;border-bottom:1px solid var(--line)}.ip-line-items>header{display:block}.ip-line-dates{grid-template-columns:1fr;gap:0}}

/* A rejection belongs to the notice card; keep its action and panel scoped to the review item. */
.ip-case-review .cr-reject{background:transparent;border:0;color:var(--fg3);padding:4px 6px;font-size:12px;min-height:28px}
.ip-case-review .cr-reject:hover{color:#b54040;background:#fff4f3}
.ip-case-review .cr-reject-panel{padding:12px;margin:0 0 12px;background:#faf8f7;border-radius:8px;display:grid;grid-template-columns:minmax(180px,1fr) minmax(180px,1fr);gap:8px 12px;align-items:end}
.ip-case-review .cr-reject-panel[hidden]{display:none}
.ip-case-review .cr-reject-panel label{display:grid;gap:6px;font-size:13px}
.ip-case-review .cr-reject-panel select,.ip-case-review .cr-reject-panel input{width:100%;min-width:0;height:36px;border:1px solid var(--line);border-radius:6px;padding:6px 10px;background:#fff;font:inherit}
.ip-case-review .cr-reject-panel p{margin:0;font-size:12px;color:var(--fg3)}
.ip-case-review .cr-reject-panel>div{display:flex;justify-content:flex-end;gap:8px}
.ip-case-review .cr-reject-confirm{color:#a63838;border-color:#e9cbcb}
.ip-case-review .cr-rejection-result{font-size:13px;color:var(--fg2);margin:8px 0}
@media(max-width:640px){.ip-case-review .cr-reject-panel{grid-template-columns:1fr}}

/* UC01 案件回收站与永久保留的操作日志。 */
.ip-case-recycle-dialog.is-confirmation {width:min(420px,calc(100vw - 32px));height:auto;min-height:0;inset:0;margin:auto;max-height:calc(100dvh - 32px);}
.ip-case-recycle-dialog [data-recycle-content] {padding:20px 28px;overflow:auto;min-height:0;}
.ip-case-recycle-dialog > nav {padding:12px 28px 0;flex-shrink:0;}
.ip-case-recycle-dialog p {line-height:1.65;}
.ip-case-recycle-dialog label {display:flex;flex-direction:column;gap:8px;margin:16px 0;}
.ip-case-recycle-dialog input {padding:9px 12px;border:1px solid var(--line);border-radius:6px;font:inherit;}
.ip-case-recycle-dialog table {width:100%;border-collapse:collapse;font-size:13px;}
.ip-case-recycle-dialog :is(th,td) {text-align:left;vertical-align:top;padding:12px;border-bottom:1px solid var(--line);line-height:1.6;min-width:100px;max-width:260px;overflow-wrap:anywhere;}
.ip-case-recycle-dialog footer {display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap;margin-top:20px;}
.ip-case-recycle-dialog [data-recycle-error] {color:var(--danger,#b42318);}
@media(max-width:600px){.ip-case-recycle-dialog [data-recycle-content]{padding:16px}.ip-case-recycle-dialog > nav{padding:12px 16px 0;}}

/* 统一日志页 */
/* 日志页筛选区的排布改由公共工具块 + 页面那三条负责（见文件末尾），这条旧规则整条退出。 */
.ip-log-filters label{display:flex;flex-direction:column;gap:6px;font-size:13px}
.ip-log-filters input,.ip-log-filters select{border:1px solid var(--border,#dfe2e5);border-radius:6px;background:var(--bg,#fff);padding:8px;color:inherit;min-height:36px}
.ip-log-table{overflow:auto}.ip-log-table table{width:100%;border-collapse:collapse;font-size:13px}.ip-log-table th,.ip-log-table td{padding:12px;text-align:left;border-bottom:1px solid var(--border,#e5e7eb);vertical-align:top}.ip-log-table th{white-space:nowrap}.ip-log-table td:first-child{min-width:155px}.ip-log-table td:last-child{min-width:240px;overflow-wrap:anywhere}.ip-log-table details{margin-top:8px}.ip-log-table summary{cursor:pointer}.ip-log-table dd{margin:4px 0 10px;white-space:pre-wrap}.ip-log-pager{display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:16px 0}.ip-log-empty{grid-column:1/-1}

.ip-case-recycle-dialog.is-confirmation > header{padding:16px 20px 12px;min-height:0;gap:12px}
.ip-case-recycle-dialog.is-confirmation > header h2{font-size:16px;margin:0}
.ip-case-recycle-dialog.is-confirmation > header button{width:28px;height:28px;min-height:0;padding:0;border:0;background:transparent;color:var(--fg3)}
.ip-case-recycle-dialog.is-confirmation [data-recycle-content]{padding:0 20px 20px;font-size:13px}
.ip-case-recycle-dialog.is-confirmation p{margin:10px 0;line-height:1.6;overflow-wrap:anywhere}
.ip-case-recycle-dialog.is-confirmation p + p{color:var(--fg3)}
.ip-case-recycle-dialog.is-confirmation label{margin:16px 0 0;gap:6px;font-size:12px}
.ip-case-recycle-dialog.is-confirmation input{font-size:13px;min-height:34px;padding:7px 10px}
.ip-case-recycle-dialog.is-confirmation [data-recycle-error]:empty{display:none}
.ip-case-recycle-dialog.is-confirmation footer{margin-top:20px;gap:8px}
.ip-case-recycle-dialog.is-confirmation footer .btn{min-height:32px;padding:6px 12px;font-size:12px}

/* 写邮件顶部预览：外壳独立于正文，正文继续使用原邮件隔离渲染。 */
dialog.ip-mail-preview {width:min(1120px,calc(100vw - 48px));max-height:calc(100dvh - 48px);padding:0;border:1px solid var(--line2);border-radius:8px;background:var(--card);box-shadow:var(--pop);overflow:hidden;}
dialog.ip-mail-preview::backdrop {background:rgba(0,0,0,.28);}
dialog.ip-mail-preview > form {display:flex;flex-direction:column;margin:0;max-height:calc(100dvh - 50px);min-height:0;}
dialog.ip-mail-preview > form > header {flex:none;align-items:center;padding:16px 24px;border-bottom:1px solid var(--line2);}
dialog.ip-mail-preview h2 {font-size:17px;line-height:1.5;font-weight:600;}
dialog.ip-mail-preview header button {flex:none;}
.ip-mail-preview-envelope {flex:none;padding:14px 24px;border-bottom:1px solid var(--line2);max-height:28vh;overflow:auto;}
dialog.ip-mail-preview .ip-mail-preview-meta {display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;margin:0;padding:5px 0;font-size:13px;line-height:1.6;align-items:baseline;}
.ip-mail-preview-meta > strong {font-size:14px;font-weight:500;color:var(--fg);overflow-wrap:anywhere;}
dialog.ip-mail-preview .ip-address-list {display:flex;flex-wrap:nowrap;gap:6px;border:0;background:none;padding:0;min-height:0;color:var(--fg);overflow:hidden;}
dialog.ip-mail-preview .ip-mail-reading-attachments {margin:0;background:none;min-height:0;}
.ip-mail-preview-paper {min-height:0;overflow:auto;padding:24px;background:var(--bg-alt);}
.ip-mail-preview-paper > [data-mail-preview-body] {padding:24px;border:1px solid var(--line2);border-radius:4px;background:var(--card);}
dialog.ip-mail-preview [data-preview-error]:not([hidden]) {margin:12px 24px;}
@media(max-width:600px){dialog.ip-mail-preview{width:calc(100vw - 16px);max-height:calc(100dvh - 16px);}dialog.ip-mail-preview > form{max-height:calc(100dvh - 18px);}dialog.ip-mail-preview > form > header,.ip-mail-preview-envelope{padding:12px 16px;}.ip-mail-preview-paper{padding:12px;}.ip-mail-preview-paper > [data-mail-preview-body]{padding:12px;}dialog.ip-mail-preview .ip-mail-preview-meta{grid-template-columns:52px minmax(0,1fr);gap:8px;}}


/* UC01 弹窗外壳收敛：保留各窗口内容尺寸，不放大删除等短确认。 */


dialog:is(.ip-preference-dialog,.ip-template-compose) > form > header {position:sticky;top:0;z-index:2;border-bottom:1px solid var(--line);background:var(--card);}
dialog:is(.ip-preference-dialog,.ip-template-compose) > form > footer {position:sticky;bottom:0;z-index:2;border-top:1px solid var(--line);background:var(--card);}
dialog.ip-preference-dialog > form > footer {gap:12px;flex-wrap:wrap;}

/* 发送核对：固定标题/操作区，全部核对内容在中间滚动。 */
dialog.ip-mail-review {width:min(1120px,calc(100vw - 48px));padding:0;max-height:calc(100dvh - 48px);overflow:hidden;}
dialog.ip-mail-review > form {display:flex;flex-direction:column;max-height:calc(100dvh - 50px);min-height:0;margin:0;}
dialog.ip-mail-review > form > header {display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:18px 24px;flex:none;border-bottom:1px solid var(--line2);}
dialog.ip-mail-review > form > header > div {min-width:0;}
dialog.ip-mail-review > form > header > button {flex:none;}
dialog.ip-mail-review h2 {font-size:17px;line-height:1.5;font-weight:600;}
dialog.ip-mail-review header p {margin-top:6px;line-height:1.65;}
.ip-mail-review-content {min-height:0;overflow:auto;overscroll-behavior:contain;}
dialog.ip-mail-review .ip-mail-review-grid {display:grid;grid-template-columns:minmax(0,1fr);gap:9px;margin:0;padding:18px 24px;}
dialog.ip-mail-review .ip-mail-review-grid > div {display:grid;grid-template-columns:104px minmax(0,1fr);align-items:baseline;gap:12px;}
dialog.ip-mail-review .ip-mail-review-grid :is(dt,dd) {margin:0;line-height:1.6;}
dialog.ip-mail-review .ip-mail-review-grid dd {overflow-wrap:anywhere;}
.ip-mail-review-paper {padding:24px;background:var(--bg-alt);border-top:1px solid var(--line);}
.ip-mail-review-paper > [data-mail-review-body] {padding:24px;border:1px solid var(--line2);border-radius:4px;background:var(--card);}
.ip-mail-review-content > [role=alert] {margin:16px 24px;}
dialog.ip-mail-review > form > footer {margin:0;padding:14px 24px;flex:none;border-top:1px solid var(--line2);background:var(--card);gap:10px;}
@media(max-width:600px){
  dialog.ip-mail-review{width:calc(100vw - 16px);max-height:calc(100dvh - 16px);}
  dialog.ip-mail-review > form{max-height:calc(100dvh - 18px);}
  dialog.ip-mail-review > form > header,dialog.ip-mail-review .ip-mail-review-grid,dialog.ip-mail-review > form > footer{padding:14px 16px;}
  dialog.ip-mail-review .ip-mail-review-grid > div{grid-template-columns:86px minmax(0,1fr);gap:8px;}
  .ip-mail-review-paper,.ip-mail-review-paper > [data-mail-review-body]{padding:12px;}
}

/* UC01 receiving/reply configuration reuses domain dialog chrome. */
dialog.ip-correspondence-dialog{position:fixed;inset:0;margin:auto;width:min(520px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;border:1px solid var(--line2);border-radius:8px;background:var(--card);color:var(--fg);box-shadow:var(--pop);overflow:auto;}
dialog.ip-correspondence-dialog::backdrop{background:rgba(0,0,0,.28);}
.ip-correspondence-dialog > header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line);gap:16px;}.ip-correspondence-dialog h2{font-size:17px;margin:0;}
.ip-correspondence-dialog [data-content]{padding:20px;}.ip-correspondence-dialog [data-error]{margin:0;padding:0 20px 16px;font-size:13px;color:var(--fg3);}.ip-correspondence-dialog p{line-height:1.7;font-size:13px;}.ip-correspondence-dialog label{display:block;margin:12px 0;font-size:13px;}.ip-correspondence-dialog select,.ip-correspondence-dialog input:not([type=checkbox]){display:block;box-sizing:border-box;width:100%;padding:9px;margin-top:6px;border:1px solid var(--line);border-radius:5px;font:inherit;}.ip-correspondence-dialog footer,.ip-correspondence-dialog [data-actions]{display:flex;gap:8px;margin-top:16px;}.ip-correspondence-dialog.is-reading,.ip-correspondence-dialog.is-attachment{width:min(1000px,calc(100vw - 32px));}.ip-correspondence-dialog.is-attachment [data-content]{height:65vh;}
.ip-mail-case-dialog [data-case-picker]{display:block;min-width:0;padding:16px 20px}
.ip-mail-case-dialog .ip-case-picker-search-line :is(input,select){width:auto;margin:0;border-radius:8px}
.ip-mail-case-dialog .ip-case-capsules{max-height:240px}
.ip-mail-case-dialog .ip-case-capsule{white-space:normal;overflow-wrap:anywhere}
.ip-mail-case-dialog footer{justify-content:flex-end;padding:0 20px 20px}
[data-mw-sync-status]{font-size:12px;color:var(--fg3);}

/* UC01 邮件模板选择与下一步提示：独立视觉整理，不依赖接口字段变更。 */

.ip-mail-template:empty {display:none;}
.ip-mail-template-head {display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 12px;line-height:1.6;}
.ip-mail-template-head > b {font-size:13px;font-weight:600;flex:none;}
.ip-mail-template-head > span {min-width:0;color:var(--fg3);font-size:12px;overflow-wrap:anywhere;}
.ip-mail-template > .ip-mail-mode-note {margin:6px 0 12px;padding:0;border:0;background:none;color:var(--fg2);font-size:12px;line-height:1.65;}
.ip-mail-template-pick {display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;min-width:0;}


.ip-mail-template-pick select {
  box-sizing:border-box;display:block;width:100%;min-width:0;max-width:100%;min-height:36px;
  padding:7px 10px;border:1px solid var(--line2);border-radius:var(--r-sm,5px);
  background:var(--bg);color:var(--fg);font:inherit;font-size:13px;line-height:1.5;text-overflow:ellipsis;
}
.ip-mail-template-pick > .btn {flex:none;min-height:36px;margin:0;padding:7px 14px;white-space:nowrap;}
.ip-mail-template-pick > .ip-tone-muted {flex-basis:100%;font-size:12px;line-height:1.6;}
.ip-mail-template > p.ip-mail-guard {
  display:block;margin:12px 0 0;padding:10px 12px;border:1px solid var(--amber);
  border-radius:var(--r-xs,4px);background:var(--amberd);color:var(--fg2);font-size:12px;line-height:1.65;overflow-wrap:anywhere;
}
.ip-mail-template :is(select,button):focus-visible {outline:2px solid var(--fg2);outline-offset:2px;}


/* 删除模板等简短确认框，与案件删除使用同一尺寸和间距。 */
.ip-case-recycle-dialog.is-confirmation > main {padding:0 20px;min-width:0;overflow:auto;font-size:13px;}
.ip-case-recycle-dialog.is-confirmation > main > [role=alert]:empty {display:none;}
.ip-case-recycle-dialog.is-confirmation > main > [role=alert]:not(:empty) {color:var(--red);}
.ip-case-recycle-dialog.is-confirmation > footer {margin:0;padding:16px 20px 20px;}
.ip-settings-page [data-template-delete] {color:var(--red);}
.ip-settings-page [data-template-delete]:disabled {color:var(--fg3);}

[data-ip-mail-guidance]:empty {display:none;}
.ip-mail-next-step {
  display:flex;align-items:center;gap:12px;margin:12px 0;padding:14px 16px;
  border:1px solid var(--line2);border-radius:var(--r,6px);background:var(--card);
}
.ip-mail-next-step > div {flex:1;min-width:0;}
.ip-mail-next-step strong {font-size:13px;font-weight:600;line-height:1.6;}
.ip-mail-next-step p {margin:4px 0 0;color:var(--fg2);font-size:12px;line-height:1.65;overflow-wrap:anywhere;}
.ip-mail-next-step > .btn {flex:none;white-space:nowrap;}
.ip-mail-next-step > [data-mail-guide-close] {width:28px;min-height:28px;padding:0;border:0;color:var(--fg3);}
@media(max-width:600px) {

  .ip-mail-template-pick {gap:10px;}

  .ip-mail-template-pick > .btn {width:100%;}
  .ip-mail-next-step {align-items:flex-start;flex-wrap:wrap;padding:12px;gap:10px;}
  .ip-mail-next-step > div {flex-basis:calc(100% - 40px);}
  .ip-mail-next-step > [data-mail-guide-close] {order:1;}
  .ip-mail-next-step > [data-mail-guide] {order:2;width:100%;}
}

/* 删除确认按内容收缩，避免复用审核大弹窗的全屏高度。 */
dialog.ip-removal-confirm{position:fixed;inset:0;margin:auto;box-sizing:border-box;width:min(var(--ip-removal-width,380px),calc(100vw - 32px));height:fit-content;min-height:0;max-height:calc(100dvh - 32px);max-width:none;padding:0;overflow:auto;border:1px solid var(--line2);border-radius:var(--r-lg,8px);background:var(--card);color:var(--fg);box-shadow:var(--pop);}
dialog.ip-removal-confirm[open]{display:block;}
dialog.ip-removal-confirm::backdrop{background:rgba(0,0,0,.28);}
.ip-removal-confirm > header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--line);}
.ip-removal-confirm h2{margin:0;font-size:16px;line-height:1.5;}
.ip-removal-confirm > header button{border:0;background:none;width:28px;height:28px;min-height:0;padding:0;color:var(--fg3);}
.ip-removal-confirm .ip-removal-content{padding:12px 20px 0;font-size:13px;line-height:1.65;overflow-wrap:anywhere;}
.ip-removal-confirm p{margin:0 0 8px;}
.ip-removal-confirm [role=alert]:empty{display:none;}
.ip-removal-confirm [role=alert]{color:var(--danger,#b42318);}
.ip-removal-confirm > footer{display:flex;justify-content:flex-end;gap:8px;margin:0;padding:12px 20px 16px;}
.ip-removal-confirm footer .btn{min-height:32px;font-size:12px;padding:6px 12px;}
.ip-case-review .cr-search{display:flex;max-width:720px;align-items:center;gap:10px}
.ip-case-review .cr-search input{flex:1;min-width:0;width:auto}
.ip-case-review .cr-search .btn{flex:0 0 auto;white-space:nowrap;min-width:88px}
.ip-case-review .cr-case-select{display:flex;align-items:center;gap:12px;margin:12px 0}
.ip-case-review .cr-case-select select{flex:1;min-width:0;max-width:850px;height:38px;padding:6px 10px}
.ip-case-review .cr-field-source{font-size:12px;color:var(--fg3);margin:8px 0}
.ip-case-review .cr-footer{padding:8px 0;border:0}
.ip-case-review .cr-item-result:empty{display:none}
@media(max-width:700px){.ip-case-review .cr-case-select{align-items:flex-start;flex-direction:column}.ip-case-review .cr-case-select select{width:100%;flex:auto}}


/* 模板规则直接配置；来源于同一份生效模板。 */
.ip-template-condition{display:grid;grid-template-columns:minmax(140px,1fr) 140px minmax(180px,2fr);gap:12px;align-items:start;padding:12px 0;border-top:1px solid var(--border,#e5e7eb)}
.ip-template-condition label{display:flex;flex-direction:column;gap:6px}.ip-template-condition select{width:100%}
@media(max-width:640px){.ip-template-condition{grid-template-columns:1fr}}

/* 同一输入区连续添加申请人与委托客户。 */
.ip-case-name-picker{display:flex;flex-direction:column;gap:8px;min-width:0}
.ip-case-name-picker .ip-customer-search>button{flex-shrink:0;white-space:nowrap}
.ip-case-name-picker p{margin:0;font-size:12px}
.ip-case-name-picker [data-name-status]:empty,.ip-case-name-picker [data-selected-names]:empty{display:none}
.ip-name-chips{display:flex;flex-wrap:nowrap;gap:6px;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}
.ip-name-chip{flex:none;white-space:nowrap}
.ip-name-chip{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:4px 10px;border:1px solid var(--line);border-radius:16px;background:var(--surface-soft,#f5f7f6);font-size:12px;line-height:1.5;overflow-wrap:anywhere;box-sizing:border-box}
.ip-name-chip>button{flex-shrink:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;padding:0 2px;line-height:1.4}
.ip-name-chip>button:hover{color:#a33232}
.ip-applicant-chips{max-height:52px;gap:4px;overflow-y:auto;overflow-x:hidden;align-content:start;scrollbar-width:thin}
.ip-applicant-chips .ip-name-chip{display:block;flex-shrink:0;padding:2px 8px;height:24px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ip-applicant-chips:focus-visible{outline:2px solid var(--green);outline-offset:2px}
@media(max-width:600px){.ip-case-name-picker .ip-customer-search{flex-wrap:wrap}.ip-case-name-picker .ip-customer-search input{flex-basis:100%}}

/* 通知书助手：最近导入默认收起，展开后在区域内滚动。 */
.host-page .host-recent-imports>summary{cursor:pointer;font-size:14px;font-weight:650;line-height:24px}
.host-page .host-recent-imports>summary span{margin-left:8px;font-size:12px;font-weight:400;color:var(--fg3)}
.host-page .host-recent-imports>p{margin:8px 0 12px;color:var(--fg3);font-size:12px}
.host-page .host-recent-imports .host-batch-list{max-height:320px;overflow-y:auto;scrollbar-width:thin}

dialog.ip-correspondence-dialog.is-mail-confirmation{width:min(420px,calc(100vw - 32px));}.ip-mail-confirm-subject{overflow-wrap:anywhere;max-height:4.5em;overflow:auto;}

.ip-preference-email-chips{border:1px solid var(--line);border-radius:6px;padding:6px;min-height:40px;display:flex;flex-wrap:wrap;gap:5px;align-items:center;}.ip-preference-email-chips>span{display:contents;}.ip-preference-email-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:12px;padding:3px 8px;max-width:100%;overflow-wrap:anywhere;font-size:12px;}.ip-preference-email-chip button{border:0;background:none;color:inherit;cursor:pointer;}.ip-preference-email-chips input{border:0!important;flex:1;min-width:150px;margin:0!important;}

/* 字段控件由统一声明生成，清空只改编辑草稿，保存后才生效。 */


/* 待人工确认的候选保持彩色呼吸；正式回执后由状态移除。 */


@keyframes ip-candidate-breathe { 0%,100% { opacity:1; } 50% { opacity:.55; } }


.ip-confirmation-candidate { animation: ip-candidate-breathe 2.4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .ip-confirmation-candidate { animation: none; color: var(--blue); } }


/* 文件审核中的黑色表示采用，正式写入仍等待整个文件保存。 */
.cr-file-candidate { border:0; background:transparent; text-align:left; padding:6px 0; cursor:pointer; color:#2563eb; animation:ip-candidate-breathe 2.4s ease-in-out infinite; }
.cr-file-candidate.is-adopted { color:var(--text,#171717); animation:none; }
.cr-file-candidates { margin:12px 0; }
.cr-file-candidates > summary { cursor:pointer; padding:10px 0; }
@media (prefers-reduced-motion:reduce) { .cr-file-candidate { animation:none; } }

.ip-review-field-link.is-adopted, .ip-review-field-link.is-adopted span { color:var(--text,#171717); animation:none; }

/* Material search preserves inputs while removing unmatched labels from layout and accessibility. */
.ip-template-attachments [data-attachment-roles] label[hidden]{display:none}

/* 独立文件库与原件阅读；长文本在窗口内滚动，关闭操作始终可达。 */


/* 单文件审核：尺寸固定，正文独立滚动。 */


/* ==========================================================================
   12. 弹窗可达性、状态文字与动效收敛（U01 / U02 / U04 / U10）
   本节只做两件事：把 ui-kit 的弹窗结构标记接上样式；给"只靠颜色表意"的
   候选状态补文字。不再新增高优先级的强制覆盖，也不重复声明任何 @keyframes。
   ========================================================================== */

/* 12.1 弹窗（U04）：head/body/foot 由 ui-kit.enhanceDialog 标记（.ui-dialog-*）。
   目标——头部与底部按钮在窄屏与 200% 缩放下始终可达；正文独立滚动；
   长文件名不把关闭按钮挤走；长错误/长状态不遮挡保存按钮。 */
.ui-dialog[data-ui-dialog-layout="1"][open] { display: flex; flex-direction: column; }
/* .fr-review-dialog 的唯一子元素是 <article>，让它自己撑满高度 */
.ui-dialog[data-ui-dialog-layout="1"][open] > *:only-child { flex: 1 1 auto; min-height: 0; }
.ui-dialog-head { flex-wrap: wrap; }
.ui-dialog-head > :first-child { min-width: 0; }
.ui-dialog-head :is(h1, h2, h3, strong) { overflow-wrap: anywhere; }
.ui-dialog-head :is(nav, .ui-dialog-actions) { flex: none; margin-left: auto; }
.ui-dialog-body { min-width: 0; overflow-wrap: anywhere; }
.ui-dialog-foot { flex-wrap: wrap; }
/* 长错误/长状态自己换行并收缩，保存按钮保持原尺寸、永不被挤出可视区 */
.ui-dialog-foot > :is(p, [role="alert"], [role="status"], .ui-dialog-status) {
  flex: 1 1 12ch; min-width: 0; max-height: 4.8em; overflow: auto; overflow-wrap: anywhere;
}
.ui-dialog-foot > :is(button, .btn, a.btn) { flex: 0 0 auto; }
/* 200% 缩放（WCAG 1.4.10 回流）与窄屏：头/底换成纵向铺满，触屏可点高度 */
@media (max-width: 720px), (max-height: 560px) {
  .ui-dialog-head { flex-wrap: wrap; gap: var(--ip-space-2); }
  .ui-dialog-head :is(nav, .ui-dialog-actions) { margin-left: 0; }
  .ui-dialog-foot { flex-direction: column; align-items: stretch; }
  .ui-dialog-foot > :is(button, .btn, a.btn) { width: 100%; min-height: 40px; }
}

/* 12.2 显式编辑入口（U02）：触屏与键盘不依赖 dblclick 的编辑按钮 */
.ui-edit-entry { min-height: 32px; padding: 4px 10px; border: 1px solid var(--line); border-radius: var(--ip-radius-md); background: var(--bg); color: var(--fg2); font: inherit; font-size: var(--ip-text-xs); cursor: pointer; }
.ui-edit-entry:hover:not([disabled]) { border-color: var(--ip-line-strong); color: var(--fg); }
.ui-edit-entry:focus-visible { outline: 2px solid var(--green); outline-offset: 1px; }
.ui-edit-entry[disabled] { opacity: .55; cursor: not-allowed; }
@media (pointer: coarse) { .ui-edit-entry { min-height: var(--ip-touch-h); } }

/* 12.3 审核采用状态由 ip-edit-state 的可见文字渲染，旧伪元素退出。 */
.ip-official-candidate::after { content: '官文值'; margin-left: 6px; color: #c1ff72; opacity: .8; font-size: var(--ip-text-2xs); }

/* 12.4 字段状态的文字标签（正文用 .ip-field-state-text，D 也可直接用 ip-edit-state.js
   的 FIELD_STATE_TEXT 渲染成 chip）。只定义样式，不改变字段既有排版。 */


/* 只读字段：写明原因，不用禁用控件代替说明（U01）。 */


/* 12.5 邮件确认候选（.ip-confirmation-candidate 加在 input/textarea 这类替换元素上，
   `::after` 不渲染）：这里只补形状区分，字段旁边的文字说明由页面用
   ip-edit-state.js 的 FIELD_STATE_TEXT 渲染。 */
.ip-confirmation-candidate { border-color: var(--ip-state-candidate-b); box-shadow: inset 3px 0 var(--ip-state-candidate-b); }
.textarea.ip-confirmation-candidate, textarea.ip-confirmation-candidate { box-shadow: inset 3px 0 var(--ip-state-candidate-b), inset 0 0 0 1px var(--ip-state-candidate-b); }

/* 12.6 动效索引：ip-candidate-breathe 统一只改变透明度，颜色由来源固定；
   prefers-reduced-motion 的覆盖点在此列清，后续不要再加新的覆盖块：
   - .ip-field.ip-candidate-agent / .ip-field.is-local
   - .ip-official-candidate
   - .ip-master-page .ip-cell-suggested 与 .ip-cell-suggested / .ip-field-suggested / .ip-draft-proposed
   - .ip-material-dialog .proposed-text
   - .source-agent .is-agent-filling / .ip-draft-proposed.is-agent-filling
   - .ip-field.is-candidate-pending .ip-field-suggested
   - .ip-confirmation-candidate / .cr-file-candidate
   以上各处在 reduce 下都是"静态彩色"，不是变灰、也不是消失；
   它们各自的候选底色/墨色仍由本节 12.3—12.5 与末尾 @keyframes 的 base 规则提供。 */


/* 邮件字段位置的候选（B 类）：候选值 + 状态文字 + 依据，独占一行贴在字段下方。 */


.ip-mail-candidate-note{margin:0 0 var(--ip-space-1,4px);color:var(--ip-fg-muted,#6b7280);font-size:var(--ip-text-xs,12px)}


/* M4 · 已确认 Figma（2026-09-16）。只作用 IP 应用工作面，不覆盖尚书产品壳。
   颜色表示视图状态；业务保存、确认、回执仍由既有 Action/adapter 处理。 */


.ip-master-page .ip-cases {background:var(--ip-m4-fill);gap:12px;padding:20px 24px;min-height:0}
.ip-master-page .ip-cases-head {padding:0;margin:0;border:0;background:none}
.ip-master-page .ip-master-views,.ip-master-page .ip-cases-filterbar {margin:0;background:var(--ip-m4-surface);padding:10px 16px;border:0;border-radius:4px}
.ip-cases .ip-master-views button {border:0;background:none;color:var(--ip-m4-muted);border-radius:4px}
.ip-cases .ip-master-views button.on {color:var(--ip-m4-ink);font-weight:700;background:none;
  box-shadow: none;
}
.ip-master-page .ip-cases-body {background:var(--ip-m4-surface);margin:0;padding:0;border-radius:4px;flex:1;min-height:160px}
/* 编辑条与同页其它块共用同一条左右边界：表格区 margin 已归零，编辑条不能还留在 24px 里。 */
.ip-master-page .ip-cases-editbar {background:var(--ip-m4-surface);margin:0;padding:10px 16px;border:0;border-radius:4px}
.ip-cases .ip-table td {height:48px;box-sizing:border-box;vertical-align:middle;border-bottom:0;padding:12px 14px}
.ip-cases .ip-table tbody tr:nth-child(even) td {background:var(--ip-m4-fill)}
.ip-cases .ip-table th {background:var(--ip-m4-fill);border:0;padding:12px 14px;font-size:12px}
.ip-cases .ip-table .ip-row-action,.ip-cases .ip-table th:last-child {text-align:center;vertical-align:middle}
.ip-cases .ip-row-action a {display:inline-flex;align-items:center;justify-content:center;min-height:40px;margin:0}
.ip-cases .ip-cases-foot {background:var(--ip-m4-surface);border:0;padding:12px 16px;border-radius:4px}
.ip-cases:not(.has-m4-candidates) .ip-cases-body {flex:1;min-height:160px}
.ip-cases [data-field] .ui-text,.ip-cases .ip-cell-suggested {white-space:nowrap;max-height:24px;overflow:hidden;text-overflow:ellipsis}
.ip-cases td:has(.ip-cell-input) {overflow:visible;position:relative}


.ip-multi-case-picker ul {display:flex;flex-wrap:wrap;gap:8px;padding:0;list-style:none}
.ip-multi-case-picker li {background:var(--bg-alt);border-radius:24px;padding:6px 12px;display:flex;align-items:center;gap:8px;max-width:100%}


/* Dialog sizing wins over the earlier native-dialog selectors; no shell rules. */


/* M4 / M1–M3 application styles — one declaration per selector and condition.
 * Rebuilt 2026-09-16 from the approved 4px gray/white design.
 * Legacy matching rules have been removed above; business state selectors remain intact.
 * Order: shared field state, page structure, responsive rules. No product-shell selectors.
 */
.ip-cases[data-detail-fullpage="1"] .ip-cases-drawer .ip-detail {
  max-height: calc(100vh - 170px);
  min-height: calc(100vh - 230px);
}
.ip-detail {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 10px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--bg);
  padding: 12px;
  max-height: calc(100vh - 240px);
  overflow: auto;
}
.ip-detail-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
}
.ip-detail-title {
  min-width: 0;
}
.ip-detail-title h2 {
  margin: 4px 0 0;
  font-size: 15.5px;
  overflow-wrap: anywhere;
}
.ip-detail-title p {
  margin: 2px 0 0;
  color: var(--fg3);
  font-size: 12.5px;
  overflow-wrap: anywhere;
}
.ip-detail-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.ip-detail-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  border-bottom: 1px solid var(--line);
  padding-bottom: 6px;
}
.ip-detail-tabs button {
  padding: 5px 10px;
  border: 1px solid transparent;
  border-radius: 8px;
  background: none;
  color: var(--fg2);
  font-family: inherit;
  font-size: 13px;
  cursor: pointer;
}
.ip-detail-tabs button.on {
  border-color: var(--line);
  background: var(--bg-alt);
  font-weight: 600;
}
/* 案件详情（三英总表「查看详情」抽屉，用户 2026-09-21 收口）：
   抽屉是灰底，里面应是"白块（页签条 + 各分节）→ 灰字段块"，原来分节是透明的，灰吃灰。 */
.ip-cases-drawer .ip-detail { border: 0; border-radius: 0; background: transparent; }
.ip-cases-drawer .ip-detail-body { display: flex; flex-direction: column; gap: 12px; }
.ip-cases-drawer .ip-detail-body > :is(.ip-basic, section, div[data-detail-section-content]) {
  background: var(--ip-m4-surface);
  border-radius: 4px;
  padding: 20px 16px;
}
/* 详情标题与页面标题同一档（20px/600），不再用 15.5px 的小标题。 */
.ip-cases-drawer .ip-detail-title h2 { font-size: 20px; font-weight: 600; line-height: 1.4; margin: 0; }
.ip-cases-drawer .ip-detail-title p { margin-top: 5px; font-size: 12.5px; }
/* 页签＝公共文字页签那一档（当前项加粗），不再是描边小胶囊。 */
.ip-cases-drawer .ip-detail-tabs { border-bottom: 0; padding-bottom: 0; gap: 16px; }
.ip-cases-drawer .ip-detail-tabs button { height: 32px; padding: 0; border: 0; border-radius: 0; background: none; color: var(--fg3); font-size: 13px; }
.ip-cases-drawer .ip-detail-tabs button.on { border: 0; background: none; color: var(--fg); font-weight: 700; }

/* 栏目行右侧的详情动作（预填/保存）：跟在栏目按钮之后，靠右对齐。 */
.ip-detail-tabs-row {display:flex;align-items:center;gap:12px;min-width:0;flex-wrap:wrap}
.ip-detail-tabs-row .ip-detail-tabs {flex:1 1 auto;min-width:0}
.ip-detail-actions {margin-left:auto;display:flex;align-items:center;gap:8px;flex:0 0 auto}
.ip-detail-actions > [hidden],
.ip-detail-actions [data-save-edits][hidden],
.ip-detail-actions [data-case-prefill][hidden] {display:none!important}
.ip-detail-actions [data-prefill-result]:empty {display:none}
.ip-detail-actions [data-prefill-result] {max-width:340px;color:var(--fg2);font-size:12px;line-height:16px}
/* 弹窗里栏目行是**一整块**浅色条：标签在左、预填/保存在右，中间不留空。
   条本身的底色放在 row 上（原来挂在 nav 上，nav 又是 flex:none，色块只包住标签）。 */
dialog.ip-case-dialog .ip-detail-tabs-row {
  margin:0 32px 16px;
  align-items:center;
  gap:20px;
  padding:8px 16px;
  background:var(--ip-m4-surface);
  border-radius:4px;
}
dialog.ip-case-dialog .ip-detail-tabs-row .ip-detail-tabs {
  margin:0;
  padding:0;
  background:none;
  border:0;
  flex:1 1 auto;
  min-width:0;
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-tabs-row {padding:6px 12px}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-tabs-row {margin:0 16px 12px}
}
.ip-detail-body {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ip-field-grid {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ip-field-group {
  min-width: 0;
}
.ip-field-group>b {
  display: block;
  margin-bottom: 6px;
  font-size: 12.5px;
  color: var(--fg2);
}
.ip-field-group-body {
  /* 字段块网格是公共约定（三列、行内等高）：详情与新增案件同一套，页面不再自带排布。 */
  display: grid;
  grid-template-columns: repeat(3,minmax(0,1fr));
  gap: 16px;
  align-items: stretch;
}
/* 两列变体（窄栏用）、单列变体（一行一个字段）与整行块：整行要能穿过 display:contents 的包装层（表单/业务容器），
   否则跨列不生效、字段会挤在同一行。 */
.ip-field-group-body.is-two {
  grid-template-columns: repeat(2,minmax(0,1fr));
}
.ip-field-group-body.is-one {
  grid-template-columns: minmax(0,1fr);
}
.ip-field-group-body [data-field-span="full"] {
  grid-column: 1 / -1;
}
/* 紧凑属性行（公共变体，用户 2026-09-21）：标签固定在左一列，内容占满其余宽度；
   多值收件人与长案名在右列自然换行并随内容增高，行与行只用一条细线分隔。
   邮件编辑面按这个排（.ip-mail-surface-rows），其它页要用就加 is-rows，别各写一份。 */
.ip-field-group-body.is-rows {
  display: flex;
  flex-direction: column;
  gap: 0;
  align-items: stretch;
}
.ip-field-group-body.is-rows > * {
  display: grid;
  grid-template-columns: 72px minmax(0, 1fr);
  gap: 1px 12px;
  align-items: start;
  min-width: 0;
  /* 左右不留额外缩进：与编辑面第一行（主题）同一个左边界（用户 2026-09-21）。 */
  padding: 9px 0;
  border-bottom: 1px solid var(--line);
}
.ip-field-group-body.is-rows > *:last-child { border-bottom: 0; }
.ip-field-group-body.is-rows > * > :first-child {
  grid-column: 1;
  color: var(--fg3);
  font-size: 12.5px;
  line-height: 1.8;
  min-width: 0;
  overflow-wrap: anywhere;
}
.ip-field-group-body.is-rows > * > :not(:first-child) {
  grid-column: 2;
  min-width: 0;
  overflow-wrap: anywhere;
  color: var(--fg);
}
/* 多值收件人/抄送在行里换行增高，不横向滚动（公共基线里是 nowrap + overflow-x，这里按行变体改）。 */
.ip-field-group-body.is-rows .ip-address-chips,
.ip-field-group-body.is-rows .ip-address-list { flex-wrap: wrap; overflow: visible; white-space: normal; }
/* 行里的按钮按内容宽（「更改关联」不该被拉满一行），输入类控件才占满。 */
.ip-field-group-body.is-rows > * > .btn,
.ip-field-group-body.is-rows > * > :not(:first-child) > .btn { justify-self: start; width: auto; }
.ip-field-group-body.is-rows :is(input, textarea, select) { width: 100%; box-sizing: border-box; }
/* 焦点、候选与只读仍走公共字段那一套（bindSurface 认 .ip-mail-field / .ip-field），
   这里只补一条"焦点落在哪一行"的提示，不新增第二套焦点样式。 */
.ip-field-group-body.is-rows > *:focus-within { background: color-mix(in srgb, var(--green-ink) 5%, transparent); }
[data-pane-mode="readonly"] .ip-field-group-body.is-rows > * > :first-child { color: var(--fg3); }
.ip-field {
  min-width: 0;
  align-self: stretch;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.ip-field-label {
  display: flex;
  align-items: center;
  gap: 5px;
  color: var(--fg3);
  font-size: 12px;
}
.ip-field-projection {
  color: #6b4ea8;
  font-size: 11px;
  font-style: normal;
}
.ip-field-value {
  font-size: 13px;
}
.ip-field-suggested {
  color: #10b981;
}
.ip-field.is-suggestion .ip-field-value {
  color: #6b7280;
}
.ip-field.is-suggestion.is-submitting .ip-field-value {
  color: #6b7280;
}
.ip-field.is-suggestion.is-syncing .ip-field-value {
  color: #6b7280;
}
.ip-field.is-local .ip-field-value {
  color: var(--fg);
}
.ip-field-suggestion {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  color: #6b7280;
  font-size: 13px;
}
.ip-field-status {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}
.ip-field-locate {
  border: 0;
  background: none;
  color: var(--green-ink);
  font-family: inherit;
  font-size: 12px;
  text-decoration: underline;
  cursor: pointer;
  padding: 0;
}
.ip-field-base {
  font-size: 12px;
  color: var(--fg3);
}
.ip-field-base summary {
  cursor: pointer;
}
.ip-field-base .ip-field-value {
  color: var(--fg3);
}
.ip-field-note {
  margin: 0;
  color: #8a5a12;
  font-size: 12px;
  overflow-wrap: anywhere;
}
.ip-field.is-formal>.ip-field-value {
  color: var(--fg);
  font-weight: 700;
}
.ip-field.ip-candidate-agent>.ip-field-suggested {
  color: #10b981;
  font-weight: 400;
}
.ip-field.is-local>.ip-field-suggestion {
  color: #10b981;
  font-weight: 400;
}
.ip-field.ip-candidate-agent:is(.is-preview,.is-pending)>.ip-field-suggested {
  animation: ip-candidate-breathe 1.8s ease-in-out infinite;
}
@media (prefers-reduced-motion:reduce) {
.ip-field.ip-candidate-agent>.ip-field-suggested {
  animation: none;
}
}
@media (prefers-reduced-motion:reduce) {
.ip-field.is-local>.ip-field-suggestion>:first-child {
  animation: none;
}
}
.ip-field-input {
  width: 100%;
  min-height: 32px;
  padding: 4px 8px;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: var(--bg);
  color: var(--fg);
  font-family: inherit;
  font-size: 13px;
}
.ip-basic-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
}
.ip-basic-head h3 {
  margin: 0;
  font-size: 14px;
}
.ip-basic-head p {
  flex-basis: 100%;
  margin: 2px 0 0;
  color: var(--fg3);
  font-size: 12px;
  overflow-wrap: anywhere;
}
.ip-mail-attach {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 4px;
  color: var(--fg2);
  font-size: 12px;
}
.ip-mail-attach span {
  max-width: 260px;
}
.ip-detail-preview {
  min-height: 20rem;
}
.ip-detail-preview[hidden] {
  display: none;
}
.ip-detail.has-preview {
  max-height: calc(100vh - 180px);
}
.ip-mail-fields {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ip-mail-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
  color: var(--fg3);
  font-size: 12px;
}
.ip-mail-field input {
  width: 100%;
  padding: 6px 8px;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: var(--bg);
  color: var(--fg);
  font-family: inherit;
  font-size: 13.5px;
  resize: vertical;
}
.ip-mail-field textarea {
  width: 100%;
  padding: 6px 8px;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: var(--bg);
  color: var(--fg);
  font-family: inherit;
  font-size: 13.5px;
  resize: vertical;
}
.ip-mail-field-body textarea {
  min-height: 14rem;
}
.ip-mail-attach-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 6px;
}
.ip-mail-attach-frozen li {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  min-width: 0;
}
.ip-mail-attach-frozen li>span {
  flex: 1 1 auto;
  min-width: 0;
}
.ip-mail-attach-frozen li>small {
  color: var(--fg3);
  font-size: 11.5px;
}
.ip-mail-attach-preview {
  flex: 0 0 auto;
  border: 1px solid var(--line);
  background: var(--bg);
  color: var(--fg2);
  border-radius: 6px;
  padding: 2px 8px;
  font-size: 11.5px;
  cursor: pointer;
  white-space: nowrap;
}
.ip-mail-attach-preview:hover {
  border-color: var(--accent, var(--line));
  color: var(--accent, var(--fg));
}
.ip-mail-attach-tools {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0 0 6px;
}
.ip-mail-attach-tools .ip-tone-muted {
  font-size: 11.5px;
  overflow-wrap: anywhere;
}
.ip-mail-attach-tools .is-disabled {
  opacity: .55;
  pointer-events: none;
}
.ip-mail-send-chip button {
  border: 0;
  background: none;
  color: #a12a2a;
  font-family: inherit;
  font-size: 12px;
  cursor: pointer;
}
.ip-mail-attach-note {
  margin: 6px 0 0;
  color: var(--fg3);
  font-size: 11.5px;
}
@media (max-width:1180px) {
.ip-detail {
  max-height: none;
}
}
@media (max-width:680px) {
.ip-detail-actions {
  width: 100%;
}
}
@media (max-width:680px) {
.ip-detail-actions .btn {
  flex: 0 0 auto;
}
}
@media (max-width:680px) {
.ip-field-group-body {
  grid-template-columns: minmax(0,1fr);
}
}
td .ip-field-input {
  width: 100%;
  min-width: 80px;
  padding: 3px 6px;
  border: 1px solid var(--green);
  border-radius: 4px;
  background: var(--bg);
  color: var(--fg);
  font: inherit;
}
select.ip-field-input {
  min-height: 32px;
}
textarea.ip-field-input {
  min-height: 52px;
  resize: vertical;
}
dialog.ip-case-dialog:not([open]) {
  display: none;
}
dialog.ip-case-dialog[hidden] {
  display: none;
}
dialog.ip-case-dialog::backdrop {
  background: rgba(22,29,31,.3);
}
dialog.ip-case-dialog.is-fullpage {
  width: 100vw;
  height: 100dvh;
  margin: 0;
  border-radius: 0;
  border: 0;
}
dialog.ip-case-dialog.is-collaborating {
  inset: auto;
  left: var(--ip-work-left, 0px);
  top: var(--ip-work-top, 0px);
  width: var(--ip-work-width, 100vw);
  height: var(--ip-work-height, 100dvh);
  /* 平台的 dialog max-height 会把它压得比工作区矮，底部就会露出一条页面（用户 2026-09-20 说的"遮挡"）。 */
  max-height: none;
  margin: 0;
  border-radius: 10px 10px 0 0;
  box-shadow: none;
  z-index: 60;
}
.ip-cases dialog.ip-case-dialog .ip-detail {
  height: 100%;
  min-height: 0;
  max-height: none;
  border: 0;
  padding: 0;
  gap: 0;
  overflow: hidden;
}
.ip-basic .ip-field-label {
  line-height: 1.6;
}
dialog.ip-case-dialog .ip-detail-preview:not([hidden]) {
  flex: 1 1 0;
  min-height: 0;
  overflow: auto;
}
dialog.ip-case-dialog.has-preview .ip-detail-body {
  display: none;
}
@media (max-width:700px) {
dialog.ip-case-dialog {
  width: calc(100vw - 16px);
  height: calc(100dvh - 16px);
}
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-head {
  padding: 16px;
}
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-body {
  padding: 20px 16px;
}
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-summary {
  padding: 0 16px 12px;
}
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-tabs {
  padding: 0 16px;
}
}
@media (max-width:700px) {
.ip-basic .ip-field-group-body {
  grid-template-columns: minmax(0,1fr);
}
}
@media (max-width:700px) {
dialog.ip-case-dialog .ip-detail-title h2 {
  font-size: 18px;
}
}
dialog.ip-mail-detail::backdrop {
  background: rgba(22,29,31,.3);
}
dialog.ip-mail-detail.is-fullscreen {
  width: 100vw;
  height: 100dvh;
  margin: 0;
  border: 0;
  border-radius: 0;
}
dialog.ip-mail-detail.is-collaborating {
  inset: auto;
  max-height: none;
  margin: 0;
  z-index: 60;
  border-radius: var(--r-lg,8px) var(--r-lg,8px)0 0;
}
dialog.ip-mail-detail>form {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  margin: 0;
}
.ip-mail-detail-body {
  min-width: 0;
  flex: 1;
  min-height: 0;
  overflow: auto;
}
.ip-mail-detail .ip-mail-pane {
  padding: 14px 20px;
}
.ip-mail-detail .ip-mail-pane-title h2 {
  display: none;
}
.ip-mail-detail .ip-mail-pane-body:has([data-mail-cases][hidden]) {
  grid-template-columns: minmax(0,1fr);
}
.ip-mail-detail .ip-mail-pane-body:has([data-mail-cases][hidden]):has(.ip-mail-side:not([hidden])) {
  grid-template-columns: minmax(0,1fr) minmax(200px,260px);
}
.ip-mail-fields>.ip-mail-field:not(.ip-mail-field-body) {
  display: grid;
  grid-template-columns: 58px minmax(0,1fr);
  align-items: center;
  gap: 12px;
}
.ip-mail-fields>.ip-mail-field:not(.ip-mail-field-body) input {
  height: 34px;
  min-height: 34px;
  padding: 6px 10px;
  line-height: 20px;
  font: inherit;
}
.ip-mail-fields>.ip-mail-field:not(.ip-mail-field-body) textarea {
  height: 34px;
  min-height: 34px;
  padding: 6px 10px;
  line-height: 20px;
  font: inherit;
}
.ip-mail-fields .ip-mail-attach-send {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
.ip-mail-field-body>textarea[hidden] {
  display: none;
}
@media (max-width:700px) {
dialog.ip-mail-detail {
  width: calc(100vw - 12px);
  height: calc(100dvh - 12px);
}
}
@media (max-width:700px) {
.ip-mail-detail .ip-mail-pane {
  padding: 12px;
}
}
@media (max-width:700px) {
.ip-mail-detail .ip-mail-pane-body:has([data-mail-cases][hidden]):has(.ip-mail-side:not([hidden])) {
  grid-template-columns: minmax(0,1fr);
}
}
.ip-mail-detail .ip-mail-cases {
  border-radius: 5px;
  max-height: 240px;
  overflow: auto;
  padding: 12px;
}
.ip-mail-detail .ip-mail-cases-items {
  display: grid;
  grid-template-columns: repeat(auto-fit,minmax(240px,1fr));
  gap: 6px;
}
.ip-mail-detail .ip-mail-cases-note {
  margin-bottom: 0;
}
.ip-mail-detail .ip-mail-case-search {
  display: flex;
  gap: 8px;
}
.ip-mail-detail .ip-mail-case-search input {
  flex: 1;
  min-width: 0;
}
.ip-mail-detail .ip-mail-side {
  max-height: 320px;
  overflow: auto;
}
.ip-field.is-suggestion .ip-field-suggested {
  color: var(--review-source,#10B981) !important;
  font-weight: 400 !important;
  animation: ip-candidate-breathe 2.4s ease-in-out infinite;
}
.ip-field.is-suggestion .ip-field-suggested * {
  color: var(--review-source,#10B981) !important;
  font-weight: 400 !important;
  animation: ip-candidate-breathe 2.4s ease-in-out infinite;
}
.ip-field.is-suggestion {
  border-left: 3px solid var(--review-source,#10B981);
  background: transparent;
}
.source-official .ip-field-suggested {
  display: block;
  width: fit-content;
  max-width: 100%;
  padding: 3px 9px;
  border-radius: 4px;
  background: #293326;
}
@media (prefers-reduced-motion:reduce) {
.ip-field-suggested {
  animation: none !important;
  opacity: 1 !important;
}
}
@media (prefers-reduced-motion:reduce) {
.ip-field-suggested * {
  animation: none !important;
  opacity: 1 !important;
}
}
:is(.ip-dialog-head,.ip-review-dialog>header,.ip-settings-dialog header,.ip-mail-dialog-head,.ip-host-panel-dialog>header,.ip-detail-actions,.ip-mail-preview header,.ui-preview-actions) button[aria-label^="关闭"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 32px;
  width: 32px;
  height: 32px;
  min-width: 32px;
  padding: 0;
  border: 0;
  background: transparent;
  font-weight: 400;
  font-size: 24px;
  line-height: 1;
  color: var(--fg);
  cursor: pointer;
}
@media (max-width:600px) {
dialog.ip-case-dialog .ip-detail-head {
  gap: 8px;
  padding: 16px;
}
}
@media (max-width:600px) {
.ip-detail-actions .btn {
  padding-left: 6px;
  padding-right: 6px;
  white-space: nowrap;
}
}
.ip-detail .ip-mail-item {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  gap: 16px;
  padding: 18px 20px;
  /* 圆角与底色都归公共色块（.ip-surface 那组）管，这里不再各写一份——用户 2026-09-20：
     邮件块要和详情字段块看起来是同一个色块。 */
}
.ip-detail .ip-mail-main>b {
  font-size: 14px;
  line-height: 1.6;
}
.ip-detail .ip-mail-meta {
  align-items: center;
  gap: 8px 20px;
  margin-top: 10px;
  line-height: 1.5;
}
.ip-detail .ip-mail-address {
  max-width: min(100%,360px);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ip-detail .ip-mail-meta .ip-chip {
  font-size: 12px;
  line-height: 1.5;
  padding: 2px 8px;
  border-radius: 4px;
}
.ip-detail .ip-mail-attach {
  margin-top: 10px;
  color: var(--fg3);
  font-size: 12px;
}
.ip-detail .ip-mail-attach summary {
  cursor: pointer;
}
.ip-detail .ip-mail-attach ul {
  margin: 8px 0;
  padding-left: 20px;
}
.ip-detail .ip-mail-attach li {
  overflow-wrap: anywhere;
  line-height: 1.7;
}
@media (max-width:600px) {
.ip-detail .ip-mail-item {
  padding: 14px 12px;
  gap: 8px;
}
}
.ip-mail-fields label[hidden] {
  display: none !important;
}
.ip-mail-attach-send {
  display: flex;
  flex-wrap: wrap;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--line);
  align-items: flex-start;
  gap: 10px 12px;
}
.ip-mail-attach-send>b {
  flex: 0 0 100%;
  font-size: 13px;
  font-weight: 500;
  color: var(--fg3);
}
.ip-mail-attach-frozen {
  list-style: none;
  flex-direction: column;
  padding: 0;
  min-width: 0;
  display: flex;
  flex-flow: row wrap;
  gap: 8px;
  margin: 0;
  max-width: 100%;
}
.ip-mail-attach-frozen li.ip-mail-send-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 5px 8px;
  background: var(--bg);
  font-size: 13px;
}
.ip-mail-send-chip>.ui-text-line1 {
  max-width: 260px;
  min-width: 0;
}
.ip-mail-send-chip button[data-attach-remove] {
  border: 0;
  background: transparent;
  font-size: 18px;
  line-height: 1;
  padding: 2px 4px;
  flex: none;
  color: var(--fg3);
}
.ip-mail-attach-send .ip-mail-attach-note {
  flex-basis: 100%;
  margin: 0;
}
.ip-mail-fields textarea[data-mail-field][hidden] {
  display: none !important;
}
.ip-mail-fields .ip-address-chips>input {
  width: 160px;
  flex: 1 1 140px;
  min-width: 80px;
  max-width: 100%;
  border: 0;
  box-shadow: none;
  background: transparent;
}
.source-agent .ip-field-suggested {
  animation: none !important;
}
.source-agent .ip-field-suggested * {
  animation: none !important;
}
.is-agent-filling.source-agent .ip-field-suggested {
  color: #10b981 !important;
  animation: ip-agent-breathe 2.4s ease-in-out 3 !important;
}
@media (prefers-reduced-motion:reduce) {
.is-agent-filling.source-agent .ip-field-suggested {
  animation: none !important;
}
}
.ip-mail-send-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  border: 1px solid var(--line);
  background: var(--bg);
  font-size: 13px;
  border-radius: 6px;
  max-width: 100%;
  padding: 6px 9px;
}
.ip-mail-send-chip:hover {
  border-color: var(--green);
}
.ip-mail-detail .ip-mail-fields>.ip-mail-field>span {
  margin: 0;
  font-size: 12px;
  color: var(--fg3);
}
.ip-mail-detail .ip-mail-template {
  padding: 6px 0;
}
.ip-mail-detail .ip-mail-editor-rich {
  min-height: 320px;
}
.ip-mail-detail [data-pane-mode="readonly"] :is([data-mail-save],[data-mail-send],[data-mail-denied]) {
  display: none;
}
.ip-mail-detail .ip-mail-rich [contenteditable] {
  min-height: 100px;

  overflow: auto;
}
.ip-mail-detail .ip-mail-fields>.ip-mail-field:not(.ip-mail-field-body) {
  display: grid;
  grid-template-columns: 56px minmax(0,1fr);
  gap: 10px;
  align-items: center;
  margin: 0;
  padding: 2px 0;
}
.ip-mail-detail .ip-address-chips {
  box-sizing: border-box;
}
.ip-mail-detail .ip-address-chips>input {
  box-sizing: border-box;
}
.ip-mail-reading-attachments .ip-mail-send-chip {
  color: var(--fg);
  background: #f8f9f9;
}
.ip-mail-fields .ip-mail-send-chip {
  display: inline-flex;
  gap: 6px;
  align-items: center;
  max-width: 360px;
  color: var(--fg);
  background: #f8f9f9;
}
.ip-mail-detail [data-mail-preview-error] {
  margin: 12px 24px;
  color: #b54732;
}
.ip-mail-fields .ip-mail-attachment-bar {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 8px 0;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.ip-mail-attachment-bar .ip-mail-attach-send {
  flex: 1;
  min-width: 0;
  border: 0;
  padding: 0;
  margin: 0;
  gap: 6px;
}
.ip-mail-attachment-bar .ip-mail-attach-send>b {
  flex-basis: 100%;
  margin: 0 0 2px;
  font-size: 12px;
  font-weight: 400;
}
@media (max-width:600px) {
.ip-mail-fields .ip-mail-attachment-bar {
  flex-wrap: wrap;
}
}
@media (max-width:600px) {
.ip-mail-attachment-bar .ip-mail-attach-send {
  flex-basis: 100%;
}
}
.ip-mail-send-chip .ip-mail-chip-file {
  color: var(--fg);
  font-size: 13px;
}
.ip-mail-send-chip .ip-mail-chip-file>span[aria-hidden] {
  color: var(--fg3);
}
.ip-mail-detail .ip-mail-fields :is(input,select) {
  font-size: 13px;
}
.ip-file-page .ip-file-list {
  margin: 0 24px;
  flex: 1;
  min-height: 0;
  overflow: auto;
  /* 行高必须由卡片内容决定：被压到固定行高时，关联案件那行与操作行会被挤出卡片。 */
  grid-auto-rows: max-content;
}
@media (max-width:700px) {
.ip-file-page .ip-file-list {
  margin-inline: 18px;
}
}
.ip-mail-detail-body[hidden] {
  display: none !important;
}
.ip-basic .ip-field-group>b {
  margin-bottom: 14px;
}
:is(.ip-master-page,.ip-settings-page,.ip-mail-page,.ip-transfer-page,.ip-blocks-page,.ip-unified-review-page,.ip-detail,.ip-settings-dialog,.ip-material-dialog,.host-unified,.ip-logs-page) {
  --fg: #262b29;
  --fg2: #535c57;
  --fg3: #747d77;
  --line: #e5e9e6;
  font-family: "PingFang SC","Microsoft YaHei UI","Noto Sans CJK SC",-apple-system,BlinkMacSystemFont,sans-serif;
  font-size: 13px;
  line-height: 1.5;
}
.ip-basic .ip-field-value {
  overflow-wrap: anywhere;
  font-size: 13px;
  line-height: 1.65;
}
/* 胶囊行＝公共件行为（用户 2026-09-20 定稿）：**一行排布**；放不下时**可以左右滑动**
   （容器横向滚动 + 细滚动条），不再是把内容硬裁掉、也不在胶囊内部打省略号。 */
.ip-address-list,
.ip-chip-list,
.ip-name-chips,
.ip-customer-chosen {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: thin;
}
/* 胶囊保持自然宽度（不在胶囊内部截断）：一行排不下时**由容器裁切**（用户 2026-09-20 澄清），
   所以这里不给胶囊省略号、也不让它被压扁。 */
.ip-basic .ip-field-value .ip-address-chip {
  flex: none;
  white-space: nowrap;
}
/* 一行排布时这些元素不参与收缩：按钮和输入框被压扁就没法点了。 */
.ip-customer-toggle,
.ip-address-chips > input,
.ip-email-chips .ip-chip-entry {flex:none;}
.ip-basic .ip-field.is-formal>.ip-field-value {
  /* 已保存（正式）的值加粗，草稿保持常规字重+灰字（用户 2026-09-19）。 */
  font-weight: 700;
}
.ip-detail-delete-note:not([hidden]) {
  margin: 0;
  padding: 8px 20px;
  border-bottom: 1px solid var(--line);
  color: var(--fg3);
  font-size: 12px;
  line-height: 1.6;
}
dialog:is(.ip-mail-detail,.ip-mail-review,.ip-mail-preview,.ip-mail-preview-dialog,.ip-mail-guard,.ip-mail-material-picker,.ip-settings-dialog,.ip-case-recycle-dialog,.ip-material-dialog,.ip-review-preview,.ip-official-export-dialog,.ip-host-panel-dialog) {
  box-sizing: border-box;
  border: 1px solid var(--line2);
  border-radius: var(--r-lg,8px);
  box-shadow: var(--pop);
  color: var(--fg);
  background: var(--card);
}
dialog:is(.ip-mail-detail,.ip-mail-review,.ip-mail-preview,.ip-mail-preview-dialog,.ip-mail-guard,.ip-mail-material-picker,.ip-settings-dialog,.ip-case-recycle-dialog,.ip-material-dialog,.ip-review-preview,.ip-official-export-dialog,.ip-host-panel-dialog)::backdrop {
  background: rgba(0,0,0,.28);
}
.ip-mail-fields>.ip-mail-template {
  min-width: 0;
  margin: 4px 0 12px;
  padding: 14px 16px;
  border: 1px solid var(--line);
  border-radius: var(--r,6px);
  background: var(--card);
}
.ip-mail-template-pick>.ip-mail-field {
  display: flex;
  flex: 1 1 260px;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
  margin: 0;
}
.ip-mail-template-pick>.ip-mail-field>span {
  color: var(--fg3);
  font-size: 12px;
}
.ip-mail-template .ip-mail-field-static {
  display: grid;
  grid-template-columns: 58px minmax(0,1fr);
  gap: 12px;
  margin: 0;
  line-height: 1.6;
}
.ip-mail-template .ip-mail-field-static b {
  font-size: 13px;
  font-weight: 500;
  overflow-wrap: anywhere;
}
.ip-mail-fields>.ip-mail-field-body {
  min-width: 0;
}
.ip-mail-fields>.ip-mail-field-body>span {
  display: block;
  margin-bottom: 8px;
  color: var(--fg3);
  font-size: 12px;
}
@media (max-width:600px) {
.ip-mail-fields>.ip-mail-template {
  padding: 12px;
  margin-bottom: 10px;
}
}
@media (max-width:600px) {
.ip-mail-template-pick>.ip-mail-field {
  flex-basis: 100%;
}
}
.ip-field-editor {
  display: flex;
  align-items: flex-start;
  gap: 6px;
  min-width: 0;
  width: 100%;
}
.ip-field-editor>.ip-field-input {
  flex: 1;
  min-width: 0;
}
.ip-field.is-candidate-pending .ip-field-suggested .ui-text {
  color: inherit;
}
.ip-field.is-candidate-pending .ip-field-suggested {
  animation: ip-candidate-breathe 2.4s ease-in-out infinite;
  cursor: text;
}
@media (prefers-reduced-motion:reduce) {
.ip-field.is-candidate-pending .ip-field-suggested {
  animation: none;
  color: var(--blue);
}
}
.ip-file-card h2 {
  font-size: 16px;
  margin: 0 0 10px;
  overflow-wrap: anywhere;
}
.ip-file-detail::backdrop {
  background: #0005;
}
.ip-file-detail h2 {
  font-size: 20px;
  overflow-wrap: anywhere;
  margin: 0 0 12px;
}
.ip-file-detail[open] {
  display: flex;
  flex-direction: column;
}
.ip-file-detail-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px 24px;
  border-bottom: 1px solid #e2e7e4;
  gap: 16px;
}
.ip-file-detail-head h2 {
  margin: 0;
}
.ip-file-detail-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 0;
  flex: 1;
}
.ip-file-preview {
  padding: 24px;
  overflow: auto;
  min-width: 0;
}
.ip-file-properties {
  padding: 24px;
  overflow: auto;
  min-width: 0;
  border-right: 1px solid #e2e7e4;
}
.ip-file-properties dt {
  color: #64716a;
  margin-top: 18px;
  font-size: 13px;
}
.ip-file-properties dd {
  margin: 6px 0;
  overflow-wrap: anywhere;
}
.ip-file-detail-actions {
  display: flex;
  gap: 12px;
  margin-top: 24px;
}
.ip-file-detail-footer {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 16px;
  flex-wrap: wrap;
  padding: 12px 20px 20px;
}
.ip-file-detail-footer .ip-file-detail-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: nowrap;
  gap: 8px;
  margin-top: 0;
  white-space: nowrap;
}
.ip-file-business dd {
  min-width: 0;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* 预览正文一律走公共 A4 页框（ui-primitives.css 的 .ui-preview-stage/.ui-preview-page）：
   纸面按 210:297 贴合可用高度，正文/PDF/图片在纸面内滚动，不再留一个撑高却看不到内容的空白区。 */
.ip-file-preview [data-file-visual] { min-height: 0; }
/* Word 正文按纸面排版：字体回退在脚本里给，这里只定页边距、字号与段距。
   纸面按宽度铺满并随正文加长，上下滚动由页框（.ui-preview-stage）统一负责。 */
.ip-word-text {
  flex: none;
  padding: 40px 36px;
  color: var(--text, #202824);
  font-size: 13.5px;
  line-height: 1.9;
}
.ip-word-text > p {
  margin: 0 0 10px;
}
.ip-word-text > p:last-child {
  margin-bottom: 0;
}
@media (max-width:700px) {
.ip-file-detail-columns {
  grid-template-columns: 1fr;
  overflow: auto;
}
}
@media (max-width:700px) {
.ip-file-preview {
  overflow: visible;
}
}
@media (max-width:700px) {
.ip-file-properties {
  overflow: visible;
  border-right: 0;
  border-bottom: 1px solid #e2e7e4;
}
}
.fr-review-dialog::backdrop {
  background: #16342f55;
}
.fr-review {
  display: flex;
  flex-direction: column;
  max-height: calc(100dvh - 48px);
}
.fr-header {
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 16px;
  padding: 24px 26px 18px;
  flex: none;
}
.fr-header h2 {
  font-size: 25px;
  line-height: 1.3;
  margin: 0;
  overflow-wrap: anywhere;
}
.fr-header p {
  color: #788193;
  margin: 8px 0 0;
  font-size: 13px;
}
.fr-header nav {
  display: flex;
  gap: 8px;
  flex: none;
}
.fr-tool {
  border: 1px solid #dce3eb;
  background: #fff;
  border-radius: 8px;
  padding: 8px 12px;
  cursor: pointer;
  color: inherit;
}
.fr-close {
  border: 1px solid #dce3eb;
  background: #fff;
  border-radius: 8px;
  cursor: pointer;
  color: inherit;
  font-size: 20px;
  padding: 4px 10px;
}
.fr-body {
  overflow: auto;
  min-height: 0;
  padding: 0 20px;
  overscroll-behavior: contain;
}
.fr-zone {
  border: 1px solid #dce4ec;
  border-radius: 10px;
  margin: 0 0 15px;
  overflow: hidden;
}
.fr-zone>h3 {
  padding: 13px 18px;
  margin: 0;
  background: #f6f8fa;
  font-size: 17px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
}
.fr-zone h3 small {
  font-size: 12px;
  color: #7d8797;
  font-weight: 400;
}
.fr-grid {
  display: grid;
  grid-template-columns: repeat(2,minmax(0,1fr));
  gap: 18px 24px;
  padding: 18px;
}
.fr-value {
  display: flex;
  flex-direction: column;
  gap: 7px;
  min-width: 0;
}
.fr-value>span {
  color: #798396;
  font-size: 13px;
}
.fr-value input {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  font: inherit;
  border: 1px solid #dde5ec;
  border-radius: 6px;
  padding: 7px;
  background: white;
}
.fr-value select {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  font: inherit;
  border: 1px solid #dde5ec;
  border-radius: 6px;
  padding: 7px;
  background: white;
}
.fr-relations select {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  font: inherit;
  border: 1px solid #dde5ec;
  border-radius: 6px;
  padding: 7px;
  background: white;
}
.fr-help {
  margin: 0 18px 12px;
  padding-top: 10px;
  border-top: 1px solid #e5eaf0;
  color: #778194;
  font-size: 12px;
}
.fr-review .cr-item {
  padding: 0;
  border: 0;
  background: none;
}
.fr-review .cr-file-candidates {
  margin: 0;
}
.fr-review [data-review-enum] {
  min-width: 0;
}
.fr-relations {
  padding: 16px 18px;
}
.fr-radios {
  display: flex;
  gap: 14px;
  font-size: 14px;
  font-weight: 400;
}
.fr-more-relations {
  margin-top: 12px;
  font-size: 13px;
}
.fr-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
}
.fr-recalculate {
  margin-top: 12px;
}
.fr-empty {
  color: #798396;
  font-size: 14px;
  grid-column: 1/-1;
}
.fr-footer {
  display: flex;
  gap: 14px;
  align-items: center;
  justify-content: space-between;
  padding: 16px 24px;
  background: #fff;
  border-top: 1px solid #edf0f3;
  flex: none;
}
.fr-footer p {
  font-size: 13px;
  color: #778194;
  margin: 0;
}
.fr-footer button {
  white-space: nowrap;
  padding: 12px 20px;
}
.fr-review [data-reject] {
  margin: 0 0 14px;
}
.fr-file-heading {
  display: flex;
  gap: 10px;
  align-items: center;
}
.fr-file-heading strong {
  overflow-wrap: anywhere;
}
.fr-file-card p {
  margin: 0;
  color: #798396;
  font-size: 12px;
}
.fr-file-icon {
  padding: 7px;
  border-radius: 5px;
  background: #eef7f3;
  color: #168668;
  font-size: var(--ip-text-2xs);
}
.fr-card-case {
  padding-top: 12px;
  font-size: 12px;
  color: #798396;
}
.fr-card-action {
  align-self: end;
  color: #149f77;
}
.fr-file-card[hidden] {
  display: none;
}
@media (max-width:560px) {
.fr-grid {
  grid-template-columns: 1fr;
}
}
@media (max-width:560px) {
.fr-header {
  padding: 18px;
  flex-wrap: wrap;
}
}
@media (max-width:560px) {
.fr-header h2 {
  font-size: 21px;
}
}
@media (max-width:560px) {
.fr-footer {
  padding: 14px;
}
}
@media (max-width:560px) {
.fr-body {
  padding: 0 12px;
}
}
.fr-field {
  min-width: 0;
}
.fr-field>label {
  color: #798396;
  font-size: 13px;
}
.fr-field>label b {
  font-weight: 400;
}
.fr-after {
  margin-top: 7px;
}
.fr-review .fr-value {
  display: block;
  min-width: 0;
}
.fr-review .fr-value>span {
  display: block;
  text-align: left;
}
.fr-review .fr-radios {
  white-space: nowrap;
}
.fr-review .fr-radios label {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  width: auto;
  white-space: nowrap;
}
.fr-review .fr-radios input {
  width: 14px;
  min-width: 14px;
  height: 14px;
  margin: 0;
}
.fr-review .fr-footer [data-confirm] {
  background: #159b75;
  border-color: #159b75;
  color: #fff;
}
.fr-review .cr-file-candidate.is-formal {
  animation: none;

  color: var(--ip-m4-ink);
  background: none;

  font-weight: 700;
}
.fr-page-header h2 {
  font-size: 24px;
  margin: 0 0 8px;
}
.fr-page-header p {
  color: #7b8490;
  margin: 0;
}
.fr-page-toolbar {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 24px 0;
}
.fr-state-tabs {
  display: flex;
  gap: 4px;
  padding: 4px;
  background: #eef1f3;
  border-radius: 8px;
}
.fr-state-tabs button {
  background: none;
  border: 0;
  border-radius: 6px;
  padding: 9px 18px;
  color: #79828c;
  cursor: pointer;
  white-space: nowrap;
}
.fr-state-tabs button.is-active {
  background: white;
  color: #168668;
  box-shadow: 0 1px 4px #162d2810;
}
.fr-search {
  margin-left: auto;
  min-width: 220px;
  width: 340px;
}
.fr-search input {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid #e0e6ec;
  border-radius: 8px;
  padding: 11px 14px;
  background: white;
  color: inherit;
}
.fr-page-toolbar .fr-tool {
  padding: 10px 16px;
}
@media (max-width:650px) {
.fr-page-toolbar {
  flex-wrap: wrap;
  gap: 10px;
}
}
@media (max-width:650px) {
.fr-search {
  order: 3;
  width: 100%;
  margin: 0;
}
}
@media (max-width:650px) {
.fr-page-toolbar>.fr-tool {
  margin-left: auto;
}
}
.fr-review .cr-file-candidate.is-formal::after {
  content: none;

}
.ip-field-state-text {
  display: inline-block;
  margin-left: 6px;
  color: var(--fg3);
  font-size: var(--ip-text-2xs);
  font-weight: 400;
}
.ip-field-state-text[data-state="formal"] {
  color: var(--ip-state-readonly);
}
.ip-field-state-text[data-state="adopted"] {
  color: var(--ip-state-adopted);
}
.ip-field-state-text[data-state="draft"] {
  color: var(--ip-state-draft);
}
.ip-field-state-text[data-state="saving"] {
  color: var(--ip-state-saving);
}
.ip-field-state-text[data-state="failed"] {
  color: var(--ip-state-failed);
}
.ip-field-state-text[data-state="conflict"] {
  color: var(--ip-state-conflict);
}
.ip-field-state-text[data-state="readonly"] {
  color: var(--ip-state-readonly);
}
.ip-field-readonly {
  display: inline-block;
  min-width: 0;
  color: var(--ip-state-readonly);
  font-size: var(--ip-text-xs);
  overflow-wrap: anywhere;
}
.ip-field-readonly::before {
  content: "只读";
  margin-right: 6px;
  padding: 1px 6px;
  border: 1px solid var(--line);
  border-radius: var(--ip-radius-sm);
  font-size: var(--ip-text-2xs);
}
.fr-review [data-tags-editor] {
  display: block;
}
.fr-review [data-file-metadata=notes] {
  min-height: 85px;
  resize: vertical;
}
.ip-mail-field-candidate {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ip-space-1,4px);
  margin: 2px 0 0;
}
.ip-mail-field-candidate .ip-mail-candidate-evidence {
  flex: 1 1 100%;
  color: var(--ip-fg-muted,#6b7280);
  font-size: var(--ip-text-2xs,11px);
}
:is(.ip-cases,.ip-detail,.ip-file-page,.ip-file-detail,.ip-case-review,.fr-review-dialog,.ip-mail-detail,.ip-mail-pane,.ip-logs-page,.ip-configuration-page,.ip-unified-review-page) {
  --ip-m4-fill: #f4f4f4;
  --ip-m4-surface: var(--card,#fff);
  --ip-m4-ink: var(--fg,#111);
  --ip-m4-muted: var(--fg3,#777);
  --ip-m4-agent: #16804a;
  --ip-m4-code: #2864ce;
  color: var(--ip-m4-ink);
  font-size: 14px;
}
:is(.ip-cases,.ip-detail,.ip-file-page,.ip-file-detail,.fr-review-dialog,.ip-mail-detail,.ip-mail-pane,.ip-logs-page,.ip-configuration-page,.ip-unified-review-page) .btn {
  border-radius: 4px;
  box-shadow: none;
  min-height: 32px;
}
:is(.ip-cases,.ip-detail,.ip-file-page,.ip-file-detail,.fr-review-dialog,.ip-mail-detail,.ip-mail-pane,.ip-logs-page,.ip-configuration-page,.ip-unified-review-page) .btn-pri {
  background: var(--ip-m4-ink);
  border-color: var(--ip-m4-ink);
  color: var(--ip-m4-surface);
}
:is(.ip-cases,.ip-detail,.ip-file-page,.ip-file-detail,.fr-review-dialog,.ip-mail-detail,.ip-mail-pane,.ip-logs-page,.ip-configuration-page,.ip-unified-review-page) select {
  background-color: var(--ip-m4-surface);
  border-radius: 4px;
  color: inherit;
}
:is(.ip-cases,.ip-detail,.ip-file-page,.ip-file-detail,.fr-review-dialog,.ip-mail-detail,.ip-mail-pane,.ip-logs-page,.ip-configuration-page,.ip-unified-review-page) option:hover {
  background: var(--ip-m4-fill);
}
:is(.ip-case-dialog,.ip-file-detail,.fr-review-dialog,.ip-mail-detail,.ip-create-case) {
  border: 0;
  border-radius: 4px;
  background: var(--ip-m4-fill);
  box-shadow: 0 16px 64px #0003;
}
:is(.ip-case-dialog,.ip-file-detail,.fr-review-dialog,.ip-mail-detail)::backdrop {
  background: #20242840;
}
dialog.ip-case-dialog .ip-detail-summary {
  padding: 0 28px 18px;
  display: none;
}
dialog.ip-case-dialog .ip-detail-tabs {
  flex-wrap: nowrap;
  overflow-x: auto;
  margin: 0 32px 16px;
  padding: 8px 16px;
  background: var(--ip-m4-surface);
  border: 0;
  border-radius: 4px;
  flex: none;
  gap: 20px;
  overflow: auto;
}
dialog.ip-case-dialog .ip-detail-tabs button {
  padding: 12px 0;
  border: 0;
  background: none;
  border-radius: 4px;
  color: var(--ip-m4-muted);
  white-space: nowrap;
}
dialog.ip-case-dialog .ip-detail-tabs button.on {
  background: none;
  color: var(--ip-m4-ink);
  font-weight: 700;
  box-shadow: none;
}
dialog.ip-case-dialog .ip-detail-body {
  padding: 0 32px 24px;
  flex: 1;
  min-height: 0;
  overflow: auto;
}
.ip-basic .ip-basic-head {
  /* 「基本信息」标题带不再占位（页签名已叫案件信息）：只读说明移到栏目行，
     这样案件信息的第一块白色区块与邮件/关联文件从同一 top 开始（用户 2026-09-20）。 */
  display: none;
  background: none;
  border: 0;
}
.ip-basic .ip-basic-head-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
  min-width: 0;
}
.ip-basic .ip-basic-head-actions [data-prefill-result] {
  color: var(--ip-m4-muted);
  font-size: 12px;
  line-height: 18px;
  max-width: 320px;
}
.ip-basic .ip-basic-head h3 {
  display: none;
}
.ip-basic .ip-basic-head p {
  font-size: 12px;
  color: var(--ip-m4-muted);
}
.ip-basic .ip-field-group {
  background: var(--ip-m4-surface);
  /* 内边距与邮件/关联文件用的公共容器块同一档（用户 2026-09-20：案件信息也要去掉多出来的 padding）。 */
  padding: 16px;
  border: 0;
  border-radius: 4px;
  margin: 0;
}
.ip-basic .ip-field-group>b {
  display: block;
  font-size: 14px;
  line-height: 22px;
  margin-bottom: 16px;
}
.ip-basic .ip-field-group-body {
  display: grid;
  grid-template-columns: repeat(3,minmax(0,1fr));
  gap: 16px;
}
.ip-m4-aux {
  background: var(--ip-m4-surface);
  border-radius: 4px;
  min-width: 0;
}
.ip-m4-aux>summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 16px;
  list-style: none;
  cursor: pointer;
  line-height: 24px;
}
.ip-m4-aux>summary::-webkit-details-marker {
  display: none;
}
.ip-m4-aux>summary span {
  font-size: 13px;
  font-weight: 400;
}
.ip-m4-aux:not([open])>summary .ip-m4-collapse {
  display: none;
}
.ip-m4-aux[open]>summary .ip-m4-expand {
  display: none;
}
.ip-basic .ip-field,
.fr-review .fr-field,
.ip-m4-mail-left .ip-mail-field {
  box-sizing: border-box;
  min-width: 0;
  height: 56px;
  min-height: 56px;
  max-height: 56px;
  padding: 6px 14px 4px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  position: relative;
  margin: 0;
}
/* ============ 公共色块（用户 2026-09-20，分两级）============
   ① 面块 .ip-surface-fill：一格里的块（详情字段块、邮件条目、官文条目、日志条目、文件条目…）；
   ② 容器块 .ip-surface-panel：装一组块的容器（常用字段组、辅助字段区、邮件列表外层…）。
   两级的外观只在这里定义一次，别处只许用类名、不许再写一份底色/圆角。 */
.ip-basic .ip-field,
.ip-file-detail .ip-file-properties .ip-field,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field,
.fr-review .fr-field,
.ip-m4-mail-left .ip-mail-field,
.ip-mail-item,
.ip-notice-item,
.ip-log-item,
.ip-file-item,
.ip-surface-fill,
.ip-surface {
  background: var(--ip-m4-fill);
  border: 0;
  border-radius: 4px;
}
.ip-basic .ip-field-group,
.ip-mail-surface-block[data-mail-block="fields"],
.ip-m4-aux,
.ip-surface-panel {
  background: var(--ip-m4-surface);
  border: 0;
  border-radius: 4px;
  padding: 20px 16px;
}
/* ============ 字段块网格契约（公共）============
   块只有两种尺寸，其他一律不允许：
     ① 多列：默认占 1 格；同一行内的块**等高**（行高由最高者决定，其余拉伸到同高）；
     ② 单栏（多行）：data-field-span="full" 占满整行，块内可多行，不与矮块并排。
   编辑态按单栏展开（见下），所以临时长高也不会挤坏同行的伙伴。 */
.ip-basic .ip-field {
  height: auto;
  max-height: none;
}
/* 文件详情左栏沿用同一套字段块：标签浅、值重、块高一致；整行块与含客户组件的块按内容长。 */
.ip-file-detail .ip-file-properties .ip-field {
  box-sizing: border-box;
  min-height: 56px;
  height: 56px;
  max-height: 56px;
  padding: 6px 14px 4px;
  gap: 2px;
}
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field {
  box-sizing: border-box;
  min-height: 56px;
  height: 56px;
  max-height: 56px;
  /* 邮件字段块的底部留白比公共值多 1px（用户 2026-09-21）。 */
  padding: 6px 14px 5px;
  gap: 2px;
}
/* 邮件字段里内容会长的块（附件、收抄件多值、整行块）按内容长，不锁 56px。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-field-span="full"],
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-mail-field-attach,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field:has(.ip-email-chips),
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field:has(.ip-field-input) { height: auto; max-height: none; }
.ip-file-detail .ip-file-properties .ip-field[data-field-span="full"],
.ip-file-detail .ip-file-properties .ip-field:has(.ip-customer-select) {
  height: auto;
  max-height: none;
}
.ip-file-detail .ip-file-properties .ip-field-label,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field-label {
  font-size: 11px;
  line-height: 16px;
  color: var(--ip-m4-muted);
  height: 16px;
  flex: none;
}
.ip-file-detail .ip-file-properties .ip-field-value,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field-value {
  font-size: 14px;
  line-height: 24px;
  font-weight: 600;
  min-width: 0;
}
/* 值区里的控件在块内平铺（与案件/文件详情同一套）：输入类不带边框、不撑高块。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field-value :is(input, select, textarea).ip-field-input {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  min-height: 24px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  font: inherit;
  color: inherit;
}
/* 值区里的输入控件在原位编辑：块内平铺、无边框，和案件详情一致。 */
.ip-file-detail .ip-file-properties .ip-field-value :is(input, select, textarea).ip-field-input {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  min-height: 24px;
  height: 24px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--ip-m4-ink);
  font: inherit;
  font-weight: 600;
  line-height: 24px;
}
.ip-file-detail .ip-file-properties .ip-field-value select.ip-field-input {
  appearance: none;
  background-image: none;
  cursor: pointer;
}
.ip-file-detail .ip-file-properties .ip-field-value .ip-customer-toggle {
  min-height: 28px;
  height: auto;
  font-size: 12px;
}
.ip-basic .ip-field-group-body>.ip-field {
  align-self: stretch;
}
.ip-basic .ip-field-group-body>.ip-field[data-field-span="full"] {
  grid-column: 1 / -1;
}
.ip-basic .ip-field-label,
.fr-review .fr-field>label,
.ip-m4-mail-left .ip-mail-field>span:first-child {
  font-size: 11px;
  font-weight: 400;
  line-height: 16px;
  color: var(--ip-m4-muted);
  height: 16px;
  flex: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ip-basic .ip-field-value,
.fr-review .fr-after,
.ip-m4-mail-left .ip-mail-field>:not(:first-child) {
  min-width: 0;
  max-width: 100%;
  line-height: 24px;
  margin: 0;
}
.ip-basic .ip-field-value:not(:has([data-field-control])) {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 24px;
  max-height: 24px;
  font-size: 14px;
  /* 字段值统一加粗（用户 2026-09-18）：标签浅、值重，扫一眼就能分清。 */
  font-weight: 600;
}
/* 值行里放的是胶囊清单时，高度按内容走：原来 24px 行高 + overflow:hidden 会把胶囊下半截裁掉。 */
.ip-basic .ip-field-value:not(:has([data-field-control])):has(.ip-address-list) {
  display: flex;
  align-items: center;
  min-height: 32px;
  max-height: none;
}
/* 值区里挂的是"客户选择器"这类组件时，同样不钳单行：已选胶囊行与展开面板都按内容长，
   同行其它字段靠网格的 align-items:stretch 一起拉长（用户 2026-09-20）。 */
.ip-basic .ip-field-value:not(:has([data-field-control])):has(.ip-customer-select) {
  display: block;
  white-space: normal;
  overflow: visible;
  max-height: none;
  line-height: 1.6;
}
.ip-basic .ip-field:has(.ip-customer-select) {
  height: auto;
  max-height: none;
}
.ip-basic .ip-field-value .ip-address-chip {
  font-weight: 600;
}
.ip-basic .ip-field-value>.ui-text {
  min-width: 0;
  max-width: 100%;
  margin: 0;
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 24px;
  max-height: 24px;
  font-size: 14px;
}
.fr-review .cr-file-candidate {
  overflow-wrap: anywhere;
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 24px;
  max-height: 24px;

  font-size: 14px;

  color: var(--ip-m4-code);

  animation: ip-m4-breathe 2.2s ease-in-out infinite;
}
.ip-m4-mail-left .ip-address-list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 100%;
  line-height: 24px;
  font-size: 14px;
}
.ip-basic .ip-field.is-formal>.ip-field-value {
  font-weight: 700;
  color: var(--ip-m4-ink);
}
.ip-m4-mail-left [data-m4-state=formal] input {
  font-weight: 700;
  color: var(--ip-m4-ink);
}
.ip-basic .ip-field.is-local>.ip-field-value,
.ip-m4-mail-left [data-m4-state=local_unsaved] input,
.ip-m4-mail-left [data-m4-state=adopted_pending_save] input {
  color: var(--ip-m4-muted);
  font-weight: 400;
}
.ip-basic .ip-field>:is(.ip-chip,.ip-field-base,.ip-field-status) {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.ip-basic .ip-field .ip-field-note {
  height: auto;
  max-height: none;
}
.ip-basic .ip-field.is-conflict {
  height: auto;
  max-height: none;
}
/* 编辑就在**原位**：块保持原来的格子与高度，控件填满值区、内部滚动，
   所以进入/退出编辑整行不跳动（含“其他：”展开也是一列，不再横跨整行）。 */
.ip-basic .ip-field.is-m4-editing {
  min-height: 56px;
  height: auto;
  max-height: none;
  z-index: auto;
}
.ip-basic .ip-field.is-m4-editing>.ip-field-value .ip-field-editor,
.ip-basic .ip-field.is-m4-editing>.ip-field-value .ip-select {
  width: 100%;
}
.ip-basic .ip-field.is-m4-editing>.ip-field-value input.ip-field-input,
.ip-basic .ip-field.is-m4-editing>.ip-field-value textarea.ip-field-input {
  height: 28px;
  min-height: 28px;
  max-height: 28px;
  padding: 3px 6px;
  resize: none;
  overflow: auto;
}
.ip-basic .ip-field.is-m4-editing>.ip-field-value {
  position: static;
  left: auto;
  right: auto;
  top: auto;
  background: none;
  padding: 0;
  border-radius: 0;
  box-shadow: none;
  max-height: none;
  overflow: visible;
  z-index: auto;
}
.ip-basic .ip-field.is-m4-editing>.ip-field-value .ip-field-editor {
  width: 100%;
}
.ip-m4-multiple input[data-m4-multiple] {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  height: 32px;
}

.ip-m4-other-prefix {
  white-space: nowrap;
  align-self: center;
  font-size: 14px;
}
.ip-field-editor:has([data-field-other]:not([hidden])) {
  flex-wrap: wrap;
}
.ip-field-editor:has([data-field-other]:not([hidden]))>select {
  flex-basis: 100%;
}
.ip-m4-popover {
  position: fixed;
  z-index: 2147483000;
  box-sizing: border-box;
  padding: 12px 14px;
  border-radius: 4px;
  background: var(--card,#fff);
  color: var(--fg);
  box-shadow: 0 4px 20px #0003;
  max-height: 50vh;
  overflow: auto;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font: 14px/1.6 inherit;
}
.ip-m4-popover .btn {
  margin-top: 12px;
}
.ip-file-page [data-file-list] {
  display: grid;
  grid-template-columns: repeat(auto-fill,minmax(min(100%,320px),1fr));
  align-content: start;
  gap: 12px;
}
.ip-file-page .ip-file-card {
  margin: 0;
  min-width: 0;
  align-self: stretch;
  display: flex;
  flex-direction: column;
  min-height: 0;
  border: 1px solid #e3e3e3;
  border-radius: 4px;
  padding: 20px;
  background: var(--ip-m4-surface);
}
.ip-file-page .ip-file-card h2 {
  margin: 0;
  padding: 0;
  min-height: 24px;
  font-size: 15px;
  line-height: 24px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.ip-file-page .ip-file-card-case {
  display: grid;
  gap: 6px;
  min-height: 0;
  padding: 8px 10px;
  background: var(--ip-m4-fill);
  border-radius: 4px;
  overflow: hidden;
}
.ip-file-page .ip-file-card-case span:first-child {
  color: var(--fg3);
  font-size: 12px;
}
.ip-file-page .ip-file-card-case span:last-child {
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.ip-file-page .ip-file-card-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: auto;
  height: 20px;
  padding-top: 0;
}
.ip-file-page .ip-file-card-actions .btn {
  min-height: 20px;
  height: 20px;
  padding: 0 8px;
  font-size: 12px;
  line-height: 18px;
}
.ip-file-page .ip-file-card-actions [data-file-lifecycle] {
  margin-left: auto;
  color: var(--fg3);
}
/* 文件回收站弹层：与文件详情/上传同一个弹窗外壳排版（head + 可滚动正文），尺寸按列表收小。 */
.ip-file-recycle-dialog {position:fixed;inset:0;margin:auto;width:min(980px,calc(100vw - 32px));max-height:min(80vh,700px);padding:24px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--fg)}
.ip-file-recycle-dialog > .ip-dialog-head {padding:0 0 14px;border-bottom:1px solid var(--line);margin-bottom:14px}
.ip-file-recycle-dialog .ip-file-recycle-note {margin:0 0 8px;color:var(--fg3);font-size:12px}
.ip-file-recycle-dialog .ip-file-recycle-status {margin:0 0 6px;font-size:13px}
/* 表格与「总表回收站」（.ip-case-recycle-dialog）取同一套值：两张表看起来是一张表。 */
.ip-file-recycle-dialog table {width:100%;border-collapse:collapse;font-size:13px}
.ip-file-recycle-dialog :is(th,td) {text-align:left;vertical-align:top;padding:12px;border-bottom:1px solid var(--line);line-height:1.6;min-width:100px;max-width:260px;overflow-wrap:anywhere}
.ip-file-recycle-dialog td small {display:block;margin-top:2px;color:var(--fg3);font-size:12px}
.ip-file-recycle-dialog footer {display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}
.ip-file-recycle-dialog [data-summary] {margin-right:auto;color:var(--fg3);font-size:12px}

.ip-file-detail.ui-dialog[data-ui-dialog-layout="1"] {
  max-height: min(940px, calc(100dvh - 24px));
}
.ip-file-detail {
  position: fixed;
  inset: 0;
  margin: auto;
  max-height: calc(100vh - 48px);
  overflow: auto;
  border: 1px solid var(--border,#d8dedb);
  border-radius: 14px;
  background: var(--bg,#fff);
  color: var(--text,#202824);
  box-shadow: 0 18px 60px #0003;
  display: none;
  padding: 24px;
  width: min(1200px,calc(100vw - 32px));
  height: min(872px,calc(100dvh - 32px));
}
.ip-file-detail .ip-file-detail-head {
  padding: 0 0 16px;
  border: 0;
}
.ip-file-detail .ip-file-detail-head h2 {
  font-size: 24px;
  line-height: 36px;
  font-weight: 700;
}
.ip-file-detail .ip-file-detail-columns {
  grid-template-columns: minmax(360px,0.8fr) minmax(0,1.2fr);
  gap: 16px;
  align-items: stretch;
}
/* 左栏分两个色块：字段（正文）= 白卡 + 细边；按钮 = 灰块（与右栏预览同色）。 */
.ip-file-detail .ip-file-properties {
  border: 0;
  background: transparent;
  border-radius: 4px;
  padding: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
  overflow: hidden;
}
.ip-file-detail .ip-file-properties .ip-file-form {
  background: var(--ip-m4-surface);
  border: 0;
  border-radius: 4px;
  padding: 20px 16px;
}
/* 左栏两列：名称/分类、关联案件/标签 各占一行，保存占满整行。
   字段用公共字段组件 .ip-field（标签 12px / 值 13px / 输入 .ip-field-input）。
   主字段块与辅助字段块（历史版本）一起滚动，底部按钮块常驻（长案件名也不会把入口推走）。 */
.ip-file-detail .ip-file-properties .ip-file-scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ip-file-detail .ip-file-properties .ip-file-form {
  flex: none;
}
/* 辅助字段与版本块拉长到底（用户 2026-09-21）：字段块按内容、辅助块吃掉剩余高度，
   下缘贴住底部操作行；内容多于可用高度时照常滚动、块自身不压缩。
   选择器要比同文件里 `.ip-file-detail .ip-file-properties .ip-m4-aux {flex:0 0 auto}` 更具体（多带一个类）。 */
.ip-file-detail .ip-file-properties .ip-m4-aux.ip-file-aux {
  flex: 1 0 auto;
}
.ip-file-detail .ip-file-properties .ip-field {
  min-width: 0;
}
/* 关联案件：一行一案（案件名单行省略 + 解绑在右），多案自动成多行。 */
.ip-file-detail .ip-file-properties [data-file-cases] {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 6px 10px;
  align-items: center;
}
.ip-file-detail .ip-file-properties [data-file-cases] .ip-file-case-link {
  border: 0;
  background: none;
  padding: 0;
  height: auto;
  min-height: 0;
  min-width: 0;
  text-align: left;
  color: var(--green-ink, #2f6b4f);
  text-decoration: underline;
  text-underline-offset: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ip-file-detail .ip-file-properties [data-file-cases] .btn:not(.ip-file-case-link) {
  border: 0;
  background: none;
  padding: 0;
  height: auto;
  min-height: 0;
  font-size: 12px;
  color: var(--fg3);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.ip-file-detail .ip-file-properties .ip-field-input {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  font-size: 13px;
}
.ip-file-detail .ip-file-properties textarea.ip-field-input {
  min-height: 68px;
  resize: vertical;
}
/* 旧规则的 display:flex 会把网格拦在表单/业务容器上（比公共 .ui-form-contents 权重高），
   这里在页面层收口，让它们真的不占格（否则整行块跨列不生效）。 */
.ip-file-detail .ip-file-form > [data-file-rename-form],
.ip-file-detail .ip-file-form > [data-file-business],
.ip-file-detail .ip-file-form [data-file-rename-form],
.ip-file-detail .ip-file-form [data-file-business] {
  display: contents;
}
.ip-file-detail .ip-file-form [data-field-span="full"]:is(button, .btn) {
  justify-self: end;
}
/* 旧规则的 display:flex 会把栅格拦在 form/业务容器上：这里显式让它们不占格。 */
.ip-file-detail .ip-file-form > [data-file-rename-form],
.ip-file-detail .ip-file-form > [data-file-business] {
  display: contents;
}
.ip-file-detail .ip-file-form .ip-m4-repeat {
  margin: 0;
}
/* 右栏就是预览本身：纸面按宽度铺满整列（不再挂标题、提示、状态和操作行）。
   容器与纸面共用同一个圆角值（--ui-preview-radius），r 角一致。 */
.ip-file-detail .ip-file-preview {
  --ui-preview-radius: 4px;
  border: 0;
  background: var(--ip-m4-fill);
  border-radius: var(--ui-preview-radius);
  padding: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.ip-file-detail [data-file-visual] {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.ip-file-detail .ip-file-properties dl {
  margin: 0 0 16px;
}
.ip-file-detail .ip-file-properties dt {
  padding: 6px 14px 0;
  margin: 12px 0 0;
  background: var(--ip-m4-fill);
  font-size: 11px;
  line-height: 16px;
  border-radius: 4px 4px 0 0;
}
.ip-file-detail .ip-file-properties dd {
  padding: 2px 14px 8px;
  margin: 0;
  background: var(--ip-m4-fill);
  font-size: 14px;
  line-height: 24px;
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  overflow-wrap: anywhere;
  word-break: break-word;
  border-radius: 0 0 4px 4px;
}
/* 左栏底部：预览提示/状态 + 文件操作行。右栏只留预览，不再挂这些元素。 */
.ip-file-detail .ip-file-properties .ip-file-detail-footer {
  margin: 0;
  padding: 12px 16px 14px;
  border-top: 0;
  background: var(--ip-m4-fill);
  border-radius: 4px;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  flex: none;
}
/* 辅助字段与版本：常驻的独立灰块（主字段白卡之外），不再折叠；
   一行一版（版本号 + 文件名单行省略 + 状态在左，操作放不下就换行靠右）。 */
.ip-file-detail .ip-file-properties .ip-m4-aux {
  flex: none;
  background: var(--ip-m4-surface);
  border: 0;
  border-radius: 4px;
  padding: 20px 16px;
}
.ip-file-detail .ip-file-properties .ip-m4-aux > h3 {
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 20px;
}
.ip-file-detail .ip-file-properties .ip-m4-aux > summary {
  padding: 12px 0;
  align-items: center;
}
/* 审核带出的只读辅助字段：与主字段同一套字段块，两列排布。 */
.ip-file-aux-fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px 16px;
  margin-bottom: 12px;
}
.ip-file-detail .ip-file-aux-empty {
  margin: 0 0 12px;
  color: var(--fg3);
  font-size: 12px;
}
/* 关联案件用公共客户组件：长案件名在胶囊里省略，不把字段撑开。 */
.ip-file-detail .ip-customer-chip > span {
  display: inline-block;
  max-width: 260px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: bottom;
}
.ip-file-detail [data-file-case-picker] .ip-customer-panel,
.ip-file-detail [data-file-classification] .ip-customer-panel {
  border:0;
  border-radius:6px;
}
/* 字段里的搜索控件不做按钮外观：输入与「搜索」同一份色块、无边框（用户 2026-09-21）。
   选择器要压过同文件里给字段列按钮加边框的一条规则（.ip-file-properties .btn）。 */
.ip-file-detail .ip-file-properties .ip-customer-search input,
.ip-file-detail .ip-file-properties .ip-customer-search .btn {
  box-sizing:border-box;
  height:32px;
  min-height:32px;
  padding:0 12px;
  border:0;
  border-radius:4px;
  background:var(--ip-m4-fill);
}
.ip-file-detail .ip-file-properties .ip-m4-aux > summary b {
  font-size: 13px;
}
.ip-file-detail .ip-file-versions {
  display: flex;
  flex-direction: column;
}
.ip-file-detail .ip-file-version-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  padding: 8px 0;
  border-bottom: 1px solid var(--line);
}
.ip-file-detail .ip-file-version-row:last-child {
  border-bottom: 0;
}
.ip-file-detail .ip-file-version-line {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 210px;
  flex: 1 1 auto;
}
.ip-file-detail .ip-file-version-line b {
  flex: none;
  font-size: 13px;
  font-weight: 600;
}
.ip-file-detail .ip-file-version-name {
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  color: var(--fg2);
}
.ip-file-detail .ip-file-version-state {
  flex: none;
  color: var(--fg3);
  font-size: 12px;
  font-style: normal;
}
.ip-file-detail .ip-file-version-actions {
  flex: 0 0 auto;
  margin-left: auto;
  display: flex;
  gap: 6px;
}
/* 旧规则 .ip-file-properties .btn 同权重且更靠后，这里加深一层。 */
.ip-file-detail .ip-file-properties .ip-file-version-actions .btn {
  min-height: 28px;
  height: auto;
  padding: 2px 10px;
  font-size: 12px;
}
.ip-file-detail .ip-file-aux-note {
  margin: 10px 0 0;
  color: var(--fg3);
  font-size: 12px;
  line-height: 1.7;
}

.ip-file-detail .ip-file-detail-footer [data-file-preview-meta] {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  min-width: 0;
}
.ip-file-detail .ip-file-detail-footer .ui-preview-note {
  padding: 0;
  border: 0;
  text-align: right;
}
.ip-file-detail .ip-file-detail-footer [role="status"] {
  margin: 0;
  text-align: right;
}
.ip-file-detail .ip-file-detail-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 0;
}
.fr-review-dialog {
  position: fixed;
  inset: 0;
  margin: auto;
  max-width: none;
  padding: 0;
  border: 1px solid #dde5e9;
  border-radius: 16px;
  background: #fff;
  color: #192331;
  box-shadow: 0 20px 70px #153d382b;
  overflow: hidden;
  width: min(1200px,calc(100vw - 32px));
  height: min(872px,calc(100dvh - 32px));
  max-height: calc(100dvh - 32px);
}
.fr-review-dialog .fr-review {
  height: 100%;
  max-height: 100%;
  padding: 24px;
  box-sizing: border-box;
}
.fr-review-dialog .fr-header {
  padding: 0 0 16px;
  align-items: center;
}
.fr-review-dialog .fr-header h2 {
  font-size: 24px;
  line-height: 36px;
  font-weight: 700;
}
.fr-review-dialog .fr-body {
  padding: 0;
  display: grid;
  grid-template-columns: minmax(280px,328px) minmax(0,1fr);
  gap: 16px;
  flex: 1;
  overflow: hidden;
}
.fr-review-dialog .ip-m4-review-fields {
  overflow: auto;
  min-height: 0;
}
.fr-review-dialog .fr-zone {
  background: var(--ip-m4-surface);
  border: 0;
  border-radius: 4px;
  margin: 0 0 16px;
  overflow: visible;
}
.fr-review-dialog .fr-zone>h3 {
  background: none;
  padding: 20px 16px 12px;
  font-size: 14px;
  font-weight: 700;
  line-height: 22px;
  flex-wrap: wrap;
}
.fr-review-dialog .fr-grid {
  grid-template-columns: minmax(0,1fr);
  padding: 0 16px 20px;
  gap: 16px;
}
.fr-review-dialog .fr-help {
  border: 0;
  font-size: 11px;
}
.fr-review-dialog .fr-footer {
  padding: 16px 0 0;
  background: none;
  border: 0;
}
.fr-review-dialog .fr-footer [data-confirm] {
  background: var(--ip-m4-ink);
  border-color: var(--ip-m4-ink);
}
.fr-review-dialog .ip-m4-review-content {
  min-height: 0;
  overflow: auto;
  background: var(--ip-m4-fill);
  padding: 20px;
  border-radius: 4px;
  display: flex;
  flex-direction: column;
}
/* 审核中心里放的也是同一张 A4 纸：内容区改成不滚动的纵向栅格，注脚留在纸面外。 */
.fr-review-dialog .ip-m4-review-content:has(> .ui-preview-stage) {
  gap: 8px;
  overflow: hidden;
}
.fr-review-dialog .ip-m4-review-content h3 {
  font-size: 14px;
  line-height: 24px;
  margin: 0 0 16px;
}
.fr-review-dialog .ip-m4-review-content iframe {
  border: 0;
  width: 100%;
  flex: 1;
  min-height: 320px;
}
.fr-review-dialog .ip-m4-review-content pre {
  margin: 0;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  background: var(--ip-m4-surface);
  padding: 20px;
  flex: 1;
  font: 14px/1.8 inherit;
}
.fr-review-dialog .fr-field.is-m4-editing {
  height: auto;
  max-height: none;
  min-height: 56px;
}
.fr-review-dialog .fr-field.is-m4-editing .cr-file-candidate {
  display: none;
}
.fr-review-dialog .fr-field.is-m4-editing input {
  width: 100%;
  box-sizing: border-box;
}
.fr-review-dialog .fr-field.is-m4-editing textarea {
  width: 100%;
  box-sizing: border-box;
}
.fr-review-dialog .fr-tool {
  border: 0;
  border-radius: 4px;
  background: var(--ip-m4-surface);
}
.fr-review-dialog .fr-close {
  border: 0;
  border-radius: 4px;
  background: var(--ip-m4-surface);
}
.fr-review-dialog .fr-radios input {
  accent-color: var(--ip-m4-ink);
}
.fr-file-card {
  display: inline-flex;
  vertical-align: top;
  flex-direction: column;
  text-align: left;
  width: 100%;
  min-width: 0;
  padding: 16px;
  margin: 0;
  background: white;
  color: #273140;
  cursor: pointer;
  gap: 8px;
  border: 0;
  border-radius: 4px;
  box-shadow: none;
}
.ip-mail-detail {
  width: min(1200px,calc(100vw - 32px));
  height: min(872px,calc(100dvh - 32px));
  padding: 24px;
}
.ip-mail-detail .ip-mail-dialog-head {
  padding: 0 0 16px;
  border: 0;
  background: none;
  flex: none;
}
.ip-mail-detail .ip-mail-dialog-head h2 {
  font-size: 24px;
  line-height: 36px;
  font-weight: 700;
}
.ip-mail-detail .ip-mail-pane-head {
  background: none;
  border: 0;
  padding: 0 0 12px;
  flex-wrap: wrap;
}
.ip-mail-detail .ip-mail-pane-title {
  display: none;
}
.ip-mail-detail .ip-mail-pane-body {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 0;
  min-height: 0;
}
.ip-mail-detail .ip-mail-editor {
  padding: 0;
  background: none;
  width: 100%;
  min-width: 0;
}
/* 弹窗字段区与邮件页同一套（用户 2026-09-21）：字段块自己排两列（2*n），不再有左栏/正文右栏与拖宽条。 */
.ip-mail-detail .ip-mail-fields { display: block; min-height: 0; }
.ip-m4-mail-left {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;

  overflow: auto;
  min-height: 0;
}
.ip-m4-card {
  background: var(--ip-m4-surface);
  border-radius: 4px;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  min-width: 0;
}
.ip-m4-card h3 {
  font-size: 14px;
  line-height: 22px;
  margin: 0;
  font-weight: 700;
}
.ip-m4-mail-right {
  display: flex;
  flex-direction: column;
  gap: 16px;
  min-width: 0;

  overflow: hidden;
  min-height: 0;
}
.ip-mail-detail .ip-m4-mail-right .ip-mail-field-body {
  display: flex;
  flex-direction: column;
  padding: 16px;
  background: var(--ip-m4-surface);
  border-radius: 4px;
  flex: 1;

  min-height: 180px;
  margin: 0;

  overflow: hidden;
}
.ip-mail-detail .ip-mail-field-body>span:first-child {
  font-size: 14px;
  font-weight: 700;
  margin-bottom: 12px;
  line-height: 22px;
}
.ip-mail-detail .ip-mail-rich {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
}
.ip-mail-detail .ip-email-editor-body {
  flex: 1;
  min-height: 280px;
  background: var(--ip-m4-fill);
  border: 0;
  border-radius: 4px;
  padding: 16px;
  resize: none;
}
.ip-mail-detail .ip-mail-field-body>textarea {
  flex: 1;

  background: var(--ip-m4-fill);
  border: 0;
  border-radius: 4px;
  padding: 16px;
  resize: none;
}
.ip-mail-detail .ip-m4-mail-right [data-mail-attachments] {
  padding: 16px;
  background: var(--ip-m4-surface);
  border-radius: 4px;

  max-height: 260px;
  overflow: auto;
  margin: 0;

  flex: 0 0 auto;
}
.ip-m4-mail-resizer {
  cursor: col-resize;
  touch-action: none;
  position: relative;
  min-width: 8px;
}
.ip-m4-mail-resizer::after {
  content: "";
  width: 2px;
  height: 32px;
  position: absolute;
  top: 50%;
  left: 3px;
  background: var(--ip-m4-muted);
  border-radius: 2px;
}
.ip-m4-mail-resizer:focus-visible {
  outline: 2px solid var(--ip-m4-code);
}
.ip-m4-mail-left .ip-mail-field input {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 24px;
  max-height: 24px;
  font-size: 14px;
  border: 0;
  background: none;
  padding: 0;
  height: 24px;
  min-height: 0;
  font: 700 14px/24px inherit;
}
.ip-m4-mail-left .ip-mail-field-address {
  height: auto;
  min-height: 82px;
  max-height: none;
  padding: 10px 14px;
  gap: 6px;
}
.ip-m4-mail-left .ip-address-chips {
  position: static;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  min-width: 0;
  max-width: 100%;
  width: 100%;
  min-height: 30px;
  gap: 6px;
  overflow: visible;
}
.ip-m4-mail-left .ip-address-chips:focus-within {
  outline: 2px solid color-mix(in srgb, var(--ip-m4-code) 34%, transparent);
  outline-offset: 2px;
}
.ip-m4-mail-left .ip-address-chip {
  min-width: 0;
  max-width: 100%;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 2px 6px;
  gap: 4px;
}
.ip-m4-mail-left .ip-address-chip .ip-address-text {
  min-width: 0;
}
.ip-m4-mail-left .ip-address-chip button.ip-address-remove {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  min-height: 22px;
  padding: 0 2px;
  line-height: 20px;
}
.ip-m4-mail-left .ip-address-chips>input {
  flex: 1 1 120px;
  width: 0;
  min-width: 0;
  max-width: 100%;
  height: 28px;
  max-height: none;
  box-sizing: border-box;
  padding: 2px 4px;
  font-weight: 400;
}
.ip-m4-mail-left .ip-address-error[hidden] {
  display: none;
}
dialog.ip-mail-material-picker .ip-mail-attach-list {
  display: grid;
  grid-template-columns: repeat(auto-fit,minmax(280px,1fr));
  gap: 10px;
  padding: 12px 0;
}
dialog.ip-mail-material-picker .ip-mail-attach-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  min-width: 0;
  max-width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--bg);
}
dialog.ip-mail-material-picker .ip-mail-attach-row[hidden] {
  display: none;
}
dialog.ip-mail-material-picker .ip-mail-attach-item {
  display: grid;
  grid-template-columns: 16px minmax(0,1fr);
  column-gap: 10px;
  row-gap: 3px;
  align-items: center;
  flex: 1 1 220px;
  min-width: 0;
  padding: 0;
  border: 0;
}
dialog.ip-mail-material-picker .ip-mail-attach-item small {
  grid-column: 2;
  min-width: 0;
  color: var(--ip-m4-muted);
  font-size: 11px;
  white-space: normal;
}
.ip-mail-detail .ip-mail-attachment-add {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.ip-mail-detail .ip-mail-material-count {
  font-size: 11px;
  color: var(--ip-m4-muted);
}
.ip-m4-attachment-search {
  box-sizing: border-box;
  width: 100%;
  height: 36px;
  background: var(--ip-m4-fill);
  border: 0;
  border-radius: 6px;
  padding: 8px 12px;
  margin: 8px 0;
}
.ip-mail-detail .ip-mail-send-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.ip-mail-detail .ip-mail-send-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  max-width: 100%;
  border: 0;
  border-radius: 24px;
  background: var(--ip-m4-fill);
  padding: 6px 12px;
}
.ip-mail-detail .ip-mail-send-chip .ip-mail-chip-file {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 100%;
  color: var(--ip-m4-ink);
  text-decoration: none;
}
.ip-mail-detail .ip-mail-send-chip small {
  flex: none;
  color: var(--ip-m4-muted);
  font-size: 11px;
}
:is(.ip-basic,.ip-cases,.fr-review,.ip-mail-editor) .source-agent {
  --review-source: var(--ip-m4-agent,#16804a);
}
:is(.ip-basic,.ip-cases,.fr-review,.ip-mail-editor) .source-rule {
  --review-source: var(--ip-m4-code,#2864ce);
}
@media (max-width:900px) {
.ip-basic .ip-field-group-body {
  grid-template-columns: repeat(2,minmax(0,1fr));
}
}
@media (max-width:900px) {
.ip-mail-detail .ip-mail-fields {
  grid-template-columns: 198px 8px minmax(0,1fr);
}
}
@media (max-width:900px) {
.fr-review-dialog .fr-body {
  grid-template-columns: minmax(240px,1fr) minmax(0,1.3fr);
}
}
@media (max-width:900px) {
.ip-file-detail .ip-file-detail-columns {
  grid-template-columns: minmax(240px,1fr) minmax(0,1.3fr);
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-head {
  padding: 16px;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-tabs {
  margin: 0 16px 12px;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-body {
  padding: 0 16px 16px;
}
}
@media (max-width:650px) {
.ip-basic .ip-field-group-body {
  grid-template-columns: 1fr;
}
}
@media (max-width:650px) {
.fr-review-dialog .fr-review {
  padding: 16px;
}
}
@media (max-width:650px) {
.ip-file-detail {
  padding: 16px;
}
}
@media (max-width:650px) {
.ip-mail-detail {
  padding: 16px;
}
}
@media (max-width:650px) {
.fr-review-dialog .fr-body {
  display: flex;
  flex-direction: column;
  overflow: auto;
}
}
@media (max-width:650px) {
.ip-file-detail .ip-file-detail-columns {
  display: flex;
  flex-direction: column;
  overflow: auto;
}
}
@media (max-width:650px) {
.ip-mail-detail .ip-mail-fields {
  display: flex;
  flex-direction: column;
  overflow: auto;
}
}
@media (max-width:650px) {
.fr-review-dialog .ip-m4-review-fields {
  overflow: visible;
}
}
@media (max-width:650px) {
.ip-m4-mail-resizer {
  display: none;
}
}
@media (max-width:650px) {
.ip-file-detail .ip-file-properties {
  overflow: visible;
}
}
@media (max-width:650px) {
.ip-file-detail .ip-file-preview {
  overflow: visible;
}
}
@media (prefers-reduced-motion:reduce) {
:is(.ip-cases,.ip-detail,.fr-review-dialog,.ip-mail-pane) * {
  animation: none !important;
  transition: none !important;
}
}
dialog.ip-case-dialog {
  position: fixed;
  inset: 0;
  margin: auto;
  padding: 0;
  max-width: none;
  color: var(--fg);
  overflow: hidden;
  box-shadow: 0 24px 80px rgba(0,0,0,.18);
  width: min(984px,calc(100vw - 32px));
  height: min(840px,calc(100dvh - 32px));
  max-height: calc(100dvh - 32px);
  box-sizing: border-box;
  border: 0;
  border-radius: 4px;
  background: #f4f4f4;
}
dialog.ip-file-detail {
  box-sizing: border-box;
  border: 0;
  border-radius: 4px;
  background: #f4f4f4;
}
dialog.fr-review-dialog {
  box-sizing: border-box;
  border: 0;
  border-radius: 4px;
  background: #f4f4f4;
}
dialog.ip-case-dialog .ip-detail {
  background: var(--ip-m4-fill);
  box-sizing: border-box;
  max-height: none;
  height: 100%;
  min-height: 0;
  border: 0;
  border-radius: 0;
  padding: 0;
  gap: 0;
  overflow: hidden;
}
dialog.ip-case-dialog .ip-detail-head {
  justify-content: space-between;
  padding: 24px 32px 16px;
  border: 0;
  flex: none;
  align-items: center;
  display: flex;
  flex-wrap: nowrap;
  gap: 12px;
}
dialog.ip-case-dialog .ip-detail-title {
  min-width: 0;
  overflow-wrap: anywhere;
  display: flex;
  flex: 1 1 0;
  align-items: baseline;
  gap: 12px;
  flex-wrap: nowrap;
}
dialog.ip-case-dialog .ip-detail-title h2 {
  /* 与文件库详情/审核弹窗同一档（24px/700；原来是旧的 26px 平台默认档，用户 2026-09-21 收口）。 */
  font-size: 24px;
  font-weight: 700;
  line-height: 1.5;
  margin: 0;
  flex: 0 1 auto;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
dialog.ip-case-dialog .ip-detail-title p {
  line-height: 1.6;
  margin-top: 4px;
  font-size: 14px;
  color: var(--ip-m4-muted);
  flex: none;
  margin: 0;
  white-space: nowrap;
}
dialog.ip-case-dialog .ip-detail-actions {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
  width: auto;
  gap: 8px;
  flex-wrap: wrap;
  margin-left: auto;
}
dialog.ip-case-dialog .ip-detail-delete-note {
  border: 0;
  margin: 0;
  padding: 0 32px 12px;
}
.ip-basic .ip-field:has([data-maintain-contact],[data-maintain-responsible],.ip-field-note) {
  height: auto;
  max-height: none;
  min-height: 56px;
}
.ip-basic .ip-field>button:not(.ip-m4-select) {
  flex: none;
  max-width: 100%;
}
.ip-basic .ip-field-grid {
  display: flex;
  flex-direction: column;
  gap: 16px;

  align-items: stretch;

}
dialog.ip-mail-detail {
  inset: 0;
  margin: auto;
  max-width: none;
  max-height: none;
  color: var(--fg);
  overflow: hidden;
  box-sizing: border-box;
  border: 0;
  border-radius: 4px;
  background: #f4f4f4;
  width: min(1200px,calc(100vw - 32px));
  height: min(872px,calc(100dvh - 32px));
  padding: 24px;
}
dialog.ip-mail-detail .ip-mail-pane {
  padding: 0;

  height: 100%;
  box-sizing: border-box;
  min-height: 0;
  gap: 12px;
}
dialog.ip-mail-detail .ip-mail-pane-head {
  gap: 8px;
}
dialog.ip-mail-detail .ip-mail-dialog-head h2 {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  min-width: 0;
}
.ip-m4-mail-left .ip-mail-template {
  min-width: 0;
}
.ip-m4-mail-left .ip-mail-template-pick {
  display: flex;
  flex-wrap: wrap;
}
.ip-m4-mail-left .ip-mail-template-pick>.ip-mail-field {
  height: auto;
  max-height: none;
  min-width: 0;
  flex-basis: 100%;
}
.ip-m4-mail-left .ip-mail-field:has([data-mail-association-open]) {
  height: auto;
  max-height: none;
}
.ip-mail-detail .ip-mail-fields .ip-address-chips {
  padding: 0;
  min-height: 24px;
}
.ip-mail-detail .ip-mail-fields .ip-address-list {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ip-mail-detail .ip-mail-fields .ip-address-chips input {
  padding: 0;
}
.ip-mail-detail .ip-mail-chip-file [aria-hidden=true] {
  display: none;
}
@media (max-width:650px) {
dialog.ip-mail-detail {
  padding: 16px;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-title {
  flex-wrap: nowrap;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-title h2 {
  flex-basis: auto;
  font-size: 20px;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-actions {
  margin: 0;
}
}
@media (max-width:650px) {
dialog.ip-case-dialog .ip-detail-delete-note {
  padding-inline: 16px;
}
}
.ip-m4-select {
  position: absolute;
  right: 12px;
  bottom: 11.5px;
  border: 0;
  background: none;
  color: var(--ip-m4-muted);
  font-size: 18px;
  line-height: 20px;
  padding: 0 4px;
  cursor: pointer;
}
.ip-basic .ip-field:has(.ip-m4-select) .ip-field-value {
  padding-right: 24px;
}
.ip-basic .ip-field.is-m4-editing>.ip-m4-select {
  display: none;
}

dialog.ip-mail-detail .ip-mail-pane-body {
  flex: 1;
  min-height: 0;
  overflow: hidden;
  gap: 12px;
}

dialog.ip-mail-detail .ip-mail-editor {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

dialog.ip-mail-detail .ip-mail-fields {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

.ip-mail-detail .ip-mail-field-body > textarea {
  min-height: 100px;
}

.ip-mail-detail .ip-mail-attach-send {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
  border: 0;
  margin: 0;
  padding: 0;
}

.ip-mail-detail .ip-mail-attach-send > b {
  width: 100%;
  font-size: 14px;
}

.fr-review .cr-file-candidate.is-adopted {
  color: var(--ip-m4-muted);
  font-weight: 400;
  animation: none;
}

.fr-review [hidden] {
  display: none !important;
}

.ip-basic [hidden] {
  display: none !important;
}

.ip-cases .ip-cell-link {
  color: var(--ip-m4-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: block;
}

@media(max-width:650px),(max-height:560px) {
 dialog.ip-mail-detail .ip-mail-pane-body,dialog.ip-mail-detail .ip-mail-editor,dialog.ip-mail-detail .ip-mail-fields {overflow:auto;min-height:0}
 .ip-m4-mail-left,.ip-m4-mail-right {overflow:visible}
 dialog.ip-mail-detail .ip-mail-fields {display:flex;flex-direction:column}
 .ip-m4-mail-resizer {display:none}
}

/* Radius contract: rectangular UI 4px; selected attachment/case pills and switches stay rounded. */
:is(dialog.ip-case-dialog,dialog.ip-mail-detail,dialog.ip-file-detail,dialog.fr-review-dialog) :is(input:not([type=checkbox]):not([type=radio]),select,textarea,fieldset,.btn,.ui-edit-entry,.ip-mail-cases,.ip-mail-mode-note,.ip-mail-denied) {
  border-radius: 4px;
}
.ip-cases :is(.ip-cases-tablewrap,.ip-filter-row,.ip-cases-columns,.ip-cases-filterbar,.btn) {
  border-radius: 4px;
}

@keyframes ip-m4-breathe {0%,100% {opacity:1} 50% {opacity:.6}}
.fr-review .source-agent .cr-file-candidate {color:var(--ip-m4-agent)}
.ip-file-properties [data-file-rename-form] {display:flex;flex-direction:column;gap:12px}
.ip-file-properties [data-file-rename-form]>label {display:flex;flex-direction:column;gap:8px;font-size:14px}
.ip-file-properties [data-file-rename-form]>label>:is(input,textarea) {box-sizing:border-box;width:100%;min-width:0;min-height:48px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:inherit}
.ip-file-properties .ip-file-detail-actions {gap:8px}
@media(prefers-reduced-motion:reduce) {.fr-review .cr-file-candidate {animation:none}}


/* M6 inspection detail only; frozen M1–M3 selectors are unchanged. */
.ip-inspection-detail .ip-file-properties {overflow-wrap:anywhere}
.ip-inspection-detail .ip-file-properties dd {white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}
.ip-inspection-detail .ip-file-preview {display:flex;flex-direction:column;gap:16px;background:none;padding:0}
.ip-inspection-detail .ip-file-preview>section {flex:none;background:var(--card,#fff);border-radius:4px;padding:20px;overflow-wrap:anywhere}
.ip-inspection-detail .ip-file-preview dl {margin:0}
.ip-inspection-detail .ip-file-preview dt {font-size:12px;color:var(--fg3);margin-top:12px}
.ip-inspection-detail .ip-file-preview dd {margin:4px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}

/* File list structure consumes the existing permission-filtered file snapshot. */
.ip-file-page {background:var(--ip-m4-fill)}
.ip-file-page > p {margin:0 24px 12px}
/* Review relation selector shares the capsule picker and existing Actions. */
.fr-review-dialog .fr-radios {display:inline-flex;gap:4px}
.fr-review-dialog .fr-radios label {position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:36px;padding:4px 12px;border-radius:4px;background:#f4f4f4;color:#555;cursor:pointer}
.fr-review-dialog .fr-radios label:has(input:checked) {background:#161616;color:#fff;font-weight:700}
.fr-review-dialog .fr-radios input {position:absolute;opacity:0;width:1px;height:1px;margin:0}
.fr-review-dialog .fr-radios label:has(input:focus-visible) {outline:2px solid #555;outline-offset:2px}
.fr-review-dialog .fr-relations {display:flex;flex-direction:column;gap:12px;min-width:0;padding:0 16px 16px}
.fr-review-dialog .fr-relations[hidden],.fr-review-dialog .cr-case-select[hidden] {display:none}
.ip-case-picker-search {min-width:0;margin:0 0 12px}
.ip-case-picker-search-line {display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ip-case-picker-search-line input {flex:1 1 220px;min-width:0;height:40px;box-sizing:border-box;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);font:inherit}
.ip-case-picker-search-line select {flex:0 1 148px;min-width:110px;height:40px;box-sizing:border-box;padding:8px;border:1px solid var(--line);border-radius:8px;background:var(--surface);font:inherit}
.ip-case-picker-search-line button {flex:none;min-height:40px}
.ip-case-picker-search [role=status] {margin:8px 0 0;font-size:12px;color:var(--fg3);overflow-wrap:anywhere}
.ip-case-picker-search [role=status]:empty {display:none}
.ip-case-picker-none {margin-top:10px}
.ip-case-capsules {display:flex;flex-wrap:wrap;gap:8px;max-height:220px;overflow:auto;align-content:flex-start}
.ip-case-capsule {font:inherit;text-align:left;border:0;border-radius:999px;padding:8px 14px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#f4f4f4;color:#161616;cursor:pointer}
.ip-case-capsule:hover {background:#e7e7e7}
.ip-case-capsule[aria-pressed=true] {background:#161616;color:#fff;font-weight:600}
.fr-review-dialog .fr-recalculate {align-self:flex-start;margin:0}

.fr-review-dialog [data-review-zone=relations]>h3 {padding:16px;gap:12px}
.fr-review-dialog .fr-relations .ip-multi-case-picker>p {margin:8px 0 0;font-size:12px;color:var(--fg3)}
.fr-review-dialog .fr-relations .cr-case-select {display:flex;flex-direction:column;gap:6px;margin:0}
.fr-review-dialog .fr-relations .cr-case-select[hidden] {display:none}

.ip-master-page .ip-cases-head {align-items:center;gap:12px 24px}
.ip-master-page .ip-cases-head h1 {margin:0;line-height:1.4}
.ip-master-page .ip-cases-head p {margin:6px 0 0}
.ip-master-page .ip-master-views button {padding:4px 0;box-shadow:none}
.ip-master-page .ip-filter-form [data-active-filters]:empty {display:none}
.ip-master-page .ip-cases-actions {display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ip-master-page .ip-table-options>summary {border-radius:4px}

.ip-cases .ip-cases-foot:empty {display:none}
.ip-m4-multiple [data-repeatable-area] {max-height:320px;overflow:auto;min-width:0}
.ip-m4-multiple [data-list-row] {min-width:0;margin:0 0 12px;padding:12px;border:0;border-radius:4px;background:#f4f4f4}
.ip-m4-multiple [data-list-row] legend {padding:0;font-size:12px;color:var(--fg3)}
.ip-m4-multiple [data-list-row]>label {display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.ip-m4-multiple [data-list-row] input {min-width:0;width:100%;box-sizing:border-box;border-radius:4px}
.ip-cases td:has([data-repeatable-area]) {position:relative;overflow:visible}
.ip-cases td .ip-m4-multiple:has([data-repeatable-area]) {position:absolute;left:0;top:0;width:max(100%,280px);max-width:420px;padding:12px;background:#fff;border-radius:4px;box-shadow:0 4px 20px #0002;z-index:22}

/* User acceptance: same-line case identity, compact review cards and mode badge. */
.ip-chip[data-mail-mode] {border-radius:4px}
.ip-case-review {background:var(--ip-m4-fill,#f4f4f4);padding:24px;gap:16px}
.ip-case-review>.fr-page-header {flex:none}
.ip-case-review>.fr-page-toolbar {flex:none;margin:0;padding:12px 16px;background:#fff;border-radius:4px;gap:16px}
.ip-case-review .fr-state-tabs {background:none;padding:0;border-radius:4px;gap:16px}
.ip-case-review .fr-state-tabs button {border-radius:4px;padding:8px 0;color:#777}
.ip-case-review .fr-state-tabs button.is-active {background:none;color:#161616;font-weight:700;box-shadow:none}
.ip-case-review .fr-search {flex:1;width:auto;min-width:0;margin:0}
.ip-case-review .fr-search input {background:#f4f4f4;border:0;border-radius:4px;height:40px}
.ip-case-review>.fr-page-toolbar .fr-tool {border:0;border-radius:4px;background:#f4f4f4;color:#161616}
.ip-case-review>[data-cards] {display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:16px;align-content:start;align-items:stretch}
.ip-case-review .fr-file-heading {min-width:0}
.ip-case-review .fr-file-heading strong {white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.ip-case-review .fr-file-icon {flex:none;border-radius:4px;background:#f4f4f4;color:#555}
.ip-case-review .fr-file-card>p {max-width:100%;overflow-wrap:anywhere;color:#777}
.ip-case-review .fr-card-case {width:100%;background:#f4f4f4;padding:8px 10px;border-radius:4px;color:#777}
.ip-case-review .fr-card-action {align-self:flex-end;margin-top:auto;color:#161616;font-weight:600;padding:6px 0 0}
.ip-case-review>.cr-operation-result:has([data-result]:empty):has([data-mail-preparation]:empty) {display:none}

/* Manual case creation uses the same grouped field surface as case details. */
.ip-manual-case-form {padding:0;gap:16px;min-width:0}
.ip-manual-case-form>p {margin:0;font-size:13px;color:#777}
.ip-manual-case-form>fieldset {min-width:0;margin:0;padding:20px;border:0;border-radius:4px;background:#fff}
.ip-manual-case-form>fieldset>legend {float:left;width:100%;padding:0;margin:0 0 16px;font-size:16px;line-height:24px;font-weight:700;color:#161616}
.ip-manual-case-form>fieldset>.ip-manual-case-fields {clear:both;gap:12px;align-items:start}
.ip-manual-case-fields>[data-create-field] {position:relative;min-width:0;padding:8px 12px 6px;background:#f4f4f4;border-radius:4px}
.ip-manual-case-fields>[data-create-field]>label {font-size:12px;line-height:18px;color:#777;margin:0 0 4px}
.ip-manual-case-fields>[data-create-field]>small {display:block;font-size:11px;line-height:16px;color:#777;margin-top:4px}
.ip-manual-case-fields [data-create-field] :is(input:not([type=hidden]),select,textarea) {min-width:0;max-width:100%;height:28px;min-height:28px;padding:0;border:0;border-radius:4px;background:transparent;box-shadow:none;font-size:14px;line-height:24px;color:#161616}
.ip-manual-case-fields [data-create-field] textarea {resize:none;white-space:nowrap;overflow:auto}
.ip-manual-case-fields .ip-field-editor {align-items:center;gap:8px;max-width:100%;min-width:0}
.ip-manual-case-fields .ip-field-editor>.ip-field-input {width:0;flex:1 1 0;min-width:0}
.ip-manual-case-fields [data-create-field] :is(input,select,textarea):focus-visible {outline:1px solid #777;outline-offset:2px}
.ip-manual-case-fields>label:not(.ip-joint-choice) {padding:8px 12px;background:#f4f4f4;border-radius:4px;color:#777}
.ip-manual-case-fields>label :is(select,textarea) {border:0;border-radius:4px;background:transparent;color:#161616;padding:0}
.ip-manual-case-fields>label.wide textarea {min-height:64px;resize:vertical}
.ip-manual-case-form footer {margin:0;gap:8px}

/* Review fields: reserve actual label, value and focus-ring space. */
/* 分栏与文件详情弹窗同一档：左 422 / 右 634、间距 16（字段块因此也是 390 宽）。 */
.fr-review-dialog .fr-body {grid-template-columns:minmax(360px,0.8fr) minmax(0,1.2fr);gap:16px}
.fr-review-dialog .ip-m4-review-fields {padding:2px 6px 12px 2px;scroll-padding-block:16px}
/* 字段块与文件库详情弹窗的 .ip-field 同一档（用户 2026-09-21 第五遍：标题高度与字段都要跟文件库一致）：
   标签 11px、内边距 6px 14px 5px、高度跟内容——原来固定 68px，会把「关联案件」这种长块截断。 */
.fr-review-dialog .fr-field {height:auto;min-height:0;max-height:none;padding:6px 14px 5px;gap:2px;overflow:visible}
.fr-review-dialog .fr-field>label {height:auto;line-height:16px;font-size:11px}
.fr-review-dialog .fr-field .fr-after {min-width:0;margin:0;line-height:26px}
.fr-review-dialog .fr-field .cr-file-candidate {box-sizing:border-box;height:26px;max-height:26px;min-height:0;line-height:26px;padding:0;text-align:left;width:100%;border:0;background:none}
.fr-review-dialog .fr-field.is-m4-editing {height:auto;min-height:72px;max-height:none}
.fr-review-dialog .fr-field .fr-after :is(input:not([type=checkbox]),select,textarea) {box-sizing:border-box;width:100%;min-width:0;height:30px;min-height:30px;max-height:none;margin:0;padding:2px 8px;line-height:24px;font-size:14px;border:0;border-radius:4px;background:#fff;vertical-align:top}
.fr-review-dialog .fr-field .fr-after select {padding-right:28px}
.fr-review-dialog .fr-field .fr-after :is(input,select,textarea):focus-visible {outline:2px solid #94b1f0;outline-offset:1px}
.fr-review-dialog .fr-value {display:flex;flex-direction:column;align-items:stretch;gap:4px;background:var(--ip-m4-fill,#f4f4f4);border-radius:4px;padding:10px 14px;min-height:68px}
.fr-review-dialog .fr-value>span {font-size:12px;line-height:18px}
.fr-review-dialog .fr-value :is(input,select) {height:30px;min-height:30px;line-height:24px;padding:2px 8px;border:0;border-radius:4px;background:#fff}
/* 案件更新＝公共辅助面板（与文件库「辅助字段与版本」同一份：白面板、20/16 内衬、h3 抬头）。 */
.fr-review-dialog .fr-zone>.ip-m4-aux {padding:20px 16px}
.fr-review-dialog .fr-zone>.ip-m4-aux>h3 {margin:0;padding:0 0 12px;font-size:14px;line-height:24px;display:flex;flex-wrap:wrap;gap:4px 10px}
.fr-review-dialog .fr-zone>.ip-m4-aux>h3 small {font-size:12px;font-weight:400;color:#777}
.fr-review-dialog .fr-zone>.ip-m4-aux>.fr-grid {padding:0}
/* 挑选区已经落在灰字段块里，内层不再各留一份内边距（否则灰块里出现双份缩进）。 */
.fr-review-dialog .fr-relations {gap:10px;padding:0}
.fr-review-dialog .ip-case-capsules {gap:10px;max-height:200px;padding:2px}
.fr-review-dialog .ip-case-capsule {font-size:13px;line-height:20px;padding:8px 12px;color:#2563eb;background:#eef4ff}
/* 单击采用＝不再是候选色（用户 2026-09-21）：白底带边，和字段里的正式值同一种"普通态"。 */
.fr-review-dialog .ip-case-capsule[aria-pressed=true] {color:var(--fg);background:var(--ip-m4-surface);border:1px solid var(--line);font-weight:600}
.fr-review-dialog .fr-recalculate {min-height:36px;padding:8px 12px;border-radius:4px;background:#f4f4f4}
@media(max-width:760px){.fr-review-dialog .fr-body {grid-template-columns:minmax(0,1fr);overflow:auto}.fr-review-dialog .ip-m4-review-fields {overflow:visible}.fr-review-dialog .ip-m4-review-content {min-height:360px}}

/* File actions have visible affordances; metadata edits remain in place. */
.ip-file-detail .ip-file-properties .btn,.ip-file-detail .ip-file-preview>.btn,.ip-file-detail>.ip-file-detail-head>.btn {min-height:36px;padding:8px 12px;border:1px solid #ddd;border-radius:4px;background:#f4f4f4;color:#161616;line-height:20px;font-size:13px;box-shadow:none;cursor:pointer}
.ip-file-detail .ip-file-properties .btn:hover {background:#e8e8e8}
.ip-file-detail .ip-file-properties .btn:disabled {opacity:.45;cursor:not-allowed}
.ip-file-detail .ip-file-properties [data-file-detail-remove] {background:#fff5f5;border-color:#e6c6c6;color:#a33232}
.ip-file-detail .ip-file-detail-actions {display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.ip-file-detail .ip-m4-aux>summary {padding:16px 0;gap:12px}
.ip-file-detail .ip-m4-aux>summary>:is(.ip-m4-expand,.ip-m4-collapse) {padding:4px 10px;border:1px solid #ddd;border-radius:4px;background:#f4f4f4;font-size:12px;line-height:20px}
.ip-file-properties>.ip-file-inline-field {display:flex;flex-direction:column;gap:4px;background:#f4f4f4;border-radius:4px;padding:10px 14px;color:#777;font-size:12px;line-height:18px;margin-bottom:12px}
.ip-file-properties>.ip-file-inline-field input {width:100%;min-width:0;box-sizing:border-box;font:14px/26px var(--sans,sans-serif);height:30px;padding:2px 0;border:0;border-radius:4px;background:transparent;color:#161616}
.ip-file-properties :is([data-file-name],[data-file-notes])[readonly] {cursor:text;outline:none;font-weight:600}
.ip-file-properties :is([data-file-name],[data-file-notes]):not([readonly]) {background:white;outline:1px solid #777;outline-offset:2px;font-weight:400}

/* Constrain the value itself, retaining space for focus rings and overlays. */
.fr-review-dialog :is(.ip-m4-review-fields,.fr-zone,.fr-grid,.fr-field,.fr-after) {min-width:0;max-width:100%;box-sizing:border-box}
.fr-review-dialog .fr-field .fr-after {width:100%;display:block}
.fr-review-dialog .fr-field .cr-file-candidate {min-width:0;max-width:100%;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.fr-review-dialog .fr-field [data-review-enum],.fr-review-dialog .fr-field [data-review-controls] {min-width:0;max-width:100%}
.fr-review-dialog .fr-field textarea {resize:none;white-space:nowrap;overflow-x:auto}

/* Mail writing space and bounded recipient editing. */
dialog.ip-mail-detail .ip-mail-pane-body {overflow:auto}
dialog.ip-mail-detail .ip-mail-editor {display:flex;flex-direction:column;overflow:visible;min-height:420px}
dialog.ip-mail-detail .ip-mail-fields {min-height:380px;overflow:visible;align-items:stretch}
dialog.ip-mail-detail .ip-m4-mail-left {min-width:0;overflow:auto;scroll-padding-top:12px}
/* ===== 邮件页右栏＝一个连续的编辑面（用户 2026-09-21）=====
   从上到下依次是：主题（标题行，原处编辑，右侧保存状态与「更多」）→ 属性行（公共紧凑变体 is-rows）
   → 细线 → 工具栏 + 正文（连成一片白，占主要空间）→ 按需展开的模板与辅助信息 → 稳定操作条。
   这里只放"这一层"的排版：色块、留白、粘性顶底。字段控件本身仍是公共那批。 */
.ip-mail-pane-surface { display: flex; flex-direction: column; gap: 0; flex: 1; min-height: 0; min-width: 0; padding: 0; }
/* 右栏底是白的，里面两个色块（用户 2026-09-21）：功能区（主送/抄送/关联案件/附件＋模板与辅助）
   与正文区（工具栏＋正文）。色块与左栏同一档（--bg-alt + 8px 圆角），块内左侧内缩 14px。 */
.ip-mail-pane-surface .ip-mail-surface { display: flex; flex-direction: column; flex: 1; min-height: 0; min-width: 0; gap: 8px; overflow: auto; background: var(--bg); }
/* 色块与第一行都不参与"被压扁"：整面纵向滚动，块内的东西不裁掉（用户 2026-09-21 真站：附件行被压成看不见）。 */
.ip-mail-surface-block { border-radius: 8px; background: var(--bg-alt); overflow: hidden; min-width: 0; flex: 0 0 auto; }
.ip-mail-surface-top, .ip-mail-surface-extra, .ip-mail-surface-foot { flex: 0 0 auto; }
/* 邮件字段区（用户 2026-09-21 口径）：容器是灰的、字段块是白的——正好把公共两级色块的两个变量对调，
   不新增颜色；块内排版仍是公共字段块那一套（标签 11px、值 14px/600、块内边距 6px 14px 4px）。 */
.ip-mail-surface-block[data-mail-block="fields"] { padding: 20px 16px; background: var(--ip-m4-fill); }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field { background: var(--ip-m4-surface); }
.ip-mail-surface-block[data-mail-block="body"] { padding: 0; }
.ip-mail-surface-extra { border-radius: 8px; background: var(--bg-alt); }
.ip-mail-surface-extra:empty { display: none; }
.ip-mail-surface-extra > * { margin: 0; }
/* 第一行＝邮件主题（用户 2026-09-21）：白底、无背景、只有一条细线收尾；
   右侧依次是状态 tag、保存状态位、模式、保存草稿、发送、更多。 */
.ip-mail-surface-top { position: sticky; top: 0; z-index: 3; display: flex; align-items: center; gap: 10px; padding: 12px 0; background: var(--bg); }
/* 主题可伸缩（用户 2026-09-21）：宽度跟着内容走（最长 420px），后面的状态 tag 紧跟着它，
   不再被一段固定宽度的空框推到老远；右侧的保存/发送仍靠右。 */
.ip-mail-surface-subject { flex: 0 1 auto; min-width: 0; max-width: 420px; }
/* 状态 tag：就是原来工作区身份条上那个徽标，挪到主题右边，不再单独占一条。 */
.ip-mail-surface-tag { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; min-width: 0; }
.ip-mail-surface-tag:empty { display: none; }
/* 主题就是这张编辑面的标题，不再重复一个「主题」标签，也没有第二层输入框外观。 */
.ip-mail-surface-subject .ip-mail-field { display: block; height: auto; min-height: 0; max-height: none; padding: 0; gap: 0; background: none; }
.ip-mail-surface-subject .ip-mail-field > span:first-child { display: none; }
/* font 简写里带 inherit 是非法值（整条声明会被丢掉）：标题的字号行高拆成长写。 */
.ip-mail-surface-subject .ip-mail-field input { width: 100%; height: auto; max-height: none; padding: 2px 0; border: 0; border-radius: 0; background: transparent; font-size: 20px; line-height: 1.5; font-weight: 700; }
/* field-sizing: content = 输入框宽度跟着内容伸缩（Chromium）；不支持的浏览器退回 420px 上限。 */
.ip-mail-surface-subject .ip-mail-field input:not([readonly]) { width: auto; min-width: 10ch; max-width: 420px; field-sizing: content; }
.ip-mail-surface-subject .ip-mail-field input:focus { outline: none; box-shadow: inset 0 -2px var(--green-ink); }
.ip-mail-surface-subject .ip-mail-field input::placeholder { font-weight: 500; color: var(--fg3); }
.ip-mail-surface-chrome { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; flex: 1 1 auto; min-width: 0; margin-left: auto; }
/* 发送边上的动作（用户 2026-09-21）：读动作（转发、回复、投递结果、删除/恢复）与「删除草稿」都排在这一行，
   跟发送同一档——字号按操作区那一档，内边距按 .btn-sm 对齐，不再比发送高一头。 */
.ip-mail-chrome-actions { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.ip-mail-surface-chrome .btn { font-size: 12.5px; }
.ip-mail-surface-chrome .btn:not(.btn-sm) { padding: 4px 8px; }
/* 属性行：色块左右各留 18px，行与行之间只有一条细线（行内排布见公共 .is-rows）。 */
.ip-mail-surface-rows { padding: 0; }
/* 邮件字段区（邮件页右栏与写信弹窗共用）＝公共字段块 + 两列（2*n），排版与总表/案件详情同一档：
   .ip-field 的标签 12px --fg3、值 13px、控件 .ip-field-input、网格 gap 16px 都由公共样式给。
   这里只补两条：字段块里的按钮按内容宽、整行块跨两列。 */
.ip-mail-fields .ip-field-group-body.is-two { align-items: start; gap: 16px; }
/* 字段块里的按钮与胶囊按内容宽，不被拉满整块。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field-value .btn { align-self: flex-start; width: auto; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field-value .ip-email-chips { min-width: 0; }
.ip-mail-fields .ip-mail-field-subject { min-width: 0; }
.ip-mail-fields [data-field-span="full"] { grid-column: 1 / -1; }
.ip-mail-fields .ip-mail-field-attach { grid-column: 1 / -1; }
/* 只读历史的收抄件只剩胶囊；胶囊行沿用公共件行为（一行排布、放不下横向滑动）。 */
.ip-mail-fields .ip-email-chips[data-chip-format="email"] .ip-address-list { min-width: 0; }
.ip-mail-surface-rows .ip-mail-field-attach > .ip-mail-field-value { min-width: 0; }
/* 正文：工具栏与编辑区连成一片，占主要纵向空间（外层不再套色块与重复内边距）。 */
.ip-mail-surface-body { display: flex; flex-direction: column; min-width: 0; }
.ip-mail-surface-body .ip-mail-field-body { display: block; min-height: 0; }
.ip-mail-surface-body .ip-mail-field-body > span { display: none; }
.ip-mail-surface .ip-email-editor-toolbar { border: 0; border-radius: 0; padding: 8px 14px; background: var(--bg-alt); gap: 6px; }
.ip-mail-surface .ip-email-editor-toolbar > [data-command="bold"],
.ip-mail-surface .ip-email-editor-toolbar > [data-editor-link] { margin-left: 10px; }
.ip-mail-surface .ip-email-editor-body { border: 0; border-radius: 0; min-height: 360px; padding: 16px 14px 28px; overflow: visible; }
/* 正文里的宽表格局部横向滚动，不把整面顶宽。 */
.ip-mail-surface .ip-email-editor-body > table { display: block; max-width: 100%; overflow-x: auto; }
@media (max-width: 700px) { .ip-mail-surface .ip-email-editor-body { min-height: 240px; } }
/* 辅助信息按需展开：模板、负责人等元数据、案件联系人、按案件查找都在里面。 */
.ip-mail-aux { border-top: 1px solid var(--line); }
.ip-mail-aux > summary { padding: 10px 0; cursor: pointer; color: var(--fg2); font-size: 12.5px; }
.ip-mail-aux-body { display: flex; flex-direction: column; gap: 10px; padding: 0 0 12px; }
.ip-mail-aux-body:empty { display: none; }
/* 辅助信息里的字段也用公共字段块，两列；模板整行。 */
.ip-mail-aux-slot { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: start; }
.ip-mail-aux-slot [data-mail-template] { grid-column: 1 / -1; }
/* 操作条：反馈在上、按钮在下，始终贴在编辑面底部（滚动时也在）。 */
.ip-mail-surface-foot { position: sticky; bottom: 0; z-index: 3; display: flex; flex-direction: column; gap: 6px; padding: 10px 0; background: var(--bg); }
/* 操作区：读动作（投递结果、删除、转发、回复）与时间/案件在这里，视觉更轻。 */
.ip-mail-surface-reader { display: flex; align-items: center; justify-content: flex-start; gap: 8px; flex-wrap: wrap; min-width: 0; }
.ip-mail-reader-slot { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.ip-mail-surface-reader:empty { display: none; }
.ip-mail-surface-reader .ip-mail-reader-meta { color: var(--fg3); font-size: 12px; }
.ip-mail-surface-reader .btn { font-size: 12.5px; }
/* 附件区：列表可见、按内容增高，不再自己开一个很短的滚动窗（整面滚动）。 */
.ip-mail-surface [data-mail-attachments] { padding: 0; background: none; border-radius: 0; max-height: none; overflow: visible; }
.ip-mail-surface [data-mail-attachments] .ip-mail-attach-list { max-height: none; }
/* 只读（历史冻结版本）：保存、发送与未保存提示都不出现（只读面上没有可保存的东西）。 */
.ip-mail-pane[data-pane-mode="readonly"] :is([data-mail-save], [data-mail-send], [data-mail-denied], [data-mail-dirty]) { display: none; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] .ip-mail-attachment-bar { flex-wrap: wrap; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] .ip-mail-attachment-bar .ip-mail-attach-send { flex: 1 1 100%; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] .ip-mail-attachment-bar { flex-wrap: wrap; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] .ip-mail-attachment-bar .ip-mail-attach-send { flex: 1 1 100%; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] .ip-mail-attachment-add { justify-content: flex-start; flex-wrap: wrap; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] :is(.ip-mail-attach-note, .ip-mail-material-caption) { text-align: left; }
.ip-mail-pane-surface .ip-mail-editor [data-mail-attachments] :is(.ip-mail-attach-note, .ip-mail-material-caption, .ip-mail-attachments-empty) { text-align: left; }
/* 编辑器内部控件在编辑面上的那一层：控件外观只此一份（弹窗里由 .ip-mail-detail 那一节提供，
   这里给"面"上补同样的排版，不新增第二套控件样式）。选择器写在 .ip-mail-surface 下，够压过弹窗节。 */
.ip-mail-pane-surface .ip-mail-editor .ip-mail-fields :is(input, select) { font-size: 13px; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-rich [contenteditable] { min-height: 320px; overflow: visible; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-field-body > textarea { min-height: 320px; }
.ip-mail-pane-surface .ip-mail-editor .ip-address-chips { box-sizing: border-box; padding: 0; min-height: 24px; }
.ip-mail-pane-surface .ip-mail-editor .ip-address-chips > input { box-sizing: border-box; padding: 0; }
.ip-mail-pane-surface .ip-mail-editor .ip-address-list { min-width: 0; overflow: visible; white-space: normal; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-attachment-add { display: flex; gap: 8px; flex-wrap: wrap; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-material-count { font-size: 11px; color: var(--fg3); }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-attach-send { display: flex; flex-direction: column; gap: 8px; min-width: 0; border: 0; margin: 0; padding: 0; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-attach-send > b { width: 100%; font-size: 12.5px; font-weight: 400; color: var(--fg3); }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-send-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.ip-mail-pane-surface .ip-mail-editor .ip-mail-chip-file [aria-hidden=true] { display: none; }
.ip-mail-pane-surface [data-mail-preview-error] { margin: 8px 14px; color: #b54732; }

dialog.ip-mail-detail .ip-m4-mail-right {min-width:0;overflow:auto}
dialog.ip-mail-detail .ip-m4-mail-right .ip-mail-field-body {flex:1 0 280px;min-height:280px}
dialog.ip-mail-detail .ip-m4-mail-right [data-mail-attachments] {flex:0 0 auto;max-height:200px;overflow:auto}
dialog.ip-mail-detail [data-mail-standalone-note] {display:none}
dialog.ip-mail-detail [data-mail-dirty]:has(~[data-mail-denied]) {display:none}
.ip-m4-mail-left .ip-mail-field:has(.ip-address-chips) {height:auto;min-height:82px;max-height:none;padding:10px 14px;gap:6px}
.ip-m4-mail-left .ip-address-chips,.ip-m4-mail-left .ip-address-chips:focus-within {box-sizing:border-box;padding:0;box-shadow:none;background:transparent}
.ip-m4-mail-left .ip-address-list {max-height:none;white-space:normal}
.ip-m4-mail-left .ip-address-chip>span,.ip-m4-mail-left .ip-address-chip .ip-address-text>span {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ip-m4-mail-left .ip-address-chip button {flex:none;border:0;background:none}
.ip-m4-mail-left .ip-address-chips input[aria-invalid=true] {outline:1px solid #b43b3b}

/* M4 M1 field/dialog contract 2026-09-16 */
.ip-field-editor .ip-boolean-editor {display:flex;align-items:center;gap:8px;min-width:0;max-width:100%}
.ip-boolean-editor [data-field-control] {position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.ip-boolean-choice {display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
.ip-boolean-option {min-height:32px;padding:4px 12px;border:1px solid #d7d7d7;border-radius:16px;background:#f4f4f4;color:#161616;font:inherit;cursor:pointer}
.ip-boolean-option[aria-pressed=true] {border-color:#161616;background:#161616;color:#fff}
.ip-boolean-option:focus-visible {outline:2px solid #94b1f0;outline-offset:2px}

/* 详情里的布尔字段：按钮组直接摆在标题右边，占半格，与标题同一行垂直居中。 */
.ip-basic .ip-field:has(>.ip-field-boolean) {flex-direction:row;align-items:center;justify-content:space-between;gap:12px;padding:6px 14px}
/* “是/否”贴到块的右缘（红框位置），中间留白。 */
.ip-basic .ip-field>.ip-field-boolean>.ip-field-editor {justify-content:flex-end}.ip-basic .ip-field>.ip-field-boolean>.ip-field-editor>.ip-boolean-choice {margin-left:auto}
.ip-basic .ip-field:has(>.ip-field-boolean)>.ip-field-label {flex:0 1 auto;height:auto;max-width:50%;white-space:normal;overflow:visible}
/* 块内动作（“查看或交接办理事项”这类跳转）：按钮在值行右端，说明整行小字，
   不在块里居中漂浮。 */
.ip-basic .ip-field>.ip-field-action {
  margin-left: auto;
  flex: none;
}
.ip-basic .ip-field:has(> .ip-field-value > .ip-field-action)>.ip-field-value {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.ip-basic .ip-field>.ip-field-note {
  color: var(--ip-m4-muted);
  font-size: 11px;
  line-height: 16px;
  white-space: normal;
  margin: 2px 0 0;
}
/* ============ 自定义下拉（公共控件）============
   系统的 select 弹层与产品风格不一致，所以选择器由“触发器 + 列表”组成；
   原生 select 仍留在 DOM 里（隐藏）作为唯一取值来源，取值与 change 语义不变。 */
.ip-select {
  position: relative;
  display: inline-flex;
  align-items: center;
  min-width: 0;
  flex: 1 1 auto;
}
.ip-select-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  width: 100%;
  min-width: 0;
  height: 28px;
  padding: 3px 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
  background: var(--bg);
  color: var(--fg);
  font: inherit;
  font-size: 13px;
  text-align: left;
  cursor: pointer;
}
.ip-select-trigger:hover {border-color: var(--ip-m4-muted)}
.ip-select-trigger:focus-visible {outline: 2px solid var(--green); outline-offset: 1px}
.ip-select-label {overflow: hidden; text-overflow: ellipsis; white-space: nowrap}
.ip-select-caret {font-style: normal; color: var(--ip-m4-muted); flex: none}
.ip-select-pop {
  position: absolute;
  z-index: 40;
  top: calc(100% + 4px);
  left: 0;
  min-width: 100%;
  max-height: 240px;
  overflow: auto;
  padding: 4px;
  background: var(--ip-m4-surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  box-shadow: 0 8px 24px #0003;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.ip-select-pop[hidden] {display: none !important}
.ip-select-option {
  border: 0;
  background: none;
  color: var(--fg);
  font: inherit;
  font-size: 13px;
  text-align: left;
  padding: 6px 8px;
  border-radius: 4px;
  cursor: pointer;
  white-space: nowrap;
}
.ip-select-option:hover {background: var(--bg-alt)}
.ip-select-option[aria-selected="true"] {background: var(--bg-alt); font-weight: 600}
/* 布尔块与普通块同高（min-height 由上面的块规则给），标签在左、“是/否”在块内右对齐。 */
.ip-basic .ip-field>.ip-field-boolean {flex:1 1 auto;max-width:none;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:2px;min-width:0}
.ip-basic .ip-field>.ip-field-boolean .ip-boolean-choice {margin-left:auto;justify-content:flex-end}
.ip-basic .ip-field>.ip-field-boolean .ip-boolean-choice {min-height:0;gap:4px;flex-wrap:nowrap}
.ip-basic .ip-field>.ip-field-boolean .ip-boolean-option {min-height:26px;padding:2px 10px;border-radius:13px;font-size:12px}
.ip-basic .ip-field>.ip-field-boolean .ip-boolean-note {color:var(--ip-m4-muted);font-size:11px;line-height:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.ip-basic .ip-field-group-body {grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.ip-basic .ip-field {min-width:0;min-height:0;height:auto;max-height:none;overflow:visible}
.ip-basic .ip-field-value {min-width:0;overflow-wrap:anywhere}
.ip-basic .ip-field-editor {min-width:0;width:100%}
.ip-basic .ip-field-editor :is(input,select,textarea) {max-width:100%;box-sizing:border-box}
dialog.ip-case-dialog .ip-basic .ip-field.is-m4-editing {z-index:2}
dialog.ip-case-dialog .ip-detail-head,dialog.ip-case-dialog .ip-detail-title {min-width:0}
dialog.ip-case-dialog .ip-detail-title h2 {overflow-wrap:anywhere;white-space:normal}
dialog.ip-case-dialog .ip-detail-title p {flex:0 1 auto;overflow-wrap:anywhere;white-space:normal}
.ip-manual-case-fields>label:not(.ip-joint-choice) {min-width:0}
.ip-manual-case-fields>label :is(input,select,textarea) {box-sizing:border-box;max-width:100%}
@media(max-width:760px){.ip-basic .ip-field-group-body {grid-template-columns:minmax(0,1fr)}}

/* M4 second batch shared file summary / preview / dialog contract 2026-09-16 */
.ui-file-summary {display:flex;flex-direction:column;gap:4px;min-width:0;max-width:100%;line-height:1.4}
.ui-file-summary-name {min-width:0;max-width:100%;overflow-wrap:anywhere;word-break:break-word;color:var(--fg1,#161616)}
.ui-file-summary-meta,.ui-file-summary-secondary {display:flex;flex-wrap:wrap;gap:4px 8px;min-width:0;color:var(--fg3,#777);font-size:12px;line-height:18px}
.ui-file-summary-meta>span,.ui-file-summary-secondary>span {min-width:0;overflow-wrap:anywhere}
.ui-file-summary-card {padding:0}
.ui-file-summary-compact .ui-file-summary-name {font-size:14px}
.ui-file-summary-status {color:var(--fg2,#555)}
.ip-file-card h2 .ip-settings-link {display:block;min-width:0;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:left}
.ip-attach-main,.ip-attach-meta {min-width:0;max-width:100%}
.ip-attach-meta {display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.ip-attach-meta>span {min-width:0;overflow-wrap:anywhere}
.ip-mail-send-chip {max-width:100%;min-width:0}
.ip-mail-chip-file {display:inline-flex;align-items:center;gap:6px;max-width:100%;min-width:0;border-radius:999px}
.ip-mail-chip-file .ui-text-line1 {min-width:0;max-width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ip-mail-chip-file small {flex:none;color:inherit;opacity:.72}

/* C08：已有 dialog 只共享外框、焦点和滚动边界，业务结构仍归消费页。 */
/* 必须带 [open]（用户 2026-09-21 真站：关掉的弹窗还画在屏幕上，"× 了一个还有一个"）：
   少了这个守卫，作者规则会压过浏览器默认的 dialog:not([open]){display:none}，关掉也收不起来。 */
dialog.ui-dialog[data-ui-dialog-layout="1"][open] {display:flex;flex-direction:column;box-sizing:border-box;max-width:min(96vw,1120px);max-height:min(92vh,900px);overflow:hidden;border-radius:12px}
dialog.ui-dialog[data-ui-dialog-layout="1"]>.ui-dialog-head {flex:0 0 auto;min-width:0}
dialog.ui-dialog[data-ui-dialog-layout="1"]>.ui-dialog-body {flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;scroll-padding:16px}
dialog.ui-dialog[data-ui-dialog-layout="1"]>.ui-dialog-foot {flex:0 0 auto;min-width:0}
dialog.ui-dialog[data-ui-dialog-layout="1"] :is(button,input,select,textarea):focus-visible {outline:2px solid #94b1f0;outline-offset:2px}
.ip-review-preview.ui-dialog {padding:0;border-radius:12px;overflow:hidden}
.ip-review-preview.ui-dialog>header {display:flex;align-items:center;gap:12px;min-width:0;padding:16px 20px;border-bottom:1px solid #e5e5e5}
.ip-review-preview.ui-dialog>header h2 {min-width:0;flex:1;margin:0;overflow-wrap:anywhere}
.ip-review-preview.ui-dialog>[data-review-preview-host] {min-height:280px;min-width:0;overflow:auto}
.ip-review-preview .ui-preview {min-height:280px}
.ip-review-preview .ui-preview-head {position:sticky;top:0;z-index:1;background:#fff}

/* C12：图片、PDF、DOCX 的加载/失败/不支持状态都由 uiKit 预览器承载。 */
.ui-preview-body {min-width:0;min-height:220px;overflow:auto}
.ui-preview-body :is(img,iframe,embed) {display:block;max-width:100%;border:0}
.ui-preview-error,.ui-preview-forbidden,.ui-preview-missing,.ui-preview-unsupported,.ui-preview-empty {margin:16px;padding:16px;border-radius:8px;background:#f6f6f6;overflow-wrap:anywhere}
@media(max-width:760px){dialog.ui-dialog[data-ui-dialog-layout="1"] {max-width:calc(100vw - 24px);max-height:calc(100vh - 24px)}.ip-mail-chip-file .ui-text-line1 {max-width:12rem}}


/* M4 follow-up: required fields and actionable server validation in manual case form. */
.ip-manual-case-form .ip-required-mark{display:inline-block;margin-left:4px;color:#c2410c;font-style:normal;font-weight:700}
.ip-manual-case-fields>[data-create-field].is-create-error{outline:2px solid #d97706;outline-offset:2px;border-radius:6px}
.ip-manual-case-fields>[data-create-field].is-create-error :is(input,select,textarea,[data-field-control]){border-color:#d97706!important}

/* C01/C03 shared form and repeat control; consumed by configuration and file metadata. */
.ip-m4-form-control {display:flex;flex-direction:column;gap:8px;min-width:0;margin:10px 0}
.ip-m4-form-label {color:var(--fg2,#555);line-height:1.4;overflow-wrap:anywhere}
.ip-m4-form-control>.ip-field-input {display:block;width:100%;max-width:100%;box-sizing:border-box;min-height:48px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--text);font:inherit}
.ip-m4-form-control>textarea.ip-field-input {min-height:96px;resize:vertical}
.ip-m4-form-control>.ip-m4-form-checkbox {width:20px;height:20px;margin:0;accent-color:var(--green)}
.ip-m4-form-control:has(.ip-m4-form-checkbox) {flex-direction:row;align-items:center;gap:12px}
.ip-m4-form-control:has(.ip-m4-form-checkbox)>.ip-m4-form-label {order:2}
.ip-m4-form-control:has(.ip-m4-form-checkbox)>.ip-m4-form-checkbox {order:1;flex:none}
.ip-m4-form-control>:is(.ip-field-input,.ip-m4-form-checkbox):focus-visible {outline:2px solid #94b1f0;outline-offset:2px}
.ip-m4-form-control>.ip-field-input[aria-invalid=true] {border-color:#b43b3b}
.ip-m4-repeat {min-width:0;margin:16px 0;padding:12px;border:1px solid var(--line);border-radius:8px}
.ip-m4-repeat>legend {font-weight:600;padding:0 4px}
.ip-m4-repeat-row {border-bottom:1px solid var(--line);padding:8px 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.ip-m4-repeat-row>.ip-m4-repeat-tools {grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:12px 0}
.ip-m4-repeat :is(button,input)[disabled] {cursor:not-allowed}
@media(max-width:760px){.ip-m4-repeat-row{grid-template-columns:minmax(0,1fr)}}

/* M4 C01/C10: one visible candidate state across total, detail and file review. */
.ip-official-candidate {color:#2563eb;background:#eef4ff;animation:ip-candidate-breathe 2.4s ease-in-out infinite}
.ip-confirmation-candidate[data-field-state="candidate_b"],
.ip-mail-detail :is(input,textarea).ip-confirmation-candidate,
.fr-review-dialog .cr-file-candidate:not(.is-adopted),
.ip-review-field-link.source-rule>span,
.ip-review-field-link.source-official>span,
.ip-field.is-suggestion:is(.source-rule,.source-official) .ip-field-suggested,
.ip-field.is-suggestion:is(.source-rule,.source-official) .ip-field-suggested * {
  color:#2563eb!important;animation:ip-candidate-breathe 2.4s ease-in-out infinite;
}
.ip-review-field-link.source-agent>span,
.ip-field.is-suggestion.source-agent .ip-field-suggested,
.ip-field.is-suggestion.source-agent .ip-field-suggested * {
  color:#10b981!important;animation:ip-candidate-breathe 2.4s ease-in-out infinite;
}
.ip-field.is-suggestion.source-official .ip-field-suggested {background:transparent}
.ip-confirmation-candidate[data-field-state="saving"],
.ip-confirmation-candidate[data-field-state="editing"],
.ip-confirmation-candidate[data-field-state="failed"],
.ip-confirmation-candidate[data-field-state="conflict"],
.ip-confirmation-candidate[data-field-state="readonly"] {color:var(--fg)!important;animation:none}
.fr-review-dialog .cr-file-candidate.is-adopted {color:var(--fg)!important;animation:none}
.ip-review-field-link.is-adopted>span {color:var(--fg)!important;animation:none}
.fr-review-dialog [data-field-state] .ip-field-state-text {position:static;width:auto;height:auto;overflow:visible;clip-path:none;white-space:normal}
.ip-field-state-text[data-state="editing"],.ip-field-state-text[data-state="adopted_pending_save"] {color:var(--fg2)}
@media(prefers-reduced-motion:reduce){
 .ip-confirmation-candidate,.cr-file-candidate,.ip-review-field-link>span,.ip-field-suggested,.ip-field-suggested * {animation:none!important;opacity:1!important}
}

/* Total-table candidate: the breathing value replaces the formal cell, one line/state. */
.ip-cases-table-host .ip-review-field-link.ip-review-field-cell {
  display:flex;flex-direction:row;align-items:center;justify-content:flex-start;text-align:left;min-height:24px;width:100%;min-width:0;
  margin:0;padding:0;border:0;border-radius:4px;background:transparent;
}
.ip-cases-table-host .ip-review-field-link.ip-review-field-cell>span {
  display:block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:inherit;font-weight:400;line-height:24px;
}
.ip-cases-table-host .ip-review-field-link.ip-review-field-cell:hover,
.ip-cases-table-host .ip-review-field-link.ip-review-field-cell:focus-visible {
  background:transparent;outline:0;box-shadow:inset 0 -1px currentColor;
}


/* 邮件应用内确认/输入弹窗，替代浏览器原生 prompt/confirm。 */
dialog.ip-mail-decision-dialog{width:min(420px,calc(100vw - 32px));border:1px solid var(--line);border-radius:12px;padding:0;background:#fff;color:var(--fg);box-shadow:0 24px 60px rgba(15,23,42,.18)}
dialog.ip-mail-decision-dialog form{display:grid;gap:14px;padding:22px}
dialog.ip-mail-decision-dialog h2{margin:0;font-size:18px;line-height:1.4}
dialog.ip-mail-decision-dialog p{margin:0;color:var(--fg2);line-height:1.65}
dialog.ip-mail-decision-dialog label{display:grid;gap:8px;color:var(--fg2);font-size:13px}
dialog.ip-mail-decision-dialog input{min-width:0;height:40px;border:1px solid var(--line);border-radius:8px;padding:0 12px;font:inherit;color:var(--fg);background:#fff}
dialog.ip-mail-decision-dialog [role=alert]{min-height:18px;color:#b42318;font-size:12px}
dialog.ip-mail-decision-dialog footer{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}
dialog.ip-mail-decision-dialog .btn-danger{color:#b42318;border-color:#f0b8b8;background:#fff7f7}
dialog.ip-mail-decision-dialog .btn-danger:hover{background:#fee4e2}
dialog.ip-line-leave-dialog { width:min(480px,calc(100vw - 32px)); max-width:calc(100vw - 32px); }
dialog.ip-line-leave-dialog p { margin:12px 0; color:var(--fg2); line-height:1.7; }
dialog.ip-line-leave-dialog footer { justify-content:flex-end; }

/* 新增案件：占满整行的字段块（与公共 span:'full' 同一语义，只在小屏/表单里用一次）。 */


/* ============ 公共「搜索 + 关联」组件的收起态（用户 2026-09-21）============
   交互契约：双击＝编辑、单击＝确定、人工编辑后失焦＝保存该字段（onCommit 交宿主落库）。
   收起时字段里只有"值"本身（已选项按公共胶囊显示），编辑态才出现搜索与候选；
   不传 entryMode 的既有消费方（协作、审核中心）渲染不变。 */
.ip-multi-case-picker.is-collapsed { display: block; min-width: 0; }
/* 值区一行到底（用户 2026-09-21：和文件页一致）：不换行、放不下就横向滚，长名字截断带全文 title。 */
.ip-case-picker-value { display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; min-width: 0; min-height: 24px; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; cursor: text; }
.ip-case-picker-value .ip-case-capsule { flex: 0 0 auto; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 4px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--fg); font-size: 13px; line-height: 20px; font-weight: 600; cursor: inherit; }
.ip-case-picker-value .ip-case-capsule:hover { background: var(--bg); }
.ip-case-picker-empty { font-weight: 500; color: var(--fg3); }
/* 字段块里装的是会展开的组件：块按内容长，不锁 56px（多值自动增高）。 */
/* 展开编辑时面板浮在字段块外面（用户 2026-09-21）：原字段块大小不变，面板盖过下面的内容。 */
/* 编辑态的行内尺寸收一档，跟字段块同一档（值区 24px 行高）。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-case-picker-search-line input,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-case-picker-search-line select { height: 32px; padding: 6px 10px; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-case-picker-search-line button { min-height: 32px; }
/* 已选项的查看入口（组件 opt-in）：跟胶囊同一行、按内容宽。 */
.ip-case-picker-inspect { min-height: 24px; padding: 2px 8px; font-size: 12px; }
.ip-case-capsules .ip-case-picker-inspect { align-self: center; }

/* 公共「搜索 + 关联」组件的下拉态（与案件详情的客户选择同一套外观与类名）：搜索行 + 下拉项 + 消息行。 */
.ip-case-picker-search .ip-case-picker-field-select { flex: 0 1 148px; min-width: 110px; height: 32px; box-sizing: border-box; padding: 4px 8px; border: 1px solid var(--line); border-radius: 4px; background: var(--ip-m4-surface,#fff); font: inherit; }
.ip-case-picker-inspect { flex: none; margin-left: auto; min-height: 24px; padding: 2px 8px; font-size: 12px; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-case-picker-panel { background: var(--bg); }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-case-picker-panel .ip-customer-option { font-size: 13px; font-weight: 600; }

/* 「独立邮件」＝和主送/抄送/关联案件/附件平级的字段块，值就是公共布尔按钮组（用户 2026-09-21）：
   标签在左、是/否在右，点一下就是确定并保存这一项。 */
.ip-mail-surface-rows .ip-field[data-mail-field-block="standalone"] .ip-boolean-choice { gap: 6px; }
.ip-mail-surface-rows .ip-field[data-mail-field-block="standalone"] .ip-boolean-option { min-height: 28px; padding: 2px 12px; font-size: 13px; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-field-block="standalone"] { height: auto; max-height: none; }

/* ============ 字段统一交互（用户 2026-09-21：单击＝保存、双击＝编辑、失焦＝保存）============
   文本字段平时只有"值"这一层（不可编辑），双击才把输入框调出来；收抄件/关联案件/附件
   的值区单击＝保存这一项，双击＝进编辑（公共件自己管）。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-field-editable] .ip-field-value > input.ip-field-input,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-field-editable] .ip-field-value > input:not(.ip-field-input) { display: none; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-editing="1"] .ip-field-value > input.ip-field-input,
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-editing="1"] .ip-field-value > input:not(.ip-field-input) { display: block; }
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-editing="1"] .ip-field-value > [data-mail-display] { display: none; }
.ip-mail-field-display { display: block; min-height: 24px; min-width: 0; overflow-wrap: anywhere; }
.ip-mail-field-display.is-empty { color: var(--ip-m4-muted); font-weight: 500; }
/* 主题的显示层与编辑层同一档字（20px 粗体）：双击之后输入框才出现，光标回到文末。 */
.ip-mail-surface-subject .ip-mail-field[data-mail-field-editable] > input { display: none; }
.ip-mail-surface-subject .ip-mail-field[data-mail-editing="1"] > input { display: inline-block; }
.ip-mail-surface-subject .ip-mail-field[data-mail-editing="1"] > [data-mail-display] { display: none; }
.ip-mail-subject-display { display: block; max-width: 420px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 20px; line-height: 1.5; font-weight: 700; }
.ip-mail-subject-display.is-empty { font-weight: 500; color: var(--fg3); }

/* 模板＝属性行里的字段块（用户 2026-09-21：与关联案件平级、同一套字段块样式）：
   值区一行放"当前来源 + 公共下拉（自带搜索）+ 套用模板"，块高与别的字段块同档。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) .ip-field[data-mail-field-block="template"] { height: auto; max-height: none; }
.ip-mail-template { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.ip-mail-template > .ip-mail-field-display { flex: none; color: var(--ip-m4-muted); font-size: 12px; font-weight: 500; }
.ip-mail-template-picker { flex: 1 1 0; min-width: 0; }
.ip-mail-template > p.ip-mail-guard { flex-basis: 100%; margin: 4px 0 0; }

/* ============ 公共下拉浮层（用户 2026-09-21）============
   弹层用 fixed 定位浮在字段块外面：向下可以溢出父容器（字段块/色块不再裁掉它），
   位置由 JS 按触发器的位置算（滚动、改窗口跟着重算）。 */
.ip-select-pop[data-floating="1"],
.ip-case-picker-panel[data-floating="1"],
.ip-customer-panel[data-floating="1"] {
  position: fixed;
  top: auto;
  left: auto;
  min-width: 200px;
  max-height: min(60vh, 420px);
  overflow: auto;
  z-index: 70;
}

/* 候选就落在字段自己的显示层上（用户 2026-09-21）：候选颜色＝公共候选蓝，不再另挂依据小字与按钮。 */
.ip-mail-subject-display.is-candidate, .ip-mail-field-display.is-candidate { color: #2563eb; animation: ip-candidate-breathe 2.4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .ip-mail-subject-display.is-candidate, .ip-mail-field-display.is-candidate { animation: none; } }
/* 正文这类没有显示层的字段：候选值贴在字段块里（正文块的顶部），只显示值本身。 */
.ip-mail-field-body > .ip-mail-field-candidate { display: block; padding: 4px 0; }
.ip-mail-field-candidate { display: inline-block; min-width: 0; }

/* 显示层按字段状态给色（用户 2026-09-21）：正式（B 类已保存）＝黑且加粗，本地未保存＝灰，
   候选＝公共候选蓝；不再一律继承字段标签的灰色。 */
:is(.ip-mail-fields, .ip-mail-surface-rows) [data-m4-state="formal"] [data-mail-display] { color: var(--fg); font-weight: 700; }
:is(.ip-mail-fields, .ip-mail-surface-rows) [data-m4-state="local_unsaved"] [data-mail-display] { color: var(--ip-m4-muted); font-weight: 500; }
.ip-mail-surface-subject [data-m4-state="formal"] [data-mail-display] { color: var(--fg); }
.ip-mail-surface-subject [data-m4-state="local_unsaved"] [data-mail-display] { color: var(--ip-m4-muted); }
[data-mail-display].is-candidate, [data-mail-display].is-candidate * { color: #2563eb; }
.ip-email-editor-body.is-candidate { color: #2563eb; animation: ip-candidate-breathe 2.4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .ip-email-editor-body.is-candidate { animation: none; } }

/* ── 色块分区与「复用文件库页那一档」（用户 2026-09-21）──────────────────────────────
   邮件页的口径：最大容器白底（--bg），里面依次是灰块（--ip-m4-fill）、块内白元素（--ip-m4-surface）、
   再一块灰。本段把文件中心、三英总表、日志页、客户偏好表与邮件模版、文件审核页统一到这个口径；
   文件审核页的卡片、工具栏、弹窗与字段块复用文件库页那一档（同边框、同圆角、同字级）。
   放在文件末尾：同权重时以本段为准。 */

/* ① 文件中心（#/ip-files）：白页 → 灰工具栏 → 灰列表块 → 白卡片（卡内案件条灰）。 */
.ip-file-page { background: var(--bg); }
.ip-file-page .ip-settings-tools { background: var(--ip-m4-fill); }
/* 灰区块里的控件是白的（用户 2026-09-21：搜索框要白底，跟邮件页字段块同一个两级色块口径）。 */
.ip-file-page .ip-settings-tools :is(input, select, .ip-search-filter-trigger) { background: var(--ip-m4-surface); }
.ip-file-page [data-file-list] { background: var(--ip-m4-fill); border-radius: 4px; padding: 16px; }
/* 白块靠灰衬底分层，不再自带 1px 边框（用户 2026-09-21：文件中心那些"白色带边框"的块要按邮件页的逻辑走）。 */
.ip-file-page .ip-file-card { border: 0; }

/* ② 三英总表（#/ip-cases）：白页 → 灰用区（视图/筛选/编辑条，白块）→ 灰表区里放白表格，
      表头与偶数行仍灰，白与灰继续交替。 */
/* 表区不再自己内缩（用户 2026-09-21 真站：表格 div 两边多出的内边距让它和上方的条不对称）：
   白色表格直接落在灰区块里，左右与视图/筛选/编辑条同一道边界。 */
.ip-master-page .ip-cases-body { background: var(--ip-m4-fill); padding: 0; }
.ip-master-page .ip-cases-tablewrap { border: 0; background: var(--ip-m4-surface); border-radius: 4px; }
/* 总表：最大那个 div 是白的，里面各块才是灰的（用户 2026-09-21：灰白对调）。
   块之间只靠底色分层，白块不再自带 1px 边框。 */
.ip-master-page .ip-cases { background: var(--bg); }
.ip-master-page :is(.ip-master-views, .ip-cases-filterbar, .ip-cases-editbar, .ip-cases-foot) { background: var(--ip-m4-fill); }
.ip-master-page .ip-cases-columns { background: var(--ip-m4-fill); border: 0; }

/* ③ 日志页（#/ip-logs）：整页由公共件搭（页头 / 工具块 / 表格块 / 分页）。 */
.ip-logs-page { background: var(--bg); }
#main > .main-scroll:has(> .ip-logs-page) { padding: 0 !important; }

/* ── 页面公共件（用户 2026-09-21）：工具块 / 块 / 分页 ──────────────────────────
   这四块以前每页各写一份、后来靠页面专用样式"照着总表画"；现在由
   js/domains/ip/ip-page-parts.js 出一份实现，类名固定 .ip-page-toolbar / .ip-page-block /
   .ip-page-pager，表格用公共 .ip-table，版面与三英总表同一档：
   灰工具块 → 白表格块 → 白分页条，块的左右边界都是 24px。 */
.ip-page-toolbar { margin: 0 24px 12px; padding: 10px 16px; border-radius: 4px; background: var(--ip-m4-fill); }
.ip-page-block { margin: 0 24px 12px; border-radius: 4px; background: var(--ip-m4-surface); }
.ip-page-block > .ip-table { width: 100%; }
.ip-page-pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; margin: 0 24px; padding: 12px 16px; border-radius: 4px; background: var(--ip-m4-surface); color: var(--fg3); font-size: 12.5px; }
.ip-page-pager :is(.ip-foot-pages, .ip-foot-nav) { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.ip-page-pager label { display: inline-flex; align-items: center; gap: 6px; }
.ip-page-pager :is(select, input) { height: 30px; box-sizing: border-box; padding: 0 8px; border: 1px solid #e5e9e6; border-radius: 6px; background: var(--ip-m4-surface); color: var(--fg); }
.ip-page-pager input[type="number"] { width: 64px; }

/* 空态（公共件 ipPageParts.empty）：没有内容时居中一整块。
   跨满整行是关键：它常落在白卡/灰块的网格里，不跨行就缩在左上角一格（用户 2026-09-21 指出的"这个我要居中"）。 */
.ip-empty { grid-column: 1 / -1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center; padding: 72px 24px; color: var(--fg3); line-height: 1.7; }
.ip-empty b { font-size: 15px; font-weight: 600; color: var(--fg); }
.ip-empty p { margin: 0; font-size: 12.5px; }
/* 空态独自在区里时，区按居中排（区有高度就垂直居中）。 */
:is(.ip-case-review > [data-cards], .ip-file-page .ip-file-list, .ip-logs-page .ip-page-block, .ip-configuration-page .ip-config-layout > section):has(> .ip-empty) { align-content: center; }

/* 公共页头（.ip-settings-head）：标题 20px/600、说明 12.5px 灰、左右 24px 边界。
   三英总表/文件中心/业务配置/文件审核实测都是这一档；日志页改用公共件后落在平台默认的 26px/700 与 58 边界上，
   这里把公共件这一档钉死，页面不再各写一条。 */
.platform-page .ip-settings-head { padding: 20px 24px 14px; }
.platform-page .ip-settings-head h1 { margin: 0; font-size: 20px; font-weight: 600; line-height: 1.4; }
.platform-page .ip-settings-head h1 small { margin-left: 10px; font-size: 13px; font-weight: 400; color: var(--fg3); }
.platform-page .ip-settings-head p { margin: 5px 0 0; font-size: 12.5px; line-height: 1.5; color: var(--fg3); }
/* 标题与说明上下排（其余四页就是这个排法）：别因为说明短就并到标题右边一行。
   标题块顶对齐：页头是 align-items:center，按钮比标题块高时（只有标题、没有说明的页，如邮件页）
   标题会被居中推下去 3px，与其余页的标题不在同一 y。 */
.platform-page .ip-settings-head > div:first-child { display: block; align-self: start; }
/* 邮件页头高度 66（用户 2026-09-21 第七遍：去掉那条状态位后只剩标题 28px，20+28+18=66）。 */
.ip-mail-page .ip-settings-head { padding: 20px 24px 12px; }

/* 公共下拉（.ip-select）里那根隐藏的原生 select 必须永远是隐藏的：
   页面级 select 样式（display/宽度）会把它顶出来，字段块里就出现值 + 下拉 + 又一个白框三份重复（用户 2026-09-21 截图）。 */
.ip-select > select[hidden] { display: none !important; }

/* 文件分类：下拉只在双击进编辑后出现（与其它字段同一套交互），平时只显示值，不再和值并排重复。 */
.fr-review-dialog .fr-field[data-field=kind] .ip-select { display: none; }
.fr-review-dialog .fr-field[data-field=kind].is-m4-editing .ip-select { display: inline-flex; }

/* 「驳回整个文件」＝居中小弹窗（用户 2026-09-21 第四遍）：与其它弹窗同一套壳（head / body / foot），尺寸按内容收窄。 */
/* height:fit-content：固定定位 + 上下都为 0 时 auto 高度会被拉满一整屏（实测 662 高），按内容收。 */
.cr-reject-dialog { position: fixed; inset: 0; margin: auto; width: min(560px, calc(100vw - 32px)); height: fit-content; max-height: calc(100dvh - 32px); padding: 0; border: 1px solid var(--line); border-radius: 12px; background: var(--bg); color: var(--fg); box-shadow: 0 20px 70px #153d382b; overflow: auto; text-align: left; }
.cr-reject-dialog::backdrop { background: #16342f55; }
.cr-reject-dialog > article { display: flex; flex-direction: column; padding: 24px; }
.cr-reject-dialog .ui-dialog-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 0 0 16px; }
.cr-reject-dialog .ui-dialog-head h2 { margin: 0; font-size: 20px; line-height: 1.5; font-weight: 600; }
.cr-reject-dialog .ui-dialog-head p { margin: 4px 0 0; color: var(--fg3); font-size: 12px; }
.cr-reject-dialog .ui-dialog-body { display: flex; flex-direction: column; gap: 12px; }
.cr-reject-dialog label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; color: var(--fg3); }
.cr-reject-dialog :is(select, input) { width: 100%; box-sizing: border-box; height: 38px; padding: 0 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--ip-m4-surface); color: var(--fg); font: inherit; }
.cr-reject-dialog [data-reject-error] { margin: 0; font-size: 12.5px; color: #a33232; }
.cr-reject-dialog [data-reject-error]:empty { display: none; }
.cr-reject-dialog .ui-dialog-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; padding: 12px 16px 14px; border-radius: 4px; background: var(--ip-m4-fill); }
.cr-reject-dialog .ui-dialog-foot .btn { height: 38px; min-height: 38px; padding: 8px 14px; border-radius: 4px; font-size: 13px; line-height: 20px; }
.cr-reject-dialog .cr-reject-confirm { background: #fff5f5; border: 1px solid #e6c6c6; color: #a33232; }

/* 关联案件：挑选件 + 常显「重算」同一行（用户 2026-09-21 第五遍）。 */
.fr-review-dialog .fr-case-row { display: flex; align-items: center; gap: 8px; }
.fr-review-dialog .fr-case-row > :first-child { flex: 1 1 auto; min-width: 0; }
/* 「重算」与挑选件里的「搜索」同一档尺寸（用户 2026-09-21 第六遍：两颗按钮大小不一致）。 */
.fr-review-dialog .fr-case-row .btn,
.fr-review-dialog .ip-case-picker-search-line .btn { flex: none; height: 32px; min-height: 32px; padding: 5px 10px; border-radius: 4px; font-size: 12px; line-height: 18px; }

/* 三英总表筛选条里的控件也一律白底带边（用户 2026-09-21 第五遍）：灰条上的素控件不像能点。 */
.ip-master-page .ip-cases-filterbar :is(input, select, .btn) { background: var(--ip-m4-surface); border: 1px solid var(--line); border-radius: 6px; }
.ip-master-page .ip-cases-filterbar .btn-ghost { color: var(--fg); }

/* 白底控件（用户 2026-09-21 第四遍）：灰字段块与白面板里的按钮/搜索框一律白底带边，
   原来只剩一行文字，和旁边的白底元素不是一套。 */
.fr-review-dialog .fr-relations .btn,
.fr-review-dialog .ip-m4-aux .btn { background: var(--ip-m4-surface); border: 1px solid var(--line); border-radius: 4px; }
.fr-review-dialog .fr-relations .ip-case-picker-search-line input,
.fr-review-dialog .ip-m4-aux .ip-case-picker-search-line input { background: var(--ip-m4-surface); border: 1px solid var(--line); border-radius: 4px; }

/* 日志页用上公共件之后，自己只剩三条：工具块里的表单排布、分页常驻、空态。 */
.ip-logs-page .ip-log-toolbar form { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin: 0; }
.ip-logs-page .ip-log-toolbar .ip-log-filters label { display: inline-flex; flex-direction: row; align-items: center; gap: 6px; color: var(--fg3); font-size: 12px; }
.ip-logs-page .ip-log-toolbar .ip-log-filters :is(input, select) { height: 32px; min-height: 0; box-sizing: border-box; padding: 0 10px; border: 1px solid #e5e9e6; border-radius: 6px; background: var(--ip-m4-surface); color: var(--fg); }
.ip-logs-page .ip-page-pager { position: sticky; bottom: 0; z-index: 2; background: var(--bg); }
.ip-logs-page [data-log-status]:empty { display: none; }
.ip-logs-page .ip-log-empty { margin: 0; padding: 20px; color: var(--fg3); }

/* ④ 客户偏好表与邮件模版（#/ip-preferences、#/ip-templates）：白页 → 灰工作区 → 两块白卡。 */
.ip-configuration-page { background: var(--bg); }
.ip-configuration-page .ip-config-layout { margin: 0 24px 12px; background: var(--ip-m4-fill); border-radius: 4px; padding: 16px; }
.ip-configuration-page .ip-config-tabs { margin: 0 24px 12px; background: var(--ip-m4-surface); border-radius: 4px; padding: 8px 16px; }
.ip-configuration-page :is([data-config-status], [data-automation-inspection]) { margin: 0 24px 12px; }
/* 配置页两张白卡：原规则的 var(--surface) 在这套页面作用域里没有定义（会算成透明），
   这里显式给二级色块变量，卡片才在白/灰交替里立得住。 */
.ip-configuration-page .ip-config-layout > aside,
.ip-configuration-page .ip-config-layout > section { background: var(--ip-m4-surface); border: 0; }

/* ⑤ 文件审核（#/ip-reconcile）复用文件库页那一档。 */
/* 页面：白页 → 灰工作区 → 白卡片；工具条与文件中心的工具条同一档（灰块 + 32px 控件）。 */
/* 审核页与文件库同构（用户 2026-09-21 真站第二遍）：页面 58px 内缩由 .platform-page 给，
   灰工作区块再内缩 24px，块内是白色工具条与白卡片，卡片网格与文件库同一个 320px 档。 */
.ip-unified-review-page { background: var(--bg); }
.ip-unified-review-page [data-unified-review] { padding: 0; }
/* 待核对事项页与文件库同构（用户 2026-09-21 第三遍）：标题跟各块同一道左边界，
   工具条自己是一块灰块、卡片区是另一块灰块，卡片白。 */
.ip-unified-review-page .fr-page-header { padding: 20px 24px 14px; margin: 0; }
/* 待核对事项页的工具条：块本身来自公共件（.ip-page-toolbar），这里只管内部排布——
   状态页签照三英总表那套视图页签（文字页签、当前项加粗），控件统一 32px，块高落回文件中心那一档。 */
.fr-page-toolbar { display: flex; align-items: center; gap: 16px; }
.fr-page-toolbar .fr-state-tabs { padding: 0; background: none; gap: 16px; }
.fr-page-toolbar .fr-state-tabs button { height: 32px; padding: 0; border-radius: 0; background: none; color: var(--fg3); }
.fr-page-toolbar .fr-state-tabs button.is-active { color: var(--fg); font-weight: 700; box-shadow: none; }
.fr-page-toolbar .fr-search { flex: 0 1 420px; width: auto; min-width: 200px; margin-left: auto; }
.fr-page-toolbar .fr-search input { height: 32px; padding: 0 10px; border: 1px solid #e5e9e6; border-radius: 6px; background: var(--ip-m4-surface); }
.fr-page-toolbar .fr-tool { height: 32px; padding: 0 12px; }
.ip-case-review { margin: 0 24px 12px; padding: 16px; border-radius: 4px; background: var(--ip-m4-fill); gap: 12px; }
/* 弹窗底部动作条：位置与样式都按文件页详情弹窗那一档（用户 2026-09-21 第六遍）——
   它就在左栏底部（复用 .ip-file-detail-footer 那个类），不再横跨整个弹窗。 */
/* 动作条＝文件详情弹窗底部那条（列布局：状态在上、动作行右对齐；按钮 38 高）。
   .fr-footer 基础档是 space-between + 12/20 的按钮内衬，这里按文件库那档盖回来。 */
.fr-review-dialog .fr-footer { margin-top: 12px; padding: 12px 16px 14px; border-top: 0; border-radius: 4px; background: var(--ip-m4-fill); position: sticky; bottom: 0; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-end; gap: 0; }
.fr-review-dialog .fr-footer [data-modal-status]:empty { display: none; }
.fr-review-dialog .fr-footer [data-modal-status] { margin: 0 0 8px; }
.fr-review-dialog .fr-footer .cr-reject-panel { width: 100%; margin: 0 0 10px; }
.fr-review-dialog .fr-footer .ip-file-detail-actions { width: 100%; }
.fr-review-dialog .fr-footer .ip-file-detail-actions .btn { height: 38px; min-height: 38px; padding: 8px 14px; border-radius: 4px; font-size: 13px; line-height: 20px; }
/* 驳回按钮＝文件详情弹窗那颗「删除」同一档（红字浅底），就排在「保存文件」左边。 */
/* margin:0 压掉 .fr-review [data-reject] 的 14px 下边距（否则它在动作行里比「保存文件」高 7px）。 */
.fr-review-dialog .fr-footer .cr-reject { margin: 0; background: #fff5f5; border: 1px solid #e6c6c6; border-radius: 4px; color: #a33232; }
.fr-review-dialog .fr-footer .cr-reject:hover { background: #ffefef; color: #b54040; }
.fr-review-dialog .fr-footer .btn-pri { flex: none; }

/* 底条用公共白条那一档（与其余页的分页条同一行高与底色），内容说真实份数；没有文件时整条隐藏。 */
.ip-unified-review-page .cr-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--fg3); font-size: 12.5px; }
.ip-unified-review-page .cr-footer:empty { display: none; }
.ip-case-review > [data-cards] { grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr)); gap: 12px; }
.ip-case-review .fr-card-case { display: grid; gap: 6px; }
.ip-case-review .fr-card-case span:first-child { color: var(--fg3); font-size: 12px; }
.fr-search { width: 420px; max-width: 60%; }
.fr-search .ip-search-filter { margin-bottom: 0; }
.fr-search .ip-search-filter input[type=search] { height: 32px; box-sizing: border-box; padding-block: 5px; font-size: 12px; border: 1px solid #e5e9e6; border-radius: 6px; background: #fff; }
.fr-state-tabs { background: var(--ip-m4-surface); border-radius: 4px; }
.fr-state-tabs button { border-radius: 4px; }
/* 卡片＝文件库的 .ip-file-card 同一份外观：白卡、1px 边、4px 圆角、卡内案件条灰，内衬同为 20px。 */
.fr-file-card { border: 0; border-radius: 4px; background: var(--ip-m4-surface); padding: 20px; }
/* 卡片标题同文件库卡那一档（15px/24px 粗体）：卡片是 button，标题不钉住会落到按钮默认的 13.33px。 */
.fr-file-heading strong { font-size: 15px; line-height: 24px; }
.fr-card-case { background: var(--ip-m4-fill); border-radius: 4px; padding: 8px 10px; }
.fr-card-case p { margin: 4px 0 0; }
/* 弹窗＝文件详情弹窗同一份壳（用户 2026-09-21 第五/六遍）：内衬与标题位置都跟文件库详情弹窗同档——
   那边是"弹窗自身 24px 内衬 + 头部不带左右内边距 + 标题与两栏左边界对齐在 104 + 头部没有分隔线"；
   字段块那边是灰的（灰弹窗 → 白区 → 灰字段块）。 */
.fr-review-dialog { border-radius: 8px; padding: 0; }
.fr-review-dialog .fr-header { padding: 0 0 16px; border-bottom: 0; }
.fr-review-dialog .fr-header h2 { font-size: 24px; line-height: 1.5; }
.fr-review-dialog .fr-header p { margin: 4px 0 0; color: var(--fg3); font-size: 12px; }
.fr-review-dialog .fr-body { padding: 0; }
.fr-review-dialog .ip-m4-review-fields { padding: 0; }
.fr-tool, .fr-close { border-color: var(--line2); border-radius: 4px; padding: 5px 10px; font-size: 12.5px; }
/* 弹窗头部按钮同文件详情弹窗那颗「关闭」：38 高、灰底、无边框、13px（工具条里的 .fr-tool 不受影响）。 */
.fr-review-dialog :is(.fr-tool, .fr-close) { height: 38px; padding: 8px 12px; border: 0; background: var(--ip-m4-fill); color: var(--fg); font-size: 13px; font-weight: 500; }
/* 三段字段区＝公共字段块那一档：灰区标题、白字段块、标签 12px 灰、值 13px。 */
.fr-zone { border: 0; border-radius: 4px; }
.fr-zone > h3 { background: var(--ip-m4-fill); color: var(--fg); font-size: 12.5px; font-weight: 600; padding: 8px 14px; }
.fr-zone h3 small { color: var(--fg3); font-size: 11px; }
.fr-grid { padding: 12px 14px; gap: 12px 16px; }
.fr-field { background: var(--ip-m4-fill); border-radius: 4px; padding: 6px 14px 5px; }
.fr-field > label { color: var(--fg3); font-size: 11px; }
.fr-review .fr-value { font-weight: 600; }
