/* =====================================================================
   ABR Variant A / S1 —— 全局 token 与壳层（纯增补层；未改动下方任何既有选择器与声明）
   依据：abr-ui-variant-a-handoff/design-tokens.md 与 implementation-map.md 第 1 步
   「Token 与全局壳：只改 app.css 的变量、背景、排版和焦点态」
   浅/深两套 token 由 prefers-color-scheme 切换；金额与文本节点一律不动。
   ===================================================================== */
:root {
  color-scheme: light dark;

  /* 表面与文字 */
  --surface-page: #F5F7FA;
  --surface-card: #FFFFFF;
  --surface-sunken: #EEF1F5;
  --surface-raised: #FFFFFF;
  --text-primary: #1D1D1F;
  --text-secondary: #6E6E73;
  --text-tertiary: #8E8E93;
  --separator: #D2D2D7;
  --separator-strong: #B9B9C0;

  /* 系统蓝（浅/深） */
  --accent: #0071E3;
  --accent-pressed: #0060C0;
  --accent-soft: rgba(0, 113, 227, 0.12);
  --accent-on: #FFFFFF;

  /* 语义色 */
  --success: #1D8A4C;
  --warning: #B26A00;
  --danger: #C7261B;
  --neutral: #6E6E73;
  --success-soft: rgba(29, 138, 76, 0.12);
  --warning-soft: rgba(178, 106, 0, 0.12);
  --danger-soft: rgba(199, 38, 27, 0.12);
  --neutral-soft: rgba(110, 110, 115, 0.12);

  /* 字体：系统栈（不引入任何第三方字体/CDN） */
  --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", Roboto, Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;

  /* 字阶（交接包：标题 38/28/22/21，正文 15，标签 13） */
  --font-size-display: 38px;
  --font-size-title-1: 28px;
  --font-size-title-2: 22px;
  --font-size-title-3: 21px;
  --font-size-body: 15px;
  --font-size-label: 13px;
  --line-height-tight: 1.2;
  --line-height-body: 1.55;
  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;

  /* 间距刻度（4 的倍数） */
  --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
  --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px; --space-12: 48px;

  /* 圆角：控件 9 / 次级 12 / 主卡 18 */
  --radius-control: 9px;
  --radius-secondary: 12px;
  --radius-card: 18px;
  --radius-pill: 999px;

  /* 阴影与毛玻璃 */
  --shadow-1: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.08);
  --shadow-2: 0 4px 12px rgba(16, 24, 40, 0.10);
  --shadow-3: 0 12px 32px rgba(16, 24, 40, 0.14);
  --blur-surface: saturate(180%) blur(20px);
  --overlay-surface: rgba(255, 255, 255, 0.72);

  /* 焦点态与触控目标 */
  --focus-ring: 0 0 0 3px rgba(0, 113, 227, 0.35);
  --focus-outline: 2px solid #0071E3;
  --touch-target: 44px;

  --duration-fast: 120ms;
  --duration-base: 200ms;
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
}

@media (prefers-color-scheme: dark) {
  :root {
    --surface-page: #0C1016;
    --surface-card: #141A22;
    --surface-sunken: #10161D;
    --surface-raised: #1A222C;
    --text-primary: #F5F7FA;
    --text-secondary: #A7ADB6;
    --text-tertiary: #8A929C;
    --separator: #2A333F;
    --separator-strong: #3A4552;
    --accent: #2997FF;
    --accent-pressed: #5FB0FF;
    --accent-soft: rgba(41, 151, 255, 0.18);
    --accent-on: #0C1016;
    --success: #34C759;
    --warning: #FFB020;
    --danger: #FF6B60;
    --neutral: #A7ADB6;
    --success-soft: rgba(52, 199, 89, 0.18);
    --warning-soft: rgba(255, 176, 32, 0.18);
    --danger-soft: rgba(255, 107, 96, 0.18);
    --neutral-soft: rgba(167, 173, 182, 0.18);
    --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.40), 0 1px 3px rgba(0, 0, 0, 0.32);
    --shadow-2: 0 4px 12px rgba(0, 0, 0, 0.44);
    --shadow-3: 0 12px 32px rgba(0, 0, 0, 0.52);
    --overlay-surface: rgba(20, 26, 34, 0.72);
    --focus-ring: 0 0 0 3px rgba(41, 151, 255, 0.40);
    --focus-outline: 2px solid #2997FF;
  }
}

