@import url('./tokens.css');
@import url('./decision-panel.css');

/* ============================================================ 基础 */

*, *::before, *::after { box-sizing: border-box; }

html, body { height: 100%; overflow-x: clip; }

/* `hidden` 属性必须真的能藏住元素（走查 F10）。
 *
 * 坑：`hidden` 靠浏览器默认样式表的 `[hidden]{display:none}` 生效，而
 * **作者样式表的任何 display 声明都会盖过它**（与选择器优先级无关，
 * 作者样式整体高于浏览器默认样式）。本项目 `.devswitch{display:flex}` 正是如此，
 * 导致开发者专属的“切换机构”控件（含“目标机构 organization_id”输入框）
 * 对普通 `HOSPITAL_USER` 一直可见。
 *
 * 在这里统一兜底，而不是逐个元素去补 display。
 */
[hidden] { display: none !important; }

/* 移动端横向溢出修复（2026-09-17 真人走查 F5）。
 *
 * 现象：iPhone 14（设备宽 390）上页面可左右拖动 52px。实测三口径：
 *   innerWidth 442 / clientWidth 390 / scrollWidth 442 —— **布局视口被撑宽**，
 *   而 .shell 内容本身只有 390，不是某个元素写死宽度。
 *
 * 为何用 clip 而非 hidden：本应用有 `.instrument { position: sticky }`。
 * `overflow-x: hidden` 会**建立滚动容器**，把 sticky 的参照系改掉；
 * `overflow-x: clip` 只裁切、不建立滚动容器，sticky 行为不变。
 *
 * ⚠️ 两个实测坑（浏览器里逐条验过，别凭直觉写）：
 *   1. 必须 **同时** 写在 html 和 body 上。只写 html → 无效（仍 442）。
 *   2. 必须在**加载前**生效才拦得住：布局视口膨胀是加载时算定的，
 *      加载后再注入样式不会缩回 390。所以改完必须重新加载验证，
 *      不能在已渲染的页面上加 style 试。
 */