/* 全局壳层（新增声明；既有选择器一律保留原样，下列规则只做变量化与排版基线） */
html { -webkit-text-size-adjust: 100%; }
body {
  background: var(--surface-page);
  color: var(--text-primary);
  font-family: var(--font-sans);
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
  font-variant-numeric: tabular-nums;
  -webkit-font-smoothing: antialiased;
}
h1 { font-size: var(--font-size-display); line-height: var(--line-height-tight); font-weight: var(--font-weight-semibold); }
h2 { font-size: var(--font-size-title-1); line-height: var(--line-height-tight); font-weight: var(--font-weight-semibold); }
h3 { font-size: var(--font-size-title-3); line-height: var(--line-height-tight); font-weight: var(--font-weight-medium); }
label, .label { font-size: var(--font-size-label); color: var(--text-secondary); }
small, .caption { font-size: var(--font-size-label); color: var(--text-tertiary); }
code, pre, .mono, .amount { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* 焦点态：键盘可见环（不改变既有布局） */
:focus-visible, button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible {
  outline: var(--focus-outline);
  outline-offset: 2px;
  box-shadow: var(--focus-ring);
  border-radius: var(--radius-control);
}

/* 触控目标 ≥44px（仅约束可交互控件的最小尺寸，不覆盖既有显式高度） */
button, a[href], input[type="file"], select, summary { min-height: var(--touch-target); }
input[type="file"] { display: inline-flex; align-items: center; }
a[href], button { touch-action: manipulation; }

/* 动效尊重系统偏好 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

:root{font-family:system-ui,sans-serif;color:#192b40;background:#f3f5f8}*{box-sizing:border-box}body{margin:0}header{background:#192b40;color:white;padding:24px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}main{max-width:900px;margin:32px auto;padding:0 16px}.card{background:white;border:1px solid #d8e0e9;border-radius:12px;padding:24px}.hidden{display:none}label{display:block;margin:16px 0;font-weight:600}input,textarea{display:block;width:100%;padding:12px;margin-top:8px;border:1px solid #8797aa;border-radius:5px;font:inherit}textarea{min-height:90px}button{background:#22569a;color:white;border:0;padding:12px 18px;border-radius:5px;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.secondary{background:#526171}.toolbar,.actions{display:flex;gap:12px;align-items:center;justify-content:space-between}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 20px}.notice{padding:12px;background:#fff4d8}.error{color:#a51d24}input[readonly]{background:#edf0f4}@media(max-width:600px){.grid{grid-template-columns:1fr}header{align-items:start;flex-direction:column}.card{padding:16px}}

/* UI-NARROW-CONTRAST-0655 ------------------------------------------------------------
   a) readable links (previous browser default rgb(0,0,238) on the dark header measured
      1.53:1). Colors reuse the existing palette; #cfe2ff is the light tint of #192b40.
   b) no page-level horizontal overflow at 390px: long unbreakable tokens (URL paths,
      canonical request bodies, UUIDs) may now wrap instead of widening the page. Text is
      never clipped: no overflow:hidden is used anywhere. */
a{color:#0b5cad;text-decoration:underline;text-underline-offset:2px}
a:hover{color:#083d75}
header a,#homeLink{color:#cfe2ff}
header a:hover,#homeLink:hover{color:#fff}
h1,h2,h3,h4,p,li,label,span,div,td,th,code,pre,a,button,.result-row,.result-cell{overflow-wrap:anywhere;word-break:break-word}
img,table,pre,code,input,textarea,select{max-width:100%}


/* =====================================================================
   S1 壳层增补：既有选择器**原样保留**，这里只在文件末尾追加同选择器的变量化声明
   （层叠顺序在后 ⇒ 生效；未删除/未改写任何既有声明；金额与文本节点不动）
   ===================================================================== */
:root { background: var(--surface-page); min-height: 100%; }
body { background: var(--surface-page); color: var(--text-primary); min-height: 100vh; }
.card, section.card {
  background: var(--surface-card);
  border-color: var(--separator);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-1);
}
.card > h2, .card > h3 { color: var(--text-primary); }
.notice { color: var(--text-secondary); border-radius: var(--radius-secondary); }
.toolbar a, .actions a { border-radius: var(--radius-control); }
button {
  border-radius: var(--radius-control);
  font-size: var(--font-size-body);
  font-weight: var(--font-weight-medium);
  transition: background-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard);
}
button:not(:disabled) { background: var(--accent-soft); color: var(--accent); }
button:not(:disabled):hover { background: var(--accent); color: var(--accent-on); }
button:disabled { color: var(--text-tertiary); cursor: not-allowed; }
input, select, textarea {
  border-radius: var(--radius-control);
  background: var(--surface-raised);
  color: var(--text-primary);
  font-family: var(--font-sans);
  font-size: var(--font-size-body);
  border-color: var(--separator-strong);
  min-height: var(--touch-target);
}
table { border-color: var(--separator); border-radius: var(--radius-secondary); }
th { font-size: var(--font-size-label); color: var(--text-secondary); font-weight: var(--font-weight-semibold); }
td, th { border-color: var(--separator); }
ul li { font-size: var(--font-size-body); }
[role="alert"] { color: var(--danger); }
[role="status"] { color: var(--text-secondary); }
.hidden { display: none !important; }

/* =====================================================================
   ABR Variant A / S2 —— 登录 / 首登改密：双栏卡片（纯增补；既有选择器与声明一律保留）
   左品牌/说明、右表单；窄屏折叠为单栏，390px 无页面级横向溢出；键盘顺序与既有 DOM 顺序一致。
   ===================================================================== */
.auth-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--space-8);
  align-items: start;
  padding: var(--space-8);
  border-radius: var(--radius-card);
  background: var(--surface-card);
  border: 1px solid var(--separator);
  box-shadow: var(--shadow-1);
}
.auth-brand { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.auth-eyebrow { font-size: var(--font-size-label); color: var(--text-tertiary); margin: 0; }
.auth-lede { font-size: var(--font-size-body); color: var(--text-secondary); margin: 0; }
.auth-points { margin: 0; padding-left: var(--space-5); color: var(--text-secondary); font-size: var(--font-size-label); }
.auth-points li { font-size: var(--font-size-label); color: var(--text-secondary); }
.auth-form { min-width: 0; }
.auth-form form { display: flex; flex-direction: column; gap: var(--space-3); }
.auth-form label { display: flex; flex-direction: column; gap: var(--space-1); }
.auth-form input { width: 100%; box-sizing: border-box; }
/* UI-LOGIN-GRID: auth-http.js 注入的技术说明（p）与演示入口（a）是 #loginView 的额外直接子节点，
   若按网格默认排布会挤占两列、打乱 auth-brand/auth-form；这里让它们跨满整行、降级为次级样式。 */
.auth-card > p { grid-column: 1 / -1; margin: 0; font-size: var(--font-size-label); color: var(--text-secondary); }
.auth-card > a { grid-column: 1 / -1; font-size: var(--font-size-label); color: var(--text-tertiary); }
/* 可折叠技术详情：把端点/QA 证据路径等开发者文案收进默认折叠的次级区块，主界面只留用户任务语言。 */
.tech-details { font-size: var(--font-size-label); color: var(--text-secondary); margin-top: var(--space-3); }
.tech-details summary { cursor: pointer; color: var(--text-tertiary); font-size: var(--font-size-label); min-height: var(--touch-target); display: flex; align-items: center; }
.tech-details p { margin: var(--space-2) 0 0; }
#loginView input, #passwordChangeView input { min-height: var(--touch-target); }
#loginView button, #passwordChangeView button { min-height: var(--touch-target); }

@media (max-width: 700px) {
  .auth-card { grid-template-columns: minmax(0, 1fr); gap: var(--space-5); padding: var(--space-5); }
}
@media (prefers-color-scheme: dark) {
  .auth-card { background: var(--surface-card); border-color: var(--separator); }
  .auth-brand, .auth-form { color: var(--text-primary); }
}

/* =====================================================================
   ABR Variant A / S3 —— 代理填报区（12 行 + 两段合计 + 后端汇总卡 + 操作组）
   桌面：12 行按表格化栅格；≤700px：纯 CSS 卡片化（不改 DOM、不改数据、不改文案）。
   金额一律原样字符串展示，本层不做任何计算/取整/千分位。
   ===================================================================== */
.entry-card { padding: var(--space-6); }
.meta-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--space-3); }
.meta-grid input[readonly] { background: var(--surface-sunken); color: var(--text-secondary); }

/* 12 行填报：桌面表格化 */
.rs-table { display: block; margin: var(--space-3) 0; border: 1px solid var(--separator); border-radius: var(--radius-secondary); overflow: hidden; }
.rs-row {
  display: grid;
  grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-4);
  border-bottom: 1px solid var(--separator);
  background: var(--surface-card);
}
.rs-row:last-child { border-bottom: 0; }
.rs-row:nth-child(even) { background: var(--surface-sunken); }
.rs-row span:first-child { font-size: var(--font-size-body); color: var(--text-primary); }
.rs-row input { text-align: right; font-family: var(--font-mono); font-variant-numeric: tabular-nums; min-height: var(--touch-target); }

/* 后端汇总卡（合计/月均/剩余/全年/N） */
.summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: var(--space-3); margin: var(--space-4) 0; }
.summary-grid > p {
  margin: 0;
  padding: var(--space-4);
  background: var(--surface-sunken);
  border: 1px solid var(--separator);
  border-radius: var(--radius-secondary);
  box-shadow: var(--shadow-1);
  font-size: var(--font-size-label);
  color: var(--text-secondary);
}
.summary-grid > p > span { display: block; margin-top: var(--space-1); font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: var(--font-size-title-2); color: var(--text-primary); }

/* 操作组（保存/校验/提交） */
.entry-actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin: var(--space-4) 0; }
.entry-actions button { min-height: var(--touch-target); padding: var(--space-2) var(--space-5); }
.entry-actions #rsSubmit { background: var(--accent); color: var(--accent-on); }
.entry-actions #rsSubmit:hover:not(:disabled) { background: var(--accent-pressed); color: var(--accent-on); }

/* ≤700px：12 行卡片化（纯 CSS，无 DOM 变更） */
@media (max-width: 700px) {
  .entry-card { padding: var(--space-4); }
  .rs-table { border: 0; border-radius: 0; overflow: visible; }
  .rs-row {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-2);
    padding: var(--space-4);
    border: 1px solid var(--separator);
    border-radius: var(--radius-secondary);
    margin-bottom: var(--space-3);
    box-shadow: var(--shadow-1);
  }
  .rs-row:nth-child(even) { background: var(--surface-card); }
  .rs-row input { text-align: left; }
  .summary-grid { grid-template-columns: minmax(0, 1fr); }
  .entry-actions { flex-direction: column; }
  .entry-actions button { width: 100%; }
}
@media (prefers-color-scheme: dark) {
  .rs-row, .summary-grid > p { border-color: var(--separator); }
  .summary-grid > p { background: var(--surface-sunken); }
}

/* =====================================================================
   ABR Variant A / S4 —— 审核对比屏（卡片化 + 390px 逐科目卡片 + 审核动作栏 + ⑨原因说明列）
   纯 CSS；不改 DOM 结构、不改数据、不改文案。金额一律原样字符串，本层零计算/零取整/零千分位。
   注：index.html 内联 <style> 含 #rsComparisonRows td { text-align: right }，且位于 app.css 之后，
   故本层用「双 ID + 伪类」提权覆盖（#rsComparisonScroll #rsComparisonRows …）以稳定生效。
   ===================================================================== */
.comparison-card { padding: var(--space-6); }
#rsComparisonScroll { border: 1px solid var(--separator); border-radius: var(--radius-secondary); background: var(--surface-card); }
#rsComparisonScroll #rsComparisonRows td,
#rsComparisonScroll #rsComparisonRows th,
#rsComparisonScroll thead th { font-variant-numeric: tabular-nums; font-family: var(--font-mono); }
#rsComparisonScroll thead th { font-family: var(--font-sans); font-size: var(--font-size-label); color: var(--text-secondary); background: var(--surface-sunken); }
#rsComparisonScroll #rsComparisonRows td:first-child { font-family: var(--font-sans); color: var(--text-primary); }
#rsComparisonScroll #rsComparisonRows td { border-color: var(--separator); }
#rsComparisonScroll #rsComparisonRows tr[data-kind="subtotal"] { background: var(--surface-sunken); }
#rsComparisonScroll #rsComparisonRows tr[data-kind="subtotal"] td { font-weight: var(--font-weight-semibold); color: var(--text-primary); }
/* ⑨ 原因说明列：左对齐、可换行、不参与数值右对齐 */
#rsComparisonScroll #rsComparisonRows td:last-child { text-align: left; white-space: normal; min-width: 12rem; }
#rsComparisonScroll #rsComparisonRows td:last-child:empty::before { content: "暂无依赖数据"; color: var(--text-tertiary); }
#rsComparisonScroll #rsComparisonRows tr[data-kind="subtotal"] td:last-child:empty::before { content: none; }

/* 审核动作按钮（退回/批准）固定在对比卡底部 */
.review-actions {
  position: sticky;
  bottom: 0;
  z-index: 2;
  margin: var(--space-4) 0 0;
  padding: var(--space-3) var(--space-4);
  gap: var(--space-3);
  background: var(--overlay-surface);
  -webkit-backdrop-filter: var(--blur-surface);
  backdrop-filter: var(--blur-surface);
  border-top: 1px solid var(--separator);
  border-radius: var(--radius-secondary);
}
.review-actions #rsApprove { background: var(--success-soft); color: var(--success); border-color: transparent; }
.review-actions #rsApprove:hover:not(:disabled) { background: var(--success); color: var(--accent-on); }
.review-actions #rsReturn { background: var(--warning-soft); color: var(--warning); border-color: transparent; }
.review-actions #rsReturn:hover:not(:disabled) { background: var(--warning); color: var(--accent-on); }
.review-actions button { min-height: var(--touch-target); }
#rsReturnReason { min-height: var(--touch-target); width: 100%; box-sizing: border-box; }

/* 草稿/待处理等状态标签的黄色强调（token 化；仅样式，不改文案与渲染） */
.chip-warning, .status-draft, .tag-warning, [data-status="draft"], [data-status="pending"] {
  display: inline-block;
  padding: 2px var(--space-2);
  border-radius: var(--radius-pill);
  background: var(--warning-soft);
  color: var(--warning);
  font-size: var(--font-size-label);
  font-weight: var(--font-weight-medium);
}
.chip-success, [data-status="approved"] { display: inline-block; padding: 2px var(--space-2); border-radius: var(--radius-pill); background: var(--success-soft); color: var(--success); font-size: var(--font-size-label); }
.chip-danger, [data-status="returned"] { display: inline-block; padding: 2px var(--space-2); border-radius: var(--radius-pill); background: var(--danger-soft); color: var(--danger); font-size: var(--font-size-label); }
.chip-neutral, [data-status="missing"] { display: inline-block; padding: 2px var(--space-2); border-radius: var(--radius-pill); background: var(--neutral-soft); color: var(--neutral); font-size: var(--font-size-label); }

/* 呈现行 / 历史提交等只读列表（审核区） */
#rsPresentationRows li, #rsSubmissionList li { padding: var(--space-2) 0; border-bottom: 1px solid var(--separator); }

/* ≤700px：对比表逐科目卡片化（纯 CSS；不改 DOM） */
@media (max-width: 700px) {
  .comparison-card { padding: var(--space-4); }
  #rsComparisonScroll { border: 0; background: transparent; overflow: visible; }
  #rsComparisonScroll table,
  #rsComparisonScroll thead,
  #rsComparisonScroll tbody,
  #rsComparisonScroll tr,
  #rsComparisonScroll th,
  #rsComparisonScroll td { display: block; width: auto; }
  #rsComparisonScroll thead { display: none; }
  #rsComparisonScroll #rsComparisonRows tr[data-kind] {
    border: 1px solid var(--separator);
    border-radius: var(--radius-secondary);
    background: var(--surface-card);
    box-shadow: var(--shadow-1);
    margin-bottom: var(--space-3);
    padding: var(--space-3) var(--space-4);
  }
  #rsComparisonScroll #rsComparisonRows td { text-align: left; border: 0; padding: 2px 0; white-space: normal; }
  #rsComparisonScroll #rsComparisonRows td:first-child {
    font-size: var(--font-size-body);
    font-weight: var(--font-weight-semibold);
    border-bottom: 1px solid var(--separator);
    padding-bottom: var(--space-2);
    margin-bottom: var(--space-2);
  }
  #rsComparisonScroll #rsComparisonRows td:last-child { min-width: 0; color: var(--text-secondary); }
  /* 移动端字段语义：每个值前显示其字段名（数据列由 JS 写入 data-label）。 */
  #rsComparisonScroll #rsComparisonRows td[data-label]::before {
    content: attr(data-label);
    display: block;
    font-size: var(--font-size-label);
    color: var(--text-secondary);
    font-weight: var(--font-weight-medium);
    margin-bottom: 2px;
  }
  .review-actions { flex-direction: column; }
  .review-actions button { width: 100%; }
}
@media (prefers-color-scheme: dark) {
  #rsComparisonScroll thead th { background: var(--surface-sunken); }
  #rsComparisonScroll #rsComparisonRows tr[data-kind="subtotal"] { background: var(--surface-raised); }
  .review-actions { background: var(--overlay-surface); border-top-color: var(--separator); }
}

/* =====================================================================
   ABR Variant A / S5 —— 汇率维护卡 + 结构化数据导出卡
   纯 CSS（含 1 处 class 属性）；不改 DOM 结构、不改数据、不改文案。
   状态语义一律由**既有节点**（#fxStatus / #fxError / #exportAgentInputMessage）承载，
   本层只做样式承载，不新增任何业务判断，也不生成任何成功态文案。
   ===================================================================== */
.fx-title { margin: var(--space-6) 0 var(--space-3); }
.fx-card {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: var(--space-3);
  align-items: end;
  padding: var(--space-5);
  border: 1px solid var(--separator);
  border-radius: var(--radius-card);
  background: var(--surface-card);
  box-shadow: var(--shadow-1);
}
.fx-card label { display: flex; flex-direction: column; gap: var(--space-1); }
.fx-card input { min-height: var(--touch-target); font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
#fxSaveFxRate { min-height: var(--touch-target); padding: var(--space-2) var(--space-5); background: var(--accent); color: var(--accent-on); border-radius: var(--radius-control); font-weight: var(--font-weight-medium); }
#fxSaveFxRate:hover:not(:disabled) { background: var(--accent-pressed); color: var(--accent-on); }
#fxStatus, #fxError { margin: var(--space-2) 0 0; padding: var(--space-3) var(--space-4); border-radius: var(--radius-secondary); font-size: var(--font-size-label); line-height: var(--line-height-body); }
#fxStatus:empty, #fxError:empty { display: none; }
#fxStatus { background: var(--neutral-soft); color: var(--text-secondary); border-left: 3px solid var(--accent); }
#fxError { background: var(--danger-soft); color: var(--danger); border-left: 3px solid var(--danger); }

.export-card { display: grid; gap: var(--space-3); }
.export-card h2, .export-card h3 { margin: 0; }
#exportAgentInput { min-height: var(--touch-target); padding: var(--space-2) var(--space-5); background: var(--accent); color: var(--accent-on); border-radius: var(--radius-control); font-weight: var(--font-weight-medium); }
#exportAgentInput:hover:not(:disabled) { background: var(--accent-pressed); color: var(--accent-on); }
#exportAgentInput:disabled { background: var(--neutral-soft); color: var(--text-tertiary); }
#exportAgentInputMessage { margin: 0; padding: var(--space-3) var(--space-4); border-radius: var(--radius-secondary); background: var(--surface-sunken); color: var(--text-secondary); font-size: var(--font-size-label); border-left: 3px solid var(--separator-strong); }
#exportAgentInputMessage:empty { display: none; }

@media (max-width: 700px) {
  .fx-card { grid-template-columns: minmax(0, 1fr); padding: var(--space-4); }
  #fxSaveFxRate, #exportAgentInput { width: 100%; }
}
@media (prefers-color-scheme: dark) {
  .fx-card { border-color: var(--separator); }
  #fxStatus, #exportAgentInputMessage { background: var(--neutral-soft); }
}

/* =====================================================================
   ABR S8 —— 审核人「代理案例列表 + 对比表同屏」左侧栏（纯增补）
   仅审核人会话语境渲染；代理会话与未登录一律零请求（JS 侧角色 + DOM 双开关）。
   390px 折叠：details/summary 纯 CSS 折叠 + 单列栅格。
   ===================================================================== */
#caseView { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: var(--space-4); align-items: start; }
/* 右主栏容器：除审核人侧栏外的业务内容（代理填报/收入拆分/提交对比）稳定聚为一列，
   修复四子区块被 280px/572px 两列切碎、主业务区窄条与大块空白的缺陷。 */
.case-main { grid-column: 2; min-width: 0; display: flex; flex-direction: column; gap: var(--space-4); }
.reviewer-cases {
  grid-column: 1;
  position: sticky; top: var(--space-4);
  padding: var(--space-4);
  background: var(--surface-card);
  border: 1px solid var(--separator);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-1);
  min-width: 0;
}
.reviewer-cases[hidden] { display: none; }
.reviewer-cases summary { min-height: var(--touch-target); display: flex; align-items: center; font-size: var(--font-size-body); font-weight: var(--font-weight-semibold); cursor: pointer; }
.reviewer-cases .notice { font-size: var(--font-size-label); }
#rsReviewerCasesList { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-2); }
#rsReviewerCasesList li { margin: 0; padding: 0; }
.reviewer-case-item {
  width: 100%; box-sizing: border-box;
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-2);
  min-height: var(--touch-target); padding: var(--space-2) var(--space-3);
  text-align: left; font-size: var(--font-size-label);
  background: var(--surface-sunken); color: var(--text-primary);
  border: 1px solid var(--separator); border-radius: var(--radius-control); cursor: pointer;
}
.reviewer-case-item:hover { background: var(--accent-soft); }
.reviewer-case-item.current { background: var(--accent-soft); border-left: 3px solid var(--accent); font-weight: var(--font-weight-medium); }
/* 审核人列表项：主标签（代理代码/名称 + 财年）占据可用宽度，UUID 降为次级、右对齐、可截断。 */
.reviewer-case-title { flex: 1 1 auto; min-width: 0; text-align: left; overflow-wrap: anywhere; }
.reviewer-case-id { flex: 0 1 auto; font-size: var(--font-size-label); color: var(--text-tertiary); font-family: var(--font-mono); overflow-wrap: anywhere; max-width: 42%; }
@media (max-width: 700px) {
  #caseView { grid-template-columns: minmax(0, 1fr); }
  .reviewer-cases { position: static; }
  .case-main { grid-column: 1; }
}
@media (prefers-color-scheme: dark) {
  .reviewer-cases { border-color: var(--separator); }
}