body {
  margin: 0;
  font-family: var(--font);
  font-size: var(--t-body);
  line-height: 1.62;
  color: var(--ink);
  background: var(--space);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* 空间深度：一层极缓的径向光，来自右侧仪器所在方位 */
body::before {
  content: '';
  position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(1100px 800px at 74% 42%, rgba(14, 92, 216, 0.20), transparent 62%),
    radial-gradient(900px 700px at 96% 88%, rgba(7, 59, 132, 0.24), transparent 68%),
    linear-gradient(168deg, var(--env-1) 0%, var(--space) 58%, #020610 100%);
}

/* 背景层 body::before 是 position:fixed; z-index:0 —— 按绘制顺序它画在
   普通流内容之上（pointer-events:none 只挡事件，不挡像素）。
   所以任何直接挂进 #root 且自身无定位的视图（登录页就是）会被整层盖住：
   DOM 在、Playwright 判"可见"、截图像素一片空白。
   把 #root 抬到背景层之上，从容器层统一保证内容可见。 */
#root { position: relative; z-index: 1; }

button { font: inherit; color: inherit; cursor: pointer; }

:focus-visible {
  outline: 2px solid var(--cyan);
  outline-offset: 3px;
  border-radius: 4px;
}

::selection { background: rgba(24, 213, 210, 0.28); }

/* ============================================================ 外壳 */

.shell {
  position: relative; z-index: 1;
  display: grid;
  grid-template-rows: 68px auto auto 1fr;
  grid-template-columns: 92px 1fr;
  /* R11-R13：第三行是核验人面板（mreview-host），隐藏时高度为 0 */
  grid-template-areas: "head head" "devswitch devswitch" "review review" "rail main";
  min-height: 100vh;
}

/* -------- 顶栏：机构上下文。这是"被认出"的第一句话。 */

.head {
  grid-area: head;
  display: flex; align-items: center; gap: var(--s5);
  padding: 0 var(--s6) 0 var(--s5);
  border-bottom: 1px solid var(--line);
  backdrop-filter: blur(14px);
}

.head__brand { display: flex; align-items: center; gap: var(--s3); }
.head__mark { width: 34px; height: 34px; display: block; }
.head__mark img, .head__mark svg { width: 100%; height: 100%; display: block; }
.head__name { font-size: 19px; font-weight: 600; letter-spacing: 0.14em; }

.head__ctx {
  padding-left: var(--s5);
  border-left: 1px solid var(--line);
  color: var(--ink-2); font-size: var(--t-small); letter-spacing: 0.04em;
}
.head__ctx b { color: var(--ink); font-weight: 500; }

.head__spacer { flex: 1; }

.head__user { display: flex; align-items: center; gap: var(--s3); }
.head__avatar {
  width: 34px; height: 34px; border-radius: 50%;
  background: linear-gradient(145deg, var(--royal), var(--navy));
  display: grid; place-items: center; font-size: var(--t-small); font-weight: 600;
}
.head__who { line-height: 1.3; }
.head__who i { display: block; font-style: normal; font-size: 14px; }
.head__who span { display: block; font-size: var(--t-micro); color: var(--ink-3); }

/* -------- 左栏：六个一级体验空间。不增加第七个。 */

.rail {
  grid-area: rail;
  display: flex; flex-direction: column;
  padding-top: var(--s5);
  border-right: 1px solid var(--line);
}

.rail__item {
  position: relative;
  width: 100%; padding: 13px 0 13px 4px;
  background: none; border: 0;
  color: var(--ink-3); font-size: var(--t-small); letter-spacing: .08em;
  text-align: center;
  transition: color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.rail__item::before {
  content: ''; position: absolute; left: 0; top: 50%;
  width: 2px; height: 0; transform: translateY(-50%);
  background: var(--cyan); border-radius: 0 2px 2px 0;
  transition: height var(--dur-mid) var(--ease);
}
.rail__item:hover { color: var(--ink-2); background: rgba(255,255,255,.03); }
.rail__item[aria-current="page"] { color: var(--ink); background: rgba(14,92,216,.14); }
.rail__item[aria-current="page"]::before { height: 22px; }

/* -------- 主区 */

.main { grid-area: main; min-width: 0; position: relative; }

.screen {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 460px;
  min-height: calc(100vh - 68px);
}
.screen--single { grid-template-columns: minmax(0, 1fr); }

.col-decision {
  padding: var(--s7) var(--s7) 196px var(--s7);
  min-width: 0; max-width: 860px;
}
.col-instrument { position: relative; min-width: 0; }

/* ============================================================ Today */


.today__hello {
  margin-top: 0;
  margin: var(--s4) 0 var(--s3);
  font-size: var(--t-display); font-weight: 300; letter-spacing: 0.03em;
}
.today__line {
  margin: 0 0 var(--s2);
  font-size: var(--t-lead); font-weight: 400; color: var(--ink);
}
.today__sub { margin: 0; color: var(--ink-2); max-width: 46em; }

.today__actions { display: flex; gap: var(--s3); margin: var(--s6) 0 var(--s7); }

.btn {
  border: 1px solid var(--line-strong); background: transparent;
  color: var(--ink); padding: 11px 20px; border-radius: 999px;
  font-size: 14px; letter-spacing: 0.03em;
  transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.btn:hover { border-color: rgba(24,213,210,.5); background: rgba(24,213,210,.06); }
.btn--primary {
  background: linear-gradient(135deg, var(--royal), #0A47AE);
  border-color: transparent; font-weight: 500;
}
.btn--primary:hover { background: linear-gradient(135deg, #1668EE, #0C4EBE); }
.btn--quiet { border-color: var(--line); color: var(--ink-2); }
.btn:disabled { opacity: .4; cursor: not-allowed; }

/* -------- 值得关注的事项。是一份整理，不是 KPI 卡片墙。 */

.attn {
  border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--panel); backdrop-filter: blur(10px);
  overflow: hidden;
}
.attn__head {
  display: flex; align-items: baseline; justify-content: space-between;
  padding: var(--s4) var(--s5); border-bottom: 1px solid var(--line);
}
.attn__title { font-size: 15px; font-weight: 500; }
.attn__note { font-size: var(--t-small); color: var(--ink-3); }

.attn__row {
  display: grid; grid-template-columns: 4px 1fr auto;
  gap: var(--s4); align-items: center; width: 100%;
  padding: var(--s4) var(--s5);
  background: none; border: 0; border-bottom: 1px solid var(--line);
  text-align: left;
  transition: background var(--dur-fast) var(--ease);
}
.attn__row:last-child { border-bottom: 0; }
.attn__row:hover { background: rgba(14,92,216,.10); }

/* 阶段用色阶而非红黄绿：全部在蓝—青系内，深浅表达紧迫度 */
.attn__tick { width: 4px; height: 30px; border-radius: 2px; background: var(--ink-4); }
.attn__row[data-stage="NEEDS_JUDGMENT"] .attn__tick { background: var(--cyan); }
.attn__row[data-stage="NEEDS_CONFIRM"]  .attn__tick { background: var(--royal); }
.attn__row[data-stage="HAS_CHANGE"]     .attn__tick { background: var(--navy); }
.attn__row[data-stage="ENTERING_NEXT"]  .attn__tick { background: var(--ink-4); }

.attn__body h4 { margin: 0 0 3px; font-size: 15px; font-weight: 500; }
.attn__body p { margin: 0; font-size: var(--t-small); color: var(--ink-2); }
.attn__stage { font-size: var(--t-micro); color: var(--ink-3); letter-spacing: .08em; }
.attn__more { padding: var(--s4) var(--s5); }

/* MEDPROC-PORTFOLIO-TODAY-001-B: Portfolio 项以 decision_state 三态着色，仍是色阶而非红黄绿
   注：dataset.decisionState 在 DOM 上反射为 data-decision-state（连字符，非下划线）。 */
.attn__row[data-decision-state="NEEDS_JUDGMENT"] .attn__tick { background: var(--cyan); }
.attn__row[data-decision-state="PENDING"]        .attn__tick { background: var(--royal); }
.attn__row[data-decision-state="LOCKED"]         .attn__tick { background: var(--ink-4); }

/* -------- Today: 机构/角色行 + 计数行 + 当前最值得关注卡片 */

.today__org { color: var(--ink-3); font-size: var(--t-small); letter-spacing: .08em; }

.today__counts {
  display: flex; flex-wrap: wrap; gap: var(--s6);
  padding: var(--s4) var(--s5); border-bottom: 1px solid var(--line);
}
.today__count { display: flex; flex-direction: column; gap: 2px; }
.today__count-n { font-size: var(--t-lead); font-weight: 500; color: var(--ink); }
.today__count-k { font-size: var(--t-micro); color: var(--ink-3); letter-spacing: .06em; }

.lead-card {
  border: 1px solid var(--line-strong); border-radius: var(--r-lg);
  background: var(--panel-2); backdrop-filter: blur(10px);
  padding: var(--s5); margin: var(--s5) 0 var(--s6);
}
.lead-card__title { margin: var(--s2) 0 4px; font-size: var(--t-title); font-weight: 400; }
.lead-card__subtitle { margin: 0 0 var(--s4); color: var(--ink-2); }
.lead-card__facts { display: grid; gap: var(--s3); margin-bottom: var(--s5); }
.lead-card__fact { display: grid; grid-template-columns: 88px 1fr; gap: var(--s3); align-items: baseline; }
.lead-card__fact-k { color: var(--ink-3); font-size: var(--t-small); }
.lead-card__fact-v { color: var(--ink); font-size: var(--t-body); }

/* -------- Developer 视角切换机构：轻提示条，不是设置页 (A10/B6) */

.devswitch {
  grid-area: devswitch;
  display: flex; align-items: center; gap: var(--s3);
  padding: var(--s2) var(--s7); font-size: var(--t-small); color: var(--ink-2);
  border-bottom: 1px solid var(--line); background: rgba(14,92,216,.06);
}
.devswitch__input {
  background: transparent; border: 1px solid var(--line-strong); border-radius: 999px;
  color: var(--ink); padding: 5px 14px; font-size: var(--t-small); width: 220px;
}
.devswitch__btn {
  border: 1px solid var(--line-strong); background: transparent; color: var(--ink);
  border-radius: 999px; padding: 5px 16px; font-size: var(--t-small);
}
.devswitch__btn:disabled { opacity: .5; }
.devswitch__error { color: var(--cyan); }

/* -------- R11-R13：核验人入口与组织归属核验面板（只对 HOSPITAL_ADMIN 的凭据会话显示） */
.head__membership {
  border: 1px solid var(--line-strong); background: transparent; color: var(--ink);
  border-radius: 999px; padding: 5px 14px; font-size: var(--t-small); margin-right: var(--s3);
}
.mreview-host { grid-area: review; }
.mreview {
  padding: var(--s3) var(--s7); font-size: var(--t-small); color: var(--ink-2);
  border-bottom: 1px solid var(--line); background: rgba(14,92,216,.04);
  display: grid; gap: var(--s2);
}
.mreview__title { font-size: var(--t-body); color: var(--ink); margin: 0; }
.mreview__note, .mreview__status { margin: 0; color: var(--ink-3); }
.mreview__row {
  display: grid; grid-template-columns: 1fr; gap: 6px; padding: var(--s2) 0; border-top: 1px dashed var(--line);
}
.mreview__who { color: var(--ink); }
.mreview__meta { color: var(--ink-3); }
.mreview__sha, .mreview__basis-name, .mreview__note-input, .mreview__role {
  background: transparent; border: 1px solid var(--line-strong); border-radius: 999px;
  color: var(--ink); padding: 5px 14px; font-size: var(--t-small); max-width: 640px;
}
.mreview__result { color: var(--cyan); }
.mreview__result[data-approve-status="ok"] { color: var(--ink); }

/* 登记页复用登录页的版式 */
.register-page { min-height: 100vh; display: grid; place-items: center; padding: 24px; }
.register-form { width: min(460px, 100%); display: grid; gap: 10px; }
.register-form label { font-size: 13px; color: var(--muted, #6b7280); }
.register-form input, .register-form select { padding: 10px 12px; border: 1px solid var(--border, #d9dee5); border-radius: 8px; font-size: 14px; }
.register-status { min-height: 1.2em; font-size: 13px; }
.register-pending { width: min(460px, 100%); display: grid; gap: 10px; }

/* IC14-R12：机构选择器（省 → 市 → 医院）。轻提示条内联，不另开设置页。 */
.orgpick { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; }
.orgpick__sel {
  background: transparent; border: 1px solid var(--line-strong); border-radius: 999px;
  color: var(--ink); padding: 5px 10px; font-size: var(--t-small); max-width: 180px;
}
.orgpick__sel--hospital { max-width: 260px; }
.orgpick__query {
  background: transparent; border: 1px solid var(--line-strong); border-radius: 999px;
  color: var(--ink); padding: 5px 14px; font-size: var(--t-small); width: 150px;
}
.orgpick__note { color: var(--ink-3); font-size: var(--t-small); }
.orgpick__sel:disabled, .orgpick__query:disabled { opacity: .5; }

/* ============================================================ Decision Field */

.df__case { color: var(--ink-3); font-size: var(--t-small); letter-spacing: .08em; }

.df__question {
  margin: var(--s4) 0 var(--s6);
  font-size: 40px; font-weight: 300; line-height: 1.32; letter-spacing: .02em;
  max-width: 15em;
}

/* 六状态。是一条序列，所以用序列表达是合理的。 */
.states { display: flex; align-items: center; gap: 0; margin-bottom: var(--s7); }
.state {
  display: flex; align-items: center; gap: 7px;
  font-size: var(--t-micro); color: var(--ink-4); letter-spacing: .1em;
  padding-right: 14px;
}
.state::after {
  content: ''; width: 22px; height: 1px; background: var(--line-strong); margin-left: 14px;
}
.state:last-child { padding-right: 0; }
.state:last-child::after { display: none; }
.state__dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--ink-4);
  transition: background var(--dur-mid) var(--ease), box-shadow var(--dur-mid) var(--ease);
}
.state[data-passed="true"] { color: var(--ink-3); }
.state[data-passed="true"] .state__dot { background: var(--royal); }
.state[aria-current="step"] { color: var(--cyan); }
.state[aria-current="step"] .state__dot {
  background: var(--cyan); box-shadow: 0 0 0 4px rgba(24,213,210,.14);
}

/* -------- Judgment：明确表达判断，但用户始终有最终决定权 */

.judgment { margin-bottom: var(--s7); }

/* 空态：没有可展示的判断时如实说明，与"加载中"在视觉上明确区分（走查 F6）。
 * 不用灰字转圈观感，用与正文同级的阅读质感 + 左侧淡线，让用户一眼看出
 * "系统确实说完了，只是这里暂时没内容"。
 */
.judgment--empty {
  border-left: 2px solid var(--line); padding-left: var(--s5);
  margin-bottom: var(--s7);
}
.judgment--empty .judgment__headline { color: var(--ink-2); }

.judgment__band {
  display: flex; align-items: baseline; gap: var(--s3);
  margin-bottom: var(--s4);
}
.judgment__range {
  font-size: 38px; font-weight: 400; letter-spacing: .01em;
  font-variant-numeric: tabular-nums;
  transition: opacity var(--dur-mid) var(--ease);
}
.judgment__unit { font-size: 17px; color: var(--ink-2); }

.judgment__headline {
  margin: 0 0 var(--s3); font-size: var(--t-lead); font-weight: 400;
  line-height: 1.55; max-width: 30em;
}
.judgment__rationale { margin: 0; color: var(--ink-2); max-width: 38em; }

.judgment__foot {
  display: flex; align-items: center; gap: var(--s4);
  margin-top: var(--s4);
}
.link {
  background: none; border: 0; padding: 0;
  color: var(--cyan); font-size: 14px;
  border-bottom: 1px solid rgba(24,213,210,.35);
}
.link:hover { border-bottom-color: var(--cyan); }
.judgment__yours { font-size: var(--t-small); color: var(--ink-3); }

/* -------- 关键因素：默认只显示 2–3 个 */

.factors { margin-bottom: var(--s7); }
.section__label {
  font-size: var(--t-small); color: var(--ink-3); letter-spacing: .1em;
  margin-bottom: var(--s4);
}

.factor {
  display: grid; grid-template-columns: 150px 1fr 62px;
  align-items: center; gap: var(--s4);
  padding: 11px 0; border-bottom: 1px solid var(--line);
}
.factor:last-child { border-bottom: 0; }
.factor__name { font-size: 14px; color: var(--ink); }
.factor__track { height: 3px; border-radius: 2px; background: rgba(150,186,232,.12); position: relative; }
.factor__fill {
  position: absolute; inset: 0 auto 0 0; border-radius: 2px;
  background: linear-gradient(90deg, var(--navy), var(--royal));
  transition: width var(--dur-slow) var(--ease);
}
.factor--lead .factor__fill { background: linear-gradient(90deg, var(--royal), var(--cyan)); }
.factor__val {
  font-size: var(--t-small); color: var(--ink-2); text-align: right;
  font-variant-numeric: tabular-nums;
}

.factors__more { margin-top: var(--s4); }

/* -------- Scenario：Decision Field 的原生行为 */

.scenarios { margin-bottom: var(--s7); }
.scenario__row { display: flex; gap: var(--s3); flex-wrap: wrap; }
.scenario__btn {
  padding: 9px 18px; border-radius: 999px;
  border: 1px solid var(--line-strong); background: transparent;
  color: var(--ink-2); font-size: 14px; font-variant-numeric: tabular-nums;
  transition: all var(--dur-fast) var(--ease);
}
.scenario__btn:hover { border-color: rgba(24,213,210,.45); color: var(--ink); }
.scenario__btn[aria-pressed="true"] {
  border-color: var(--cyan); color: var(--ink);
  background: rgba(24,213,210,.10);
}
.scenario__btn[data-visited="true"]::after {
  content: ''; display: inline-block; width: 4px; height: 4px;
  border-radius: 50%; background: var(--royal); margin-left: 8px; vertical-align: middle;
}

.tradeoffs { margin: var(--s4) 0 0; padding: 0; list-style: none; }
.tradeoffs li {
  font-size: var(--t-small); color: var(--ink-2);
  padding-left: 16px; position: relative; margin-bottom: 5px;
}
.tradeoffs li::before {
  content: ''; position: absolute; left: 0; top: 10px;
  width: 6px; height: 1px; background: var(--ink-4);
}

/* -------- 收敛 / 确认 */

.converge { margin-bottom: var(--s7); }
.converge__box {
  border: 1px solid var(--line); border-left: 2px solid var(--cyan);
  border-radius: var(--r-md); padding: var(--s4) var(--s5);
  background: rgba(24,213,210,.045);
}
.converge__band { font-size: 22px; font-variant-numeric: tabular-nums; margin-bottom: 4px; }
.converge__note { font-size: var(--t-small); color: var(--ink-2); margin: 0; }
.converge__actions { display: flex; gap: var(--s3); margin-top: var(--s5); }

.locked-note {
  border: 1px solid rgba(24,213,210,.3); border-radius: var(--r-md);
  padding: var(--s4) var(--s5); background: rgba(24,213,210,.06);
}
.locked-note h4 { margin: 0 0 6px; font-size: 15px; font-weight: 500; }
.locked-note p { margin: 0; font-size: var(--t-small); color: var(--ink-2); }

/* ============================================================ Evidence 抽屉 */

.drawer {
  position: fixed; top: 68px; right: 0; bottom: 0; width: 560px; max-width: 92vw;
  background: linear-gradient(180deg, #08182B, #050E1B);
  border-left: 1px solid var(--line-strong);
  z-index: 40; display: flex; flex-direction: column;
  transform: translateX(100%);
  transition: transform var(--dur-mid) var(--ease);
  box-shadow: -30px 0 70px rgba(0,0,0,.5);
}
.drawer[data-open="true"] { transform: none; }

.drawer__head {
  padding: var(--s5) var(--s5) var(--s4);
  border-bottom: 1px solid var(--line);
  display: flex; align-items: flex-start; justify-content: space-between; gap: var(--s4);
}
.drawer__title { margin: 0 0 4px; font-size: 17px; font-weight: 500; }
.drawer__sub { margin: 0; font-size: var(--t-small); color: var(--ink-3); }
.drawer__close {
  background: none; border: 1px solid var(--line-strong); border-radius: 50%;
  width: 30px; height: 30px; color: var(--ink-2); line-height: 1; flex: none;
}
.drawer__body { overflow-y: auto; padding: var(--s5); }

/* 结论 → 原因 → Evidence → 原始来源 */
.chain { margin: 0 0 var(--s6); padding: 0; list-style: none; }
.chain li {
  position: relative; padding-left: var(--s5); padding-bottom: var(--s4);
  border-left: 1px solid var(--line-strong); margin-left: 5px;
}
.chain li:last-child { border-left-color: transparent; padding-bottom: 0; }
.chain li::before {
  content: ''; position: absolute; left: -4px; top: 8px;
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--env-3); border: 1px solid var(--royal);
}
.chain li[data-step="evidence"]::before { background: var(--cyan); border-color: var(--cyan); }
.chain__k { font-size: var(--t-micro); color: var(--ink-3); letter-spacing: .1em; }
.chain__v { font-size: 14px; color: var(--ink); }

.ev {
  border: 1px solid var(--line); border-radius: var(--r-md);
  padding: var(--s4); margin-bottom: var(--s3);
  background: rgba(10,27,48,.5);
}
.ev__top { display: flex; justify-content: space-between; gap: var(--s3); align-items: baseline; }
.ev__org { font-size: 14px; font-weight: 500; }
.ev__amt { font-size: 17px; font-variant-numeric: tabular-nums; color: var(--cyan); flex: none; }
.ev__meta { font-size: var(--t-small); color: var(--ink-2); margin: 6px 0 8px; }
.ev__note { font-size: var(--t-small); color: var(--ink-3); margin: 0 0 10px; }
.ev__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); }
.ev__tier {
  font-size: var(--t-micro); letter-spacing: .08em; color: var(--ink-3);
  border: 1px solid var(--line-strong); border-radius: 4px; padding: 2px 7px;
}
.ev__tier[data-tier="PRIMARY"] { color: var(--cyan); border-color: rgba(24,213,210,.35); }
.ev__src { font-size: var(--t-small); color: var(--royal); text-decoration: none; }
.ev__src:hover { text-decoration: underline; }

.scrim {
  position: fixed; inset: 68px 0 0 0; z-index: 30;
  background: rgba(2,6,14,.55);
  opacity: 0; pointer-events: none; transition: opacity var(--dur-mid) var(--ease);
}
/* backdrop-filter 只在打开时启用；否则会常驻一个全页合成层。 */
.scrim[data-open="true"] {
  opacity: 1; pointer-events: auto; backdrop-filter: blur(2px);
}

/* ============================================================ Instrument */

.instrument {
  position: sticky; top: 68px; height: calc(100vh - 68px);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--s6);
}

.instrument__stage {
  position: relative;
  width: 300px; height: 300px;
  display: grid; place-items: center;
}
.instrument__stage::before {
  content: ''; position: absolute; inset: -22%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(24,213,210,.12), rgba(14,92,216,.10) 42%, transparent 68%);
  transition: opacity var(--dur-slow) var(--ease), transform var(--dur-slow) var(--ease);
}

.instrument__object {
  width: 100%; height: 100%;
  display: grid; place-items: center;
  will-change: transform, filter;
}
.instrument__object img,
.instrument__object svg { width: 100%; height: 100%; display: block; }
.instrument__object canvas.brand-glb {
  width: 100%; height: 100%; display: block;
  filter: drop-shadow(0 0 26px rgba(14,92,216,.42));
}
.brand-raster {
  filter: drop-shadow(0 0 26px rgba(14,92,216,.42));
  user-select: none;
}

.brand-blocked {
  width: 100%; height: 100%; display: grid; place-items: center;
  border: 1px dashed var(--line-strong); border-radius: var(--r-md);
  color: var(--ink-4); font-size: var(--t-micro); letter-spacing: .12em; text-align: center;
}

.instrument__caption { text-align: center; }
.instrument__state {
  font-size: var(--t-small); color: var(--cyan); letter-spacing: .22em;
  transition: color var(--dur-mid) var(--ease);
}
.instrument__desc {
  margin: 6px 0 0; font-size: var(--t-small); color: var(--ink-3);
  max-width: 22em;
}
.instrument__mode {
  margin-top: var(--s4); font-size: 11px; color: var(--ink-4); letter-spacing: .08em;
}

/* ============================================================ 自然语言入口 */

.nl {
  position: fixed; left: 92px; right: 460px; bottom: 0; z-index: 20;
  padding: var(--s5) var(--s7) var(--s5);
  background: linear-gradient(180deg, transparent, rgba(3,9,19,.92) 34%);
}
.screen--single ~ .nl, .nl--wide { right: 0; }

.nl[hidden] { display: none; }
.nl__box {
  display: flex; align-items: center; gap: var(--s3);
  max-width: 780px;
  border: 1px solid var(--line-strong); border-radius: 999px;
  background: rgba(9,22,40,.82); backdrop-filter: blur(16px);
  padding: 7px 8px 7px 20px;
  transition: border-color var(--dur-fast) var(--ease);
}
.nl__box:focus-within { border-color: rgba(24,213,210,.45); }
.nl__spark { color: var(--cyan); font-size: 14px; flex: none; }
.nl__input {
  flex: 1; background: none; border: 0; outline: none;
  color: var(--ink); font: inherit; padding: 8px 0;
}
.nl__input::placeholder { color: var(--ink-4); }
.nl__send {
  flex: none; width: 36px; height: 36px; border-radius: 50%;
  border: 0; background: var(--royal); color: #fff; font-size: 15px;
}
.nl__send:hover { background: #1668EE; }
.nl__hint {
  margin: var(--s3) 0 0 20px; font-size: var(--t-micro); color: var(--ink-4);
  min-height: 18px;
}

/* ============================================================ 通用页面 */

.page { padding: var(--s7) var(--s7) 196px; max-width: 1000px; }
.page__title { font-size: var(--t-title); font-weight: 300; margin: 0 0 var(--s2); }
.page__sub { color: var(--ink-2); margin: 0 0 var(--s7); max-width: 44em; }

.tl { list-style: none; margin: 0; padding: 0; }
.tl__item {
  position: relative; padding: 0 0 var(--s6) var(--s6);
  border-left: 1px solid var(--line-strong);
}
.tl__item:last-child { border-left-color: transparent; }
.tl__item::before {
  content: ''; position: absolute; left: -5px; top: 7px;
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--env-2); border: 1px solid var(--royal);
}
.tl__item[aria-current="true"]::before { background: var(--cyan); border-color: var(--cyan); }
.tl__when { font-size: var(--t-small); color: var(--cyan); letter-spacing: .06em; }
.tl__grid { margin-top: var(--s3); display: grid; gap: var(--s3); }
.tl__k { font-size: var(--t-micro); color: var(--ink-3); letter-spacing: .09em; }
.tl__v { font-size: 14px; color: var(--ink-2); }
.tl__btn { margin-top: var(--s4); }

.mem {
  border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--panel); padding: var(--s5) var(--s6); margin-bottom: var(--s5);
}
.mem__head { display: flex; justify-content: space-between; align-items: baseline; gap: var(--s4); }
.mem__title { margin: 0; font-size: 17px; font-weight: 500; }
.mem__ver { font-size: var(--t-micro); color: var(--ink-3); letter-spacing: .1em; }
.mem__q { margin: var(--s2) 0 var(--s5); color: var(--ink-2); font-size: 14px; }
.mem__grid { display: grid; grid-template-columns: 132px 1fr; gap: var(--s3) var(--s5); }
.mem__k { font-size: var(--t-small); color: var(--ink-3); }
.mem__v { font-size: 14px; }
.mem__outcome { color: var(--cyan); }
.mem__actions { margin-top: var(--s5); }

.empty {
  border: 1px dashed var(--line-strong); border-radius: var(--r-lg);
  padding: var(--s7); text-align: center; color: var(--ink-3);
}

/* 加载：不用骨架屏闪烁，用一句安静的话 */
.loading { color: var(--ink-4); font-size: var(--t-small); letter-spacing: .1em; padding: var(--s7); }

/* ============================================================ 窄屏 */

@media (max-width: 1440px) {
  .screen { grid-template-columns: minmax(0,1fr) 390px; }
  .nl { right: 390px; }
  .instrument__stage { width: 250px; height: 250px; }
  .df__question { font-size: 34px; }
}

@media (max-width: 1180px) {
  .screen { grid-template-columns: minmax(0,1fr); }
  .col-instrument { display: none; }
  .nl { right: 0; }
}

/* ============================================================ Agent × Decision Field (MEDPROC-AGENT-FRONTEND-001) */

/* P1 输入标题（绑定当前 Decision Field，非聊天窗） */
.nl__title {
  margin: 0 0 6px 24px; font-size: 12px; color: var(--ink-3);
  letter-spacing: .04em; user-select: none;
}
.nl--bound .nl__title { color: var(--cyan); }
.nl__hint[data-kind="thinking"] { color: var(--cyan); }
.nl__hint[data-kind="error"] { color: #d98a7a; }
.nl__hint[data-kind="conflict"] { color: #d98a7a; }
.nl__hint[data-kind="dropped"] { color: var(--ink-3); }
.nl--busy .nl__send { opacity: .55; }
.nl__send:disabled { opacity: .45; cursor: default; }

/* P8 Agent Reasoning Trace —— 只展示可审计 stages，不展示 raw CoT */
.agent-trace {
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: rgba(14,92,216,.05); padding: var(--s4) var(--s5);
  margin-bottom: var(--s6);
}
.at__intent { font-size: var(--t-micro); color: var(--cyan); letter-spacing: .1em; margin-top: var(--s2); }
.at__list { list-style: none; margin: var(--s3) 0 0; padding: 0; }
.at__step { display: flex; gap: var(--s3); align-items: baseline; padding: 3px 0; }
.at__stage {
  flex: none; font-size: 10px; letter-spacing: .08em; color: var(--ink-3);
  min-width: 88px; text-transform: uppercase;
}
.at__sum { font-size: 13px; color: var(--ink-2); }
.at__ev { margin-top: var(--s3); font-size: var(--t-micro); color: var(--ink-3); }
.at__warn { margin-top: var(--s2); font-size: var(--t-micro); color: #d98a7a; }

/* P9 Evidence emphasis —— 本轮引用高亮置顶；未引用保留但低强调 */
.ev--emph { border-color: rgba(24,213,210,.55); background: rgba(24,213,210,.06); }
.ev:not(.ev--emph) { opacity: .82; }
.page__note { font-size: var(--t-small); color: var(--cyan); margin: 0 0 var(--s5); }

/* =========================================================================
   MEDPROC-FULL-VEHICLE-INTEGRATION-001 —— v1.1 第三条链的界面元素
   纯追加：不改动既有选择器，避免影响已验收的视觉。
   ========================================================================= */

/* --- 数据来源角标（常驻；fixture 必须持续可见，§四.5 / D12）--------------- */
.data-mode {
  display: inline-flex; align-items: baseline; gap: .5rem;
  padding: .25rem .6rem; border-radius: 999px;
  font-size: .78rem; line-height: 1.5; letter-spacing: .02em;
}
.data-mode--real    { background: rgba(32, 120, 72, .12); color: #1c6b41; }
.data-mode--fixture { background: rgba(190, 120, 0, .16); color: #8a5600; }
.data-mode--unknown { background: rgba(160, 40, 40, .14); color: #8c2020; }
.data-mode__label   { font-weight: 600; }
.data-mode__hint    { opacity: .9; }
.data-mode__detail summary { cursor: pointer; opacity: .75; }

.identity-profile-banner {
  position: fixed; z-index: 10000; left: 0; top: 0;
  width: 100%; box-sizing: border-box; padding: 3px 12px;
  border-top: 1px solid rgba(255, 187, 74, .3);
  background: #231906; color: #ffd88a; font-size: 11px; line-height: 1.4;
  text-align: center;
}

/* --- 人工复核（与决策冻结**视觉上也分开**：不同容器、不同按钮样式）-------- */
.review-panel { margin: 1.25rem 0; padding: 1rem 1.1rem;
  border: 1px solid rgba(120, 90, 30, .3); border-radius: 10px;
  background: rgba(250, 246, 236, .7); }
.review-panel--empty { opacity: .7; }
.review-panel__title { margin: 0 0 .75rem; font-size: 1rem; }
.review-panel__error { color: #8c2020; }
.review-card { padding: .8rem 0; border-top: 1px dashed rgba(120, 90, 30, .25); }
.review-card:first-of-type { border-top: none; }
.review-card__head { display: flex; justify-content: space-between; align-items: baseline; }
.review-card__kind { font-weight: 600; }
.review-card__at { opacity: .7; font-size: .8rem; }
.review-card__summary { margin: .4rem 0; }
.review-card__bindings { display: grid; gap: .2rem; margin: .5rem 0; }
.review-binding { display: flex; gap: .5rem; font-size: .8rem; }
.review-binding__label { min-width: 5rem; opacity: .7; }
.review-binding__value { word-break: break-all; }
.review-card__scope { font-size: .8rem; opacity: .85; margin: .35rem 0; }
.review-card__rationale { width: 100%; box-sizing: border-box; margin: .4rem 0; }
.review-card__rationale--error { outline: 2px solid #8c2020; }
.review-card__actions { display: flex; gap: .6rem; }
.review-card__btn { padding: .4rem .9rem; border-radius: 6px; cursor: pointer;
  border: 1px solid rgba(120, 90, 30, .45); background: #fff; }
.review-card__btn--approve { border-color: #1c6b41; color: #1c6b41; }
.review-card__btn--reject  { border-color: #8c2020; color: #8c2020; }

/* --- 态势 / 影响 / 重投影 ------------------------------------------------- */
.reproj-panel { margin: 1.25rem 0; }
.reproj-panel__title { margin: 0 0 .6rem; font-size: 1rem; }
.reproj-panel__empty { opacity: .7; }
.reproj-panel__error { color: #8c2020; }
.situation-list, .stale-list { list-style: none; margin: 0; padding: 0; }
.situation-row { display: grid; grid-template-columns: 12rem 1fr 9rem 8rem;
  gap: .5rem; padding: .3rem 0; font-size: .85rem;
  border-bottom: 1px solid rgba(0, 0, 0, .06); }
.situation-row[data-severity="CRITICAL"] .situation-row__severity { color: #8c2020; font-weight: 600; }
.situation-row[data-severity="MATERIAL"] .situation-row__severity { color: #8a5600; font-weight: 600; }
.impact-block, .stale-block { margin: .8rem 0; }
.impact-path { margin: .4rem 0 .4rem 1.2rem; font-size: .85rem; }
.stale-row { display: flex; gap: .6rem; font-size: .85rem; padding: .2rem 0; }
.stale-row__object { font-family: ui-monospace, Menlo, monospace; }
.reproj-actions { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; margin: .8rem 0; }
.reproj-actions__btn { padding: .4rem .9rem; border-radius: 6px; cursor: pointer;
  border: 1px solid rgba(0, 0, 0, .25); background: #fff; }
.reproj-actions__note { flex-basis: 100%; font-size: .8rem; opacity: .8; margin: 0; }
.reproj-preview, .reproj-result { margin: .8rem 0; padding: .7rem .9rem;
  border-left: 3px solid rgba(0, 0, 0, .18); }
.reproj-result__verdict { font-weight: 600; }
.reproj-result__verdict--nochange { color: #1c6b41; }
.reproj-result__chain { font-size: .8rem; opacity: .8; }
.reproj-diff { border-collapse: collapse; font-size: .82rem; }
.reproj-diff th, .reproj-diff td { border: 1px solid rgba(0, 0, 0, .12);
  padding: .2rem .5rem; text-align: left; }

/* --- 文件摄入 ------------------------------------------------------------- */
.intake-panel { margin: 1.25rem 0; padding: 1rem 1.1rem;
  border: 1px solid rgba(0, 0, 0, .12); border-radius: 10px; }
.intake-panel__title { margin: 0 0 .75rem; font-size: 1rem; }
.intake-field { display: grid; gap: .2rem; margin-bottom: .6rem; }
.intake-field__label { font-size: .85rem; font-weight: 600; }
.intake-field__hint { font-size: .78rem; opacity: .75; }
.intake-panel__submit { padding: .4rem .9rem; border-radius: 6px; cursor: pointer;
  border: 1px solid rgba(0, 0, 0, .25); background: #fff; }
.intake-status { font-size: .85rem; min-height: 1.2em; }
.intake-list { list-style: none; margin: .6rem 0 0; padding: 0; font-size: .82rem; }
.intake-list__item { padding: .15rem 0; }

/* ---- Medical procurement decision workspace: login entrance ---- */
.login-page { min-height: 100vh; padding: 38px clamp(24px, 5vw, 84px) 56px; position: relative; overflow: hidden; }
.login-page::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(ellipse at 32% 55%, rgba(25,147,163,.10), transparent 48%), radial-gradient(ellipse at 95% 12%, rgba(30,99,182,.08), transparent 42%); }
.login-layout { position: relative; max-width: 1280px; margin: auto; display: grid;
  grid-template-columns: minmax(0, 1fr) 400px; column-gap: clamp(40px, 7vw, 112px); align-items: center; }
.login-brand { grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; margin-bottom: 66px; }
.login-brand img { flex: 0 0 auto; }
.login-brand__name { color: #edf6ff; font-size: 24px; font-weight: 600; letter-spacing: .08em; line-height: 1.1; }
.login-brand__name span { display: block; margin-top: 7px; font-size: 10px; font-weight: 400; letter-spacing: .30em; color: #91a8be; }
.login-brand__descriptor { margin-left: 24px; padding-left: 25px; border-left: 1px solid rgba(135,171,193,.24); color: #9fb3c8; font-size: 13px; letter-spacing: .08em; }
.login-hero__eyebrow { font-size: 12px; color: #72c9cc; letter-spacing: .18em; margin: 0 0 19px; }
.login-hero__title { font-size: clamp(38px, 4.1vw, 62px); line-height: 1.28; letter-spacing: -.045em; font-weight: 500; margin: 0; color: #ecf3fb; }
.login-hero__title span { background: linear-gradient(100deg, #fff 10%, #93cbd0 95%); color: transparent; background-clip: text; }
.login-hero__intro { color: #a8bbcd; max-width: 500px; font-size: 15px; line-height: 1.9; margin: 22px 0 0; }
.login-world { height: 226px; position: relative; max-width: 520px; margin: 6px 0 12px; }
.login-world__orbit { position: absolute; border: 1px solid rgba(117,193,202,.19); border-radius: 50%; left: 50%; top: 50%; transform: translate(-50%, -50%) rotate(-14deg); }
.login-world__orbit--outer { width: 88%; height: 174px; border-top-color: rgba(117,193,202,.40); box-shadow: 0 -4px 22px rgba(79,176,193,.035); }
.login-world__orbit--inner { width: 66%; height: 126px; transform: translate(-50%, -50%) rotate(15deg); border-style: dashed; }
.login-world__axis { position: absolute; width: 100%; height: 1px; top: 50%; background: linear-gradient(90deg, transparent, rgba(138,184,201,.2), transparent); }
.login-world__core { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 150px; height: 150px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-direction: column; background: radial-gradient(circle, rgba(28,116,144,.24), transparent 68%); }
.login-world__core img { filter: drop-shadow(0 0 20px rgba(45,169,219,.30)); }
.login-world__core span { color: #9bbfcd; font-size: 10px; letter-spacing: .15em; margin-top: 2px; }
.login-world__node { position: absolute; font-size: 11px; color: #b7d1dc; background: #0b1c2d; border: 1px solid #264353; border-radius: 20px; padding: 6px 14px; white-space: nowrap; }
.login-world__node--0 { left: 7%; top: 45%; }
.login-world__node--1 { right: 10%; top: 12%; }
.login-world__node--2 { right: 8%; bottom: 15%; }
.login-journey { display: grid; grid-template-columns: 1fr 1fr; gap: 20px 26px; padding: 0; margin: 0; list-style: none; }
.login-journey li { display: flex; align-items: flex-start; gap: 12px; }
.login-journey__number { font-size: 11px; color: #6ca4ad; font-variant-numeric: tabular-nums; padding-top: 3px; }
.login-journey strong { font-weight: 500; color: #dce7f1; font-size: 14px; }
.login-journey p { margin: 5px 0 0; color: #8fa6ba; font-size: 11px; line-height: 1.7; }
.login-access { align-self: center; }
.login-form { width: 100%; display: grid; gap: 10px; padding: 38px 34px 30px; border: 1px solid rgba(135,166,196,.24); border-radius: 20px;
  background: linear-gradient(150deg, rgba(22,43,65,.93), rgba(10,25,43,.96)); box-shadow: 0 28px 80px rgba(0,0,0,.25), inset 0 1px 0 rgba(209,236,255,.05); }
.login-form__eyebrow { font-size: 11px; letter-spacing: .1em; color: #73bfc6; margin-bottom: 8px; }
.login-title { margin: 0; font-size: 27px; font-weight: 500; letter-spacing: -.025em; color: #edf5ff; }
.login-sub { margin: 0 0 22px; font-size: 13px; color: #9caec2; }
.login-form label { margin-top: 7px; font-size: 12px; color: #b4c6d8; }
.login-form input { width: 100%; min-height: 48px; padding: 12px 14px; color: #edf5ff; background: rgba(3,13,25,.42); border: 1px solid #344c64; border-radius: 9px; font: inherit; font-size: 14px; outline: none; }
.login-form input::placeholder { color: #6f849a; }
.login-form input:focus { border-color: #78c6cb; box-shadow: 0 0 0 3px rgba(77,175,185,.12); }
.login-form button[data-action="login"] { margin-top: 18px; min-height: 48px; border: 1px solid #8bd3d4; border-radius: 9px; color: #071b27; font: inherit; font-weight: 600; cursor: pointer; background: linear-gradient(105deg, #b8e3e1, #6fbfc8); }
.login-form button[data-action="login"]:hover { filter: brightness(1.07); }
.login-form button[data-action="login"]:disabled { opacity: .55; cursor: wait; }
.login-form button[data-action="go-register"] { font-size: 12px; line-height: 1.7; background: transparent; border: 0; color: #afc8d9; padding: 10px 0; cursor: pointer; }
.login-form button:focus-visible { outline: 2px solid #a5dedf; outline-offset: 4px; }
.login-status { min-height: 1.5em; margin: 4px 0 0; font-size: 12px; color: #ffb5ac; overflow-wrap: anywhere; }
.login-status[data-login-status="pending"] { color: #a1c8d8; }
.login-note { margin: 12px 0 0; padding-top: 17px; border-top: 1px solid rgba(139,169,192,.15); font-size: 11px; line-height: 1.8; color: #8ea6ba; }
.login-access__caption { text-align: center; font-size: 11px; letter-spacing: .08em; color: #829aaf; margin: 23px 0 0; }
@media (max-width: 1000px) {
  .login-layout { grid-template-columns: minmax(0, 1fr) 360px; gap: 38px; }
  .login-brand { margin-bottom: 36px; }
  .login-form { padding: 30px 26px; }
  .login-hero__title { font-size: 40px; }
  .login-world { height: 205px; }
}
@media (max-width: 760px) {
  .login-page { padding: 24px 22px 56px; }
  .login-layout { grid-template-columns: minmax(0, 1fr); gap: 28px; max-width: 440px; }
  .login-brand { margin: 0; gap: 11px; }
  .login-brand__descriptor { margin-left: auto; padding-left: 12px; font-size: 10px; letter-spacing: 0; }
  .login-brand__name { font-size: 21px; }
  .login-brand__name span { font-size: 8px; }
  .login-hero__eyebrow { margin-bottom: 12px; font-size: 10px; }
  .login-hero__title { font-size: 36px; }
  .login-hero__intro { font-size: 12px; line-height: 1.85; margin-top: 15px; }
  .login-world, .login-journey { display: none; }
  .login-form { padding: 28px 24px; }
  .login-title { font-size: 24px; }
  .login-sub { margin-bottom: 14px; }
  .login-access__caption { font-size: 10px; margin-top: 17px; }
}

/* IC14-R9：当前投影 / 候选上位面板 */
.pc-panel { border: 1px solid var(--line, #d9d9d9); border-radius: 8px; padding: 12px; margin-top: 12px; }
.pc-panel__head { display: flex; justify-content: space-between; align-items: center; }
.pc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.pc-card { border: 1px dashed var(--line, #d9d9d9); border-radius: 6px; padding: 8px; }
.pc-card--current { border-color: #2f6f3e; }
.pc-card--candidate { border-color: #b8860b; }
.pc-row { display: flex; gap: 8px; font-size: 13px; }
.pc-row__label { min-width: 6em; color: #666; }
.pc-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.pc-btn { padding: 6px 10px; }
.pc-btn--execute { font-weight: 600; }
.pc-error { color: #b00020; }
.pc-blocked { color: #b00020; font-weight: 600; }
.pc-review { margin-top: 8px; }
.pc-review__stale { color: #b8860b; }
.pc-diff__none { color: #666; }

/* IC14-R10：采购关联面板 + 评分输入入口 */
.pb-panel { border: 1px solid #d9d9d9; border-radius: 8px; padding: 12px; margin: 12px 0; }
.pb-form { display: grid; gap: 6px; max-width: 520px; }
.pb-form input { padding: 6px 8px; }
.pb-submit { padding: 6px 10px; }
.pb-error { color: #8c2020; }
.mp-bids { border-top: 1px solid #eee; padding-top: 8px; margin-top: 8px; }
.mp-bids-json { width: 100%; max-width: 640px; font-family: monospace; }
.mp-bids-label { width: 100%; max-width: 640px; padding: 6px 8px; margin-bottom: 6px; }
.mp-judge-basis, .mp-resolve-points, .mp-resolve-marker, .mp-resolve-basis { margin: 0 4px; padding: 4px 6px; }
.mp-judge-status, .mp-resolve-status, .mp-bids-status { margin-left: 8px; color: #555; }

/* ======================================================================
   FIX-20260920 —— 机构就绪四态 / 对话恢复动作 / 首次使用路径
   只追加，不改既有视觉；颜色全部用 tokens.css 的环境色。
   ====================================================================== */
.nl__actions { display: flex; flex-wrap: wrap; gap: 8px; margin: var(--s2) 0 0 20px; }
.nl__actions[data-nl-actions="empty"] { display: none; }
.nl__action { font: inherit; font-size: var(--t-small); padding: 5px 12px; border-radius: 999px;
  border: 1px solid var(--line-strong); background: var(--panel-2); color: var(--ink); cursor: pointer; }
.nl__action:hover { border-color: rgba(24,213,210,.45); }
.nl__action--retry { color: var(--cyan); }

.orgready { padding: var(--s5); border: 1px solid var(--line-strong); border-radius: var(--r-lg);
  background: var(--panel-2); backdrop-filter: blur(10px); max-width: 720px; color: var(--ink); }
.orgready--not_in_scope { border-color: rgba(217,164,65,.55); }
.orgready--unavailable { border-color: rgba(217,138,122,.55); }
.orgready--empty { border-style: dashed; text-align: left; }
.orgready--not_in_world { border-color: rgba(217,164,65,.55); margin: 0 0 var(--s5); }
.orgready__steps--inline { padding-left: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; }
.orgready__title { margin: 0 0 var(--s2); font-size: var(--t-lead); font-weight: 400; }
.orgready__what, .orgready__next { margin: 6px 0; line-height: 1.7; color: var(--ink-2); }
.orgready__code { margin: 6px 0; font-size: var(--t-micro); color: var(--ink-3); word-break: break-all; line-height: 1.6; }
.orgready__steps { margin: var(--s2) 0 0; padding-left: 20px; color: var(--ink-2); }
.orgready__steps li { margin: var(--s3) 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.orgready__why, .orgready__manual { font-size: var(--t-small); color: var(--ink-3); line-height: 1.6; }
.orgready .btn { font: inherit; }
.devswitch--attention { outline: 2px solid rgba(24,213,210,.7); outline-offset: 2px; transition: outline-color .6s; }

.intake-need { max-width: 760px; padding-bottom: 260px; color: var(--ink); }
.intake-need__steps { display: flex; gap: 14px; list-style: none; padding: 0; margin: var(--s3) 0 var(--s5); font-size: var(--t-small); color: var(--ink-3); }
.intake-need__step[aria-current="step"] { color: var(--cyan); font-weight: 600; }
.intake-need__step[data-done="true"] { color: var(--ink-2); }
.intake-need__label { display: block; margin-bottom: 6px; font-weight: 600; }
.intake-need__text { width: 100%; box-sizing: border-box; font: inherit; padding: 10px 14px; border-radius: var(--r-md);
  border: 1px solid var(--line-strong); background: rgba(9,22,40,.82); color: var(--ink); resize: vertical; }
.intake-need__note { font-size: var(--t-small); color: var(--ink-3); line-height: 1.7; }
.intake-need__err { color: #d98a7a; min-height: 1.2em; margin: 6px 0; }
.intake-need__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: var(--s3); }
.intake-need__quote { margin: 0 0 var(--s3); padding: 10px 14px; border-left: 3px solid var(--cyan);
  background: var(--panel); white-space: pre-wrap; color: var(--ink-2); }
.intake-need__row { display: grid; grid-template-columns: 140px 1fr; gap: 4px 12px; align-items: center; margin: var(--s2) 0; }
.intake-need__k { color: var(--ink-2); }
.intake-need__row input, .intake-need__row select { font: inherit; padding: 6px 10px; border-radius: var(--r-sm);
  border: 1px solid var(--line-strong); background: rgba(9,22,40,.82); color: var(--ink); width: 100%; box-sizing: border-box; }
.intake-need__src { grid-column: 2; font-size: var(--t-micro); color: var(--ink-3); }
.intake-need__summary { display: grid; grid-template-columns: 140px 1fr; gap: 6px 12px; margin: var(--s3) 0; }
.intake-need__summary dt { color: var(--ink-3); } .intake-need__summary dd { margin: 0; }
.intake-need__confirm { display: flex; gap: 8px; align-items: flex-start; margin: var(--s3) 0; color: var(--ink-2); }
.intake-need__ok { color: var(--cyan); } .intake-need__bad { color: #d98a7a; }
.intake-need__code { font-size: var(--t-micro); color: var(--ink-3); word-break: break-all; }
@media (max-width: 640px) {
  .intake-need__row, .intake-need__summary { grid-template-columns: 1fr; }
  .intake-need__src { grid-column: 1; }
  .intake-need__steps { flex-wrap: wrap; }
}
/* 悬浮输入条的渐变底衬不再拦截点击：底部页面按钮（如需求页的「下一步」）以前会被它盖住点不到。 */
.nl { pointer-events: none; }
.nl > * { pointer-events: auto; }
/* FIX-20260920-R2 —— 需求记录视图（决策准备阶段）。只追加。 */
.need { max-width: 820px; padding-bottom: 260px; color: var(--ink); }
.need__head .page__sub { color: var(--ink-3); }
.need__block { border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--panel); padding: var(--s4) var(--s5); margin: 0 0 var(--s4); }
.need__proposal { border-color: rgba(24,213,210,.45); }
.need__editor { border-color: var(--line-strong); }
.need__row { display: grid; grid-template-columns: 150px 1fr; gap: 2px 12px; align-items: center; margin: 6px 0; }
.need__k { color: var(--ink-2); } .need__v { color: var(--ink); }
.need__src { grid-column: 2; font-size: var(--t-micro); color: var(--ink-3); }
.need__row input, .need__row select { font: inherit; padding: 6px 10px; border-radius: var(--r-sm); border: 1px solid var(--line-strong);
  background: rgba(9,22,40,.82); color: var(--ink); width: 100%; box-sizing: border-box; }
.need__missing, .need__conf, .need__note, .need__cand { font-size: var(--t-small); color: var(--ink-2); line-height: 1.7; margin: 6px 0; }
.need__conf { color: var(--ink-3); }
.need__help { margin: 4px 0 0; padding-left: 18px; color: var(--ink-2); font-size: var(--t-small); }
.need__versions { color: var(--ink-3); font-size: var(--t-small); margin: var(--s3) 0; }
.need__ver { margin: 4px 0; }
.need__actions { margin: 0 0 var(--s4); }
@media (max-width: 640px) { .need__row { grid-template-columns: 1fr; } .need__src { grid-column: 1; } }

/* ===================================================== CLAUDE-DEV-001 项目工作区（需求记录之上的统一业务上下文） */
.screen--need { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0; }
.screen--need .need__host { padding: var(--s7) var(--s5) 196px var(--s7); min-width: 0; }
.screen--need .pw__host { padding: var(--s7) var(--s7) 196px var(--s5); min-width: 0; border-left: 1px solid var(--line); }
.pw { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--s4); min-width: 0; }
/* Keep long formal-version tables inside the desktop workspace column too. */
.pw > * { min-width: 0; }
.screen--need .need__block, .screen--need .need__row > * { min-width: 0; }
.screen--need .page__sub, .screen--need .need__v, .pw__turn-meta { overflow-wrap: anywhere; }
.pw__h { font-weight: 600; color: var(--ink); }
.pw__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.pw__stmt { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 10px; align-items: baseline; font-size: var(--t-small); line-height: 1.55; color: var(--ink); }
.pw__stmt .pw__basis, .pw__stmt .pw__ev, .pw__stmt .pw__unlock { grid-column: 2; color: var(--ink-3); font-size: var(--t-micro); overflow-wrap: anywhere; }
/* A supplier record contains a full review form, not a tag/claim pair. */
[data-sr-record] { grid-template-columns: minmax(0, 1fr); overflow-wrap: anywhere; }
[data-sr-record] > * { min-width: 0; }
[data-sr-record] input { width: 100%; max-width: 100%; box-sizing: border-box; }
.pw__claim { overflow-wrap: anywhere; }
.pw__tag { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11px; border: 1px solid var(--line-strong); color: var(--ink-2); background: rgba(150, 186, 232, 0.08); white-space: nowrap; }
.pw__stmt[data-layer="OBSERVED"] .pw__tag, .pw__stmt[data-layer="PROCUREMENT_DOCUMENT"] .pw__tag { border-color: rgba(24,213,210,.5); color: var(--cyan); }
.pw__stmt[data-layer="ASSUMED"] .pw__tag { border-color: rgba(232,192,122,.6); color: #E8C07A; }
.pw__stmt[data-layer="UNKNOWN"] .pw__tag { border-style: dashed; color: var(--ink-3); }
.pw__banner { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; padding: 8px 12px; border-radius: var(--r-sm); margin-top: 6px; font-size: var(--t-small); color: var(--ink); }
.pw__banner--hyp { background: rgba(232,192,122,.10); border: 1px solid rgba(232,192,122,.5); }
.pw__banner--pending { background: rgba(24,213,210,.08); border: 1px solid rgba(24,213,210,.4); }
.need__row[data-pw-layer="HYPOTHESIS"] .need__v { color: #E8C07A; }
.pw__card { padding: var(--s3) var(--s4); border: 1px solid var(--line); border-radius: var(--r-md); background: var(--panel-2); display: grid; grid-template-columns: minmax(0, 1fr); gap: 6px; min-width: 0; }
.pw__table { width: 100%; border-collapse: collapse; font-size: var(--t-micro); color: var(--ink); display: block; overflow-x: auto; }
.pw__table th, .pw__table td { text-align: left; padding: 4px 6px; border-bottom: 1px solid var(--line); white-space: nowrap; }
/* CLAUDE-DEV-002：可直接问的问题 / 能力得失 / 正式链 / 交付；技术细节折叠 */
.pw__chips { display: flex; flex-wrap: wrap; gap: 6px; }
.pw__chip { font-size: var(--t-small); padding: 4px 10px; }
.pw__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.pw__tech { margin-top: 6px; font-size: var(--t-micro); color: var(--ink-3, var(--ink)); }
.pw__tech > summary { cursor: pointer; opacity: .75; }
.pw__pre { max-height: 280px; overflow: auto; font-size: 11px; line-height: 1.4; background: var(--panel-2); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 8px; white-space: pre-wrap; word-break: break-all; }
.pw__headline { font-weight: 600; }
.pw__field { align-items: center; }
.pw__field .need__input { min-width: 0; width: 100%; }
@media (max-width: 720px) { .pw__actions .btn, .pw__chips .pw__chip { width: 100%; } }
.pw__table th { color: var(--ink-3); font-weight: 500; }
.pw__table tr[data-pw-within="ALL"] td:last-child { color: var(--cyan); }
.pw__table tr[data-pw-within="NONE"] td:last-child { color: #E28C8C; }
.pw__turn { padding: 6px 0; border-bottom: 1px dashed var(--line); font-size: var(--t-small); color: var(--ink); }
.pw__turn-user { font-weight: 600; margin: 0; }
.pw__turn-meta { color: var(--ink-3); font-size: 11px; margin: 2px 0; }
.pw__turn-answer { margin: 0; line-height: 1.55; color: var(--ink-2); overflow-wrap: anywhere; }
.pw__attach .need__row { grid-template-columns: 1fr auto; }
@media (max-width: 1180px) {
  /* 窄屏 = 采购旅程：单列，按“正式 → 待确认/假设 → 结论 → 缺口 → 证据 → 历史”纵向推进 */
  .screen--need { grid-template-columns: minmax(0, 1fr); }
  .screen--need .pw__host { border-left: 0; padding: 0 var(--s4) 196px; }
  .screen--need .need__host { padding: var(--s5) var(--s4) 0; }
}
@media (max-width: 640px) {
  .screen--need .need__host, .screen--need .pw__host { padding: var(--s3) var(--s3) var(--s4); }
  .screen--need .pw__host { padding-bottom: 196px; }
  .screen--need .need__block { padding: var(--s3); }
  .screen--need .need__row { grid-template-columns: 1fr; }
  .screen--need .need__src { grid-column: 1; }
  .pw { gap: 10px; }
  .pw__stmt { grid-template-columns: 1fr; }
  .pw__stmt .pw__basis, .pw__stmt .pw__ev, .pw__stmt .pw__unlock { grid-column: 1; }
  .pw__banner { flex-direction: column; align-items: stretch; }
  .pw__card { padding: 8px 10px; }
}

/* ============================================================ 手机（Mobile = Medical Procurement Journey）
   外壳改为“顶部紧凑机构条 + 横向导航 + 单列内容 + 底部对话条”，不是把桌面仪表盘等比缩小。 */
@media (max-width: 640px) {
  .shell { grid-template-rows: 56px auto auto 1fr; grid-template-columns: 1fr;
           grid-template-areas: "head" "devswitch" "rail" "main"; }
  .head { padding: 0 var(--s3); gap: var(--s3); }
  .head__name { font-size: 16px; letter-spacing: .08em; white-space: nowrap; }
  .head__ctx { padding-left: var(--s3); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 42vw; }
  .rail { flex-direction: row; padding: 0; border-right: 0; border-bottom: 1px solid var(--line); overflow-x: auto; }
  .rail__item { width: auto; flex: 1 0 auto; padding: 10px 12px; letter-spacing: .04em; }
  .rail__item::before { left: 50%; top: auto; bottom: 0; width: 0; height: 2px; transform: translateX(-50%); transition: width var(--dur-mid) var(--ease); }
  .rail__item[aria-current="page"]::before { width: 60%; height: 2px; }
  .main { padding-bottom: 140px; }
  .nl { left: 0; right: 0; padding: var(--s3) var(--s3) var(--s3); }
  .nl__title { margin-left: 8px; }
  .page__title { font-size: 24px; }
  .col-decision, .page { padding-left: var(--s3); padding-right: var(--s3); }
}

[data-pw-revisions] { min-width: 0; overflow-wrap: anywhere; }
[data-pw-revision-form] { display: grid; gap: 12px; }
[data-pw-revision-form] label { display: grid; gap: 6px; min-width: 0; }
[data-pw-revision-form] input, [data-pw-revision-form] select, [data-pw-revision-form] textarea { width: 100%; min-width: 0; max-width: 100%; box-sizing: border-box; }
[data-pw-revision-form] textarea { min-height: 80px; }
[data-pw-revision-status] { overflow-x: auto; }

/* CODEX-DEV-007: constrain actual mobile layout, not merely the document scrollbar.
   The former 1fr min-content track expanded to 445px behind overflow-x:clip. */
@media (max-width: 640px) {
  .shell { grid-template-columns: minmax(0, 1fr); }
  .head, .rail { min-width: 0; }
  .head__brand { flex-shrink: 0; }
  .head__ctx, .head__user, .head__who { min-width: 0; }
  .head__user { margin-left: auto; }
  .head__avatar { flex-shrink: 0; }
  .head__who i, .head__who span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .pw__table { max-width: 100%; }
}

/* DEV018 market home */
.market-dashboard{width:100%;max-width:1440px;margin:0 auto;padding:28px 24px 100px;box-sizing:border-box;color:#dae6f1}
.market-heading,.market-section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.market-heading h1{font-size:30px;letter-spacing:.02em;margin:6px 0 10px}.market-eyebrow{font-size:12px;letter-spacing:.15em;color:#9db1c7}
.market-note{font-size:13px;line-height:1.7;color:#a8b9cb;margin:8px 0}.market-heading-actions{display:flex;gap:12px;align-items:center}
.market-status{font-size:12px;padding:6px 10px;border:1px solid #2d695e;border-radius:16px;color:#8ddecb;white-space:nowrap}.market-status--warning{color:#f2c67f;border-color:#856636}
.market-filters{display:flex;flex-wrap:wrap;align-items:end;gap:12px;padding:20px 0}.market-filter,.market-search{display:flex;flex-direction:column;gap:7px;font-size:12px;color:#a8b9cb}.market-filter{flex:1;min-width:130px}.market-search{flex:2;min-width:210px}
.market-filters select,.market-filters input{width:100%;min-height:40px;box-sizing:border-box;border:1px solid #30435e;border-radius:8px;padding:8px 10px;color:#eef5ff;background:#11223a;font:inherit;font-size:14px}
.market-freshness{display:flex;flex-wrap:wrap;gap:8px 22px;font-size:12px;color:#9eafc5;padding-bottom:18px}.market-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.market-kpi{background:#102238;border:1px solid #263b55;border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:10px}.market-kpi span{font-size:13px;color:#b6c6d9}.market-kpi strong{font-size:34px;font-weight:600;color:#f3f8fc}.market-kpi small{color:#8ba1bb}
.market-categories{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}.market-category{border:1px solid #304760;background:#0d2035;color:#b3c6dd;border-radius:20px;padding:9px 15px;cursor:pointer}.market-category.is-active{border-color:#62c4b7;color:#8ee4d5;background:#123b3d}
.market-panel{background:#0e1d31;border:1px solid #253a53;border-radius:12px;margin:18px 0;padding:22px;min-width:0}.market-panel h2{font-size:19px;margin:0 0 12px}.market-panel h3{font-size:15px;margin:18px 0 12px}.market-section-heading>span{font-size:12px;color:#95a9c1}
.market-table-scroll{overflow-x:auto;max-width:100%}.market-table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:13px}.market-table th{font-weight:400;color:#8fa5bf;text-align:left;background:#11263e}.market-table th,.market-table td{padding:13px 12px;border-bottom:1px solid #23344a}.market-table tr:hover td{background:#13283e}.market-table a{color:#79c4f5}.market-model-link{border:0;background:transparent;color:#dcecff;padding:0;cursor:pointer;font:inherit;text-align:left;text-decoration:underline;text-underline-offset:4px}.market-pagination{display:flex;align-items:center;justify-content:flex-end;gap:15px;margin-top:16px;font-size:12px;color:#91a8c1}
.market-detail{border-color:#38645f}.market-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.market-trend-row{display:grid;grid-template-columns:70px 1fr 145px;align-items:center;gap:12px;font-size:12px;margin:16px 0}.market-trend-track{height:10px;background:#1d334b;border-radius:6px}.market-trend-bar{height:100%;background:#62bdb0;border-radius:6px}.market-scope{padding:12px 0;border-bottom:1px solid #233c50;font-size:13px}.market-scope summary{cursor:pointer}.market-alert{padding:14px 18px;border-left:3px solid #dfb16a;background:#2a251f;color:#eac587;border-radius:4px;font-size:13px}.market-empty{padding:48px 20px;text-align:center;color:#9bafc6}.market-method{padding:0 8px}.market-method summary{font-size:12px;cursor:pointer}
@media(max-width:800px){.market-dashboard{padding:18px 12px 110px}.market-heading h1{font-size:24px}.market-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.market-kpi{padding:16px}.market-kpi strong{font-size:28px}.market-panel{padding:15px}.market-detail-grid{grid-template-columns:1fr}.market-trend-row{grid-template-columns:62px 1fr 122px;gap:8px}.market-filters{gap:10px}.market-search{min-width:100%;}.market-table th,.market-table td{padding:12px 9px}.market-heading-actions{width:100%;justify-content:space-between}}

/* R16: fixed composer must never cover the last actionable row. */
:root { --input-dock-height: 180px; }
html { scroll-padding-bottom: calc(var(--input-dock-height) + 48px); }
.main { padding-bottom: calc(var(--input-dock-height) + 48px); }
.attn__identity { overflow-wrap: anywhere; font-size: var(--t-micro); color: var(--ink-3); }
.orgready--not_in_world { padding: 12px 16px; }
.orgready__detail, .need__secondary { margin: 12px 0; }
.orgready__detail summary, .need__secondary > summary { cursor: pointer; color: var(--ink-3); }
.need__secondary > summary { padding: 10px 0; }

body[data-identity-profile="DEMO"] { padding-top: var(--profile-banner-height, 44px); }

.main .page, .main .col-decision { padding-bottom: var(--s7); }

/* ICP footer persists through login, registration, navigation and boot errors. */
:root { --site-footer-height: calc(36px + env(safe-area-inset-bottom, 0px)); }
body { padding-bottom: var(--site-footer-height); }
.site-footer {
  position: fixed; inset: auto 0 0; z-index: 30;
  height: var(--site-footer-height);
  padding: 6px 12px calc(6px + env(safe-area-inset-bottom, 0px));
  display: flex; align-items: center; justify-content: center;
  background: var(--space); border-top: 1px solid var(--line);
  font-size: 12px; line-height: 24px;
}
.site-footer a { color: var(--ink-3); text-decoration: none; }
.site-footer a:hover { color: var(--ink); text-decoration: underline; }
.site-footer a:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.shell, .login-page, .register-page {
  min-height: calc(100vh - var(--site-footer-height) - var(--profile-banner-height, 0px));
}
.screen { min-height: calc(100vh - 68px - var(--site-footer-height)); }
.nl { bottom: var(--site-footer-height); }
html { scroll-padding-bottom: calc(var(--input-dock-height) + 48px + var(--site-footer-height)); }