/* S9c：审核人面板展开可点性（默认 open 由 JS 设定并每次进入/切换后保持；此处确保内容可见且不被覆盖层遮挡） */
.reviewer-cases[open] { position: sticky; z-index: 2; }
.reviewer-cases[open] #rsReviewerCasesList { display: flex; }
.reviewer-cases summary { position: relative; z-index: 1; pointer-events: auto; }
#rsReviewerCasesList li { position: relative; z-index: 1; }
.reviewer-case-item { pointer-events: auto; }

/* =====================================================================
   S10 —— 视觉改版：Apple 玻璃风 + 黑白审美（2026-09-24 用户授权）
   只动视觉层（配色/层级/间距/字号），不改 id、接口、金额显示、业务逻辑。
   主按钮改实心近黑（黑白审美）；accent 蓝仅用于焦点环/链接/选中态点缀。
   复用 S1 token；新增 --ink 近黑按钮色（含深色模式变体）。
   ===================================================================== */
:root {
  --ink: #1D1D1F;
  --ink-hover: #3A3A3C;
  --ink-pressed: #000000;
  --ink-on: #FFFFFF;
}
@media (prefers-color-scheme: dark) {
  :root {
    --ink: #F5F5F7;
    --ink-hover: #D2D2D7;
    --ink-pressed: #FFFFFF;
    --ink-on: #1D1D1F;
  }
}

/* —— 顶栏：墨蓝横幅 → 白色毛玻璃顶栏 —— */
header {
  background: var(--overlay-surface);
  -webkit-backdrop-filter: var(--blur-surface);
  backdrop-filter: var(--blur-surface);
  color: var(--text-primary);
  padding: 0 var(--space-6);
  min-height: 60px;
  border-bottom: 1px solid var(--separator);
  position: sticky;
  top: 0;
  z-index: 20;
}
header h1 {
  font-size: var(--font-size-title-3);
  font-weight: var(--font-weight-semibold);
  letter-spacing: -0.01em;
}
#sessionBadge {
  font-size: var(--font-size-label);
  color: var(--text-tertiary);
  font-weight: var(--font-weight-medium);
}
#sessionRestore:empty { display: none; }

/* —— 主体：放宽窄列（业务页更舒展），登录页单独居中 —— */
main { max-width: 1200px; margin: var(--space-6) auto; padding: 0 var(--space-6); }

/* —— 通知条：克制化（浅灰底、细边框、次级字）—— */
.notice {
  background: var(--surface-sunken);
  border: 1px solid var(--separator);
  border-radius: var(--radius-secondary);
  color: var(--text-secondary);
  font-size: var(--font-size-label);
  line-height: var(--line-height-body);
}

/* —— 登录卡：单栏居中（Apple 登录范式，黑白玻璃卡）—— */
.auth-card {
  grid-template-columns: minmax(0, 1fr);
  max-width: 440px;
  margin: var(--space-10) auto;
  gap: var(--space-6);
  padding: var(--space-8);
  border-radius: var(--radius-card);
  border: 1px solid var(--separator);
  box-shadow: var(--shadow-2);
}
.auth-brand h2 { font-size: var(--font-size-title-1); margin: 0 0 var(--space-2); }
.auth-brand .auth-lede { font-size: var(--font-size-body); margin: 0; }
.auth-points { display: none; }

/* —— 按钮体系：主按钮实心近黑 / 次级浅灰 / 审核语义色保留 —— */
button:not(:disabled) {
  background: var(--surface-sunken);
  color: var(--text-primary);
  border: 1px solid var(--separator);
  font-weight: var(--font-weight-medium);
}
button:not(:disabled):hover { background: var(--separator); }

#loginForm button, #submitCase, #rsSubmit,
#fxSaveFxRate, #exportAgentInput, #exportAgentInputXlsx {
  background: var(--ink);
  color: var(--ink-on);
  border-color: transparent;
}
#loginForm button:hover:not(:disabled), #submitCase:hover:not(:disabled),
#rsSubmit:hover:not(:disabled), #fxSaveFxRate:hover:not(:disabled),
#exportAgentInput:hover:not(:disabled), #exportAgentInputXlsx:hover:not(:disabled) {
  background: var(--ink-hover);
}

#rsApprove:not(:disabled) { background: var(--success-soft); color: var(--success); border-color: transparent; }
#rsApprove:hover:not(:disabled) { background: var(--success); color: var(--accent-on); }
#rsReturn:not(:disabled) { background: var(--warning-soft); color: var(--warning); border-color: transparent; }
#rsReturn:hover:not(:disabled) { background: var(--warning); color: var(--accent-on); }

/* —— 输入框：白底细边框，focus 蓝环（覆盖 legacy #8797aa 灰蓝）—— */
input, select, textarea {
  background: var(--surface-card);
  border-color: var(--separator-strong);
}
input:focus, select:focus, textarea:focus {
  border-color: var(--accent);
}

/* —— 登录表单：按钮全宽 —— */
.auth-form button { width: 100%; }

/* —— 登录卡：品牌→表单为主体，JS 注入的技术说明/演示入口降为底部脚注（grid order 重排，不动 DOM/JS）—— */
.auth-brand { order: 1; }
.auth-form { order: 2; }
.auth-card > p {
  order: 10;
  grid-column: 1 / -1;
  margin: 0;
  font-size: var(--font-size-label);
  color: var(--text-tertiary);
  line-height: var(--line-height-body);
  border-top: 1px solid var(--separator);
  padding-top: var(--space-3);
}
.auth-card > a {
  order: 11;
  grid-column: 1 / -1;
  font-size: var(--font-size-label);
  color: var(--text-tertiary);
}

/* —— 会话状态提示（#sessionRestore 探测文案）：克制为浅灰状态条 —— */
#sessionRestore:not(:empty) {
  background: var(--neutral-soft);
  border: 1px solid var(--separator);
  border-radius: var(--radius-secondary);
  color: var(--text-secondary);
  font-size: var(--font-size-label);
  line-height: var(--line-height-body);
  padding: var(--space-3) var(--space-4);
  margin: var(--space-4) auto;
  max-width: 1200px;
  box-sizing: border-box;
}

/* =====================================================================
   S11 —— 业务页精修（2026-09-24）：代理视角侧栏空白消除 + 对比表可读性
   审核人侧栏 hidden 时 caseView 单列化（消除 280px 空列）；
   对比表表头/金额不拆行、右对齐等宽、普通行斑马纹。
   ===================================================================== */

/* 代理视角（无审核人侧栏）单列化：消除左侧 280px 空白列 */
#caseView:has(.reviewer-cases[hidden]) {
  grid-template-columns: minmax(0, 1fr);
}
#caseView:has(.reviewer-cases[hidden]) .case-main {
  grid-column: 1;
}

/* 对比表：表头完整显示（不截断） */
#rsComparisonScroll thead th {
  white-space: nowrap;
  padding: var(--space-2) var(--space-3);
}

/* 对比表：金额列不拆行、右对齐、等宽数字；科目/原因列左对齐 */
#rsComparisonScroll #rsComparisonRows td {
  white-space: nowrap;
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-family: var(--font-mono);
}
#rsComparisonScroll #rsComparisonRows td:first-child {
  text-align: left;
  white-space: nowrap;
  font-family: var(--font-sans);
}
#rsComparisonScroll #rsComparisonRows td:last-child {
  text-align: left;
  white-space: normal;
  font-family: var(--font-sans);
}

/* 普通数据行斑马纹（合计/小计行保留既有浅灰底，不叠加） */
#rsComparisonScroll #rsComparisonRows tr:nth-child(even):not([data-kind]) {
  background: var(--surface-sunken);
}

/* =====================================================================
   S12 —— 收入录入区：每个收入一行（名称在上、输入框在下全宽）
   用户诉求（2026-09-24）：一个收入一行，纵向展开（原「名称左+输入框右」改纵向）。
   ===================================================================== */
.rs-row {
  grid-template-columns: minmax(0, 1fr);
  align-items: stretch;
  gap: var(--space-1);
  padding: var(--space-3) var(--space-4);
}
.rs-row span:first-child {
  font-size: var(--font-size-label);
  color: var(--text-secondary);
  font-weight: var(--font-weight-medium);
  line-height: var(--line-height-tight);
}
.rs-row input {
  text-align: left;
  width: 100%;
  box-sizing: border-box;
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  min-height: var(--touch-target);
}

/* 提交审核按钮改近黑：S3 的 .entry-actions #rsSubmit（accent 蓝）specificity 高于 S10 的 #rsSubmit，需同 specificity 覆盖 */
.entry-actions #rsSubmit {
  background: var(--ink);
  color: var(--ink-on);
}
.entry-actions #rsSubmit:hover:not(:disabled) {
  background: var(--ink-hover);
  color: var(--ink-on);
}

/* =====================================================================
   S13 —— 角色工作台拆分（2026-09-24）：顶部导航 + 无侧栏单列化
   ===================================================================== */

/* 顶栏改 flex 横排：标题 + 导航 + 会话徽标 */
header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-4);
}
header h1 { margin: 0; flex: 0 0 auto; }

/* 顶部导航：锚点横排、胶囊态、可换行 */
.topnav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-1);
  flex: 1 1 auto;
}
.topnav a {
  display: inline-flex;
  align-items: center;
  padding: var(--space-1) var(--space-3);
  min-height: var(--touch-target);
  border-radius: 999px;
  font-size: var(--font-size-label);
  color: var(--text-secondary);
  text-decoration: none;
  white-space: nowrap;
  transition: background .12s ease, color .12s ease;
}
.topnav a:hover { background: var(--surface-sunken); color: var(--text-primary); }

/* 会话徽标固定右侧 */
#sessionBadge { flex: 0 0 auto; }

/* 无审核人侧栏的页面（代理工作台 index.html）单列化 */
#caseView:not(:has(.reviewer-cases)) {
  grid-template-columns: minmax(0, 1fr);
}
#caseView:not(:has(.reviewer-cases)) .case-main {
  grid-column: 1;
}

/* 登录首屏：技术信息折叠为卡片底部脚注，不抢占主任务。 */
.auth-card > .page-tech-details {
  order: 12;
  grid-column: 1 / -1;
  margin: 0;
  padding-top: var(--space-2);
  border-top: 1px solid var(--separator);
}
.auth-card > .page-tech-details[open] .notice {
  margin-top: var(--space-2);
}

/* 审核操作区保持清晰：理由输入在操作按钮之后占满整行。 */
#review .toolbar { margin-bottom: var(--space-4); }
#review .review-actions { justify-content: flex-start; }
#review #rsReturnReason { min-height: 96px; }

@media (max-width: 700px) {
  header { align-items: flex-start; }
  .topnav { width: 100%; order: 3; overflow-x: auto; flex-wrap: nowrap; padding-bottom: var(--space-1); }
  #sessionBadge { margin-left: auto; }
}

/* =====================================================================
   S14 —— 截图审计修复（2026-09-24）：案例状态徽章防竖排 + 审核按钮主次分明
   ===================================================================== */
/* 审核人列表项：状态徽章（已提交/已退回）在窄容器里被 flex 压成竖排，
   固定不收缩、不换行，保持横向可读。 */
.reviewer-case-item .chip {
  flex: 0 0 auto;
  white-space: nowrap;
}
/* 审核通过 = 主操作（实心绿），退回 = 次操作（描边橙）。颜色语义不变，仅拉开层级。 */
.review-actions #rsApprove { background: var(--success); color: var(--accent-on); border-color: transparent; }
.review-actions #rsApprove:hover:not(:disabled) { background: var(--success); filter: brightness(1.08); }
.review-actions #rsReturn { background: transparent; color: var(--warning); border: 1px solid var(--warning); }
.review-actions #rsReturn:hover:not(:disabled) { background: var(--warning-soft); }
/* 保存汇率为低频维护动作，降级为描边次级，让「审核通过」成为审核工作台唯一强主操作。 */
#fxSaveFxRate { background: transparent; color: var(--accent); border: 1px solid var(--accent); }
#fxSaveFxRate:hover:not(:disabled) { background: var(--accent-soft); color: var(--accent); }

/* =====================================================================
   S15 —— 角色界面整改（2026-09-24）：双层头部 + 64px 两列收入行 +
          顶部案例选择器 + 紧凑合计/操作条 + 灰字对比度
   ===================================================================== */

/* 头部：品牌+会话一行，导航独立一行（移动端）；桌面保持一行 */
.header-top { display: flex; align-items: center; gap: var(--space-3); min-width: 0; flex: 1 1 auto; }
.header-top h1 { margin: 0; white-space: nowrap; }
.header-top #sessionBadge { margin-left: auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 46%; font-size: var(--font-size-label); }
@media (max-width: 700px) {
  header { align-items: stretch; }
  .header-top { width: 100%; flex: 0 0 auto; }
  .header-top h1 { font-size: var(--font-size-title-2); }
  .topnav { width: 100%; order: 3; overflow-x: auto; flex-wrap: nowrap; gap: var(--space-3); padding-bottom: var(--space-1); -webkit-overflow-scrolling: touch; }
  .topnav a { flex: 0 0 auto; }
}

/* 收入行：标签列自适应 + 固定金额列 240px，行高 60px（桌面）；移动端上下堆叠 */
.rs-row { grid-template-columns: minmax(0, 1fr) 240px; min-height: 60px; gap: var(--space-4); padding: var(--space-2) var(--space-4); }
.rs-row span:first-child { min-width: 0; overflow-wrap: anywhere; }
.rs-row input { width: 100%; }
@media (max-width: 700px) {
  .rs-row { grid-template-columns: minmax(0, 1fr); min-height: auto; }
}

/* 合计区紧凑 */
.summary-grid { gap: var(--space-2); }
.summary-grid > p { padding: var(--space-3) var(--space-4); }

/* 操作条：清晰分组，靠右集中 */
.entry-actions { background: var(--surface-sunken); border: 1px solid var(--separator); border-radius: var(--radius-secondary); padding: var(--space-3) var(--space-4); justify-content: flex-end; gap: var(--space-2); }
@media (max-width: 700px) {
  .entry-actions { flex-direction: column; align-items: stretch; }
  .entry-actions > * { width: 100%; }
}

/* 审核案例区：横跨顶部的紧凑选择器（不再占左栏），下方单列 */
#caseView:has(.reviewer-cases) { grid-template-columns: minmax(0, 1fr); }
#caseView:has(.reviewer-cases) > .reviewer-cases { grid-row: 1; grid-column: 1; position: static; margin-bottom: var(--space-4); border: 1px solid var(--separator); border-radius: var(--radius-secondary); padding: var(--space-3) var(--space-4); }
#caseView:has(.reviewer-cases) > .case-main { grid-row: 2; grid-column: 1; }
#rsReviewerCasesList { flex-direction: row; flex-wrap: wrap; gap: var(--space-2); }
#rsReviewerCasesList li { flex: 0 0 auto; min-width: 240px; }
@media (max-width: 700px) {
  #rsReviewerCasesList { flex-direction: column; }
  #rsReviewerCasesList li { width: 100%; min-width: 0; }
}

/* 灰字对比度提升到可读水平 */
:root { --text-tertiary: #6E6E73; }
@media (prefers-color-scheme: dark) {
  :root { --text-tertiary: #A7ADB6; }
}

/* 空状态：隐藏空占位，避免重复"尚未读取" */
#rsSubmitMarkdown:empty, #rsSubmitNotice:empty, #rsSubmitReview:empty, #rsSubmitSnapshot:empty, #rsSubmitVersion:empty { display: none; }

.comparison-scroll-hint { display: none; }

/* =====================================================================
   S16 —— 移动端财务对比：保留二维表关系，容器内横向浏览
   13 列数据若逐格卡片化会把单页拉得过长，也难以进行同一科目的横向比较。
   首列固定后，用户滑动数据列时仍能确认当前科目；滚动仅发生在表格容器内。
   ===================================================================== */
@media (max-width: 700px) {
  .comparison-scroll-hint {
    display: block;
    margin: var(--space-2) 0;
    color: var(--text-secondary);
    font-size: var(--font-size-label);
  }
  #rsComparisonScroll {
    overflow-x: auto;
    border: 1px solid var(--separator);
    border-radius: var(--radius-secondary);
    background: var(--surface-card);
    -webkit-overflow-scrolling: touch;
  }
  #rsComparisonScroll table {
    display: table;
    width: 1120px;
    min-width: 1120px;
    border-collapse: separate;
    border-spacing: 0;
  }
  #rsComparisonScroll thead { display: table-header-group; }
  #rsComparisonScroll tbody { display: table-row-group; }
  #rsComparisonScroll tr,
  #rsComparisonScroll #rsComparisonRows tr[data-kind] {
    display: table-row;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }
  #rsComparisonScroll th,
  #rsComparisonScroll #rsComparisonRows td {
    display: table-cell;
    width: auto;
    padding: var(--space-2) var(--space-3);
    white-space: nowrap;
    border-bottom: 1px solid var(--separator);
  }
  #rsComparisonScroll #rsComparisonRows td:first-child,
  #rsComparisonScroll thead th:first-child {
    position: sticky;
    left: 0;
    z-index: 1;
    min-width: 150px;
    background: var(--surface-card);
    box-shadow: 1px 0 0 var(--separator);
  }
  #rsComparisonScroll thead th:first-child { z-index: 2; background: var(--surface-sunken); }
  #rsComparisonScroll #rsComparisonRows tr:nth-child(even) td:first-child,
  #rsComparisonScroll #rsComparisonRows tr[data-kind="subtotal"] td:first-child {
    background: var(--surface-sunken);
  }
  #rsComparisonScroll #rsComparisonRows td[data-label]::before { display: none; }
}

/* =========================================================================
   S16 —— 业务模块页签（ABR pagination redesign, 2026-09-28）
   把纵向堆叠的业务模块改成真正的模块分页：role=tablist/tab/tabpanel。
   同一时刻只显示一个 tabpanel（[hidden] 控制），页签有准确当前态。
   视觉克制 Apple HIG：透明底、当前态底部下划线、焦点环、44px 触控、
   reduced-motion 降级。切页仅切换 visibility，不重算金额、不发请求。
   ========================================================================= */
.case-tabs { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1); }
.case-tabs [role="tab"] {
  appearance: none;
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  display: inline-flex;
  align-items: center;
  padding: var(--space-2) var(--space-3);
  min-height: var(--touch-target);
  font: inherit;
  font-size: var(--font-size-label);
  color: var(--text-secondary);
  cursor: pointer;
  white-space: nowrap;
  border-radius: 0;
  position: relative;
  transition: color .12s ease, border-color .12s ease, background .12s ease;
}
.case-tabs [role="tab"]:hover { color: var(--text-primary); background: var(--surface-sunken); }
.case-tabs [role="tab"][aria-selected="true"] {
  color: var(--text-primary);
  font-weight: 600;
  border-bottom-color: var(--accent);
}
.case-tabs [role="tab"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 4px;
}
/* 页签面板：仅通过 [hidden] 属性控制显隐 */
[role="tabpanel"][hidden] { display: none; }
/* 移动端：页签横向滚动而非挤压换行，保持 44px 触控 */
@media (max-width: 700px) {
  .case-tabs { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; width: 100%; }
  .case-tabs [role="tab"] { flex: 0 0 auto; }
}
@media (prefers-reduced-motion: reduce) {
  .case-tabs [role="tab"] { transition: none; }
}

/* S16a —— 案例列表 cursor 分页条（上一页/下一页/页码），44px 触控 */
.reviewer-pager {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-3);
}
.reviewer-pager button {
  min-height: var(--touch-target);
  padding: var(--space-1) var(--space-3);
}
.reviewer-pager span { color: var(--text-secondary); font-size: var(--font-size-label); }

/* S17 —— P2 审美精修：数据准备（B2）均衡双栏 + 提交/导出分区留白收紧 */
/* N 确认与汇率维护并排双栏，船东上传独立整行；移动端回单列。 */

/* S18 —— 概览操作头与对比表滚动边界 */
#panel-overview .toolbar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto auto;
  align-items: center;
  gap: var(--space-2) var(--space-3);
}
#panel-overview .toolbar h2 { margin: 0; white-space: nowrap; }
#panel-overview .toolbar a[href] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--touch-target);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--separator);
  border-radius: var(--radius-control);
  background: var(--surface-sunken);
  color: var(--text-secondary);
  text-decoration: none;
  white-space: nowrap;
}
#panel-overview .toolbar a[href]:hover { background: var(--separator); color: var(--text-primary); }
.comparison-scroll-hint { display: block; margin: var(--space-2) 0; color: var(--text-secondary); font-size: var(--font-size-label); }
#rsComparisonScroll {
  overflow-x: auto;
  scrollbar-gutter: stable;
  border: 1px solid var(--separator);
  border-radius: var(--radius-secondary);
  background: var(--surface-card);
  -webkit-overflow-scrolling: touch;
}
@media (max-width: 700px) {
  #panel-overview .toolbar { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #panel-overview .toolbar h2 { grid-column: 1 / -1; }
  #panel-overview .toolbar a[href], #panel-overview .toolbar button { width: 100%; min-width: 0; }
}

#panel-prepare:not([hidden]) { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3); align-items: start; }
#panel-prepare #review { grid-column: 1; }
#panel-prepare #fxSection { grid-column: 2; }
#panel-prepare #ownerReportSection { grid-column: 1 / -1; }
@media (max-width: 700px) {
  #panel-prepare:not([hidden]) { grid-template-columns: 1fr; }
  #panel-prepare #review, #panel-prepare #fxSection, #panel-prepare #ownerReportSection { grid-column: 1; }
}
/* A4/B5：提交与交付结果各分区（交付结果/历史提交/呈现行）留白收紧、层级清晰 */
#rsSubmitView h3, #panel-deliver h3, #panel-submit h3 {
  margin-top: var(--space-3);
  margin-bottom: var(--space-2);
  border-bottom: 1px solid var(--border, #e0e0e0);
  padding-bottom: var(--space-1);
}
#rsSubmitView section, #panel-deliver section, #panel-submit section { margin: var(--space-2) 0; }

/* S19 —— 界面规范化终轮：披露、交付、准备表单与窄屏节奏 */
.tech-details { margin-block: var(--space-2); min-width: 0; }
.tech-details > summary {
  display: list-item;
  min-height: var(--touch-target);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--separator);
  border-radius: var(--radius-control);
  background: var(--surface-sunken);
  color: var(--text-secondary);
  font-size: var(--font-size-label);
  font-weight: var(--font-weight-medium);
  line-height: var(--line-height-body);
  cursor: pointer;
  list-style: disclosure-closed;
  list-style-position: inside;
}
.tech-details > summary::marker { color: var(--text-tertiary); }
.tech-details[open] > summary { color: var(--text-primary); border-color: var(--separator-strong); border-radius: var(--radius-control) var(--radius-control) 0 0; list-style-type: disclosure-open; }
.tech-details[open] > :not(summary) {
  margin: 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--separator);
  border-top: 0;
  background: var(--surface-sunken);
  color: var(--text-secondary);
  font-size: var(--font-size-label);
  line-height: var(--line-height-body);
  overflow-wrap: anywhere;
}
.tech-details[open] > :last-child { border-radius: 0 0 var(--radius-secondary) var(--radius-secondary); }

/* A4/B5：历史、呈现与交付列表统一为无圆点的信息行；文本内容仍原样显示。 */
#rsSubmissionList { list-style: none; margin: var(--space-2) 0 var(--space-3); padding: 0; min-width: 0; }
#rsPresentationList { list-style: none; margin: var(--space-2) 0 var(--space-3); padding: 0; min-width: 0; }
#rsArtifactsList { list-style: none; margin: var(--space-2) 0 var(--space-3); padding: 0; min-width: 0; }
#rsPresentationDiffList { list-style: none; margin: var(--space-2) 0 var(--space-3); padding: 0; min-width: 0; }
#rsSubmissionList > li, #rsPresentationList > li, #rsArtifactsList > li, #rsPresentationDiffList > li {
  min-width: 0;
  margin: 0;
  padding: var(--space-3) var(--space-2);
  border-bottom: 1px solid var(--separator);
  overflow-wrap: anywhere;
}
#rsSubmissionList > li:first-child, #rsArtifactsList > li:first-child, #rsPresentationList > li:first-child { border-top: 1px solid var(--separator); }
#rsSubmissionList > li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); }
#rsSubmissionList > li > :first-child { flex: 1 1 100%; min-width: 0; color: var(--text-secondary); font-size: var(--font-size-label); line-height: var(--line-height-body); }
#rsPresentationList > li { color: var(--text-primary); font-variant-numeric: tabular-nums; }
#rsArtifactsList > li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); }
#rsSubmitView > h3, #panel-deliver h3 { margin-block: var(--space-5) var(--space-2); }
#rsSubmitVersion, #rsSubmitMarkdown, #rsSubmitNotice, #rsSubmitSnapshot, #rsPresentationMeta { color: var(--text-secondary); font-size: var(--font-size-label); overflow-wrap: anywhere; }
#rsArtifactsRefresh, #rsPresentationRefresh, #rsAdoptSubmit, #rsListMore {
  min-height: var(--touch-target);
  padding: var(--space-2) var(--space-4);
  background: var(--surface-sunken);
  color: var(--text-primary);
  border: 1px solid var(--separator);
}
#rsArtifactsRefresh { background: var(--ink); color: var(--ink-on); border-color: transparent; }
#rsArtifactsRefresh:hover:not(:disabled) { background: var(--ink-hover); }
#rsPresentationRefresh, #rsAdoptSubmit, #rsListMore { font-size: var(--font-size-label); }
#rsSubmitView #rsArtifactsError:empty, #rsSubmitView #rsArtifactsStatus:empty { display: none; }
#rsSubmitView #rsArtifactsError:not(:empty), #rsSubmitView #rsArtifactsStatus:not(:empty) { margin-block: var(--space-2); }
#exportView .export-card { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; }
#exportView .export-card > h2, #exportView .export-card > .notice, #exportView .export-card > .tech-details,
#exportView #exportBinding, #exportView #exportAgentInputMessage, #exportView #exportMessage { grid-column: 1 / -1; }
#exportView #exportAgentInput, #exportView #exportAgentInputXlsx { width: 100%; min-height: var(--touch-target); }
#exportView #exportAgentInput { grid-column: 1; background: var(--ink); color: var(--ink-on); }
#exportView #exportAgentInputXlsx { grid-column: 2; background: var(--surface-sunken); color: var(--text-primary); border: 1px solid var(--separator); }
#exportView #exportData { grid-column: 1 / -1; width: 100%; background: var(--surface-sunken); color: var(--text-tertiary); border: 1px dashed var(--separator-strong); }
#exportView #exportData:disabled { opacity: .72; cursor: not-allowed; }

/* B2：移除汇率表单的内嵌卡片外观，字段和操作沿共同栅格对齐。 */
#fxSection #fxRateForm {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-3);
  align-items: end;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
#fxSection #fxRateForm label { min-width: 0; margin: 0; gap: var(--space-1); }
#fxSection #fxRateForm input { width: 100%; min-width: 0; min-height: var(--touch-target); margin-top: 0; }
#fxSection #fxRateForm #fxRate, #fxSection #fxRateForm #fxSaveFxRate,
#fxSection #fxRateForm #fxStatus, #fxSection #fxRateForm #fxError { grid-column: 1 / -1; }
#fxSection #fxRateForm #fxSaveFxRate { width: 100%; min-height: var(--touch-target); margin: 0; }

/* 窄屏导航：两侧渐隐 + 可见细滚动条提示；tab 自身仍保持完整 44px 触控面。 */
@media (max-width: 700px) {
  header, main, #caseView, .case-main, [role="tabpanel"] { min-width: 0; max-width: 100%; }
  .topnav {
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
    padding: 0 var(--space-3) var(--space-2);
    scroll-padding-inline: var(--space-4);
    overflow-x: auto;
    flex-wrap: nowrap;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    scrollbar-color: var(--separator-strong) transparent;
    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
    mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
    scroll-behavior: smooth;
  }
  .case-tabs[role="tablist"] [role="tab"] { min-height: var(--touch-target); scroll-margin-inline: var(--space-4); scroll-snap-align: center; }
  .rs-row { gap: var(--space-1); padding: var(--space-2) var(--space-3); margin-bottom: var(--space-2); }
  .rs-row span:first-child { line-height: var(--line-height-tight); }
  .rs-row input { min-height: var(--touch-target); margin-top: 0; }
  #fxSection #fxRateForm { grid-template-columns: minmax(0, 1fr); gap: var(--space-2); }
  #fxSection #fxRateForm > * { grid-column: 1 / -1; }
  #exportView .export-card { grid-template-columns: minmax(0, 1fr); gap: var(--space-2); }
  #exportView .export-card > * { grid-column: 1 / -1; }
  #exportView #exportAgentInput, #exportView #exportAgentInputXlsx, #exportView #exportData { grid-column: 1 / -1; min-width: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .topnav { scroll-behavior: auto; }
}

/* =====================================================================
   S17 —— 登录首屏：静谧星图（2026-10-02）
   仅在登录/首登改密状态启用；进入业务工作台后恢复既有壳层。
   ===================================================================== */
body:has(#loginView:not(.hidden)),
body:has(#passwordChangeView:not(.hidden)) {
  min-height: 100vh;
  background-color: #07111e;
  background-image: url("assets/annual-budget-star-map.png");
  background-position: center;
  background-size: cover;
  background-attachment: fixed;
  color: #f4f7fb;
}

body:has(#loginView:not(.hidden)) > header,
body:has(#passwordChangeView:not(.hidden)) > header {
  display: none;
}

body:has(#loginView:not(.hidden)) > main,
body:has(#passwordChangeView:not(.hidden)) > main {
  width: 100%;
  max-width: none;
  min-height: 100vh;
  margin: 0;
  padding: 0;
}

body:has(#loginView:not(.hidden)) > #sessionRestore:not(:empty),
body:has(#passwordChangeView:not(.hidden)) > #sessionRestore:not(:empty) {
  position: fixed;
  z-index: 5;
  top: auto;
  bottom: var(--space-4);
  right: var(--space-4);
  width: min(440px, calc(100% - 32px));
  margin: 0;
  color: #d6e3f2;
  background: rgba(8, 20, 34, .92);
  border-color: rgba(127, 161, 197, .28);
  box-shadow: 0 16px 44px rgba(0, 0, 0, .28);
  backdrop-filter: blur(14px);
}

body:has(#loginView:not(.hidden)) .auth-card,
body:has(#passwordChangeView:not(.hidden)) .auth-card {
  width: 100%;
  max-width: none;
  min-height: 100vh;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: minmax(360px, 31.5%) minmax(0, 1fr);
  gap: 0;
  color: #f4f7fb;
  background: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}

body:has(#loginView:not(.hidden)) .auth-brand,
body:has(#passwordChangeView:not(.hidden)) .auth-brand {
  position: relative;
  min-width: 0;
  min-height: 100vh;
  padding: clamp(48px, 6.5vh, 76px) clamp(32px, 4vw, 64px) 44px;
  display: flex;
  flex-direction: column;
  gap: 0;
  color: #f4f7fb;
  background: rgba(4, 13, 24, .60);
  border-right: 1px solid rgba(133, 164, 198, .20);
  backdrop-filter: blur(10px);
}

.auth-product {
  padding-bottom: 36px;
  border-bottom: 1px solid rgba(133, 164, 198, .22);
}

.auth-product-name {
  margin: 0;
  color: #f7f9fc;
  font-size: clamp(25px, 2.2vw, 34px);
  line-height: 1.2;
  font-weight: 650;
  letter-spacing: -.025em;
}

.auth-product-copy {
  max-width: 310px;
  margin: 14px 0 0;
  color: #9baabd;
  font-size: 14px;
  line-height: 1.65;
}

.auth-role-nav {
  display: flex;
  flex-direction: column;
  gap: 18px;
  margin-top: 34px;
}

.auth-role-option {
  position: relative;
  min-height: 86px;
  padding: 16px 14px 16px 24px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 7px;
  color: #8f9daf;
  text-decoration: none;
  border-left: 2px solid rgba(113, 143, 176, .32);
  transition: color 160ms ease, border-color 160ms ease, background-color 160ms ease;
}

.auth-role-option:hover {
  color: #eef5fd;
  background: rgba(28, 105, 187, .08);
  border-left-color: rgba(42, 149, 255, .62);
}

.auth-role-option.is-active {
  color: #f6f9fd;
  border-left-color: #2196ff;
  background: transparent;
}

.auth-role-option span {
  color: inherit;
  font-size: 19px;
  line-height: 1.25;
  font-weight: 600;
}

.auth-role-option small {
  color: #8f9daf;
  font-size: 13px;
  line-height: 1.55;
}

.auth-role-option.is-active small { color: #aebdce; }

.auth-brand-note {
  margin: auto 0 0;
  color: #8f9daf;
  font-size: 13px;
  letter-spacing: .16em;
}

body:has(#loginView:not(.hidden)) .auth-form,
body:has(#passwordChangeView:not(.hidden)) .auth-form {
  width: min(100%, 650px);
  margin: auto;
  padding: 64px 48px;
  color: #f4f7fb;
}

body:has(#loginView:not(.hidden)) .auth-form h2,
body:has(#passwordChangeView:not(.hidden)) .auth-form h2 {
  margin: 0;
  color: #f8fbff;
  font-size: clamp(36px, 3.3vw, 48px);
  line-height: 1.18;
  font-weight: 650;
  letter-spacing: -.035em;
}

body:has(#loginView:not(.hidden)) .auth-form .auth-lede,
body:has(#passwordChangeView:not(.hidden)) .auth-form .auth-lede {
  margin: 14px 0 32px;
  color: #9cabbc;
  font-size: 18px;
  line-height: 1.55;
}

body:has(#loginView:not(.hidden)) .auth-form form,
body:has(#passwordChangeView:not(.hidden)) .auth-form form {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

body:has(#loginView:not(.hidden)) .auth-form label,
body:has(#passwordChangeView:not(.hidden)) .auth-form label {
  margin: 0;
  gap: 9px;
  color: #d7e0ea;
  font-size: 14px;
  font-weight: 560;
}

body:has(#loginView:not(.hidden)) .auth-form input,
body:has(#passwordChangeView:not(.hidden)) .auth-form input {
  min-height: 60px;
  margin: 0;
  padding: 0 18px;
  color: #f4f7fb;
  caret-color: #2997ff;
  background: rgba(14, 28, 44, .64);
  border: 1px solid rgba(135, 164, 195, .42);
  border-radius: 8px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .02);
}

body:has(#loginView:not(.hidden)) .auth-form input::placeholder,
body:has(#passwordChangeView:not(.hidden)) .auth-form input::placeholder {
  color: #77879a;
}

body:has(#loginView:not(.hidden)) .auth-form input:focus,
body:has(#passwordChangeView:not(.hidden)) .auth-form input:focus {
  border-color: #2997ff;
  outline: 0;
  box-shadow: 0 0 0 3px rgba(41, 151, 255, .22);
}

body:has(#loginView:not(.hidden)) #loginForm > button,
body:has(#passwordChangeView:not(.hidden)) #passwordChangeForm > button {
  width: 100%;
  min-height: 60px;
  margin-top: 4px;
  color: #fff;
  background: #087af0;
  border: 1px solid #2497ff;
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(4, 100, 214, .23);
  font-size: 16px;
  font-weight: 650;
}

body:has(#loginView:not(.hidden)) #loginForm > button:hover:not(:disabled),
body:has(#passwordChangeView:not(.hidden)) #passwordChangeForm > button:hover:not(:disabled) {
  color: #fff;
  background: #168bff;
}

body:has(#loginView:not(.hidden)) .auth-form .error,
body:has(#passwordChangeView:not(.hidden)) .auth-form .error {
  margin: 0;
  color: #ff9188;
  font-size: 13px;
}

.auth-switch {
  width: 100%;
  min-height: 56px;
  margin-top: 24px;
  padding-top: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #36a2ff;
  border-top: 1px solid rgba(133, 164, 198, .24);
  text-decoration: none;
  font-size: 14px;
  font-weight: 560;
}

.auth-switch:hover { color: #8dcbff; }

.auth-security {
  margin: 56px 0 0;
  color: #8291a3;
  text-align: center;
  font-size: 12px;
  line-height: 1.55;
}

body:has(#loginView:not(.hidden)) .auth-card > p,
body:has(#loginView:not(.hidden)) .auth-card > a,
body:has(#loginView:not(.hidden)) .auth-card > .page-tech-details,
body:has(#passwordChangeView:not(.hidden)) .auth-card > p,
body:has(#passwordChangeView:not(.hidden)) .auth-card > a,
body:has(#passwordChangeView:not(.hidden)) .auth-card > .page-tech-details {
  display: none;
}

@media (max-width: 820px) {
  body:has(#loginView:not(.hidden)),
  body:has(#passwordChangeView:not(.hidden)) {
    background-position: 32% center;
    background-attachment: scroll;
  }

  body:has(#loginView:not(.hidden)) .auth-card,
  body:has(#passwordChangeView:not(.hidden)) .auth-card {
    grid-template-columns: minmax(0, 1fr);
    align-content: start;
  }

  body:has(#loginView:not(.hidden)) .auth-brand,
  body:has(#passwordChangeView:not(.hidden)) .auth-brand {
    min-height: 0;
    padding: 28px 24px 20px;
    border-right: 0;
    border-bottom: 1px solid rgba(133, 164, 198, .20);
    background: rgba(4, 13, 24, .72);
  }

  .auth-product { padding-bottom: 20px; }
  .auth-product-name { font-size: 25px; }
  .auth-product-copy { margin-top: 8px; }
  .auth-role-nav { flex-direction: row; gap: 10px; margin-top: 18px; }
  .auth-role-option { width: 50%; min-height: 76px; padding: 11px 10px 11px 15px; }
  .auth-role-option span { font-size: 16px; }
  .auth-role-option small { font-size: 12px; }
  .auth-brand-note { display: none; }

  body:has(#loginView:not(.hidden)) .auth-form,
  body:has(#passwordChangeView:not(.hidden)) .auth-form {
    width: 100%;
    margin: 0;
    padding: 34px 24px 120px;
    background: rgba(4, 13, 24, .42);
  }

  body:has(#loginView:not(.hidden)) .auth-form h2,
  body:has(#passwordChangeView:not(.hidden)) .auth-form h2 {
    font-size: 32px;
  }

  body:has(#loginView:not(.hidden)) .auth-form .auth-lede,
  body:has(#passwordChangeView:not(.hidden)) .auth-form .auth-lede {
    margin: 10px 0 26px;
    font-size: 16px;
  }

  .auth-security { margin-top: 36px; }
}

@media (max-width: 430px) {
  .auth-role-option { min-height: 86px; }
  .auth-role-option small { line-height: 1.4; }
  body:has(#loginView:not(.hidden)) .auth-form,
  body:has(#passwordChangeView:not(.hidden)) .auth-form { padding-inline: 20px; }
}
